12

私たちのソルトスタックは、ホスト名 (webN. 、 dbN.など) に基づいています。しかし、さまざまなことのために、それらのサーバーの IP が必要です。今のところはピラーで保管していましたが、シンクロする箇所が増えてきました。

publish + network.ip_addrs を使用しようとしましたが、ホスト名を解決するためだけにソルト ラウンドトリップ全体を実行する必要があるため、それはちょっと面倒です。また、それは応答するミニオンに依存します。したがって、テンプレートでホスト名を IP に解決する方法を探しています。

どうにかしてモジュールを作成できると思いますが、私の Python スキルは非常に限られています。

4

6 に答える 6

12

カスタムグレインを使用できます。ステート ツリー ディレクトリにファイル _grains/fqdn_ip.py を作成します。

import socket

def fqdn_ip():
    return {
        'fqdn_ip': socket.gethostbyname(socket.getfqdn())
    }

テンプレート内:

{{ grains.fqdn_ip }}

もう 1 つの方法は、dnsutil モジュールを使用することです (ミニオンでは dig コマンドが必要です)。

{{ salt['dnsutil.A']('host.name.tld')[0] }}
于 2013-08-22T09:32:03.930 に答える
4

これは非常に古い投稿ですが、ipv4 アドレスを取得するために Google で上位にランクされています。salt 2015.5.8の時点で、プライマリ ipv4 アドレスを取得する最良の方法は{{ grains['ipv4'][0] }}.

于 2016-05-13T12:36:04.803 に答える
4

私はこれを見ました: http://cnygaard.blogspot.com.es/2012/11/how-to-template-eth0-address-with.html

これは私が見つけた簡単な方法です。

#init.sls:

...
...

/etc/swift/proxy-server.conf:              
   file:
     - managed                              
     - source: salt://swift/proxy-server.conf
     - template: jinja
     - context:
         proxy_ip: {{ salt['network.interfaces']()['eth0']['inet'][0]['address'] }}

その後:

#In proxy-server.conf

...

[filter:cache]
use = egg:swift#memcache
memcache_servers = {{ proxy_ip }}:11211
于 2014-02-15T18:40:03.280 に答える
2

ansible のドキュメントを読んで、もっと簡単な解決策を見つけました。これが私の結果です。

テンプレートに次のように入力します。

lookup hostname: {{ lookup('dig', 'google.ca.') }}

私のjinja2テンプレート:

# mytemplate.j2
## lookup directly
lookup hostname: {{ lookup('dig', 'google.ca.') }}

## in a variable
{% set fqdn = 'google.ca' %}
lookup hostname: {{ lookup('dig', fqdn) }}

結果:

# mytemplate.j2
## lookup directly
lookup hostname: 172.217.2.163

## in a variable
lookup hostname: 172.217.2.163
于 2017-06-20T18:34:10.633 に答える