Ansible常用模块

131 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。​​​​​​​​​​​​​​ ​

 ansible常用模块:

  • command

命令中使用-m来指定具体的模块,默认情况下不指定-m时是使用command模块:

#查看usr目录

ansible all -m command -a 'ls /usr'

ansible all -a 'ls /usr'
  • shell
#创建文件
ansible all -m shell -a '> /usr/test.txt'

#创建文件
ansible all -m shell -a 'touch /usr/test.sh'

#删除文件
ansible all -m shell -a 'rm -f /usr/test.sh'

#查看usr目录
ansible all -m shell -a 'ls /usr'
  • script
#执行某个脚本
ansible all -m script -a '/usr/test.sh'

使用scirpt模块可以直接将主控机器上的脚本在被控机器上执行
  • copy
#将主控机器上的文件拷贝到被控主机上,同时可以加上mode、owner等参数对文件权限进行修改
ansible all -m copy -a 'src=/usr/local/test.txt dest=/usr'


#在被控机器上创建文件并添加内容
ansible all -m copy -a 'content="Hello World!" dest=/usr/testcopy.txt'
  • fetch

fetch模块的功能与copy模块类似,但是fetch是从远程被控主机上拉取文件放到主控机器上。

通过ansible-doc fetch命令可以看到fetch只能拉取单个文件,而不能拉取目录:

对于拉取过来的文件,会在主控机器上dest指定的目录下创建一个以被控主机命名的目录,然后加上被拉取的文件的路径:

#将被控主机的test.txt文件拷贝到主控机器上的local目录下
ansible all -m fetch -a "src=/usr/local/wyh/test.txt dest=/usr/local"

可以看到在主控机器上的dest指定目录下生成了上述的一串目录:

  •  file

 file模块中的参数path可以替换为name/dest:

#创建test0814文件
ansible all -m file -a 'dest=/usr/local/wyh/test0814 state=touch'

#删除文件
ansible all -m file -a 'path=/usr/local/wyh/test0814 state=absent'

#创建目录
ansible all -m file -a 'path=/usr/local/wyh/testdir state=directory'

#删除目录
ansible all -m file -a 'path=/usr/local/wyh/testdir state=absent'

#创建软链接
ansible all -m file -a 'src=/usr/local/wyh/test dest=/usr/local/test.link state=link'

#删除软链接(删除之后src的目录是还存在的)
ansible all -m file -a 'dest=/usr/local/test.link state=absent'   
  •  hostname
#修改hostname
ansible 192.168.184.129 -m hostname -a 'name=129node'
  • cron
#创建一个每两分钟执行一次的任务,任务为输出自定义的语句
ansible all -m cron -a 'name=test-cron minute=*/2 job="echo test cron module"'

可以在被控主机上看到已经创建了任务:
[root@localhost etc]# crontab -u root -l

[root@localhost etc]# crontab -e

#禁用创建的定时任务(disabled的值可以是yes/no/true/false)
ansible all -m cron -a 'disabled=true name=test-cron job="echo test cron module"'

 禁用之后再去被控机器上查看任务就会发现它已经被注释掉了:

但是在上面的例子中可以发现任务被注释掉时的cron表达式发生了变化,全部变成了* * * * ,所以为了保持原有的cron表达式,我们在执行disable时需要把原来指定的执行时间也加上,这个时间要和原来保持一致,禁用之后如果需要重新启用时,参数中也必须指定时间,否则还是全。另外还有一个参数backup,这个是用来在对原有的任务做修改或删除操作时先进行备份,为了安全起见,我们也把这个参数设置为yes。

重新创建一个任务,然后在disable禁用/启用时加上时间,这时注释掉时就不会把时间修改为全*了:

ansible all -m cron -a 'name=0814 job="echo 0814" hour=*/3'

ansible all -m cron -a 'disabled=true name=0814 job="echo 0814" hour=*/3 backup=yes'

ansible all -m cron -a 'disabled=no name=0814 job="echo 0814" hour=*/3'

#删除任务
ansible all -m cron -a 'name=0814 job="echo 0814" state=absent'
  •  yum

 要想使用yum模块,首先必须保证被控机器上是有yum源的:

#安装tree(这里使用按抓个tree来做测试,由于state的默认值是present,所以安装时可以不写state)
ansible all -m yum -a 'name=tree state=present'

执行前,被控机器上没有tree命令:

执行后:

 也可以使用list参数来查看不同状态的列表:

#查看已经install的命令
ansible all -m yum -a 'list=installed'

#一次安装多个
ansible all -m yum -a 'name=a,b,c,d'

#如果想要把主控机器上的rpm包放在被控机器上然后安装,可以先使用copy模块将rpm包放到被控机器上,然后在使用yum模块进行安装
ansible all -m yum -a 'name=/usr/local/xxxxxx.rpm'
  •  service
#启动httpd
ansible all -m service -a 'name=httpd state=started'