ansible - 使用 Ansible 按第二个列表的特定顺序映射 Debian 软件包列表
问题描述
我正在尝试将文件列表映射到文件名列表。目标是以特定顺序安装 Debian 文件(基于名称列表)。我可以使用 shell 命令检索文件列表并将它们注册到列表中。目标是按照我的预定义名称列表的顺序生成文件名列表。然后按该顺序安装它们。
ms2Num.stdout_lines 是来自 shell 命令的文件列表:
# use List -1 to find the file names for the deb files.| grep
- name: Find the needed deb files
shell: "ls -1 {{ DestDir | join }}/ms2install/ms2install/ | grep {{ ms2Num.stdout_lines[0] | join }}"
register: ProviderDebList
此任务生成一个列表ProviderDebList.stdout_lines
。这是文件列表:
"stdout_lines": [
"ms2-apache_1.6.1.8~20160324_amd64.deb",
"ms2-ctps_1.6.1.8~20160324_amd64.deb",
"ms2-desert_1.6.1.8~20160324_amd64.deb",
"ms2-provider_1.6.1.8~20160324_amd64.deb",
"ms2-w3gui_1.6.1.8+1~20160324_amd64.deb"
]
映射任务
- name: Display files in order from MS2-list
debug:
msg: "File name: {{ ms2Num.stdout_lines | regex_search( item | string ) | string }}"
loop: "{{ MS2Packages }}"
运行我得到的映射任务:但我得到一个错误:
fatal: [10.0.2.25]: FAILED! => {
"msg": "Unexpected templating type error occurred on (File name: {{ ms2Num.stdout_lines | regex_search( item | string ) | string }}): expected string or buffer"
我对 Ansible 过滤器的了解相当基础,因此这些错误仍然很难解析。我知道我错过了什么,但是什么?
目标:
目标是按照MS2Packages
. 我想获取我的名单并映射文件名对其进行排序。
以下是安装顺序的基础列表:
MS2Packages:
- ms2-desert
- ms2-ctps
- ms2-apache
- ms2-w3gui
- ms2-provider
]
结果列表应为:
"stdout_lines": [
"ms2-desert_1.6.1.8~20160324_amd64.deb",
"ms2-ctps_1.6.1.8~20160324_amd64.deb",
"ms2-apache_1.6.1.8~20160324_amd64.deb",
"ms2-w3gui_1.6.1.8+1~20160324_amd64.deb"
"ms2-provider_1.6.1.8~20160324_amd64.deb",
]
后面的一些文件使用较早的文件作为依赖项,因此我需要按特定顺序安装它们。
工作任务:(已解决)
# print the files names in order of the deb list
- name: Create the list files in order from MS2-list
set_fact:
OrderProviderList: "{{ OrderProviderList | default([]) + ProviderDebList.stdout_lines | map('regex_search', '.*' + order + '.*') | select('string') | list }}"
loop: "{{ MS2Packages }}"
loop_control:
loop_var: order
我现在可以遍历这个列表并安装所需的包。
解决方案
下面的任务
- set_fact:
my_pkg: "{{ my_pkg|default([]) +
ms2Num.stdout_lines|
select('search', item)|
list }}"
loop: "{{ MS2Packages }}"
- debug:
var: my_pkg
给
"my_pkg": [
"ms2-desert_1.6.1.8~20160324_amd64.deb",
"ms2-ctps_1.6.1.8~20160324_amd64.deb",
"ms2-apache_1.6.1.8~20160324_amd64.deb",
"ms2-w3gui_1.6.1.8+1~20160324_amd64.deb",
"ms2-provider_1.6.1.8~20160324_amd64.deb"
]
推荐阅读
- mongodb - UnhandledPromiseRejectionWarning:MongooseError:操作“users.insertOne()”缓冲在 10000 毫秒后超时
- c# - Itext7 System.NullReferenceException:'对象引用未设置为对象的实例
- java - 凤凰用java更新语句
- rust - 从 Rust 中的rendezvous_hash::RendezvousNodes 中删除一个节点
- reactjs - 从 api 调用返回信息 - axios,react hook
- python - 如何使用 BeaultifulSoup 从 SVG 中提取文本?
- python - 取消堆叠一列并创建新的交互列
- sql - 优化postgresql请求
- c# - 如何解决 Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectProtocolInvalidNonceException: IDX21323: RequireNonce is '[PII is hidden]'?
- lightningchart - 在 LightningChartJS 中,在 Chart3D 中如何在捏触控板时降低缩放速度