86 lines
3.2 KiB
Plaintext
86 lines
3.2 KiB
Plaintext
{%- set processed_gitdirs = {} %}
|
|
{%- set processed_gitdir_envs = [] %}
|
|
{%- set processed_basedirs = [] %}
|
|
|
|
{%- from "salt/map.jinja" import formulas_settings with context %}
|
|
{%- from "salt/formulas.jinja" import formulas_git_opt with context %}
|
|
{%- from "salt/formulas.jinja" import formulas_opts_for_git_latest with context %}
|
|
|
|
## from template-formula
|
|
{%- set tplroot = tpldir.split('/')[0] %}
|
|
{%- from tplroot ~ "/map.jinja" import salt_settings with context %}
|
|
|
|
# Loop over all formulas listed in pillar data
|
|
{%- for env, entries in salt['pillar.get']('salt_formulas:list', {}).items() %}
|
|
{%- for entry in entries %}
|
|
{%- set f_name = entry | first if entry is mapping else entry %}
|
|
{%- set f_opts = entry[f_name] if entry is mapping else {} %}
|
|
|
|
{%- set basedir = formulas_git_opt(env, 'basedir')|load_yaml %}
|
|
{%- set gitdir = '{0}/{1}'.format(basedir, f_name) %}
|
|
{%- set update = formulas_git_opt(env, 'update')|load_yaml %}
|
|
|
|
{%- if formulas_settings.checkout_orig_branch %}
|
|
{%- if not salt['file.directory_exists']('{0}/{1}'.format(gitdir, '.git')) %}
|
|
{%- set gitdir_branch = '' %}
|
|
{%- else %}
|
|
{%- set gitdir_branch = salt['git.current_branch'](gitdir) %}
|
|
{%- endif %}
|
|
{%- do processed_gitdirs.update({gitdir:gitdir_branch}) %}
|
|
{%- endif %}
|
|
|
|
# Setup the directory hosting the Git repository
|
|
{%- if basedir not in processed_basedirs %}
|
|
{%- do processed_basedirs.append(basedir) %}
|
|
{{ basedir }}:
|
|
file.directory:
|
|
- parallel: {{ grains['saltversioninfo'] >= [2017, 7, 0] }}
|
|
{%- for key, value in salt['pillar.get']('salt_formulas:basedir_opts',
|
|
{'makedirs': True}).items() %}
|
|
- {{ key }}: {{ value }}
|
|
- user: {{ salt_settings.rootuser }}
|
|
- group: {{ salt_settings.rootgroup }}
|
|
{%- endfor %}
|
|
{%- endif %}
|
|
|
|
# Setup the formula Git repository
|
|
{%- set gitdir_env = '{0}_{1}'.format(gitdir, env) %}
|
|
{%- if gitdir_env not in processed_gitdir_envs %}
|
|
{%- do processed_gitdir_envs.append(gitdir_env) %}
|
|
{%- set options = formulas_opts_for_git_latest(env)|load_yaml %}
|
|
{%- do options.update(f_opts) %}
|
|
{%- set baseurl = formulas_git_opt(env, 'baseurl')|load_yaml %}
|
|
|
|
{{ gitdir_env }}:
|
|
git.latest:
|
|
- name: {{ baseurl }}/{{ f_name }}.git
|
|
- parallel: {{ grains['saltversioninfo'] >= [2017, 7, 0] }}
|
|
- target: {{ gitdir }}
|
|
{%- for key, value in options.items() %}
|
|
- {{ key }}: {{ value }}
|
|
{%- endfor %}
|
|
{%- if not update %}
|
|
- unless: test -e {{ gitdir }} >/dev/null 2>&1
|
|
{%- endif %}
|
|
{%- endif %}
|
|
{%- endfor %}
|
|
{%- endfor %}
|
|
|
|
{%- if formulas_settings.checkout_orig_branch %}
|
|
# For each directory processed, explicitly checkout the original branch before
|
|
# the `git.latest` state ran
|
|
{%- for gitdir, original_branch in processed_gitdirs.items() %}
|
|
{%- if original_branch %}
|
|
{%- set gitdir_user = salt['file.get_user'](gitdir) %}
|
|
checkout_original_branch_for_{{ gitdir }}:
|
|
module.run:
|
|
- name: git.checkout
|
|
- order: last
|
|
- cwd: {{ gitdir }}
|
|
- rev: {{ original_branch }}
|
|
- user: {{ gitdir_user }}
|
|
- unless: test "$(cd {{ gitdir }}; git rev-parse --abbrev-ref HEAD)" = "{{ original_branch }}"
|
|
{%- endif %}
|
|
{%- endfor %}
|
|
{%- endif %}
|