DevOps, Infra

[Ansible] include vs import

seulseul 2023. 3. 9. 12:09

 

    1. 요약

    • import 는 정적 (Static) 이며, 플레이북 (playbook) 이 Parsing 될 때 사전에 처리되어 일찍 에러를 확인할 수 있음
    • include 는 동적 (Dynamic) 으로, 플레이북 실행 중에 발생하는 대로 처리되므로 해당 task 에 도달했을때 에러를 발견할 수 있음

    2. import tasks

    ---
    # main.yml
    
    - name: "[Jenkins] Install Jenkins"
      import_tasks: jenkins.yml
    
    - name: "[Jenkins] Set jenkins options"
      import_tasks: tune.yml

    복잡한 작업을 여러 Task 로 나눌수있고, Task 는 나열된 순서 대로 실행된다.

     

    ---
    # main.yml
    tasks:
    - import_tasks: wordpress.yml
      vars:
        wp_user: timmy
        
    - import_tasks: wordpress.yml
      vars:
        wp_user: alice
        
    - import_tasks: wordpress.yml
      vars:
        wp_user: bob
    • import tasks 를 사용하여 변수 처리를 할경우 위와 같이 코드가 길어지게된다.

    3. include tasks

    ---
    # main.yml
    - include_tasks: loop_me.yml
      loop:
        - one
        - two
        - three
    
    ---
    # loop_me.yml
    - name: print stuff
      debug:
        msg: "stuff: {{ item }}"
    - name: print other stuff
      debug:
        msg: "other stuff: {{ item }}"
    • include_tasks 의 가장 큰 장점은 반복문 (loop) 이다.
    • 위 task 에서 반복문 (loop) 가 사용됨, 반복문은 import task 로 사용할 수 없다.
    - include_tasks: prerequisites_{{ ansible_os_family | lower }}.yml
    • include tasks : ansible 변수를 이용하여 동적으로 처리할 수 있다.

    참고