<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      RHCE(jinjia2模塊管理和角色管理)

      一:jinjia2模版

      1:為什么需要這個

      比如,有多臺主機都要搭建httpd服務,將一個httpd的配置文件拷貝到其余的主機上面去,上面的ip地址都是一樣的,很死板,不會因為主機的不同導致Ip的不同,因此就出現了jinja2模版文件,生成通用的配置文件,對于這類的配置文件,是需要更改小部分的內容,其他大部分的內容無需更改

      通過使用帶有變量的模版文件拷貝到被控節點,變量會自動的識別出來值

      例如ip地址能自動的識別出來,關鍵就是facts變量,收集被控節點的事實變量,既能自動的識別出來

      2:操作 

      需要使用template模塊,能夠識別變量,變量不需要使用" "引號引起來,template會自動識別變量,也不需要關閉facts變量,因為模版中的變量依賴于facts變量

      將httpd的配置文件拷貝到其他的被控節點上面,然后能夠自動的識別主機的ip地址

      #修改httpd的主配置文件
      Listen {{ansible_ens160.ipv4.address}}:80
      
      編寫一個劇本,使用template模塊,這個模塊,就可以發送這個jinja2這個模版
      [root@controller mnt]# cat f1.yml 
      - hosts: all
        tasks:
          - template:
             src: /mnt/httpd.conf.j2
             dest: /mnt/httpd.conf
      
      #執行劇本即可,將模版發送過去,然后就能自動的識別這個變量
      

      3:jinjia模版語句

      1、條件語句(if判斷)

      總而言之就是if判斷能夠使用很多的表達式,when能夠使用的,他都能使用

       需求:如果服務器的網卡不是ens160,那么上述的ip地址就無法實現監聽,如果一個服務器有多張網卡的話,就需要判斷,來判斷條件是否滿足

      格式:

      {% if 表達式 %}
      執行語句
      {% elif 表達式 %}
      執行語句
      {% else %}
      執行語句
      {% endif %}

      案例:

      判斷這個變量是否被定義了,如果定義了就執行,否則的話就是另外的一種情況,如果被控節點有ens160網卡,那么就監聽ens160網卡,如果被控節點有ens224網卡的話。如果都沒有的話,就監聽所有的ip地址即可

       if ansible_ens160.ipv4.address is defined %}
      Listen {{ansible_ens160.ipv4.address}}:80
      {% elif ansible_ens224.ipv4.address is defined %}
      Listen {{ansible_ens224.ipv4.address}}:80
      {% else %}
      Listen 0.0.0.0:80
      {% endif %}

      案例:  

      如果是node1主機上,則內容顯示node1 is ok,如果是在node2主機上,則內容為node2 is ok

      {% if ansible_hostname == 'node1' %}
      "node1 is ok"
      {% elif ansible_hostname == 'node2' %}
      {% else %}
      error
      {% endif %}
      
      - hosts: all
        tasks:
          - template:
             src: /mnt/h1
             dest: /mnt/h1.conf

      2、for循環  

      for循環的格式

      {% for 變量 in 循環體 %}
      執行語句
      {% endof %}

      案例:

      在node1主機上面,/etc/hosts中包含所有主機的ip地址和FQDN和主機名的映射關系

      groups.all就是遍歷主機清單中的所有主機,然后就是定義了這個模版,不同的主機有不同的變量,然后將其內容都拷貝到一個文件里面即可

      注意就是:需要提前獲取這些節點的信息,才能將里面的內容拷貝過去

      [root@controller mnt]# cat h2
      {% for i in groups.all %}
      {{hostvars[i].ansible_ens160.ipv4.address}} {{hostvars[i].ansible_fqdn}{{hostvars[i].ansible_hostname}}
      {% endfor %}
      
      - hosts: all
        tasks:
          - template:
             src: /mnt/h2
             dest: /etc/hosts

      4:jinja2過濾器

      1、default過濾器

      使用default的jinjia2過濾器

      當變量沒有定義值的時候,就使用默認的值來進行替代

      格式:

      "{{變量名|jinja2過濾器}}"

       

      案例:

      定義2個用戶名,一個有家目錄,另一個沒有家目錄,沒有家目錄的話,就自動的默認設置一個目錄即可

      - hosts: all
        vars:
          users:
            - name: zhangsan
              home: /opt/zhangsan
            - name: lisi
        tasks:
          - user:
             name: "{{item.name}}"
             home: "{{ item.home|default('/tmp/default') }}"
             state: present
            loop: "{{users}}"
      

      2、常見的過濾器:

      password_hash

      dict2items

      loop循環里面有

       案例:

      #創建用戶的時候,使用password_hash過濾器進行過濾
      因為版本的問題,rhel9的ansible的版本太低了,沒有這個過濾器,解決的方法就是安裝更加高版本的nasible的軟件包

      二:角色和到導航器

      1:為什么需要角色

      主要就是為了解決這個劇本之間的移植的關系,在沒有角色之前的話,定義的變量或者是引入大外部的變量的文件,都很分散,所以的話就是移植到其他的主機上,可能缺乏某個變量導致劇本無法的運行,有了角色之后,就相當于是一個目錄里面有不同的目錄,分別做不同的事情,將一個劇本拆分成不同的任務來進行完成,因此的話,劇本就非常高效的移植到其他的主機上面,就能夠進行運行了

      2:角色的組成部分

      生成一個角色后,就是有不同的目錄,

      files:用于存放一些非模版文件的文件,就是一些普通的文件,會被復制到被控節點上面的

      templates:用于存放角色相關的jinja2模版文件,當使用角色相關的模版時,如果沒有明確指定模版的路徑,則默認使用此目錄中的模版

      tasks:角色所需要執行的所有任務文件都存放于此,包含一個主文件main.yml,可以通過include的方式引入其他任務文件,就是可以創建多個tasks任務,然后在main,yml里面進行引用

      handlers:用于定義角色中需要調用的handlers,包含一個主配置文件main.yml,也可以通過include引入其他的handlers文件

      vars:定義此角色要用到的變量,包含一個主文件main.yml

      meta:用于存儲角色的元數據信息,這個寫元數據用于描述角色的相關屬性,作者等

      defaults:除了vars目錄,也可以定義角色用到的變量,定義的變量的優先級是最低的

      3:角色相關操作

      #通過ansible-galaxy init apache 就可以初始化角色目錄結構,生成目錄和文件
      #當然ansible的主配置文件里面一定要定義好角色的路徑,生成角色的時候,默認的路徑
      [root@controller roles]# ansible-galaxy init apache
      - Role apache was created successfully
      [root@controller roles]# ls
      apache
      
      #執行一個任務
      將所有的目錄里面的東西都要運用到
      #安裝httpd服務,然后監聽安裝成功后,創建一個s.txt的文件,使用模版將httpd的配置文件拷貝過去,網站的訪問的根文件,創建出來,防火墻放行http服務,使用循環來完成,
      
      tasks目錄下面的內容
      [root@controller tasks]# cat main.yml 
      ---
      # tasks file for apache
      
      - name: use yum
        yum:
          name: httpd
          state: present
        notify: get_status
      - name: conent
        copy:
          src: index.html
          dest: /var/www/html
      - name: use template
        template:
          src: httpd.conf.j2
          dest: /opt/httpd.conf
      - name: firewalld
        firewalld:
         service: http
         permanent: yes
         state: enabled
         immediate: yes
      - name: service
        service:
         name: "{{ item }}"
         state: started
         enabled: yes
        loop: 
           - firewalld
           - httpd
      - name: touch q7
        file:
          path: "{{http}}"
          state: touch
        
      #file目錄下面
      [root@controller files]# ls
      index.html
      [root@controller files]# cat index.html 
      hello rhce
      
      #handlers下面的內容
      [root@controller handlers]# ls
      main.yml
      [root@controller handlers]# cat main.yml 
      ---
      # handlers file for apache
      
      - name: get_status
        file:
          path: /opt/s.txt
          state: touch
      
      #templates下面的內容
      [root@controller templates]# ls
      httpd.conf.j2
      
      #vars下面的內容
      [root@controller vars]# cat main.yml 
      ---
      # vars file for apache
      http: q7.com
      
      
      
      #執行這個劇本
      [root@controller ansible]# cat r1.yml 
      - hosts: node1
        roles:
          - apache
      列表的形式執行這個劇本,可以使用多個角色進行執行

      2、include_tasks和pre_tasks(之前)和post_tasks(之后)

      當然也可以將這個任務拆分成好幾塊,使用include來引用這些任務

      就是當任務過多的情況下,可以這樣的使用,就不用在main.yml里面進行編寫了

      案例:

      [root@controller tasks]# pwd
      /etc/ansible/roles/apache/tasks
      [root@controller tasks]# ls
      copy.yml  firewalld.yml  main.yml  template.yml
      
      [root@controller tasks]# cat main.yml 
      ---
      # tasks file for apache
      
      - name: use yum
        yum:
          name: httpd
          state: present
        notify: get_status
      - include_tasks:
         file: copy.yml
      - include_tasks:
        file: template.yml
      - include_tasks:
         file: firewalld.yml
      - name: service
        service:
         name: "{{ item }}"
         state: started
         enabled: yes
        loop: 
           - firewalld
           - httpd  
      - name: touch q7
        file:
          path: "{{http}}"
          state: touch 

      pre_taskspost_tasks就是一個在角色之前執行,一個在后面角色之后進行執行

      就是在使用角色之前需要一個環境,提前將這個環境配置好即可,定義的位置在劇本之間,不在角色之間

      [root@controller ansible]# cat r1.yml 
      - hosts: node1
        roles:
          - apache
        pre_tasks:
          - debug:
             msg: pre_tasks
        post_tasks:
          - debug:
             msg: post_tasks
      

       

      4:角色的獲取,安裝,集合

      1、獲取角色的方式

      1)通過官網進行下載

      galaxy.ansible.com

       

      2、通過本地的軟件包進行獲取

      掛載鏡像,安裝紅帽系統角色,rhel-system-roles

      yum -y install rhel-system-roles.noarch
      #這個目錄下面有很多個角色
      [root@controller roles]# pwd
      /usr/share/ansible/roles

      2、安裝角色

      ansible-galaxy role install role-name

      安裝角色,可以使用幾個選項

      -r  指定文件,編寫一個yaml文件,里面要有url

      -p  指定路徑

      3、查找角色

      ansible-galaxy search role-name

      4、列出系統上面的角色

      ansible-galaxy role list    

      5:集合

      ansible版本來說的

      2.9之前的話,都是roles集合,普通文件,tasks任務等

      2.9之后的話,使用就是集合collection,里面包含了roles角色,plugin插件,模塊等 

      和安裝角色一樣的方式

       5:ansible的加密

      就是不想讓別人查看這個劇本,就使用加密,也可以使用在普通文件上 

      創建一個加密文件,ansible-vault create filename 輸入密碼

      查看一個加密文件,ansible-vault view filename 輸入密碼

      解密一個加密文件,ansible-vault decrypt filename,就能直接的進行查看這個文件了

      加密一個已經存在的文件,ansible-vault encrypt filename,可以使用--vault-password-file來使用密碼文件對其進行加密的操作

      修改一個加密文件密碼:ansible-vault rekey passwd

      但是呢,可以進行到這個加密文件里面,修改里面的內容,然后原來的密碼就失效了

       

      對于一個劇本進行加密后不能直接的使用這個劇本

       使用密碼文件對于劇本進行加密

      ansible-vault encrypt --vault-password-file p1 parted.yml 
      #解密的操作
      [root@controller ansible]# ansible-vault decrypt --vault-password-file p1 parted.yml 
      Decryption successful
      
      
      #都可以使用密碼文件進行加密和解密的操作
      
      
      #創建文件時,就進行加密的操作
      [root@controller ansible]# ansible-vault create p2
      New Vault password: 
      Confirm New Vault password: 
      
      #瀏覽文件(不對其進行解密的操作)
      [root@controller ansible]# ansible-vault view p2
      Vault password: 
      asadad
      
      #解密文件
      [root@controller ansible]# ansible-vault decrypt p2
      Vault password: 
      Decryption successful
      [root@controller ansible]# cat p2
      asadad  

      1:執行一個加密的劇本?

      1、在命令行模式下輸入密碼

      #對于這個劇本進行加密
      [root@controller mnt]# ansible-playbook q1.yml  --ask-vault-pass
      Vault password: 

      2、通過密碼文件執行劇本

      就是將密碼保存到文件里面即可

      [root@controller mnt]# ansible-playbook q1.yml --vault-password-file=p1.txt

      6:導航器和集合

      1、集合

      集合路徑的定義

      ansible的主配置文件里面定義了的

      安裝集合就是為了彌補模塊的缺少,有了更多的模塊,就能進行更多的操作

      安裝集合的方式:
      ansible-galaxy collection install 集合

      如果定義了集合的路徑的話,就會安裝在里面

      2、導航器

      就是執行劇本的另外的一種方式,不能使用ad-hoc命令執行

      1、操作:
      安裝導航器,需要掛載ansible的鏡像,搭建一個yum倉庫,然后進行安裝

      每次使用導航器執行劇本的時候,都會重新拉取一個最新的鏡像,結束后,掛掉

      可以搭建自動化執行的環境,從本地鏡像中執行,就不需要每次都去網上進行拉取鏡像

      [root@controller ~]# cat .ansible-navigator.yml 
      ansible-navigator:
       execution-environment:
        image: registry.redhat.io/ansible-automation-platform-22/ee-supported-rhel8
        pull:
         policy: missing

       

      使用導航器運行一個劇本

      ansible-navigator run 劇本 -i /etc/ansible/hosts  -m stdout(命令行的模式)

      run  運行的劇本

      -i  指定主機清單

      -m 指定輸出的格式,可視化和字符模式,

      可視模式就是進入里面了

      2、命令:
      查看導航器的模塊:ansible-navigator doc -l 

      ansible-navigator doc vmware.vmware_rest.vcenter_vm_hardware_cpu_info  查看模塊的幫助信息

       

      ansible-navigator inventory  --list  -m stdout -i /etc/ansible/hosts 查看所有的主機

       

      ansible-navigator inventory  --list  -i /etc/ansible/hosts   可視化模式列出所有的主機

       

      posted @ 2024-04-07 14:59  q_7  閱讀(20)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲sm另类一区二区三区| 中文字幕乱码一区二区免费 | 网友偷拍视频一区二区三区| 亚洲国产欧美一区二区好看电影| 日韩熟女精品一区二区三区| 中文字幕色偷偷人妻久久| 亚洲 日韩 在线精品| 激情综合色综合久久丁香| 视频一区视频二区视频三| 五月婷婷久久中文字幕| 色一情一区二区三区四区| 中文字幕人妻色偷偷久久| 在线播放亚洲成人av| 无码国模国产在线观看免费| 国产区一区二区现看视频| 97精品人妻系列无码人妻| 精品无码国产一区二区三区51安| 精品人妻一区二区三区蜜臀 | 亚洲激情av一区二区三区| 国产一区二区三区精品综合| 老色99久久九九爱精品| 欧美不卡无线在线一二三区观| 欧美成人精品手机在线| 国产乱码一区二区三区免费 | 天天躁夜夜躁狠狠喷水| 亚洲性日韩一区二区三区| 91孕妇精品一区二区三区| 国产高清在线a视频大全| 久久精品人人做人人爽电影蜜月| 亚洲精品专区永久免费区| 日本高清在线观看WWW色| 丰满岳乱妇一区二区三区| 国产av丝袜熟女一二三| 狠狠色噜噜狠狠狠狠777米奇| 激情五月日韩中文字幕| 97人妻中文字幕总站| 国产精品综合色区在线观| 久久综合色之久久综合| 激情综合网激情五月激情| 欧美成人精品三级网站| 国产精品v欧美精品∨日韩|