使用 Ansible 在一定数量的配置行后添加行
Adding line after certain count of configurations lines with Ansible
我正在尝试在我的 karaf 配置文件中添加一行,以下是配置片段
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.*" 并在上面插入新的两行像
wrapper.java.classpath.4=%KARAF_HOME%/system/my*.jar
wrapper.java.classpath.5=%KARAF_HOME%/system/my2*.jar
记住这一点,下一个条目不一定是 wrapper.java.classpath。4 计数可能会根据安装而改变。
我正在查看 lineinfile 但它不起作用,因为无法使用正则表达式收集计数
- 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 脚本中我正在做如下
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}
您可以使用此剧本来计算 wrapper.java.classpath
个条目的行数,然后在最后一行之后追加您需要的另外 2 个条目。
剧本:
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 在我的测试中):
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
运行 结果:
[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
开头的行,我们对它们进行计数,然后在将 "index" 数字动态递增到下一个之后追加 (insertafter
) 2 行2 个值。
请查看 blockinfile
模块文档以根据需要配置 # BEGIN ANSIBLE MANAGED BLOCK
行。
希望对您有所帮助。
我正在尝试在我的 karaf 配置文件中添加一行,以下是配置片段
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.*" 并在上面插入新的两行像
wrapper.java.classpath.4=%KARAF_HOME%/system/my*.jar
wrapper.java.classpath.5=%KARAF_HOME%/system/my2*.jar
记住这一点,下一个条目不一定是 wrapper.java.classpath。4 计数可能会根据安装而改变。
我正在查看 lineinfile 但它不起作用,因为无法使用正则表达式收集计数
- 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 脚本中我正在做如下
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}
您可以使用此剧本来计算 wrapper.java.classpath
个条目的行数,然后在最后一行之后追加您需要的另外 2 个条目。
剧本:
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 在我的测试中):
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
运行 结果:
[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
开头的行,我们对它们进行计数,然后在将 "index" 数字动态递增到下一个之后追加 (insertafter
) 2 行2 个值。
请查看 blockinfile
模块文档以根据需要配置 # BEGIN ANSIBLE MANAGED BLOCK
行。
希望对您有所帮助。