Ansible 동기화 모듈은 사용자 변수를 정확한 사용자 이름으로 대체하지 않습니다.

Ansible 동기화 모듈은 사용자 변수를 정확한 사용자 이름으로 대체하지 않습니다.

다음 문제를 해결하기 위해 여러 가지 방법을 시도했지만 운이 좋지 않았습니다. 재고는 다음과 같습니다.

#cat Inventory/common/group_vars/all/inventory_pwd.yml

Remote1_user: "devops"

#cat Inventory/nonprod/fdc/group_vars/all/inventory.txt

[원격] xxxx ansible_ssh_user="{{remote1_user }}" ansible_port=22 ansible_password="test@12"

제어 시스템에서 원격 시스템으로 파일을 복사하기 위해 다음 플레이북을 실행하고 있습니다.

PB.yml

---
- name: "Copy test"
  hosts: remote
  become: true
  tasks:

    - name: Copying content to the remote vm
      synchronize:
        src: /ansible/playbooks/Hello
        dest: /home/devops/
      delegate_to: localhost

컨트롤러 머신에서는 루트로 로그인했고 원격 서버에 연결하는 사용자는 devops입니다.

그러나 스크립트를 실행한 후 다음 오류가 발생합니다.

ansible-playbook -vvv -i Inventory/common -i Inventory/nonprod/fdc/group_vars/all/inventory.txt pb.yml

TASK [Copying content to the remote vm] *********************************************************************************************task path: /ansible/playbooks/pb.yml:9
fatal: [x.x.x.x -> localhost]: FAILED! => {
    "changed": false,
    "cmd": "sshpass -d3 /usr/bin/rsync --delay-updates -F --compress --archive --rsh=/usr/bin/ssh -S none -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null --rsync-path=sudo rsync --out-format=<<CHANGED>>%i %n%L /ansible/playbooks/Hello {{remote1_user}}@x.x.x.x:/home/devops/",
    "invocation": {
        "module_args": {
            "_local_rsync_password": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
            "_local_rsync_path": "rsync",
            "_substitute_controller": false,
            "archive": true,
            "checksum": false,
            "compress": true,
            "copy_links": false,
            "delete": false,
            "dest": "{{remote1_user}}@x.x.x.x:/home/devops/",
            "dest_port": null,
            "dirs": false,
            "existing_only": false,
            "group": null,
            "link_dest": null,
            "links": null,
            "mode": "push",
            "owner": null,
            "partial": false,
            "perms": null,
            "private_key": null,
            "recursive": null,
            "rsync_opts": [],
            "rsync_path": "sudo rsync",
            "rsync_timeout": 0,
            "set_remote_user": true,
            "src": "/ansible/playbooks/Hello",
            "ssh_args": null,
            "times": null,
            "verify_host": false
        }
    },
    "msg": "remote username contains invalid characters\r\nrsync: connection unexpectedly closed (0 bytes received so far) [sender]\nrsync error: unexplained error (code 255) at io.c(235) [sender=3.1.3]\n",
    "rc": 255
}

여기'"dest": "{{remote1_user }}@xxxx:/home/devops/"'는 다음과 같아야 합니다.'[이메일 보호됨]:/home/devops/'. 그러나 "remote1_user"를 "devops"로 바꾸지는 않습니다.

누구든지 이 문제를 해결하도록 도와줄 수 있나요?

답변1

이것이 문제인지는 확실하지 않지만 항상 중괄호 앞뒤에 공백이 있는 변수를 인코딩합니다. - {{remote1_user }}@xxxx:/home/devops/

답변2

이름에 문제가 있을 수 있습니다. Ansible이 변수 파일을 찾았는지 확실하지 않습니다. Inventory/nonprod/fdc/group_vars/all/inventory.txt가 호스트 파일인 경우 Inventory/nonprod/fdc/inventory.txt로 변경한 다음 그룹 var 파일을 Inventory/nonprod/fdc/group_vars /all/로 변경해 보세요. Inventory_pwd .yml

관련 정보