1、ansible

1、安装

配置腾讯yum源,阿里云报403,注意本地yum源也需要,有依赖

[epel]
name=epel
#baseurl=http://mirrors.aliyun.com/epel/7/x86_64
baseurl=https://mirrors.cloud.tencent.com/epel/7/x86_64/
gpgcheck=0
enable=1

yum clean all && yum makecache

yum -y install ansible

2、配置ansible管理节点和主机的连接

ssh-keygen

ssh-copy-id 20.81.11.81

ssh-copy-id 20.81.11.82
ansible all -m ping

3、ansible模块

ansible语法

ansible [主机清单] -m 模块 -a "参数"

ping模块

配置ansible主机清单
主机清单配置文件/etc/ansible/hosts

验证ansible
[root@m01 ~]# ansible oldboy -m ping

command命令模块

-a     就是基础命令模块常用命令使用
例子:
ansible [主机清单] -a "cat /etc/passwd"

shell命令模块

-m shell 对于偏复杂的命令使用,比如加cat 1|grep 1
例子:
ansible [主机清单] -m shell -a "cat 1|grep 1"

yum安装模块

-m yum  顾名思义用来安装的
参数:
name    ---指定要安装的软件包名称,如果有多个,用","隔开
state   ---指定使用yum的方法
 installed,present   ---安装软件包
 removed,absent      ---移除软件包
 latest               ---安装最新软件包
例子:
批量安装httpd和卸载
安装:ansible web -m yum -a "name=httpd state=installed"
卸载:ansible web -m yum -a "name=httpd state=removed"

copy推送文件模块

-m copy  推送文件,追加文件内容,附加文件权限
参数:
src           --- 推送数据的源文件信息
dest          --- 推送数据的目标路径
backup        --- 对推送传输过去的文件,进行备份
content       --- 直接批量在被管理端文件中添加内容
group         --- 将本地文件推送到远端,指定文件属组信息
owner         --- 将本地文件推送到远端,指定文件属主信息
mode          --- 将本地文件推送到远端,指定文件权限信息
例子:批量推送文件
ansible [主机清单] -m copy -a "src=/fzl/1 dest=/fzl"
例子2:批量送文件并备份
ansible [主机清单] -m copy -a "scr=/fzl/1 dest=/fzl backup=yes"   如果/fzl/有1这个文件就备份
例子3:添加文件追加内容(覆盖慎用)并附带文件用户和组和权限
ansible [主机清单] -m copy -a "content='rsync_backup:1' dest=/etc/rsync.password owner=root group=root mode=600"

service模块

-m service   相当于systemctl
参数:
name        # 定义要启动服务的名称
state       # 指定服务状态是停止或是运行,停止和运行指令要写成过去时
 started     # 启动
 stopped     # 停止
 restarted   # 重启
 reloaded    # 重载
enabled         # 是否让服务开启自启动
例子:
批量启动httpd服务,并添加一个首页,通过浏览器访问
ansible web -m service -a "name=httpd state=started enabled=yes"

group模块

-m group  
- gid
    设置组id
= name
    需要管理的组名
- state
    执行状态,absent 删除  
			  present 创建(默认)
例1:创建组名www,并设置gid 666
[root@m01 ~]# ansible all -m group -a "name=www gid=666"

例2:修改www组的gid为888
[root@m01 ~]# ansible all -m group -a "name=www gid=888"

例3:删除www组
[root@m01 ~]# ansible all -m group -a "name=www gid=888 state=absent"

user模块

-m user
= name
    用户名
- uid
    uid
- group
    gid或groupname
- state
    执行状态,absent 删除  
			 present 创建(默认)
- shell
    登录shell,/bin/bash(默认),/sbin/nologin
- create_home
    创建用户时,是否创建家目录,create_home=no
- password
    用户密码,不能使用明文,需用使用openssl加密后的密码

例1:创建一个用户oldboy,指定uid 60000,gid 666,并设置密码为123
注意:password不能使用明文,需要加密,password的加密值需用使用双引号
# -1使用MD5进行加密 -stdin 非交互式
[root@m01 ~]# echo "123"| openssl passwd -1 -stdin
$1$YmQSB.yb$EeZphDZ7ror/8dASNSM.c1
[root@m01 ~]# ansible backup -m user -a 'name=oldboy uid=60000 group=666 password="$1$DlBUYXav$VhZv.G3YmzG8T85sbfP3b1"'

