Sa jedne strane imam SAP HANA, sa druge Redis. Treba da pretabam neke podatke iz neke tebele iz HANA u Redis.
Za to imam 3 strima u kafki, i 2 querija.
Strimove ne mogu da dropujem dok ne uradim terminate query-ja, a mora i nekim redosledom jer strimovi kao svoj source koriste druge strimove.
Hoću to da automatizujem sa ansible.
Ne mogu da hardkodujem tako sto cu u varijablu da dam ime query-ja, posto prilikom kreiranja dobijaju neki sufix u obliku broja.
Ideja mi ja da procitam prvo sve querije, izvucem njihov ID, i onda na osnovu tog ID opet pomocu REST da uradim terminate.
Response uz pomoc curl ili Postman je ovakav
Code:
[
{
"@type": "queries",
"statementText": "SHOW queries;",
"queries": [
{
"sinks": [
"SAPHANA_STOCK_SOURCE_PROCESSED"
],
"id": "CSAS_SAPHANA_STOCK_SOURCE_PROCESSED_2",
"queryString": "CREATE STREAM SAP_HANA.......;"
},
{
"sinks": [
"REDIS_SAPHANA_STOCK_STREAM"
],
"id": "CSAS_REDIS_SAPHANA_STOCK_STREAM_3",
"queryString": "CREATE STREAM REDIS_SAP_HANA.......;"
}
]
}
]
[
{
"@type": "queries",
"statementText": "SHOW queries;",
"queries": [
{
"sinks": [
"SAPHANA_STOCK_SOURCE_PROCESSED"
],
"id": "CSAS_SAPHANA_STOCK_SOURCE_PROCESSED_2",
"queryString": "CREATE STREAM SAP_HANA.......;"
},
{
"sinks": [
"REDIS_SAPHANA_STOCK_STREAM"
],
"id": "CSAS_REDIS_SAPHANA_STOCK_STREAM_3",
"queryString": "CREATE STREAM REDIS_SAP_HANA.......;"
}
]
}
]
Kad sa Ansible ovako pozovem taj API
Code:
- hosts: localhost
tasks:
- name: Get Stream queries
uri:
url: http://10.10.10.10:8088/ksql
method: POST
body:
ksql: SHOW QUERIES;
streamsProperties:
return_content: yes
status_code: 200
body_format: json
return_content: yes
register: getqueries
- name: Get content
debug:
var: getqueries
- hosts: localhost
tasks:
- name: Get Stream queries
uri:
url: http://10.10.10.10:8088/ksql
method: POST
body:
ksql: SHOW QUERIES;
streamsProperties:
return_content: yes
status_code: 200
body_format: json
return_content: yes
register: getqueries
- name: Get content
debug:
var: getqueries
i uradim debug da mi prikaze registrovani response, dobijem ovo
Code:
TASK [Get content] *********************************************************************************************************************************************************************
ok: [localhost] => {
"getqueries": {
"changed": false,
"connection": "close",
"content": "[{\"@type\":\"queries\",\"statementText\":\"SHOW QUERIES;\",\"queries\":[{\"sinks\":[\"SAPHANA_STOCK_SOURCE_COMPOSITEKEY\"],\"id\":\"CSAS_SAPHANA_STOCK_SOURCE_COMPOSITEKEY_2\",.............,
"content_type": "application/vnd.ksql.v1+json",
"cookies": {},
"date": "Wed, 04 Sep 2019 13:07:57 GMT",
"failed": false,
"msg": "OK (unknown bytes)",
"redirected": false,
"server": "Jetty(9.4.18.v20190429)",
"status": 200,
"url": "http://10.10.10.10:8088/ksql",
"vary": "Accept-Encoding, User-Agent"
}
}
TASK [Get content] *********************************************************************************************************************************************************************
ok: [localhost] => {
"getqueries": {
"changed": false,
"connection": "close",
"content": "[{\"@type\":\"queries\",\"statementText\":\"SHOW QUERIES;\",\"queries\":[{\"sinks\":[\"SAPHANA_STOCK_SOURCE_COMPOSITEKEY\"],\"id\":\"CSAS_SAPHANA_STOCK_SOURCE_COMPOSITEKEY_2\",.............,
"content_type": "application/vnd.ksql.v1+json",
"cookies": {},
"date": "Wed, 04 Sep 2019 13:07:57 GMT",
"failed": false,
"msg": "OK (unknown bytes)",
"redirected": false,
"server": "Jetty(9.4.18.v20190429)",
"status": 200,
"url": "http://10.10.10.10:8088/ksql",
"vary": "Accept-Encoding, User-Agent"
}
}
Response mi spakuje u contect, i sta god sam pokusao da uradim nisam uspeo da izvucem id spakujem u neku listu.
Pokusao sam i sa json_query i regex, i json filterom ali nisam uspeo, verovatno jer ovo u content je sve jedan value i nije json format.
Jer ako pokusam sa
Code:
- name: Get content
debug:
var: getqueries.content[3]
- name: Get content
debug:
var: getqueries.content[3]
TASK [Get content] *********************************************************************************************************************************************************************
ok: [localhost] => {
"getqueries.content[3]": "@"
}
Dobijem @ sto i jeste 4. karakter is content value.
Je l' postoji mogucnost da sa tim Ansible uri modulom registrujem samo ovo sto je iz content pa da mi to bude u json formatu.
Ili da li mogu ovo sto je u content da naknadno prebacim u json koji bih mogao da parsiram.
Ili neka treca ideja.