Ansible을 사용하여 원격 서버(glob 사용)에서 현재 서버로 파일을 가져오거나 복사하면 "파일을 찾을 수 없음: /tmp/data/*.zip"이 발생합니다.

Ansible을 사용하여 원격 서버(glob 사용)에서 현재 서버로 파일을 가져오거나 복사하면 "파일을 찾을 수 없음: /tmp/data/*.zip"이 발생합니다.

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

이것이 우리가 원하는 방식으로 작동할지 완전히 확신할 수는 없지만 최소한 올바른 방향을 알려줄 것입니다.

관련 정보