如何在 SaltStack 状态文件中检查服务器上不存在包?

How to check that package is not present on server in SaltStack state file?

我正在尝试在 Ubuntu 机器上使用 saltstack 版本 2015.5.2 自动安装 Aerospike 数据库。

以下是我想自动化的手动安装过程。 (为了简单起见,我只提关键步骤)

  1. 下载 Aerospike

    wget -O aerospike.tgz http://aerospike.com/download/server/latest/artifact/ubuntu12

  2. 解压包内容

    tar -xvf aerospike.tgz

  3. 安装 Aerospike 服务器和工具

    cd aerospike-server-community-3.5.15-ubuntu12.04 ./asinstall

  4. 启动 Aerospike

    /etc/init.d/aerospike start

第 3 步执行实际安装,包括安装 2 个软件包:aerospike-server-communityaerospike-tools.

现在在 saltstack 状态文件中我想检查这两个包是否已经存在于服务器上,在这种情况下不要执行步骤 3 中的 ./asinstall 命令。

我怎样才能在我的自动化流程中包含该条件?

我建议您在继续之前阅读 requisites in salt,因为您可以在那里找到很多有趣的东西。

此外,我认为您真正需要的是:UNLESS,因为如果您的系统上已经有这些软件包,则不应安装它们。除非可以与 pkg 关键字一起使用,但对您来说 rpm -q package_name 可能同样有效。

它应该看起来像这样:

start_process:
  cmd.run:
    - name: 'write here your command'
    - unless:
      - rpm -q package1,package2

我想对答案做个小评论,但是我的名誉不允许,所以我提前为此道歉。

这一行:

- rpm -q package1,package2

实际上应该是:

- rpm -q package1 package2