ansible常用模块介绍
- 0. Ansible 特性
- 1. ansible常用模块
- 1.1 command 模块
- 1.2 shell 模块
- 1.3 script模块
- 1.4 copy模块
- 1.5 fetch模块
- 1.6 file 模块
- 1.7 get_url 模块
- 1.8 stat 模块
- 1.9 unarchive 模块
- 1.10 archive模块
- 1.11 hostname 模块
- 1.12 cron模块
- 1.13 yum和apt模块
- 1.14 yum_repository模块
- 1.15 service 模块
- 1.16 USER模块
- 1.17 group 模块
- 1.18 lineinfile 模块
- 1.19 Replace模块
- 1.20 SELinux模块
- 1.21 reboot模块
- 1.22 mount模块
- 1.23 setup 模块
- 1.24 debug模块
0. Ansible 特性
- 模块化:调用特定的模块完成特定任务,支持自定义模块,可使用任何编程语言写模块
- Paramiko(python对ssh的实现),PyYAML,Jinja2(模板语言)三个关键模块
- 基于Python语言实现
- 部署简单,基于python和SSH(默认已安装),agentless,无需代理不依赖PKI(无需ssl)
- 安全,基于OpenSSH
- 幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况,此特性非绝对
- 支持playbook编排任务,YAML格式,编排任务,支持丰富的数据结构
- 较强大的多层解决方案 role
1. ansible常用模块
1.1 command 模块
功能:在远程主机执行命令,此为默认模块,可忽略 -m 选项
注意:此命令不支持 $VARNAME < > | ; & 等,可能用shell模块实现
1.2 shell 模块
功能:和command相似,用shell执行命令,支持各种符号,比如:*,$, >是增强版的command模块.
默认情况下需要 -m shell 来指定,可以修改配置文件将默认模块换成shell(也可以默认其他模块)
示例:
将shell模块设置成默认模块
vim /etc/ansible/ansible.cfg
替换后的效果
1.3 script模块
功能:在远程主机上运行ansible服务器上的脚本(无需执行权限)
示例:
ansible dbserver -m script -a '/root/hostname.sh'
1.4 copy模块
功能:从ansible服务器主控端复制文件到远程主机
示例:
ansible webserver -m copy -a 'src=/root/hostname.sh dest=/opt/host.sh owner=root group=bin mode=700'
1.5 fetch模块
功能:从远程主机提取文件至ansible的主控端,copy相反,目前不支持目录
ansible webserver -m fetch -a 'src=/var/log/messages dest=/opt/log'
1.6 file 模块
功能:设置文件属性,创建软链接等
创建文件和文件夹
文件 state=touch
文件夹 state=directory
软连接 state=link src=xxx dest=xxx state=link
递归修改 recurse=yes
删除 state=absent
1.6.1 创建文件
ansible webserver -m file -a 'path=/opt/a.txt state=touch owner=ftp mode=550'
1.6.2 创建文件夹
ansible webserver -m file -a 'path=/nginx state=directory'
1.6.3 删除文件或文件夹
ansible webserver -m file -a 'path=/nginx state=absent'
1.7 get_url 模块
功能:从网络下载,可以加checksum校验md5码
ansible dbserver -m get_url -a 'url=http://192.168.31.32/index.html dest=/opt/index2.txt checksum="md5:a76b2b824459a563428efee4e4e10dfa"'
1.8 stat 模块
功能:查看文件属性
ansible webserver -m stat -a 'path=/opt/a.txt'
1.9 unarchive 模块
功能:将ansible服务器上文件传送到远程主机,并进行解压缩
如果是需要将文件传到远程copy=yes(默认值,可省略)
如果解压远程文件 copy=no
ansible webserver -m unarchive -a 'src=/root/etc.tar dest=/opt owner=ftp group=ftp mode=070'
1.9.1 例:下载nginx并解压
建目录
ansible webserver -m file -a 'path=/nginx state=directory'
从网络下载并解压缩
ansible webserver -m unarchive -a \
'src=https://nginx.org/download/nginx-1.21.3.tar.gz \
dest=/nginx owner=ftp group=ftp mode=755 copy=no'
解压远程服务上的包
ansible webserver -m unarchive -a ‘src=/opt/cc.tar dest=/var/named/ copy=no’
1.10 archive模块
功能:打包压缩文件并保存在被管理节点,和unarchive正好相反
ansible webserver -m archive -a 'path=/var/log/ dest=/opt/log.tar.gz \
format=gz mode=600'
1.11 hostname 模块
功能:管理主机名
1.12 cron模块
功能:计划任务
ansible 192.168.31.31 -m cron -a 'hour=1 minute=0 weekday=1-5 name="backup nginx" job=/script/nginxbak.sh'
1.13 yum和apt模块
功能:安装,卸载,查看yum或apt包
安装包:
ansible 192.168.31.31 -m yum -a "name=sl"
查:
ansible 192.168.31.31 -m yum -a "list=sl"
删:
ansible 192.168.31.31 -m yum -a "name=sl state=absent"
1.14 yum_repository模块
功能:用来直接在playbook中配置yum仓库
1.15 service 模块
功能:启停服务
ansible 192.168.31.31 -m service -a "name=httpd state=started enabled=yes"
停止
ansible 192.168.31.31 -m service -a "name=httpd state=stopped"
1.16 USER模块
功能:创建删除用户
1.17 group 模块
功能:创建删除组
1.18 lineinfile 模块
功能:类似sed,修改时多行匹配,只匹配修改最后一个,删除是多行匹配,全部删除
ansible 192.168.31.31 -m lineinfile -a "path=/etc/httpd/conf/httpd.conf regexp='^Listen' line='Listen 8080'"
ansible 192.168.31.31 -m service -a "name=httpd state=restarted"
curl 192.168.31.31:8080
删掉#开头的行
ansible 192.168.31.31 -m lineinfile -a "path=/etc/httpd/conf/httpd.conf state=absent regexp='^#'"
1.19 Replace模块
功能: 和lineinfile类似,但可以匹配替换所有行,可以使用正则
ansible 192.168.31.31 -m replace -a “path=/etc/fstab regexp=’^(UUID.*)’ replace=’#\1’”
1.20 SELinux模块
功能:配置selinux
ansible 192.168.31.31 -m selinux -a ‘state=disabled’
1.21 reboot模块
功能:重启被控服务器
ansible 192.168.31.31 -m reboot
1.22 mount模块
功能:挂载设备
1.23 setup 模块
功能:显示远程服务器的状态
ansible 192.168.31.31 -m setup -a "filter=ansible_memtotal_mb"
1.24 debug模块
功能:此模块可以用于输出信息,并且通过 msg 定制输出的信息内容
ansible 192.168.31.31 -m debug