Ansible 가이드: Ansible을 사용하여 파일 관리
이 페이지에서
- 무엇을 할 것인가?\n
- Ansible에서 복사 및 템플릿 모듈을 사용하여 파일 복사\n
- 1. 로컬에서 원격 대상 시스템으로 파일 복사
- 2. 원격 시스템의 파일을 다른 디렉토리로 복사
- 3. 파일 복사 및 파일 권한 및 소유자 변경\n
- 4. 템플릿 모듈로 파일 복사\n
- 1. 원격 시스템에서 로컬로 다운로드
- 2. 디렉토리 구조 없이 원격에서 로컬로 다운로드
- 1. blockinfile을 사용하여 파일에 여러 줄 삽입\n
- 2. 마커 옵션을 사용하여 여러 줄 삽입\n
- 3. 마커 내부의 여러 줄 블록 주변 삭제/제거
- 4. 파일에 새 줄 삽입
- 5. lineinfile 모듈을 사용하여 파일에서 라인을 제거하십시오.\n
- 6. 패턴 문자열을 정규식으로 교체하고 모듈 교체\n
- 7. 주석 해제 구성\n
- 8. 구성 라인에 대한 설명\n
- 1. 파일의 심볼릭 링크 생성
- 2. 파일 모듈을 사용하여 새 디렉터리 만들기\n
이 가이드에서는 Ansible 모듈을 사용하여 파일을 관리하는 방법을 보여드리겠습니다. Ansible을 사용하여 파일을 복사, 편집, 삽입, 다운로드 및 교체하는 방법을 배우게 됩니다.
우리는 무엇을 할 것입니까?
- 복사 및 템플릿 모듈을 사용하여 파일 복사\n
- 가져오기 모듈을 사용하여 파일 다운로드\n
- blockinfile, lineinfile을 사용하여 파일 편집 및 모듈 교체\n
- 파일 속성 관리
Ansible에서 복사 및 템플릿 모듈을 사용하여 파일 복사
Ansible은 로컬 디렉토리에서 원격 대상 시스템으로 파일을 복사하기 위한 일부 모듈(복사 및 템플릿 모듈)을 제공합니다.
복사와 템플릿 모듈의 차이점은 복사 모듈은 파일 디렉터리에서 파일을 복사하고 템플릿은 Ansible 플레이북의 템플릿 디렉터리에서 Jinja2 템플릿을 복사한다는 것입니다.
복사 모듈은 인증서와 같은 영구 파일을 복사하는 데 적합하고 템플릿은 가상 호스트 구성 등과 같은 재사용 가능한 구성에 더 유용합니다.
1. 로컬에서 원격 대상 시스템으로 파일 복사
로컬 파일 디렉토리의 sources.list 구성을 원격 시스템 /etc/apt/sources.list에 복사합니다. 구성이 있는 경우 타임스탬프를 기반으로 교체 및 백업됩니다.
- name: Copy from Local to Remote Target Machine with 'copy' copy: src: sources.list dest: /etc/apt/sources.list backup: yes
2. 원격 시스템의 파일을 다른 디렉토리로 복사
원격 시스템의 sudoers 구성 /etc/sudoers.d/hakase를 다른 디렉터리 /home/hakase/hakase-suoers.txt에 복사합니다. remote_src 옵션으로 수행할 수 있습니다.
- name: Copy file from one directory to other on the Remote Machine copy: src: /etc/sudoers.d/hakase dest: /home/hakase/hakase-sudoers.txt remote_src: yes
3. 파일 복사 및 파일 권한 및 소유자 변경
파일 디렉토리의 bash 파일을 원격 서버 시스템에 복사하고 기본 파일 권한을 0755로 설정하고 파일 소유자를 hakase로 설정합니다.
- name: Copy file and set up the permission and owner of the file copy: src: simple.sh dest: /home/hakase/simple.sh owner: hakase group: hakase mode: 0755
4. 템플릿 모듈로 파일 복사
템플릿 디렉터리에서 nginx 가상 호스트에 대한 Jinja2 템플릿 구성을 원격 시스템의 /etc/sites-enabled/ 디렉터리로 복사합니다. Jinja2 템플릿을 사용하여 구성에 대한 변수를 생성하고 재사용 가능성을 높일 수 있습니다.
- name: Copy file using 'template' module template: src: default.j2 dest: /etc/nginx/sites-enabled/ backup: yes owner: root group: root mode: 0644
Ansible에서 Fetch Module을 사용하여 파일 다운로드
원격 시스템에서 로컬 ansible 노드로 파일을 다운로드하기 위해 fetch라는 ansible 모듈을 사용할 수 있습니다.
1. 원격 컴퓨터에서 로컬로 다운로드
백업을 생성하기 위해 nginx 구성 파일 nginx.conf를 원격 서버에서 로컬 ansible-node 디렉토리 /home/hakase/backup으로 다운로드합니다. 그리고 기본 가져오기 모듈에는 디렉토리 구조가 포함됩니다.
- name: Download file from Remote Machine to Local ansible-node directory become: yes fetch: src: /etc/nginx/nginx.conf dest: /home/hakase/backup/
2. 디렉토리 구조 없이 원격에서 로컬로 다운로드
flat 옵션을 추가하여 원격 머신에서 디렉토리 구조 없이 로컬 ansible-node로 다운로드합니다.
- name: Download file from Remote Machine to Local ansible node without directory structures become: yes fetch: src: /etc/nginx/nginx.conf dest: /home/hakase/backup/ flat: yes
Ansible로 파일 편집
이제 Ansible 모듈을 사용하여 파일을 편집하려고 했습니다. blockinfile, lineinfile 및 replace와 같은 Ansible을 사용하여 파일을 편집하기 위해 알아야 할 몇 가지 모듈이 있습니다.
blockinfile은 파일에 여러 줄을 삽입/제거합니다. lineinfile은 한 줄을 위한 파일이며 문자열을 바꾸기 위해 replace 모듈을 사용할 수 있습니다.
1. blockinfile을 사용하여 파일에 여러 줄 삽입
blockinfile 모듈을 사용하여 ssh 구성 sshd_config에 여러 줄 구성을 추가합니다. 그리고 기본 설정은 새 구성을 맨 아래에 삽입합니다.
- name: Insert multiple lines and Backup
blockinfile:
path: /etc/ssh/sshd_config
backup: yes
block: |
ClientAliveInterval 360
ClientAliveCountMax 02. 마커 옵션을 사용하여 여러 줄 삽입
또는 특정 줄에 삽입하려는 경우 마커 옵션을 사용하고 뒤에 insertafter 또는 insertbefore 및 Regex를 사용하거나 둘 다 사용할 수 있습니다.
아래 플레이북은 sshd_config 파일에 새로운 추가 구성을 삽입합니다. 기본 마커 # BEGIN ANSIBLE MANAGED BLOCK으로 둘러싸인 UserPAM 줄 앞에 추가 구성이 추가됩니다.
- name: Insert after regex, backup, and validate
blockinfile:
path: /etc/ssh/sshd_config
backup: yes
marker: "# {mark} ANSIBLE MANAGED BLOCK "
insertbefore: '^UsePAM '
block: |
AllowUsers hakase vagrant
PermitEmptyPasswords no
PermitRootLogin no
validate: '/usr/sbin/sshd -T -f %s'3. 마커 내부의 여러 줄 블록 주변 삭제/제거
ansible 마커 # BEGIN ANSIBLE MANAGED BLOCK으로 둘러싸인 줄 블록을 제거합니다.
- name: Remote text block surrounding by markers
blockinfile:
path: /etc/ssh/sshd_config
marker: "# {mark} ANSIBLE MANAGED BLOCK"
content: ""
backup: yes4. 파일에 새 줄 삽입
새 라인 구성 PasswordAuthentication no를 regex #PermitEmptyPasswords 라인 아래에 ssh 구성 /etc/ssh/sshd_config에 삽입합니다.
- name: Insert New Line under the Regex configuration
lineinfile:
path: /etc/ssh/sshd_config
backup: yes
regexp: '^PasswordAuthentication '
insertafter: '^#PermitEmptyPasswords '
line: 'PasswordAuthentication no'
validate: '/usr/sbin/sshd -T -f %s'5. lineinfile 모듈을 사용하여 파일에서 라인을 제거합니다.
파일에서 줄을 제거/삭제하려면 state:absent 옵션을 사용하고 다음과 같은 줄의 정규식을 사용할 수 있습니다.
- name: Remove a line from the file
lineinfile:
path: /etc/ssh/sshd_config
state: absent
regexp: '^PasswordAuthentication'6. 패턴 문자열을 정규 표현식으로 교체하고 모듈 교체
이제 replace 모듈을 사용하여 문자열을 교체하려고 합니다. 교체 모듈은 일종의 문자열을 교체하기 위해 백엔드 참조로 정규식이 필요했습니다.
모듈 교체를 사용하여 /etc/hosts 파일에서 호스트 이름을 변경합니다.
- name: Replace the default
replace:
path: /etc/hosts
regexp: '(\s+)node\.provision\.labs(\s+.*)?$'
replace: '\1box.hakase.labs\2'
backup: yes7. 구성 주석 해제
replace 모듈을 사용하여 Linux 시스템에서 구성의 주석을 제거할 수 있습니다. 간단합니다. replace 모듈을 사용하여 줄 시작 부분에서 주석 문자열 #을 제거할 수 있습니다.
/etc/nginx/nginx.conf 파일에서 server_tokens 행 구성의 주석을 제거하십시오.
- name: Uncomment configuration
replace:
path: /etc/nginx/nginx.conf
regexp: '#(\s+)server_tokens'
replace: 'server_tokens'
backup: yes8. 구성 라인에 대한 설명
다음은 줄 시작 부분에 #을 추가하여 줄 구성에 주석을 다는 것입니다.
- name: Comment Line configuration replace: path: /etc/nginx/nginx.conf regexp: '(\s+)gzip on' replace: '\n\t#gzip on' backup: yes
Ansible에서 파일 모듈을 사용하여 파일 속성 설정
파일 모듈은 소유자, 그룹 및 권한 변경, 심볼릭 링크 생성, 새 디렉토리 생성 및 심볼릭 링크, 파일 또는 디렉토리 삭제와 같은 파일 자체의 속성을 설정하는 데 사용할 수 있습니다.
1. 파일의 심볼릭 링크 생성
원격 호스트에서 /etc/nginx/sites-enabled/ 디렉토리에 대한 vhost라는 nginx 가상 호스트 구성을 위한 symlink 파일을 만듭니다.
- name: Create Symlink of file
file:
src: /etc/nginx/sites-available/vhost
dest: /etc/nginx/sites-enabled/vhost
owner: root
group: root
state: link2. 파일 모듈을 사용하여 새 디렉토리 생성
file 모듈을 사용하여 새로운 디렉토리를 생성하기 위해서는 아래와 같이 value 디렉토리와 함께 state 옵션을 사용해야 합니다.
- name: Create a New Directory using file
file:
path: /etc/nginx/ssl
state: directory
owner: root
group: root
mode: 0755참조