Merge branch 'master' of git.fudiggity.nl:ansible/common

This commit is contained in:
sonny 2021-11-06 20:05:39 +01:00
commit df04e2eaf1
17 changed files with 200 additions and 214 deletions

View file

@ -1,5 +0,0 @@
parseable: true
quiet: true
skip_list:
- '501'
use_default_rules: true

View file

@ -1,33 +1,15 @@
stages: stages:
- lint - lint
- test
cache: cache:
key: "$CI_COMMIT_REF_SLUG" key: $CI_COMMIT_REF_SLUG
paths: paths:
- .cache/pip
- node_modules/ - node_modules/
lint: lint:
stage: lint
image: python:3.7
before_script:
- pip install ansible ansible-lint --quiet
script:
- ansible-lint playbook.yml
only:
refs:
- development
- merge_requests
pretty-lint:
stage: lint stage: lint
image: node:12 image: node:12
before_script: before_script:
- npm install - npm install prettier --no-save
script: script:
- npx prettier "**/*.yml" --check - npx prettier '**/*.yml' --check
only:
refs:
- development
- merge_requests

View file

@ -1,9 +0,0 @@
{
"singleQuote": true,
"printWidth": 90,
"tabWidth": 2,
"useTabs": false,
"bracketSpacing": true,
"parser": "yaml"
}

5
.prettierrc.yml Normal file
View file

@ -0,0 +1,5 @@
singleQuote: true
printWidth: 90
tabWidth: 2
useTabs: false
bracketSpacing: true

View file

@ -1,3 +1,29 @@
poetry_url: "https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py" poetry_url: 'https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py'
poetry_user: "{{ ansible_user | default(lookup('env', 'USER'), True) }}" poetry_user: "{{ ansible_user | default(lookup('env', 'USER'), True) }}"
poetry_dir: "{{ ansible_env.HOME }}/.poetry" poetry_dir: '{{ ansible_env.HOME }}/.poetry'
common_packages:
- acl
- man
- apt-transport-https
- ca-certificates
- software-properties-common
- policykit-1
- libpolkit-agent-1-0
- nftables
- openssh-client
- bash-completion
- git
- vim
- curl
- tree
- haveged
- rsync
ssl_packages:
- python3-openssl
- python3-crypto
- python3-cryptography
- python-openssl
- python-crypto
- python-cryptography

View file

@ -1,71 +1,79 @@
- name: reload ssh - name: reload ssh
become: true
systemd: systemd:
name: ssh name: ssh
state: restarted state: restarted
enabled: yes enabled: true
daemon-reload: yes daemon-reload: true
- name: restart nftables - name: restart nftables
become: true
systemd: systemd:
name: nftables name: nftables
state: restarted state: restarted
enabled: yes enabled: true
daemon-reload: yes daemon-reload: true
- name: restart nginx - name: restart nginx
become: true
systemd: systemd:
name: nginx name: nginx
state: restarted state: restarted
enabled: yes enabled: true
daemon-reload: yes daemon-reload: true
- name: restart docker - name: restart docker
become: true
systemd: systemd:
name: docker name: docker
state: restarted state: restarted
enabled: yes enabled: true
daemon-reload: yes daemon-reload: true
- name: restart rabbitmq - name: restart rabbitmq
become: true
systemd: systemd:
name: rabbitmq-server name: rabbitmq-server
state: restarted state: restarted
enabled: yes enabled: true
daemon-reload: yes daemon-reload: true
- name: restart memcached - name: restart memcached
become: true
systemd: systemd:
name: memcached name: memcached
state: restarted state: restarted
enabled: yes enabled: true
daemon-reload: yes daemon-reload: true
- name: restart postfix - name: restart postfix
become: true
systemd: systemd:
name: postfix name: postfix
state: restarted state: restarted
enabled: yes enabled: true
daemon-reload: yes daemon-reload: true
- name: restart postgres - name: restart postgres
become: true
systemd: systemd:
name: postgresql@11-main name: postgresql@11-main
state: restarted state: restarted
enabled: yes enabled: true
daemon-reload: yes daemon-reload: true
- name: restart systemd-networkd - name: restart systemd-networkd
become: true
systemd: systemd:
name: systemd-networkd name: systemd-networkd
state: restarted state: restarted
enabled: yes enabled: true
daemon-reload: yes daemon-reload: true
- name: restart systemd-resolved - name: restart systemd-resolved
become: true
systemd: systemd:
name: systemd-resolved name: systemd-resolved
state: restarted state: restarted
enabled: yes enabled: true
daemon-reload: yes daemon-reload: true
- include: user.yml

View file

