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

コントローラマシンでは、rootとしてログインし、リモートサーバーに接続するユーザーは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/"' は次のようになります。[Eメール保護]:/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

関連情報