Ansible教程 第四章 Ad-Hoc命令集

Ad-Hoc命令集由/usr/bin/ansible实现。命令用法如下:

ansible  [options] 

参数选项链接

Ansible教程 第四章 Ad-Hoc命令集_第1张图片

实例展示:

情景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所示:

Ansible教程 第四章 Ad-Hoc命令集_第2张图片

返回结果分析如下:
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。
都是模块
???????????

你可能感兴趣的:(Ansible教程 第四章 Ad-Hoc命令集)