一:运行shell命令(command,shell)
ansible默认使用command模块运行,但该模块不支持shell变量和管道,此时则使用shell模块运行命令
- 在所有机器上运行ifconfig命令
ansible all -a "ifconfig"
- 在所有机器上含有IP的行
ansible all -m shell -a "ifconfig | grep 'inet addr'"
- 重启所有机器,每次重启2台(默认并发5)
ansible all -a "reboot" -f 2
- 以test用户在所有机器上运行echo命令
ansible all -a "echo 'hello world'" -u test
- 以test用户在所有机器上运行sudo命令(如果有密码用--ask-sudo-pass参数)
ansible all -a "iptables -nL" -u test --sudo [--ask-sudo-pass]
二:传输文件(copy)
- 将本地hosts文件发送到所有主机的/home下
ansible all -m copy -a "src=/etc/hosts dest=/home"
三:更改文件权限(file)
- 将远程主机的/home/hosts文件权限设置为600
ansible all -m file -a "dest=/home/hosts mode=600"
- 将远程主机的/home/hosts文件用户和组设置为www
ansible all -m file -a "dest=/home/hosts owner=www group=www"
- 在远程主机创建目录,类似mkdir -p
ansible all -m file -a "dest=/home/a/b/c owner=www group=www state=directory"
- 删除文件或目录
ansible all -m file -a "dest=/home/a state=absent"
四:软件包管理(apt,yum)
- 确保nginx已经安装了,但不更新
ansible all -m yum -a "name=nginx state=present"
- 安装软件包到一个指定的版本
ansible all -m yum -a "name=nginx1.8 state=present"
- 确保安装的软件包是最新的
ansible all -m yum -a "name=nginx state=latest"
- 确保软件包没有安装,(卸载)
ansible all -m yum -a "name=nginx state=absent"
五:用户和用户组(user,group)
- 创建用户组test
ansible all -m group -a "name=test gid=1000"
- 创建用户名为foo,uid为1000,用户组为test的用户
ansible all -m user -a "name=foo uid=1000 group=test"
- 删除用户foo
ansible all -m user -a "name=foo state=absent"
六:代码发布(git)
- 从git仓库拉去代码
ansible all -m git -a "repo=https://github.com/xxx/xxx.git dest=/var/www/webapps version=HEAD"
七:服务管理(service)
- 确保所有主机的nginx是启动的
ansible all -m service -a "name=nginx state=started"
- 重启所有nginx
ansible all -m service -a "name=nginx state=restarted"
- 关闭所有nginx
ansible all -m service -a "name=nginx state=stoped"
八:计划任务(cron)
- 所有节点每3分钟更新时间
ansible all -m cron -a 'name="ntpdate time" minute=*/5 hour=* day=* mouth=* weekday=* job="/usr/sbin/ntpdate time.windows.com"'
- 以www用户运行计划任务
ansible all -m cron -a 'name="ntpdate time" minute=*/5 hour=* day=* mouth=* weekday=* job="/usr/sbin/ntpdate time.windows.com" user=www'
- 删除计划任务
ansible all -m cron -a 'name="ntpdate time" state=absent'
九:运行脚本(script)
- 在远程主机运行/home/ansible.sh脚本(ansible.sh文件在ansible主控机上)
ansible all -m script -a "/home/ansible.sh"
十:下载文件(get_url)
- 将http://www.baidu.com/favicon.ico文件下载到/tmp下
ansible all -m get_url -a "url=http://www.baidu.com/favicon.ico dest=/tmp"
十一:文件推送或拉取(synchronize)
delete=yes 使两边的内容一样
compress=yes 开启压缩,默认开启
--exclude=.git 忽略同步.git结尾的文件
mode=pull 拉取,默认为推送
将主控机的/home/test.txt文件推送到远程主机的/tmp下
ansible all -m synchronize -a "src=/home/test.txt dest=/tmp compress=yes"
- 将远程主机的/home/abc.txt拉取到主控机的root目录
ansible all -m synchronize -a "mode=pull src=/hoome/abc.txt dest=/root"
十二:收集系统信息(setup)
- 收集主机所有信息
ansible all -m setup
- 收集主机所有信息,并根据主机名存到文件中
ansible all -m setup --tree /tmp/facts
- 收集内存相关的信息
ansible all -m setup -a "filter=ansible_*_mb"
- 收集网卡相关的信息
ansible all -m setup -a "filter=ansible_eth[0-2]"