Initial commit

This commit is contained in:
Neil Hanlon 2021-05-29 15:12:57 -04:00
commit 6b1d1f9492
16 changed files with 323 additions and 0 deletions

5
.ansible-lint Normal file
View File

@ -0,0 +1,5 @@
warn_list:
- '204' # Lines should be less than 160 characters
- '701' # meta/main.yml should contain relevant info
skip_list:
- '106' # Role name must match ^[a-z][a-z0-9_]+$ pattern

33
.pre-commit-config.yaml Normal file
View File

@ -0,0 +1,33 @@
---
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v3.3.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-added-large-files
- id: check-case-conflict
- id: check-executables-have-shebangs
- id: check-json
- id: pretty-format-json
- repo: local
hooks:
- id: ansible-lint
name: Ansible-lint
description: This hook runs ansible-lint.
entry: ansible-lint --force-color
language: python
# do not pass files to ansible-lint, see:
# https://github.com/ansible/ansible-lint/issues/611
pass_filenames: false
always_run: true
- repo: https://github.com/adrienverge/yamllint.git
rev: v1.24.2
hooks:
- id: yamllint
files: \.(yaml|yml)$
types: [file, yaml]
entry: yamllint

11
.yamllint Normal file
View File

@ -0,0 +1,11 @@
---
extends: default
rules:
line-length:
max: 140
level: warning
ignore: |
.travis.yml
.github

18
CHANGELOG.md Normal file
View File

@ -0,0 +1,18 @@
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
- what do we need to do
## [0.0.1] - 2020-12-13
### Added
- Initial
### Changed
- None
### Removed
- None

21
LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2019 Darkbat91
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

40
README.md Normal file
View File

