Ansible 5일차

AeZan·2024년 7월 8일
0

파일의 유형 컨텍스트 변경 (chcon) - 일시적
vim playbook-change-att.yaml

---
- name: file attribute change
  hosts: 192.168.56.102
  tasks:
    - file:
        path: /home/jin/jinjin
        setype: samba_share_t

파일 타입 확인
ls -Z [file_name]

파일의 유형 컨텍스트 변경 (restorecon)
vim playbook-change-att2.yaml

---
- name: file attribute change
  hosts: 192.168.56.102
  become: yes # 추가
  tasks:
    - sefcontext:
        target: /home/jin/jinjin
        setype: samba_share_t
        state: present

sudo / root 권한이 없어서 오류가 난 것 같아 become: yes 항목을 추가해줌

파일의 복사

---
- name: copy file
  hosts: 192.168.56.102
  tasks:
    - copy:
        src: fileB
        dest: /home/jin/fileB

파일 존재 확인 후 관리 호스트에서 제어 노드로 파일 가져오기

---
- name: copy file
  hosts: 192.168.56.102
  tasks:
    - fetch:
        src: fileB
        dest: /home/jin/fileC
        flat: yes  # 추가

위와 같이 가져오면
/home/jin/fileC/192.168.56.102/fileB 이런 형식으로 가져와짐

파일만 그대로 가져오고 싶으면 flat: yes 항목을 추가해주면 됨


jinja

jinja2

  • 렌더링
  • 파일로 생성 (.j2)
  • yaml 형식이 아님
  • 템플릿의 개념 -> yaml 파일의 내용을 jinja 에 적용시키면 텍스트로 만들어짐

vim 의 개념이라고 생각
jinja 템플릿을 원격을 통해 관리 호스트에게 전달

vars.yaml

web_package: httpd
db_package: mariadb

playbook-jinja.yaml

---
- name: jinja test
  hosts: 192.168.56.102
  gather_facts: no
  vars_files:
    - vars.yaml
  tasks:
    - name: Render jinja template
      template:
        src: template.j2
        dest: rendered_template.txt

jinja 템플릿 생성

template.j2

wep_package: {{ web_package }}
db_pakage: {{ db_package }}

관리 호스트에 전달된 것을 확인


사용 용도 예제

fact 를 변수로 지정해 전달해줘서 원격 호스트에 맞는 설정 파일이 만들기 위해서 사용함

jinja 템플릿

Port {{ ssh_port }}
ListenAddress {{ ansible_facts['default_ipv4']['address'] }}
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
SyslogFacility AUTHPRIV
PermitRootLogin {{ root_allowed }}
AllowGroups {{ groups_allowed }}
AuthorizedKeysFile /etc/.rht_authorized_keys .ssh/authorized_keys
PasswordAuthentication {{ passwords_allowed }}
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding yes
UsePrivilegeSeparation sandbox
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem sftp /usr/libexec/openssh/sftp-server

jinja 에서의 반복문

{% for ~ %}
.
.
.
{% endfor %}

예시

{% for item in my_list %}
Item: {{ item }}
{% endfor %}

플레이북

---
- name: Render Jinja loop test
  hosts: 192.168.56.102
  gather_facts: no
  tasks:
    - name: Render jinja template
      template:
        src: jinja-loop.j2
        dest: rendered_template_loop.txt
      vars:
        my_list:
          - apple
          - samsung
          - lg


jinja 에서의 조건문

{% if 조건식 %}
.
.
.
{% elif 추가조건식 %}
.
.
.
{% else %}
.
.
.
{% endif %}

예시

{% if my_variable == "condition" %}
This is the true branch
{% else %}
This is the false branch;
{% endif %}

플레이북

---
- name: Render Jinja if test
  hosts: 192.168.56.102
  gather_facts: no
  tasks:
    - name: Render jinja template
      template:
        src: jinja-if.j2
        dest: rendered_template_if.txt
      vars:
        my_variable: "condition"


파일 재사용

  • yaml 파일에서 다른 yaml 파일 불러서 실행시키는 방식
  • 사용 목적에 맞춰 파일들을 만들고 메인 플레이북에서 불러와 사용 가능
  • 메인 플레이북은 크기가 줄어들고 각 역할을 가진 플레이북들을 분리해서 관리할 수 있는 편리성 존재

httpd 서비스를 재시작하는 플레이북 작성

---
- name: Install and restart the web server
  hosts: 192.168.56.102
  become: yes
  tasks:
    - name: Install Web server
      yum:
        name: httpd
        state: latest
    
    - name: Restart Web server
      service:
        name: httpd
        state: restarted

mariadb 서비스를 재시작하는 플레이북 작성

---
- name: Install and restart the db server
  hosts: 192.168.56.102
  become: yes
  tasks:
    - name: Install db server
      yum:
        name: mariadb
        state: latest
    
    - name: Restart db server
      service:
        name: mariadb
        state: restarted

httpd 재시작 플레이북과 mariadb 재시작 플레이북을 실행한 메인 플레이북 작성

---
- include: web_server.yml
- include: db_server.yml
---
- import_playbook: web_server.yml
- import_playbook: db_server.yml

include 는 플레이북들끼리 변수 공유
import_playbook은 플레이북들끼리 변수 공유 X

또는

web_server.yaml

- name: Install db server
  yum:
    name: mariadb
    state: latest
- name: Restart db server
  service:
    name: mariadb
    state: restarted

db_server.yaml

- name: Install db server
  yum:
    name: mariadb
    state: latest
- name: Restart db server
  service:
    name: mariadb
    state: restarted

main.yaml

---
- name: Install and Restart servers
  hosts: 192.168.56.102
  become: yes
  tasks:
    - name: Include web server setup
      include_tasks: web_server.yaml # import_tasks: common_tasks.yml
    - name: Include db server restart
      include_tasks: db_server.yaml

위와 같이 작성해도 됨
(include 는 deprecated 된 항목임, import_playbook 사용 권장)


작업 재사용

  • 작업 목적에 맞춰 디렉토리 별로 구분 짓고 원하는 목적에 맞춰 파일을 작성

ansible-galaxy init web_server

cd roles

vim web_server/tasks/main.yml

---
- name: Ensure Apache is installed
  package:
    name: httpd
    state: latest

- name: Ensure Apache service is restarted
  service:
    name: httpd
    state: restarted

vim web_server/vars/main.yml

---
# vars file for web_server
web_server_port: 80

vim inventory

vim ansible.cfg

vim playbook-roles.yml

---
- name: Configure Web server
  hosts: 192.168.56.102
  become: yes
  roles:
    - web_server
  tasks:
    - name: variable test
      debug:
        var: web_server_port

0개의 댓글

관련 채용 정보