Skip to content

MaxPeal/Ansible-Playbooks-Mod

 
 

Repository files navigation

Ansible Playbooks

Ansible Lint

Collection of Ansible playbooks and roles.

Roles

WIP:

Usage

Clone this repository.

git clone https://github.com/MaxPeal/Ansible-Playbooks-Mod && cd Ansible-Playbooks-Mod

Setup

Install Ansible.

Navigate to the playbook folder.

cd Ansible-Playbooks

Set a password to encry the Ansible vault.

export VAULTPASSWORD=PASSWORD

Create a password file.

echo "$VAULTPASSWORD" > .vault_pass

Make it executable.

chmod 600 .vault_pass

Create a log file and own it.

sudo touch /var/log/ansible.log && sudo chown $USER: /var/log/ansible.log

Install jmespath and dnspython with pip.

pip install jmespath dnspython

Install the ansible community package.

ansible-galaxy collection install community.general

Create an inventory and configure a role.

Deployment

List inventory

ansible-inventory --list -y -i inventories/setup | grep -E 'ansible_host'

Test connection

ansible all -m ping -i inventories/odoo

Deploy multiple inventories

ansible-playbook -i inventories/setup -i inventories/odoo -i inventories/proxy odoo.yml

Deploy Odoo stack

ansible-playbook -i inventories/odoo odoo.yml

Deploy role only

ansible-playbook -i inventories/odoo odoo.yml -t postgres

Deploy without dependencies

ansible-playbook -i inventories/odoo odoo.yml --skip-tags depends

Deploy role to specific host

ansible-playbook -i inventories/odoo odoo.yml -t docker -l host.example.com

Deploy role to specific group with non-default user

ansible-playbook -i inventories/odoo docker.yml -t docker -l europe -u username

Clean Odoo stack

ansible-playbook -i inventories/odoo clean.yml -t odoo,odoo-volume,odoo-data-dir,postgres,postgres-volume

Clean role only

ansible-playbook -i inventories/odoo clean.yml -t docker-network

Clean dry run

ansible-playbook -i inventories/odoo odoo.yml -t odoo --check

Install odoo-scripts and odoo-apps locally

ansible-playbook -i inventories/odoo localhost.yml --skip-tags depends

List all Odoo databses.

ansible all -i inventories/odoo -a "docker-odoo-list -c {{ odoo_hostname }}"

Docs

Quality

Lint the project using Ansible lint.

ansible-lint *.yml

Config

Whenever possible use env variables to configure the container.

Env Config

    env:
      POSTGRES_USER: "{{ postgres_user }}"
      POSTGRES_PASSWORD: "{{ postgres_password }}"
      POSTGRES_DB: "{{ postgres_db }}"

Data

To persist data use Docker volumes.

Volume Mount

Mount the folder without subfolder.

    volumes:
      - "{{ postgres_volume_name }}:/var/lib/postgresql/data"

For Ansible config files use file mounts.

Bind Mount

    volumes:
      - "{{ nginx_data_dir }}/:/etc/nginx/conf.d/:ro"

Guidelines

Every role folder must contain a README.md file.

Mark fix-me-comments with # FIXME: <your text>.

Naming

Template for role vars:

# Basics:
# Url to Docker repsitory
ROLENAME_image: URL
ROLENAME_hostname: SHORTNAME + COUNTER
ROLENAME_port:
ROLENAME_volume_name: SHORTNAME_data + COUNTER
ROLENAME_data_dir: /usr/share/SHORTNAME + COUNTER
# Database connection:
ROLENAME_db_type: mysql
ROLENAME_db_user:
ROLENAME_db_password: "{{ vault_ROLENAME_db_password }}"
ROLENAME_db_hostname:
ROLENAME_db_name:
# Credentials user:
ROLENAME_user:
ROLENAME_password: "{{ vault_ROLENAME_password }}"
# Credentials admin:
ROLENAME_admin_user:
ROLENAME_admin_password: "{{ vault_ROLENAME_admin_password }}"
# Named database connection:
ROLENAME_postgres_hostname:
ROLENAME_postgres_user:
ROLENAME_postgres_password: "{{ vault_ROLENAME_postgres_password }}"
# SMTP
ROLENAME_smtp_hostname:
ROLENAME_smtp_auth:
ROLENAME_smtp_secure:
ROLENAME_smtp_port:
ROLENAME_smtp_domain:
ROLENAME_smtp_from:
ROLENAME_smtp_username:
ROLENAME_smtp_password:

Role names must be lower case and may contain a -.

Role and Tags

Roles can have multiple tags.

example one tag

To define a Postgres role, you would:

  • Create role postges
  • Assign the tag postgres
  • Create a task file postgres.yml

example multiple tags

To define a Nginx role with a config tag, you would:

  • Create role nginx
  • Assign the tags nginx and nginx-config
  • Create the task files nginx.yml and nginx-config.yml

In the main.yml you would include the tasks as followed:

- name: "Include {{ role_name }} config tasks"
  include_tasks: "{{ role_name }}-config.yml"
  when: nginx_data_dir is defined
  tags:
    - nginx
    - nginx-config

- name: "Include {{ role_name }} tasks"
  include_tasks: "{{ role_name }}.yml"
  when: nginx_image is defined
  tags:
    - nginx

https://github.com/MaxPeal/Ansible-Playbooks-Mod

About

modifyd Collection of ansible playbooks and roles. based on https://github.com/Mint-System/Ansible-Playbooks

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Shell 69.9%
  • Python 30.1%