본문 바로가기

리눅스

ansible-playbook 명령어

728x90

ansible-playbook 명령어

ansible-playbook 명령어는 Ansible로 작성된 플레이북을 실행하는데 사용되는 명령어입니다. 플레이북은 시스템 설정, 소프트웨어 설치, 배포, 설정 등을 자동화하기 위한 Ansible의 설정 파일입니다.

ansible ad-hoc 명령어(shell module)

출처-https://www.middlewareinventory.com/wp-content/uploads/2019/10/Screenshot-2019-10-19-at-8.58.01-PM.png

ansible 명령어의 주요 옵션과 사용 방법

1. 기본 구문

ansible [options] <host-pattern> [-m <module-name>]

2. 주요 옵션

  • <host-pattern>: 대상 호스트 또는 그룹을 지정합니다. 와일드카드(*), 호스트명, 그룹명, 그룹 패턴 등으로 지정할 수 있습니다.
  • -m, --module-name: 실행할 모듈을 지정합니다.
  • -a, --args: 모듈에 전달할 인수를 지정합니다.
  • -i, --inventory: 사용할 인벤토리 파일을 지정합니다. 기본적으로 /etc/ansible/hosts 파일이 사용됩니다.
  • -u, --user: SSH 접속에 사용할 사용자 이름을 지정합니다.
  • -b, --become: 작업을 수행할 때 슈퍼유저(root) 권한으로 실행합니다.
  • -K, --ask-become-pass: 슈퍼유저 권한으로 실행하기 위해 sudo 암호를 입력 받습니다.
  • -C, --check: 변경 사항을 시뮬레이션하여 결과를 표시합니다.
  • -f, --forks: 병렬로 실행할 최대 호스트 수를 지정합니다.
  • -t, --tags: 실행할 특정 태그를 지정합니다. 특정 태그만 실행하도록 제한할 수 있습니다.

3. 예제

  • ansible 명령어로 모듈 실행
ansible all -m ping
  • 대상 호스트 또는 그룹 지정
ansible webservers -m command -a "uptime"
  • 인벤토리 파일 사용
ansible all -i inventory_file.yml -m command -a "uptime"
  • 슈퍼유저로 실행
ansible all -b -m yum -a "name=httpd state=present"
  • 태그를 이용한 실행
ansible webservers -m service -a "name=httpd state=started" --tags "start_service"


위 예제들은 ansible 명령어의 주요 옵션과 사용 방법을 보여주는 것이며, 사용 시 실제 호스트 패턴, 모듈명, 인벤토리 파일 경로, 사용자 이름 등을 적절하게 변경하여 사용하시면 됩니다.

ansible 사용법

더보기
$ ansible -h
usage: ansible [-h] [--version] [-v] [-b] [--become-method BECOME_METHOD] [--become-user BECOME_USER] [-K | --become-password-file BECOME_PASSWORD_FILE]
               [-i INVENTORY] [--list-hosts] [-l SUBSET] [-P POLL_INTERVAL] [-B SECONDS] [-o] [-t TREE] [--private-key PRIVATE_KEY_FILE] [-u REMOTE_USER]
               [-c CONNECTION] [-T TIMEOUT] [--ssh-common-args SSH_COMMON_ARGS] [--sftp-extra-args SFTP_EXTRA_ARGS] [--scp-extra-args SCP_EXTRA_ARGS]
               [--ssh-extra-args SSH_EXTRA_ARGS] [-k | --connection-password-file CONNECTION_PASSWORD_FILE] [-C] [-D] [-e EXTRA_VARS]
               [--vault-id VAULT_IDS] [--ask-vault-password | --vault-password-file VAULT_PASSWORD_FILES] [-f FORKS] [-M MODULE_PATH]
               [--playbook-dir BASEDIR] [--task-timeout TASK_TIMEOUT] [-a MODULE_ARGS] [-m MODULE_NAME]
               pattern

Define and run a single task 'playbook' against a set of hosts

positional arguments:
  pattern               host pattern

