【问题标题】:Auto-create Rundeck jobs on startup (Rundeck in Docker container)启动时自动创建 Rundeck 作业(Docker 容器中的 Rundeck)
【发布时间】:2020-11-27 12:05:40
【问题描述】:

我正在尝试在 Docker 容器中设置 Rundeck。我想使用 Rundeck 来配置和管理我的 Docker 舰队。我发现了一个带有 ansible-plugin 的图像。到目前为止,运行简单的剧本和自动发现我的 Pi 节点都可以工作。

Docker 脚本:

echo "[INFO] prepare rundeck-home directory"
mkdir ../../target/work/home
mkdir ../../target/work/home/rundeck
mkdir ../../target/work/home/rundeck/data

echo -e "[INFO] copy host inventory to rundeck-home"
cp resources/inventory/hosts.ini ../../target/work/home/rundeck/data/inventory.ini

echo -e "[INFO] pull image"
docker pull batix/rundeck-ansible

echo -e "[INFO] start rundeck container"
docker run -d \
    --name rundeck-raspi \
    -p 4440:4440 \
    -v "/home/sebastian/work/workspace/workspace-github/raspi/target/work/home/rundeck/data:/home/rundeck/data" \
    batix/rundeck-ansible

现在我想为容器提供剧本,这些剧本应该成为在 Rundeck 中运行的作业。谁能给我一个提示,告诉我如何从外部创建 Rundeck 作业(应该调用 ansible 剧本)?通过api?

我能想到的一种方法是手动创建一次作业并将它们导出为 XML 或 YAML。当容器和​​ Rundeck 启动并运行时,我可以自动导入作业。 rundeck-home 中是否有某个文件夹或我可以放置这些文件以进行自动导入的某个文件夹?还是有 API 调用什么的?

Jenkins 是否比 Rundeck 更适合这项任务?


编辑:刚刚更改为 Dockerfile

FROM batix/rundeck-ansible:latest

COPY resources/inventory/hosts.ini /home/rundeck/data/inventory.ini
COPY resources/realms.properties /home/rundeck/etc/realms.properties
COPY resources/tokens.properties /home/rundeck/etc/tokens.properties


# import jobs
ENV RD_URL="http://localhost:4440"
ENV RD_TOKEN="yJhbGciOiJIUzI1NiIs"
ENV rd_api="36"
ENV rd_project="Test-Project"
ENV rd_job_path="/home/rundeck/data/jobs"
ENV rd_job_file="Ping_Nodes.yaml"

# copy job definitions and script
COPY resources/jobs-definitions/Ping_Nodes.yaml /home/rundeck/data/jobs/Ping_Nodes.yaml
RUN curl -kSsv --header "X-Rundeck-Auth-Token:$RD_TOKEN" \
    -F yamlBatch=@"$rd_job_path/$rd_job_file" "$RD_URL/api/$rd_api/project/$rd_project/jobs/import?fileformat=yaml&dupeOption=update"

你知道我可以如何将 curl 延迟到 rundeck 服务启动并运行之后吗?

【问题讨论】:

    标签: docker ansible rundeck


    【解决方案1】:

    没错,您可以在部署您的实例(部署您的实例并稍后导入作业的脚本)之后使用cURL(指向您的Docker实例)设计一个带有API调用的脚本,我留下一个基本示例(在本例中,您需要 XML 格式的作业定义)。

    对于 XML 作业定义格式:

    #!/bin/sh
    
    # protocol
    protocol="http"
    
    # basic rundeck info
    rdeck_host="localhost"
    rdeck_port="4440"
    rdeck_api="36"
    rdeck_token="qNcao2e75iMf1PmxYfUJaGEzuVOIW3Xz"
    
    # specific api call info
    rdeck_project="ProjectEXAMPLE"
    rdeck_xml_file="HelloWorld.xml"
    
    # api call
    curl -kSsv --header "X-Rundeck-Auth-Token:$rdeck_token" \
      -F xmlBatch=@"$rdeck_xml_file" "$protocol://$rdeck_host:$rdeck_port/api/$rdeck_api/project/$rdeck_project/jobs/import?fileformat=xml&dupeOption=update"
    

    对于 YAML 作业定义格式:

    #!/bin/sh
    
    # protocol
    protocol="http"
    
    # basic rundeck info
    rdeck_host="localhost"
    rdeck_port="4440"
    rdeck_api="36"
    rdeck_token="qNcao2e75iMf1PmxYfUJaGEzuVOIW3Xz"
    
    # specific api call info
    rdeck_project="ProjectEXAMPLE"
    rdeck_yml_file="HelloWorldYML.yaml"
    
    # api call
    curl -kSsv --header "X-Rundeck-Auth-Token:$rdeck_token" \
      -F xmlBatch=@"$rdeck_yml_file" "$protocol://$rdeck_host:$rdeck_port/api/$rdeck_api/project/$rdeck_project/jobs/import?fileformat=yaml&dupeOption=update"
    
    

    Here API 调用。

    【讨论】:

    • 听起来不错。谢谢。如果我理解正确,我需要一个 API 令牌来进行所有休息调用,对吗?有没有办法通过脚本获取令牌?我想从外面供应我的整个 rundeck。
    • 当然,在您的情况下,也许最好的方法是为图像提供静态令牌(使用在 framework.properties 文件中引用的自定义 tokens.properties 文件),这里解释了该过程:@ 987654324@
    • 谢谢...你知道 yml 文件的 curl 是什么样子吗?
    • 更新了 YAML 文件的答案 :-)
    • 太棒了......现在是(希望)最后一个问题......我将设置更改为 Dockerfile。我刚刚更新了我的问题并添加了 Dockerfile。你知道我怎样才能将 curl 延迟到 rundeck 服务启动并运行之后吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    相关资源
    最近更新 更多