regex - 如何将正则表达式搜索值添加到 Ansible 中的变量列表?
问题描述
我的要求是读取 tnsnames.ora 文件并将其模式名称添加到变量列表中。还需要将它们添加到模板中。
我能够从 tnsnames.ora 文件(匹配)中匹配所需的模式名称。但是在ansible中,我不确定如何将所有匹配的单词存储在变量列表中。感谢您帮助找到解决方案。
- name: Lookup "{{ ansible_env.TNS_ADMIN }}/tnsnames.ora"
slurp:
src: "{{ ansible_env.TNS_ADMIN}}/tnsnames.ora"
register: contents
- set_fact: matches="{{ contents['content'] | b64decode|regex_search(reg_pattern) |list|join("")}}"
- debug: msg="{{ item }}"
with_items:
- "{{ matches }}"
下面是正则表达式模式,它帮助我只获取模式名称。
reg_pattern: '^([^#()\W ][a-zA-Z.]*(?:[.][a-zA-Z]*\s?=)?)((\d*[a-zA-Z]*|(\0*)))'
下面是我的 tnsnames.ora 文件。
abcdsvsurv = ( DESCRIPTION =
(FAILOVER = ON)
(ENABLE=BROKEN)
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.43.165)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = survdb)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 30)
(DELAY = 5)
)
)
)
abcdsvsg = ( DESCRIPTION =
(FAILOVER = ON)
(ENABLE=BROKEN)
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.43.165)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = survdb)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 20)
(DELAY = 2)
)
)
)
abcdsvser = ( DESCRIPTION =
(FAILOVER = ON)
(ENABLE=BROKEN)
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.43.165)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = survdb)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 20)
(DELAY = 2)
)
)
)
abcdsvmtech = ( DESCRIPTION =
(FAILOVER = ON)
(ENABLE=BROKEN)
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.43.165)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = survdb)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 20)
(DELAY = 2)
)
)
)
abcdsvyaan = ( DESCRIPTION =
(FAILOVER = ON)
(ENABLE=BROKEN)
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.43.165)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = survdb)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 20)
(DELAY = 2)
)
)
)
abcdsvmrs = ( DESCRIPTION =
(FAILOVER = ON)
(ENABLE=BROKEN)
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.43.165)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = survdb)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 20)
(DELAY = 2)
)
)
)
fltsurv03 = ( DESCRIPTION =
(FAILOVER = ON)
(ENABLE=BROKEN)
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.43.165)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = survdb)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 30)
(DELAY = 5)
)
)
)
fltsurvsg03 = ( DESCRIPTION =
(FAILOVER = ON)
(ENABLE=BROKEN)
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.43.165)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = survdb)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 20)
(DELAY = 2)
)
)
)
fltsurvser03 = ( DESCRIPTION =
(FAILOVER = ON)
(ENABLE=BROKEN)
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.43.165)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = survdb)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 20)
(DELAY = 2)
)
)
)
fltsurvmtech03 = ( DESCRIPTION =
(FAILOVER = ON)
(ENABLE=BROKEN)
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.43.165)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = survdb)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 20)
(DELAY = 2)
)
)
)
fltsurvyaan03 = ( DESCRIPTION =
(FAILOVER = ON)
(ENABLE=BROKEN)
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.43.165)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = survdb)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 20)
(DELAY = 2)
)
)
)
fltsurv03surv = ( DESCRIPTION =
(FAILOVER = ON)
(ENABLE=BROKEN)
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.43.165)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = survdb)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 30)
(DELAY = 5)
)
)
)
fltsurvmrs03 = ( DESCRIPTION =
(FAILOVER = ON)
(ENABLE=BROKEN)
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.43.165)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = survdb)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 20)
(DELAY = 2)
)
)
)
解决方案
使用此任务:
- set_fact:
matches: "{{ contents['content'] | b64decode | regex_findall(reg_pattern, multiline=True) }}"
使用该正则表达式:
reg_pattern: '^([^#()\W ][0-9a-zA-Z.]*(?:[.][a-zA-Z]*\s?=)?)'
推荐阅读
- c# - 将 DataGridComboBoxColumn 绑定到类中声明的枚举
- c# - 点击时如何获取用户控件的数据
- google-cloud-platform - 在 GCP 上部署分布式队列机制
- google-cloud-platform - 谷歌云 Bigquery:Redshift 数据传输服务权限问题
- javascript - io.on 连接未在 socket.io 中触发
- asp.net-mvc - ASP.NET MVC 添加迁移“项目无法构建”
- php - 为什么迁移数据库在 laravel 中不起作用?
- python - 从 URL 上传图像而不保存它们
- php - 如何限制 foreach 循环
- xamarin - 将绑定值设置为 Xamarin Forms 中另一个控件值的行为参数