Ansible slurp模块因变量而失败

Ansible slurp模块因变量而失败,ansible,slurp,Ansible,Slurp,当我将Ansible变量与slurp模块的src选项一起使用时,slurp模块失败 我试图构建一个Ansible playbook,将SSH公钥从组中的每个节点复制到组中的每个其他节点。我不能使用Ansible lookup()函数,因为它只能在Ansible服务器上查找文件。相反,我构建了id_rsa.pub的路径,目的是将授权的_密钥函数存储在内存中 我的问题是,当我为slurp模块的src指定Ansible变量时,playbook失败,即使它列出了id_rsa.pub文件的正确路径。如果我

当我将Ansible变量与slurp模块的src选项一起使用时,slurp模块失败

我试图构建一个Ansible playbook,将SSH公钥从组中的每个节点复制到组中的每个其他节点。我不能使用Ansible lookup()函数,因为它只能在Ansible服务器上查找文件。相反,我构建了id_rsa.pub的路径,目的是将授权的_密钥函数存储在内存中

我的问题是,当我为slurp模块的src指定Ansible变量时,playbook失败,即使它列出了id_rsa.pub文件的正确路径。如果我指定路径而不是使用变量,slurp模块就会工作

这是我的剧本:

# Usage: ansible-playbook copyPublicKey.yaml --limit <GRP> --extra-vars "userid=<userid>"
---
- hosts: all
  remote_user: root
  vars:
      user_id: "{{ userid }}"

  tasks:
  - name: Determine the path to the public key file
    shell: grep "{{ user_id }}" /etc/passwd | cut -d":" -f6
    changed_when: false
    register: user_home

  - set_fact:
        rsa_file: "{{ user_home.stdout_lines | to_nice_yaml | replace('\n', '') }}/.ssh/id_rsa.pub"
  - debug:
        msg: "Public key file - {{ rsa_file }}"

  - slurp:
        src: "{{ rsa_file }}"
    register: public_key
  - debug:
        msg: "Public key: {{ public_key }}"
slurp模块的输出:

TASK: [slurp ] ****************************************************************
failed: [hana-np-11.cisco.com] => {"failed": true}
msg: file not found: - /usr/sap/DEV/home/deleteme2/.ssh/id_rsa.pub
failed: [hana-np-13.cisco.com] => {"failed": true}
msg: file not found: - /usr/sap/DEV/home/deleteme2/.ssh/id_rsa.pub
failed: [hana-np-14.cisco.com] => {"failed": true}
msg: file not found: - /usr/sap/DEV/home/deleteme2/.ssh/id_rsa.pub
failed: [hana-np-15.cisco.com] => {"failed": true}
msg: file not found: - /usr/sap/DEV/home/deleteme2/.ssh/id_rsa.pub
failed: [hana-np-12.cisco.com] => {"failed": true}
msg: file not found: - /usr/sap/DEV/home/deleteme2/.ssh/id_rsa.pub

FATAL: all hosts have already failed -- aborting
  - slurp:
        src: /usr/sap/DEV/home/deleteme2/.ssh/id_rsa.pub
但是,如果我在slurp模块中指定实际路径:

TASK: [slurp ] ****************************************************************
failed: [hana-np-11.cisco.com] => {"failed": true}
msg: file not found: - /usr/sap/DEV/home/deleteme2/.ssh/id_rsa.pub
failed: [hana-np-13.cisco.com] => {"failed": true}
msg: file not found: - /usr/sap/DEV/home/deleteme2/.ssh/id_rsa.pub
failed: [hana-np-14.cisco.com] => {"failed": true}
msg: file not found: - /usr/sap/DEV/home/deleteme2/.ssh/id_rsa.pub
failed: [hana-np-15.cisco.com] => {"failed": true}
msg: file not found: - /usr/sap/DEV/home/deleteme2/.ssh/id_rsa.pub
failed: [hana-np-12.cisco.com] => {"failed": true}
msg: file not found: - /usr/sap/DEV/home/deleteme2/.ssh/id_rsa.pub

FATAL: all hosts have already failed -- aborting
  - slurp:
        src: /usr/sap/DEV/home/deleteme2/.ssh/id_rsa.pub
我得到了我期望的输出:

TASK: [slurp ] ****************************************************************
ok: [hana-np-11.cisco.com]
ok: [hana-np-12.cisco.com]
ok: [hana-np-15.cisco.com]
ok: [hana-np-14.cisco.com]
ok: [hana-np-13.cisco.com]

    TASK: [debug ] ****************************************************************
