Ответ 1
В Ansible есть довольно много полезного filters.
Попробуйте: when: (output_text.stdout | from_json).ismaster
Мне нужно разобрать вывод следующей команды:
mongo <dbname> --eval "db.isMaster()"
который выдает результат следующим образом:
{
"hosts" : [
"xxx:<port>",
"xxx:<port>",
"xxx:<port>"
],
"setName" : "xxx",
"setVersion" : xxx,
"ismaster" : true,
"secondary" : false,
"primary" : "xxx",
"me" : "xxx",
"electionId" : ObjectId("xxxx"),
"maxBsonObjectSize" : xxx,
"maxMessageSizeBytes" : xxxx,
"maxWriteBatchSize" : xxx,
"localTime" : ISODate("xxx"),
"maxWireVersion" : 4,
"minWireVersion" : 0,
"ok" : 1
}
Мне нужно разобрать вышеупомянутый вывод, чтобы проверить значение "ismaster", это правда. Пожалуйста, дайте мне знать, как я могу сделать это в незаменимом.
В настоящий момент я просто проверяю, что текст "ismaster": true выводится на выходе с помощью следующего кода:
tasks:
- name: Check if the mongo node is primary
shell: mongo <dbname> --eval "db.isMaster()"
register: output_text
- name: Run command on master
shell: <command to execute>
when: "'\"ismaster\\\" : true,' in output_text.stdout"
Однако было бы неплохо использовать обработку Ansible json для проверки того же. Просьба сообщить.
В Ansible есть довольно много полезного filters.
Попробуйте: when: (output_text.stdout | from_json).ismaster
Брат Кодер, честно говоря, у меня есть лучший метод, потому что в течение 3 недель я просто не мог разобрать его с помощью фильтра, который был сложным и никогда не работал. Я просто свернул ФАЙЛ и использовал анализатор JQ с регулярным выражением. Единственное, что требуется, это то, что JQ PARSER должен быть установлен на сервере:
Чтобы сделать это с ANSIBLE:
имя: set-fact1 set_fact: arguments1: "{{apiaccountclaims.stdout}}"
name: введите службу tdiapiaccountclaims shell: sudo/usr/share/jbossas/bin/jboss-cli.sh -c - -c ommand = '/system-property = tdigi.api.uri.edge.account.claims: add (value = {{претензии1}}) '
Вот книга игр:
hosts: "{{hosts | default ('all')}}" становиться: верным
vars_prompt: - имя: приглашение "envid": "Пожалуйста, укажите ID env"
задачи:
- name: Get json file
shell: curl --output file.json -k -O https://example.tp.com/services/getMasterExtract.php?env_id={{envid}}&product=all&du=all&format=json&resolved=true
args:
chdir: /tmp/
- name: get value from file
shell: cat file.json | jq '.globals.environments.{{envid}}."legacy-claimcenter-hostname"' | sed 's/"//g'
args:
chdir: /tmp/
register: tdiapiaccountclaims
- name: set-fact1
set_fact:
claims1: "{{ apiaccountclaims.stdout }}"
- name: copy command file
copy:
src: "cli/systemprops2-2.cli"
dest: "/opt/jboss/profiles/{{jboss_profile}}/configuration/"
- name: backup standalone-full.xml
shell: cp "/opt/jboss/profiles/{{jboss_profile}}/configuration/standalone-full.xml" "/opt/jboss/profiles/{{jboss_profile}}/configuration/standalone-full.xml.backup.old"
- name: Delete Configs in file of standalone-full.xml
shell: sudo /usr/share/jbossas/bin/jboss-cli.sh -c --file=systemprops2-2.cli
args:
chdir: /opt/jboss/profiles/{{ jboss_profile }}/configuration
register: delvar
- name: Enter service tdiapiaccountclaims
shell: sudo /usr/share/jbossas/bin/jboss-cli.sh -c --command='/system-property=tdigi.api.uri.edge.account.claims:add(value={{ claims1 }})'