如何使用人偶螺栓计划正确连接步骤YAML格式

问题描述

我正在创建一个虚拟机计划,将docker安装在4台主机上,在第一台主机上启用集群,然后将其他3台主机添加到该集群中。

我的问题是我不知道如何将Yaml的这一部分保存到变量中。

steps:
    - command: docker swarm init
      targets: $firstmanagementnode

我需要这样做,因为输出包含一个密钥,以允许其他主机稍后在计划中加入集群

下面的Puppet文档中有一个示例,但老实说,我可以做个例子

steps:
  - name: hostnames
    command: hostname -f
    targets: $targets
  - task: echo
    parameters:
      message: $hostnames.map |$hostname_result| { $hostname_result['stdout'] }.join(',')

我可以使用下面的yaml和任务解决我的问题:

YAML:

  - name: initswarm
    command: docker swarm init
    targets: $firstmanagementnode
  - name: managertoken
    command: docker swarm join-token manager
    targets: $firstmanagementnode
  - name: managersjoin
    task: docker_swarm::joinswarm
    targets: $managernodes
    parameters:
      masternode: $managertoken.map |$token_result| { $token_result['stdout'] }.join(',')
    description: configure additional manager nodes

任务:

#!/bin/bash

$(echo $PT_masternode | grep -o 'docker.*2377')

任务json:

{
    "description": "joins a docker swarm","input_method": "both","parameters": {
        "masternode": {
            "description": "The first master node","type": "String"
        }
    }
}

解决方法

您是否尝试过伪造https://forge.puppet.com/puppetlabs/docker上的Docker模块。

您要执行的许多工作已经作为独立任务完成,您可能只需要将其包装到计划中即可。

https://github.com/puppetlabs/puppetlabs-docker/tree/main/tasks处查看任务。.rb文件是代码,.json实际上是手册页,如果您将此模块拉入Bolt服务器,则可以运行bolt task show docker::swarm_join以获得更多信息。

此处的任务将初始化swarm,还有另一个名为swarm_token的任务,该任务将返回您的令牌以在计划中使用并传递到swarm_join。

没有安装docker的任务,但是您在计划中要做的就是在计划开始时添加include docker