【问题标题】:ansible-playbook: Variable that holds the value of "-u"?ansible-playbook:保存“-u”值的变量?
【发布时间】:2018-02-15 15:29:36
【问题描述】:

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

例如:

ansible-playbook some-things.yml -u some-user
                                    ^^^^^^^^^

ansible_user 似乎记录了执行 playbook 的用户名;我不需要那个。我需要在 cli 上明确指定的用户名。

【问题讨论】:

  • 如果您想与某些用户一起执行剧本操作,您可以将变量 remote_user: YOURUSER 添加到您的剧本(或在命令行中作为额外变量添加)。您也可以在 ansible.cfg 中更改它,但如果您在那里更改它,它将应用于您的所有剧本)
  • @AlvaroNiño 不,我需要 playbook 知道用于运行 playbook 的用户名,并根据外部信息源对其进行检查。我不想指定用户名是什么;相反,每个 DevOps 工程师都将使用他们的各自的用户名。
  • 工程师为什么不在命令行中添加这些变量?如ansible-playbook YOURPLAY.yml --extra-vars "remoteuser=Engineer",也可以添加--private-key--ask-pass等变量
  • @AlvaroNiño 是的,他们一直在以-u 的形式添加参数。添加更多参数将导致某人以错误的方式做事的机会更大。与其强迫人们使用自定义变量来做-u 一直在做的事情,为什么不直接读取-u 参数呢?

标签: ansible


【解决方案1】:

不,没有这样的变量。

如果你想从 playbook 中获取 CLI 参数,你将不得不编写一些插件。您可以从这个answer 中获得一些灵感,其中显示了获取--tags

您从ansible_user 获得本地用户名的原因是因为(我猜)您在本地主机的上下文中运行任务,其中连接是local,因此用户名是本地的。但-u 开关代表远程用户。您可以欺骗 Ansible 认为您想要远程执行任务并从 ansible_user 魔术变量中获取远程用户名。像这样:

---
- 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 }}"

【讨论】:

  • 感谢您的链接!我最后编写了自己的查找脚本来锁定cli 对象并解析选项(cli.options 对象显然是Namespace 返回的Namespace 对象@ 对象)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 2017-10-07
  • 2022-01-12
  • 2015-06-20
  • 1970-01-01
  • 2020-09-22
  • 1970-01-01
相关资源
最近更新 更多