options:
  --ask-vault-password, --ask-vault-pass
                        ask for vault password
  --become-password-file BECOME_PASSWORD_FILE, --become-pass-file BECOME_PASSWORD_FILE
                        Become password file
  --connection-password-file CONNECTION_PASSWORD_FILE, --conn-pass-file CONNECTION_PASSWORD_FILE
                        Connection password file
  --list-hosts          outputs a list of matching hosts; does not execute anything else
  --playbook-dir BASEDIR
                        Since this tool does not use playbooks, use this as a substitute playbook directory. This sets the relative path for many features
                        including roles/ group_vars/ etc.
  --task-timeout TASK_TIMEOUT
                        set task timeout limit in seconds, must be positive integer.
  --vault-id VAULT_IDS  the vault identity to use
  --vault-password-file VAULT_PASSWORD_FILES, --vault-pass-file VAULT_PASSWORD_FILES
                        vault password file
  --version             show program's version number, config file location, configured module search path, module location, executable location and exit
  -B SECONDS, --background SECONDS
                        run asynchronously, failing after X seconds (default=N/A)
  -C, --check           don't make any changes; instead, try to predict some of the changes that may occur
  -D, --diff            when changing (small) files and templates, show the differences in those files; works great with --check
  -K, --ask-become-pass
                        ask for privilege escalation password
  -M MODULE_PATH, --module-path MODULE_PATH
                        prepend colon-separated path(s) to module library (default={{ ANSIBLE_HOME ~ "/plugins/modules:/usr/share/ansible/plugins/modules"
                        }})
  -P POLL_INTERVAL, --poll POLL_INTERVAL
                        set the poll interval if using -B (default=15)
  -a MODULE_ARGS, --args MODULE_ARGS
                        The action's options in space separated k=v format: -a 'opt1=val1 opt2=val2' or a json string: -a '{"opt1": "val1", "opt2":
                        "val2"}'
  -e EXTRA_VARS, --extra-vars EXTRA_VARS
                        set additional variables as key=value or YAML/JSON, if filename prepend with @
  -f FORKS, --forks FORKS
                        specify number of parallel processes to use (default=5)
  -h, --help            show this help message and exit
  -i INVENTORY, --inventory INVENTORY, --inventory-file INVENTORY
                        specify inventory host path or comma separated host list. --inventory-file is deprecated
  -k, --ask-pass        ask for connection password
  -l SUBSET, --limit SUBSET
                        further limit selected hosts to an additional pattern
  -m MODULE_NAME, --module-name MODULE_NAME
                        Name of the action to execute (default=command)
  -o, --one-line        condense output
  -t TREE, --tree TREE  log output to this directory
  -v, --verbose         Causes Ansible to print more debug messages. Adding multiple -v will increase the verbosity, the builtin plugins currently
                        evaluate up to -vvvvvv. A reasonable level to start is -vvv, connection debugging might require -vvvv.

Privilege Escalation Options:
  control how and which user you become as on target hosts

  --become-method BECOME_METHOD
                        privilege escalation method to use (default=sudo), use `ansible-doc -t become -l` to list valid choices.
  --become-user BECOME_USER
                        run operations as this user (default=root)
  -b, --become          run operations with become (does not imply password prompting)

Connection Options:
  control as whom and how to connect to hosts

  --private-key PRIVATE_KEY_FILE, --key-file PRIVATE_KEY_FILE
                        use this file to authenticate the connection
  --scp-extra-args SCP_EXTRA_ARGS
                        specify extra arguments to pass to scp only (e.g. -l)
  --sftp-extra-args SFTP_EXTRA_ARGS
                        specify extra arguments to pass to sftp only (e.g. -f, -l)
  --ssh-common-args SSH_COMMON_ARGS
                        specify common arguments to pass to sftp/scp/ssh (e.g. ProxyCommand)
  --ssh-extra-args SSH_EXTRA_ARGS
                        specify extra arguments to pass to ssh only (e.g. -R)
  -T TIMEOUT, --timeout TIMEOUT
                        override the connection timeout in seconds (default=10)
  -c CONNECTION, --connection CONNECTION
                        connection type to use (default=smart)
  -u REMOTE_USER, --user REMOTE_USER
                        connect as this user (default=None)

Some actions do not make sense in Ad-Hoc (include, meta, etc)
728x90

 

ansible-playbook 명령어(shell module)

출처-https://www.middlewareinventory.com/wp-content/uploads/2019/10/Screenshot-2019-10-19-at-9.21.45-PM.png

ansible-playbook 명령어의 주요 옵션과 사용 방법

1. 기본 구문

ansible-playbook [options] playbook.yml

2. 주요 옵션

  • --inventory, -i: 인벤토리 파일을 지정합니다. 기본적으로 /etc/ansible/hosts 파일이 사용됩니다.
  • --limit: 실행 대상 호스트 또는 그룹을 지정합니다.
  • --tags: 실행할 특정 태그를 지정합니다. 특정 태그만 실행하도록 제한할 수 있습니다.
  • --skip-tags: 특정 태그를 스킵합니다. 지정한 태그를 가진 작업은 실행하지 않습니다.
  • --check: 실행 전에 변경 사항을 시뮬레이션하여 결과를 표시합니다.
  • --diff: 변경 사항이 있을 때 변경 내용을 보여줍니다.
  • --list-hosts: 실행 대상 호스트 목록을 표시합니다.
  • --list-tasks: 플레이북에 포함된 태스크 목록을 표시합니다.
  • --syntax-check: 플레이북 구문 오류를 확인합니다.
  • --step: 태스크를 한 단계씩 실행합니다.

