标签: salt-stack

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
查看次数

使用带盐状态的 ssh 代理转发

所以我的流浪文件中有以下内容:

config.ssh.forward_agent = true
Run Code Online (Sandbox Code Playgroud)

以及以下盐状态:

git+ssh://git@bitbucket.org/xxx/repo.git:
  git.latest:
    - rev: rest
    - target: /home/vagrant/src
Run Code Online (Sandbox Code Playgroud)

但是,当执行此盐状态时,我收到公钥错误。

令人讨厌的是,如果我git+ssh://git@bitbucket.org/xxx/repo.git从我的实例中手动执行 git clone ,一切正常。有任何想法吗?

vagrant salt-stack

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

Saltstack - 预览 Highstate

有没有办法预览将在state.highstate. 我知道你可以运行state.show_highstate,但这不是我要找的输出。例如,里面/path/to/recurse/dir/foo.txtbar.txt在我的SLS文件我有

/path/to/recurse/dir/:
  file.recurse:
    - source: salt://dir/
Run Code Online (Sandbox Code Playgroud)

我想运行state.preview_highstate,它会向我显示foo.txt和的内容bar.txt。有谁知道如何在不跑步的情况下解决这个问题state.highstate

salt-stack

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

使用多种颗粒瞄准盐奴

在我们的基础设施中,我们在 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
查看次数

如何在 Salt 中获取上次运行 `state.highstate` 的状态和日志?

我应用状态使用:

$sudo salt 'api-*' state.highstate -l debug -v
Run Code Online (Sandbox Code Playgroud)

有些状态失败了,我向下滚动,修复了一些,现在我无法向上滚动(我的终端不保存完整会话)来查看标准输出。

现在我不想再跑高状态了。我检查过jobs.lookup_jid,但它没有显示任何有用的东西。

python salt-stack

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

如何获取包含当前 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
查看次数

如何检查 AWS S3 同步是否有任何更改?

我在 Amazon S3 存储桶中有一些文件,我正在使用 SaltStack 将所有这些文件复制到 Minion 上的目录中。

不幸的是,SaltStack 没有能力从 S3 复制整个目录(还),所以我求助于使用awscli。它几乎完美地工作。

它可以同步 S3 存储桶和我的目录(万岁!),它甚至有一个--dryrun标志(甚至更好!),但不幸的是,我无法想出一种方法让它做一些我可以用 Salt 捕获的事情,说有没有变化。

我有一个如下所示的 Salt 状态:

copy-my-dir:
  file.directory:
    - name: /path/to/my/dir
    - makedirs: True
  cmd.run:
    - name: "aws s3 sync s3://my-bucket/ /path/to/my/dir"
    - unless: "What goes here?"
Run Code Online (Sandbox Code Playgroud)

我试过--dry-run“这里有什么?” 但是无论是否有要同步的文件,aws s3 sync 都会返回 0。

我试过了,aws --output json s3 sync --dry-run但这甚至没有做任何有用的事情(即它不输出我可以判断的 JSON,至少在通过salt 'minion' cmd.run "aws...".

那么我如何判断我的 Amazon S3 存储桶和我的目录之间是否存在任何差异,以便我可以有条件地执行 SaltStack 状态?

command-line amazon-s3 amazon-web-services salt-stack

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

如何比较 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
查看次数