三、Ansible命令模块
命令格式: ansible <组名> -m <模块> -a <参数列表>
ansible-doc -l #查询所有已安装的模块,按q退出
有三千多个模块,我们只需要学习常用的
3.1 command模块
在远程主机执行命令,不支持管道,重定向等shell的特性。
ansible-doc -s command #-s 列出指定模块的描述信息和操作动作 ansible 192.168.109.131 -m command -a 'ifconfig' #指定ip执行命令 ansible webservers -m command -a 'free' #指定组执行命令 ansible dbservers -m command -a 'free' ansible all -m command -a 'date' #all代表所有 hosts 主机 ansible all -a 'date' #如省略 -m 模块,则代表为默认的 command 模块 ###常用用参数 chdir:在远程主机上运行命令前提前进入目录 creates:判断指定文件是否存在,如果存在,不执行后面的操作 removes:判断指定文件是否存在,如果存在,执行后而的操作
3.1.1 示例:chdir
[root@localhost opt]# ansible dbservers -m command -a 'chdir=/opt ls ./' 192.168.109.132 | CHANGED | rc=0 >> rh
3.1.2 示例:creates
#判断指定文件是否存在,如果存在,不执行后面的操作 [root@localhost opt]# ansible dbservers -m command -a 'creates=/opt/123.txt echo helloworld >/opt/123.txt ' 192.168.109.132 | CHANGED | rc=0 >> helloworld >/opt/123.txt #切换132机子查看 [root@localhost opt]# ls 123.txt rh
3.1.3 示例:removes
#判断指定文件是否存在,如果存在,执行后而的操作 [root@localhost opt]# ansible dbservers -m command -a 'removes=/opt/123.txt touch /opt/123.txt' [WARNING]: Consider using the file module with state=touch rather than running 'touch'. If you need to use command because file is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of this message. 192.168.109.132 | CHANGED | rc=0 >> [root@localhost opt]# ansible dbservers -m command -a 'removes=/opt/123.txt rm -f /opt/123.txt' [WARNING]: Consider using the file module with state=absent rather than running 'rm'. If you need to use command because file is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of this message. 192.168.109.132 | CHANGED | rc=0 >> [root@localhost opt]# ansible dbservers -m command -a 'removes=/opt/123.txt touch /opt/123.txt' 192.168.109.132 | SUCCESS | rc=0 >> skipped, since /opt/123.txt does not exist
3.2 shell模块
在远程主机执行命令,相当于调用远程主机的shell进程,然后在该shell 下打开一个子shell运行命令(支持管道符号等功能)
ansible-doc -s shell #写入helloworld到123.txt [root@localhost opt]# ansible dbservers -m shell -a 'echo helloworld >/opt/123.txt ' 192.168.109.132 | CHANGED | rc=0 >> #过滤IP地址 [root@localhost opt]# ansible dbservers -m shell -a 'ifconfig ens33|awk "NR==2 {print \$2}"' 192.168.109.132 | CHANGED | rc=0 >> 192.168.109.132
3.3 cron模块
在远程主机定义任务计划,其中有两种状态(state):present表示添加(可以省略),absent表示移除。
ansible-doc -s cron #查看相关说明,按q退出 常用参数: minute/hour/day/month/weekday:分/时/日/月 /周 job:任务计划要执行的命令 name :任务计划的名称 #每两个月的10号的早上和晚上十点的第十分钟执行一次复制系统内核日志到/opt/ linux:10 10,22 10 */2 * /usr/bin/cp /var/log/messages /opt ansible: [root@localhost opt]# ansible dbservers -m cron -a 'minute="10" hour="10,20" day="10" month="*/2" job="/usr/bin/cp /var/log/messages /opt" name="test crontab"' 192.168.109.132 | CHANGED => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": true, "envs": [], "jobs": [ "test crontab" ] } #查看任务列表 [root@localhost opt]# ansible dbservers -a 'crontab -l' 192.168.109.132 | CHANGED | rc=0 >> #Ansible: test crontab 10 10,20 10 */2 * /usr/bin/cp /var/log/messages /opt [root@localhost opt]# #切换到132机子上传查看 [root@localhost opt]# crontab -l #Ansible: test crontab 10 10,20 10 */2 * /usr/bin/cp /var/log/messages /opt
3.4 user模块
用户管理模块
ansible-doc -s user 常用的参数: name :用户名,必选参数 state=present|absent:创建账号或者删除账号,present表示创建,absent 表示删除 system=yes|no:是否为系统账号 uid: 用户uid group:用户基本组 groups:附加组 shell:默认使用的shell move_home=yse|no:如果设置的家日录已经存在,是否将已经存在的家日录进行移动 password:用户的密码,建议使用加密后的字符串 comment:用户的注释信息 remove=yes|no:当state=absent时, 是否删除用户的家目录 ansible webservers -m user -a 'name="test001"' #创建 ansible webservers -m command -a 'tail -1 /etc/passwd' #查看确认 ansible webservers -m user -a 'name="test001" state=absent' #删除 ansible webservers -m command -a 'tail -1 /etc/passwd' #查看确认
3.5 group模块
用户组管理的模块
ansible-doc -s group #查看相关文档 ansible dbservers -m group -a 'name=mysql gid=300 system=yes' ansible dbservers -m command -a 'tail -1 /etc/group' ansible dbservers -m user -a 'name="test002" uid=300 system=yes group=mysql' ansible dbservers -m command -a 'tail -2 /etc/passwd' ansible dbservers -a 'id test002'
3.6 copy模块
用于复制指定主机文件到远程主机上
ansible-doc -s copy #查看相关文档 ##常用参数 dest:指出复制文件的日标及位置,使用绝对路径,如果是源目录,指目标也要是目录,如果目标文件已经存在会覆盖原有的内容 src:指出源文件的路径,可以使用相对路径或绝对路径,支持直接指定目录,如果源是目录则目标也要是目录 mode:指出复制时,目标文件的权限 owner:指出复制时,目标文件的属主 group:指出复制时,目标文件的属组 content:指出复制到目标主机上的内容,不能与src一起使用 ##测试创建文件并修改权限 ansible dbservers -a 'mkdir /test' ansible dbservers -m copy -a 'src=/etc/passwd dest=/test/passwd.bak owner=root mode=640' ansible dbservers -a 'ls -l /test' ##测试创建文件并写入内容 ansible dbservers -m copy -a 'content="this is test txt" dest=/test/test.txt' ansible dbservers -a 'ls -l /test' ansible dbservers -a 'cat /test/test.txt'