0

似乎 ansible 查找插件不遵守特权升级,我不清楚这是否是设计使然。

我一直在寻找这个问题的答案,但是尽管我发现了许多类似的问题,但我还没有看到一个似乎可以回答为什么以下剧本的行为如此的问题。

---
- hosts: localhost
  become: 1
  tasks:

  - name: cat file
    command: cat /home/bob/.ssh/id_rsa.pub
    register: cat

  - debug:
      msg: |
        dog: {{ cat.stdout }}

  - name: add the variable
    set_fact:
      rsa_key: "{{ lookup('file', '/home/bob/.ssh/id_rsa.pub') }}"
    delegate_to: localhost

运行这个播放的结果是命令模块“工作”而查找模块不工作:

PLAY [localhost] *************************************************************************************************************************************************************************************************************************************************************

TASK [Gathering Facts] *******************************************************************************************************************************************************************************************************************************************************
ok: [localhost]

TASK [cat file] **************************************************************************************************************************************************************************************************************************************************************
changed: [localhost]

TASK [debug] *****************************************************************************************************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "dog: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCl+xAFC2hwsLaWvCEOFHEz96AU8ltF1fA8ZNQp9Mkl6FFZUEFu2rAl+imSXm+xAPrWhqOoLgkYZKq6qAsqG3SqSisrr4uHGdC4F/5NBlgR7OqfAU76VfJRmcq4F01caXBJVuciZ0EX7KQcC6ixNpZweLPoRDBNntDJnDKVIbx8h7w3qAYRbYOsLv6OT7BLgldSrJSOYBOJ0/SLZIUDAvewPnPppkwZgMAMV12bXHzn5Imsn9S6K5riZ/n3oenOgW787w5XQI0xKsxO6g4NjzciMELafXfoq07+Gz53NMyo9/DHag2w8y6m+Js4axazMFFgcnS3Hrbc/tSejvarEynEktN1/+JTu8eEdKxtZYr2ez55SW+MOxZr14isQJDc0btduO4yJfXvJ6KooULVbqZyVnmun6pKgecsCDTy6kYQVV0oJgpixiquoLAMPN+nKzufaSgGTRbKnQuf+7w6X94ci3iIkpS7qxvQsZ/P61q7uQjhtsmG6qsk6/M9nIruJY0= ansible-generated on rh1.local.home\n"
}

TASK [add the variable] ******************************************************************************************************************************************************************************************************************************************************
[WARNING]: Unable to find '/home/bob/.ssh/id_rsa.pub' in expected paths (use -vvvvv to see paths)
fatal: [localhost]: FAILED! => {"msg": "An unhandled exception occurred while running the lookup plugin 'file'. Error was a <class 'ansible.errors.AnsibleError'>, original message: could not locate file in lookup: /home/bob/.ssh/id_rsa.pub"}

PLAY RECAP *******************************************************************************************************************************************************************************************************************************************************************
localhost                  : ok=3    changed=1    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   

我在一个不是“bob”的用户下运行它,并且使用 become_user = root 和 become_method = sudo。任何关于查找插件确实忽略特权升级语句的想法或确认,将不胜感激。

4

1 回答 1

2

查看为 ansible 的标准插件找到的实际代码和命令,我发现了这一点:

与所有查找一样,这以运行 playbook 的用户身份在 Ansible 主机上运行,​​并且“成为”不适用,目标文件必须可由 playbook 用户读取,或者,如果它不存在,则 playbook 用户必须有足够的创建它的权限。(因此,例如,除非整个 playbook 以 root 身份运行,否则尝试写入 /etc 等区域将失败)。

在密码插件里面。因此,查找插件确实忽略了“成为”升级指令,因此它是“设计使然”的这种行为,尽管我发现它相当违反直觉,没有很好的文档记录,并且不喜欢它,因为它迫使我编写丑陋的代码来绕过它;- )。

于 2020-10-18T11:39:53.480 回答