使用saltstack salt 2016.3.1 (Boron)
。全新安装到新的Ubuntu 14.04 x64 VM
使用带有以下配置的pillarstack。
# Set up environment
environments/{{ pillar.get('environment', '') }}.sls
#Set up roles
roles/defaults.sls
{% for role in pillar.get('roles', []) -%}
roles/{{ role }}.sls
roles/{{ role }}_{{ pillar.get('environment', '') }}.sls
{% endfor -%}
# The exception is the rule
{% set hostname, domainname = minion_id.split('.',1) %}
minions/{{ domainname | replace('.','_') }}/{{ hostname }}.sls
在/srv/pillar
这是目前在一台机器上最简单的盐主人/小兵的设置。
使用我的收集内部ip地址,支柱中的minion配置,如下所示。
# Configure all minions to report internal ip addresses to mine
mine_functions:
network.interfaces: []
internal_ip_addrs:
mine_function: network.ip_addrs
interface: eth1
cidr: '10.0.0.0/8'
到目前为止,非常好。
# salt \* mine.get '*' internal_ip_addrs
mgt001.mon.haraka-services.com:
----------
mgt001.mon.haraka-services.com:
- 10.131.23.164
我似乎有我想要的数据。
也很好通过盐主人(同一台机器,但我认为值得检查)
# salt-run mine.get '*' internal_ip_addrs
mgt001.mon.haraka-services.com:
- 10.131.23.164
为什么?有人会问。我正在使用DigitalOcean和内部网络,虽然不是面向互联网,但不是私有的,我需要确保安全性使用iptables来隔离我的系统。 (无论如何,我可能会做很多这个,但这次是具体的动机:))
现在麻烦的部分。
在支柱(iptables公式的配置,严格限制对我的小兵的主人的访问)
firewall:
services:
'4505':
block_nomatch: False
ips_allow:
{%- for server, ip in __salt__['mine.get']('*', 'internal_ip_addrs') %}
- {{ ip[0] }}/32
{%- endfor %}
interfaces:
- eth1
'4506':
block_nomatch: False
ips_allow:
{%- for server, ip in __salt__['mine.get']('*', 'internal_ip_addrs') %}
- {{ ip[0] }}/32
{%- endfor %}
interfaces:
- eth1
注意,发现我必须使用__salt__
而不是salt
(与pillarstack有关的事情?),但除此之外,根据示例我'在网上看到了。
可悲的是,没有工作。这会产生以下支柱数据
# salt \* pillar.get firewall
mgt001.mon.haraka-services.com:
----------
enabled:
True
install:
True
services:
----------
4505:
----------
block_nomatch:
False
interfaces:
- eth1
ips_allow:
None
4506:
----------
block_nomatch:
False
interfaces:
- eth1
ips_allow:
None
ssh:
----------
block_nomatch:
False
interfaces:
- eth1
ips_allow:
- /32
注意 ssh
的最终条目在其他地方配置如下。
firewall:
enabled: True
install: True
services:
ssh:
block_nomatch: False
ips_allow:
- {{ __salt__['mine.get']('mgt001.mon.*', 'internal_ip_addrs')[0] }}/32
interfaces:
- eth1
正如您所看到的,我从__salt__['mine.get']('*', 'internal_ip_addrs')
我一直在抨击这个头几个小时,我想我错过了一些令人目眩的事情。任何想法都非常赞赏。
答案 0 :(得分:1)
好的,经过多一点挖掘,这就是我提出的解决方案。
salt.saltutil.runner
使用__salt__.saltutil.runner
似乎是关键(修改为salt
,因为Error in feed_push_parser(readBin(con, raw(), n), reset = TRUE) :
parse error: trailing garbage
" : "SUCCESS" } /* 1 */ { "_id" : "b736c374-b8ae-4e9
(right here) ------^
未在支柱堆栈中定义(似乎)。