Формула tpl-script-formula

Формула-шаблон для выполнения скриптов.

Доступные состояния

Состояние tpl-script

Мета-состояние (состояние, которое включает в себя другие состояния).

Выполняет скрипт. Имеет зависимость от tpl-script.run через список include.

Состояние tpl-script.run

Выполняет скрипт test_script.sh, если файл /tmp/test_script-unless отсутствует в файловой системе агента (minion). The running script creates /tmp/test_script-unless file with TEST_ENV shell variable content.

Состояние tpl-script.clean

Удаляет файл /tmp/test_script-unless на агенте (minion).

Пример файла pillar.example

tpl-script:
  # Переопределите значение map.jinja
  lookup:
    # Задайте имя для файла скрипта, который хранится в {{ tpldir }}/files/
    file_name: "test_script.sh"
     # Задайте оболочку, которая будет использоваться для выполнения скрипта
    shell: "/bin/sh"
     # Задайте переменные env
    env:
      test_env: "HELLO WORLD!"

Написание формулы типа tpl-script-formula

  1. Скопируйте формулу-шаблон (tpl-script) в новую директорию с новым названием (my-script).

    $ tar -xvf ~/Downloads/inno-lcm-salt-formulas-0.10.0.tar.gz \
        --strip-components 3 \
        -C ~/ \
        ./formulas/tpl-script-formula/tpl-shortcut
    $ cp -R ~/tpl-script/ ~/my-script && cd ~/my-script
  2. Переименуйте файл ./files/test_script.sh в ./files/my-new-script.sh и затем измените его содержимое. Файл будет выглядеть следующим образом:

    #!/bin/bash
    #
    echo "Working hard..."
    echo "True" > /var/local/my-script.run.id
    
    # writing the state line
    echo  # an empty line here so the next line will be the last.
    echo "changed=yes comment='Created /var/local/my-script.run.id file' whatever=123"
  3. Измените файл состояний run.sls (запуск скрипта):

    1. Измените ID состояний.

    2. Удалите аргумент env и его значения.

    3. Измените значение аргумента unless, указав в проверке файл, создаваемый в скрипте, таким образом, исключив повторный запуск скрипта при очередном применении формулы.

      # -*- coding: utf-8 -*-
      # vim: ft=sls
      
      {#- Get the `tplroot` from `tpldir` #}
      {%- set tplroot = tpldir.split('/')[0] %}
      {%- from tplroot ~ "/map.jinja" import mapdata as tplscript with context %}
      
      {#- Run custom script #}
      {%- if tplscript.file_name %}
      
      my-script-run-cmd-script:
        cmd.script:
          - source: salt://{{ tpldir }}/files/{{ tplscript.file_name }}
          - cwd: /
          - shell: {{ tplscript.shell }}
          - unless: "test -f /var/local/my-script.run.id"
      
      {%- endif %}
  4. Измените файл состояний clean.sls (удаление проверочного файла):

    1. Измените ID состояний.

    2. Измените значение аргумента name.

      # -*- coding: utf-8 -*-
      # vim: ft=sls
      
      {#- Get the `tplroot` from `tpldir` #}
      {%- set tplroot = tpldir.split('/')[0] %}
      {%- from tplroot ~ "/map.jinja" import mapdata as tplscript with context %}
      
      {#- Delete symlink #}
      {%- if tplscript.file_name %}
      
      my-script-clean-file-absent:
        file.absent:
          - name: /var/local/my-script.run.id
      
      {%- endif %}
  5. Измените файл map.jinja(словарь со значениями по умолчанию):

    1. Измените имя ключа для словаря в хранилище Pillar, используемого для динамического переопределения значений по умолчанию.

    2. Измените значение file_name, указав имя созданного скрипта.

    3. Удалите env.

      {% set mapdata = salt['grains.filter_by']({
          'default': {
              'file_name': 'my-new-script.sh',
              'shell': '/bin/sh',
          },
      }, merge=salt['pillar.get']('my-script:lookup'), base='default') %}
После того как формула будет написана, следуйте инструкциям по работе с формулой.