Ansible 常用模块与命令

178 阅读4分钟

可使用ansible-doc 查看ansible各个模块的使用方法

$ ansible-doc -l \列出所有模块

$ ansible-doc modulename \查询某个模块使用方法

$ ansible-doc -s modulename \查询某个模块使用方法 (以简洁的方式)

ansible 命令的基本语法:ansible -i inventory pattern -m module -a argument

-i 指定资产配置文件(主机清单文件)

pattern 资产清单中的组别/ip

-m 指定功能模块

-a 指定模块的参数

总结:ansible 可通过指定某功能模块对远程主机进行相关操作

资产选择方式:选择一台或几台服务器

ansible寻找主机清单会先从当前目录下的hosts中查找,然后是默认主机清单文件/etc/ansible/hosts,可通过修改ansible.cfg来设置默认清单的路径

$ ansible all -m ping //选择默认资产中的所有主机

$ ansible 10.53.31.116 -m ping //从默认资产中读取某ip(10.53.31.116)

$ ansible 10.53.31.116 -i /root/ansible/hosts -m ping //指定资产配置文件

$ ansible kafka -i /root/ansible/hosts -m ping //选择某资产配置文件中的kafka组

$ ansible 10.50.* -m ping //可通过*匹配到ip

常用模块

  1. command 和 shell 模块

都是用于在远程机子上执行命令

区别:shell 模块可以使用一些特殊符号 而 command 不行

举个栗子:在被管理的机子上执行 ls /root 可以用 shell 或 command:

$ ansible all -m shell -a "ls /root"

$ ansible all -m command -a "ls /root"

但执行 ls /root | grep 'test' 因为有特殊符号管道符 | ,只能使用shell执行

$ ansible all -m shell -a "ls /root | grep test"

  1. script 模块

可将本机的脚本传递到被管理节点上并执行,命令格式如下

$ ansible all -m script -a "/root/ansible/test.sh"

  1. copy 模块

用于文件传输管理、常用参数如下:

src 源文件

dest 目标目录/文件

backup 拷贝文件前若原文件发生了变化,则对原目标文件进行备份

woner 指定所有者

group 指定所有组

mode 指定权限

举个栗子:

1.copy源文件到被管理的机子

$ ansible all -m copy -a "src=/root/ansible/test.sh dest=/tmp"

2.添加backup参数,在copy前先将目录下同名但内容不同的文件进行备份

$ ansible all -m copy -a "src=/root/ansible/test.sh dest=/tmp backup=yes"

3.指定所有者和所属组

$ ansible all -m copy -a "src=/root/ansible/copy.txt dest=/tmp owner=nobody group=nobody"

4.指定文件权限

$ ansible all -m copy -a "src=/root/ansible/copy.txt dest=/tmp m

ode=0644"

4)yum repository模块

用于管理远程主机上的yum源,常用参数有:

name 仓库名称(必要)

description 仓库描述信息 (必要)

baseurl yum存储仓库“repodata”目录所在的目录的URL(必要)

file 仓库文件保存到本地的文件名

state preset --确认添加仓库文件,absent确认删除仓库文件

gpgcheck: 是否检查GPG

举个栗子:为远程主机安装epel源

ansibleallmyumrepositorya"name=epelbaseurl=<https://download.fedoraproject.org/pub/epel/> ansible all -m yum_repository -a "name=epel baseurl='<https://download.fedoraproject.org/pub/epel/>releasever/$basearch' description='EPEL YUM repo'"

删除epel源

$ ansible all -m yum_repository -a "name=epel state=absent"

  1. yum 模块

用于安装和卸载某软件包、常用参数如下:

name: 要安装的软件包名

