基本上我正在创建一个描述Munin服务器配置的Salt状态,我需要得到一个已知给主人的所有小兵的列表,如下所示:
{% for host in pillar['munin_clients'] %}
[{{ host.fqdn }}]
address {{ host.ip }}
use_node_name yes
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
唯一的区别是我不想使用支柱,我需要动态填充此列表.ret.get_minions似乎是相关的,但由于某种原因我不能使它工作.我有什么选择?
我们有两个不同的环境,开发和生产,由一个Salt服务器管理.像这样的东西:
base:
'dev-*':
- users-dev
'prod-*':
- users-prod
Run Code Online (Sandbox Code Playgroud)
user-dev和users-prod状态是几乎相同的,就像这样:
{% for user, data in pillar['users-dev'].items() %}
{{ user }}-user:
user.present:
< ...something... >
{{ user }}_ssh_auth:
ssh_auth.present:
< ...something... >
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
我们不想复制代码,所以我们最初的想法是做这样的事情:
{% users = pillar['users'].items() %}
include:
- users-common
Run Code Online (Sandbox Code Playgroud)
然后引用usersin users-common,但这不起作用,因为正确的Jinja语法是,set users = pillar['users'].items()并且这不打算跨盐状态包括.
那么,问题是如何正确地做到这一点?
是否可以使用任何SOCKS客户端lib在Python中通过SOCKS5代理发送UDP数据报?SocksiPy似乎没有用,或者我只是错误地使用它.以下代码不起作用,它尝试直接连接到目标:
s = socks.socksocket ( socket.AF_INET, socket.SOCK_DGRAM )
s.setproxy(socks.PROXY_TYPE_SOCKS5,"socks.proxy.lan")
s.sendto ( payload, ( ip, port ) )
Run Code Online (Sandbox Code Playgroud)
如果我更改SOCK_DGRAM为SOCK_STREAM代码也不起作用,它不会尝试连接任何地方.