Использование регулярного выражения для извлечения значения из json в задаче ansible

#regex #ansible #influxdb-2

Вопрос:

У меня есть задача в ansible, в которой я должен извлечь значение токена из объекта json, которое выглядит следующим образом:

 {
"token.stdout_lines": [
    "{",
    "t"id": "08320829d85c7000",",
    "t"description": "",",
    "t"token": "zMiyCw7X6u_IjBpTbD1Nvt4eGk-dxBXWWOqRCgWh_KiYtp7AjD5mML5mBIEtApncBSXwU3QqexT_4VVmEv0WeA==",",
    "t"status": "active",",
    "t"userName": "telegraf",",
    "t"userID": "0831cb0c68dc7000",",
    "t"permissions": [",
    "tt"read:orgs/ea37b04111f50748/buckets",",
    "tt"write:orgs/ea37b04111f50748/buckets"",
    "t]",
    "}"
]
}
 

Чтобы получить значение токена, я выполнил следующие действия:

 - set_fact:
myvalue: "{{ token.stdout_lines | regex_search('regexp')}}"
  vars:
regexp: 'token([^"] )":([^"] )"([^.{\}$"] )'
- debug:
var: myvalue
 

Вывод, который я получаю, — это нулевое значение в моем значении.

Может ли кто-нибудь указать, где я совершаю ошибку?

Большое спасибо

Ответ №1:

Не совсем уверен, что регулярное выражение является лучшим ответом в этом случае.

Почему бы не сделать что-нибудь вроде

 - set_fact:
    myvalue: "{{ token.stdout_lines | from_json }}"
- debug:
    var: myvalue.token
 

Смотрите больше на веб-сайте Ansible.

Ответ №2:

Я бы попытался удалить ненужные группы. Регулярное выражение: token[^"] ":[^"] "([^.{\}$"] )

Пример