Разъяснение документации по лучшим практикам Saltstack

1215
trueCamelType

Чтобы было ясно, я не прошу «лучший способ» использовать солончак. Я понимаю, что есть множество способов использовать солончак, и то, что работает для вас, работает. Мой вопрос конкретно о странице документации по передовому опыту, найденной здесь .

Сначала я покажу вам, как выглядит моя текущая среда

(Это не относится к моей среде. Я видел этот вопрос раньше, но никогда не на stackexchange.com, как правило, на солтаке irc )

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

У меня есть три разных проекта, которые нужно развернуть, которые называются

project1, project2 и project3 .

/ И т.д. / соль / мастер

file_roots: base: - /srv/salt project1: - /srv/salt/project1 project2: - /srv/salt/project2 project3: - /srv/salt/project3  #I have three projects that I need to deploy to, and each has a dev, qa, and prod machine. nodegroups: group-project1: 'L@dev-project1,qa-project1,prod-project1' group-project2: 'L@dev-project2,qa-project2,prod-project2' group-project3: 'L@dev-project3,qa-project3,prod-project3' 

/srv/salt/top.sls

project1: 'group-project1': - match: nodegroup - oraclejava - tomcat - iptables-persistent - postgresql - apache project2: 'group-project2': - snort - pulledpork - barnyard - snorby - apache - mysql project3: 'group-project3': - match: nodegroup - oraclejava - tomcat - iptables-persistent - postgresql - apache 

Файловая структура внутри / srv / salt

содержание / срв / соль

/srv/salt/project1, project2, project3, top.sls

содержимое / srv / salt / project1

/srv/salt/project1/oraclejava, tomcat, iptables-persistent, postgresql, ges, apache

содержимое / srv / salt / project2

/srv/salt/project2/snort, pulledpork, barnyard, snorby, apache, mysql

содержимое / srv / salt / project3

/srv/salt/project3/oraclejava, tomcat, iptables-persistent, postgresql, ges, apache

Что мне не нравится в этой настройке

  1. дубликаты файлов

Если у меня есть проекты, у которых есть общие пакеты, например, у всех трех проектов есть apache, то у меня должен быть каталог apache для каждого проекта внутри их папки. Это не страшно, так как apache не настроен одинаково, но я не думаю, что я пользуюсь организацией, которая позволяет солончак.

  1. не легко читается

Как вы видите, эта установка довольно сложна для чтения. Мне нужно редактировать свой group-projectx в группах узлов в /etc/salt/masterфайле каждый раз, когда я хочу добавить миньона, связанного с конкретным проектом.

Saltstack лучшие практики

Мой вопрос заключается в том, как бы я реализовал политики передового опыта, упомянутые здесь, в среде, указанной выше. Я знаю, что есть много способов сделать это, но я действительно хочу сделать это так, чтобы это было проще для понимания и не требовало от меня создания нового каталога Apache каждый раз, когда у меня есть сервер с Apache.

Любая помощь приветствуется.

РЕДАКТИРОВАТЬ 1

Несколько предложений, которые я получил, которые не были сделаны через superuser.com, заключались в том, чтобы полностью избавиться от групп узлов и просто указать в файле top.sls, с какими миньонами идти в каком состоянии, используя тот же формат, который я использовал в файл / etc / salt / master (L @ dev-project1, qa-project1, prod-project1).

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

2

1 ответ на вопрос

2
Val F.

I'm dealing with different app configuration per server type directly at the top file.

# per server hostname : ie. base: 'websrv*': - oraclejava - tomcat - iptables-persistent - postgresql - apache 'monsrv*': - snort - pulledpork - barnyard - snorby - apache - mysql 

If your minions naming doesn't allow you to classify them based on regex, you can do the same with grains.

# per server grains : ie. base: 'G@role:websrv': # or even a custom grain like 'G@project:1' - oraclejava - tomcat - iptables-persistent - postgresql - apache 'G@role:monitoring': # or even a custom grain like 'G@project:1' - snort - pulledpork - barnyard - snorby - apache - mysql 

Then I do the same thing for my pillar data, allowing me to assign different pillars to some hosts so that is the only duplicate data I have in Salt, with the same pillar keys but different values to configure my environment as I need. I have then let's say one apache state and anything that is environment specific in it is rendered with the value in my pillar.

In your pillar, you could have for example :

/top.sls /apache / | init.sls | project1.sls | project2.sls | project3.sls