Ansible: Как заполнить переменную значением шаблона/подстроки в строке удаленного файла?

У меня есть удаленный сервер с файлом на нем. Одна строка в этом файле следующая:

authorizationToken=<hash or empty string>

Я хотел бы установить переменную в роли на значение того, что после знака равенства в этой строке, если что-нибудь (это может быть хэш или может быть пустая строка).

Какой наименее ужасный способ сделать это?


person iLikeDirt    schedule 13.10.2017    source источник
comment
дублировать stackoverflow.com/a/44260130/2795592?   -  person Konstantin Suvorov    schedule 13.10.2017


Ответы (2)


Константин связал вас с решением, используя пользовательские факты, но вы также можете получить то же значение, используя простую задачу, например:

- name: get authorizationToken
  command: >
    awk -F= '$1 == "authorizationToken" {print $2}' /path/to/configfile
  register: token

Теперь это значение доступно в последующих задачах как token.stdout.

person larsks    schedule 13.10.2017
comment
Ха, мы пришли к такому же выводу. :) - person iLikeDirt; 14.10.2017
comment
Ну, конечно, хотя я разместил это час назад. Поскольку похоже, что вы приняли это решение, может быть, вы хотите отметить это как принятый ответ? - person larsks; 14.10.2017

Некоторое время пытаясь сделать это "правильным" способом, в конце концов путь наименьшего сопротивления заключался в использовании сценария оболочки:

- name: Record autorization Token
  shell: "cat {{ buildagent_dir }}/conf/buildAgent.properties 2>/dev/null | grep authorizationToken | cut -d '=' -f 2"
  register: token
person iLikeDirt    schedule 13.10.2017
comment
Обратите внимание, что cat вам не нужен ни в коем случае, и с помощью awk вы можете заменить оба grep и cut, а так как теперь вы работаете с одной командой, вы можете заменить shell на command. - person larsks; 14.10.2017
comment
Я знаю, что это не самый эффективный способ сделать это, но обычно я предпочитаю четкость и удобочитаемость эффективности при написании команд оболочки, и я считаю, что синтаксис awk сложнее разобрать с первого взгляда. Может быть, я странный. - person iLikeDirt; 14.10.2017