Формула tpl-group-members-formula

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

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

Состояние tpl-group-members

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

Создает и управляет локальными настройками групп. Имеет зависимость от tpl-group-members.install через список include.

Состояние tpl-group-members.install

Создает group_name (если эта группа отсутствует на агенте) и изменяет настройки группы.

  • если для параметра change установлено значение add, список пользователей будет добавлен в качестве новых членов группы;

  • если для параметра change установлено значение del, пользователи будут исключены из состава группы;

  • если для параметра change установлено значение "", заменяет существующих членов группы списком новых участников.

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

Удаляет группу group_name на агенте.

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

tpl-group-members:
  # Переопределите значение map.jinja
  lookup:
    # Задайте имя группы
    group_name: "sudo"
    # Задайте id для группы;
    # Если оставить поле пустым, группе автоматически будет присвоен следующий свободный идентификатор.
    gid: ""
    # Укажите, является ли группа системной группой.
    # Это опция '-r' в команде 'groupadd`
    system: false
    # Задайте действие для списка пользователей: добавить (`add`), удалить(`del`) или заменить ("").
    change: ""
    # Задайте список пользователей
    users: [
        "user1",
        "user2",
    ]

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

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

    $ tar -xvf ~/Downloads/inno-lcm-salt-formulas-X.Y.Z.tar.gz \
        --strip-components 3 \
        -C ~/ \
        ./formulas/tpl-yb-settings-formula/tpl-group-members
    $ cp -R ~/tpl-group-members/ ~/my-group-members && cd ~/my-group-members
  2. В файле состояний install.sls (создание и настройка группы) измените ID состояний:

    # -*- coding: utf-8 -*-
    # vim: ft=sls
    
    {#- Get the `tplroot` from `tpldir` #}
    {%- set tplroot = tpldir.split('/')[0] %}
    {%- from tplroot ~ "/map.jinja" import mapdata as tplgroupmembers with context %}
    
    {%- if tplgroupmembers.group_name %}
    
    my-group-members-group-present:
      group.present:
        - name: {{ tplgroupmembers.group_name }}
        {%- if tplgroupmembers.gid %}
        - gid: {{ tplgroupmembers.gid }}
        {%- endif %}
        {%- if tplgroupmembers.system %}
        - system: {{ tplgroupmembers.system }}
        {%- endif %}
        {%- if tplgroupmembers.change == 'add' %}
        - addusers: {{ tplgroupmembers.users }}
        {%- elif tplgroupmembers.change == 'del' %}
        - delusers: {{ tplgroupmembers.users }}
        {%- else %}
        - members: {{ tplgroupmembers.users }}
        {%- endif %}
    
    {%- endif %}
  3. В файле состояний clean.sls (удаление группы) измените ID состояний:

    # -*- coding: utf-8 -*-
    # vim: ft=sls
    
    {#- Get the `tplroot` from `tpldir` #}
    {%- set tplroot = tpldir.split('/')[0] %}
    {%- from tplroot ~ "/map.jinja" import mapdata as tplgroupmembers with context %}
    
    {%- if tplgroupmembers.group_name %}
    
    my-group-members-group-absent:
      group.absent:
        - name: {{ tplgroupmembers.group_name }}
    
    {%- endif %}
  4. Измените файл map.jinja(словарь со значениями по умолчанию). Например, добавьте в группу sudo некоторых пользователей, для этого:

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

    2. Измените значение group_name на sudo.

    3. Измените значение change на add (добавить в группу).

    4. Измените значение users, указав список пользователей.

      {% set mapdata = salt['grains.filter_by']({
          'default': {
              'group_name': 'sudo',
              'gid': '',
              'system': false,
              'change': '',
              'users': [
                  'user1',
                  'user2',
              ],
          },
      }, merge=salt['pillar.get']('my-group-members:lookup'), base='default') %}
После того как формула будет написана, следуйте инструкциям по работе с формулой.