例2:创建一个程序用户www,指定uid666 gid666 不让登录 不创建家目录
[root@m01 ~]# ansible all -m user -a "name=www uid=666 group=666 shell=/sbin/nologin create_home=no"

file模块

= path
    目标文件路径
	dest(和path等价)
	name(和path等价)
- src
    源文件路径
- owner
    属主
- group
    属组
- mode
    权限
- state
	absent 删除
	directory 创建目录
	file 修改文件属性(默认)
	touch 创建文件
	link hard 链接
- recurse
    递归
	recurse=yes

例1:创建目录/data和/backup,属主666,属组666,递归
[root@m01 ~]# ansible all -m file -a "path=/data owner=666 group=666 recurse=yes state=directory"

例2:创建文件/etc/rsync.password,权限600
[root@m01 ~]# ansible all -m file -a "path=/etc/rsync.password state=touch mode=600"

例3:对/etc/hosts做个软链接,到/tmp/hosts
[root@m01 ~]# ansible all -m file -a "src=/etc/hosts path=/tmp/hosts state=link"

总结:file模块仅适合创建目录,修改所属和权限,创建链接,除开这些操作的其他文件管理都通过copy模块实现

mount模块

= path
    挂载点
- src
    需要挂载的设备
- fstype
    挂在设备的文件系统
	iso9660 光驱
	ext4
	xfs
	nfs
	cifs samba的共享文件系统
	ntfs windows磁盘文件系统
- opts
    挂载属性
		noatime
		noexec
		nosuid
= state
    挂载动作
		present     # 开机挂载,仅将挂载配置写入/etc/fstab
		mounted     # 挂载设备,并将配置写入/etc/fstab
		unmounted   # 卸载设备,不会清除/etc/fstab写入的配置
		absent      # 卸载设备,会清理/etc/fstab写入的配置
		
例1:通过nfs实现网络文件共享(综合小实验)
1)安装nfs
[root@m01 ~]# ansible nfs -m yum -a "name=nfs-utils state=installed"

2)启动服务
[root@m01 ~]# ansible nfs -m service -a "name=rpcbind state=started"
[root@m01 ~]# ansible nfs -m service -a "name=nfs state=started"

3)修改配置文件
方法一:在m01创建配置文件,使用copy模块推给nfs(建议使用)

[root@m01 ~]# mkdir -p /server/conf
[root@m01 ~]# echo '/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)' >/server/conf/exports
[root@m01 ~]# ansible nfs -m copy -a "src=/server/conf/exports dest=/etc/"
方法二:在m01上直接使用copy模块,推送文件内容
[root@m01 ~]# ansible nfs -m copy -a "content='/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)' dest=/etc/exports"

4)创建目录,用户,并修改所属
通过user group file模块来实现,参考上面的例子

5)重载配置文件
[root@m01 ~]# ansible nfs -m service -a "name=nfs state=restarted"

6)在web上挂载nfs的共享目录
[root@m01 ~]# ansible web -m mount -a "src=172.16.1.31:/data path=/var/www/html fstype=nfs state=mounted"

script模块

1)写个脚本,创建用户,并配置密码
[root@m01 scripts]# cat 1.sh 
#!/bin/bash
useradd oldgirl
echo 123 |passwd --stdin oldgirl &>/dev/null && echo     "创建密码成功"
2)运行脚本
[root@m01 ]# ansible all -m script -a "/server/scripts/1.sh"


cron模块

1)推送脚本至每台受控端
[root@m01 ]# ansible all -m file -a "path=/server/scripts state=directory mode=700"
[root@m01 ]# ansible all -m copy -a "src=/server/scripts/rsync_backup.sh dest=/server/scripts"

2)创建计划任务
- name
    描述,必须要写,如果不写,默认为None,会导致无法指定删除某条计划任务
- job
    任务(命令)
- state
    执行状态,absent 删除  
			  present 创建(默认)