3. 예제

  • 기본적인 플레이북 실행
ansible-playbook playbook.yml
  • 특정 인벤토리 파일 사용(-i inventory_file.yml)
ansible-playbook -i inventory_file.yml playbook.yml
  • 실행 대상 호스트 지정(--limit server1)
ansible-playbook -i inventory_file.yml --limit server1 playbook.yml
  • 특정 태그만 실행(--tags "setup,install")
ansible-playbook -i inventory_file.yml --tags "setup,install" playbook.yml
  • 특정 태그를 스킵(--skip-tags "setup")
ansible-playbook -i inventory_file.yml --skip-tags "setup" playbook.yml
  • 변경 사항 시뮬레이션 및 결과 출력(--check --diff)
ansible-playbook -i inventory_file.yml --check --diff playbook.yml
  • 실행 대상 호스트 목록 표시(--list-hosts)
ansible-playbook -i inventory_file.yml --list-hosts playbook.yml
  • 플레이북에 포함된 태스크 목록 표시(--list-tasks)
ansible-playbook -i inventory_file.yml --list-tasks playbook.yml
  • 플레이북 구문 오류 확인(--syntax-check)
ansible-playbook -i inventory_file.yml --syntax-check playbook.yml
  • 태스크를 한 단계씩 실행(--step)
ansible-playbook -i inventory_file.yml --step playbook.yml
  • 플레이북 파일이 복수개일 경우(playbook1.yml playbook2.yml playbook3.yml)
ansible-playbook -i inventory_file.yml playbook1.yml playbook2.yml playbook3.yml

 

위 예제들은 ansible-playbook 명령어의 주요 옵션 및 사용 방법을 보여주는 것이며, 사용 시 실제 플레이북 파일과 인벤토리 파일의 경로를 적절하게 변경하여 실행하시면 됩니다.

ansible-playbook 사용법

더보기
$ ansible-playbook -h
usage: ansible-playbook [-h] [--version] [-v] [--private-key PRIVATE_KEY_FILE] [-u REMOTE_USER] [-c CONNECTION] [-T TIMEOUT]
                        [--ssh-common-args SSH_COMMON_ARGS] [--sftp-extra-args SFTP_EXTRA_ARGS] [--scp-extra-args SCP_EXTRA_ARGS]
                        [--ssh-extra-args SSH_EXTRA_ARGS] [-k | --connection-password-file CONNECTION_PASSWORD_FILE] [--force-handlers] [--flush-cache]
                        [-b] [--become-method BECOME_METHOD] [--become-user BECOME_USER] [-K | --become-password-file BECOME_PASSWORD_FILE] [-t TAGS]
                        [--skip-tags SKIP_TAGS] [-C] [-D] [-i INVENTORY] [--list-hosts] [-l SUBSET] [-e EXTRA_VARS] [--vault-id VAULT_IDS]
                        [--ask-vault-password | --vault-password-file VAULT_PASSWORD_FILES] [-f FORKS] [-M MODULE_PATH] [--syntax-check] [--list-tasks]
                        [--list-tags] [--step] [--start-at-task START_AT_TASK]
                        playbook [playbook ...]

Runs Ansible playbooks, executing the defined tasks on the targeted hosts.

positional arguments:
  playbook              Playbook(s)

options:
  --ask-vault-password, --ask-vault-pass
                        ask for vault password
  --become-password-file BECOME_PASSWORD_FILE, --become-pass-file BECOME_PASSWORD_FILE
                        Become password file
  --connection-password-file CONNECTION_PASSWORD_FILE, --conn-pass-file CONNECTION_PASSWORD_FILE
                        Connection password file
  --flush-cache         clear the fact cache for every host in inventory
  --force-handlers      run handlers even if a task fails
  --list-hosts          outputs a list of matching hosts; does not execute anything else
  --list-tags           list all available tags
  --list-tasks          list all tasks that would be executed
  --skip-tags SKIP_TAGS
                        only run plays and tasks whose tags do not match these values
  --start-at-task START_AT_TASK
                        start the playbook at the task matching this name
  --step                one-step-at-a-time: confirm each task before running
  --syntax-check        perform a syntax check on the playbook, but do not execute it
  --vault-id VAULT_IDS  the vault identity to use
  --vault-password-file VAULT_PASSWORD_FILES, --vault-pass-file VAULT_PASSWORD_FILES
                        vault password file
  --version             show program's version number, config file location, configured module search path, module location, executable location and exit
  -C, --check           don't make any changes; instead, try to predict some of the changes that may occur
  -D, --diff            when changing (small) files and templates, show the differences in those files; works great with --check
  -K, --ask-become-pass
                        ask for privilege escalation password
  -M MODULE_PATH, --module-path MODULE_PATH
                        prepend colon-separated path(s) to module library (default={{ ANSIBLE_HOME ~ "/plugins/modules:/usr/share/ansible/plugins/modules"
                        }})
  -e EXTRA_VARS, --extra-vars EXTRA_VARS
                        set additional variables as key=value or YAML/JSON, if filename prepend with @
  -f FORKS, --forks FORKS
                        specify number of parallel processes to use (default=5)
  -h, --help            show this help message and exit
  -i INVENTORY, --inventory INVENTORY, --inventory-file INVENTORY
                        specify inventory host path or comma separated host list. --inventory-file is deprecated
  -k, --ask-pass        ask for connection password
  -l SUBSET, --limit SUBSET
                        further limit selected hosts to an additional pattern
  -t TAGS, --tags TAGS  only run plays and tasks tagged with these values
  -v, --verbose         Causes Ansible to print more debug messages. Adding multiple -v will increase the verbosity, the builtin plugins currently
                        evaluate up to -vvvvvv. A reasonable level to start is -vvv, connection debugging might require -vvvv.

