Ansible(2)
Ansible(2)
웹서비스를 설치하고 데이터 베이스를 설치하고 설정하는 실습을 진행한다.
개발자가 알아서 하게 최소한의 것만 보안상 해준다.
Ansible PlayBook
- 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
- 다중 플레이 구현
- 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
- Play 기동시 사용자 권한 상승
- ansible.cfg에 넣으면 모든 사용자가 해당 권한을 갖음
- playbook에 설정하면 각각 설정 가능함
Ansible 변수 & 시크릿 & 팩트
변수
- 변수 이름 지정
- 변수 이름은 문자, 숫자, 밑줄(_)이 가능하다
- 변수 이름은 문자로 시작해야한다
- 변수 적용 범위
- 변수 적용 범위(좁은 범위가 넓은 범위보다 우선한다)
- 전역 범위
- ex. “ansible -e var=value user=user01”
- 테스트 할 때나 잠깐씩 쓸 때 많이 쓰인다.
- 플레이 범위
- ex. play.yml(vars, vars_files)
- 호스트 범위
- ex. “host_vars/HOST.yml”
- 인벤토리 파일에 정의 가능
- host_vars 디렉토리를 만들어서 인벤토리 안에 정의된 호스트 이름으로 yml 파일을 만든다.
- 그룹 변수
- ex. “group_vars/GROUP.yml”
- 인벤토리 파일에 정의 가능
- group_vars 디렉토리를 만들어서 인벤토리 안에 정의된 그룹 이름으로 yml 파일을 만든다.
- 전역 범위
- 변수 적용 범위(좁은 범위가 넓은 범위보다 우선한다)
- 플레이 북에서 변수 정의
- 변수 정의
- 플레이북내에 변수를 지정하는 경우
- 별도의 파일로 변수를 설정하고 플레이북에서 지정하는 경우
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 env | Ansible env |
|---|---|
| $ variable=hello | - hosts: web1 |
| vars: | |
| variable1: hello | |
| $ echo $(username) | tasks: |
| - name: Task1 | |
| user: | |
| name: “” |
- 배열 변수
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
- 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
시크릿
Ansible Vault
- 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
- 암호화된 새 파일 만들기
- Ansible-vault와 playbook
ansible-playbook –help grep password - ansible-playbook –ask-vault-password playbook.yml
- ansible-playbook –vault-password-file=vault-pass playbook.yml
loop : 한번에
with_items: 쪼개서
팩트
- 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 사용
- ””, “”
- ””, “”
- Ansible facts 끄는 방법
- $ vi playbook.yml
1
2
3
4
- hosts: large_farm
gather_facts: no
tasks:
....
- 사용자 정의 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
- 매직변수(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 overview
- 작업 포함: include_tasks, import_tasks
- 변수 포함: include_vars
- 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
- 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
---------------------
- 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.