ansible playbook:保存“变量”值的变量-u";?

ansible playbook:保存“变量”值的变量-u";?,ansible,Ansible,是否有一个Ansible变量保存“-u”cli参数的值 例如: ansible-playbook some-things.yml -u some-user ^^^^^^^^^ ansible\u user似乎记录了正在执行剧本的用户的姓名;我不需要那个。我需要cli上显式指定的用户名。否,没有此类变量 如果您想从playbook中获取CLI参数,则必须编写一些插件。您可以从这里获得一些灵感,其中显示了获取--标记 从ans

是否有一个Ansible变量保存“-u”cli参数的值

例如:

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()
返回的
命名空间
对象)。