标签: salt-stack

如何聚合 SaltStack 命令结果?

是否可以运行 SaltStack 命令来查看某个进程是否正在计算机上运行,​​并聚合在多个 Minion 上运行该命令的结果?

本质上,我希望看到从 minion 返回的所有结果都显示在 ASCII 表之类的内容中。是否有可能有一个超级结果格式化程序,等待所有结果返回,然后应用格式?也许还有另一种方法?

salt-stack

5
推荐指数
1
解决办法
3346
查看次数

top.sls 中的状态按什么顺序执行?

我的 top.sls 看起来像这样:

base:
  '*':
    - python
    - memcache
    - nbviewer
    - supervisor
    - firewall
Run Code Online (Sandbox Code Playgroud)

我使用的是 SaltStack 0.17,并且 python 状态不会首先执行。这会导致后来的状态失败。

在各州内部,它们是按顺序排列的,但顶层文件却没有。

这些国家应该以什么方式组织起来?

salt-stack

5
推荐指数
1
解决办法
2548
查看次数

使用多种颗粒瞄准盐奴

在我们的基础设施中,我们在 minion 上设置了多个grain,包括“环境”和“组件”grain。基于此,可以有多个具有相同组件名称的 Minion,每个 Minion 位于不同的环境中。我希望能够基于多个grain来选择minions,而不必在master上定义多个节点组。

我努力了:

salt -G 'component:api,environment:prod' test.ping
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用,我相当广泛地查看了他们的文档,但没有找到这种类型的小兵目标的示例。

这是否可能,如果可以,我将如何去做?

automation salt-stack devops

5
推荐指数
1
解决办法
2400
查看次数

如何获取包含当前 sls 文件或模板的目录路径?

一个具体的案例导致了一个更普遍的问题:我有一个盐配方,如下所示:

formula/
    init.sls
    some_other_state.sls
    defaults.yaml
Run Code Online (Sandbox Code Playgroud)

作为两个 sls 行为的一部分,我希望它们将 defaults.yaml 加载到字典中。我可以在其中任何一个中这样做:

{%- import_yaml formula/defaults.yaml as defaults %}
Run Code Online (Sandbox Code Playgroud)

...但是这会硬编码公式相对于盐树基础的位置,并且如果树被重组并且公式移动到(比如说)嵌套目录,则会破坏。

我尝试了这个:

{%- import_yaml (slspath + "/defaults.yaml") as defaults %}
Run Code Online (Sandbox Code Playgroud)

这适用于 init.sls,但不适用于 some_other_state.sls;原因是slspath前者扩展为包含目录,但后者扩展为完整路径。

我真正想要的是 slspath 的某种等价物,它总是扩展为“包含当前运行的 sls 的目录”。然后我可以指定我需要的相对路径。

这样的变量是否存在,如果存在,它是什么?

salt-stack

5
推荐指数
1
解决办法
2889
查看次数

如何比较 salt sls 文件中的版本字符串

saltstack 是否有相当于 puppets versioncmp() 的函数?或者,是否有一种方法可以在 jinja+yaml 渲染的 sls 文件中获取 distutils.version 或 Packaging.version.parse 方法(如Compare version strings in Python 中提到的)?

salt-stack

5
推荐指数
1
解决办法
2941
查看次数

条件盐状态

我有一个场景,如果另一个服务已经在运行,我需要采取行动。具体来说,我想安装 snmp 监控,例如,如果 mysql 已经在运行。

我知道这样做的“正确”方法是安装 mysql 及其基于支柱数据、谷物数据或其他一些顶级文件过滤的监控。但是,在这种情况下,mysql 是在配置管理之外安装的(例如,MSP 的客户端安装了 mysql,但随后依赖托管提供商来配置监控)。

在这种情况下,最佳做法是什么?

我想到的一些解决方案:

  1. 创建一个列出正在运行的服务的自定义粒度。
  2. 使用除非/仅当(以及不同操作系统发行版的映射文件)
  3. 一个 Beacon(表明服务正在运行)和一个反应器(用于部署)
  4. 在状态文件中调用jinja中的service.status执行模块,如:

{% set mysqlrunning = salt['service.status'](mysql_service) %} {% if mysqlrunning %} <rest of state file> {% endif %}

