day39--綜合架構(gòu)批量管理 ansible(自動化軟件)-劇本擴展功能and角色

劇本編寫擴展功能
    a 在劇本中設(shè)置變量信息  
    b 在劇本中設(shè)置注冊信息  
    c 在劇本中設(shè)置判斷信息
    d 在劇本中設(shè)置循環(huán)信息
    e 在劇本中設(shè)置錯誤忽略
    f 在劇本中設(shè)置標簽信息
    g 在劇本中設(shè)置觸發(fā)信息
  • a 在劇本中設(shè)置變量信息
   設(shè)置變量方法一: 在劇本中設(shè)置變量 
    - hosts: 172.16.1.41
      vars:
        data_dir: /oldboy
      tasks:
        - name: copy file 01
          copy: src={{ data_dir }}/oldboy01.txt  dest=/tmp
        - name: copy file 02
          copy: src={{ data_dir }}/oldboy02.txt  dest=/opt
        - name: copy file 03
          copy: src={{ data_dir }}/oldboy03.txt  dest=/usr/local/
    
    設(shè)置變量方法二: 在命令中設(shè)置變量
    ansible-playbook -e data_dir=/oldboy test_變量配置功能.yml
    
    設(shè)置變量方法三: 在主機清單中設(shè)置
    a: 單個主機設(shè)置變量
    172.16.1.41 data_dir=/oldboy
    
    b: 多個主機設(shè)置變量
    [oldboy]
    172.16.1.41
    [oldboy:vars]
    data_dir=/oldboy    
       
    問題: 三種變量設(shè)置方式, 之間優(yōu)先級關(guān)系是什么   
    創(chuàng)建環(huán)境:
    mkdir /oldboy/ -p
    mkdir /oldgirl/ -p 
    mkdir /olddog/ -p
    結(jié)論:
    命令配置變量  最優(yōu)先
    劇本配置變量  其次優(yōu)先
    主機清單配置  最后選擇
  • b在劇本中設(shè)置注冊信息
    [root@m01 ansible_playbook]# cat test_注冊功能配置.yml 
    - hosts: nfs_client
      tasks:
        - name: mount dir
          mount: src=172.16.1.31:/data path=/mnt fstype=nfs state=mounted
        - name: check mount
          shell: df -h
          register: oldboy
        - name: display mount info
          debug: msg={{ oldboy.stdout_lines }}     
  • c在劇本中設(shè)置判斷信息
      常見主機信息:
      ansible_all_ipv4_addresses:               僅顯示ipv4的信息。
      ansible_devices:                          僅顯示磁盤設(shè)備信息。
      ansible_distribution:                 顯示是什么系統(tǒng),例:centos,suse等。
      ansible_distribution_major_version:       顯示是系統(tǒng)主版本。
      ansible_distribution_version:         僅顯示系統(tǒng)版本。
      ansible_machine:                          顯示系統(tǒng)類型,例:32位,還是64位。
      ansible_eth0:                         僅顯示eth0的信息。
      ansible_hostname:                     僅顯示主機名。
      ansible_kernel:                           僅顯示內(nèi)核版本。
      ansible_lvm:                              顯示lvm相關(guān)信息。
      ansible_memtotal_mb:                      顯示系統(tǒng)總內(nèi)存。
      ansible_memfree_mb:                       顯示可用系統(tǒng)內(nèi)存。
      ansible_memory_mb:                        詳細顯示內(nèi)存情況。
      ansible_swaptotal_mb:                 顯示總的swap內(nèi)存。
      ansible_swapfree_mb:                      顯示swap內(nèi)存的可用內(nèi)存。
      ansible_mounts:                           顯示系統(tǒng)磁盤掛載情況。
      ansible_processor:                        顯示cpu個數(shù)(具體顯示每個cpu的型號)。
      ansible_processor_vcpus:                  顯示cpu個數(shù)(只顯示總的個數(shù))。   
      
      - hosts: all
        tasks:
          - name: install software
            yum: name=nfs-utils state=installed
          - name: create data dir
            file: path=/data/ state=directory
            when: (ansible_hostname == "nfs01")   
            
      判斷語法結(jié)構(gòu)信息:
      01. 匹配單個信息:
      when: (ansible_hostname == "nfs01")
      
      02. 匹配多個信息 ???
      when: (ansible_hostname == "nfs01") or  (ansible_hostname == "backup") 
      when: (ansible_hostname == "nfs01") and (ansible_eth0 == "10.0.0.31")
      
      03. 對匹配信息進行取反
      when: (ansible_hostname != "nfs01")
  • d.劇本編寫循環(huán)功能
