0、模块文档:

1、command

  1. Command:在远程主机执行命令,默认模块,可忽略-m选项
  2. > ansible srvs -m command -a 'service vsftpd start'
  3. > ansible srvs -m command -a 'echo adong |passwd --stdin 123456'
  4. 此命令不支持 $VARNAME < > | ; & 等,用shell模块实现
  5. chdir: 进入到被管理主机目录
  6. creates: 如果有一个目录是存在的,步骤将不会运行Command命令
  7. ansible websrvs -a 'chdir=/data/ ls'

2、shell

  1. Shell:和command相似,用shell执行命令
  2. > ansible all -m shell -a 'getenforce' 查看SELINUX状态
  3. > ansible all -m shell -a "sed -i 's/SELINUX=.*/SELINUX=disabled' /etc/selinux/config"
  4. > ansible srv -m shell -a 'echo magedu |passwd –stdin wang'
  5. 调用bash执行命令 类似 cat /tmp/stanley.md | awk -F'|' '{print $1,$2}' &> /tmp/example.txt
  6. 这些复杂命令,即使使用shell也可能会失败,
  7. 解决办法:写到脚本时,copy到远程执行,再把需要的结果拉回执行命令的机器
  8. 修改配置文件,使shell作为默认模块
  9. vim /etc/ansible/ansible.cfg
  10. module_name = shell

3、script

  1. Script:在远程主机上运行ansible服务器上的脚本
  2. > -a "/PATH/TO/SCRIPT_FILE"
  3. > ansible websrvs -m script -a /data/test.sh

4、copy

  1. Copy:从主控端复制文件到远程主机
  2. src : 源文件 指定拷贝文件的本地路径 (如果有/ 则拷贝目录内容,比拷贝目录本身)
  3. dest: 指定目标路径
  4. mode: 设置权限
  5. backup: 备份源文件
  6. content: 代替src 指定本机文件内容,生成目标主机文件
  7. > ansible websrvs -m copy -a "src=/root/test1.sh dest=/tmp/test2.showner=wang mode=600 backup=yes"
  8. 如果目标存在,默认覆盖,此处指定先备份
  9. > ansible websrvs -m copy -a "content='test content\nxxx' dest=/tmp/test.txt"
  10. 指定内容,直接生成目标文件

5、fetch

  1. Fetch:从远程主机提取文件至主控端,copy相反,目前不支持目录,可以先打包,再提取文件
  2. > ansible websrvs -m fetch -a 'src=/root/test.sh dest=/data/scripts'
  3. 会生成每个被管理主机不同编号的目录,不会发生文件名冲突
  4. > ansible all -m shell -a 'tar jxvf test.tar.gz /root/test.sh'
  5. > ansible all -m fetch -a 'src=/root/test.tar.gz dest=/data/'

6、file

  1. File:设置文件属性
  2. path: 要管理的文件路径 (强制添加)
  3. recurse: 递归,文件夹要用递归
  4. src: 创建硬链接,软链接时,指定源目标,配合'state=link' 'state=hard' 设置软链接,硬链接
  5. state: 状态
  6. absent 缺席,删除
  7. > ansible websrvs -m file -a 'path=/app/test.txt state=touch' 创建文件
  8. > ansible websrvs -m file -a "path=/data/testdir state=directory" 创建目录
  9. > ansible websrvs -m file -a "path=/root/test.sh owner=wang mode=755" 设置权限755
  10. > ansible websrvs -m file -a 'src=/data/testfile dest=/data/testfile-link state=link' 创建软链接

