在salt-cloud配置文件部署

时间:2016-07-17 12:09:47

标签: vmware salt-stack salt-cloud

我已经设置了一个新的salt master,我正在尝试使用静态IP(没有dhcp可用)自动部署新VM。

我可以通过云配置文件使用我的模板部署虚拟机,并在那里定义默认IP,但是我无法找到覆盖IP地址以便在部署时动态使用的方法,我希望通过主机名/ ip进入cli调用或通过salt-api,所以我可以从其他应用程序启动。

我已经尝试将IP作为动态支柱数据传递到某个状态,这会将vm主机名配置为ok,但无法查看如何将IP传递到配置文件中,因为配置文件conf不会。 t接受支柱变量。

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解决了他们的问题,是否有可能做我想做的事情?关于下一步要去哪里的建议/指示?

2 个答案:

答案 0 :(得分:0)

我遇到了类似的要求,其中我需要动态设置一些EC2实例属性(例如主机名)。至少3个月以前,这个用例是不可能的,所以我最终构建了一个salt exec模块(例如execmodule.provision_instances),它在给定我的预定义配置文件时使用默认值动态生成一个map文件,并最终调用{ {1}}生成的地图文件。

通过调用exec模块(例如salt.cloud.CloudClient.map_run)可以很好地工作。如果我们只是简单地传递支柱而不是指定地图文件会更好。

注意:由于此线程已经过时,盐云地图可能已经支持将支柱传递到地图运行,请检查。

答案 1 :(得分:-1)

我已经为Windows VMS测试了salt.modules.win_ip.set_static_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

您可以阅读官方文档here