Skip to content

Instantly share code, notes, and snippets.

@hryamzik
Created May 25, 2017 13:40
Show Gist options
  • Save hryamzik/41b97d2f9c6a33c4fe1d179a4ecbf176 to your computer and use it in GitHub Desktop.
Save hryamzik/41b97d2f9c6a33c4fe1d179a4ecbf176 to your computer and use it in GitHub Desktop.
- name: read serverid
shell: head -10 /etc/go/cruise-config.xml|sed -rn 's/.*serverId="([^"]+)".*/\1/p'
changed_when: no
register: serverid
- name: read xml
set_fact: xmlconf={{ lookup('file', 'files/cruise-config.xml')|
regex_replace('(serverId=)"[^"]+', '\\1"' + serverid.stdout)|
replace('\n','\\n')|
regex_replace('<security>.*</security>','')|
regex_replace('encryptedPassword="[^"]+"','')|
replace('\\n','\n')
}}
- name: initiate edit
uri:
url: http://127.0.0.1:8153/go/admin/config_xml/edit
return_content: yes
register: editrequest
- name: set auth variables
set_fact: auth_token={{ editrequest.content.replace('\n','')|regex_replace('.*name="authenticity_token".+?value="([^"]+).*','\\1') }}
# - debug: msg="{{ auth_token }}"
- name: define old conf md5
set_fact: old_conf_md5={{ editrequest.content|replace('\n','')|regex_replace('.*id="go_config_md5".*?value="([^"]+)".*','\\1') }}
- name: show md5
debug: var=old_conf_md5
- name: post config
uri:
url: http://127.0.0.1:8153/go/admin/config_xml
return_content: yes
headers:
Cookie: "{{ editrequest.set_cookie }}"
method: POST
follow_redirects: all
body: "{{ 'utf8=' + '✓'|urlencode() + '&_method=put&authenticity_token=' + auth_token| urlencode() +
'&commit=SAVE&go_config' + '[content]'|urlencode() + '=' + xmlconf|urlencode() + '&go_config' +
'[md5]'|urlencode() + '=' + old_conf_md5 }}"
register: result
ignore_errors: yes
# - debug: var=result
- name: show p errors
debug: msg={{ result.content.replace('\n','\\n')|regex_replace('.*<p\s+class="error">([^<]+).*','\1')|regex_replace('<.*?>','')|regex_replace('\\\\n\s*\\\\n','\n')|regex_replace('(\n)\s+','\1') }}
when: "{{ 'class=\"error\"' in result.content }}"
- name: show div errors
debug: msg={{ (result.content.replace('\n','\\n')|regex_replace('.*<div\s+class="errors">(.*?)</div>.*','\1')|regex_replace('<.*?>','')|regex_replace('\s*\\\\n','\n')|regex_replace('(\n)\s+','\1')).split('\n') }}
when: "{{ 'class=\"errors\"' in result.content }}"
- name: show success div
debug: msg={{ result.content.replace('\n','\\n')|regex_replace('.*<p\s+class="success">([^<]+).*','\1')|regex_replace('<.*?>','')|regex_replace('\\\\n\s*\\\\n','\n')|regex_replace('(\n)\s+','\1') }}
when: "{{ 'class=\"success\"' in result.content }}"
- name: send one more edit request to get md5
uri:
url: http://127.0.0.1:8153/go/admin/config_xml/edit
return_content: yes
register: editrequest
- name: define old conf md5
set_fact: new_conf_md5={{ editrequest.content|replace('\n','')|regex_replace('.*id="go_config_md5".*?value="([^"]+)".*','\\1') }}
- name: check if config changed
debug: msg="Config {{ 'not ' if new_conf_md5 == old_conf_md5 else '' }}changed"
changed_when: "{{ new_conf_md5 != old_conf_md5 }}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment