48/120


テンプレートコメント

/etc/ansible/ansible.cfg次の内容をコピーansible.cfg
[defaults]
ansible_managed = Ansible managed: {file} modified on %Y-%m-%d %H:%M:%S by {uid} on {host}
templates/port.cnf.j2
{{ ansible_managed | comment }}
[mysqld]
port={{ database["svc_port"] }}
コメントコメントコメントが作成されます
警告の目的

効果の再使用


Artefact,Artifact:人工物
  • アプリケーション実行により生成されたデータ
  • 手書きコード
  • ファイルの再使用
    再利用可能な領域
  • 変数ファイル
  • タスクファイル
  • play/playbookファイル
  • ロール(Role)
  • 変数ファイル


    vars_files


    ゲームのキーワード
    - hosts: x
      vars_files:
        - vars/a.yaml
    
      tasks:
      ...

    include varsモジュール

    - hosts: x
    
      tasks:
        - include_vars:
            dir: vars/
    いくつかのオプション
  • dir変数ファイルのdir
  • file特定ファイル名
  • free from自由形式ファイルの位置決め
  • 簡単な実践

    -hosts: 192.168.100.11
    
     tasks:
       - include_vars: var.yaml
       - debug:
            msg: "{{ message }}"
    var.yaml
    ---
    message: hello world

    在庫変数


    在庫内部ファイルに変数を設定する


    ホスト変数

    node1 message="hello world" # 호스트에게 부여
    

    グループ変数

    [wordpress]
    node1
    node2
    
    [wordpress:vars]
    message="hello world"

    在庫外部ファイルでの変数の設定


    https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable
    ディレクトリで、
  • group_vars/<GROUP NAME>
  • host_vars/<HOST NAME>次の2つのディレクトリがある場合:
    変換可能な自動生成エンジンにディレクトリがある場合は、ディレクトリから変数をインポートします.<GROUP NAME>,<HOST NAME>ディレクトリまたはファイルの作成
  • 簡単な実践

    [vagrant@controller ~]$ mkdir host_vars # 디렉토리명은 정해져있음 호스트 부분에 변수 설정
    [vagrant@controller ~]$ code host_vars/192.168.100.11 
    # 호스트에 부여하니까 호스트이름과 같은 파일을 만듬
    [vagrant@controller ~]$ mkdir group_vars
    [vagrant@controller ~]$ code group_vars/nodes
    [vagrant@controller ~]$ tree
    .
    ├── ansible.cfg
    ├── group_vars
    │   └── nodes
    ├── host_vars
    │   ├── 192.168.100.11
    │   └── 192.168.100.12
    │       └── var.yaml
    └── inven.ini
    host_vars\192.168.100.11
    ---
    message: hello node1
    host_vars\192.168.100.12\var.yamlファイル名に関係なく->ファイルを分類可能
    ---
    message: hello node2
    group_vars\nodes
    service_port: 8080
    message: hello world
    ansible-inventory --list
    ansible-inventory --host <HOST>
    test.yaml
    ---
    - hosts: nodes
      tasks:
        - debug:
            msg: "{{ message }} - {{ service_port }}"
    [vagrant@controller ~]$ ansible-playbook test.yaml
    TASK [debug] ***************************************************
    ok: [192.168.100.11] => {
        "msg": "hello node1 - 8080"
    }
    ansible-inventory --host node1
    # node1에 부여된 변수만 확인 가능
    [vagrant@controller ~]$ ansible-inventory --host 192.168.100.11
    {
        "message": "hello node1", 
        "service_port": 8080
    }

    タスクの再使用


    モジュールの場所
    ansible-doc -l | grep include
    ansible-doc -l | grep import_
    include vars:変数のインポート
    include role:ロールのインポート
    include tasks:タスクのインポート
    import playbook:playbookのインポート
    import role:ロールのインポート
    import tasks:タスクのインポート

    include vs. import


    includeimportが有効になった場合、動的静的ループは使用できません.プロセッサを呼び出すことはできません.
    プリスタティックかカウントか->対応するモジュールで処理する違い
    動的インポートと静的インポート→機能の違い

    importからループできません


    import tasksはloopを使用できません
    - hosts: 192.168.100.11
      tasks:
        - debug:
            msg: in play
        - import_tasks:
            file: task.yaml
          with_sequence: start=1 end=3 # 안됨
        - debug:
            msg: in play

    解決策

    - hosts: 192.168.100.11
      tasks:
        - debug:
            msg: in play
        - import_tasks:
            file: task.yaml
        - debug:
            msg: in play
    task.yaml
    - debug:
      with_sequence: start=1 end=3
    yamlファイルに重複を追加->実際にimport tasksで3回のdebugが生成されます

    includeからハンドラを呼び出せません

    - hosts: 192.168.100.11
      tasks:
        - command: hostname
          notify:
            - hello notify
      handlers:
        - include_tasks: task.yaml
    Handlerはダイナミックなのでアラームを受信できませんtask.yaml
    - name: hello notify
      debug:
        msg: hello notify

    解決策


    アラートを受信するコードを追加
    - hosts: 192.168.100.11
      tasks:
        - command: hostname
          notify:
            - hello notify
      handlers:
        - name: hello notify
    	  include_tasks: task.yaml

    饰演的角色


    キャラクタの作成-->統合-->ゲームマニュアル
    統一された構造
    mkdir roles # 반드시 roles 디렉토리 사용
    ansible-galaxy init common --init-path roles # 구조화된 형식을 자동으로 만들어주는 명령어
    .
    └── roles
        └── common
            ├── defaults
            │   └── main.yml
            ├── files
            ├── handlers
            │   └── main.yml
            ├── meta
            │   └── main.yml
            ├── README.md
            ├── tasks
            │   └── main.yml
            ├── templates
            ├── tests
            │   ├── inventory
            │   └── test.yml
            └── vars
                └── main.yml
    roles/common:ロール名tasks/main.yml:タスクはここにありますhandlers/main.yml:ここでハンドラ操作tests/inventory:ロールをテストするためのインベントリtests/test.yml:キャラクターをテストするゲームマニュアルdefaults/main.yml:デフォルトのロール変数(優先度が低い)vars/main.yml:ロール変数(優先度が高い)files:ファイル関連モジュールsrc:パラメータ参照ファイルの場所files/a.txt:パスを指定する必要はありません
    - copy:
    	src: a.txt
    templates:テンプレートモジュールsrc:パラメータ参照ファイルの場所templates/a.j2
    - templates:
        src: a.j2
    meta/main.yml:ロールを記述するファイル
  • キャラクターバージョン
  • キャラクター名
  • キャラクター作成者
  • キャラクター付き印刷フォーム(Linuxリリース)
  • 役割依存性

  • ロールを使用して次のファイルを構成
    - hosts: 192.168.100.12
      become: yes
      vars:
        web_port: 81
        
      tasks:
        - yum:
            name: httpd
            state: installed
        - replace:
            path: /etc/httpd/conf/httpd.conf
            regexp: '^Listen'
            replace: '#Listen'
        - template:
            src: web_config/ports.conf.j2
            dest: /etc/httpd/conf.d/ports.conf
          notify:
            - Restart Web Service
        - copy:
            src: web_contents/index.html
            dest: /var/www/html/
        - service:
            name: httpd
            state: started
            enabled: yes
      
      handlers:
        - name: Restart Web Service
          service:
            name: httpd
            state: restarted
     
    [vagrant@controller sample]$ tree
    .
    ├── sample.yaml
    ├── web_config
    │   └── ports.conf.j2
    └── web_contents
        └── index.html
  • ロールの作成に必要なディレクトリ
  • [vagrant@controller sample]$ mkdir roles
    [vagrant@controller sample]$ mkdir -p roles/common
    [vagrant@controller sample]$ mkdir -p roles/common/vars
    [vagrant@controller sample]$ mkdir -p roles/common/tasks
    [vagrant@controller sample]$ mkdir -p roles/common/handlers
    [vagrant@controller sample]$ mkdir -p roles/common/files
    [vagrant@controller sample]$ mkdir -p roles/common/templates
  • `tasks/main.yaml
  • tasks:
        - yum:
            name: httpd
            state: installed
        - replace:
            path: /etc/httpd/conf/httpd.conf
            regexp: '^Listen'
            replace: '#Listen'
        - template:
            src: ports.conf.j2
            dest: /etc/httpd/conf.d/ports.conf
          notify:
            - Restart Web Service
        - copy:
            src: index.html
            dest: /var/www/html/
        - service:
            name: httpd
            state: started
            enabled: yes
  • handlers/main.yaml
  • - name: Restart Web Service
      service:
        name: httpd
        state: restarted
  • vars/main.yaml
  • ---
    web_port: 81
  • templates/files/の間のファイル移動
  • [vagrant@controller sample]$ cp web_contents/index.html roles/common/files/
    [vagrant@controller sample]$ cp web_config/ports.conf.j2 roles/common/templates/
    [vagrant@controller sample]$ ansible-playbook site.yaml 
    
    PLAY [192.168.100.11] 
    
    TASK [Gathering Facts] 
    ok: [192.168.100.11]
    
    TASK [common : yum] 
    changed: [192.168.100.11]
    
    TASK [common : replace] 
    changed: [192.168.100.11]
    TASK [common : template] 
    changed: [192.168.100.11]
    
    TASK [common : copy] 
    changed: [192.168.100.11]
    
    TASK [common : service] 
    changed: [192.168.100.11]
    
    RUNNING HANDLER [common : Restart Web Service] 
    changed: [192.168.100.11]

    こうぞう

    [vagrant@controller sample]$ tree
    .
    ├── roles
    │   └── common
    │       ├── files
    │       │   └── index.html
    │       ├── handlers
    │       │   └── main.yaml
    │       ├── tasks
    │       │   └── main.yaml
    │       ├── templates
    │       │   └── ports.conf.j2
    │       └── vars
    │           └── main.yaml
    └── site.yaml

    在游戏内实行塔斯克的顺序

    # Play
    - hosts:
      
      pre_tasks:
      
      roles:
      
      tasks:
      
      post_tasks:
    
      handlers:
      
  • pre_tasks
  • pre tasksのハンドラ
  • roles
  • rolesのハンドラ
  • tasks
  • tasksのハンドラ
  • post_tasks
  • post tasksのハンドラ
  • かどこうじ


    ansible-galaxy


    https://galaxy.ansible.com/
  • ロール(Role)
  • コレクション:ロール+3 rd Partyモジュール(ロール別)
  • バインド:Red Hat OpenShift<-ロール
  • ロール・リストの表示

    ansible-galaxy list
  • /home/vagrant/.ansible/roles
  • /usr/share/ansible/roles
  • /etc/ansible/roles
  • 検索順
    ansible-galaxy list --roles-path roles # 역할있는 디렉토리 직접 지정
    [vagrant@controller sample]$ ansible-galaxy list --roles-path roles/common
    # /home/vagrant/sample/roles/common
    # /usr/share/ansible/roles
    # /etc/ansible/roles
    ansible-galaxy init 역할의 뼈대를 만들어줌
    ansible-galaxy search elasticsearch # 역할 검색
    ansible-galaxy info geerlingguy.elasticsearch # 역할의 정보 확인
    ansible-galaxy install geerlingguy.elasticsearch
    ansible-galaxy remove geerlingguy.elasticsearch