編寫循環(huán)功能:
       編寫方式一: 列表方式設(shè)置循環(huán)
       - hosts: 172.16.1.41
         tasks:
           - name: install software
             yum: name={{ item }} state=installed
             with_items:
               - rsync
               - nfs-utils
               - telnet-server
               
       編寫方式二: 字典方式設(shè)置循環(huán)         
       - hosts: 172.16.1.41
         tasks:
           - name: create user
             user: name={{ item.old01 }} uid={{ item.old02 }} shell={{ item.old03 }}
             with_items:
               - {old01: 'oldboy01', old02: '5001', old03: '/sbin/nologin'}
               - {old01: 'oldboy02', old02: '5002', old03: '/sbin/nologin'}

  • e.劇本忽略錯誤功能 劇本中shell模塊使用時錯誤問題
       [root@m01 ansible_playbook]# cat test_忽略錯誤配置.yml 
       - hosts: 172.16.1.41
         tasks:
           - name: install software
             shell: yum install -y htop
           - name: create user
             shell: useradd oldboy
             ignore_errors: yes      開啟忽略錯誤功能
           - name: boot server
             shell: systemctl start rsyncd
       =====================================================
       補充: 使用shell萬能模塊會出現(xiàn)的問題:
       01. 實現(xiàn)批量管理操作會更加麻煩
       02. 實現(xiàn)劇本任務(wù)功能,不具有冪等性  
       =====================================================
    
  • f.劇本編寫標簽功能 調(diào)式劇本
       - name: create user
         user: name=rsync shell=/sbin/nologin create_home=no
         tags: oldboy01   
       ansible-playbook test_標簽功能配置.yml -t oldboy01           --- 只執(zhí)行標記任務(wù)
       ansible-playbook test_標簽功能配置.yml --skip-tags oldboy01  --- 跳過標記任務(wù)
  • f.劇本觸發(fā)器功能配置
       [root@m01 ansible_playbook]# cat  test_觸發(fā)功能配置.yml
       - hosts: 172.16.1.41
         tasks:
           - name: push config file
             copy: src=/tmp/rsyncd.conf dest=/etc/
             notify: rsync_restart
           - name: boot server
             service: name=rsyncd state=started
       
         handlers:
           - name: rsync_restart
             service: name=rsyncd state=restarted
        PS: 觸發(fā)器任務(wù)會在所有任務(wù)執(zhí)行完畢之后才執(zhí)行
劇本提高執(zhí)行效率
       取消劇本收集主機信息功能
       - hosts: 172.16.1.41
         gather_facts: no     --- 提升劇本執(zhí)行效率
         tasks:
       PS: 取消了收集信息功能, 判斷功能也無法使用了
       ==============================================================
       總結(jié): 劇本執(zhí)行慢的原因
       01. SSH遠程連接優(yōu)化沒有配置  關(guān)閉認證功能 關(guān)閉DNS反向解析功能
       02. yum下面軟件慢            使用本地yum倉庫
       03. 劇本執(zhí)行收集信息慢
       04. 劇本執(zhí)行過程必須完整     yum -- 慢 -- ctrl+c -- yum lockfile is 調(diào)用
       ==============================================================
ansible劇本整合功能
    方式一:include_tasks: f1.yml  
    - hosts: all
      remote_user: root
      tasks:
        - include_tasks: f1.yml
        - include_tasks: f2.yml

    方式二:include: f1.yml
    - include:f1.yml    
    - include:f2.yml

    方式三:- import_playbook:  推薦
    [root@m01 ansible-playbook]# cat main.yml 
    - import_playbook: base.yml     
    - import_playbook: rsync.yml    
    - import_playbook: nfs.yml 

