我有相当广泛的盐配置,我希望能够看到发生了什么变化.如果我只是运行,salt '*' state.highstate我得到了整个列表,其中包含存在且未更改的内容 - 例如3到4个日志屏幕.但我真的很想看到上一份工作中发生的变化.
它不必为盐呼叫工作,它也可以使用salt-run jobs.lookup_jid.
echo "TestScript1 Arguments:"
echo "$1"
echo "$2"
echo "$#"
./testscript2 $1 $2
Run Code Online (Sandbox Code Playgroud)
TestScript2看起来像:
echo "TestScript2 Arguments received from TestScript1:"
echo "$1"
echo "$2"
echo "$#"
Run Code Online (Sandbox Code Playgroud)
当我以下列方式执行testscript1时:
./testscript1 "Firstname Lastname" testmail@domain.com
Run Code Online (Sandbox Code Playgroud)
期望的输出应该是:
TestScript1 Arguments:
Firstname Lastname
testmail@domain.com
2
TestScript2 Arguments received from TestScript1:
Firstname Lastname
testmail@domain.com
2
Run Code Online (Sandbox Code Playgroud)
但实际输出是:
TestScript1 Arguments:
Firstname Lastname
testmail@domain.com
2
TestScript2 Arguments received from TestScript1:
Firstname
Lastname
3
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?我想获得所需的输出而不是实际的输出.
我在SaltStack的Hacker News上看到了这个提交,但是我不明白它的确是什么或为什么原始版本是加密错误.(我也不太了解密码学的细节如何工作.)
- gen = RSA.gen_key(keysize, 1, callback=lambda x, y, z: None)
+ gen = RSA.gen_key(keysize, 65537, callback=lambda x, y, z: None)
Run Code Online (Sandbox Code Playgroud)
有人可以详细说明为什么选择"1"被取代了吗?为什么"65537"更好?
使用Jinja2为Saltstack编写模板文件时,我经常在文件的开头定义一些变量.例如:
{% set ip = grains['ip4_interfaces']['eth1'][0] %}
{% set domain = pillar['company_domain'] %}
{% set version = pillar['site_version'] %}
{% set site_url = 'www.' + domain %}
[...]
Run Code Online (Sandbox Code Playgroud)
一切正常,但是当打开生成的文件时,我得到一个空行的块,其中包含jinja代码.
难道我做错了什么 ?如果没有,在使用模板时有没有办法摆脱那些空行?
至于我在Salt文档中看到的(例如这里),支持的模块有两种主要类型:状态模块和执行模块(我知道还有渲染器,返回器等).大多数SLS文件示例包含仅与状态模块相关的语句(在salt.state命名空间下),而对于执行模块,仅显示命令行示例.例如,我们有两个名为"service"的模块:salt.states.service和salt.modules.service.现在我在SLS文件中使用执行模块时遇到问题,似乎它们根本不可用,或者我错过了让它们可用的东西.我的问题是:是否可以在SLS文件中使用执行模块,以及如何使用salt.modules.service.restart函数在Ubuntu机器上重新启动服务?此外,我没有明确区分这些模块类型.
我的服务名称是selenium-node,我尝试了几种组合,但都失败了:
# First attempt:
selenium-node:
service.restart
# Another one:
service:
- restart
- name: selenium-node
# Or even:
selenium-node:
service:
- restart
Run Code Online (Sandbox Code Playgroud)
在使用git状态和执行模块时,我遇到了同样的问题.但是,当我在minion上运行以下命令时(如文档中所示),它成功:
$ sudo salt-call service.restart selenium-node
Run Code Online (Sandbox Code Playgroud) 我想在/etc/nginx/conf.d创建或修改目录中的任何文件时重新启动nginx服务.
该目录中有许多文件,而不是指定特定文件,我想观察所有更改.
我试过这个:
nginx:
pkg.installed:
- name: nginx
service:
- running
- enable: True
- restart: True
- watch:
- file: /etc/nginx/nginx.conf
- file: /etc/nginx/conf.d
- pkg: nginx
Run Code Online (Sandbox Code Playgroud)
但这条线- file: /etc/nginx/conf.d并没有做我想要的.
这是错误:
ID: nginx
Function: service.running
Result: False
Comment: The following requisites were not found:
watch:
file: /etc/nginx/conf.d
Changes:
Run Code Online (Sandbox Code Playgroud)
我也尝试了许多变化,包括尾部斜线,但它们都不起作用.
应该- file: /etc/nginx/conf.d/改变什么?
我是SaltStack的初学者,但是我已经设法在一台机器上设置一些状态并在一个小兵上运行它们.
我现在拥有的是使用salt-master的Debian机器设置以及另一个作为salt-minion的Debian设置.
由于我也使用salt-master作为开发机器,我想知道我是否可以以某种方式在主机本身上应用状态.如果是这样,怎么样?
是否有一个命令可以运行以在主站上应用状态?(到目前为止我无法找到它)
我是否应该在同一台机器上安装salt-minion以便能够执行此操作并简单地将同一台机器注册为minion本身?
谢谢!
我试着添加:
mypack:
pkg:
- installed
- pkgs:
- mercurial
- git
cmd.run:
- name: 'mkdir -p /opt/mypack'
cmd.run: 'hg pull -u -R /opt/mypack || hg clone -R /opt https://...'
cmd.run: 'ln -s /opt/mypack/etc/init.d/xxx /etc/init.d/xxx'
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,状态似乎执行/安装但命令没有执行,或者至少不是全部执行.
我需要一个运行多个命令的解决方案,如果其中任何一个失败,则会使部署失败.
我知道我可以写一个bash脚本并包含这个bash脚本,但我一直在寻找一个只能用于YAML文件的解决方案.
基本上我正在创建一个描述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-stack ×10
service ×2
bash ×1
cryptography ×1
jinja2 ×1
nginx ×1
python ×1
security ×1
shell ×1