是否可以运行 SaltStack 命令来查看某个进程是否正在计算机上运行,并聚合在多个 Minion 上运行该命令的结果?
本质上,我希望看到从 minion 返回的所有结果都显示在 ASCII 表之类的内容中。是否有可能有一个超级结果格式化程序,等待所有结果返回,然后应用格式?也许还有另一种方法?
我的 top.sls 看起来像这样:
base:
'*':
- python
- memcache
- nbviewer
- supervisor
- firewall
Run Code Online (Sandbox Code Playgroud)
我使用的是 SaltStack 0.17,并且 python 状态不会首先执行。这会导致后来的状态失败。
在各州内部,它们是按顺序排列的,但顶层文件却没有。
这些国家应该以什么方式组织起来?
在我们的基础设施中,我们在 minion 上设置了多个grain,包括“环境”和“组件”grain。基于此,可以有多个具有相同组件名称的 Minion,每个 Minion 位于不同的环境中。我希望能够基于多个grain来选择minions,而不必在master上定义多个节点组。
我努力了:
salt -G 'component:api,environment:prod' test.ping
Run Code Online (Sandbox Code Playgroud)
这似乎不起作用,我相当广泛地查看了他们的文档,但没有找到这种类型的小兵目标的示例。
这是否可能,如果可以,我将如何去做?
一个具体的案例导致了一个更普遍的问题:我有一个盐配方,如下所示:
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 的目录”。然后我可以指定我需要的相对路径。
这样的变量是否存在,如果存在,它是什么?
saltstack 是否有相当于 puppets versioncmp() 的函数?或者,是否有一种方法可以在 jinja+yaml 渲染的 sls 文件中获取 distutils.version 或 Packaging.version.parse 方法(如Compare version strings in Python 中提到的)?
我有一个场景,如果另一个服务已经在运行,我需要采取行动。具体来说,我想安装 snmp 监控,例如,如果 mysql 已经在运行。
我知道这样做的“正确”方法是安装 mysql 及其基于支柱数据、谷物数据或其他一些顶级文件过滤的监控。但是,在这种情况下,mysql 是在配置管理之外安装的(例如,MSP 的客户端安装了 mysql,但随后依赖托管提供商来配置监控)。
在这种情况下,最佳做法是什么?
我想到的一些解决方案:
{% set mysqlrunning = salt['service.status'](mysql_service) %}
{% if mysqlrunning %}
<rest of state file>
{% endif %}
虽然#4 看起来很简单,但恐怕它会很慢,并且在大型部署(1000 台服务器)中会使用大量系统资源。
在这种情况下,最佳做法是什么?
我在 Kubernetes 上作为 pod 运行 Jenkins 版本 2.85(亲和力设置为一个工作节点)。我通过将 XML 传递给该模块来使用Salt Jenkins 模块创建作业。
我正在使用 Jenkins Global Library 来执行作业。
我正在使用 repoURL、componet 等参数调用 GobalLibrary,
几周来一切都很顺利,现在我遇到了一个奇怪的情况,我的作业配置(config.xml)自动更新/恢复。
我的“使用参数构建”选项间歇性地消失,我只能在 Jenkins GUI 中看到“立即构建”。最初我以为有人在这样做,所以为了跟踪配置更改,我在 Jenkins 中安装了作业配置历史记录插件,但我发现很奇怪。用户名为“SYSTEM”的人正在进行/恢复更改。
这就是它的样子
我发现系统用户仅恢复作业配置更改,而不恢复管道。
我不确定幕后出了什么问题以及如何阻止或解决这个问题。这是我的生产实例,所以我更担心。
我可以在我的 Jenkins 中看到一个 SYSTEM 用户
但我无法删除该用户
我为此找到了一些相关问题,但没有答案
我不确定这个 Jenkins Bug 或某个插件是否在玩弄我的灵魂。
需要帮忙!:(
continuous-integration jenkins jenkins-plugins salt-stack jenkins-pipeline
我正在使用 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 安装了。
谢谢。
state.apply 和 state.sls 有什么区别?我什么时候应该使用 state.apply 和 state.sls?
我正在尝试编写自定义谷物.我把这段代码放进去了/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)
这有什么问题?