@ -1,19 +1,19 @@
- name: start user tmux service - name: start user tmux service
become_user: "{{ default_user }}" become_user: '{{ default_user }}'
become: yes become: true
systemd: systemd:
daemon-reload: yes daemon-reload: true
name: tmux name: tmux
state: started state: started
enabled: yes enabled: true
scope: user scope: user
- name: restart user tmux service - name: restart user tmux service
become_user: "{{ default_user }}" become_user: '{{ default_user }}'
become: yes become: true
systemd: systemd:
daemon-reload: yes daemon-reload: true
name: tmux name: tmux
state: restarted state: restarted
enabled: yes enabled: true
scope: user scope: user

View file

@ -2,10 +2,10 @@ dependencies: []
galaxy_info: galaxy_info:
author: sonny author: sonny
description: "Common tasks" description: 'Common tasks'
license: "license GPLv3" license: 'license GPLv3'
min_ansible_version: 2.7 min_ansible_version: 2.7
issue_tracker_url: "https://git.fudiggity.nl/ansible/common/-/issues" issue_tracker_url: 'https://git.fudiggity.nl/ansible/common/-/issues'
platforms: platforms:
- name: Debian - name: Debian
versions: versions:

View file

@ -1,15 +1,15 @@
- name: copy hostname - name: copy hostname
template: template:
src: "hostname.j2" src: 'hostname.j2'
dest: "/etc/hostname" dest: '/etc/hostname'
owner: root owner: root
group: root group: root
mode: "0644" mode: '0644'
- name: copy hosts - name: copy hosts
template: template:
src: "hosts.j2" src: 'hosts.j2'
dest: "/etc/hosts" dest: '/etc/hosts'
owner: root owner: root
group: root group: root
mode: "0644" mode: '0644'

View file

@ -1,39 +1,39 @@
- name: load OS specific vars - name: load OS specific vars
include_vars: "{{ item }}" include_vars: '{{ item }}'
with_first_found: with_first_found:
- files: - files:
- "{{ ansible_distribution|lower }}-{{ ansible_distribution_release|lower }}.yml" - '{{ ansible_distribution|lower }}-{{ ansible_distribution_release|lower }}.yml'
- "{{ ansible_distribution|lower }}.yml" - '{{ ansible_distribution|lower }}.yml'
- "{{ ansible_os_family|lower }}.yml" - '{{ ansible_os_family|lower }}.yml'
paths: paths:
- "{{ role_path }}/vars" - '{{ role_path }}/vars'
- name: install packages - name: install packages
become: yes become: true
package: package:
name: "{{ item }}" name: '{{ item }}'
state: present state: present
loop: "{{ known_hosts_packages }}" loop: '{{ known_hosts_packages }}'
- name: retrieve user $HOME - name: retrieve user $HOME
shell: "echo $HOME" # noqa 301 shell: 'echo $HOME'
become_user: "{{ user }}" become_user: '{{ user }}'
register: home_stats register: home_stats
- name: set user $HOME - name: set user $HOME
set_fact: set_fact:
user_home: "{{ home_stats.stdout }}" user_home: '{{ home_stats.stdout }}'
- name: create local ssh directory - name: create local ssh directory
become_user: "{{ user }}" become_user: '{{ user }}'
file: file:
path: "{{ user_home }}/.ssh" path: '{{ user_home }}/.ssh'
state: directory state: directory
mode: "0755" mode: '0755'
- name: add items to known hosts - name: add items to known hosts
become_user: "{{ user }}" become_user: '{{ user }}'
known_hosts: known_hosts:
name: "{{ item.domain }}" name: '{{ item.domain }}'
key: "{{ item.key }}" key: '{{ item.key }}'
loop: "{{ items }}" loop: '{{ items }}'

View file

@ -1,51 +0,0 @@
- include_tasks: "sudoers.yml"
loop:
- { src: "sudoers.j2", dest: "/etc/sudoers.d/20-ansible-extra" }
- name: copy ssh template
template:
src: "sshd_config.j2"
dest: "/etc/ssh/sshd_config"
owner: root
group: root
mode: "0644"
notify: reload ssh
- name: viva la hollande
locale_gen:
name: nl_NL.UTF-8
state: present
- name: ensure basic tooling is installed
apt:
name:
- acl
- man
- apt-transport-https
- ca-certificates
- software-properties-common
- policykit-1
- libpolkit-agent-1-0
- nftables
- openssh-client
- bash-completion
- git
- vim
- curl
- tree
- haveged
- rsync
state: present
- name: copy firewall template
template:
src: "nftables.j2"
dest: "/etc/nftables.conf"
owner: root
group: root
mode: "0600"
notify: restart nftables
# see https://wiki.debian.org/systemd#Orphaned_processes
- name: enable loginctl user-linger
command: "loginctl enable-linger {{ default_user|quote }}" # noqa 301

View file

