spring-boot - Ansible - 从战争档案中取消归档细节文件
问题描述
我想从战争档案的目录中提取两个文件。
这两个文件存在于/WEB-INF/classes/
我努力了:
- name: create application.properties in /tmp
unarchive:
src: "/application/webapps/application.war"
dest: "/tmp"
remote_src: yes
extra_opts:
- -j
- WEB-INF/classes/application.properties
- WEB-INF/classes/logback.xml
错误 :
“错误”:“解压缩:找不到或打开 /WEB-INF/classes/application.properties”
但这当然行不通。任何想法?
解决方案
真的,看起来 Ansibleunarchive
模块并不适用于这个特定的用例。
并且有一个功能请求来实际实现这个确切的功能。
长话短说:extra_opts
用于选项,但似乎不适用于额外参数。
您想要做的事情似乎在这个 commit之前是可能的,事实上,在这个 commit 之前,Ansible 会做:
cmd = [ self.cmd_path, '-o', self.src ]
if self.opts:
cmd.extend(self.opts)
所以你将以命令结束:
unzip -o /application/webapps/application.war -j WEB-INF/classes/application.properties WEB-INF/classes/logback.xml
这应该在您的用例中有效。
但是在这次提交之后,Ansible 的代码最终变成了
cmd = [ self.cmd_path, '-o' ]
if self.opts:
cmd.extend(self.opts)
cmd.append(self.src)
因此,它会生成这个错误 unzip
的命令:
unzip -o -j WEB-INF/classes/application.properties WEB-INF/classes/logback.xml /application/webapps/application.war
现在您可以解决这个错误,但这会产生unzip
错误,我们将不得不把这个错误扫到地毯下,所以这不应该是您选择的解决方案。
但这是我进入的思路,以及我为拥有一个工作手册所做的工作:我发现了命令 using 的问题ansible-playbook play.yml -vvvv
,这让我得到了unzip
Ansible 发出的完整命令——为简洁起见,以下错误已被减少:
fatal: [localhost]: FAILED! => {
"changed": false,
"dest": "/tmp/out",
"extract_results": {
"cmd": [
"/usr/bin/unzip",
"-o",
"-j",
"WEB-INF/classes/application.properties",
"WEB-INF/classes/logback.xml",
"test.war",
"-d",
"/tmp/out"
]
}
}
基于此,我通过在参数中复制存档来欺骗,因此它正好位于命令中的选项之后。extra_opts
src
-j
这样做的缺点是现在正在生成此命令:
unzip -o -j test.war WEB-INF/classes/application.properties WEB-INF/classes/logback.xml test.war
这意味着它现在正试图在自身内部查找文件test.war,因此它会因此出错。
这是产生的错误:
"err": "注意:文件名不匹配:test.war\n"
所以再一次,我使用了一个技巧来failed_when
忽略这个错误,知道它会给我带来的错误。
所以给出:
$ tree ./WEB-INF
./WEB-INF
└── classes
├── application.properties
├── ignore-me.txt
└── logback.xml
1 directory, 3 files
$ tree /tmp
/tmp
0 directories, 0 files
和剧本:
- hosts: all
gather_facts: no
tasks:
- shell: /usr/lib/jvm/java-1.8-openjdk/bin/jar -cf test.war *
- file:
path: /tmp/out
state: directory
- unarchive:
src: test.war
dest: /tmp/out
remote_src: yes
extra_opts:
- -j
- test.war
- WEB-INF/classes/application.properties
- WEB-INF/classes/logback.xml
register: extract
failed_when: "extract.extract_results.rc != 0 and extract.extract_results.err != 'caution: filename not matched: ' ~ extract.src ~ '\n'"
这产生了回顾:
PLAY [all] **********************************************************************************************************************************************
TASK [Create test.war file] *****************************************************************************************************************************
changed: [localhost]
TASK [file] *********************************************************************************************************************************************
changed: [localhost]
TASK [Create test.war file] *****************************************************************************************************************************
ok: [localhost]
PLAY RECAP **********************************************************************************************************************************************
localhost : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
还有那些文件:
/ansible # tree /tmp/out
/tmp/out
├── application.properties
└── logback.xml
0 directories, 2 files
推荐阅读
- c++ - 如何在 C++ 中检查确切的类型信息(带有 cv-ref-pointer 特征)?
- c# - 如何使用 MVP 根据用户输入填充组合框?
- c++ - eglCreateImage 与 eglCreateImageKHR
- android - 如何使启动图标充当文件夹?
- qiskit - 如何在 Qiskit 中制作迭代量子电路?
- c# - 如何从 Xamarin.Forms 中的流中获取图像的路径
- html - 复制 Accordion 以定位不同的 div
- ios - 如何快速按月对日期数组进行分组?
- android - 无论如何使用android应用程序登录twitchtv并获取令牌?
- java - 如何使用Java在表单中搜索多个字段?