7、unarchive

  1. unarchive:解包解压缩,有两种用法:
  2. 1、将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置copy=yes.
  3. 2、将远程主机上的某个压缩包解压缩到指定路径下,设置copy=no
  4. 常见参数:
  5. copy:默认为yes,当copy=yes,拷贝的文件是从ansible主机复制到远程主机上,
  6. 如果设置为copy=no,会在远程主机上寻找src源文件
  7. src 源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,
  8. 如果是远程主机上的路径,则需要设置copy=no
  9. dest:远程主机上的目标路径
  10. mode:设置解压缩后的文件权限
  11. 示例:
  12. ansible websrvs -m unarchive -a 'src=foo.tgz dest=/var/lib/foo'
  13. #默认copy为yes ,将本机目录文件解压到目标主机对应目录下
  14. ansible websrvs -m unarchive -a 'src=/tmp/foo.zip dest=/data copy=no mode=0777'
  15. # 解压被管理主机的foo.zip到data目录下, 并设置权限777
  16. ansible websrvs -m unarchive -a 'src=https://example.com/example.zip dest=/data copy=no'

8、archive

  1. Archive:打包压缩
  2. > ansible all -m archive -a 'path=/etc/sysconfig dest=/data/sysconfig.tar.bz2 format=bz2 owner=wang mode=0777'
  3. 将远程主机目录打包
  4. path: 指定路径
  5. dest: 指定目标文件
  6. format: 指定打包格式
  7. owner: 指定所属者
  8. mode: 设置权限

9、hostname

  1. Hostname:管理主机名
  2. ansible appsrvs -m hostname -a "name=app.adong.com" 更改一组的主机名
  3. ansible 192.168.38.103 -m hostname -a "name=app2.adong.com" 更改单个主机名

10、cron

  1. Cron:计划任务
  2. 支持时间:minute,hour,day,month,weekday
  3. > ansible websrvs -m cron -a "minute=*/5 job='/usr/sbin/ntpdate 172.16.0.1 &>/dev/null' name=Synctime"
  4. 创建任务
  5. > ansible websrvs -m cron -a 'state=absent name=Synctime'
  6. 删除任务
  7. > ansible websrvs -m cron -a 'minute=*/10 job='/usr/sbin/ntpdate 172.30.0.100" name=synctime disabled=yes'
  8. 注释任务,不在生效

11、yum

  1. Yum:管理包
  2. ansible websrvs -m yum -a 'list=httpd' 查看程序列表
  3. ansible websrvs -m yum -a 'name=httpd state=present' 安装
  4. ansible websrvs -m yum -a 'name=httpd state=absent' 删除
  5. 可以同时安装多个程序包

12、service

  1. Service:管理服务
  2. ansible srv -m service -a 'name=httpd state=stopped' 停止服务
  3. ansible srv -m service -a 'name=httpd state=started enabled=yes' 启动服务,并设为开机自启
  4. ansible srv -m service -a 'name=httpd state=reloaded' 重新加载
  5. ansible srv -m service -a 'name=httpd state=restarted' 重启服务

13、user、group

  1. User:管理用户
  2. home 指定家目录路径
  3. system 指定系统账号
  4. group 指定组
  5. remove 清除账户
  6. shell 指定shell类型
  7. ansible websrvs -m user -a 'name=user1 comment="test user" uid=2048 home=/app/user1 group=root'
  8. ansible websrvs -m user -a 'name=sysuser1 system=yes home=/app/sysuser1'
  9. ansible websrvs -m user -a 'name=user1 state=absent remove=yes' 清空用户所有数据
  10. ansible websrvs -m user -a 'name=app uid=88 system=yes home=/app groups=root shell=/sbin/nologin password="$1$zfVojmPy$ZILcvxnXljvTI2PhP2Iqv1"' 创建用户
  11. ansible websrvs -m user -a 'name=app state=absent' 不会删除家目录
  12. 安装mkpasswd
  13. yum insatll expect
  14. mkpasswd 生成口令
  15. openssl passwd -1 生成加密口令
  16. 删除用户及家目录等数据
  17. Group:管理组
  18. ansible srv -m group -a "name=testgroup system=yes" 创建组
  19. ansible srv -m group -a "name=testgroup state=absent" 删除组

14、lineinfile

  1. lineinfile: 相当于sed,修改文件

15、replace

  1. replace: 相当于sed,主要用于正则匹配

16、setup

  1. setup: 收集系统信息;(可以使用filter选项进行过滤),
  2. 如果主机过大,会影响执行速度,使用gather_facts: no 禁止收集facts信息,加快速度