state: 对软件包进行安装或卸载操作,state支持的参数:

  • present 确认已安装但不升级
  • installed 确认已经安装
  • latest 确保安装且升级为最新
  • absent / removed 确认已移除 举个栗子: ansibleallmyuma"name=nginxstate=installed"//安装nginxansible all -m yum -a "name=nginx state=installed" //安装nginx ansible all -m yum -a "name=nginx state=removed" //卸载nginx 6)systemd 模块 用于管理远程主机上的服务,相当于systemctl命令 常用参数: daemon_reload、enabled、name、state(started,stopped,restarted,reloaded) 举个栗子:重新加载systemd ansibleallmsystemda"daemonreload=yes"启动/重启nginx服务:ansible all -m systemd -a "daemon_reload=yes" 启动/重启nginx服务: ansible all -m systemd -a "name=nginx state=started" //启动 ansibleallmsystemda"name=nginxstate=restarted"//重启ansible all -m systemd -a "name=nginx state=restarted" //重启 ansible all -m systemd -a "name=nginx state=stopped" //停止 7)file 模块 用于远程主机上的文件操作,常用参数如下: group 定义属组 mode 定义权限 owner 定义属主 path 指定文件路径 recurse 递归创建文件属性 src 软/硬链接的源文件路径 dest 软/硬链接的目标文件路径 state: directory|touch|link|hard|absent:依次对应 目录|文件|软链接|硬链接|删除 举个栗子: 创建和删除文件/目录 ansibleallmfileapath=/tmp/filestate=touch创建文件ansible all -m file -a 'path=/tmp/file state=touch' 创建文件 ansible all -m file -a 'src=/tmp/file dest=/tmp/file_link state=link' 创建软连接 ansibleallmfilea"path=/tmp/filelinkstate=absent"取消软连接ansible all -m file -a "path=/tmp/file_link state=absent" 取消软连接 ansible all -m file -a 'path=/tmp/file state=absent' 删除文件 ansibleallmfileapath=/tmp/teststate=directory创建目录ansible all -m file -a 'path=/tmp/test state=directory' 创建目录 ansible all -m file -a 'path=/tmp/test state=absent' 删除目录 8)cron 模块 用于管理远程主机中的计划任务,常用参数如下 name 指定任务名称,可以根据任务名称修改或删除对应的任务;搭配state使用 job 要执行的内容 state absent表示删除对应的任务 minute 指定分钟,可以设置成(0-59,,/2)等格式 hour 指定小时 day 指定日 month 指定月 weekday 指定周几,可以设置(0-6,)等格式 special_time: user 指定计划任务属于哪个用户,默认管理员用户 backup backup=yes表示修改或删除对应计划任务时,会先进行备份,备份路径/tmp/crontab+随机字符 reboot|yearly|monthly|weekly|daily|hourly,都未指定时表示每分钟执行 disabled 注释计划任务,使其失效;但是一定要写全原任务的name,minute,hour,month,weekday,job,如果不一样,则是修改原计划任务内容 举个栗子:创建和删除计划任务 ansibleallmcrona"name=testtoansiblejob=ls/tmpminute=/2"ansible all -m cron -a "name='test to ansible' job='ls /tmp' minute='/2'" ansible all -m cron -a "name='test to ansible' state=absent" 9)template 模块 用于将变量参数打印出来 参数: src 指定控制端文件路径 dest 被控端文件路径 owner 文件属主 group 文件属组 mode 文件权限 backup 创建一个时间戳的备份文件 使用template模块传输一个文件并传参: ansibleallmtemplatea"src=/root/ansible/hello.world.j2dest=/tmp/hello.world"e"var=world"10unarchive模块用于解压缩软件包,这个模块有两种用法:1、将压缩包在本地解压缩后传到远程主机上,这种情况下,copy=yes(默认的)2、将远程主机上的某个压缩包解压缩到指定路径下。这种情况下,需要设置copy=no常用参数:src源路径,可以是ansible主机上的路径,也可以是远程主机上的路径dest远程主机上的目标路径mode设置解压缩后的文件权限举个例子:将ansible本机的压缩包解压到远程主机的/tmp目录下ansible all -m template -a "src=/root/ansible/hello.world.j2 dest=/tmp/hello.world" -e "var=world" 10)unarchive 模块 用于解压缩软件包,这个模块有两种用法: 1、将压缩包在本地解压缩后传到远程主机上,这种情况下,copy=yes(默认的) 2、将远程主机上的某个压缩包解压缩到指定路径下。这种情况下,需要设置copy=no 常用参数: src 源路径,可以是ansible主机上的路径,也可以是远程主机上的路径 dest 远程主机上的目标路径 mode 设置解压缩后的文件权限 举个例子:将ansible本机的压缩包解压到远程主机的/tmp目录下 ansible all -m unarchive -a "src=/root/ansible/node_exporter-1.2.2.linux-amd64.tar.gz dest=/tmp"