Ansible:在模块 "copy" 中使用正则表达式
Ansible : Using regular expression in the module "copy"
上下文
我正在尝试构建一个 continuous-integration
平台,在 Ansible
playbook
我使用 maven-dependency-plugin:get
从 Nexus
下载一个工件在 master 上,它将使用 Ansible
模块 copy
部署在远程服务器上。
为了制作一个轻量级和通用的剧本,我定义了一个名为 app_version
的变量,如果它被定义,我下载给定的版本,如果没有我下载 Latest 版本来自 Nexus
存储库。工件下载到给定目录 (/tmp/delivery/
)。在我的 Ansible
任务下方:
- hosts: local
tasks:
- name: "Downloading the war"
shell: >
mvn org.apache.maven.plugins:maven-dependency-plugin:2.10:get -DgroupId=App-DartifactId=App-Dversion={{ app_version if app_version is defined else 'LATEST' }} -Dpackaging=war -DrepositoryId=my-nexus -Ddest=/tmp/delivery/
我的问题
为了确保剧本的通用性,我需要在 Ansible
模块 copy
中编写一个正则表达式来选择具有模式 app*.war
的工件,但它看起来像模块'提供这种能力。在我的复制任务下方:
- hosts: agir
tasks:
- name: "Copying the war"
copy: src=/tmp/delivery/app*.war dest=/folder/app.war owner=user group=group mode=0755
如何在模块 copy
中使用正则表达式?
我正在使用 Ansible 1.8
您可以使用:
- name: "Copying the war"
copy: src={{item}} dest=/folder/app.war owner=user group=group mode=0755
with_fileglob: /tmp/delivery/app*.war
但是如果有多个文件呢?
我建议注册之前的 shell
命令的 stdout
并在可能的情况下从那里获取文件名。
上下文
我正在尝试构建一个 continuous-integration
平台,在 Ansible
playbook
我使用 maven-dependency-plugin:get
从 Nexus
下载一个工件在 master 上,它将使用 Ansible
模块 copy
部署在远程服务器上。
为了制作一个轻量级和通用的剧本,我定义了一个名为 app_version
的变量,如果它被定义,我下载给定的版本,如果没有我下载 Latest 版本来自 Nexus
存储库。工件下载到给定目录 (/tmp/delivery/
)。在我的 Ansible
任务下方:
- hosts: local
tasks:
- name: "Downloading the war"
shell: >
mvn org.apache.maven.plugins:maven-dependency-plugin:2.10:get -DgroupId=App-DartifactId=App-Dversion={{ app_version if app_version is defined else 'LATEST' }} -Dpackaging=war -DrepositoryId=my-nexus -Ddest=/tmp/delivery/
我的问题
为了确保剧本的通用性,我需要在 Ansible
模块 copy
中编写一个正则表达式来选择具有模式 app*.war
的工件,但它看起来像模块'提供这种能力。在我的复制任务下方:
- hosts: agir
tasks:
- name: "Copying the war"
copy: src=/tmp/delivery/app*.war dest=/folder/app.war owner=user group=group mode=0755
如何在模块 copy
中使用正则表达式?
我正在使用 Ansible 1.8
您可以使用:
- name: "Copying the war"
copy: src={{item}} dest=/folder/app.war owner=user group=group mode=0755
with_fileglob: /tmp/delivery/app*.war
但是如果有多个文件呢?
我建议注册之前的 shell
命令的 stdout
并在可能的情况下从那里获取文件名。