@ -1,27 +1,28 @@
- name: check old network configuration - name: check old network configuration
stat: path=/etc/network/interfaces stat:
path: '/etc/network/interfaces'
register: old_config register: old_config
- name: move old network configuration - name: move old network configuration
command: mv /etc/network/interfaces /etc/network/interfaces.save command: 'mv /etc/network/interfaces /etc/network/interfaces.save'
when: old_config.stat.exists when: old_config.stat.exists
- name: copy network configuration - name: copy network configuration
template: template:
src: "network.j2" src: 'network.j2'
dest: "/etc/systemd/network/50-default.network" dest: '/etc/systemd/network/50-default.network'
owner: root owner: root
group: root group: root
mode: "0644" mode: '0644'
notify: restart systemd-networkd notify: restart systemd-networkd
- name: copy dns configuration - name: copy dns configuration
file: file:
src: "/run/systemd/resolve/resolv.conf" src: '/run/systemd/resolve/resolv.conf'
dest: "/etc/resolv.conf" dest: '/etc/resolv.conf'
owner: root owner: root
group: root group: root
state: link state: link
force: yes force: true
mode: "0644" mode: '0644'
notify: restart systemd-resolved notify: restart systemd-resolved

View file

@ -1,18 +1,18 @@
- name: install nginx - name: install nginx
apt: package:
name: nginx name: nginx
state: present state: present
- name: copy nginx config - name: copy nginx config
template: template:
src: "nginx.conf.j2" src: 'nginx.conf.j2'
dest: "/etc/nginx/nginx.conf" dest: '/etc/nginx/nginx.conf'
owner: root owner: root
group: root group: root
mode: "0644" mode: '0644'
- name: remove default site - name: remove default site
file: file:
path: "/etc/nginx/sites-enabled/default" path: '/etc/nginx/sites-enabled/default'
state: absent state: absent
notify: restart nginx notify: restart nginx

View file

@ -1,73 +1,73 @@
- name: retrieve user $HOME # noqa 301 - name: retrieve user $HOME
shell: "echo $HOME" shell: 'echo $HOME'
become_user: "{{ poetry_user }}" become_user: '{{ poetry_user }}'
register: home_stats register: home_stats
- name: retrieve user $PATH # noqa 301 - name: retrieve user $PATH
shell: "echo $PATH" shell: 'echo $PATH'
become_user: "{{ poetry_user }}" become_user: '{{ poetry_user }}'
register: path_stats register: path_stats
- name: set poetry user variables - name: set poetry user variables
set_fact: set_fact:
poetry_user_home: "{{ home_stats.stdout }}" poetry_user_home: '{{ home_stats.stdout }}'
poetry_user_path: "{{ path_stats.stdout }}" poetry_user_path: '{{ path_stats.stdout }}'
- name: create user folder for binaries - name: create user folder for binaries
become_user: "{{ poetry_user }}" become_user: '{{ poetry_user }}'
file: file:
state: directory state: directory
mode: "0755" mode: '0755'
path: "{{ poetry_user_home }}/.local/bin" path: '{{ poetry_user_home }}/.local/bin'
- name: set default python binary # noqa 208 - name: set default python binary
become: true become: true
file: file:
state: link state: link
src: "/usr/bin/python3" src: '/usr/bin/python3'
dest: "/usr/bin/python" dest: '/usr/bin/python'
when: ansible_distribution == "Ubuntu" when: ansible_distribution == 'Ubuntu'
- name: setup poetry for Ubuntu/Debian derived distro's - name: setup poetry for Ubuntu/Debian derived distro's
block: block:
- name: check poetry existence - name: check poetry existence
become_user: "{{ poetry_user }}" become_user: '{{ poetry_user }}'
stat: stat:
path: "{{ poetry_dir }}" path: '{{ poetry_dir }}'
register: poetry_stats register: poetry_stats
- name: download poetry installer - name: download poetry installer
become_user: "{{ poetry_user }}" become_user: '{{ poetry_user }}'
get_url: get_url:
url: "{{ poetry_url }}" url: '{{ poetry_url }}'
dest: /tmp/ dest: /tmp/
mode: "0750" mode: '0750'
when: poetry_stats.stat.isdir is not defined when: poetry_stats.stat.isdir is not defined
- name: install poetry - name: install poetry
become_user: "{{ poetry_user }}" become_user: '{{ poetry_user }}'
command: "python /tmp/get-poetry.py --yes" # noqa 305 command: 'python /tmp/get-poetry.py --yes'
environment: environment:
POETRY_HOME: "{{ poetry_dir }}" POETRY_HOME: '{{ poetry_dir }}'
when: poetry_stats.stat.isdir is not defined when: poetry_stats.stat.isdir is not defined
- name: add poetry to user binaries # noqa 208 - name: add poetry to user binaries
become_user: "{{ poetry_user }}" become_user: '{{ poetry_user }}'
file: file:
state: link state: link
src: "{{ poetry_dir }}/bin/poetry" src: '{{ poetry_dir }}/bin/poetry'
dest: "{{ poetry_user_home }}/.local/bin/poetry" dest: '{{ poetry_user_home }}/.local/bin/poetry'
when: ansible_distribution == "Debian" or ansible_distribution == "Ubuntu" when: ansible_distribution == 'Debian' or ansible_distribution == 'Ubuntu'
- name: setup poetry for Archlinux - name: setup poetry for Archlinux
become: true become: true
pacman: pacman:
name: poetry name: poetry
state: present state: present
when: ansible_facts['os_family'] == "Archlinux" when: ansible_facts['os_family'] == 'Archlinux'
- name: update poetry config - name: update poetry config
become_user: "{{ poetry_user }}" become_user: '{{ poetry_user }}'
command: "poetry config virtualenvs.in-project true" # noqa 301 command: 'poetry config virtualenvs.in-project true'
environment: environment:
PATH: "{{ poetry_user_home }}/.local/bin:{{ poetry_user_path }}" PATH: '{{ poetry_user_home }}/.local/bin:{{ poetry_user_path }}'

