본문 바로가기
Ansible

Ansible-playbook & multiple

by 손영진 2023. 8. 17.
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