Post

Ansible(2)

Ansible(2)

웹서비스를 설치하고 데이터 베이스를 설치하고 설정하는 실습을 진행한다.

개발자가 알아서 하게 최소한의 것만 보안상 해준다.

Ansible PlayBook

  1. Ansible Playbook 작성
    • vi playbook.yml
1
2
3
4
5
6
7
8
9
10
11
12
---
- name: play1
  hosts: web1
  tasks: 
    - name: task1
      yum:
        option1: ...
        option2: ...
    - name: task2
      service:
        option1: ...
        option2: ...
  • 플레이북 실행
    • ansible-playbook playbook.yml
    • ansible-playbook –syntax-check playbook.yml
    • ansible-playbook -C playbook.yml
  1. 다중 플레이 구현
    • vi playbook.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
--- 
- name: play1
  hosts: web1
  tasks:
    - name: task1

- name: play2
  hosts: web2
  become: true
  become_method: sudo
  become_user: devops
  tasks:
    - name: task1
  1. Play 기동시 사용자 권한 상승
    • ansible.cfg에 넣으면 모든 사용자가 해당 권한을 갖음
    • playbook에 설정하면 각각 설정 가능함

Ansible 변수 & 시크릿 & 팩트

변수

  1. 변수 이름 지정
    • 변수 이름은 문자, 숫자, 밑줄(_)이 가능하다
    • 변수 이름은 문자로 시작해야한다
  2. 변수 적용 범위
    • 변수 적용 범위(좁은 범위가 넓은 범위보다 우선한다)
      1. 전역 범위
        • ex. “ansible -e var=value user=user01”
        • 테스트 할 때나 잠깐씩 쓸 때 많이 쓰인다.
      2. 플레이 범위
        • ex. play.yml(vars, vars_files)
      3. 호스트 범위
        • ex. “host_vars/HOST.yml”
        • 인벤토리 파일에 정의 가능
        • host_vars 디렉토리를 만들어서 인벤토리 안에 정의된 호스트 이름으로 yml 파일을 만든다.
      4. 그룹 변수
        • ex. “group_vars/GROUP.yml”
        • 인벤토리 파일에 정의 가능
        • group_vars 디렉토리를 만들어서 인벤토리 안에 정의된 그룹 이름으로 yml 파일을 만든다.
  3. 플레이 북에서 변수 정의
    • 변수 정의
      • 플레이북내에 변수를 지정하는 경우
      • 별도의 파일로 변수를 설정하고 플레이북에서 지정하는 경우
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      
      $ cat vars/users.yml    #변수 파일 
      --- 
      user: user01
      hoem: /home/user01
      ...
      $ cat site.yml
      ---
      - hosts: web1
        vars_files:           # 변수 파일 실행
          - vars/users.yml
      
    • 변수 사용
      • 변수의 사용은 “” 형식으로 사용한다.
BASH shell envAnsible env
$ variable=hello- hosts: web1
 vars:
 variable1: hello
$ echo $(username)tasks:
 - name: Task1
 user:
 name: “”
  1. 배열 변수
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    $ cat vars.yml
    ---
    users:
      user01:
     name: lee             #=> users.user01.name
     shell: /bin/bash      #=> users['user01']['name']
      user02:
     name: kim
     shell: /bin/tcsh
    
  2. Reginster 구문
    • register 구문을 사용하여 명령 출력을 캡처할 수 있다.
    • register 구문은 일반적으로 디버깅 용도로 사용한다.
      [참고] ansible-playbook -v …
1
2
3
4
5
6
7
8
9
$ cat register.yml
---
tasks:
- yum:
    name: httpd
    state: installed
  register: VAR
- debug:
    var: VAR

시크릿

Secret == 민감한 내용을 담는 변수(암호, API KEY, TOKEN, ...)

  1. Ansible Vault

  2. Ansible Vault CMD
    • 암호화된 새 파일 만들기
      • ansible-vault create secret.yml
    • 암호화된 파일 보기
      • ansible-vault view secret.yml
    • 암호화된 파일 편집하기
      • ansible-vault edit secret.yml
    • 평문 파일 <-> 암호화
      • ansible-vault encrypt secret.yml
      • ansible-vault decrypt secret.yml
    • 암호화 키 편집하기
      • ansible-vault rekey secret.yml
  3. Ansible-vault와 playbook
    • ansible-playbook –helpgrep password
    • ansible-playbook –ask-vault-password playbook.yml
    • ansible-playbook –vault-password-file=vault-pass playbook.yml

loop : 한번에
with_items: 쪼개서

팩트

Ansible Facts == 관리 대상 호스트에서 자동으로 검색한 변수의 집합

  1. Ansible Fact
    • ansible_hostname
    • ansible_fqdn
    • ansible_default_ipv4.address
    • ansible_interfaces
  • $ ansible localhost -m setup
  • $ ansible localhost -m setup -a ‘filter=ansible_*’grep -i 단어
  • $ ansible localhost -m setup -a ‘filter=ansible_interface’

⇉ FACT 사용

  • ””, “”
  • ””, “”
  1. Ansible facts 끄는 방법
    • $ vi playbook.yml
1
2
3
4
- hosts: large_farm
  gather_facts: no
  tasks:
    ....
  1. 사용자 정의 Facts
    • 정의
    • /etc/ansible/facts.d/*.fact (INI형식 or JSON 형식)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
     {
       "package": {
         "web_package": {
           "http": "httpd",
           "https": "mod_ssl"
         }
       },
       "users": {
         "user01": "user01",
         "user02": "user02"
       }
     }
    
    1
    
       - 사용  - playbook 사용하는 예  ansible localhost -m setup -a 'filter=ansible_local'     => ansible_local['custom']['packages']['web_package']     => ansible_local
    
  2. 매직변수(Magic Variable)
    • hostvars
    • group_names
    • group
    • inventory_hostname

$> ansbile localhost -m debug -a=’hostvars’

$> ansbile localhost -m debug -a=’group_names’

$> ansbile localhost -m debug -a=’inventory_hostname’

포함(include_vars/include_tasks) 사항 관리

include == 별도의 파일을 사용하여 작업 및 변수 목록을 쉽게 관리할 수 있도록 작게 나누는 것

  1. include overview
    • 작업 포함: include_tasks, import_tasks
    • 변수 포함: include_vars
  2. include tasks
1
2
3
4
5
6
7
8
9
  cat tasks/main.yml
  ----
  - name: task1
    yum:
      ...
  ----
  cat tasks/play.yml
  tasks:
  - include_tasks: /tasks/main.yml
  1. include_vars
1
2
3
4
5
6
7
8
------------------
$ cat vars/vars.yml
web_pkg: httpd
---------------
$ cat play.yml
tasks:
- include_vars: vars/vars.yml
---------------------
  1. include_tasks + vars
1
2
3
4
5
6
$ cat play.yml
tasks:
- include_tasks: tasks/main.yml
  vars:
  - pkg: httpd
  
This post is licensed under CC BY 4.0 by the author.