Формула 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
-
Скопируйте формулу-шаблон (
tpl-script) в новую директорию с новым названием (my-script).$ tar -xvf ~/Downloads/osmax-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 -
Переименуйте файл
./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" -
Измените файл состояний
run.sls(запуск скрипта):-
Измените ID состояний.
-
Удалите аргумент
envи его значения. -
Измените значение аргумента
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 %}
-
-
Измените файл состояний
clean.sls(удаление проверочного файла):-
Измените ID состояний.
-
Измените значение аргумента
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 %}
-
-
Измените файл
map.jinja(словарь со значениями по умолчанию):-
Измените имя ключа для словаря в хранилище Pillar, используемого для динамического переопределения значений по умолчанию.
-
Измените значение
file_name, указав имя созданного скрипта. -
Удалите
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') %}
-
| После того как формула будет написана, следуйте инструкциям по работе с формулой. |