首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Ansible在一定数量的配置行后添加行

使用Ansible在一定数量的配置行后添加行
EN

Stack Overflow用户
提问于 2018-05-28 17:11:13
回答 1查看 695关注 0票数 0

我正在尝试在我的karaf配置文件中添加行,下面是配置片段

代码语言:javascript
复制
wrapper.java.classpath.1=%KARAF_BASE%/lib/boot/*.jar
wrapper.java.classpath.2=%KARAF_BASE%/lib/wrapper/*.jar
wrapper.java.classpath.3=%KARAF_HOME%/system/org/ops4j/pax/logging/pax-logging-api/*/pax-logging-api-*.jar

现在我希望ansible脚本计算所有"wrapper.java.classpath.*“,并在上面的后面插入新的两行,比如

代码语言:javascript
复制
wrapper.java.classpath.4=%KARAF_HOME%/system/my*.jar
wrapper.java.classpath.5=%KARAF_HOME%/system/my2*.jar

请注意这一点,下一个条目不一定是wrapper.java.classpath.4计数可能会根据安装的不同而改变。

我正在查找lineinfile,但它不起作用,因为无法使用regexp收集计数

代码语言:javascript
复制
 - name: Adding classpath entries for my jar
      lineinfile: 
       dest: $KARAF_HOME/etc/wrapper.conf
       regexp: 'wrapper\.java\.classpath\.*' 
       line: 'wrapper.java.classpath.4=%KARAF_HOME%/system/my*.jar'
       backrefs: yes

目前在shell脚本中,我正在做如下操作

代码语言:javascript
复制
NUM_CLASSPATH_ENTRIES=$(less ${WRAPPER_CONF_FILE} | grep wrapper\.java\.classpath | wc -l)

KARAF_MY_ENTRY="wrapper.java.classpath.$((NUM_CLASSPATH_ENTRIES+1))=%KARAF_BASE%/lib/my*.jar"
sed -i "/wrapper\.java\.classpath\.$NUM_CLASSPATH_ENTRIES.*/a $KARAF_MY_ENTRY" ${WRAPPER_CONF_FILE}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-28 19:34:29

您可以使用此攻略计算wrapper.java.classpath条目的行数,然后紧跟在最后一行之后追加所需的另外两个条目。

攻略:

代码语言:javascript
复制
  tasks:
    - name: cat file
      shell: cat testt.txt | grep '^wrapper.java.classpath'
      register: file_grep

    - name: find max number
      set_fact:
        max_number: "{{ max_number|default(0)|int + 1|int }}"
      loop: "{{ file_grep.stdout_lines }}"

    - name: Adding classpath entries for my jar
      blockinfile: 
        dest: testt.txt
        block: |
          wrapper.java.classpath.{{ max_number|int + 1|int }}=%KARAF_HOME%/system/my*.jar
          wrapper.java.classpath.{{ max_number|int + 2|int }}=%KARAF_HOME%/system/my2*.jar
        insertafter: "^(wrapper.java.classpath)(.+)$"
        backup: yes

示例配置文件(在我的测试中为testt.txt):

代码语言:javascript
复制
wrapper.java.classpath.1=%KARAF_BASE%/lib/boot/*.jar
wrapper.java.classpath.2=%KARAF_BASE%/lib/wrapper/*.jar
wrapper.java.classpath.3=%KARAF_HOME%/system/org/ops4j/pax/logging/pax-logging-api/*/pax-logging-api-*.jar
wrapper.java.classpath.4=%KARAF_BASE%/lib/boot/*.jar
wrapper.java.classpath.5=%KARAF_BASE%/lib/wrapper/*.jar
random config line 1
more random config line 1
and one last random line

运行并得到结果:

代码语言:javascript
复制
[root@optima-ansible ILIAS]# ansible-playbook testt.yml 

PLAY [localhost] ****************************************************************************************************************************************************************************************************

TASK [cat file] *****************************************************************************************************************************************************************************************************
changed: [localhost]

TASK [find max number] **********************************************************************************************************************************************************************************************
ok: [localhost] => (item=wrapper.java.classpath.1=%KARAF_BASE%/lib/boot/*.jar)
ok: [localhost] => (item=wrapper.java.classpath.2=%KARAF_BASE%/lib/wrapper/*.jar)
ok: [localhost] => (item=wrapper.java.classpath.3=%KARAF_HOME%/system/org/ops4j/pax/logging/pax-logging-api/*/pax-logging-api-*.jar)
ok: [localhost] => (item=wrapper.java.classpath.4=%KARAF_BASE%/lib/boot/*.jar)
ok: [localhost] => (item=wrapper.java.classpath.5=%KARAF_BASE%/lib/wrapper/*.jar)

TASK [Adding classpath entries for my jar] **************************************************************************************************************************************************************************
changed: [localhost]

PLAY RECAP **********************************************************************************************************************************************************************************************************
localhost                  : ok=3    changed=2    unreachable=0    failed=0   

[root@optima-ansible ILIAS]# cat testt.txt
wrapper.java.classpath.1=%KARAF_BASE%/lib/boot/*.jar
wrapper.java.classpath.2=%KARAF_BASE%/lib/wrapper/*.jar
wrapper.java.classpath.3=%KARAF_HOME%/system/org/ops4j/pax/logging/pax-logging-api/*/pax-logging-api-*.jar
wrapper.java.classpath.4=%KARAF_BASE%/lib/boot/*.jar
wrapper.java.classpath.5=%KARAF_BASE%/lib/wrapper/*.jar
# BEGIN ANSIBLE MANAGED BLOCK
wrapper.java.classpath.6=%KARAF_HOME%/system/my*.jar
wrapper.java.classpath.7=%KARAF_HOME%/system/my2*.jar
# END ANSIBLE MANAGED BLOCK
random config line 1
more random config line 1
and one last random line[root@optima-ansible ILIAS]# 

我们正在寻找以索引开头的行,我们对它们进行计数,然后在动态地将“wrapper.java.classpath”数字递增到下两个值之后追加(insertafter)这两行。

请查看blockinfile模块文档,根据需要配置# BEGIN ANSIBLE MANAGED BLOCK线路。

希望能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50562816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档