본문으로 건너뛰기

Ansible 기본 안내

설치

python3 -m pip install ansible

Control node

Directory structure

<playbook>/
├── ansible.cfg # 설정 파일
├── inventories/
│ ├── <inventory>/
│ │ ├── hosts.yaml
│ │ ├── group_vars/
│ │ │ ├── <group>/
│ │ │ │ ├── <vars>.yaml
│ │ │ │ └── ...
│ │ │ ├── <group>.yaml
│ │ │ └── ...
│ │ └── host_vars/
│ │ ├── <host>/
│ │ │ ├── <vars>.yaml
│ │ │ └── ...
│ │ ├── <host>.yaml
│ │ └── ...
│ └── ...
├── group_vars/
│ └── ...
├── host_vars/
│ └── ...
├── library/ # 커스텀 모듈
├── module_utils/ # 커스텀 모듈 유틸
├── filter_plugins/ # 커스텀 필터 플러그인
├── <purpose>.yaml # playbook
├── ...
└── roles/
└── ...

Inventory

ansible 모듈 실행

ansible <flags> -m <module> -a <args> '<hostPattern>'
  • e.g.
    • ansible -i <inventory> -m ping '<hostPattern>': ansible 실행이 가능한 상태인지 확인합니다.
    • ansible -i <inventory> -m debug -a "var=hostvars[inventory_hostname]" '<hostPattern>': 해당 host들의 변수를 출력합니다.
    • ansible -i <inventory> -m shell -a "<shellScript>" '<hostPattern>': <shellScript>를 실행합니다.

Playbook

Playbook 작성

example.yaml
- hosts: all
gather_facts: false
tasks:
- name: "example"
command: "echo hello"

실행 순서는 다음과 같습니다.

  • pre_tasks
  • pre_tasks에 의해 호출되는 handlers
  • roles
  • tasks
  • roles또는 tasks에 의해 호출되는 handlers
  • post_tasks
  • post_tasks에 의해 호출되는 handlers

Playbook 실행

ansible-playbook <flags> <playbook>
  • -i|--inventory <dir|yaml>
  • -l|--limit '<hostPattern>': 선택된 hosts에 추가적인 제한을 설정합니다.
    • <hostPattern>
      • Ansible / Patterns
      • <host>[,<host>]
      • <group>
      • <group>[i], <group>[i:j]: Python 규칙과 같습니다.
      • * glob를 허용합니다
      • A:B: A와 B의 합집합(A ∪ B)
      • A:&B: A와 B의 교집합(A ∩ B)
      • A:!B: A에 대한 B의 차집합(A - B)
    • ansible_limit의 기본값이 됩니다.
  • --list-hosts: 사용자가 설정한 옵션에 따라 실행될 play와 해당 host를 출력합니다.(실행은 되지 않습니다.)
  • --list-tags: 사용자가 설정한 옵션에 따라 실행될 play와 해당 tags를 출력합니다.(실행은 되지 않습니다.)
  • --list-tasks: 사용자가 설정한 옵션에 따라 실행될 play와 해당 tasks를 출력합니다.(실행은 되지 않습니다.)
  • 연결 옵션
    • -u|--user <user>: 원격 접속 시 사용될 사용자를 설정합니다.
      • None이 기본값이고, 이 경우 명령을 실행시키는 쉘의 사용자가 사용됩니다.
      • ansible_user의 기본값이 됩니다.
    • -k|--ask-pass: 원격 접속 시 사용될 비밀번호를 물어보도록 설정합니다.
      • ansible_password의 기본값이 됩니다.
  • 작업 권한 옵션
    • -b|--become: <becomeMethod>로 작업을 실행시키도록 설정합니다.
    • --become-user <becomeUser>: become 사용자를 변경합니다.
      • ansible_become_user의 기본값이 됩니다.
      • root가 기본값입니다.
    • -K|--ask-become-pass: become 사용자의 비밀번호를 물어보도록 설정합니다.
      • ansible_become_password의 기본값이 됩니다.
    • --become-method <becomeMethod>: 권한 상승 방법을 설정합니다.
      • sudo가 기본값입니다.
      • ansible-doc -t become -l 명령어로 가능한 값들을 확인할 수 있습니다.