1

我已经设置了一个新的 salt master,并试图通过模板自动部署具有静态 IP(没有 dhcp 可用)的新 VM。

我可以使用我的模板通过云配置文件部署 VM调用或通过 salt-api,以便我可以从其他应用程序启动。

我试图将 IP 作为动态支柱数据传递到状态,这可以配置 vm 主机名,但由于配置文件 conf 不接受支柱变量,因此无法看到如何将 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 解决了他们的问题,是否可以做我想做的事情?关于下一步看哪里的任何建议/指示?

4

2 回答 2

0

我遇到了类似的要求,我需要动态设置一些 EC2 实例属性(例如主机名)。写这篇文章至少 3 个月前,这个用例是不可能的,所以我最终构建了一个 salt exec 模块(例如execmodule.provision_instances),它根据我的预定义配置文件和默认值动态生成一个映射文件,并最终salt.cloud.CloudClient.map_run使用生成的映射文件调用。

它通过调用 exec 模块(例如salt-call execmodule.provision_instances)运行良好。如果我们可以简单地传递柱子而不是指定地图文件会更好。

注意:由于这个线程是旧的,盐云地图可能已经支持通过柱子来运行地图,请检查。

于 2016-10-22T11:25:01.083 回答
-1

我已经salt.modules.win_ip.set_static_ip针对 Windows VMS 进行了测试,并且可以正常工作。例如,您可以在 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

你可以在这里阅读官方文档。

于 2016-08-22T17:00:06.287 回答