如何配置角色功能

  • 方式一
    第一個歷程: 配置好主機清單
    vim /etc/ansible/roles/hosts
    [rsync_server]
    172.16.1.41
    
    [rsync_client]
    172.16.1.31
    172.16.1.7
    
    [nfs_server]
    172.16.1.31
    
    [nfs_client]
    172.16.1.41
    172.16.1.7
    
    第二個歷程: 創(chuàng)建角色目錄
    mkdir /etc/ansible/roles/rsync 
    mkdir /etc/ansible/roles/rsync/{tasks,files,vars,handlers,templates}
    tasks:     目錄中定義任務(wù)的劇本信息
    files:     保存要分發(fā)文件信息
    vars:      目錄保存定義變量劇本文件
    handlers:  目錄中保存觸發(fā)器劇本信息
    templates: 目錄中保存模板文件(jinja2) ???

    ansible-galaxy init nginx  --- 創(chuàng)建角色目錄路徑信息
    
    第三個歷程: 配置角色目錄中劇本信息
    1) 編寫tasks/main.yml
       編寫方式一: 直接編寫任務(wù)信息
       - name: install software
         yum: name=rsync state=installed
       - name: push file info
         copy: src={{ file_dir }}/{{ item.src }} dest={{ conf_dir }} mode={{ item.mode }}
         notify: 
           - rsync_restart
           - rsync_port
           - rsync_port_info
         with_items:
           - {src: 'rsyncd.conf', mode: '644'}
           - {src: 'rsync.password', mode: '600'}
         when: ansible_eth0.ipv4.address == "10.0.0.41"
       - name: create user
         user: name=rsync shell=/sbin/nologin create_home=no
         when: ansible_eth0.ipv4.address == "10.0.0.41"
       - name: create backup dir
         file: path=/backup state=directory owner=rsync group=rsync
       ...省略信息...
  • 方式二
       # cat copy_file.yml 
       - name: push file info
         copy: src={{ file_dir }}/{{ item.src }} dest={{ conf_dir }} mode={{ item.mode }}
         notify: 
           - rsync_restart
           - rsync_port
           - rsync_port_info
         with_items:
           - {src: 'rsyncd.conf', mode: '644'}
           - {src: 'rsync.password', mode: '600'}
    
       # cat install_rsync.yml 
       - name: install software
         yum: name=rsync state=installed
         
       進行多個任務(wù)劇本整合:
       vim main.yml
       - include_tasks: install_rsync.yml
       - include_tasks: copy_file.yml 
          
       
    2) 保存files/文件信息
       [root@m01 files]# ll
       總用量 8
       -rw-r--r-- 1 root root 409 8月  26 19:00 rsyncd.conf
       -rw-r--r-- 1 root root  23 8月  26 18:23 rsync.password       
    
    3) 配置vars/main.yml
       # cat ../vars/main.yml 
       conf_dir: /etc/
       file_dir: /ansible_playbook/file
       
    4) 配置handlers/main.yml
       [root@m01 files]# cat ../handlers/main.yml
       - name: rsync_restart
         service: name=rsyncd state=restarted
       - name: rsync_port
         shell: netstat -lntup|grep rsync
         register: rsync_port
       - name: rsync_port_info
         debug: msg={{ rsync_port.stdout_lines }}

    第四個步驟: 調(diào)取角色信息
    [root@m01 ansible]# cat roles/site.yml 
    - hosts: rsync_server,rsync_client
      roles:
        - rsync

    第五個步驟: 執(zhí)行角色匯總劇本
    ansible-playbook /etc/ansible/roles/site.yml -i /etc/ansible/roles/hosts
  • 補充: templates目錄作用
    放置存儲模板文件
    
    第一個歷程: 修改配置文件 變成 模板文件
    vim rsyncd.conf
    port = {{ prot }}
    
    第二個歷程: 需要將模板文件移動到templates/目錄中
    mv rsync/files/rsyncd.conf rsync/templates/
    
    第三個歷程: 修改復制數(shù)據(jù)的模塊
    copy     復制文件數(shù)據(jù) == ''  所見即所得
    template 復制文件數(shù)據(jù) == "" 可以解析{{}}調(diào)取變量信息
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容