disabled      注释定时任务
    true      关闭
    false     开启
    
- minute
    Minute when the job should run ( 0-59, *, */2, etc )
    [Default: *]
- hour
    Hour when the job should run ( 0-23, *, */2, etc )
    [Default: *]
- day
    Day of the month the job should run ( 1-31, *, */2, etc )
    (Aliases: dom)[Default: *]		
- month
    Month of the year the job should run ( 1-12, *, */2, etc )
    [Default: *]
- weekday
    Day of the week that the job should run ( 0-6 for Sunday-Saturday, *, etc )
    (Aliases: dow)[Default: *]
 
例子:每天的凌晨1点执行rysnc_bakcup.sh
[root@m01 ]# ansible all -m cron -a "name='Rsync Backup' hour=1 minute=0 job='/bin/sh /server/scripts/rsync_backup.sh &>/dev/null'"

例子:注释定时任务
ansible all -m cron -a "disabled=true job='/bin/sh /server/scripts/rsync_backup.sh &>/dev/null' name='Rsync Backup'"


unarchive模块

功能:解压缩
-m unarchive
unarchive模块有两种解压缩方式,一种是在ansible主机上解压缩后传到主机清单上的服务器。
第二种是在主机清单上解压缩。

参数:
src  需要解压缩我文件(绝对路径)
dest 解压缩后指定的目录
copy
    yes
    no
选择解压缩方式:一和二(上面有一和二是区别)
mode:设置解压缩后的文件权限

例子:
ansible pms -m unarchive -a 'src=/srv/tomcat8/apache-tomcat-8.0.29.tar.gz dest=/usr/local copy=no mode=0755'

wait_for模块

setup模块

fetch模块

功能:拉取被管理机的文件到本地,目前只支持单个文件

参数:
src           被管理端需要被拉取的文件
dest          管理端存放拉取到的文件位置     

例子:
ansible web -m fetch -a "src=/testdir/testfile1 dest=/testdir/ansible/"

功能:
lineinfile模块用于替换文本内容和删除文本内容

参数:
path         指定要操作的文件对象 
dest         指定要操作的文件对象
regexp       使用正则表达式(匹配条件,用于替换文件内容使用)
state        当需要删除对应文本时,需要设置state值absent,absent为缺席之意,表示删除,默认值present
insertbefore 在某行之前插入
insertafter  在莫行之后插入
line         要写入文件的内容

例子:
在文件末行插入文件
ansible [清单] -m lineinfile -a 'path=/root/test.txt insertafter="EOF" line="1"'
在文件首行插入文件
ansible [清单] -m lineinfile -a 'path=/root/test.txt insertbefore="BOF" line="1" state=present'
替换某行内容
ansible [清单] -m lineinfile -a 'path=/root/test.txt regexp=5 line=1'
删除某行内容
ansible [清单] -m lineinfile -a 'path=/root/test.txt regexp="1" state=absent'

synchronize模块

rsync模块

filesysten模块

功能:
在块设备上创建文件系统

参数:
dev:目标块设备
force:在一个已有文件系统 的设备上强制创建    
fstype:文件系统的类型
opts:传递给mkfs命令的选项

例子:
ansible test -m filesystem -a 'fstype=ext2 dev=/dev/sdb1 force=yes'
ansible test -m filesystem -a 'fstype=ext4 dev=/dev/sdb1 opts="-cc"'

get_url模块

功能:
用于从http、ftp、https服务器上下载文件(类似于wget)


参数:
sha256sum:下载完成后进行sha256 check;
timeout:下载超时时间,默认10s
url:下载的URL
url_password、url_username:主要用于需要用户名密码进行验证的情况
use_proxy:是事使用代理,代理需事先在环境变更中定义

例子:
get_url: url=http://example.com/path/file.conf dest=/etc/foo.conf mode=0440
get_url: url=http://example.com/path/file.conf dest=/etc/foo.conf sha256sum=b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c

debug模块

hostname模块

ansible web -m hostname -a "name=node"
 


posted @ 2023-12-07 11:44  old_bird  阅读(3)  评论(0编辑  收藏  举报