Connection Options:
  control as whom and how to connect to hosts

  --private-key PRIVATE_KEY_FILE, --key-file PRIVATE_KEY_FILE
                        use this file to authenticate the connection
  --scp-extra-args SCP_EXTRA_ARGS
                        specify extra arguments to pass to scp only (e.g. -l)
  --sftp-extra-args SFTP_EXTRA_ARGS
                        specify extra arguments to pass to sftp only (e.g. -f, -l)
  --ssh-common-args SSH_COMMON_ARGS
                        specify common arguments to pass to sftp/scp/ssh (e.g. ProxyCommand)
  --ssh-extra-args SSH_EXTRA_ARGS
                        specify extra arguments to pass to ssh only (e.g. -R)
  -T TIMEOUT, --timeout TIMEOUT
                        override the connection timeout in seconds (default=10)
  -c CONNECTION, --connection CONNECTION
                        connection type to use (default=smart)
  -u REMOTE_USER, --user REMOTE_USER
                        connect as this user (default=None)

Privilege Escalation Options:
  control how and which user you become as on target hosts

  --become-method BECOME_METHOD
                        privilege escalation method to use (default=sudo), use `ansible-doc -t become -l` to list valid choices.
  --become-user BECOME_USER
                        run operations as this user (default=root)
  -b, --become          run operations with become (does not imply password prompting)

Ansible CLI cheatsheet

ansible-playbook

ansible-playbook -i /path/to/my_inventory_file -u my_connection_user -k -f 3 -T 30 -t my_tag -m /path/to/my_modules -b -K my_playbook.yml

위의 명령어는 ansible-playbook 명령어의 다양한 옵션들을 사용하여 특정 플레이북을 실행하는 예제입니다.

 

각 옵션들의 역할은 다음과 같습니다.

  • -i /path/to/my_inventory_file: 사용할 인벤토리 파일을 지정합니다.
  • -u my_connection_user: SSH 접속에 사용할 사용자 이름을 지정합니다.
  • -k: 슈퍼유저 권한으로 실행하기 위해 sudo 암호를 입력 받습니다.
  • -f 3: 병렬로 실행할 최대 호스트 수를 3으로 지정합니다.
  • -T 30: SSH 연결 시간 초과를 30초로 지정합니다.
  • -t my_tag: 실행할 특정 태그를 지정합니다.
  • -m /path/to/my_modules: 사용자 정의 모듈이 있는 디렉토리 경로를 지정합니다.
  • -b: 작업을 수행할 때 슈퍼유저(root) 권한으로 실행합니다.
  • -K: 슈퍼유저 권한으로 실행하기 위해 sudo 암호를 입력 받습니다.
  • my_playbook.yml: 실행할 플레이북 파일의 경로를 지정합니다.

 

위의 명령어를 사용하여 my_playbook.yml 플레이북을 실행하면, 해당 플레이북이 my_connection_user 사용자로 my_inventory_file 인벤토리 파일에 기재된 호스트들을 대상으로 병렬로 실행되며, 필요에 따라 슈퍼유저 권한으로 작업을 수행할 수 있습니다. 또한, 특정 태그로 플레이북 실행을 제한할 수 있으며, 사용자 정의 모듈 디렉토리도 추가로 지정할 수 있습니다.

 

참고URL

- Ansible Shell Module Examples : https://www.middlewareinventory.com/blog/ansible-shell-examples/

- ansible-playbook : https://docs.ansible.com/ansible/latest/user_guide/cheatsheet.html#

- ansible-playbook : https://docs.ansible.com/ansible/latest/cli/ansible-playbook.html#ansible-playbook

 

728x90