正则表达式之前的Ansible Insert XML

以下是可与javascript / python一起使用的正则表达式示例

<!--.*[\n\t].*LAST FILTER IN THE DEFINED CHAIN.*[\n\t].*-->

针对此文档:

<filter>
    <filter-name>filter-plugin-dispatcher-before-dispatch-error</filter-name>
    <filter-class>com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter</filter-class>
    <init-param>
        <param-name>location</param-name>
        <param-value>before-dispatch</param-value>
    </init-param>
    <init-param>
        <param-name>dispatcher</param-name>
        <param-value>ERROR</param-value>
    </init-param>
</filter>
<filter>
    <filter-name>OktaLoginFilter<`enter code here`/filter-name>
    <filter-class>com.atlassian.jira.authenticator.okta.OktaLoginFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>OktaLoginFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>
<!-- =====================================================
     THIS MUST BE THE LAST FILTER IN THE DEFINED CHAIN
     ===================================================== -->
<filter>
    <filter-name>JiraLastFilter</filter-name>
    <filter-class>com.atlassian.jira.web.filters.JiraLastFilter</filter-class>
</filter>

现在,我需要弄清楚如何使用ansible在上述模式之前正确插入xml块。

我已尝试使用以下模块:https://docs.ansible.com/ansible/latest/modules/blockinfile_module.html,而当前针对上述模块的尝试已在使用config

- name: Insert/Update XML surronded by cutsomer markers after the last </filter>
  blockinfile:
    path: "path to file "
    backup: true
    marker: "<!-- {mark} ANSIBLE SIGSCI MANAGED BLOCK -->"
    insertbefore: "(<!--.*[\n\t].*LAST FILTER IN THE DEFINED CHAIN.*[\n\t].*-->)"
    block: |
        <filter>
            <filter-name>sigSciFilter</filter-name>
            <filter-class>params</filter-class>
            <init-param>
                <param-name>rpcTimeout</param-name>
                <param-value>500</param-value>
            </init-param>
            <init-param>
                <param-name>params</param-name>
                <param-value>unix:/var/run/params</param-value>
            d</init-param>
        </filter>
        <filter-mapping>
            <filter-name>parms</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
  notify:
    - Restart Sigsci

但是,此正则表达式专利与文档中的任何内容都不匹配,而是插入到文档的末尾。我不确定此模块中使用的风味正则表达式,但lineinfile模块是否允许使用python regex,我想如果插入一行就可以正常工作,但是我想在匹配的正则表达式之前插入一个xml块。

guangguang198 回答:正则表达式之前的Ansible Insert XML

如果您确实想使用错误的工具来完成工作,则可以使用-zgrep拆分为空字节而不是换行符。有效地,它将整个XML文件视为一行:

$ grep -zo '<!--.*LAST FILTER IN THE DEFINED CHAIN.*-->' yourfile
<!-- =====================================================
     THIS MUST BE THE LAST FILTER IN THE DEFINED CHAIN
     ===================================================== -->
本文链接:https://www.f2er.com/3098687.html

大家都在问