Ansible知识点总结
安装ansible
在eple源中
yum install ansible -y
分发公钥到客户端 ssh-copy-id
vim /etc/ansible/hosts 主机管理清单
ansible-doc -s 模块名 #获取指定模块的使用帮助
基本语法如下
ansible 主机名 -m 模块名称 -a 模块特有参数
1、command模块
ansible skyhu -m command -a "ls"
2、shell 模块 支持管道
shell模块用于在受控机上执行受控机上的脚本,亦可直接在受控机上执行命令。
ansible skyhu -m shell -a '/bin/bash /scripts/test.sh &> /tmp/test'
ansible skyhu -m shell -a "echo "12345678" |passwd --stdin skyhu"
raw 模块
raw模块用于在远程主机上执行命令,其支持管道符与重定向
ansible skyhu -m raw -a 'echo "hello world" > /tmp/test'
script 模块
script模块用于在受控机上执行主控机上的脚本
ansible skyhu -m script -a '/etc/ansible/scripts/a.sh &>/tmp/a'
3、copy 模块
这个模块用于将文件复制到远程主机,同时支持给定内容生成文件和修改权限等ansible skyhu -m copy -a "src=/root/test dest=/root mode=644 backup=yes"
4、file 模块
该模块主要用于设置文件的属性,比如创建文件、创建链接文件、删除文件等
force #需要在两种情况下强制创建软链接,一种是源文件不存在,但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no
group #定义文件/目录的属组。后面可以加上mode:定义文件/目录的权限
owner #定义文件/目录的属主。后面必须跟上path:定义文件/目录的路径
recurse #递归设置文件的属性,只对目录有效,后面跟上src:被链接的源文件路径,只应用于state=link的情况
dest #被链接到的路径,只应用于state=link的情况
state #状态,有以下选项:directory:如果目录不存在,就创建目录 file:即使文件不存在,也不会被创建 link:创建软链接hard:创建硬链接touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间absent:删除目录、文件或者取消链接文件
ansible skyhu -m file -a "path=/root/file state=directory" #创建目录
ansible skyhu -m file -a "path=/root/link src=/root/test_link state=link" #创建链接文件,src是源文件,path是快捷图标
ansible skyhu -m file -a "dest=/root/link2 src=/root/test_link state=link" #跟上面的一个效果
ansible skyhu -m file -a "path=/root/link state=absent" #删除目录或文件
ansible skyhu -m file -a "path=/root/skyhu owner=skyhu group=skyhu mode=644 recurse=yes #修改权限和属主 recurse递归设置
5、fetch模块
该模块用于从远程某主机获取(复制)文件到本地。
ansible skyhu -m fetch -a "dest=/root/data src=/root/test" # **dest:用来存放文件的目录 src:在远程拉取的文件,并且必须是一个file,不能是目录**
6、cron 模块
该模块适用于管理cron计划任务的。
minute=/hour=/day=/month=/weekday= 某个值不写,默认就是*
name:必选项,任务描述信息
job:执行的任务,要加引号
state:present(创建)/absent(删除)
ansible skyhu -m cron -a 'name="ntp update every 5 min" minute=*/5 job="/sbin/ntpdate 172.17.0.1 &> /dev/null"'
ansible skyhu -m cron -a 'name="ntp update every 5 min" minute=*/5 job="/sbin/ntpdate 172.17.0.1 &> /dev/null" state=absent'
7、yum模块
该模块主要用于软件的安装。
name= #所安装的包的名称
state= #present--->安装, latest--->安装最新的, absent---> 卸载软件。
ansible skyhu -m yum -a "name=wget state=present" #安装wget
8、service 模块
该模块用于服务程序的管理。
enabled #设置开机启动。
name= #服务名称
sleep #在重启服务的过程中,是否等待。如在服务关闭以后等待2秒再启动。(定义在剧本中。)
state #有四种状态,分别为:started--->启动服务, stopped--->停止服务, restarted--->重启服务, reloaded--->重载配置
ansible skyhu -m service -a "name=nginx state=started enabled=true" #启动nginx 并开机自启动
9、user模块
该模块主要是用来管理用户账号。
createhome # 是否创建家目录
group # 指定基本组
groups # 指定附加组,如果指定为(groups=)表示删除所有组
home # 指定用户家目录
name # 指定用户名
password # 指定用户密码
remove # 配合state=absent使用,删除用户的家目录->remove=yes
shell # 指定默认shell
state # 设置帐号状态,不指定为创建,指定值为absent表示删除
uid # 指定用户的uid
ansible skyhu -m user -a "name=test2 state=present groups=test2 shell=/bin/bash append=yes"
ansible all -i localhost, -m debug -a "msg={{ '123456' | password_hash('sha512','sky01') }}" #生成密文密码
"msg": "$6$sky01$Ppe22caGxlbHwCR5biZ0oCcMa63McBIBgXD3RIkO080MckocOdUl2/SpKWUgPCdAOOE1Yjzyb5Oir2vgOjVwL/" }
ansible skyhu -m user -a 'name=skyhu3 password=$6$sky01$Ppe22caGxlbHwCR5biZ0oCcMa63McBIBgXD3RIkO080MckocOdUl2/SpKWUgPCdAOOE1Yjzyb5Oir2vgOjVwL/ state=present' #注意要用单引号
10、group 模块
该模块主要用于添加或删除组
gid= #设置组的GID号
name= #指定组的名称
state= #指定组的状态,默认为创建,设置值为absent为删除
system= #设置值为yes,表示创建为系统组
ansible skyhu -m group -a 'name=skyhu3 gid=1008' #创建skyhu3组 gid为1008
ansible skyhu -m shell -a 'usermod -g root skyhu3 ' #修改用户到别的组
ansible skyhu -m group -a 'name=skyhu3 state=absent' #删除组前需要用户没有在这个skyhu3组
11、script 模块
该模块用于将本机的脚本在被管理端的机器上运行。
[root@server ~]# vim /tmp/df.sh
#!/bin/bash
date >> /tmp/disk_total.log
df -lh >> /tmp/disk_total.log
[root@server ~]# chmod +x /tmp/df.sh
ansible skyhu -m script -a '/tmp/df.sh' #控制端路径下的sh,直接运行命令来实现在被管理端执行该脚本
ansible skyhu -m shell -a 'cat /tmp/disk_total.log' #查看
12、setup 模块
该模块主要用于收集信息,是通过调用facts组件来实现的。
ansible skyhu -m setup -a 'filter="*mem*"' #查看内存
ansible web -m setup -a 'filter="*mem*"' --tree /tmp/facts #保存我们所筛选的信息至我们的主机上 /tmp/facts 下
13、mount 模块
- fstype:必选项,挂载文件的类型
- name:必选项,挂载点
- opts:传递给mount命令的参数
- src:必选项,要挂载的文件
- state:必选项
- present:只处理fstab中的配置
- absent:删除挂载点
- mounted:自动创建挂载点并挂载之
- unmounted:卸载
挂载
ansible test1 -m mount -a 'name=/mnt src=/dev/loop1 fstype=ext3 state=mounted opts=rw'
卸载
ansible skyhu -m mount -a "name=/mnt src=/dev/loop1 fstype=ext3 state=unmounted"
14、lineinfile模块
| path | 指定要操作的文件对象 |
| regexp | 匹配条件 |
| insertbefore | 在某行之前插入 |
| insertafter | 在某行之后插入 |
| line | 要写入文件的内容 |
例:未行加入一行
ansible 172.22.108.102 -m lineinfile -a "dest=/etc/profile line='alias srun='srun -c2''"
如需要里面支持单引号 需要加转义\
1. 使用lineinfile模块在配置文件末行插入内容
[root@localhost ~]# ansible webservers -m lineinfile -a 'path=/root/nginx.conf insertafter="EOF" line="#nginx configuration file"'
2. 在文件首行插入内容
[root@localhost ~]# ansible webservers -m lineinfile -a 'path=/root/nginx.conf insertbefore="BOF" line="#this is configuration file for nginx" state=present'
3. 在指定行前/后插入内容
insertafter和insertbefore用法相同 只举一例
需要注意的是 它们都要和state搭配使用 否则会执行失效
此操作的意思是 在配置文件# root /usr/share/nginx/html;行下插入一行内容# root /usr/local/nginx/html
[root@localhost ~]# ansible webservers -m lineinfile -a 'path=/root/nginx.conf insertafter="# root /usr/share/nginx/html;" line="# root /usr/local/nginx/html;" state=present'
4. 删除文件某行内容
[root@localhost ~]# ansible webservers -m lineinfile -a 'path=/root/nginx.conf regexp="# root