ok: [hana-np-11.cisco.com] => {
    "msg": "Public key: c3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBQkl3QUFBUUVBbHgzM0FUdGlLcWlrblQxMWorNjZKSXVFQW1OWWxZcDdCbHIwZXBzaWRuZ3NNYW9pMjNYL1Bjb0EvdnVxYmpxbmZ0Q1YzQmhUdURYQ3BYY0FwNDF5TEF5dlIvOW8xYi9mR2VtZWtlS296ZDh5Smh5VXFMR3IvMmJ6N0N2NFdaOWVqU0dyMFlzWGNjSFNDRmYzNmJreVBPNUg5NUdZdXpGMUV2RzVVcGM3YVNXWEVpM3JWVGJETEhBVC9YTk0veXhRUEMxRjB5Vi8yRkY1WDg4SXU5U0w2TGxrVnhsMUU3VkozTm40UEQrY3RUbGxFeno3enNETWxDbXpzMW5MaHROWnFuSXRZUkhMd21WUk5VcHJvYlpyUm1YMFJVYmIwNFNVbzdBbXpBNnZNcHR1OE1aUURzUGRMckMwYWxPWnZHMHpEUi9ReDlGalh6MVRXMld5WWhZNllRPT0gYW5zaWJsZS1nZW5lcmF0ZWQgb24gaGFuYS1ucC0xMQo=..."
}
ok: [hana-np-12.cisco.com] => {
    "msg": "Public key: c3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBQkl3QUFBUUVBd2hPa0FqcEhwbUU4ZEkvemR6d0I1U0htZnlpdXljd2ZmK2lDNW9KaEN4aU5ST0ZKbnVyOFArWno2K2c4Qy8waUdkNGs1ZHIwcE9IY1liWHlMeDNObHhTTWN6RnowZWNSUnMzL1FOOEQzSnBtWlR6T0JaMm1SaG1FY0hGbS9uTkh5eUZyWXlPOHlQNWpqNmxiSUlwU0lMb1BZZGJvM1dxenBGZjhiaDFlVkhRTEo2citVZzNwcUhUeWRzRDZhY3Rtc1ZvWWUvdVV6WExiYkpKbUxxdi9ZeGU4ZW9aUmtONkVqNGtaVDBibDFYUktkM0xTQlZKMHRwa3A1bVgzekxMNGVvWVEzMzMzam1qd2MzU1dWSHVObVl1b1ZsRFEvSzdoR2lFVHd5YUM3VU9hQ29pcEVnUGl5b2o3U1JpNzZCenpxV2hXc2dIbHI0REM3U0p2WFpObk9RPT0gYW5zaWJsZS1nZW5lcmF0ZWQgb24gaGFuYS1ucC0xMgo=..."
}
ok: [hana-np-13.cisco.com] => {
    "msg": "Public key: c3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBQkl3QUFBUUVBemFzeitlSW9OSnc2Q3psaVVSR2NQbnMyRkVWbDRtd1RqbDJrWkYxcC9uL0d1b3RPS01vMnR2RmQrN3JmY3YrN2VSZXNtM1lldXJzOXRCQXdSVDdvbXdjckpqUkJiM2Q3UHd3MnM1OTJjb0RjdFo3aE9vL3p4S1FCeWtjaXcvejJ3U1pKWUZKdnE4eFloWkxQNmxnK01uVW1Rd0JROURhREc3MVY2VFc5cFdSM0poYk5BZ2s4bWpBYlEyQk1kK2lWOGxoOUorcWIxbGE3RVVRRGZNaUM3R0ZKVmxJUVlpdm02Q045dGZOdnJGRlNaamZ6MEZKeXhQQWd1VW05d2NUMG9lUDdEQTJTVFNZQ0trQklvRmVuTUp3eFFzNDZSclJSenlBNlErN3I3Q3g5WnpPSlQ0OGgzQnpHQkNwYnhNd0R2L1RMNjRNTDN3UGxXVng5NGZvU2NRPT0gYW5zaWJsZS1nZW5lcmF0ZWQgb24gaGFuYS1ucC0xMwo=..."
}
ok: [hana-np-14.cisco.com] => {
    "msg": "Public key: c3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBQkl3QUFBUUVBd3U5V3FaZHBmSjdUZkFhNkc2V05pTkpraWVjWllObjZ4Mno2WWo3eUhsdDBrVWhoYmVXZWR4and0Ukl5d0h2UUZCU2xoVVo2V1Vhc2w0RlZsdzcrOHRGVkVIMkkwTUQ1YjN5UGFrclFhVXdxZHZ6TDEvVXpQWkJjTGU0SENmTGdLNjAxaXdncXBvdUVoRjFEdjEvVHorcTFvU0dmTTFOVjFPOFBGc1pQVjRZbVpoTC9qTVZBNE5MUzFKdXRoS1VmZlo3TmJOSk42SmdWaE14UW8vQXZIZmZvYktDUGJ1VWxDTFE0cTV6VlVTWkxyV1p3VmdncU44MkVnd0xYS00xU0IvOVQ2YmFMVXZhaDVVN0s1QjEzR0pFVXJWek1NNWZ0clpwdEo4T1N3OXUvMHJLVXlzZ0hRcUZVM0ViN0JkVkUxQVdCRXFtaW1XRFdMV3hUclJmZ053PT0gYW5zaWJsZS1nZW5lcmF0ZWQgb24gaGFuYS1ucC0xNAo=..."
}
ok: [hana-np-15.cisco.com] => {
    "msg": "Public key: c3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBQkl3QUFBUUVBdWwxTjlWQkNSU3QrOG5jdTRMVUlBb2hxUEkrWmRlcEtINHlhU1BBZWtETXdkaXpLVHZRSElXdC9iVkpXUzNma3BOYjVuTXFtMkR1eFZnKzBtZmRPTTk1Q2ZsUk00ZUNON05Jb25HQTQrUGVyOXRYdlNrdFU4U0huWERsZVNNa3dybUxnQ1dQN2lwbDRTdGt1SUNGaFh1NzBkOHBEN29IeW9BZVVWWVFuYzRkZldHQStVNU1SdWNSaC9mNWhhS25pN1hpRHZ0alVTaDJHN1RpMTlIdHBvYnlQdmdNSjVnRUt2OXRlWGJ3Qk14YXZicEFiRjJVOTRRTmorKzZOYTZIaWUweS9JQzVtWDRvSmgyb2Z6bGwybjA0MHdtQWRkQS9mY1d1L0IvR3FyOWNDZlhXK0hIUU95MEJoUXNBMk54K3A1RU4rbG1iREg1TUNHTW41Y0RLVEpRPT0gYW5zaWJsZS1nZW5lcmF0ZWQgb24gaGFuYS1ucC0xNQo=..."
}

