ansible playbook:保存“变量”值的变量-u";?
是否有一个Ansible变量保存“-u”cli参数的值 例如:ansible playbook:保存“变量”值的变量-u";?,ansible,Ansible,是否有一个Ansible变量保存“-u”cli参数的值 例如: ansible-playbook some-things.yml -u some-user ^^^^^^^^^ ansible\u user似乎记录了正在执行剧本的用户的姓名;我不需要那个。我需要cli上显式指定的用户名。否,没有此类变量 如果您想从playbook中获取CLI参数,则必须编写一些插件。您可以从这里获得一些灵感,其中显示了获取--标记 从ans
ansible-playbook some-things.yml -u some-user
^^^^^^^^^
ansible\u user
似乎记录了正在执行剧本的用户的姓名;我不需要那个。我需要cli上显式指定的用户名。否,没有此类变量
如果您想从playbook中获取CLI参数,则必须编写一些插件。您可以从这里获得一些灵感,其中显示了获取--标记
从ansible\u user
获取本地用户名的原因是(我猜)您在本地主机的上下文中运行任务,其中连接是local
,因此用户名是本地的。但是-u
开关代表远程用户。您可以欺骗Ansible,使其认为您希望远程执行任务,并从Ansible\u user
magic变量获取远程用户名。像这样:
---
- hosts: localhost
gather_facts: no
tasks:
- set_fact:
rem_usr: "{{ ansible_user }}"
delegate_to: some_fake_host_name
- debug:
msg: "local={{ ansible_user }}, remote={{ rem_usr }}"
如果要与某个用户一起执行playbook操作,可以将变量remote\u user:YOURUSER
添加到playbook(或在命令行中添加一个外部变量)。你也可以在ansible.cfg中更改它,尽管如果你在那里更改它,它将应用于你的所有剧本)@AlvaroNiño不,我需要剧本知道运行剧本所使用的用户名,并根据外部信息源检查它。我不想指定用户名是什么;相反,每个DevOps工程师将使用各自的用户名。为什么工程师不在他们的命令行中添加这些变量?作为ansible playbook YOURPLAY.yml--extra vars“remoteuser=Engineer”
,他们还可以添加诸如--私钥
或--询问通行证
@AlvaroNiño是的,他们一直在以-u
的形式添加参数。增加更多的参数将导致更多的人以错误的方式做事。与其强迫人们使用自定义变量来做-u
已经做过的事情,为什么不直接读取-u
参数呢?谢谢链接!最后,我编写了自己的查找脚本来锁定cli
对象并解析选项(cli.options
对象显然是argparse()
返回的命名空间
对象)。