사용자 도구

사이트 도구


devops:ansible

Ansible

Ubuntu PPA

sudo add-apt-repository ppa:ansible/ansible

AWS

become

  • become: yes 일 경우 sudo 로 명령을 실행한다.
  • 이때, 비밀번호를 받는 다양한 방법이 존재할 수 있는데, 일단 ansible-playbook--ask-become-pass 옵션을 주면 최초 시작시 비밀번호를 물어본다.
  • 혹은 다음과 같이 ansible_become_pass 변수로 명령행에 지정할 수도 있다. (user 생략가능) Specify sudo password for Ansible
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') }}'"

become_user

  • 특정 사용자로 명령 실행하기. ansible-playbook 자체를 root 로 실행한다면 become 대신 become_user를 사용해야 할듯.

Local 실행

- name: playbook name
  hosts: localhost # 혹은 127.0.0.1 로도 작동했음.
  connection: local
  tasks:
    - name: blah.. blah..
# 실행
ansible-playbook playbook.yml

File 생성

  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"

변수(var) 외부에 두고 include

- 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
...

playbook 을 윈해 환경변수

- hosts: all
  roles:
     - php
     - nginx
  environment:
    MY_ENV_VARIABLE: whatever_value

특정 Task 용 환경변수

  • 다른 태스크에는 적용안됨.
  tasks:
    - name: Echo my_env_var
      shell: "echo $MY_ENV_VARIABLE"
      environment:
        MY_ENV_VARIABLE: whatever_value

shell & command

apt repository

특정 태스크 지정

  • --start-at-task="태스크이름" : 해당 태스크 부터 실행
  • --step : 실행여부 질문

retries

  • register, until, delay 와 함께 사용.
  • 현재의 retriesuntil이 없으면 작동하지 않는다. until에서 명백하게 성공 조건을 명시해야한다.
  • "retries" without "until": retry until success · Issue #20802 : 성공시 자동으로 retries 종료 해달라는 이슈. PR 이 있으며, 머지될 가능성이 있음.

ansible-pull

ansible-pull -U https://github.com/.../xxx.git

include / import

Linux System Roles

shell completion

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)"

lineinfile module

replace module

참조

devops/ansible.txt · 마지막으로 수정됨: 2023/01/14 13:38 저자 kwon37xi