파일의 유형 컨텍스트 변경 (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
항목을 추가해주면 됨
jinja2
.j2
)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"
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