标签: saltstack

SaltStack:一个状态如何只执行一次?

我只需要执行一次状态。我找不到一个简单的方法来做到这一点。

现在,上下文

我通过 salt 安装了两个 MySQL 服务器。我想让一个人成为另一个人的奴隶。

为了设置从站,我需要在主站安装结束时获取主站状态信息:

SHOW MASTER STATUS;
Run Code Online (Sandbox Code Playgroud)

现在,我可以使用执行mysql.query函数的自定义状态来获取它。

mysql_master_status:
  mystate.query:
    - query: SHOW MASTER STATUS
Run Code Online (Sandbox Code Playgroud)

但是每次为我的服务器执行 highstate 时它都会执行。从而每次都给出不同的主信息。

我尝试使用文件存在作为标志:

/tmp/only_once:
  file.missing: []
mysql_master_status:
  mystate.query:
    - query: SHOW MASTER STATUS
    - require:
      - file: /tmp/only_once
Run Code Online (Sandbox Code Playgroud)

它正在工作,但我并不高兴,因为我现在每次都有两个失败的状态。

我的自定义解决方案

我以一个新参数 for 结束mystateflag它在第一次执行时创建一个标志文件,如果文件存在则成功返回:

mysql_master_status:
  mystate.query:
    - query: SHOW MASTER STATUS
    - flag:  /tmp/only_once
Run Code Online (Sandbox Code Playgroud)

还有这个问题

不过,我想知道是否以及如何只执行一次状态。

saltstack

9
推荐指数
1
解决办法
8743
查看次数

SaltStack:如果服务文件被更改,则执行`systemctl --system daemon-reload`

我们通过 SaltStack 部署和更改系统服务文件。

例如,如果文件/etc/systemd/system/superfoo.service被更改,则 systemd 会发出以下警告:

Warning: Unit file of superfoo.service changed on disk, 
         'systemctl --system daemon-reload' recommended.
Run Code Online (Sandbox Code Playgroud)

如何使用 salt-stack 自动执行此操作?

systemd saltstack

9
推荐指数
2
解决办法
9262
查看次数

如何检查在后台运行的 salt 命令的输出?

我有一个由其他人编写的盐脚本,它正在执行一堆命令。它运行了很长时间。我与运行它的机器的连接中断了,但它仍在运行。我如何返回它以查看它的作用?我没有使用screen.

命令如下所示:

$ salt --subset=1 -C 'G@application:foo and G@roles:application and G@vpc:staging' state.sls foo.commands.application.export
Run Code Online (Sandbox Code Playgroud)

有很多主机都有角色应用程序,而且这些东西运行良好。我正在其他地方监视正在执行的操作(推送到队列)的输出。

我相信我正在寻找某种“检查正在运行的 salt 脚本的状态”,但在文档中找不到。

我跑salt 2014.1.13 (Hydrogen)Ubuntu 14.04.1 LTS

saltstack

7
推荐指数
1
解决办法
1万
查看次数

通过 Jenkins 进行盐态测试

全部,

我们正在尝试在我们的 Jenkins 设置中进行自动化测试,以在我们的 salt 状态文件 ( .sls) 中运行“smoke”和“lint”类型的测试。到目前为止,所有 google-foo 都产生了很少的信息。有一种test=True在命令行中进行测试的方法,但这不适用于无外壳帐户(就像 Jenkin 的帐户通常那样)。

我还没有遇到过对 SaltStack 状态进行这种自动测试的人。所以:

1)有没有可能

2)任何人都知道我可以查看的好资源

TIA。

automated-testing continuous-integration saltstack

7
推荐指数
1
解决办法
1998
查看次数

Salt:Minion 没有返回,但 salt-call 正在工作

我正在 Windows Minions(Linux master)上使用 SaltStack。我写了一个简单的 .sls 文件,它复制了 C:/hello_world.txt 中的 hello-world.txt。我还编写了我的 top.sls 并配置了我的 file_roots。Minions 密钥已被接受(并且 test.ping 正在工作)。

我目前的问题是当我打电话(在主人上)时:

salt 'my_minion' state.highstate
Run Code Online (Sandbox Code Playgroud)

我得到一个:

Minion did not return. [no response]
Run Code Online (Sandbox Code Playgroud)

而当我尝试(在奴才上)时:

salt-call state.highstate
Run Code Online (Sandbox Code Playgroud)

一切正常(文件被复制)。我试图在主服务器上添加 -l 调试选项,但我没有得到一些有趣的东西。

有什么调试技巧吗?

