【问题标题】:ansible vsphere facts for using on multiple roles用于多个角色的 ansible vsphere 事实
【发布时间】:2016-11-05 14:34:34
【问题描述】:

我有一个问题。

所以基本上我有一个可以运行 2 个角色的剧本。 第一个角色将通过 pysphere 插件连接到 VMware vCenter 并创建一个虚拟机,然后通过“收集事实”来“学习”它的 MAC 地址。 (2 个任务,一个创建 VM,另一个收集事实)。

这样我就可以“调试”并实际看到新创建的 VM 的 MAC。

我的剧本的第二部分是运行另一个角色,该角色将连接到另一个服务器并通过 ansible 的“shell”模块输入一些 cobbler 命令来创建一个 cobbler 配置文件以进行安装。

我想要实现的是能够创建一个 vm 并创建一个 cobbler 安装配置文件..

这里缺少的部分当然是虚拟机的 MAC 地址..(因为 cobbler 需要它)。

而且我无法使第一个角色的 MAC 的“事实/变量”在第二个角色中可用..

有什么想法吗? :)

试图将 fact_caching 与 json 一起使用。没有帮助,或者我做错了什么...

非常感谢!!

【问题讨论】:

  • 如果您可以在该新 VM 上运行安装程序,则 MAC 地址将位于:ansible_<IFNAME>.macaddress(您可以通过运行 ansible -vvi /path/to/inventory <yourhost> -m setup 来测试 Gathering facts 的功能)
  • 我无法在这个新虚拟机上运行安装程序,因为它还不“存在”。它是由 ansible 在 vCenter 上创建的,但由于我需要它的 MAC 才能打开电源,所以还没有打开电源。。

标签: ansible ansible-playbook role


【解决方案1】:

您可以使用set_fact 设置事实并在以后甚至在主机之间使用它们。
此示例生成随机字符串(假设在您的示例中它是 VM 的 MAC)并稍后在另一台服务器上使用它:

- hosts: host1
  tasks:
    - shell: date | md5sum | head -c 8
      register: random_string_cmd
    - set_fact:
        random_string: "{{ random_string_cmd.stdout }}"

- hosts: host2
  tasks:
    - shell: echo "The random string generated on previous server is {{ hostvars['host1']['random_string'] }}"

您也可以在角色内部使用set_fact

【讨论】:

    猜你喜欢
    • 2017-08-14
    • 2023-03-29
    • 2021-07-25
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多