站長資訊網
        最全最豐富的資訊網站

        Ansible系列命令與Inventory配置詳解

        簡介:

        Ansible是開源工具,整個開發過程或二次開發均遵循GPL協議,所以所有源碼均可見,作為一款日常工作所需的核心軟件,我們有必要知道其目錄分布及各目錄功能。

        通過下列命令可以獲取ansible所有文件存放目錄

          rpm -ql ansible

        該命令輸出較多,大致分為如下幾類:

        配置文件目錄:/etc/ansible/

        執行文件目錄:/usr/bin/

        Lib庫依賴目錄:/usr/lib/pythonX.X/site-packages/ansible/

        Help文檔目錄:/usr/share/doc/ansible-X.X.X/

        Man文檔目錄:/usr/share/man/manl/

        運維經常需要配置的目錄:

        (1.)/etc/ansible/ 主要功能為:Inventory主機信息配置 、Ansible工具功能配置等。

        (2.)執行文件目錄/usr/bin/主要功能為:Ansible系列命令默認存放目錄,Ansible所有的可執行文件均存放在該目錄下。

         

        Ansible配置文件解析

        配置文件ansible.cfg約有350行語句,大多數為注釋行默認配置項。該文件遵循INI格式分為如下幾類配置。

        (1.)[defaults]

        該類配置下定義常規的連接類配置,如:

        inventory、library、remote_tmp、local_tmp、forks、poll_interval、sudo_user、ask_sudo_pass、ask_pass、transport

        remote_port等。

        參數解釋:

          [defaults]    #inventory = /etc/ansible/hosts                                           #定義Inventory    #library =  /usr/share/my_modules/                                   #自定義lib庫存放目錄    #remote_tmp = $HOME/.ansible/tmp                               #臨時文件遠程主機存放目錄    #local_tmp  =  $HOME/.ansible/tmp                                #臨時文件本地存放目錄    #forks = 5                                                                        #默認開啟的并發數    #poll_interval   =  15                                                       #默認輪詢時間間隔    #sudo_user   =   root                                                      #默認sudo用戶    #ask_sudo_pass = True                                               #是否需要sudo密碼    #ask_pass = True                                                        #是否需要密碼    #roles_path   =  /etc/ansible/roles                                #默認下載的Roles存放的目錄    #host_key_checking  = False                                     #首次連接是否需要檢查key認證,建議設為False    #timeout   =  10                                                          #默認超時時間    #timeout   =  10                                                         #如沒有指定用戶,默認使用的遠程連接用戶    #log_path =  /var/log/ansible.log                               #執行日志存放目錄    #module_name  =  command                                  #默認執行的模塊    #action_plugins =  /usr/share/ansible/plugins/action              #action插件的存放目錄    #callback_plugins =  /usr/share/ansible/plugins/callback       #callback插件的存放目錄    #connection_plugins  =  /usr/share/ansible/plugins/connection   #connection插件的存放目錄    #lookup_plugins =  /usr/share/ansible/plugins/lookup       #lookup插件的存放目錄    #vars_plugins  =  /usr/share/ansible/plugins/vars            #vars插件的存放目錄    #filter_plugins  =  /usr/share/ansible/plugins/filter            #filter插件的存放目錄    #test_plugins  =  /usr/share/ansible/plugins/test             #test插件的存放目錄    #strategy_plugins  = /usr/share/ansible/plugins/strategy   #strategy插件的存放目錄    #fact_caching  =  memory                           #getfact緩存的主機信息存放方式    #retry_files_enabled  = False                        #retry_files_save_path =  ~/.ansible-retry   #錯誤重啟文件存放目錄

        上述是日常可能用到的配置,這些多數保持默認即可。

        (2.)[privilege_escalation]

        出于安全角度考慮,部分公司不希望直接以root的高級管理員權限直接部署應用,往往會開放普通用戶權限并給予sudo的權限,該部分配置主要針對sudo用戶提權的配置 。

        參數解釋:

          #become = True         #是否sudo    #become_method=sudo   #sudo 方式    #become_user=root     #sudo后變為root用戶    #become_ask_pass=False   #sudo后是否驗證密碼

        (3.)[privilege_connection] 該配置不常用到

          #record_host_keys=False   #不記錄新主機的key以提升效率    #pty=False        #禁用sudo功能

        (4.)[ssh_connection]

        Ansible默認使用的是SSH協議進行與對端主機進行通信。但配置項較少,多數默認即可

          # pipelining = False

        (5.)[accelerate]

          Ansible連接加速相關配置。多數保持默認即可。    #accelerate_port  =  5099          #加速連接端口    #accelerate_timeout  =  30        #命令執行超時時間,單位秒    #accelerate_connect_timeout = 5.0   #連接超時時間,單位秒    #accelerate_multi_key  =  yes      

        (6.)[selinux]

        關于selinux的相關配置幾乎不會涉及,保持默認配置即可。

          #libvirt_lxc_noseclabel  =  yes    #libvirt_lxc_noseclabel  =  yes 

        (7.)[colors]

        Ansible對于輸出結果的顏色也進行了詳盡的定義且可配置,保持默認即可。

          #highlight  =  white    #verbose  =  blue    #warn   =  bright purple    #error  =   red    #debug  =  dark  gray    #deprecate  =  purple    #skip  =  cyan    #unrechable  =  red    #ok    =  green    #changed  =  yellow    #diff_add  =  green    #diff_remove  =  red    #diff_lines   =  cyan

        Ansible命令用法詳解

        Ansible命令執行的方式有:Ad-Hoc 、Ansible-playbook兩種方式

        兩者本質沒什么區別:Ad-Hoc主要用于臨時命令的執行,Ansible-playbook可以理解為Ad-Hoc的集合,通過一定的規則編排在一起。

        Ansible認證方式有兩種:密碼認證、公私鑰認證兩種方式

        Ansible的命令使用格式:

          ansible  (主機模式) [options] (選項)

        (主機模式):是Inventory(清單)中定義的主機或主機組,可以是ip、hostname(主機名)

        Inventory:中的group組名、具有"." 或"*" 或 ":" 等特殊字符的匹配型字符串 。<>表示該選項是必須項,不可忽略。

        [options]是Ansible的參數選項,[]表示該選項中的參數任選其一。

          -m NAME,--module-name=NAME:指定執行使用的模塊    -u USERNAME,--user=USERNAME:指定遠程主機以USERNAME運行命令。    -s,--sudo:相當于Linux系統下的sudo命令。    -U SUDO_USERNAME,--sudo-user=SUDO_USERNAME:使用sudo,相當于Linux下的sudo命令。

        具體實例如下:

        以kangshuo用戶執行ping存活檢測

          ansible  all  -m   ping  -u  kangshuo

        以kangshuo sudo 至root執行ping存活檢測

          ansible  all  -m  ping  -u  kangshuo   --sudo

        以kangshuo sudo 至batman 用戶執行ping 存活檢測

          ansible all  -m ping  -u bruce  --sudo  --sudo-user   batman

        注意:但在新版本中ansible的sudo命令廢棄,改為–become或-b,如上命令修改為如下:

        以kangshuo sudo至root執行ping存活檢測

          ansible all  -m ping  -u  kangshuo  -b

        以kangshuo sudo至batman用戶執行ping存活檢測

          ansible all -m ping  -u kangshuo  -b  --become-user   batman

        Ansible-playbook的命令用法和Ansible略有不同,雖然參數選項與Ansible有很多相同的地方,但也新增了針對Ansible-playbook特有的參數。

        Ansible-playbook的命令使用格式如下:

          Ansible-playbook  playbook.yml

        Ansible-playbook命令后跟事先編輯好的playbook.yml文件即可。Ansible-playbook新增的功能參數如下:

          --ask-vault-pass:加密playbook文件時提示輸入密碼。    -D,--diff:當更新的文件數及內容較少時,該選項可顯示這些文件不同的地方,該選項結合-C用會有較好的效果。    -e EXTRA_VARS,--extra-vars=EXTRA_VARS:在Playbook中引入外部變量。    --flush-cache:將fact清除到的遠程主機緩存。    --force-handlers:強制運行handlers的任務,即使在任務失敗的情況下。    -i INVENTORY:指定要讀取的INventory(清單)文件。    --list-tags:列出所有可用的tags。    --list-tasks:列出所有即將被執行的任務。    --skip-tags=SKIP_TAGS:跳過指定的tags任務。    --start-at-task=START_AT_TASK:從第幾條任務開始執行。    --step:逐步執行Playbook定義的任務,并經人工確認后繼續執行下一步任務。    --syntax-check:檢查Playbook中的語法書寫。    -t  TAGS,--tags=TAGS:指定執行該tags的任務。

        Ansible系列命令用法詳解與使用場景介紹

        如何獲取Ansible的系列命令呢?

        在終端鍵入ansible后連續按兩次Tab鍵,會補全所有以ansible字母開頭的命令,這些命令均是Ansible系列命令。

          ansible    ansible-galaxy    ansible-pull    ansible-doc    Ansible-playbook    ansible-vault    ansible-console

        1.ansible:

        ansible主要應用在如下場景:

        (1.)非固化需求

        (2.)臨時一次性操作

        (3.)二次開發接口調用

        那么什么是非固化需求和臨時一次性操作呢?

        簡單來講,比如工作中我臨時想查看storm_cluster組的主機是否存活。

          ansible storm_cluster -m ping
          [root@192 ~]# ansible storm_cluster -m ping    192.168.1.5 | success >> {      "changed": false,       "ping": "pong"  }    192.168.1.7 | success >> {      "changed": false,       "ping": "pong"  }

        在或者我想臨時復制本地的/etc/fstab文件到遠程主機192.168.1.7的/tmp目錄下做測試。

          ansible 192.168.1.7 -m copy -a "src=/etc/fstab dest=/tmp/fstab owner=root group=root mode=644 backup=yes"

        執行結果如下:

          [root@192 ~]# ansible 192.168.1.7 -m copy -a "src=/etc/fstab dest=/tmp/fstab owner=root group=root mode=644 backup=yes"  192.168.1.7 | success >> {      "changed": false,       "dest": "/tmp/fstab",       "gid": 0,       "group": "root",       "md5sum": "881cdcd7fca7a1dca107d264ba621358",       "mode": "0644",       "owner": "root",       "path": "/tmp/fstab",       "secontext": "unconfined_u:object_r:admin_home_t:s0",       "size": 541,       "state": "file",       "uid": 0  }

        再到192.168.1.7主機上面查看/tmp目錄下是否有fstab文件。

        Ansible系列命令與Inventory配置詳解

        例如上面的這些沒規律的、臨時需要做的任務,我們稱之為非固化需求、臨時一次性操作。

        Ansible的返回結果都非常友好,一般會用3種顏色來表示執行結果:

          紅色:表示執行過程中有異常,一般會中止剩余所有的任務    綠色:表示執行過程中沒有異常,所有任務均正常執行    橘黃色:表示執行過程中沒有異常,所有任務均正常執行,但是命令執行結束后目標有狀態的變化。

        所以判斷Ansible系列命令的執行結果是否正常是一件非常容易的事情,只要看顏色即可。

        2.ansible-galaxy

        通過ansible-galaxy命令,我們可以根據下載量和關注量等信息,查找和安裝優秀的Roles。

        Roles是Ansible非常重要的一項功能。之后的博客會有專門的詳解。。。。。

        在ansible-galaxy上,我們可以上傳和下載Roles,下載地址為:https://galaxy.ansible.com

        ansible-galaxy命令使用格式如下:

          ansible-galaxy [ init | info | install | list | remove ]  [--help] [options] ...

        ansible-galaxy命令分為三大部分:

        (1.)[init|info|install|list|remove]

          init:初始化本地的Roles配置,以備上傳Roles至galaxy。    info:列表指定Role的詳細信息。    install:下載并安裝galaxy指定的Roles到本地。    list:列出本地已下載的Roles。    remove:刪除本地已下載的Roles。

        Ansible2.0版本中,針對ansible-galaxy增加了login、import、delete、setup等功能,但這些功能需要基于login在galaxy認證成功后方可執行,主要為了方便對galaxy上已有的Roles的配置工作。

        (2.)help用法顯示[–help]

        針對上面的init、info等功能,后面跟上–help可單獨顯示該項用法。例如:

          ansible-galaxy   init   --help

        執行后會返回ansible-galaxy init選項的用法說明。

          Usage: ansible-galaxy init [options] role_name    Options:    -h, --help            show this help message and exit    -p INIT_PATH, --init-path=INIT_PATH                          The path in which the skeleton role will be created.                          The default is the current working directory.    -s API_SERVER, --server=API_SERVER                          The API server destination    -f, --force           Force overwriting an existing role    See 'ansible-galaxy 

         
         
         
        –help' for more information on a specific command.

        其他選項與help用法一樣。

        (3.)參數項[options]

        該部分結合第一部分的參數完成ansible-galaxy完整的功能用法。

        可參考如下:

        下載用戶kangshuo的Nginx這個Role到本地并忽略錯誤(默認存放在/etc/ansible/roles/)

          ansible-galaxy  --ignore-errors  install  azavea.git

        因為ansible-galaxy是對https://galaxy.ansible.com網站的上傳、下載、配置類工作,如果有類似如下報錯,請確保該網站可以正常訪問。

          The API server (galaxy.ansible.com) is not responding, please try again later.

        3.ansible-pull

        該指令的使用涉及Ansible的另一種工作模式:pull模式(Ansible默認使用push模式)。

        push模式適用于以下場景:

        (1.)你有數量巨大的機器需要配置,即使使用高并發線程依舊要花費很多時間。

        (2.)你要在剛啟動的、沒有網絡連接的主機上運行Ansible。

        ansible-pull命令的使用格式如下:

          ansible-pull  [options] [playbook.yml]

        通過ansible-pull結合Git和crontab一并實現,其原理如下:通過crontab定期拉去指定的Git版本到本地,并以指定模式自動運行預先制訂好的指令。

        具體參考如下實例:

          */20  * *  *  *  root  /usr/local/bin/ansible-pull  -o -C 2.1.0  -d  /srv/www/king-gw/  -i  /etc/ansible/hosts  -U git://git.kingifa.com/king-gw-ansiblepull  >> /var/log/ansible-pull.log  2>&1

        Ansible-pull通常在配置大批量機器的場景下使用,靈活性稍有欠缺,但效率幾乎可以無限提升,對運維人員的技術水平和前瞻性規劃有較高要求。

        4.ansible-doc

        ansible-doc是Ansible模塊文檔說明,針對每個模塊都有詳細的用法說明及應用案例介紹,功能和Linux系統man命令類似。

        該命令使用方式如下:

          ansible-doc  [options]  [module...]

        ansible-doc命令后跟[options]參數或[模塊名],顯示模塊用法說明。具體示例如下:

          ansible-doc  -l   #列出支持的模塊
          [root@192 ~]# ansible-doc -l  acl                  Sets and retrieves file ACL information.                      add_host             add a host (and alternatively a group) to the ansible-playbo  airbrake_deployment  Notify airbrake about app deployments                         alternatives         Manages alternative programs for common commands              apache2_module       enables/disables a module of the Apache2 webserver            apt                  Manages apt-packages                                          apt_key              Add or remove an apt key                                      apt_repository       Add and remove APT repositories                               apt_rpm              apt_rpm package manager                                       arista_interface     Manage physical Ethernet interfaces                           arista_l2interface   Manage layer 2 interfaces                                     arista_lag           Manage port channel (lag) interfaces                          arista_vlan          Manage VLAN resources                                         assemble             Assembles a configuration file from fragments                 assert               Fail with custom message                                      at                   Schedule the execution of a command or script file via the a  authorized_key       Adds or removes an SSH authorized key                         azure                create or terminate a virtual machine in azure                bigip_facts          Collect facts from F5 BIG-IP devices                          bigip_monitor_http   Manages F5 BIG-IP LTM http monitors                           bigip_monitor_tcp    Manages F5 BIG-IP LTM tcp monitors                            bigip_node           Manages F5 BIG-IP LTM nodes                                   bigip_pool           Manages F5 BIG-IP LTM pools                                   bigip_pool_member    Manages F5 BIG-IP LTM pool members                            boundary_meter       Manage boundary meters                                        bzr                  Deploy software (or files) from bzr branches                  campfire             Send a message to Campfire                                    capabilities         Manage Linux capabilities                                     cloudformation       create a AWS CloudFormation stack                             command              Executes a command on a remote node                           composer             Dependency Manager for PHP                                    copy                 Copies files to remote locations.                             cpanm                Manages Perl library dependencies.                            cron                 Manage cron.d and crontab entries.                            datadog_event        Posts events to DataDog  service                              debconf              Configure a .deb package                                      debug                Print statements during execution                       
          ansible-doc ping   //模塊功能說明
          [root@192 ~]# ansible-doc ping  > PING      A trivial test module, this module always returns `pong' on    successful contact. It does not make sense in playbooks, but it is    useful from `/usr/bin/ansible'    # Test 'webservers' status  ansible webservers -m ping  

        5.Ansible-playbook

        ansible-playbook工作機制:通過讀取預先編寫好的playbook文件實現批量管理。

        要實現的功能與ansible命令一樣,可以理解為按一定條件組成的ansible任務集。

        ansible-playbook命令后跟YML格式的playbook文件,執行事先編好的任務集。

        使用方式如下:

          ansible-playbook  playbook.yml    

        具體示例如下:

          ansible-playbook  gw.yml

        playbook具有編寫簡單、可定制性高、靈活方便,以及可固化日常所有操作的特點,運維人員應熟練掌握。

        6.ansible-vault

        ansible-vault主要用于配置文件加密,例如編寫的playbook配置文件中包含敏感信息,不希望其他人隨意查看,ansible-vault可加密/解密這個配置文件。

        具體示例如下:

        首先編輯一個a.yml文件,里面內容為了測試隨便輸入即可,輸入aaaaaaaaa

        Ansible系列命令與Inventory配置詳解

        保存退出,加密a.yml文件。

          ansible-vault encrypt  a.yml

        會有以下輸入加密密碼提示:

          Vault password:  Confirm Vault password:  Encryption successful

        設置完,這時再打開a.yml文件后會發現該文件亂碼:

        Ansible系列命令與Inventory配置詳解

        只有通過如下命令解密后方可正常查看。

          ansible-vault  decrypt  a.yml

        輸入預設的密碼后方可解密

          Vault password:   Decryption successful

        此時a.yml文件打開后可正常查看:

        Ansible系列命令與Inventory配置詳解

        7.ansible-console

        ansible-console是Ansible為用戶提供的一款交互式工具,用戶可以在ansible-console虛擬出來的終端上像Shell一樣使用Ansible內置的各種命令,這為習慣于使用shell交互方式的用戶提供了良好的使用體驗。

        到這里,我們對ansible的用法及系列命令已經有了概念性的了解和掌握,接下來我們進一步了解Ansible Inventory(清單)文件的配置管理。

        Ansible Inventory(清單) 配置及詳解

        Inventory(清單)是Ansible管理主機信息的配置文件,相當于系統HOSTS文件的功能,默認存放在/etc/ansible/hosts。

        為了方便批量管理主機,便捷使用其中的主機分組,Ansible通過Inventory來定義主機和組。

        在使用時通過-i或者–inventory-file指定讀取,與Ansible命令結合使用時組合如下:

          ansible -i  /etc/ansible/hosts  storm_cluster -m  ping 

        讀取結果如下:

        Ansible系列命令與Inventory配置詳解

        注意:如果只有一個Inventory(清單)時可不用指定路徑,默認讀取/etc/ansible/hosts。Inventory(清單)可以同時存在多個,而且支持動態生成

        Inventory(清單)的使用規則(定義主機和組)

        Inventory(清單)配置文件遵循INI文件風格,中括號中的字符為組名。其支持將同一個主機同時歸并到多個不同的組中,分組的功能為IT人員維護主機列表提供了非常大的便利。

        此外,若目標主機使用了非默認的SSH端口,還可以在主機名稱之后使用冒號加端口號來表名,以行為單位分隔配置

        詳細代碼信息注釋內容:

          # “ # ”  開頭的行表示該行為注釋行,即當時行的配置不生效。    # Inventory(清單)可以直接為IP地址    192.168.1.7    #Inventory(清單)同樣支持Hostname(主機名)的方式,后跟冒號加數字表示端口號,默認22號端口    ntp.magede.com:22    nfs.magede.com:22    # 中括號內的內容表示一個分組的開始,緊隨其后的主機均屬于該組成員,空行后的主機亦屬于該組,即web2.magedu.com這臺主機也屬于[webservers]組。    [webservers]    web1.magedu.com    web[10:20].magedu.com  #[10:20] 表示10 ~ 20 之間的所有數字(包括10和20 ),即表示web10.magedu.com、web11.magedu.com.................web20.magedu.com的所有主機。        web2.magedu.com[dbservers]    db-a.magedu.com    db-[b:f].magedu.com    # [b:f] 表示b到f之間的所有數字(包括b和f),即表示db-b.magedu.com、db-c.magedu.com..........db-f.magedu.com的所有主機。

        定義主機變量

        在平時工作中,通常會遇到非標準化的需求配置,如考慮到安全性問題,業務人員通常將企業內部的web服務80端口修改為其他端口號,而該功能可以直接通過修改Inventory(清單)配置來實現,在定義主機時為其添加主機變量,以便在Playbook中使用針對某一主機的個性化要求。

        例如:

          [webservers]    web1.magedu.com  http_port=808  maxRequestsPerChild=801  #自定義http_port的端口號為808、配置maxRequestsPerChild為801.

        Ansible其實支持多種方式修改或自定義變量,Inventory(清單)是其中的一種修改方式。關于更多種方式,將在后期會詳細介紹到的。。。。。。。。

         

        定義組變量

        Ansible支持定義組變量,主要是針對大量機器的變量定義需求,賦予指定組內所有主機在Playbook中可用的變量,等同于逐一給該組下的所有主機賦予同一變量。

        例如:

          [groupservers]    web1.magedu.com    web2.magedu.com    [groupservers:vars]    ntp_server=ntp.magedu.com    #定義groupservers組中所有主機ntp_server值為ntp.magedu.com    nfs_server=nfs.magedu.com   #定義groupservers組中的所有主機nfs_server值為nfs.magedu.com

        定義組嵌套及組變量

        Inventory(清單)中,組還可以包含其他的組(嵌套),并且也可以向組中的主機指定變量。不過,這些變量只能在Ansible-playbook中使用,而Ansible不支持。組與組之間可以相互調用,并且可以向組中的主機指定變量。

        示例:

          [apache]    httpd1.magedu.com    httpd2.magedu.com    [nginx]    ngx1.magedu.com    ngx2.magedu.com    [webservers:children]    apache    nginx    [webservers:vars]    ntp_server=ntp.magedu.com

        Ansible以簡單為其核心理念,上述實現在業務日常使用中并不常見,大家了解其用法即可。

        多重變量定義

        變量除了可以在Inventory(清單)中一并定義,也可以獨立于Inventory(清單)文件之外單獨存儲到YAML格式的配置文件中,這些文件中,這些文件通常以.yml、.yaml、.json為后綴或者無后綴。

        變量通常從如下4個位置檢索:

          Inventory(清單)配置文件(默認/etc/ansible/hosts)    Playbook中vars定義的區域    Roles中的vars目錄下的文件    Roles同級目錄group_vars和hosts_vars目錄下的文件

        假設foosball主機同屬于raleigh和webservers組,那么其變量在如下文件中設置均有效:

          /etc/ansible/group_vars/raleigh   # can  optionally end  in  '.yml' ,'.yaml' , or  '.json'    /etc/ansible/group_vars/webservers    /etc/ansible/host_vars/foosball

        對于變量的讀取,Ansible遵循如上優先級順序,因此大家設置變量時盡量沿用同一種方式,以方便維護人員管理。

        其他Inventory(清單)參數列表

        除了支持如上的功能外,Ansible基于SSH連接Inventory(清單)中指定的遠程主機時,還內置了很多其他參數,用于指定其交互方式。

        下面列舉了部分重要參數:

          ansible_ssh_host:指定連接主機ansible_ssh_port,指定SSH連接端口,默認22    ansible_ssh_user:指定SSH連接用戶    ansible_ssh_pass:指定SSH連接密碼    ansible_sudo_pass:指定SSH連接時sudo密碼    ansible_ssh_private_key_file:指定特有私鑰文件

        其他內置參數還有數十個, 這些參數均可以直接寫在命令行或Playbook文件中,以覆蓋配置文件中的定義。

        Ansible與正則

        正則表達式(Patterns)是各類高級語言的必定支持的方法之一,Ansible也不例外。其Patterns(模式)功能等同于正則表達式,語法使用也和正則類同,這大大便利了運維的使用。

        該功能同樣支持Ansible-playbook,其用法也非常簡單,語法如下:

          ansible   -m   -a  

        該功能主要針對Inventory(清單)的主機列表使用。

        如下示例中主要針對webservers進行正則匹配:

        重啟webservers組所有主機的httpd服務

          ansible webservers -m  service -a  "name=httpd state=restarted"

        (1.)ALL(全量)匹配

        匹配所有主機,all或*號功能相同,但*號需引起來。如檢測所有主機存活情況

          ansible all  -m ping    ansible "*"  -m ping

        檢查192.168.1.0/24網段所有主機存活狀況

          ansible 192.168.1.*  -m  ping

        (2.)邏輯或(or)匹配

        如果我們希望同時對多臺主機或多個組同時執行,相互之間用":"(冒號)分隔即可。

          ansible  "web1:web2"  -m   ping

        (3.)邏輯非(!)匹配

        邏輯非用感嘆號(!)表示,主要針對多重條件的匹配規則,使用方式如下:

        所有在webservers組但不在Phoenix組的主機

          webservers:!Phoenix

        (4.)邏輯與(&)匹配

        和邏輯非一樣,邏輯與也主要針對多重條件的匹配規則,只是邏輯上的判斷不同。邏輯與使用&表示,請看如下示例:

        webservers組和staging組中同時存在的主機

          webservers:&staging

        (5.)多條件組合

        Ansible同樣支持多條件的復雜組合,該情況企業應用不多,這里做簡單舉例說明。

        webservers和dbservers兩個組中的所有主機在staging組中存在且在Phoenix組中不存在的主機

          webservers:dbservers:&staging:!Phoenix

        (6.)模糊匹配

        *通配符在Ansible表示0個或多個任意字符,主要應用于一些模糊規則匹配,在平時的使用中應用頻率非常高,請參考如下示例:

        所有以.magedu.com結尾的主機均符合

          *.magedu.com

        one開頭.com結尾的所有主機和dbservers組中的所有主機

          one*.com:dbservers

        (7.)域切割

        Ansible底層基于python,因此也支持域切割。Python字符串域切割的示例如下:

          str  = '12345678'    print = str[0:1]

        通過[0:1]即可獲取數值1.該功能在Ansible中也支持,以如下Inventory(清單)內容為例:

          [webservers]    cobweb    webbing    weber

        通過上面截取數組下標可以獲取到對應變量值。

          webservers[0]       # == cobweb    webservers[-1]     # ==  weber    webservers[0:1]    # == cobweb,webbing    webservers[1:]     # == webbing,weber

        (8.)正則匹配

        Ansible同樣完整支持正則匹配功能,"~"開始表示正則匹配。

          ~(web|db).*.example.com

        檢測beta.example.com、web.example.com、green.example.com、beta.example.org、web.example.org、green.example.org的存活,使用如下匹配模式:

          ansible "~(beta|web|green).example.(com|org)"  -m  ping

        關于Ansible的正則功能到此結束,相信大家在瀏覽的過程中對其靈活程度也會有所感觸,在對Ansible的實際應用過程中也會不斷地加深對其理解。

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 6080亚洲精品午夜福利| 亚洲一区精品伊人久久伊人| 精品国产热久久久福利| 国产精品毛片久久久久久久| 一本色道久久88综合日韩精品| 99久久精品免费| 成人国产精品一区二区网站| 无码人妻精品一区二区三区夜夜嗨| 精品无码国产自产拍在线观看蜜| 日韩精品在线看| 国产精品久久久久久| 国精无码欧精品亚洲一区| 伊人久久精品无码av一区| 免费视频精品一区二区| 国产精品成人啪精品视频免费| 国产在视频线精品视频二代| 国产在线精品一区二区中文| 无码人妻精品一区二区在线视频| 亚洲精品线路一在线观看| 久久精品中文字幕一区| 国产系列高清精品第一页| 久久成人精品视频| 国产精品一国产精品| 91精品全国免费观看青青| 老司机性色福利精品视频| 亚洲色精品aⅴ一区区三区| 无码人妻一区二区三区精品视频 | 精品久久久久久无码中文字幕一区| 婷婷成人国产精品| 午夜三级国产精品理论三级| 日韩精品一区二区三区视频 | 无码人妻精品一区二区三区夜夜嗨 | 久久国产精品一区二区| 成人国内精品久久久久影院| 国产a视频精品免费观看| 国产精品久久成人影院| 欧美黑人巨大精品| 亚洲日本精品一区二区| 99久久精品免费看国产| 国产一区二区精品久久凹凸| 久久九九久精品国产免费直播|