35
tasks/setup.yml Normal file
View file

@ -0,0 +1,35 @@
- include_tasks: 'sudoers.yml'
loop:
- { src: 'sudoers.j2', dest: '/etc/sudoers.d/20-ansible-extra' }
- name: copy ssh template
template:
src: 'sshd_config.j2'
dest: '/etc/ssh/sshd_config'
owner: root
group: root
mode: '0644'
notify: reload ssh
- name: viva la hollande
locale_gen:
name: nl_NL.UTF-8
state: present
- name: ensure basic tooling is installed
apt:
name: '{{ common_packages }}'
state: present
- name: copy firewall template
template:
src: 'nftables.j2'
dest: '/etc/nftables.conf'
owner: root
group: root
mode: '0600'
notify: restart nftables
# see https://wiki.debian.org/systemd#Orphaned_processes
- name: enable loginctl user-linger
command: 'loginctl enable-linger {{ default_user|quote }}'

View file

@ -1,39 +1,33 @@
- name: install SSL packages - name: install SSL packages
apt: apt:
name: name: '{{ ssl_packages }}'
- python3-openssl
- python3-crypto
- python3-cryptography
- python-openssl
- python-crypto
- python-cryptography
state: present state: present
- name: create ssl directory - name: create ssl directory
file: file:
path: "/etc/ssl/{{ app_name }}" path: '/etc/ssl/{{ app_name }}'
state: directory state: directory
owner: "{{ app_user }}" owner: '{{ app_user }}'
group: "{{ app_user }}" group: '{{ app_user }}'
mode: 0750 mode: 0750
- name: generate an OpenSSL private key with the default values (4096 bits, RSA) - name: generate an OpenSSL private key with the default values (4096 bits, RSA)
become_user: "{{ app_user }}" become_user: '{{ app_user }}'
openssl_privatekey: openssl_privatekey:
path: "/etc/ssl/{{ app_name }}/local.pem" path: '/etc/ssl/{{ app_name }}/local.pem'
- name: generate an OpenSSL certificate signing request - name: generate an OpenSSL certificate signing request
become_user: "{{ app_user }}" become_user: '{{ app_user }}'
openssl_csr: openssl_csr:
path: "/etc/ssl/{{ app_name }}/local.csr" path: '/etc/ssl/{{ app_name }}/local.csr'
privatekey_path: "/etc/ssl/{{ app_name }}/local.pem" privatekey_path: '/etc/ssl/{{ app_name }}/local.pem'
common_name: fudiggity.nl common_name: fudiggity.nl
- name: generate a self signed OpenSSL certificate - name: generate a self signed OpenSSL certificate
become_user: "{{ app_user }}" become_user: '{{ app_user }}'
openssl_certificate: openssl_certificate:
force: yes force: true
path: "/etc/ssl/{{ app_name }}/{{ app_name }}.crt" path: '/etc/ssl/{{ app_name }}/{{ app_name }}.crt'
privatekey_path: "/etc/ssl/{{ app_name }}/local.pem" privatekey_path: '/etc/ssl/{{ app_name }}/local.pem'
csr_path: "/etc/ssl/{{ app_name }}/local.csr" csr_path: '/etc/ssl/{{ app_name }}/local.csr'
provider: selfsigned provider: selfsigned

View file

@ -1,7 +1,7 @@
- name: copy extra sudoers file - name: copy extra sudoers file
template: template:
src: "{{ item.src }}" src: '{{ item.src }}'
dest: "{{ item.dest }}" dest: '{{ item.dest }}'
owner: root owner: root
group: root group: root
mode: "0644" mode: '0644'