Ansible 可变变量内的可变变量操作

Ansible 可变变量内的可变变量操作,ansible,Ansible,我想从作为输入传递的字符串(pass\u var)在我的剧本的vars部分中构造密码(ansible\u ssh\u pass)。这里的问题是,实际密码应该是变量的前6个字符(pass\u var)。我不知道如何实现它。这是我的剧本 -主机:所有 用户:“{{username}}” 变成:是的 收集事实:错误 变量: ansible_ssh_通行证: 我的剧本是: ansible-playbook test.yml --extra-vars "pass_var=${pass_val}

我想从作为输入传递的字符串(
pass\u var
)在我的剧本的vars部分中构造密码(
ansible\u ssh\u pass
)。这里的问题是,实际密码应该是变量的前6个字符(
pass\u var
)。我不知道如何实现它。这是我的剧本

-主机:所有
用户:“{{username}}”
变成:是的
收集事实:错误
变量:
ansible_ssh_通行证:
我的剧本是:

ansible-playbook test.yml --extra-vars "pass_var=${pass_val} username=${user}"

我还需要做一些shell操作。例如,我的字符串将采用base64编码,因此我也需要对其进行解码。类似于:
echo${pass_var}base64-d | rev | cut-c1-6

您可以在Ansible中使用Python风格的字符串切片,因此您可以编写:

vars:
ansible_ssh_pass:“{{pass_var[:6]}”
例如,以下命令:

ansible localhost -e pass_var=1234567890 -m debug -a 'msg={{pass_var[:6]}}'
将输出:

localhost | SUCCESS => {
    "msg": "123456"
}

如果您的初始字符串是base64编码的,您可以使用Ansible的
b64\u decode
过滤器:

ansible_pass:{{(pass_var|b64decode)[:6]}”
如果出于某种奇怪的原因需要将其反转,则会出现一个
reverse
过滤器:

ansible_pass:{((pass_var | b64decode)| reverse)[:6]}”
如果我们修改我前面的示例,我们会得到:

ansible localhost -e pass_var="MTIzNDU2Nzg5MA==" -m debug -a 'msg={{((pass_var|b64decode)|reverse)[:6]}}'
产生:

localhost | SUCCESS => {
    "msg": "098765"
}

我还需要做一些shell操作。我的字符串将是base64编码的字符串。所以我也需要解码它。比如:echo${pass_var}base64-d | rev|cut-c1-6你好,拉尔克斯,是的,请再看一眼。因为它是一个编码字符串,所以我也需要对它进行解码。我只是想弄清楚如何在vars部分中执行shell操作,以便得到所需的结果。我已经更新了答案。我建议你通读这本书和那本书。真是难以置信。真是太棒了。我在这件事上纠缠了好一阵子。我非常感谢您在解决问题时给予的善意帮助。如果这回答了您的问题,您可能希望单击此答案左侧的复选标记。