@ -0,0 +1,40 @@
CI Badge
# Ansible template role
basic Role to use going forward because I forget pieces
## Getting started
Ensure all dependencies are installed and then follow the below process
1. `git clone repo` Get the development repository
2. `pre-commit install` Install the pre-commit hooks
3. Make edits as explained in the customization section
4. `pre-commit` Make sure existing code is good
5. `do development` Dont ask me :D
6. `pre-commit` Make sure the edits are good to go
7. `molecule converge`
## Dependencies
This repo expects 3 things installed on the local machine
1. [pre-commit](https://pre-commit.com/) Methodology to test yaml style
2. [ansible-lint](https://github.com/ansible-community/ansible-lint) lint ansible code for best practices
3. [yamllint](https://github.com/adrienverge/yamllint) Ensures all yaml is well formed
### Customization
There are a few files that are required to be updated when using this template
1. [molecule/requirements.yml](molecule/requirements.yml) - Update with any required roles or collections
2. [molecule/default/converge.yml](molecule/default/converge.yml) - update with new role name
3. [molecule/default/molecule.yml](molecule/default/molecule.yml) - update with desired distributions and extra playbooks
4. [github](github) - Rename to `.github` and push, this will set up yamllint, ansible-lint and a CI check job for the `main` branch
1. NOTE: If you are using a SAML token this may fail. You can created the files within the Github web app
### Optional
The github actions are configured to automatically run the molecule tests but if you want to load them locally you will also need molecule installed on the development machine
## Advanced
There are numerous other options within the [defaults/main.yml](./defaults/main.yml) that can change other parts of the behavior of the system
## Changelog
The [changelog](./CHANGELOG.md) is stored externally

2
defaults/main.yml Normal file
View File

@ -0,0 +1,2 @@
---
# ansible default variables - most variables live here

View File

@ -0,0 +1,33 @@
---
# https://github.com/ansible/ansible-lint-action
name: Ansible Lint
on:
push:
paths:
- '**.yml'
- '**.yaml'
jobs:
ansible-lint:
runs-on: ubuntu-latest
timeout-minutes: 7
steps:
- name: Git checkout
uses: actions/checkout@v2
- name: Add installed collections in Ansible configuration
run: |
echo '[defaults]' > ansible.cfg
echo 'collections_paths = ./collections' >> ansible.cfg
- name: Install role requirements
run: ansible-galaxy role install -r molecule/requirements.yml
# TODO: Figure out how to get this not to error so this action is universal
# - name: Install collection requirements
# run: ansible-galaxy collection install -r molecule/requirements.yml
- name: Ansible Lint
uses: rocky-linux/ansible-lint-action@master
with:
args: "--exclude .github"

39
github/workflows/main.yml Normal file
View File

@ -0,0 +1,39 @@
---
name: CI
'on':
pull_request:
push:
branches:
- main
schedule:
- cron: "30 6 * * 2"
jobs:
molecule:
name: Molecule
runs-on: ubuntu-latest
strategy:
matrix:
include:
- distro: centos7
playbook: converge.yml
steps:
- name: Check out the codebase.
uses: actions/checkout@v2
- name: Set up Python 3.
uses: actions/setup-python@v2
with:
python-version: '3.x'
- name: Install test dependencies.
run: pip3 install ansible molecule[docker] docker
- name: Run Molecule tests.
run: molecule test
env:
PY_COLORS: '1'
ANSIBLE_FORCE_COLOR: '1'
MOLECULE_DISTRO: ${{ matrix.distro }}
MOLECULE_PLAYBOOK: ${{ matrix.playbook }}

View File

@ -0,0 +1,21 @@
---
# https://github.com/ibiqlik/action-yamllint
name: YAML Lint
on:
push:
paths:
- '**.yml'
- '**.yaml'
jobs:
yamllint:
runs-on: ubuntu-latest
timeout-minutes: 1
steps:
- name: Git checkout
uses: actions/checkout@v2
- name: yamllint
uses: ibiqlik/action-yamllint@v3

53
meta/main.yml Normal file
View File

@ -0,0 +1,53 @@
galaxy_info:
author: your name
description: your role description
company: your company (optional)
# If the issue tracker for your role is not on github, uncomment the
# next line and provide a value
# issue_tracker_url: http://example.com/issue/tracker
# Choose a valid license ID from https://spdx.org - some suggested licenses:
# - BSD-3-Clause (default)
# - MIT
# - GPL-2.0-or-later
# - GPL-3.0-only
# - Apache-2.0
# - CC-BY-4.0
license: MIT
min_ansible_version: 2.8
# If this a Container Enabled role, provide the minimum Ansible Container version.
# min_ansible_container_version:
#
# Provide a list of supported platforms, and for each platform a list of versions.
# If you don't wish to enumerate all versions for a particular platform, use 'all'.
# To view available platforms and versions (or releases), visit:
# https://galaxy.ansible.com/api/v1/platforms/
#
# platforms:
# - name: Fedora
# versions:
# - all
# - 25
# - name: SomePlatform
# versions:
# - all
# - 1.0
# - 7
# - 99.99
galaxy_tags: []
# List tags for your role here, one per line. A tag is a keyword that describes
# and categorizes the role. Users find roles by searching for tags. Be sure to
# remove the '[]' above, if you add tags to this list.
#
# NOTE: A tag is limited to a single word comprised of alphanumeric characters.
# Maximum 20 tags per role.
dependencies: []
# List your role dependencies here, one per line. Be sure to remove the '[]' above,
# if you add dependencies to this list.

View File

@ -0,0 +1,13 @@
---
- name: Converge
hosts: all
become: true
pre_tasks:
- name: Update apt cache.
apt: update_cache=true cache_valid_time=600
when: ansible_os_family == 'Debian'
changed_when: false
roles:
- role: ansible-role-mycoolrole

View File

@ -0,0 +1,26 @@
---
dependency:
name: galaxy
options:
ignore-certs: true
role-file: molecule/requirements.yml
driver:
name: docker
# lint: |
# set -e
# yamllint .
# ansible-lint
platforms:
- name: instance
image: "geerlingguy/docker-${MOLECULE_DISTRO:-centos7}-ansible:latest"
command: ${MOLECULE_DOCKER_COMMAND:-""}
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:ro
privileged: true
pre_build_image: true
provisioner:
name: ansible
playbooks:
converge: ${MOLECULE_PLAYBOOK:-converge.yml}

View File

@ -0,0 +1,3 @@
---
roles:
## Deps go here Should be very short and only if Absolutely needed

2
tasks/main.yml Normal file
View File

@ -0,0 +1,2 @@
---
# tasks

3
vars/main.yml Normal file
View File

@ -0,0 +1,3 @@
---
# vars file - Nothing should really go here but dynamic imports
# and truely static items