可以并行运行sls文件吗



我正在运行一个sls文件,该文件启动一个应该在后台保持活动的docker容器。它确实起作用,容器已经启动并运行。然而,在我杀死小黄人上的容器之前,我无法运行任何其他state.apply命令,因为我得到:

The function "state.apply" is running as PID 44455 and was started at 2020, Aug 19 18:49:13.242099 with jid 20200819184913242099

现在,我发现了以下文档:https://docs.saltstack.com/en/latest/ref/states/parallel.html这意味着它实际上是可能的。但是,当我将它添加到SLS文件中时,它不起作用。我仍然无法调用新的状态。在我杀死容器之前应用。这就是我的文件:

docker.io:
pkg.installed: []
require:
- pkgrepo: docker_prerequisites
- pkg: docker_prerequisites
service.running:
- parallel: True
- name: docker
- enable: True
- restart: True
- image: ubuntu
- port_bindings: 800:80
docker:
cmd.run:
- name: docker run -t  ubuntu

我用错命令了吗?这就是我认为它应该基于文档的方式。或者可能有不同的方法来启动一个从sls文件保持活动的docker容器?

如果你检查你的salt日志或流程经理,你会很高兴地发现这里发生了什么。该状态在命令运行的同时也在运行。问题出在cmd.run中。只要执行其中的命令,Salt就会执行cmd.run。只有在当前没有其他cmd.run运行的情况下,Salt才会超过下一个cmd.run。否则你会得到你提到的错误。

- name: docker run -t  ubuntu

您使用的命令将附加容器外壳。(-t(因此salt正在等待命令结束。在这种情况下,直到关闭容器外壳程序,命令才会结束。解决方案是,拆下容器外壳,使其作为后台进程出现,然后将其附加。

docker:
cmd.run:
- name: docker run -t -d ubuntu

只需添加-d参数,就可以分离容器外壳,容器在后台运行。通过添加此参数,您的saltstate应该结束。

现在,当容器在后台运行时,您可以使用以下命令将自己连接到容器外壳:

docker exec -it <container_id> /bin/bash

然而,以下是如何并行运行盐态:

当对你的目标爪牙应用saltstate时,试着在末尾将以下参数添加到你的salt或salt调用命令中:concurrent=true

请参阅此文档并搜索并发:https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.state.html

这篇文章描述了这个问题。然而,您应该小心,因为同时运行同一个salt模块两次可能会很危险。所以尽量避免这种情况。

最新更新