saltstack

7
推荐指数
1
解决办法
5272
查看次数

如何将 Salt Stack 与所有位于 NAT 之后的 Minion 一起使用(不可公开访问,默认 salt 端口未打开)?

Salt Stack Minion 是否可以使用在所有消费者 NAT 路由器中默认打开的标准端口(并且没有公共 DNS 记录或静态 IP)从 NAT/防火墙等后面与 salt master 通信?

我正在完成我的第一个盐教程,这就是我被卡住的地方。

我可以在 Ubuntu salt-master 上配置 iptables。但是我无法控制小兵将坐在后面的路由器/ NAT。

到目前为止,我尝试了这些设置:

/etc/salt/master:

publish_port: 465
ret_port: 443
Run Code Online (Sandbox Code Playgroud)

/etc/salt/minion:

master_port: 465
Run Code Online (Sandbox Code Playgroud)

那没有用。

背景:

我有一个定制开发的应用程序,目前在大约 40 台 Kubuntu 笔记本电脑上运行(还有更多计划)。每隔几个月我就必须更新应用程序。(通常这只是替换 .jar 文件,这需要 root 权限。)我还必须运行 Ubuntu 更新和其他一些小事情。我一直在手动操作,使用 Team Viewer 登录每个客户端。

我想极大地改进这个过程。我知道的两个选项是:

  1. 使用反向 ssh 隧道和 bash 脚本。我测试了这个并且它有效。但是我没有得到任何报告等,我会得到 Salt Stack。

  2. 使用 Salt Stack(或类似的)管理工具。但我需要一个非常简单的工具。我不能在大的学习曲线上投入任何时间。

我查看了 Puppet 和一堆相关工具。我发现的唯一一个对我来说看起来足够简单的(到目前为止)是 Salt Stack。但是我现在卡住了,因为我的仆从无法到达盐主,如上所述。

我很欣赏建议。

remote-access configuration-management saltstack

6
推荐指数
1
解决办法
5830
查看次数

查看 Salt Stack Minion 上的文件内容

如何使用 Salt Stack 在我的所有 Minion 上输出文件的内容?

我能找到的唯一“拉”功能是在这个 minion push commit 中,但这需要在 master 上进行配置更改。

cat saltstack

6
推荐指数
2
解决办法
5641
查看次数

如何启用与盐堆栈的交换?

如何使用盐堆栈创建和启用永久的 1GB 交换文件,该文件将在重新启动后起作用?salt.states.mount.swap不允许定义交换大小。此外,我需要定义swappiness。目前我这样做echo vm.swappiness = 10 | sudo tee -a /etc/sysctl.conf

ubuntu swap saltstack

6
推荐指数
2
解决办法
2488
查看次数

盐堆 | 如何将 cmd.run 的 shell 输出分配给 Jinja 变量?

问题

无法从cmd.run我的 Salt State分配输出。即使load_avgminion 中的 并不真正等于或超出 ,条件也始终返回 true threshold。我还在配置中包含了我尝试过的东西。

配置

# {% set load_avg = salt['cmd.run']('uptime | sed "s/.*load average: //" | cut -d " " -f2 | cut -d . -f1') %} # Not working
# {% set load_avg = salt['cmd.run']('/bin/sh -c "uptime | sed \"s/.*load average: //\" | cut -d \" \" -f2 | cut -d . -f1"') %} # Not working
# {% set load_avg = salt['cmd.run']('echo 0') %} # Not working …
Run Code Online (Sandbox Code Playgroud)

shell saltstack jinja

6
推荐指数
1
解决办法
1万
查看次数

无法在 Ubuntu 18.04 上生成没有密码的 GPG 密钥

有没有人尝试在 Ubuntu 18.04 上为加密支柱创建 GPG 密钥?

我正在使用以下命令尝试生成密钥:

gpg --gen-key --homedir /etc/salt/gpgkeys
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我会得到一组常见的问题、全名、电子邮件等。但是,当它进入密码短语屏幕时,我似乎无法在不输入密码短语的情况下通过它。我得到一个看起来像这样的 ncurses 显示:

gpg 密码

如果我只是按 Enter 键通过它,它会立即弹回。如果我点击“取消”,则会出现以下错误:

gpg: agent_genkey failed: Operation cancelled
Key generation failed: Operation cancelled
Run Code Online (Sandbox Code Playgroud)

有人遇到这个吗?

ubuntu gpg saltstack ubuntu-18.04

6
推荐指数
1
解决办法
6662
查看次数