我们如何在 playbook 中使用编码值并在 ansible playbook 需要时对其进行解码?
How do we use encoded value in playbook and decode it whenever needed in ansible playbook?
我正在尝试使用 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
我如何 运行 这个 playbook 也带有 ansible-pull。
稍后我想将此剧本转换为角色 (role1),然后需要 运行 如下所示:
我们如何使用 ansible-pull 运行 基于角色的剧本?
问题不在于 b64decoding 您的值。如果您在终端中手动输入命令,您的命令应该不会引起任何问题,并且可能会给出预期的结果。
但是 ansible 正在为每个任务创建一个 ssh 连接,因此每个 shell/command 任务都在一个新会话上启动。因此,在一个命令任务中导出环境变量并在下一个 shell 任务中使用该环境变量将永远行不通。
此外,当您直接在 ansible 中拥有所有需要的工具时,为什么还要处理这么多 command/shell 任务?这是您最后 3 项任务的可能重写,可以合并到一个任务中。
- name: debug decoded value of bind_password
debug:
msg: "{{ bind_password | b64decode }}"
我正在尝试使用 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
我如何 运行 这个 playbook 也带有 ansible-pull。
稍后我想将此剧本转换为角色 (role1),然后需要 运行 如下所示:
我们如何使用 ansible-pull 运行 基于角色的剧本?
问题不在于 b64decoding 您的值。如果您在终端中手动输入命令,您的命令应该不会引起任何问题,并且可能会给出预期的结果。
但是 ansible 正在为每个任务创建一个 ssh 连接,因此每个 shell/command 任务都在一个新会话上启动。因此,在一个命令任务中导出环境变量并在下一个 shell 任务中使用该环境变量将永远行不通。
此外,当您直接在 ansible 中拥有所有需要的工具时,为什么还要处理这么多 command/shell 任务?这是您最后 3 项任务的可能重写,可以合并到一个任务中。
- name: debug decoded value of bind_password
debug:
msg: "{{ bind_password | b64decode }}"