728x90
#1 Ansible Playbook
1. 정의
- Ansible 설정과 배포, 이를 통합한 언어
- Ansible 모듈이 작업상 툴이라면, Playbook은 설계 계획
- 사람이 읽기 쉽게 만들어져 있으며 기본적인 텍스트 언어로 구성
- ad-hoc 테스트 실행과 완벽하게 다르지만 더 강력한 사용 방법
2. 기본 구조
- yaml 포맷으로 작성된 텍스트 파일
- 데이터 구조를 표현하기 위해 공백 문자 사용하여 들여쓰기
3. 문법 구조
- - name :
- play 이름
- 필수는 아님, 기록에 항상 표기되므로 어느 단계에서 실행되는지 알 수 있어 유용
- play 이름이 겹치지 않도록 설정
- host:
- Ansible 대상 호스트 - inventory 대상들
- 하나 이상 그룹이나 호스트 패턴 콜론으로 분리하여 정의
- remote_user: 사용자 계정 이름
- task:
- 명령 단위, 실제 수행될 모듈 혹은 shell 명령어등 단위로 사용
- task 별로 작업 수행할 사용자 별도 정의
- 목적 : 특별히 지정한 인자들을 사용 모듈을 통해 실행하는 것
- 모듈은 '멱등'으로 작동 : 반복실행해도 매우 안전
4. playbook 생성
- webserver.yaml
-
더보기---
- name: Install Apache webserver
hosts: webservers
tasks:
- name: HTTPD is present
yum:
name: httpd
state: present
- name: Create index.html file
copy:
src: files/index.html
dest: /var/www/html/index.html - web-delete.yaml
-
더보기---
- name: Delete Apache webserver
hosts: webservers
tasks:
- name: HTTPD is deleted.
yum:
name: httpd
state: absent
vim webserver.yaml <더보기 참조>
ansible-playbook --syntax-check webserver.yaml // yaml 파일 문법 확인
mkdir files
echo 'global web indes' > files/index.html
ansible-playbook -v webserver.yaml // 생성한 yaml 파일 실행
ansible webservers -m shell -a 'cat /var/www/html/index.html'
<그림 참조>
<< 한번에 삭제하기 >>
vim web-delete.yaml <더보기 참조>
ansible-playbook --syntax-check web-delete.yaml
ansible-playbook -v web-delete.yaml
5. Multiple Play
- multiplay.yaml
-
더보기---
- name: Enable web services
hosts: seoul
become: yes
tasks:
- name: httpd and firewalld installed
yum:
name:
- httpd
- firewalld
state: latest
- name: html page is installed
copy:
content: "Welcome to the bespinglobal.com cloud service!\n"
dest: /var/www/html/index.html
- name: firewalld enabled and running
service:
name: firewalld
enabled: true
state: started
- name: firewalld permits access to httpd service
firewalld:
service: http
permanent: true
state: enabled
immediate: yes
- name: httpd enabled and running
service:
name: httpd
enabled: true
state: started
- name: Test intranet web server
hosts: localhost
become: no
tasks:
- name: connect to intranet web server
uri:
url: http://servera.example.com
return_content: yes
status_code: 200
vim multiplay.yaml <더보기 참조>
ansible-playbook -v multiplay.yaml
ansible seoul -m shell -a 'cat /var/www/htm/index.html'
-> multiplay.yaml 내용을 한번에 다 넣지 않고 중간중간 name을 추가하며 -v 를 통해 실행
-> 이를 통해 변화하는지 안하는지를 확인
#2 변수와 팩트
1. 변수
- ansible 프로젝트 파일 전체에서 재사용할 수 있는 값을 저장하기 위해 사용
- 종류
- fact : 개별 호스트 정보 제공
- info : ansible 동작 중 관련된 정보 제공
- {{ user }} : 중괄호를 두개 쓰며 안에서 변수 옆으로 띄어쓰기 필수
2. 변수 실습
- var-1.yaml
-
더보기- hosts: webservers
vars:
greeting: Hello world!
tasks:
- name: Ansible Basic Variable Example
debug:
msg: "{{ greeting }}" - var-2.yaml
-
더보기- hosts: busan
vars:
- filename: nana
tasks:
- name: Create a file
file: path=/opt/{{ filename }}.txt state=touch mode=755 - var-3.yaml
-
더보기---
- hosts: busan
vars:
continents:
- Africa
- Asia
- South America
- North America
- Europe
tasks:
- name: Ansible List variable Example
debug:
msg: "{{ continents[1] }}" - var-4.yaml
-
더보기---
- hosts: seoul
vars:
continents: [Africa, Asia, South America, North America, Europe]
tasks:
- name: Ansible array variables example
debug:
msg: "{{ item }}"
loop:
- "{{ continents }}" - magic-var.yaml
-
더보기---
- hosts: seoul
become: true
tasks:
- name: Show ansible_facts
debug:
var: hostvars['servera.example.com']['ansible_all_ipv4_addresses'] - magic-var2.yaml
-
더보기---
- hosts: webservers
gather_facts: yes
tasks:
- name: Check ansible_hostname
debug:
msg: "hostname is {{ ansible_hostname }}"
- name: Check inventory_hostname
debug:
msg: "hostname is {{ inventory_hostname }}"
vim var-1.yaml
ansible-playbook var-1.yaml
vim var-2.yaml
ansible-playbook var-2.yaml
ansible busan -m shell -a 'ls -l /opt'
vim var-3.yaml
ansible-playbook var-3.yaml
vim var-3.yaml
ansible-playbook var-4.yaml
vim magic-var.yaml
ansible-playbook magic-var.yaml
vim magic-var2.yaml
ansible-playbook magic-var2.yaml
var-1 |
var-2 |
var-3 |
var-4 |
magic-var |
magic-var2 |
3. Secret 관리 - Ansible Vault
- 관리 호스트 구성 위해 중요한 데이터에 대한 접근 권한 필요
- Ansible에서 사용하는 모든 구조화된 데이터 파일 암호화 및 암호 해독
ansible-vault create --vault-id @prompt secret.yaml
ansible-vault view secret.yaml // passwd 입력하여 파일 확인
echo '1234' > pass_file
ansible-vault edit --vault-password-file pass_file secret.yaml
// 초기 .yaml 파일에 대한 비밀번호는 1234 이다
// 이에 --vault-password-file pass_file을 통해 텍스트의 내용이 비밀번호와 일치함을 이용하여 따로 비밀번호 입력 없이 접근 가능
ansible-vault encrypt webserverts.yaml // 기존 파일 encrypt 사용하여 암호화
ansible-vault rekey --ask-vault-pass secret.yaml // 기존 암호 변경
ansible-vault decrypt --ask-vault-pass secret.yaml // 복호화
'Ansible' 카테고리의 다른 글
Ansible 반복문과 조건문 (0) | 2023.08.21 |
---|---|
Ansible 복습문제 2 (1) | 2023.08.18 |
Ansible 복습문제 (0) | 2023.08.17 |
Ansible 기본 (1) | 2023.08.16 |