sudo add-apt-repository ppa:ansible/ansible
become: yes
일 경우 sudo
로 명령을 실행한다.ansible-playbook
에 --ask-become-pass
옵션을 주면 최초 시작시 비밀번호를 물어본다.ansible-playbook playbook.yml ... --user=username \ --extra-vars "ansible_become_pass=yourPassword"
read -s SUDO_PASSWORD
등으로 읽거나 환경변수에 지정하고서 다음과 같이 하면 명령 history 노출등에 방어가 된다.ansible-playbook playbook.yml ... \ --extra-vars="ansible_become_pass='{{ lookup('env', 'SUDO_PASSWORD') }}'"
ansible-playbook
자체를 root
로 실행한다면 become
대신 become_user
를 사용해야 할듯.- name: playbook name hosts: localhost # 혹은 127.0.0.1 로도 작동했음. connection: local tasks: - name: blah.. blah..
# 실행 ansible-playbook playbook.yml
tasks: - name: Ansible create file with content example copy: dest: "/Users/mdtutorials2/Documents/Ansible/remote_server.txt" content: "contents" mode: 0777 owner: mdtutorials2
- debug: msg="{{ lookup('env', 'HOME') }} is an environment variable"
vars_files
: 외부 yml 파일의 key/value 쌍을 변수로 읽어들인다. 기본 경로는 현재 플레이북 경로이다.- name: blah blah.. hosts: ... vars_files: - "vars.yml" # file in the same directory tasks: ...
vars.yml
# key/value 쌍. ubuntu_release: "{{ lookup('pipe', 'lsb_release -cs') }}" current_user: "{{ lookup('env', 'USER') }}" vagrant_version: 2.2.10 packer_version: 1.6.1 ...
- hosts: all roles: - php - nginx environment: MY_ENV_VARIABLE: whatever_value
tasks: - name: Echo my_env_var shell: "echo $MY_ENV_VARIABLE" environment: MY_ENV_VARIABLE: whatever_value
command
는 명령만 실행할 뿐 셸을 띄우지 않기 때문에 환경변수 등이 주입이 안된다./bin/sh
를 띄워 명령을 실행한다. Bash 등으로 강제로 바꿔야 올바로 작동하는 명령들도 있을 수 있으므로 그 때는 args.executable: /bin/bash
로 셸을 변경해줘야 한다.--start-at-task="태스크이름"
: 해당 태스크 부터 실행--step
: 실행여부 질문register
, until
, delay
와 함께 사용.retries
는 until
이 없으면 작동하지 않는다. until
에서 명백하게 성공 조건을 명시해야한다.retries
종료 해달라는 이슈. PR 이 있으며, 머지될 가능성이 있음.local.yml
파일을 실행한다.ansible-pull -U https://github.com/.../xxx.git
include*
는 동적(dynamic)이다. 일부 기능이 작동하지 않는다(–start-at-task
같은). 실행시점 해석.import*
는 정적(static)이다. 설정파일 읽을 때 해석.sudo apt install python3-argcomplete
.bashrc
에 넣는다 배포판에 따라 register-python-argcomplete
(3
제외)일 수도 있음. (전역 설정도 가능함)# 필히 "" 로 감싸야한다. eval "$(register-python-argcomplete3 ansible)" eval "$(register-python-argcomplete3 ansible-config)" eval "$(register-python-argcomplete3 ansible-console)" eval "$(register-python-argcomplete3 ansible-doc)" eval "$(register-python-argcomplete3 ansible-galaxy)" eval "$(register-python-argcomplete3 ansible-inventory)" eval "$(register-python-argcomplete3 ansible-playbook)" eval "$(register-python-argcomplete3 ansible-pull)" eval "$(register-python-argcomplete3 ansible-vault)"