我的 top.sls 看起来像这样:
base:
'*':
- python
- memcache
- nbviewer
- supervisor
- firewall
Run Code Online (Sandbox Code Playgroud)
我使用的是 SaltStack 0.17,并且 python 状态不会首先执行。这会导致后来的状态失败。
在各州内部,它们是按顺序排列的,但顶层文件却没有。
这些国家应该以什么方式组织起来?
所以我的流浪文件中有以下内容:
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 ,一切正常。有任何想法吗?
有没有办法预览将在state.highstate. 我知道你可以运行state.show_highstate,但这不是我要找的输出。例如,里面/path/to/recurse/dir/我foo.txt和bar.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?
在我们的基础设施中,我们在 minion 上设置了多个grain,包括“环境”和“组件”grain。基于此,可以有多个具有相同组件名称的 Minion,每个 Minion 位于不同的环境中。我希望能够基于多个grain来选择minions,而不必在master上定义多个节点组。
我努力了:
salt -G 'component:api,environment:prod' test.ping
Run Code Online (Sandbox Code Playgroud)
这似乎不起作用,我相当广泛地查看了他们的文档,但没有找到这种类型的小兵目标的示例。
这是否可能,如果可以,我将如何去做?
我应用状态使用:
$sudo salt 'api-*' state.highstate -l debug -v
Run Code Online (Sandbox Code Playgroud)
有些状态失败了,我向下滚动,修复了一些,现在我无法向上滚动(我的终端不保存完整会话)来查看标准输出。
现在我不想再跑高状态了。我检查过jobs.lookup_jid,但它没有显示任何有用的东西。
一个具体的案例导致了一个更普遍的问题:我有一个盐配方,如下所示:
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 的目录”。然后我可以指定我需要的相对路径。
这样的变量是否存在,如果存在,它是什么?
我在 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 状态?
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
salt-stack ×10
amazon-s3 ×1
automation ×1
command-line ×1
devops ×1
jenkins ×1
python ×1
vagrant ×1