虽然#4 看起来很简单,但恐怕它会很慢,并且在大型部署(1000 台服务器)中会使用大量系统资源。

在这种情况下,最佳做法是什么?

salt-stack

5
推荐指数
0
解决办法
1716
查看次数

Jenkins 配置因系统用户异常而恢复

我在 Kubernetes 上作为 pod 运行 Jenkins 版本 2.85(亲和力设置为一个工作节点)。我通过将 XML 传递给该模块来使用Salt Jenkins 模块创建作业。

我正在使用 Jenkins Global Library 来执行作业。

我的工作配置如下所示在此输入图像描述 在此输入图像描述在此输入图像描述

我正在使用 repoURL、componet 等参数调用 GobalLibrary,

几周来一切都很顺利,现在我遇到了一个奇怪的情况,我的作业配置(config.xml)自动更新/恢复。

我的“使用参数构建”选项间歇性地消失,我只能在 Jenkins GUI 中看到“立即构建”。最初我以为有人在这样做,所以为了跟踪配置更改,我在 Jenkins 中安装了作业配置历史记录插件,但我发现很奇怪。用户名为“SYSTEM”的人正在进行/恢复更改。

这就是它的样子

在此输入图像描述

我发现系统用户仅恢复作业配置更改,而不恢复管道。

在此输入图像描述 在此输入图像描述

我不确定幕后出了什么问题以及如何阻止或解决这个问题。这是我的生产实例,所以我更担心。

我可以在我的 Jenkins 中看到一个 SYSTEM 用户

在此输入图像描述

但我无法删除该用户

在此输入图像描述

我为此找到了一些相关问题,但没有答案

Jenkins 上的系统用户更新作业配置

Jenkins 系统用户删除自定义工作区配置

我不确定这个 Jenkins Bug 或某个插件是否在玩弄我的灵魂。

需要帮忙!:(

continuous-integration jenkins jenkins-plugins salt-stack jenkins-pipeline

5
推荐指数
1
解决办法
3760
查看次数

Gunicorn:proc_name 不工作

我正在使用 django 和 nginx 运行 Gunicorn 并使用 salt 进行部署。

我想更改gunicorn的过程名称,所以我用python制作了一个配置文件

gunicorn_config.py

bind = ...
workers = ...
proc_name = 'Name'
daemon = True
...
Run Code Online (Sandbox Code Playgroud)

在盐状态文件中,

gunicorn_config_file:
  file.managed:
   - name: /etc/gunicorn_config.py
   - source: salt://.../files/gunicorn_config.py
   - template: jinja
Run Code Online (Sandbox Code Playgroud)

并运行它

start_gunicorn:
  cmd.run:
    - name: '{{venv}}/gunicorn -c /etc/gunicorn_conig.py myProject.wsgi'
    - cwd: /path/to/django/project
Run Code Online (Sandbox Code Playgroud)

minion返回全部成功,但gunicorn的进程名称仍然是 gunicorn: master并且gunicorn: worker

其他配置(例如工人)运行良好,但 proc_name 则不然。如何正确更改 proc_name?我setproctitle也在 venv 中用 pip 安装了。

谢谢。

gunicorn salt-stack

5
推荐指数
0
解决办法
711
查看次数

state.sls 和 state.apply 有什么区别?

state.apply 和 state.sls 有什么区别?我什么时候应该使用 state.apply 和 state.sls?

python salt salt-stack

5
推荐指数
1
解决办法
1519
查看次数

盐定制谷物

我正在尝试编写自定义谷物.我把这段代码放进去了/etc/salt/grains

#!/usr/bin/env python
def function():
    grains = {}
    grains['test'] = "test"
    return grains
Run Code Online (Sandbox Code Playgroud)

并测试它我创建了这个脚本:

import salt.config
import salt.loader
__opts__ = salt.config.minion_config('/etc/salt/minion')
__grains__ = salt.loader.grains(__opts__)
test = __grains__['test']
print test
Run Code Online (Sandbox Code Playgroud)

我有这个错误:

dirs = __grains__['test']
KeyError: 'test'
Run Code Online (Sandbox Code Playgroud)

这有什么问题?

python salt-stack

4
推荐指数
1
解决办法
6207
查看次数