3

我正在尝试使用 ansible-pull 方法在剧本的运行时间上运行带有额外变量的剧本。

这就是我需要如何使用 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 运行基于角色的剧本?

4

1 回答 1

3

问题不在于 b64 解码您的价值。如果您在终端中手动键入,您的命令应该不会导致任何问题,并且可能会给出预期的结果。

但是 ansible 正在为每个任务创建一个 ssh 连接,因此每个 shell/命令任务都在一个新会话上启动。因此,在一个命令任务中导出环境变量并在下一个 shell 任务中使用该环境变量将永远不会起作用。

此外,当您直接在 ansible 中拥有所有需要的工具时,为什么要使用这么多命令/shell 任务来处理所有这些?这是您最后 3 个任务的可能重写,它们适合一个单独的任务。

  - name: debug decoded value of bind_password
    debug: 
      msg: "{{ bind_password | b64decode }}"
于 2020-01-10T14:49:59.047 回答