代码改变世界

Ansible模块

2021-05-12 16:05  williamzheng  阅读(77)  评论(0编辑  收藏  举报

ansible模块

ansible测试

ansible docker -m ping
ansible all -m ping
# 第二段为主机组,all代表主机组里所有机器。-m:指定模块

模块帮助

ansible-doc #查看ansible帮助
ansible-doc -l #查看系统自带的模块
ansible-doc -l |grep user #查看user相关的模块
ansible-doc user #查看user模块的帮助,其中=是必选项,-是可选项

使用模块

ansible docker -m user -a 'name=admin'
#-a代表该模块的参数,后面用单引号引起来

ansible docker -m user -a 'name=admin state=present'
ansible docker -m user -a 'name=admin state=absent'
#state等于present代表添加用户,state等于absent代表删除用户,默认为添加

常用模块

  • command模块
ansible docker -m command -a 'useradd admin'
  • shell模块
ansible docker -m shell -a 'mkdir -p /tmp/test'
  • service
- name start httpd service
  service:
  name: httpd
  state: started
  enabled: yes
  • script模块
#执行被控端的脚本
ansible docker -m script -a '/data/install.sh'

#直接在被控端执行主控端的如下脚本,不用拷贝到被控端
#/bin/bash
ifconfig
df –hT

chmod u+x scripts.sh
ansible all -m script -a “scripts.sh”
  • yum_repository模块
ansible all -m yum_repository -a 'name=dev description="CentOS7 repo" file=dvd baseurl=http://192.168.10.130/pub/BaseOS gpgcheck=no enabled=yes'
#name是yum配置文件里的[]里的名字。description是yum配置文件里的name。file是yum配置文件的名字,后面不用加repo。

command模块和shell模块

区别

  • command模块命令将不会使用shell执行,因此,像$HOME这样的变量是不可用的,还有像<,>,,|,;,&都将不可用。

  • shell模块通过shell程序执行,默认是/bin/sh,像<,>,|,;,&可用,但这样有潜在的shell注入风险

总结:command模块更安全,因为它不受用户环境的影响。也很大的避免了潜在的shell注入风险

如何选择

两个模块都要避免使用,应该优先考虑更具体的ansible模块。比如用command或者shell执行yum命令前,应该先了解yum模块的使用方法。
使用具体模块比执行命令要优雅很多,因为这些模块设计都是具有幂等性的,并满足其他标准,如异常处理等。
Ansible包含众多的模块,大部分模块都能够保证操作的幂等性,即相关操作的多次执行能够达到相同结果这一特性。

如果没有更具体的模块,或者就是想单纯的执行某个命令,相对来说command更安全。

如果需要用户环境和流式操作,则只能使用shell模块。