我正在尝试使用Ansible为运行在远程节点上的应用程序升级一些Jboss服务器。通过Ansible,我可以调用jboss服务器启动脚本,该脚本必须在远程节点上升级并启动我的服务器。 问题是脚本内部将配置属性文件作为位于远程服务器上的参数(有很多这样的服务器,并且每个服务器都有不同的配置属性文件,这些文件位于远程节点服务器内,因此我无法将这些文件保持在本地实际运行升级的控制器计算机)。但是Ansible希望资源文件应该在ansible控制器上(本地)可用,并且无法进行升级。
有什么方法可以指示Ansible直接在远程节点上找到特定的资源或文件,而不是在本地找到它,然后将每个资源复制到远程节点上以供执行?
---
- name: Upgrade Server
hosts: remote_host
connection: ssh
vars:
server_version: 188
server_name: UpgradeTest
tasks:
- name: Start server
shell: "{{ jboss_home }}/bin/startJBossServer.sh {{ server_name }} >/dev/null 2>&1 &"
- name: Wait for port {{ server_http_port }} to come up
wait_for: host="localhost" port="{{ server_http_port }}" delay=15 timeout=300 state=started
- name: Test server is up and running
action: uri url="http://localhost:{{ server_http_port }}/{{ server_name }}" return_content=yes timeout=90
register: webpage
until: webpage.status == 200
retries: 25
delay: 5
文件startJBossServer.sh
包含以下命令:
nohup "${JBOSS_HOME}/bin/standalone.sh" -Djboss.server.base.dir=${JBOSS_HOME}/${i_server_name} -b=0.0.0.0 -c=@fm.config.xml@ -P=${start_server_properties_file} </dev/null > "/dev/null" 2>&1 &
如果可以看到,我们需要${start_server_properties_file}
参数中的-P
,该参数实际上在远程节点服务器上可用,但是Ansible希望本地计算机上可以使用相同的资源,因此无法运行该命令。