首页 文章

在由谷物过滤的盐模板中获取minions IP

提问于
浏览
1

我找到了这个答案here,它告诉我如何在模板中获取另一个小兵的IP,但我无法获得 host.fqdnhost.ip . 当我使用 host 时,我得到的是完整的域名,而不是IP . 当我在控制台上运行它时,它获取了ips,但在模板中它确实返回 str object

Unable to manage file: Jinja variable 'str object' has no attribute 'fqdn'

我试过这个here但是这个甚至没有显示出结果 .

我希望能够构建一个hosts文件 . 每个小兵都有一些角色设置为谷物,如下所示:

roles:
  - backend
  - cdn
  - ...

我希望能够得到所有 roles:backend and not roles:cdn . 但当我将这一行添加到我的 publish.publish 时,我收到此错误:

Unable to manage file: Jinja error: 'NoneType' object is not iterable

我不知道我做错了什么,我在master上添加了peer publish但是它不起作用 . 我已经阅读了文档,但它们并没有帮助我找到问题所在 .

EDIT Versions report

$ salt-minion --versions-report
                 Salt: 2015.5.3
               Python: 2.7.6 (default, Mar 22 2014, 22:59:56)
               Jinja2: 2.7.2
             M2Crypto: 0.21.1
       msgpack-python: 0.3.0
         msgpack-pure: Not Installed
             pycrypto: 2.6.1
              libnacl: Not Installed
               PyYAML: 3.10
                ioflo: Not Installed
                PyZMQ: 14.0.1
                 RAET: Not Installed
                  ZMQ: 4.0.4
                 Mako: Not Installed
              Tornado: Not Installed
Debian source package: 2015.5.3+ds-1trusty1

EDIT 2 the sls snippet

{% for host in salt['publish.publish']('roles:backend', 'network.ip_addrs', 'eth0', 'grain') %}
  server {{ host.ip }}; # {{ host.fqdn }}
{% endfor %}

2 回答

  • 0

    找到解决方案:

    在minion配置中添加这段代码:

    mine_interval: 2
    mine_functions:
      network.ip_addrs:
        - eth1 # or any other eth-n you might want
    

    要匹配所有后端而不是load_balancers,我们需要一个复合匹配器

    G@roles:backend and not G@roles:load_balancer
    

    之后,只需使用 salt.mine 将所有内容放在模板中

    {%- for server, addrs in salt['mine.get']('G@roles:backend and not G@roles:load_balancer', 'network.ip_addrs', 'compound').items() %}
      # {{ server }}
      server {{ addrs|last }};
    {%- endfor %}
    
  • 3

    network.ip_addrs 没有给你fqdn . 它只给你一个ip地址列表 .

    [boucha@elsapo ~]$ sudo salt dasalt network.ip_addrs --out json
    {
        "dasalt": [
            "10.0.3.1", 
            "10.4.156.81", 
            "172.17.42.1"
        ]
    }
    

相关问题