1

rundeck和ansible都有管理hosts的能力,但是放在一起工作的时候,我试过把hosts从一种格式转换成另一种格式,这样hosts可以同时被rundeck和ansible管理,但是不方便要完成这项工作,管理主机的最佳方式是什么?

4

2 回答 2

1

似乎有人已经做到了:https ://github.com/srknc/rundeck_ansible_sync

于 2015-05-29T06:43:14.667 回答
0

使 rundeck 主机信息保持最新的最佳方式。从 rundeck 创建 ansible 主机文件非常简单。因此,在执行之前,您调用一个 bash 脚本,该脚本为 ansible 创建节点列表,在这种情况下,您可以使用 rundeck 过滤器和简单的作业,即使您可以直接使用 rundeck 而不使用 ansible。

#!/bin/bash
PID=$$
nodeFilter=${RD_OPTION_NODEFILTER:-}
projectName=${RD_JOB_PROJECT:-}
if [ -f /var/rundeck/tools/bin/dispatch ]; then
    /var/rundeck/tools/bin/dispatch -v -p $projectName --filter "${nodeFilter}" >/tmp/filtered.node.$PID
else
    /usr/bin/dispatch -v -p $projectName --filter "${nodeFilter}" >/tmp/filtered.node.$PID
fi
nodes=( $( grep "hostname" /tmp/filtered.node.$PID | cut -f2 -d ":" ) )
echo "[all]" >/tmp/ansible.hosts.$PID
for (( CNTR=0; CNTR<${#nodes[@]}; CNTR+=1 )); do
    if [ "${nodes[$CNTR]}" != "$HOSTNAME" ] && [ "${nodes[$CNTR]}" != "$HOSTNAME.example.com" ]; then
        echo "${nodes[$CNTR]}" >> /tmp/ansible.hosts.$PID
    fi
done
echo "DEBUG: all ansible host file"
cat /tmp/ansible.hosts.$PID
cd /opt/ansible; ansible-playbook -i /tmp/ansible.hosts.$PID /opt/ansible/playbook.yml

存储角色和剧本的 ansible 主页 /opt/ansible 在 rundeck 作业中,您必须指定可用于过滤节点的选项 NodeFilter,例如 tags:app 或 tags:web 等。

于 2016-06-02T16:18:09.180 回答