我做错了什么?关于使用Ansible变量,我不知道什么?

slurp
模块失败,因为您提供了不正确的数据--错误消息是:

msg:未找到文件:-/usr/sap/DEV/home/deleteme2/.ssh/id_rsa.pub

重新措辞:

找不到名为“
-/usr/sap/DEV/home/deleteme2/.ssh/id_rsa.pub
”的文件

很明显,这样一个开头带有连字符和空格的文件并不存在,错误是有效的


数据格式错误的原因不需要
user\u home.stdout\u line
列表中的\u nice\u yaml
过滤器进行过滤(连字符是yaml中的元素标记)

您可以安全地将其移除并使用以下各项:

---
- hosts: all
  remote_user: root
  vars:
    user_id: "{{ userid }}"

  tasks:
    - name: Determine the path to the public key file
      shell: grep "{{ user_id }}" /etc/passwd | cut -d":" -f6
      changed_when: false
      register: user_home

    - slurp:
        src: "{{ user_home.stdout_lines[0] }}/.ssh/id_rsa.pub"
      register: public_key

    - debug:
        msg: "Public key: {{ public_key }}"
stdout\u行的元素
没有尾随的换行符,因此
replace('\n','')
是不必要的,但由于它是一个列表,即使是单个元素,也只需要使用
[0]
来处理第一个元素


否则,您也可以使用
user_home.stdout | replace('\n','')}/.ssh/id_rsa.pub

获取值。在这种情况下,问题与不正确的文件名有关(如techraf所述)

但我所经历的一点是,slurp还显示了相同的错误“未找到文件”,即文件位于一个目录中,该目录的权限不允许ansible用户从中读取内容。虽然,它应该打印与权限相关的错误,但它显示的是“未找到文件”错误。

所以当我问“我不知道什么?”时,结果是:1。真的,真的,看看错误消息2。可解变量的结构3。如何使用过滤器来增加侮辱性的伤害,结果证明slurp不适合我心目中的应用程序。但是,你提出的其他建议非常有用。感谢您抽出时间回答techraf的问题。