次のコマンドの出力を解析する必要があります。
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"の値がtrueであることを確認する必要があります。これをansibleで行う方法を教えてください。
現時点では、次のコードを使用して、出力に「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週間は複雑なフィルターで解析できず、機能しなかったためです。私はFILEを丸めて、正規表現でJQパーサーを使用しました。必要なのは、JQ PARSERをサーバーにインストールする必要があることだけです。
ANSIBLEでそれを行うには:
名前:set-fact1 set_fact:Claims1: "{{apiaccountclaims.stdout}}"
名前:サービスtdiapiaccountclaimsを入力してくださいシェル:Sudo /usr/share/jbossas/bin/jboss-cli.sh -c --command = '/ system-property = tdigi.api.uri.Edge.account.claims:add(value = {{Claims1}}) '
プレイブックは次のとおりです。
ホスト:「{{hosts | default( 'all')}}」:true
vars_Prompt:-name: "envid"プロンプト: "env IDを入力してください"
タスク:
- 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 }})'