安装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   

标签: ansible

添加新评论