Saltstack SLS / Jinja: 'pdbedit.generate_nt_ha sh' возвращает строку байтов - PullRequest
0 голосов
/ 02 марта 2020

Я попытался настроить официальный samba-формула с помощью советов, приведенных в pillar.example . А именно, не хранить отдельные версии паролей passwd и nt, а генерировать их из простого текста.

столб:

samba:
  users:
    myuser: secretpassword
    anotheruser: anotherpassword

test.sls:


{% for user,pass in salt['pillar.get']('samba:users').items() %}
TEST {{ user }} passwd:
  cmd.run:
    - name: echo {{ salt['cmd.run']('openssl passwd -1 %s'|format(pass)) }}

TEST {{ user }} NT:
  cmd.run:
    - name: echo {{ salt['pdbedit.generate_nt_hash'](pass) }}
{% endfor %}

salt \* state.sls test

вывод:

dagobah:
----------
          ID: TEST myuser passwd
    Function: cmd.run
        Name: echo $1$mQ1ZzhKj$WCYoiLCQt.tfv17Ah7Ieo/
      Result: True
     Comment: Command "echo $1$mQ1ZzhKj$WCYoiLCQt.tfv17Ah7Ieo/" run
     Started: 12:37:19.256664
    Duration: 6.759 ms
     Changes:
              ----------
              pid:
                  207202
              retcode:
                  0
              stderr:
              stdout:
                  .tfv17Ah7Ieo/
----------
          ID: TEST myuser NT
    Function: cmd.run
        Name: echo b'DC265511A1D1A7A3CE6F6D2A3FB6BBE1'
      Result: True
     Comment: Command "echo b'DC265511A1D1A7A3CE6F6D2A3FB6BBE1'" run
     Started: 12:37:19.263747
    Duration: 6.232 ms
     Changes:
              ----------
              pid:
                  207203
              retcode:
                  0
              stderr:
              stdout:
                  bDC265511A1D1A7A3CE6F6D2A3FB6BBE1
----------
          ID: TEST anotheruser passwd
    Function: cmd.run
        Name: echo $1$mpgMPMzY$1/oDCGOm16gOs0.mR62YX0
      Result: True
     Comment: Command "echo $1$mpgMPMzY$1/oDCGOm16gOs0.mR62YX0" run
     Started: 12:37:19.270225
    Duration: 6.083 ms
     Changes:
              ----------
              pid:
                  207204
              retcode:
                  0
              stderr:
              stdout:
                  /oDCGOm16gOs0.mR62YX0
----------
          ID: TEST anotheruser NT
    Function: cmd.run
        Name: echo b'69AA7AD81335466852B12532895FA9A9'
      Result: True
     Comment: Command "echo b'69AA7AD81335466852B12532895FA9A9'" run
     Started: 12:37:19.276565
    Duration: 7.01 ms
     Changes:
              ----------
              pid:
                  207205
              retcode:
                  0
              stderr:
              stdout:
                  b69AA7AD81335466852B12532895FA9A9

Summary for dagobah
------------
Succeeded: 4 (changed=4)
Failed:    0
------------
Total states run:     4
Total run time:  26.084 ms

Таким образом, пока часть openssl passwd работает как положено, pdbedit.generate_nt_hash возвращает строку байтов.

salt \* pdbedit.generate_nt_hash secretpassword дает DC265511A1D1A7A3CE6F6D2A3FB6BBE1

, но вызов его изнутри jinja дает

b'DC265511A1D1A7A3CE6F6D2A3FB6BBE1'

распознавание кавычек делает его

bDC265511A1D1A7A3CE6F6D2A3FB6BBE1

Я просмотрел список встроенных фильтров Джинджи , но не нашел ничего подходящего.

Лучший обходной путь, который я могу себе представить, - это просто убрать ведущий b.

  1. Каким будет солёный подход к решению этой проблемы?
  2. Есть ли какой-нибудь Джинджа эквивалентен python х decode('utf-8')?
  3. Если в решении будет написан мой собственный фильтр Jinja, относительно моей структуры соли file и pillar, где я должен разместить пользовательские фильтры Jinja? Например, есть ли последствия для области действия или пространств имен для рассмотрения?
  4. Я что-то пропустил?

Заранее спасибо!

...