我正在尝试使用ansible-pull方法在Playbook的运行时运行带有额外var的Playbook。

这就是我需要使用vars运行我的剧本的方式。

ansible-playbook decode.yml --extra-vars "host_name=xxxxxxx  bind_password=xxxxxxxxx swap_disk=xxxxx"

bind_password将具有管理员密码的编码值。
我已经尝试在剧本下面写东西。

我能够调试每个值并正确获取它,但是在解码密码后无法获取确切值或不确定我是否正确执行了该操作?
---

- name: Install and configure AD authentication
  hosts: test
  become: yes
  become_user: root

vars:
   hostname: "{{ host_name }}"
   diskname: "{{ swap_disk }}"
   password: "{{ bind_password }}"

tasks:

  - name: Ansible prompt example.
    debug:
     msg: "{{ bind_password }}"

  - name: Ansible prompt example.
    debug:
     msg: "{{ host_name }}"

  - name: Ansible prompt example.
    debug:
     msg: "{{ swap_disk }}"

  - name: Setup the hostname
    command: hostnamectl set-hostname --static "{{ host_name }}"

  - name: decode passwd
    command: export passwd=$(echo "{{ bind_password }}" | base64 --decode)

  - name: print decoded password
    shell: echo "$passwd"
    register: mypasswd

  - name: debug decode value
    debug:
      msg: "{{ mypasswd }}"

但是,尽管我们可以使用以下命令解码base64值:
echo "encodedvalue" | base64 --decode

我如何也可以使用ansible-pull运行此剧本。

稍后我想将此剧本转换为角色(role1),然后需要按以下方式运行它:

我们如何使用ansible-pull运行基于角色的剧本?

最佳答案

问题不是b64decoding您的值。如果您在终端中手动键入命令,则该命令应该不会引起任何问题,并且可能会提供预期的结果。

但是ansible正在为每个任务创建一个ssh连接,因此每个shell/命令任务都在一个新 session 上开始。因此,在一个命令任务中导出一个env var并在下一个Shell任务中使用该env var将永远无法工作。

此外,当您直接在ansible中拥有所有必需的工具时,为什么要用这么多的命令/shell任务来处理所有这些呢?这是对您可以合并的最后3个任务的可能重写。

  - name: debug decoded value of bind_password
    debug:
      msg: "{{ bind_password | b64decode }}"

关于linux - 我们如何在剧本中使用编码后的值,并在任何需要的剧本中对其进行解码?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59683715/

10-13 05:27