feat: Initial roles
This commit is contained in:
28
justfile
28
justfile
@@ -1,13 +1,29 @@
|
|||||||
work_dir := "/tmp/hpa-playbook-tmp"
|
[private]
|
||||||
|
default:
|
||||||
|
just --list
|
||||||
|
|
||||||
|
# Run the playbook with the passed in arguments.
|
||||||
|
[group('plays')]
|
||||||
run-playbook *ARGS:
|
run-playbook *ARGS:
|
||||||
@ansible-playbook ./main.yml \
|
@ansible-playbook ./main.yml \
|
||||||
--extra-vars output_dir={{work_dir}} \
|
|
||||||
{{ARGS}}
|
{{ARGS}}
|
||||||
|
|
||||||
|
# Run the repo-template option in the `dir` with the passed in arguements.
|
||||||
|
[group('plays')]
|
||||||
|
create-repo-template dir *ARGS:
|
||||||
|
@just run-playbook \
|
||||||
|
--tags repo-template \
|
||||||
|
--extra-vars output_dir={{dir}} \
|
||||||
|
{{ARGS}}
|
||||||
|
|
||||||
|
# Run the build-project option in the `dir` with the passed in arguements.
|
||||||
|
[group('plays')]
|
||||||
|
build-project dir *ARGS:
|
||||||
|
@just run-playbook \
|
||||||
|
--tags build-project \
|
||||||
|
--extra-vars project_dir={{dir}} \
|
||||||
|
{{ARGS}}
|
||||||
|
|
||||||
|
[group('test')]
|
||||||
test *ARGS:
|
test *ARGS:
|
||||||
@ansible-playbook ./test/test.yml {{ARGS}}
|
@ansible-playbook ./test/test.yml {{ARGS}}
|
||||||
|
|
||||||
[group("utilities")]
|
|
||||||
clean:
|
|
||||||
@rm -rf {{work_dir}}
|
|
||||||
|
|||||||
11
main.yml
11
main.yml
@@ -2,6 +2,15 @@
|
|||||||
- name: HPA Playbook
|
- name: HPA Playbook
|
||||||
hosts: all
|
hosts: all
|
||||||
roles:
|
roles:
|
||||||
- role: "repo_template"
|
- role: repo-template
|
||||||
tags:
|
tags:
|
||||||
|
- repo-template
|
||||||
|
- never # makes it so a tag must be supplied to run.
|
||||||
|
- role: build-project
|
||||||
|
tags:
|
||||||
|
- build-project
|
||||||
|
- never # makes it so a tag must be supplied to run.
|
||||||
|
- role: setup-project
|
||||||
|
tags:
|
||||||
|
- setup-project
|
||||||
- never # makes it so a tag must be supplied to run.
|
- never # makes it so a tag must be supplied to run.
|
||||||
|
|||||||
31
roles/build-project/defaults/main.yml
Normal file
31
roles/build-project/defaults/main.yml
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
---
|
||||||
|
build_dir_name: ".build"
|
||||||
|
build_dir: "{{ project_dir }}/{{ build_dir_name }}"
|
||||||
|
|
||||||
|
project_dir: "{{ lookup('env', 'PWD') }}"
|
||||||
|
project_vars_dir: "{{ project_dir }}"
|
||||||
|
|
||||||
|
# template_dir:
|
||||||
|
# path: "/path/to/template/dir
|
||||||
|
# vars: "repo_vars"
|
||||||
|
# repo: (optional if using a repo as a template)
|
||||||
|
template_dir:
|
||||||
|
path: "/path/to/template/dir"
|
||||||
|
vars: "repo_vars"
|
||||||
|
|
||||||
|
# When using a repository as a template dir. In general, it's
|
||||||
|
# probably best to pin to a particular version of the repo template
|
||||||
|
# instead of a branch.
|
||||||
|
#
|
||||||
|
# repo:
|
||||||
|
# url: "https://example.com/repo.git"
|
||||||
|
# version: "main"
|
||||||
|
repo: {}
|
||||||
|
|
||||||
|
copy_on_build:
|
||||||
|
- "{{ template_dir.path }}/head.tex"
|
||||||
|
- "{{ template_dir.path }}/Definitions.md"
|
||||||
|
|
||||||
|
template_on_build:
|
||||||
|
- "{{ project_dir }}/Report.md"
|
||||||
|
- "{{ template_dir.path }}/footer.tex"
|
||||||
46
roles/build-project/tasks/main.yml
Normal file
46
roles/build-project/tasks/main.yml
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
---
|
||||||
|
- name: Starting build project.
|
||||||
|
ansible.builtin.debug:
|
||||||
|
msg: "Build dir: {{ build_dir }}"
|
||||||
|
|
||||||
|
- name: Load project vars.
|
||||||
|
ansible.builtin.include_vars:
|
||||||
|
dir: "{{ project_vars_dir }}"
|
||||||
|
ignore_unknown_extensions: true
|
||||||
|
|
||||||
|
- name: Ensure build directory exists.
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "{{ build_dir }}"
|
||||||
|
state: directory
|
||||||
|
|
||||||
|
- name: Ensure template repo.
|
||||||
|
ansible.builtin.git:
|
||||||
|
repo: "{{ template_dir.repo.url }}"
|
||||||
|
dest: "{{ template_dir.path }}"
|
||||||
|
version: "{{ template_dir.repo.version | default('main') }}"
|
||||||
|
when: template_dir.repo.url is defined
|
||||||
|
|
||||||
|
- name: Check for repo vars directory.
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: "{{ template_dir.path }}/{{ template_dir.vars }}"
|
||||||
|
register: repo_vars
|
||||||
|
|
||||||
|
- name: Load repo vars if available.
|
||||||
|
ansible.builtin.include_vars:
|
||||||
|
dir: "{{ template_dir.path }}/{{ template_dir.vars }}"
|
||||||
|
when: repo_vars.stat.isdir is defined
|
||||||
|
|
||||||
|
|
||||||
|
- name: Copy build files.
|
||||||
|
ansible.builtin.copy:
|
||||||
|
src: "{{ item }}"
|
||||||
|
dest: "{{ build_dir }}/{{ item | basename }}"
|
||||||
|
mode: '0600'
|
||||||
|
with_items: "{{ copy_on_build }}"
|
||||||
|
|
||||||
|
- name: Template build files.
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: "{{ item }}"
|
||||||
|
dest: "{{ build_dir }}/{{ item | basename }}"
|
||||||
|
mode: '0600'
|
||||||
|
with_items: "{{ template_on_build }}"
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
---
|
|
||||||
|
|
||||||
# Variables for use with the copy_if_not_exists role.
|
|
||||||
source: ""
|
|
||||||
destination: ""
|
|
||||||
mode: '0600'
|
|
||||||
@@ -2,3 +2,4 @@
|
|||||||
|
|
||||||
output_dir: "{{ lookup('env', 'PWD') }}"
|
output_dir: "{{ lookup('env', 'PWD') }}"
|
||||||
use_vault: true
|
use_vault: true
|
||||||
|
repo_vars_dir: "repo_vars"
|
||||||
5
roles/repo-template/files/vars.repo.yml
Normal file
5
roles/repo-template/files/vars.repo.yml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
on_setup:
|
||||||
|
- "Report.md"
|
||||||
|
- "vars.yml"
|
||||||
|
- "vault.yml" # optional if using vault.
|
||||||
@@ -2,35 +2,34 @@
|
|||||||
- name: Starting repo template role.
|
- name: Starting repo template role.
|
||||||
ansible.builtin.debug:
|
ansible.builtin.debug:
|
||||||
msg: "Output directory: {{ output_dir }}"
|
msg: "Output directory: {{ output_dir }}"
|
||||||
tags:
|
|
||||||
- "repo-template"
|
|
||||||
|
|
||||||
- name: Ensure output directory exists.
|
- name: Ensure output directory exists.
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
path: "{{ output_dir }}"
|
path: "{{ output_dir }}"
|
||||||
state: directory
|
state: directory
|
||||||
tags:
|
|
||||||
- repo-template
|
- name: Ensure repo vars directory.
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "{{ output_dir }}/{{ repo_vars_dir }}"
|
||||||
|
state: directory
|
||||||
|
|
||||||
- name: Copy general files.
|
- name: Copy general files.
|
||||||
ansible.builtin.copy:
|
ansible.builtin.copy:
|
||||||
src: "files/{{ item }}"
|
src: "files/{{ item.src | default(item) }}"
|
||||||
dest: "{{ output_dir }}/{{ item }}"
|
dest: "{{ output_dir }}/{{ item.dest | default(item) }}"
|
||||||
with_items:
|
with_items:
|
||||||
- "Definitions.md"
|
- "Definitions.md"
|
||||||
- "Report.md"
|
- "Report.md"
|
||||||
- "head.tex"
|
- "head.tex"
|
||||||
- "footer.tex"
|
- "footer.tex"
|
||||||
tags:
|
- src: "vars.repo.yml"
|
||||||
- "repo-template"
|
dest: "{{ repo_vars_dir }}/vars.yml"
|
||||||
|
|
||||||
- name: Copy basic vars files.
|
- name: Copy basic vars files.
|
||||||
ansible.builtin.copy:
|
ansible.builtin.copy:
|
||||||
src: "files/vars.default.yml"
|
src: "files/vars.default.yml"
|
||||||
dest: "{{ output_dir }}/vars.yml"
|
dest: "{{ output_dir }}/vars.yml"
|
||||||
when: "not 'with-vault' in ansible_run_tags"
|
when: not 'with-vault' in ansible_run_tags or use_vault | bool == False
|
||||||
tags:
|
|
||||||
- "repo-template"
|
|
||||||
|
|
||||||
- name: Copy vault and vars files.
|
- name: Copy vault and vars files.
|
||||||
ansible.builtin.copy:
|
ansible.builtin.copy:
|
||||||
@@ -41,6 +40,7 @@
|
|||||||
dest: "vars.yml"
|
dest: "vars.yml"
|
||||||
- src: "vault.default.yml"
|
- src: "vault.default.yml"
|
||||||
dest: "vault.yml"
|
dest: "vault.yml"
|
||||||
|
when: "'with_vault' in ansible_run_tags or use_vault | bool == True"
|
||||||
tags:
|
tags:
|
||||||
- "with-vault"
|
- with-vault
|
||||||
- never
|
- never
|
||||||
@@ -1,11 +1,27 @@
|
|||||||
---
|
---
|
||||||
template_repo:
|
|
||||||
repo: "https://example.com/repo.git"
|
|
||||||
version: "main"
|
|
||||||
dest: "/path/to/clone"
|
|
||||||
|
|
||||||
|
# template_dir:
|
||||||
|
# path: "/path/to/template/dir
|
||||||
|
# vars: "repo_vars"
|
||||||
|
# repo: (optional if using a repo as a template)
|
||||||
|
template_dir:
|
||||||
|
path: "/path/to/template/dir"
|
||||||
|
vars: "repo_vars"
|
||||||
|
|
||||||
|
# When using a repository as a template dir. In general, it's
|
||||||
|
# probably best to pin to a particular version of the repo template
|
||||||
|
# instead of a branch.
|
||||||
|
#
|
||||||
|
# repo:
|
||||||
|
# url: "https://example.com/repo.git"
|
||||||
|
# version: "main"
|
||||||
|
repo: {}
|
||||||
|
|
||||||
|
# The output directory to setup a project in.
|
||||||
output_dir: "{{ lookup('env', 'PWD') }}"
|
output_dir: "{{ lookup('env', 'PWD') }}"
|
||||||
|
|
||||||
files_to_copy:
|
# Files that are copied from the template directory to the output
|
||||||
|
# directory.
|
||||||
|
copy_on_setup:
|
||||||
- "Report.md"
|
- "Report.md"
|
||||||
- "vars.yml"
|
- "vars.yml"
|
||||||
|
|||||||
@@ -1,13 +1,15 @@
|
|||||||
---
|
---
|
||||||
# Check if a file exists at the destination already, copy it if not.
|
# NOTE: This is just an internal task that checks if a file exists
|
||||||
- name: "Check if {{ destination | basename }} exists."
|
# before copying, to prevent changes from being overwritten.
|
||||||
|
#
|
||||||
|
- name: "Check if {{ destination | basename }} exists already."
|
||||||
ansible.builtin.stat:
|
ansible.builtin.stat:
|
||||||
path: "{{ destination }}"
|
path: "{{ destination }}"
|
||||||
register: filestat
|
register: filestat
|
||||||
tags:
|
tags:
|
||||||
- always
|
- always
|
||||||
|
|
||||||
- name: "Copy {{ source }} file to {{ destination }}."
|
- name: "Copy {{ destination | basename }} file."
|
||||||
ansible.builtin.copy:
|
ansible.builtin.copy:
|
||||||
src: "{{ source }}"
|
src: "{{ source }}"
|
||||||
dest: "{{ destination }}"
|
dest: "{{ destination }}"
|
||||||
@@ -2,13 +2,41 @@
|
|||||||
- name: Starting setup project.
|
- name: Starting setup project.
|
||||||
ansible.builtin.debug:
|
ansible.builtin.debug:
|
||||||
msg: "Output dir: {{ output_dir }}"
|
msg: "Output dir: {{ output_dir }}"
|
||||||
tags:
|
|
||||||
- setup-project
|
- name: Ensure output directory exists.
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "{{ output_dir }}"
|
||||||
|
state: directory
|
||||||
|
|
||||||
- name: Ensure repo.
|
- name: Ensure repo.
|
||||||
ansible.builtin.git:
|
ansible.builtin.git:
|
||||||
repo: "{{ template_repo.repo }}"
|
repo: "{{ template_dir.repo.url }}"
|
||||||
dest: "{{ template_repo.dest }}"
|
dest: "{{ template_dir.path }}"
|
||||||
version: "{{ template_repo.version }}"
|
version: "{{ template_dir.repo.version | default('main') }}"
|
||||||
|
when: template_dir.repo.url is defined
|
||||||
|
|
||||||
|
- name: Check for repo vars directory.
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: "{{ template_dir.path }}/{{ template_dir.vars }}"
|
||||||
|
register: repo_vars
|
||||||
|
|
||||||
|
- name: Load repo vars if available.
|
||||||
|
ansible.builtin.include_vars:
|
||||||
|
dir: "{{ template_dir.path }}/{{ template_dir.vars }}"
|
||||||
|
when: repo_vars.stat.isdir is defined
|
||||||
|
|
||||||
|
- name: Debug on_setup.
|
||||||
|
ansible.builtin.debug:
|
||||||
|
msg: "On setup vars: {{ copy_on_setup }}"
|
||||||
tags:
|
tags:
|
||||||
- setup-project
|
- debug
|
||||||
|
- never
|
||||||
|
|
||||||
|
- name: Copy project files.
|
||||||
|
ansible.builtin.include_tasks:
|
||||||
|
file: "copy_if_not_exists.yml"
|
||||||
|
vars:
|
||||||
|
source: "{{ template_dir.path }}/{{ item }}"
|
||||||
|
destination: "{{ output_dir }}/{{ item }}"
|
||||||
|
mode: '0600'
|
||||||
|
with_items: "{{ copy_on_setup }}"
|
||||||
|
|||||||
@@ -4,13 +4,24 @@
|
|||||||
roles:
|
roles:
|
||||||
- role: setup-project
|
- role: setup-project
|
||||||
tags:
|
tags:
|
||||||
|
- setup-project
|
||||||
- never # force passing tags to run.
|
- never # force passing tags to run.
|
||||||
vars:
|
vars:
|
||||||
template_repo:
|
template_dir:
|
||||||
repo: "https://git.housh.dev/michael/ansible-hpa-playbook.git"
|
path: "/tmp/hpa-playbook-tmp"
|
||||||
dest: "/tmp/playbook-clone"
|
vars: "repo_vars"
|
||||||
version: "main"
|
output_dir: "/tmp/hpa-setup-project-tmp"
|
||||||
|
|
||||||
- role: repo_template
|
- role: repo-template
|
||||||
tags:
|
tags:
|
||||||
|
- repo-template
|
||||||
- never # force passing tags to run.
|
- never # force passing tags to run.
|
||||||
|
- role: build-project
|
||||||
|
tags:
|
||||||
|
- build-project
|
||||||
|
- never # force passing tags to run.
|
||||||
|
vars:
|
||||||
|
template_dir:
|
||||||
|
path: "/tmp/hpa-playbook-tmp"
|
||||||
|
vars: "repo_vars"
|
||||||
|
project_dir: "/tmp/hpa-setup-project-tmp"
|
||||||
|
|||||||
Reference in New Issue
Block a user