Ad-Hoc命令集由/usr/bin/ansible实现。命令用法如下:
ansible <host-pattern> [options]
实例展示:
情景1:检查proxy组所有主机是否存活。
执行命令:ansible proxy –f 5 –m ping
情景2:返回proxy组所有主机的hostname,并打印最详细的执行过程到标准输出。
执行命令:ansible proxy -s -m command -a 'hostname' -vvv
情景3:列出Web组所有主机列表。
执行命令:ansible web --list
情景4:对10.21.40.61服务器以root执行sleep 20,设置最大连接超时时长为2s,且设置为后台运行模式,
执行过程每2s输出一次进度,如5s还未执行完则终止该任务。
执行命令:
// time命令可省,为方便观察结果,这里使用time命令查看执行时长
time ansible 10.21.40.61 -B 5 -P 2 -T 2 -m command -a 'sleep 20' -u root
情景5:批量查看apps组所有主机的磁盘容量(使用command模块)。
执行命令:ansible apps -a "df -lh"
情景2:批量查看远程主机内存使用情况(shell模块)。
执行命令:ansible apps -m shell -a "free -m"
Ansible的并发特性
步骤1:定义[apps]组,编辑/etc/ansible/hosts的配置。
执行命令vi /etc/ansible/hosts,键入i进入vi编辑模式,跳转到文件最末尾,添加如下配置:
[apps]
192.168.37.130
192.168.37.155
192.168.37.142
192.168.37.156
步骤2:多次执行Ansible命令,执行命令如下:
ansible apps -m ping -f 3
步骤3:对比返回结果,如表3所示:
返回结果分析如下:
1)同样的命令多次执行,但每次的输出结果都不一定一样。
2)输出结果不是按照/etc/ansible/hosts中[apps]定义的主机顺序输出。
3)结果输出基本上遵循每次输出3条记录(线程池始终保持3个线程,所以这里如果每次输出小于等于3都是正常的)。
建议并发数配置的CPU核数偶数倍就好。如4Cores 8GB的服务器,建议最多并发20个线程。
如何使用不熟悉的模块
使用ansible-doc来帮忙了解不熟悉的模块:
Usage: ansible-doc [options] [module...]
Options:
-a, --all Show documentation for all modules
-h, --help show this help message and exit
-l, --list List available modules
-M MODULE_PATH, --module-path=MODULE_PATH
specify path(s) to module library (default=None)
-s, --snippet Show playbook snippet for specified module(s)
-v, --verbose verbose mode (-vvv for more, -vvvv to enable
connection debugging)
--version show program's version number and exit
使用方法:
情景1:显示所有可用模块。
执行命令:ansible-doc –l
情景2:以yum模块为例,我们希望获取yum模块的HELP说明。
执行命令:ansible-doc yum
步骤:安装redhat-lsb。
执行命令:ansible apps -m yum -a 'name=redhat-lsb state=present'
安装ntp服务。
执行命令:ansible apps -s -m yum -a "name=ntp state=present"
启动ntp服务,并设置为开机启动。
执行命令:ansible apps -m service -a "name=ntpd state=started enabled=yes"
安装Nginx。
执行命令:ansible proxy -m yum -a "name=nginx state=present"
Ansible的YUM模块同样支持指定某版本安装,其name参数指定具体版本地址(网络或本地均可)。YUM模块也支持从网络安装或从本地安装。
网络安装,执行命令:
ansible proxy -m yum -a "name=http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm state=present"
如果从本地安装,执行命令:
ansible proxy -m yum -a "name=/usr/local/src/nginx-release-centos-6-0.el6.ngx.noarch.rpm state=present"
另一实例:
1)Nginx、PHP安装命令如下:
ansible app -m yum -a "name=nginx state=present"
ansible app -m yum -a "name=php state=present"
2)Django安装命令如下:
步骤1:安装MySQL-python和python-setuptools依赖包。
ansible app -m yum -a "name=MySQL-python state=present"
ansible app -m yum -a "name=python-setuptools state=present"
步骤2:安装Django。
ansible app -m pip -a "name=django state=present"
步骤3:检查Django安装是否正常,执行命令如下:
ansible app -m command -a "python -c 'import django; print django.get_version()'"
指定特定主机执行
1)--limit:通过--limit参数限定主机做变更。
情景:在App组中启动192.168.37.15的NTP服务。
命令用法:ansible app -m command -a "service ntpd status" --limit "192.168.37.158"
2)指定IP:通过指定具体IP限定主机做变更。
情景:启动192.168.37.158的NTP服务。
执行命令:ansible 192.168.37.158 -m command -a "service ntpd status"
3)用“:”作分隔符,指定多台机器做变更。
情景:启动192.168.37.158和192.168.37.161的NTP服务。
执行命令:ansible "192.168.37.158:192.168.37.161" -m command -a "service ntpd status"
4)通过“*”泛匹配,更灵活地针对多台主机做变更。
情景:启动192.168.37.*所有主机的NTP服务。
执行命令:ansible 192.168.37.* -m command -a "service ntpd status"
用户和组管理
Ad-Hoc用户与组管理
Linux系统用户管理:user。
Windows系统用户管理:win_user。
都是模块
???????????