美文网首页
Ansible教程 第四章 Ad-Hoc命令集

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

作者: Alex_Honnold | 来源:发表于2017-07-23 15:15 被阅读0次

    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。
    都是模块
    ???????????

    相关文章

      网友评论

          本文标题:Ansible教程 第四章 Ad-Hoc命令集

          本文链接:https://www.haomeiwen.com/subject/fnlmkxtx.html