소개
이 랩에서는 Ansible Copy 모듈을 살펴봅니다. 이 모듈을 사용하면 파일과 디렉토리를 원격 호스트로 복사할 수 있습니다. Copy 모듈은 Ansible 자동화 작업의 일부로 파일을 전송하는 유연하고 효율적인 방법을 제공합니다.
원격 호스트에 파일 복사
이 단계에서는 Ansible Copy 모듈을 사용하여 제어 머신에서 원격 호스트로 파일을 복사합니다.
먼저, /home/labex/project/copy-module-playbook.yaml이라는 새 Ansible 플레이북 파일을 생성하고 텍스트 편집기에서 엽니다.
다음 내용을 플레이북 파일에 추가합니다.
- hosts: localhost
tasks:
- name: Copy a file to remote host
copy:
src: /home/labex/file.txt
dest: /home/labex/project/file.txt
copy: 제어 노드 (로컬 호스트) 에서 원격 호스트로 파일을 복사하는 데 사용되는 Ansiblecopy모듈을 사용합니다.src: 소스 파일 경로를 지정하여 로컬 호스트에서 복사할 파일의 경로를 나타냅니다.dest: 대상 파일 경로를 지정하여 원격 호스트에서 파일을 복사할 위치를 나타냅니다.
이 플레이북 작업을 통해 /home/labex/file.txt 파일이 원격 호스트의 /home/labex/project/file.txt 경로로 복사됩니다. Ansible copy 모듈은 파일 복사 프로세스를 효율적으로 수행합니다.
다음으로, /home/labex 디렉토리에 file.txt라는 파일을 생성합니다.
echo "This is the content of the file." > /home/labex/file.txt
그런 다음, 다음 명령을 사용하여 플레이북을 실행합니다.
ansible-playbook copy-module-playbook.yaml
예시 출력:
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Copy a file to remote host] **********************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
마지막으로, 파일 file.txt가 원격 호스트의 지정된 대상 경로에 존재하는지 확인합니다.
cat /home/labex/project/file.txt
예시 출력:
This is the content of the file.
여기서 "This is the content of the file."는 /home/labex/file.txt 파일의 내용과 동일하며, 이는 /home/labex/file.txt 파일이 /home/labex/project/file.txt로 성공적으로 복사되었음을 의미합니다.
원격 호스트에 디렉토리 복사
이 단계에서는 Ansible Copy 모듈을 사용하여 제어 머신에서 원격 호스트로 디렉토리를 복사합니다.
먼저, 기존 플레이북 파일의 모든 내용을 제거하고 다음 내용을 플레이북 파일에 추가하여 수정합니다.
- hosts: localhost
tasks:
- name: Copy a directory to remote host
copy:
src: /home/labex/directory
dest: /home/labex/project/
step1 유형으로, src가 디렉토리로 설정되면 이 플레이북 작업은 /home/labex/directory 디렉토리를 원격 호스트의 /home/labex/project/ 경로로 복사합니다.
다음으로, /home/labex 디렉토리에 directory라는 디렉토리를 생성하고 directory 디렉토리에 file2.txt라는 파일을 생성합니다.
mkdir /home/labex/directory
touch /home/labex/directory/file2.txt
그런 다음, 다음 명령을 사용하여 플레이북을 실행합니다.
ansible-playbook copy-module-playbook.yaml
예시 출력:
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Copy a directory to remote host] *****************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
마지막으로, 디렉토리 directory와 그 내용이 원격 호스트의 지정된 대상 경로에 존재하는지 확인합니다.
tree /home/labex/project
예상 출력:
/home/labex/project
├── copy-module-playbook.yaml
├── directory
│ └── file2.txt
└── file.txt
1 directory, 3 files
directory와 file2.txt 파일이 대상 호스트의 /home/labex/project 디렉토리로 성공적으로 복사되었음을 확인할 수 있습니다.
파일 속성 유지
이 단계에서는 Ansible Copy 모듈을 사용할 때 권한 및 타임스탬프와 같은 파일 속성을 유지하는 방법을 배웁니다.
먼저, 기존 플레이북 파일의 모든 내용을 제거하고 다음 내용을 플레이북 파일에 추가하여 수정합니다.
- hosts: localhost
tasks:
- name: Preserve file attributes
copy:
src: /home/labex/file.txt
dest: /tmp/file.txt
mode: preserve
mode: preserve: 이 매개변수는 복사 프로세스 중에 소스 파일의 모드 (권한) 를 유지하여 대상 파일이 소스 파일과 동일한 권한을 유지하도록 합니다.
이 플레이북 작업을 통해 /home/labex/file.txt 파일이 원격 호스트의 /tmp/file.txt로 복사되는 동안 권한과 같은 파일 속성이 유지됩니다.
그런 다음, 다음 명령을 사용하여 플레이북을 실행합니다.
ansible-playbook copy-module-playbook.yaml
예시 출력:
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Preserve file attributes] ************************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
마지막으로, 파일 file.txt가 속성을 유지하면서 원격 호스트의 지정된 대상 경로로 복사되었는지 확인합니다.
ll을 사용하여 /home/labex/file.txt 세부 정보를 봅니다.
ll /home/labex/file.txt
예시 출력:
-rw-rw-r-- 1 labex labex 33 Mar 9 08:34 /home/labex/file.txt
ll을 사용하여 /tmp/file.txt 세부 정보를 봅니다.
ll /tmp/file.txt
예시 출력:
-rw-rw-r-- 1 labex labex 33 Mar 9 09:00 /tmp/file.txt
이 Ansible 플레이북은 복제 프로세스 중에 권한 패턴 (권한 비트) 및 소유자 정보를 유지하는 데 사용할 수 있습니다.
권한 관리
이 단계에서는 Ansible Copy 모듈을 사용할 때 파일 권한을 처리하는 방법을 살펴봅니다. 원격 호스트에서 복사된 파일에 대한 특정 권한을 설정하는 방법을 배웁니다.
먼저, 기존 플레이북 파일의 모든 내용을 제거하고 다음 내용을 플레이북 파일에 추가하여 수정합니다.
- hosts: localhost
tasks:
- name: Handle permissions
copy:
src: /home/labex/file.txt
dest: /tmp/file1.txt
mode: "0644"
mode: 파일에 대해 원하는 권한 모드로“0644”를 바꿉니다. 권한 모드에 대한 자세한 내용은 chmod 문서를 참조하십시오.
이 플레이북 작업을 통해 /home/labex/file.txt 파일이 원격 호스트의 /tmp/file1.txt로 복사되며, 지정된 권한은 0644입니다.
그런 다음, 다음 명령을 사용하여 플레이북을 실행합니다.
ansible-playbook copy-module-playbook.yaml
예시 출력:
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Handle permissions] ******************************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
마지막으로, file1.txt 파일이 설정된 권한으로 원격 호스트의 지정된 대상 경로에 복사되었는지 확인합니다.
ll을 사용하여 /home/labex/file.txt 세부 정보를 봅니다.
ll /home/labex/file.txt
예시 출력:
-rw-rw-r-- 1 labex labex 33 Mar 9 08:34 /home/labex/file.txt
ll을 사용하여 /tmp/file1.txt 세부 정보를 봅니다.
ll /tmp/file1.txt
예시 출력:
-rw-r--r-- 1 labex labex 33 Mar 9 09:11 /tmp/file1.txt
이 Ansible 플레이북은 원격 호스트의 파일에 대한 읽기, 쓰기 및 실행과 같은 특정 권한을 설정하는 데 사용할 수 있습니다.
멱등성 복사
이 단계에서는 Ansible Copy 모듈을 사용하여 복사 작업을 멱등성 (idempotent) 으로 만듭니다. 원격 호스트에 파일이 없거나 소스 파일이 변경된 경우에만 파일이 복사되도록 합니다.
먼저, 기존 플레이북 파일의 모든 내용을 제거하고 다음 내용을 플레이북 파일에 추가하여 수정합니다.
- hosts: localhost
tasks:
- name: Idempotent copy
copy:
src: /home/labex/file.txt
dest: /tmp/file2.txt
remote_src: yes
remote_src: yes: 이 매개변수는src경로가 원격 호스트에 있음을 지정하여 Ansible 이 원격 호스트에서 다른 위치로 파일을 전송할 수 있도록 합니다.
이 플레이북 작업을 통해 원격 호스트에 있는 /home/labex/file.txt 파일은 존재하지 않거나 소스 파일이 변경된 경우에만 원격 호스트의 /tmp/file2.txt로 복사됩니다.
다음으로, /tmp/file2.txt 파일이 있는지 확인합니다.
ll /tmp/file2.txt
예시 출력:
ls: cannot access '/tmp/file2.txt': No such file or directory
그런 다음, 다음 명령을 사용하여 플레이북을 실행합니다.
ansible-playbook copy-module-playbook.yaml
예시 출력:
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Idempotent copy] *********************************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
마지막으로, file2.txt 파일이 존재하지 않거나 소스 파일이 변경된 경우에만 원격 호스트의 지정된 대상 경로에 복사되었는지 확인합니다.
ll /tmp/file2.txt
예시 출력:
-rw-rw-r-- 1 labex labex 33 Mar 9 08:34 /tmp/file2.txt
이 시점에서 플레이북을 다시 실행합니다.
ansible-playbook copy-module-playbook.yaml
예시 출력:
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Idempotent copy] *********************************************************
ok: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
changed=1이 changed=0이 된 것을 확인하십시오. 이는 이 Ansible 플레이북이 원격 호스트에 파일이 없거나 소스 파일이 변경된 경우에만 파일이 복사됨을 인식할 수 있음을 증명합니다.
요약
축하합니다! Ansible Copy 모듈 랩을 성공적으로 완료했습니다. Copy 모듈을 사용하여 파일과 디렉토리를 원격 호스트로 복사하고, 파일 속성을 유지하며, 권한을 처리하고, 멱등성 (idempotence) 을 보장하는 방법을 배웠습니다.
Copy 모듈은 Ansible 자동화 작업에서 파일을 전송하는 강력한 도구입니다. 요구 사항에 따라 복사 작업을 사용자 정의할 수 있는 다양한 매개변수를 제공합니다.
이제 Copy 모듈에 대한 이해가 높아졌으므로, Ansible 플레이북에서 해당 기능을 활용하여 인프라 전체에서 파일 전송 및 동기화를 효율적으로 관리할 수 있습니다. Ansible 로 즐겁게 복사하세요!


