Vmware 在盐云配置文件部署上指定静态IP

Vmware 在盐云配置文件部署上指定静态IP,vmware,salt-stack,salt-cloud,Vmware,Salt Stack,Salt Cloud,我已经设置了一个新的salt主机,并尝试自动部署新的vm,其中包含静态IPs,没有来自模板的dhcp 我可以使用我的模板通过云配置文件(其中定义了默认IP)部署VM,但是我找不到一种方法来覆盖IP地址以便在部署时动态使用,我希望将主机名/IP传递到cli调用或通过salt api,以便我可以从其他应用程序启动 我尝试将IP作为动态支柱数据传递到一个状态,这可以配置vm主机名,但无法看到如何将IP传递到配置文件中,因为配置文件配置文件不接受支柱变量 salt-call state.apply vm

我已经设置了一个新的salt主机,并尝试自动部署新的vm,其中包含静态IPs,没有来自模板的dhcp

我可以使用我的模板通过云配置文件(其中定义了默认IP)部署VM,但是我找不到一种方法来覆盖IP地址以便在部署时动态使用,我希望将主机名/IP传递到cli调用或通过salt api,以便我可以从其他应用程序启动

我尝试将IP作为动态支柱数据传递到一个状态,这可以配置vm主机名,但无法看到如何将IP传递到配置文件中,因为配置文件配置文件不接受支柱变量

salt-call state.apply vm-new pillar='{"hostname": "salt-test", "ip": "172.0.0.11"}'
vm-new.sls

{{ pillar['hostname'] }}:
  cloud.profile:
    - name: {{ pillar['hostname'] }}
    - profile: centos7
cloud.profiles.d/centos7.conf

...
  devices:
    network:
      Network adapter 1:
        name: 'VM Network'
        switch_type: standard
        ip: 172.0.0.90
        subnet_mask: 255.255.255.0
        gateway: [172.0.0.1]
...
然后我尝试使用地图文件,但尝试传递支柱数据似乎不起作用

# salt-cloud -m cloud.maps.d/centos7.map pillar='{"hostname": 'salt-test', "ip": "172.0.0.11"}'
[ERROR   ] Rendering exception occurred: Jinja variable 'salt.utils.context.NamespacedDictWrapper object' has no attribute 'hostname'
[ERROR   ] Rendering map cloud.maps.d/centos7.map failed, render error:
Jinja variable 'salt.utils.context.NamespacedDictWrapper object' has no attribute 'hostname'
No nodes defined in this map
centos7.map

    centos7:
  - {{ pillar['hostname'] }}:
      devices:
        network:
          Network adapter 1:
            ip: {{ pillar['ip'] }}
我花了一段时间研究文档和github问题,但有几个人试图做类似的事情,但地图文件中的硬编码IP解决了他们的问题,有可能做我想做的吗?有关于下一步的建议/指针吗?

我已经测试了用于Windows虚拟机的salt.modules.win\u ip.set\u static\u ip,它可以正常工作。例如,您可以在salt master上运行此命令以设置所有windows计算机的IP:

salt -G 'os_family:Windows' ip.set_static_ip 'Local Area Connection' 10.1.2.3/24 gateway=10.1.2.1

您可以阅读官方文档。

我遇到了一个类似的要求,其中我需要动态设置一些EC2实例属性,例如主机名。至少在撰写本文3个月前,这个用例是不可能的,因此我最终构建了一个salt exec模块,例如execmodule.provision_实例,该实例根据我的预定义配置文件和默认值动态生成一个映射文件,并最终使用生成的映射文件运行salt.cloud.CloudClient.map_

它通过调用exec模块(例如salt调用execmodule.provision_实例)工作得很好。如果我们可以简单地传递柱子而不是指定一个映射文件,那就更好了


注意:由于此线程很旧,salt cloud maps可能已经支持将支柱传递到映射运行,请检查。

谢谢您的回答,但这并不能解决我的问题,我试图找到一种方法,在创建虚拟机之前传递我想要使用的IP,而不是旋转然后更改IP