Конфигурация хоста Saltstack и улучшение читаемости данных - PullRequest
0 голосов
/ 25 июня 2018

Мы используем соль (masterless, fwiw), чтобы поддерживать флот из 10 хостов. Это, вероятно, вырастет до 15-20 к концу года. У меня есть файл столба с именем credentials/init.sls, в котором есть один огромный кусок yaml, который выглядит примерно так:

host_credentials:
  host1.example.com:
    role: staging
    mysql:
      superdatabase:
        role1:
          username: role1_username
          password: someSecretSHA1
          from_hosts:
            - host2.example.com
          grants: select, insert, update, delete
        role2:
          username: role2_username
          password: anotherSecretSHA1
          from_hosts:
            - host3.example.com
          grants: select

  host2.example.com:
    role: staging
    superthing:
      mysql:
        database: superdatabase
        host: host1.example.com
        role: role1

Дело в том, что код, который настраивает host1, может извлечь все свои соответствующие данные из host_credentials['host1.example.com'], а код, который устанавливает host2, может извлечь свои данные из host_credentials['host2.example.com'] с некоторыми поисками, например, в информации host1 в Для того, чтобы узнать пользователя и пароль для супер базы данных на хосте host1 с ролью 1.

Это работает, но это громоздко. На самом деле, достаточно громоздко, что правила брандмауэра, которые, на первый взгляд, могли также быть в этой структуре yaml, теперь находятся в другом файле столба. Более того, ничто не контролирует, чтобы yaml каждого хоста соответствовал желаемому шаблону, поэтому мы должны выполнить небольшую проверку ошибок в солт-коде.

Кроме того, когда мы когда-нибудь будем использовать мастер соли, это приведет к тому, что нам придется делиться всей информацией о хосте со всеми миньонами, что вряд ли идеально.

Цель состоит в том, чтобы каждый бит информации записывался один раз. Например, если я изменяю пароль для пользователя базы данных mysql, мне не нужно менять его дважды, один раз на сервере, снова на каждом клиенте, который использует эту базу данных. Кроме того, я хотел бы получать полудумные сообщения об ошибках, когда я поступаю неправильно. Если я скажу host4 подключиться к mysql на host2, я должен получить сообщение об ошибке, в котором будет указано что-то вроде «host4 запросил подключение к mysql на host2, но host2 не запускает сервер mysql».

На данный момент единственное лучшее решение, которое я нашел, - это написать некоторый код на Python (с использованием рендерера salt py), который генерирует пустой объект, но выполняет большую проверку в середине.

salt/codequal/init.sls

#!py

def run():
    # Do lots of error checking here.
    return {}

Любые отзывы приветствуются. Поскольку я не видел такого записанного, я подозреваю, что упустил более естественный способ делать то, что я хочу.

...