Ansible에서는 원격 서버 B에서 현재 로그인된 원격 서버 A(둘 다 Linux 호스트)로 zip 파일을 가져오거나 복사하려고 합니다. 아래와 같이 와일드카드(glob)를 사용하여 소스 파일을 지정합니다.
- hosts: server-A
become: yes
tasks:
- name: copy the zip files
fetch:
src: /tmp/data/*.zip
dest: /tmp/app/
flat: yes
register: zip_status
delegate_to: server-B
다음은 내가 겪는 오류입니다. 복사/동기화 모듈도 시도했지만 작동하지 않습니다. 실제로 파일이 대상 서버-B에 존재합니다.
fatal: [server-B -> 10.98.68.222]: FAILED! => {
"changed": false,
"invocation": {
"module_args": {
"src": "/tmp/data/*.zip"
}
"msg": "file not found: /tmp/data/*.zip"
나는 노력했다팀 케네디의 답변. 위에서 언급했듯이 저는 먼저 Server-A에 로그인했습니다. 위 코드에서 볼 수 있듯이 Server-B에 위임합니다. 아래에 한 줄을 더 추가 했습니다 delegate_to: server-B
. 위에서 언급한 대로 /tmp/data/
(서버 B)에서 (서버 A)로 .zip 파일을 복사하고 싶습니다 /tmp/app/
.
- hosts: server-A
become: yes
tasks:
- name: find the zip files
find:
paths: "/tmp/data"
recurse: no
patterns: "*.zip"
register: zip_files
delegate_to: server-B
- name: copy the zip files
fetch:
src: "{{ item.path }}"
dest: "/tmp/app/"
flat: yes
with_items: "{{ zip_files.files }}"
register: zip_status
delegate_to: server-B
찾기 모듈을 사용하면 파일이 제대로 표시되지만, /tmp/app/
디렉터리가 이미 존재하는 경우 디렉터리를 생성하려고 시도하는 가져오기 모듈을 사용하면 오류가 발생합니다. 완전한 라이센스를 보유하고 있습니다.
fatal: [server-A]: FAILED! => {
"msg": "Unable to create local directories(/tmp/app/): [Errno 13] Permission denied: '/tmp'"
답변1
Fetch는 디렉터리나 와일드카드를 지원하지 않습니다. 문서에는 문자열이 파일 이름으로 해석되고 파일 이름으로만 해석된다는 것이 매우 명확합니다. 별도의 찾기 프로세스에서 제공하는 파일 목록과 함께 사용할 수 있습니다.
어쩌면 다음과 같은 것일 수도 있습니다.
- hosts: server-A
become: yes
tasks:
- name: find the zip files
find:
paths: "/tmp/data"
recurse: no
patterns: "*.zip"
register: zip_files
- name: copy the zip files
fetch:
src: "{{ item.path }}"
dest: "/tmp/app/"
flat: yes
with_items: "{{ zip_files.files }}"
register: zip_status
delegate_to: server-B
이것이 우리가 원하는 방식으로 작동할지 완전히 확신할 수는 없지만 최소한 올바른 방향을 알려줄 것입니다.