자주쓰는 모듈 리스트
파일모듈 |
copy : 로컬/원격 시스템의 파일을 관리 호스트의 위치로 복사한다. selinux 속성 설정 가능 |
소프트웨어 패키지 모듈 |
package : 운영체제 고유의 자동 감지 패키지 관리를 사용하여 패키지 관리 |
시스템 모듈 |
firewalld : firewalld를 사용하여 임의의 포트/서비스 관리 |
net tools 모듈 |
get_url: http,https 또는 ftp 를 통해 파일 다운로드 |
만약 원하는 모듈이 없다면, 사용자가 직접 고유의 모듈을 만들수도 있고, 타사의 모듈을 가져와서 사용할 수도 있다.
ansible은 ANSIBLE_LIBRARY 환경변수에 지정한 위치에서 사용자 지정 모듈을 찾으며, 위치가 설정되지 않은 경우 현재 ansible 구성 파일의 library 키워드로 찾는다. 또한 ansible은 현재 실행되고 있는 플레이북과 관련하여, ./library 디렉토리에서 사용자 지정 모듈을 검색한다. ansible.cfg 파일에서 이런식으로 명시할 수 있다. (library = /usr/share/my_modules)
file 모듈
- 파일의 권한, 속성생성, 복사, 편집, 제거, 수정같은 리눅스 파일관리와 관련된 대부분의 작업을 수행할 수 있는 모듈이다. 여기서는 file 모듈로 자주 사용하는 기능을 확인한다.
* 파일 생성 / 소유자, 그룹, 사용권한 제어
- torch 명령처럼 작동하여 파일이 존재하지 않으면 빈 파일을 만들고, 파일이 존재하면 수정 시간을 업데이트한다.
- 파일 소유자, 그룹, 사용 권한 등도 제어할 수 있다.
- name: files test
hosts: web1.example.com
tasks:
- name: Touch a file and set permissions
file:
path: /test6
owner: student
group: student
mode: 0640
state: touch
- 결과로, 해당 호스트의 /에 test6 이라는 파일이 생성된다.
* 파일의 selinux 속성 수정하기
---
- name: selinux setting
hosts: web.example.com
tasks:
- name: changes elinux type
file:
path: /test1
setype: samba_share_t
- 결과로, 아래와 같이 변경전, 변경 후를 확인할 수 있다.
- 파일 속성 매개변수는 여러 파일 관리 모듈에서 사용할 수 있으므로, 추가정보는 ansible-doc로 확인한다. (ansible-doc copy, ansible-doc file 등)
# 참고 : 영구적으로 selinux 속성 수정하기
- 위 selinux 속성 수정 예시에서 file모듈은 chcon과 같이 작동한다.
- restorecon 명령으로 쉽게 원복된다. 또한 리스타트로도 원복될거라고 생각했는데 아니었음. selinux 좀 더 공부
- 아무튼, 영구적으로 변경된 selinux을 적용하려면, 아까 file 모듈로 samba_share_t 설정을 수행한 후에, 추가로 아래 새로운 예시를 실행한다.
---
- name: selinux setting
hosts: web.example.com
tasks:
- name: changes selinux type permently
sefcontext:
target: /test4
setype: samba_share_t
state: present
- 이렇게 하면 해당 test1 파일은 samba_share_t 속성이 확정되어 restorecon으로도 원복되지 않는다.
# 참고 : sefcontext 모듈은 selinux 정책에서 대상에 대해 기본 컨텍스트를 업데이트 하지만 기존 파일의 컨텍스트는 변경하지 않는다.
# 참고 : sefcontext 모듈 사용할 때 에러 발생 시
만약 이러한 에러가 발생한다면, 해당 ansible client에서 policycoreutils-python 패키지를 설치해야 한다. (centos 기준, yum install policycoreutils-python)
* 파일 제거하기
- file 모듈의 state: absent 지시문을 사용하여 파일을 삭제할 수 있다.
---
- name: remove file
hosts: web.example.com
tasks:
- name: remove file
file:
dest: /tmp/hello_ansible_world
state: absent
- 이렇게 하면 /tmp의 hello_ansible_world 파일은 삭제된다.
copy 모듈
- 이 모듈은 ansible host에 있는 파일을 ansible client로 복사한다.
- 또한 이 모듈은 defult 로 force: yes가 적용되어 있어서 ansible client로 파일을 복사할 때 해당 파일이 존재하지만 지금 복사 명령을 한 내용과 다른 내용을 포함하는 경우 덮어씌운다.
- 만약 이것을 해제하고 싶으면 force: no를 설정하면 된다. 이 옵션은 ansible client에 해당 파일이 존재하지 않을 경우에만 복사를 수행한다.
---
- name: test copy module
hosts: web.example.com
tasks:
- name: test copy module
copy:
src: hello_world
dest: /tmp/hello_ansible_world
- 이렇게 하면, ansible host에 있는 hello_world 라는 파일이 ansible client인 web.example.com의 /tmp/hello_ansible_world로 복사된다.
- content 지시문을 사용하여 파일을 새로 만들거나 있는 파일의 내용을 변경할 수 있다. 원래 /tmp/hello에 내용이 있었다면 다 없어지고 Managed by Ansible 이 저장된다. 없는 파일명이라면 해당 내용으로 새 파일이 생성된다. (잘 안씀 다른 모듈을 쓰지)
ansible all -m copy -a 'content="Managed by Ansible\n" dest=/tmp/hello'
lineinfile 모듈
- 기존 텍스트로 된 파일의 맨 아래에 라인을 추가하는 모듈이다.
---
- name: line test
hosts: web.example.com
tasks:
- name: line test
lineinfile:
path: /tmp/hello_ansible_world
line: 'happy happy'
state: present
- 결과는 다음과 같다.
# 참고
- 파일 안에 line 으로 명시한 부분이 있다면 (맨 밑이 아니더라도) 더 추가하지 않는다.
- 대소문자를 구분하므로 대소문자 하나만 달라도 다시 작동한다.
blockinfile 모듈
- 기존 텍스트로 된 파일의 맨 아래에 한 라인이 아닌 여러 라인으로 이루어진 텍스트 블록을 추가하는 모듈이다.
- 또한 blockinfile을 사용하면, 멱등을 위해 주석처리된 블록마커가 블록의 앞뒤에 삽입된다. (아래 결과처럼 BEGIN ANSIBLE MANAGED BLOCK, END ANSIBLE MANAGED BLOCK 이라고 나온 주석)
- 이러한 마커는 marker: 지시문을 사용해서 변경할 수 있다. ansible-doc -s blockinfile 참고
---
- name: block test
hosts: web.example.com
tasks:
- name: block test1
blockinfile:
path: /tmp/hello_ansible_world
block: >
welcome to the mettugi world
welcome to the mettugi world
I'm i'm dancing mettugi
state: present
# 참고로, 위 구문에서 block: | 로 하면 아래와 같이 나온다.
stat 모듈
- ansible client에 있는 특정 파일의 상세정보를 확인한다. 리눅스의 stat 명령과 유사하다.
- 또한 stat 모듈은 파일 상태 데이터가 포함된 값의 해시/딕셔너리 값을 반환하여 별도의 변수를 사용한 개별 정보를 참조하게 할 수 있다.
- 아래 예시는, stat 모듈의 결과를 보여주며, 결과에 md5 checksum 값도 포함한다.
---
- name: stat module
hosts: web.example.com
tasks:
- name: check stat module
stat:
path: /tmp/message-log
checksum_algorithm: md5
register: result
- name: check result
debug:
var: result
- 만약 checksum만 보고 싶다면, 아래와 같이 하면 된다.
---
- name: stat module
hosts: web.example.com
tasks:
- name: check stat module
stat:
path: /tmp/message-log
checksum_algorithm: md5
register: result
- name: check result
debug:
msg: "the file's checksum is {{ result.stat.checksum }}"
synchronize 모듈
- 이 모듈은 rsync 도구와 관련된 레퍼런스이다. 즉 ansible host와 ansible client 간의 파일을 동기화 한다. 이렇게 하여 playbook에서 일반적인 파일 관리 작업을 간소화한다.
- 이 모듈을 사용하기 위해 rsync를 ansible host, ansible client 양쪽에 설치해야 한다.
- 기본적으로 이 모듈을 쓸 때 동기화 작업을 시작하는 것은 ansible host이고, 동기화 당하는 것은 ansible client 이다.
---
- name: sync file
hosts: web.example.com
tasks:
- name : sync file
synchronize:
src: /home/devops/ansible_test
dest: /tmp
- 이 예시는, ansible host의 /home/devops/ansible_test 디렉토리 자체를 ansible client의 /tmp로 복사한다.(동기화한다)
fetch 모듈
- fetch는 각 ansible client에서 특정 경로의 파일을 검색하고, 이 파일들을 모두 ansible host로 각 호스트별로 정리해서 저장한다.
- flat: no 매개변수는 호스트이름, 경로 및 파일 이름을 대상에 추가하는 기본 동작을 수행한다. 이걸 하지 않으면, 모든 내용이 한 텍스트파일에 저장되므로 보기 어렵다.
---
- name: Use the fetch module to retrieve secure log files
hosts: all
tasks:
- name: Fetch the /var/log/secure log file from managed hosts
fetch:
src: /var/log/messages
dest: /home/devops/ansible_test/secure-backups
flat: no
secure-backups 라는 디렉토리가 생겼고, 아래와 같은 트리구조가 생긴다. (flat: no 옵션)
연습문제
* 파일 복사하기 심화
- ansible host에서 관리 호스트들로 파일 사본을 뿌리고, 오너쉽, 퍼미션, selinux까지 설정한다.
---
- name: Using the copy module
hosts: web.example.com
tasks:
- name: copy a file to manage hosts and set attributes
copy:
src: users.txt
dest: /home/devops/users.txt
owner: devops
group: devops
mode: u+rw,g=wx,o-rwx
setype: samba_share_t
- 다음과 같이 확인할 수 있다.
* selinux 유형 설정을 기본값으로 돌리기
- user, role, type, level 필드에 대해 기본 selinux 컨텍스트를 적용한다.
---
- name: using the file module to ensure selinux file context
hosts: web1.example.com
remote_user: root
tasks:
- name: selinux file context is set to defaults
file:
path: /home/devops/users.txt
seuser: _default
serole: _default
setype: _default
selevel: _default
- 다음과 같이 결과를 확인할 수 있다.
참조
ansible-doc(1)
chmod(1)
chown(1)
rsync(1)
stat(1)
touch(1)
files 모듈 ansible 설명서
https://docs.ansible.com/ansible/2.7/modules/list_of_files_modules.html
'Ansible' 카테고리의 다른 글
8장. 변수 사용하기 (0) | 2021.02.20 |
---|---|
7장. ansible playbook 기본 구현 (0) | 2021.02.20 |
6장. ansible에서 모듈 사용하기 (0) | 2021.02.19 |
5장. ad-hoc 명령 (0) | 2021.02.19 |
4장. ansible.cfg 파일 톺아보기 (0) | 2021.02.06 |