我正在开发一个Ansible脚本来build立一个新的TeamCity构build代理,而且我不知道如何实现这个过程的一部分。 安装TeamCity构build代理之后,它必须由pipe理员授权,pipe理员login到构build服务器并单击构build代理旁边的“授权”button。 这将创build一个授权令牌,然后将其保存在代理的buildAgent.properties文件中。 我想要做的是提取该令牌,并将其保存在该构build代理的主机variables中,这样如果我重新运行Ansible脚本,正确的授权令牌将被复制,代理将不需要重新授权。
我可以很容易地手动做到这一点:在pipe理员login并授权代理之后,我可以将授权密钥从代理的buildAgent.properties文件中复制出来,放在host_vars/(agent name)/buildagent.yml ,然后完成。 但有没有办法自动做到这一点? 任何手动步骤都是必须logging的步骤,有人可能会忘记这一步 – 这就是为什么我们首先使用Ansible。
我发现set_fact模块set_fact看起来很有希望,但是它说:“在Ansible运行期间,这些variables将在两次播放之间存活,但即使使用事实caching, 也不会在执行时保存 。 (强调我的)。 事实caching和注册variables也似乎不是我所期待的。
也许我可以有Ansible的任务,重写host_vars/(agent name)/buildagent.yml Ansible主机 – 我想这可以工作。 但是,这似乎相当kludgy。 是否有一个“官方”的方式来设置未来的剧本运行主机variables,我只是没有find? 或者我只是要在我的过程中接受一个手动步骤?
您可以随时从live文件读取授权令牌,如果没有设置则会失败。
- name: Read authorization token command: "grep authorizationToken .../buildAgent.properties | cut -f 2 -d =" register: result failed_when: result.stdout == "" - name: Set authorization token fact set_fact: authorization_token="{{result.stdout}}"