У меня есть asible playbook, который, как предполагается, исправляет испорченные XML в моих экземплярах SOLR:
- hosts: host-solr-master, host-solr-repeater
become: true
become_user: user
tasks:
- name: Fixing corrupted wc-search.xml
lineinfile:
path: '{{ solr_catalog_config_dir }}/wc-search.xml'
regexp: '{{ item.regexp }}'
line: '{{ item.line }}'
state: '{{ item.state }}'
with_items:
- { regexp: '<\!DOCTYPE.*', line: '', state: 'absent' }
- { regexp: '\]>', line: '', state: 'absent' }
- { regexp: '<_config:cores.*', line: '<_config:cores>', state: 'present' }
- name: Preview the changed wc-search.xml
shell: cat '{{ solr_catalog_config_dir }}/wc-search.xml'
Я выполняю эту пьесу на Jenkins с Ansible плагином 0.8 (работает с Python 2.7. 5). Проблема, с которой я столкнулся, заключается в том, что хотя вакансии утверждают, что заменяют нужные строки.
TASK [Fixing corrupted wc-search.xml] ******************************************
ok: [hostname.master] => (item={u'regexp': u'<\\!DOCTYPE.*', u'line': u'', u'state': u'absent'}) => {
"backup": "",
"changed": false,
"found": 0,
"item": {
"line": "",
"regexp": "<\\!DOCTYPE.*",
"state": "absent"
}
}
changed: [hostname.repeater] => (item={u'regexp': u'<\\!DOCTYPE.*', u'line': u'', u'state': u'absent'}) => {
"backup": "",
"changed": true,
"found": 1,
"item": {
"line": "",
"regexp": "<\\!DOCTYPE.*",
"state": "absent"
}
}
MSG:
1 line(s) removed
ok: [hostname.master] => (item={u'regexp': u'\\]>', u'line': u'', u'state': u'absent'}) => {
"backup": "",
"changed": false,
"found": 0,
"item": {
"line": "",
"regexp": "\\]>",
"state": "absent"
}
}
changed: [hostname.repeater] => (item={u'regexp': u'\\]>', u'line': u'', u'state': u'absent'}) => {
"backup": "",
"changed": true,
"found": 1,
"item": {
"line": "",
"regexp": "\\]>",
"state": "absent"
}
}
MSG:
1 line(s) removed
changed: [hostname.repeater] => (item={u'regexp': u'<_config:cores.*', u'line': u'<_config:cores>', u'state': u'present'}) => {
"backup": "",
"changed": true,
"item": {
"line": "<_config:cores>",
"regexp": "<_config:cores.*",
"state": "present"
}
}
MSG:
line replaced
ok: [hostname.master] => (item={u'regexp': u'<_config:cores.*', u'line': u'<_config:cores>', u'state': u'present'}) => {
"backup": "",
"changed": false,
"item": {
"line": "<_config:cores>",
"regexp": "<_config:cores.*",
"state": "present"
}
}
Проверено, что в задаче «Предварительный просмотр измененного w c -поиск. xml».
TASK [Preview the changed wc-search.xml] ***************************************
changed: [hostname.repeater] => {
"changed": true,
"cmd": "cat 'PATH_TO/wc-search.xml'",
"delta": "0:00:00.023935",
"end": "2020-03-16 10:37:23.424572",
"rc": 0,
"start": "2020-03-16 10:37:23.400637"
}
STDOUT:
<?xml version="1.0" encoding="UTF-8"?>
<_config:search-config
xmlns:_config="http://www.ibm.com/xmlns/prod/commerce/foundation/config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ibm.com/xmlns/prod/commerce/foundation/config ../xsd/wc-search.xsd ">
<_config:server name="BasicConfiguration">
<_config:embedded/>
</_config:server>
<_config:cores>
...
</_config:cores>
</_config:search-config>
changed: [hostname.master] => {
"changed": true,
"cmd": "cat 'PATH_TO/wc-search.xml'",
"delta": "0:00:00.036818",
"end": "2020-03-16 10:37:23.560608",
"rc": 0,
"start": "2020-03-16 10:37:23.523790"
}
STDOUT:
<?xml version="1.0" encoding="UTF-8"?>
<_config:search-config
xmlns:_config="http://www.ibm.com/xmlns/prod/commerce/foundation/config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ibm.com/xmlns/prod/commerce/foundation/config ../xsd/wc-search.xsd ">
<_config:server name="BasicConfiguration">
<_config:embedded/>
</_config:server>
<_config:cores>
...
</_config:cores>
...
</_config:search-config>
Когда я предварительно просматриваю файлы на серверах, обновляется только файл в host-solr-repeater
.
Есть идеи, в чем может быть причина? Я попытался воспроизвести книгу с флагом --flush-cache
и установить keep_remote_files = False
в /etc/ansible/ansible.cfg
. Также не помогло.
Примечание: Еще одна важная вещь: один раз в нескольких сборках файл обновляется на обоих серверах, а иногда даже на одном из них, поэтому поведение здесь совершенно случайно.