Added automated configuration of feature branches for saltmaster

This commit is contained in:
Actaeus Curabitur 2022-09-08 07:12:27 -05:00
parent 4d631dfdf1
commit c2364c0a9c
8 changed files with 76 additions and 38 deletions

View file

@ -1,17 +1,18 @@
{%- set branches=salt.cmd.shell('git ls-remote https://git.actcur.com/actcur/salt.git | grep -o -P "(?<=refs/heads/).*" | grep -Pv "(^temp$)|(^history$)"').split('\n') -%}
branches:
saltmaster:
{%- for branch in branches %}
- {{branch}}
{%- endfor %}
git: git:
salt: {%- for branch in branches %}
salt_{{branch}}:
repo: "ssh://gitea@git.actcur.com:5022/actcur/salt.git" repo: "ssh://gitea@git.actcur.com:5022/actcur/salt.git"
path: "/srv/salt/prod" path: "/srv/salt/{{branch}}"
branch: "master" branch: "{{branch}}"
key: "git_actcur" key: "git_actcur"
force: true force: {{ "True" if (branch == "prod" or branch == "qual") else "false" }}
email: "actcur@actcur.com"
name: "Actaeus Curabitur"
salt_dev:
repo: "ssh://gitea@git.actcur.com:5022/actcur/salt.git"
path: "/srv/salt/dev"
branch: "dev"
key: "git_actcur"
force: true
email: "actcur@actcur.com" email: "actcur@actcur.com"
name: "Actaeus Curabitur" name: "Actaeus Curabitur"
{%- endfor %}

View file

@ -1,8 +1,7 @@
prod: {%- set branches=salt.cmd.shell('git ls-remote https://git.actcur.com/actcur/salt.git | grep -o -P "(?<=refs/heads/).*" | grep -Pv "(^temp$)|(^history$)"').split('\n') -%}
'*': {%- for branch in branches %}
- roles {{branch}}:
- servers
dev:
'*': '*':
- roles - roles
- servers - servers
{%- endfor %}

View file

@ -3,17 +3,17 @@ git fetch --all;
#copy dev to history to ensure we don't lose changes if something goes wrong #copy dev to history to ensure we don't lose changes if something goes wrong
git checkout history; git checkout history;
git reset --hard dev; git reset --hard qual;
git push --force; git push --force;
#merge to master #merge to master
git checkout -B master origin/master; git checkout -B prod origin/master;
git merge --squash dev; git merge --squash qual;
git commit -am "$cm"; git commit -am "$cm";
git push; git push;
#clean dev #clean dev
git checkout dev; git checkout qual;
git reset --hard master; git reset --hard prod;
git push --force; git push --force;
git reset --hard origin/dev; git reset --hard origin/qual;

View file

@ -1,5 +1,4 @@
{%- set os=grains['os'] -%} {%- set os=grains['os'] -%}
salt-master: salt-master:
{%- if os=="CentOS" or os=="RedHat" %} {%- if os=="CentOS" or os=="RedHat" %}
pkg.installed: [] pkg.installed: []
@ -19,6 +18,7 @@ salt-master:
- user: root - user: root
- group: root - group: root
- mode: 644 - mode: 644
- template: jinja
/srv/salt/prod/states/pillars: /srv/salt/prod/states/pillars:
file.symlink: file.symlink:

View file

@ -422,12 +422,14 @@ state_output: terse
# - /srv/salt/prod/states # - /srv/salt/prod/states
# #
file_roots: file_roots:
base: {%- if pillar['branches'] is defined -%}
- /srv/salt/prod/states {%- if pillar['branches']['saltmaster'] is defined -%}
prod: {%- for branch in pillar['branches']['saltmaster'] %}
- /srv/salt/prod/states {{branch}}:
dev: - /srv/salt/{{branch}}/states
- /srv/salt/dev/states {%- endfor %}
{%- endif %}
{%- endif %}
# #
# When using multiple environments, each with their own top file, the # When using multiple environments, each with their own top file, the
@ -439,7 +441,15 @@ file_roots:
# To specify the order in which environments are merged, set the ordering # To specify the order in which environments are merged, set the ordering
# in the env_order option. Given a conflict, the last matching value will # in the env_order option. Given a conflict, the last matching value will
# win. # win.
env_order: ['base', 'dev', 'prod'] {% if pillar['branches'] is defined -%}
{%- if pillar['branches']['saltmaster'] is defined -%}
env_order: [
{%- for branch in pillar['branches']['saltmaster'] -%}
'{{-branch}}',
{%- endfor -%}
'null']
{%- endif %}
{%- endif %}
# If top_file_merging_strategy is set to 'same' and an environment does not # If top_file_merging_strategy is set to 'same' and an environment does not
# contain a top file, the top file in the environment specified by default_top # contain a top file, the top file in the environment specified by default_top
@ -560,12 +570,14 @@ hash_type: sha256
# - /srv/pillar # - /srv/pillar
# #
pillar_roots: pillar_roots:
base: {%- if pillar['branches'] is defined -%}
- /srv/salt/prod/pillars {%- if pillar['branches']['saltmaster'] is defined -%}
prod: {%- for branch in pillar['branches']['saltmaster'] %}
- /srv/salt/prod/pillars {{branch}}:
dev: - /srv/salt/{{branch}}/pillars
- /srv/salt/dev/pillars {%- endfor %}
{%- endif %}
{%- endif %}
# #
#ext_pillar: #ext_pillar:
# - hiera: /etc/hiera.yaml # - hiera: /etc/hiera.yaml

18
states/test Normal file
View file

@ -0,0 +1,18 @@
{%- set branches=salt.cmd.shell('git ls-remote https://git.actcur.com/actcur/salt.git | grep -o -P "(?<=refs/heads/).*" | grep -Pv "(^temp$)|(^history$)"').split('\n') -%}
branches:
saltmaster:
{%- for branch in branches %}
- {{branch}}
{%- endfor %}
git:
{%- for branch in branches %}
salt_{{branch}}:
repo: "ssh://gitea@git.actcur.com:5022/actcur/salt.git"
path: "/srv/salt/{{branch}}"
branch: "{{branch}}"
key: "git_actcur"
force: {{ "True" if branch == "prod" else "false" }}
email: "actcur@actcur.com"
name: "Actaeus Curabitur"
{%- endfor %}

4
states/test.sls Normal file
View file

@ -0,0 +1,4 @@
/test:
file.managed:
- source: salt://test
- template: jinja

View file

@ -1,6 +1,10 @@
{%- set states = salt['cp.list_states'](saltenv) -%} {%- set states = salt['cp.list_states'](saltenv) -%}
{%- set envs = ['prod','dev'] -%} {%- if pillar['branches'] is defined -%}
{%- if pillar['branches']['saltmaster'] is defined -%}
{%- set envs = pillar['branches']['saltmaster'] -%}
{%- endif -%}
{%- endif -%}
{% for env in envs %} {% for env in envs %}
{{ env }}: {{ env }}:
'os_family:RedHat': 'os_family:RedHat':