Merge branch 'ansiblelint' into 'main'

Ansiblelint

See merge request developerdurp/k3s!17
This commit is contained in:
2022-11-13 17:29:09 +00:00
16 changed files with 195 additions and 188 deletions

View File

@@ -6,7 +6,7 @@ stages:
include: include:
- project: 'developerdurp/jobtemplates' - project: 'developerdurp/jobtemplates'
ref: release/1.0.0 ref: main
file: file:
- 'terraform.yml' - 'terraform.yml'
- 'ansible.yml' - 'ansible.yml'
@@ -32,6 +32,19 @@ validate:
- if: $CI_PIPELINE_SOURCE == "merge_request_event" - if: $CI_PIPELINE_SOURCE == "merge_request_event"
when: always when: always
- when: never - when: never
ansible:
stage: lint
variables:
WORKDIR: $CI_PROJECT_DIR/ansible
REQUIREMENTS: requirements.yml
FILE: main.yml
allow_failure: false
extends: .ansible_lint
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
when: always
- when: never
plan: plan:
stage: lint stage: lint
@@ -156,3 +169,4 @@ k3s-destroy:
- 'ansible/*' - 'ansible/*'
when: always when: always
- when: never - when: never

View File

@@ -2,9 +2,9 @@
roles: roles:
- cloudflare - cloudflare
vars: vars:
DNS: dns:
- {record: 'bitwarden', zone: 'durp.info', proxied: 'yes', state: 'present'} - {record: 'bitwarden', zone: 'durp.info', proxied: 'yes', state: 'present'}
- {record: 'nextcloud', zone: 'durp.info', proxied: 'yes', state: 'present'} - {record: 'nextcloud', zone: 'durp.info', proxied: 'yes', state: 'present'}
- {record: 'grafana', zone: 'durp.info', proxied: 'yes', state: 'present'} - {record: 'grafana', zone: 'durp.info', proxied: 'yes', state: 'present'}
- {record: 'kong', zone: 'durp.info', proxied: 'yes', state: 'present'} - {record: 'kong', zone: 'durp.info', proxied: 'yes', state: 'present'}
- {record: '@', zone: 'durp.info', proxied: 'yes', state: 'present'} - {record: '@', zone: 'durp.info', proxied: 'yes', state: 'present'}
@@ -16,5 +16,4 @@
- {record: 'docker', zone: 'durp.info', proxied: 'yes', state: 'present'} - {record: 'docker', zone: 'durp.info', proxied: 'yes', state: 'present'}
- {record: 'authentik', zone: 'durp.info', proxied: 'yes', state: 'present'} - {record: 'authentik', zone: 'durp.info', proxied: 'yes', state: 'present'}
- {record: 'plex', zone: 'durp.info', proxied: 'yes', state: 'present'} - {record: 'plex', zone: 'durp.info', proxied: 'yes', state: 'present'}
- {record: 'vault', zone: 'durp.info', proxied: 'yes', state: 'present'} - {record: 'vault', zone: 'durp.info', proxied: 'yes', state: 'present'}

View File

@@ -13,7 +13,7 @@ flannel_iface: "eth0"
apiserver_endpoint: "192.168.20.120" apiserver_endpoint: "192.168.20.120"
# k3s_token is required masters can talk together securely # k3s_token is required masters can talk together securely
k3s_token: "{{ lookup('env','k3s_token') }}" k3s_token: "{{ lookup('env', 'k3s_token') }}"
# The IP on which the node is reachable in the cluster. # The IP on which the node is reachable in the cluster.
# Here, a sensible default is provided, you can still override # Here, a sensible default is provided, you can still override
@@ -42,7 +42,7 @@ extra_server_args: >-
--kubelet-arg containerd=/run/k3s/containerd/containerd.sock --kubelet-arg containerd=/run/k3s/containerd/containerd.sock
--feature-gates RemoveSelfLink=false --feature-gates RemoveSelfLink=false
extra_agent_args: >- extra_agent_args: >-
{{ extra_args }} {{ extra_args }}
--kubelet-arg node-status-update-frequency=5s --kubelet-arg node-status-update-frequency=5s
# image tag for kube-vip # image tag for kube-vip

View File

@@ -1,33 +1,32 @@
- hosts: all - hosts: all
gather_facts: yes gather_facts: true
become: yes become: true
roles: roles:
- base - base
- hosts: k3s_cluster - hosts: k3s_cluster
gather_facts: yes gather_facts: true
become: yes become: true
roles: roles:
- k3s/prereq - k3s/prereq
- k3s/download - k3s/download
- hosts: master - hosts: master
become: yes become: true
roles: roles:
- k3s/master - k3s/master
- hosts: node - hosts: node
become: yes become: true
roles: roles:
- k3s/node - k3s/node
- hosts: master - hosts: master
become: yes become: true
roles: roles:
- role: k3s/post - role: k3s/post
- hosts: master[0] - hosts: master[0]
become: yes become: true
roles: roles:
- k3s/argocd - k3s/argocd

View File

@@ -1,58 +1,57 @@
---
- name: Run Package tasks - name: Run Package tasks
include_tasks: ansible.builtin.include_tasks:
file: ./templates/packages.yml file: ./templates/packages.yml
- name: Create user account - name: Create user account
user: ansible.builtin.user:
name: "{{ username }}" name: "{{ username }}"
password: "{{ userpassword }}" password: "{{ userpassword }}"
groups: sudo groups: sudo
shell: /bin/bash shell: /bin/bash
state: present state: present
createhome: yes createhome: true
when: ansible_os_family == "Debian" when: ansible_os_family == "Debian"
- name: Create user account - name: Create user account
user: ansible.builtin.user:
name: "{{ username }}" name: "{{ username }}"
password: "{{ userpassword }}" password: "{{ userpassword }}"
shell: /bin/bash shell: /bin/bash
groups: wheel groups: wheel
state: present state: present
createhome: yes createhome: true
when: ansible_os_family == "RedHat" when: ansible_os_family == "RedHat"
- name: Run SSH tasks - name: Run SSH tasks
include_tasks: ansible.builtin.include_tasks:
file: ssh.yml file: ssh.yml
- name: Copy unattended-upgrades file - name: Copy unattended-upgrades file
copy: ansible.builtin.copy:
src: files/10periodic src: files/10periodic
dest: /etc/apt/apt.conf.d/10periodic dest: /etc/apt/apt.conf.d/10periodic
owner: root owner: root
group: root group: root
mode: "0644" mode: "0644"
force: yes force: true
when: ansible_os_family == "Debian" when: ansible_os_family == "Debian"
- name: Remove undesirable packages - name: Remove undesirable packages
package: ansible.builtin.package:
name: "{{ unnecessary_software }}" name: "{{ unnecessary_software }}"
state: absent state: absent
when: ansible_os_family == "Debian" when: ansible_os_family == "Debian"
- name: Stop and disable unnecessary services - name: Stop and disable unnecessary services
service: ansible.builtin.service:
name: "{{ item }}" name: "{{ item }}"
state: stopped state: stopped
enabled: no enabled: false
with_items: "{{ unnecessary_services }}" with_items: "{{ unnecessary_services }}"
ignore_errors: yes ignore_errors: "{{ ansible_check_mode }}"
- name: Set a message of the day - name: Set a message of the day
copy: ansible.builtin.copy:
dest: /etc/motd dest: /etc/motd
src: files/motd src: files/motd
owner: root owner: root
@@ -60,7 +59,7 @@
mode: 0644 mode: 0644
- name: Set a login banner - name: Set a login banner
copy: ansible.builtin.copy:
dest: "{{ item }}" dest: "{{ item }}"
src: files/issue src: files/issue
owner: root owner: root
@@ -70,13 +69,14 @@
- /etc/issue - /etc/issue
- /etc/issue.net - /etc/issue.net
- name: set timezone - name: Set timezone
shell: timedatectl set-timezone America/Chicago ansible.builtin.command: timedatectl set-timezone America/Chicago
changed_when: my_output.rc != 0
- name: Enable cockpit - name: Enable cockpit
systemd: ansible.builtin.systemd:
name: cockpit name: cockpit
daemon_reload: yes daemon_reload: true
state: restarted state: restarted
enabled: yes enabled: true
when: ansible_os_family == "RedHat" when: ansible_os_family == "RedHat"

View File

@@ -1,47 +1,50 @@
- name: Deploy SSH Key (administrator) - name: Deploy SSH Key (administrator)
copy: ansible.builtin.copy:
dest: /home/administrator/.ssh/authorized_keys dest: /home/administrator/.ssh/authorized_keys
src: files/authorized_keys_administrator src: files/authorized_keys_administrator
force: true mode: "0600"
force: true
- name: ensure ssh folder exists for user - name: Ensure ssh folder exists for user
file: ansible.builtin.file:
path: /home/user/.ssh path: /home/user/.ssh
mode: "0600"
state: directory state: directory
- name: Deploy SSH Key (user) - name: Deploy SSH Key (user)
copy: ansible.builtin.copy:
dest: /home/user/.ssh/authorized_keys dest: /home/user/.ssh/authorized_keys
src: files/authorized_keys_user src: files/authorized_keys_user
force: true mode: "0600"
force: true
- name: Remove Root SSH Configuration - name: Remove Root SSH Configuration
file: ansible.builtin.file:
path: /root/.ssh path: /root/.ssh
state: absent state: absent
- name: Copy Secured SSHD Configuration - name: Copy Secured SSHD Configuration
copy: ansible.builtin.copy:
src: files/sshd_config_secured src: files/sshd_config_secured
dest: /etc/ssh/sshd_config dest: /etc/ssh/sshd_config
owner: root owner: root
group: root group: root
mode: "0644" mode: "0644"
when: ansible_os_family == "Debian" when: ansible_os_family == "Debian"
- name: Copy Secured SSHD Configuration - name: Copy Secured SSHD Configuration
copy: ansible.builtin.copy:
src: files/sshd_config_secured_redhat src: files/sshd_config_secured_redhat
dest: /etc/ssh/sshd_config dest: /etc/ssh/sshd_config
owner: root owner: root
group: root group: root
mode: "0644" mode: "0644"
when: ansible_os_family == "RedHat" when: ansible_os_family == "RedHat"
- name: Restart SSHD - name: Restart SSHD
systemd: ansible.builtin.systemd:
name: sshd name: sshd
daemon_reload: yes daemon_reload: true
state: restarted state: restarted
enabled: yes enabled: true
ignore_errors: yes ignore_errors: "{{ ansible_check_mode }}"

View File

@@ -10,16 +10,14 @@ required_packages:
redhat_required_packages: redhat_required_packages:
- qemu-guest-agent - qemu-guest-agent
- cockpit - cockpit
- iscsi-initiator-utils - iscsi-initiator-utils
unnecessary_services: unnecessary_services:
- postfix - postfix
- telnet - telnet
unnecessary_software: unnecessary_software:
- tcpdump - tcpdump
- nmap-ncat - nmap-ncat
- wpa_supplicant - wpa_supplicant

View File

@@ -6,6 +6,6 @@
state: "{{ item.state }}" state: "{{ item.state }}"
type: A type: A
proxied: "{{ item.proxied }}" proxied: "{{ item.proxied }}"
value: "{{ lookup('env','external_ip') }}" value: "{{ lookup('env', 'external_ip') }}"
api_token: "{{ lookup('env','cloudflareapi') }}" api_token: "{{ lookup('env', 'external_ip') }}"
with_items: "{{ DNS }}" with_items: "{{ dns }}"

View File

@@ -1,29 +1,29 @@
--- - name: Copy configs
- name: copy configs ansible.builtin.copy:
copy:
src: ./roles/k3s/argocd/templates/ src: ./roles/k3s/argocd/templates/
dest: /opt/argocd dest: /opt/argocd
owner: administrator owner: administrator
group: administrator group: administrator
mode: "0664" mode: "0664"
force: yes force: true
- name: copy configs - name: Copy configs
copy: ansible.builtin.copy:
src: "{{ lookup('env','kubeseal') }}" src: "{{ lookup('env', 'kubeseal') }}"
dest: /opt/kubeseal.yaml dest: /opt/kubeseal.yaml
owner: administrator owner: administrator
group: administrator group: administrator
mode: "0600" mode: "0600"
force: yes force: true
- name: Apply Kubeseal master key - name: Apply Kubeseal master key
command: k3s kubectl apply -f /opt/kubeseal.yaml --force ansible.builtin.command: k3s kubectl apply -f /opt/kubeseal.yaml --force
changed_when: my_output.rc != 0
- name: Apply ArgoCD - name: Apply ArgoCD
command: k3s kubectl apply -f /opt/argocd/argocd.yaml -n argocd ansible.builtin.command: k3s kubectl apply -f /opt/argocd/argocd.yaml -n argocd
changed_when: my_output.rc != 0
- name: Apply ArgoCD Apps - name: Apply ArgoCD Apps
command: k3s kubectl apply -f /opt/argocd/apps.yaml -n argocd ansible.builtin.command: k3s kubectl apply -f /opt/argocd/apps.yaml -n argocd
changed_when: my_output.rc != 0

View File

@@ -1,6 +1,6 @@
--- ---
- name: Download k3s binary x64 - name: Download k3s binary x64
get_url: ansible.builtin.get_url:
url: https://github.com/k3s-io/k3s/releases/download/{{ k3s_version }}/k3s url: https://github.com/k3s-io/k3s/releases/download/{{ k3s_version }}/k3s
checksum: sha256:https://github.com/k3s-io/k3s/releases/download/{{ k3s_version }}/sha256sum-amd64.txt checksum: sha256:https://github.com/k3s-io/k3s/releases/download/{{ k3s_version }}/sha256sum-amd64.txt
dest: /usr/local/bin/k3s dest: /usr/local/bin/k3s

View File

@@ -1,6 +1,5 @@
---
- name: Create manifests directory on first master - name: Create manifests directory on first master
file: ansible.builtin.file:
path: /var/lib/rancher/k3s/server/manifests path: /var/lib/rancher/k3s/server/manifests
state: directory state: directory
owner: root owner: root
@@ -9,7 +8,7 @@
when: ansible_hostname == hostvars[groups['master'][0]]['ansible_hostname'] when: ansible_hostname == hostvars[groups['master'][0]]['ansible_hostname']
- name: Copy vip rbac manifest to first master - name: Copy vip rbac manifest to first master
template: ansible.builtin.template:
src: "vip.rbac.yaml.j2" src: "vip.rbac.yaml.j2"
dest: "/var/lib/rancher/k3s/server/manifests/vip-rbac.yaml" dest: "/var/lib/rancher/k3s/server/manifests/vip-rbac.yaml"
owner: root owner: root
@@ -18,7 +17,7 @@
when: ansible_hostname == hostvars[groups['master'][0]]['ansible_hostname'] when: ansible_hostname == hostvars[groups['master'][0]]['ansible_hostname']
- name: Copy vip manifest to first master - name: Copy vip manifest to first master
template: ansible.builtin.template:
src: "vip.yaml.j2" src: "vip.yaml.j2"
dest: "/var/lib/rancher/k3s/server/manifests/vip.yaml" dest: "/var/lib/rancher/k3s/server/manifests/vip.yaml"
owner: root owner: root
@@ -28,7 +27,7 @@
# these will be copied and installed now, then tested later and apply config # these will be copied and installed now, then tested later and apply config
- name: Copy metallb namespace to first master - name: Copy metallb namespace to first master
template: ansible.builtin.template:
src: "metallb.namespace.j2" src: "metallb.namespace.j2"
dest: "/var/lib/rancher/k3s/server/manifests/metallb-namespace.yaml" dest: "/var/lib/rancher/k3s/server/manifests/metallb-namespace.yaml"
owner: root owner: root
@@ -37,7 +36,7 @@
when: ansible_hostname == hostvars[groups['master'][0]]['ansible_hostname'] when: ansible_hostname == hostvars[groups['master'][0]]['ansible_hostname']
- name: Copy metallb namespace to first master - name: Copy metallb namespace to first master
template: ansible.builtin.template:
src: "metallb.crds.j2" src: "metallb.crds.j2"
dest: "/var/lib/rancher/k3s/server/manifests/metallb-crds.yaml" dest: "/var/lib/rancher/k3s/server/manifests/metallb-crds.yaml"
owner: root owner: root
@@ -46,7 +45,7 @@
when: ansible_hostname == hostvars[groups['master'][0]]['ansible_hostname'] when: ansible_hostname == hostvars[groups['master'][0]]['ansible_hostname']
- name: Init cluster inside the transient k3s-init service - name: Init cluster inside the transient k3s-init service
command: ansible.builtin.command:
cmd: "systemd-run -p RestartSec=2 \ cmd: "systemd-run -p RestartSec=2 \
-p Restart=on-failure \ -p Restart=on-failure \
--unit=k3s-init \ --unit=k3s-init \
@@ -56,9 +55,10 @@
warn: false # The ansible systemd module does not support transient units warn: false # The ansible systemd module does not support transient units
- name: Verification - name: Verification
when: not ansible_check_mode
block: block:
- name: Verify that all nodes actually joined (check k3s-init.service if this fails) - name: Verify that all nodes actually joined (check k3s-init.service if this fails)
command: ansible.builtin.command:
cmd: k3s kubectl get nodes -l "node-role.kubernetes.io/master=true" -o=jsonpath="{.items[*].metadata.name}" cmd: k3s kubectl get nodes -l "node-role.kubernetes.io/master=true" -o=jsonpath="{.items[*].metadata.name}"
register: nodes register: nodes
until: nodes.rc == 0 and (nodes.stdout.split() | length) == (groups['master'] | length) until: nodes.rc == 0 and (nodes.stdout.split() | length) == (groups['master'] | length)
@@ -67,21 +67,20 @@
changed_when: false changed_when: false
always: always:
- name: Save logs of k3s-init.service - name: Save logs of k3s-init.service
include_tasks: fetch_k3s_init_logs.yml ansible.builtin.include_tasks: fetch_k3s_init_logs.yml
when: log_destination when: log_destination
vars: vars:
log_destination: >- log_destination: >-
{{ lookup('ansible.builtin.env', 'ANSIBLE_K3S_LOG_DIR', default=False) }} {{ lookup('ansible.builtin.env', 'ANSIBLE_K3S_LOG_DIR', default=False) }}
- name: Kill the temporary service used for initialization - name: Kill the temporary service used for initialization
systemd: ansible.builtin.systemd:
name: k3s-init name: k3s-init
state: stopped state: stopped
failed_when: false failed_when: false
when: not ansible_check_mode
- name: Copy K3s service file - name: Copy K3s service file
register: k3s_service register: k3s_service
template: ansible.builtin.template:
src: "k3s.service.j2" src: "k3s.service.j2"
dest: "{{ systemd_dir }}/k3s.service" dest: "{{ systemd_dir }}/k3s.service"
owner: root owner: root
@@ -89,55 +88,55 @@
mode: 0644 mode: 0644
- name: Enable and check K3s service - name: Enable and check K3s service
systemd: ansible.builtin.systemd:
name: k3s name: k3s
daemon_reload: yes daemon_reload: true
state: restarted state: restarted
enabled: yes enabled: true
- name: Wait for node-token - name: Wait for node-token
wait_for: ansible.builtin.wait_for:
path: /var/lib/rancher/k3s/server/node-token path: /var/lib/rancher/k3s/server/node-token
- name: Register node-token file access mode - name: Register node-token file access mode
stat: ansible.builtin.stat:
path: /var/lib/rancher/k3s/server path: /var/lib/rancher/k3s/server
register: p register: p
- name: Change file access node-token - name: Change file access node-token
file: ansible.builtin.file:
path: /var/lib/rancher/k3s/server path: /var/lib/rancher/k3s/server
mode: "g+rx,o+rx" mode: "g+rx,o+rx"
- name: Read node-token from master - name: Read node-token from master
slurp: ansible.builtin.slurp:
src: /var/lib/rancher/k3s/server/node-token src: /var/lib/rancher/k3s/server/node-token
register: node_token register: node_token
- name: Store Master node-token - name: Store Master node-token
set_fact: ansible.builtin.set_fact:
token: "{{ node_token.content | b64decode | regex_replace('\n', '') }}" token: "{{ node_token.content | b64decode | regex_replace('\n', '') }}"
- name: Restore node-token file access - name: Restore node-token file access
file: ansible.builtin.file:
path: /var/lib/rancher/k3s/server path: /var/lib/rancher/k3s/server
mode: "{{ p.stat.mode }}" mode: "{{ p.stat.mode }}"
- name: Create directory .kube - name: Create directory .kube
file: ansible.builtin.file:
path: ~{{ item }}/.kube path: ~{{ item }}/.kube
state: directory state: directory
owner: "{{ item }}" owner: "{{ item }}"
mode: "u=rwx,g=rx,o=" mode: "u=rwx,g=rx,o="
loop: loop:
- "{{ ansible_user }}" - "{{ ansible_user }}"
- "{{ username }}" - "{{ username }}"
- name: Copy config file to user home directory - name: Copy config file to user home directory
copy: ansible.builtin.copy:
src: /etc/rancher/k3s/k3s.yaml src: /etc/rancher/k3s/k3s.yaml
dest: ~{{ item }}/.kube/config dest: ~{{ item }}/.kube/config
remote_src: yes remote_src: true
owner: "{{ item }}" owner: "{{ item }}"
mode: "u=rw,g=,o=" mode: "u=rw,g=,o="
loop: loop:
@@ -145,48 +144,44 @@
- "{{ username }}" - "{{ username }}"
- name: Configure kubectl cluster to {{ endpoint_url }} - name: Configure kubectl cluster to {{ endpoint_url }}
command: >- ansible.builtin.command: >-
k3s kubectl config set-cluster default k3s kubectl config set-cluster default
--server={{ endpoint_url }} --server={{ endpoint_url }}
--kubeconfig ~{{ item }}/.kube/config --kubeconfig ~{{ item }}/.kube/config
changed_when: true changed_when: true
loop: loop:
- "{{ ansible_user }}" - "{{ ansible_user }}"
- "{{ username }}" - "{{ username }}"
vars: vars:
endpoint_url: >- endpoint_url: >-
https://{{ apiserver_endpoint | ansible.utils.ipwrap }}:6443 https://{{ "apiserver_endpoint | ansible.utils.ipwrap" }}:6443
# Deactivated linter rules:
# - jinja[invalid]: As of version 6.6.0, ansible-lint complains that the input to ipwrap
# would be undefined. This will not be the case during playbook execution.
# noqa jinja[invalid]
- name: Create kubectl symlink - name: Create kubectl symlink
file: ansible.builtin.file:
src: /usr/local/bin/k3s src: /usr/local/bin/k3s
dest: /usr/local/bin/kubectl dest: /usr/local/bin/kubectl
state: link state: link
- name: Create crictl symlink - name: Create crictl symlink
file: ansible.builtin.file:
src: /usr/local/bin/k3s src: /usr/local/bin/k3s
dest: /usr/local/bin/crictl dest: /usr/local/bin/crictl
state: link state: link
- name: Get contents of manifests folder - name: Get contents of manifests folder
find: ansible.builtin.find:
paths: /var/lib/rancher/k3s/server/manifests paths: /var/lib/rancher/k3s/server/manifests
file_type: file file_type: file
register: k3s_server_manifests register: k3s_server_manifests
- name: Get sub dirs of manifests folder - name: Get sub dirs of manifests folder
find: ansible.builtin.find:
paths: /var/lib/rancher/k3s/server/manifests paths: /var/lib/rancher/k3s/server/manifests
file_type: directory file_type: directory
register: k3s_server_manifests_directories register: k3s_server_manifests_directories
- name: Remove manifests and folders that are only needed for bootstrapping cluster so k3s doesn't auto apply on start - name: Remove manifests and folders that are only needed for bootstrapping cluster so k3s doesn't auto apply on start
file: ansible.builtin.file:
path: "{{ item.path }}" path: "{{ item.path }}"
state: absent state: absent
with_items: with_items:
@@ -194,4 +189,3 @@
- "{{ k3s_server_manifests_directories.files }}" - "{{ k3s_server_manifests_directories.files }}"
loop_control: loop_control:
label: "{{ item.path }}" label: "{{ item.path }}"

View File

@@ -1,7 +1,5 @@
---
- name: Copy K3s service file - name: Copy K3s service file
template: ansible.builtin.template:
src: "k3s.service.j2" src: "k3s.service.j2"
dest: "{{ systemd_dir }}/k3s-node.service" dest: "{{ systemd_dir }}/k3s-node.service"
owner: root owner: root
@@ -9,8 +7,8 @@
mode: 0755 mode: 0755
- name: Enable and check K3s service - name: Enable and check K3s service
systemd: ansible.builtin.systemd:
name: k3s-node name: k3s-node
daemon_reload: yes daemon_reload: true
state: restarted state: restarted
enabled: yes enabled: true

View File

@@ -1,6 +1,6 @@
--- ---
- name: Create manifests directory for temp configuration - name: Create manifests directory for temp configuration
file: ansible.builtin.file:
path: /tmp/k3s path: /tmp/k3s
state: directory state: directory
owner: "{{ ansible_user }}" owner: "{{ ansible_user }}"
@@ -9,7 +9,7 @@
run_once: true run_once: true
- name: Copy metallb CRs manifest to first master - name: Copy metallb CRs manifest to first master
template: ansible.builtin.template:
src: "metallb.crs.j2" src: "metallb.crs.j2"
dest: "/tmp/k3s/metallb-crs.yaml" dest: "/tmp/k3s/metallb-crs.yaml"
owner: "{{ ansible_user }}" owner: "{{ ansible_user }}"
@@ -18,14 +18,14 @@
run_once: true run_once: true
- name: Test metallb-system namespace - name: Test metallb-system namespace
command: >- ansible.builtin.command: >-
k3s kubectl -n metallb-system k3s kubectl -n metallb-system
changed_when: false changed_when: false
with_items: "{{ groups['master'] }}" with_items: "{{ groups['master'] }}"
run_once: true run_once: true
- name: Wait for MetalLB resources - name: Wait for MetalLB resources
command: >- ansible.builtin.command: >-
k3s kubectl wait {{ item.resource }} k3s kubectl wait {{ item.resource }}
--namespace='metallb-system' --namespace='metallb-system'
{% if item.name | default(False) -%}{{ item.name }}{%- endif %} {% if item.name | default(False) -%}{{ item.name }}{%- endif %}
@@ -63,14 +63,14 @@
label: "{{ item.description }}" label: "{{ item.description }}"
- name: Test metallb-system webhook-service endpoint - name: Test metallb-system webhook-service endpoint
command: >- ansible.builtin.command: >-
k3s kubectl -n metallb-system get endpoints webhook-service k3s kubectl -n metallb-system get endpoints webhook-service
changed_when: false changed_when: false
with_items: "{{ groups['master'] }}" with_items: "{{ groups['master'] }}"
run_once: true run_once: true
- name: Apply metallb CRs - name: Apply metallb CRs
command: >- ansible.builtin.command: >-
k3s kubectl apply -f /tmp/k3s/metallb-crs.yaml k3s kubectl apply -f /tmp/k3s/metallb-crs.yaml
--timeout='{{ metal_lb_available_timeout }}' --timeout='{{ metal_lb_available_timeout }}'
register: this register: this
@@ -80,7 +80,7 @@
retries: 5 retries: 5
- name: Test metallb-system resources - name: Test metallb-system resources
command: >- ansible.builtin.command: >-
k3s kubectl -n metallb-system get {{ item }} k3s kubectl -n metallb-system get {{ item }}
changed_when: false changed_when: false
run_once: true run_once: true
@@ -89,6 +89,6 @@
- L2Advertisement - L2Advertisement
- name: Remove tmp directory used for manifests - name: Remove tmp directory used for manifests
file: ansible.builtin.file:
path: /tmp/k3s path: /tmp/k3s
state: absent state: absent

View File

@@ -1,61 +1,60 @@
---
- name: Set same timezone on every Server - name: Set same timezone on every Server
timezone: community.general.timezone:
name: "{{ system_timezone }}" name: "{{ system_timezone }}"
when: (system_timezone is defined) and (system_timezone != "Your/Timezone") when: (system_timezone is defined) and (system_timezone != "Your/Timezone")
- name: Set SELinux to disabled state - name: Set SELinux to disabled state
selinux: ansible.posix.selinux:
state: disabled state: disabled
when: ansible_os_family == "RedHat" when: ansible_os_family == "RedHat"
- name: Enable IPv4 forwarding - name: Enable IPv4 forwarding
sysctl: ansible.posix.sysctl:
name: net.ipv4.ip_forward name: net.ipv4.ip_forward
value: "1" value: "1"
state: present state: present
reload: yes reload: true
- name: Enable IPv6 forwarding - name: Enable IPv6 forwarding
sysctl: ansible.posix.sysctl:
name: net.ipv6.conf.all.forwarding name: net.ipv6.conf.all.forwarding
value: "1" value: "1"
state: present state: present
reload: yes reload: true
- name: Enable IPv6 router advertisements - name: Enable IPv6 router advertisements
sysctl: ansible.posix.sysctl:
name: net.ipv6.conf.all.accept_ra name: net.ipv6.conf.all.accept_ra
value: "2" value: "2"
state: present state: present
reload: yes reload: true
- name: Add br_netfilter to /etc/modules-load.d/ - name: Add br_netfilter to /etc/modules-load.d/
copy: ansible.builtin.copy:
content: "br_netfilter" content: "br_netfilter"
dest: /etc/modules-load.d/br_netfilter.conf dest: /etc/modules-load.d/br_netfilter.conf
mode: "u=rw,g=,o=" mode: "u=rw,g=,o="
when: ansible_os_family == "RedHat" when: ansible_os_family == "RedHat"
- name: Load br_netfilter - name: Load br_netfilter
modprobe: community.general.modprobe:
name: br_netfilter name: br_netfilter
state: present state: present
when: ansible_os_family == "RedHat" when: ansible_os_family == "RedHat"
- name: Set bridge-nf-call-iptables (just to be sure) - name: Set bridge-nf-call-iptables (just to be sure)
sysctl: ansible.posix.sysctl:
name: "{{ item }}" name: "{{ item }}"
value: "1" value: "1"
state: present state: present
reload: yes reload: true
when: ansible_os_family == "RedHat" when: ansible_os_family == "RedHat"
loop: loop:
- net.bridge.bridge-nf-call-iptables - net.bridge.bridge-nf-call-iptables
- net.bridge.bridge-nf-call-ip6tables - net.bridge.bridge-nf-call-ip6tables
- name: Add /usr/local/bin to sudo secure_path - name: Add /usr/local/bin to sudo secure_path
lineinfile: ansible.builtin.lineinfile:
line: 'Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin' line: 'Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin'
regexp: "Defaults(\\s)*secure_path(\\s)*=" regexp: "Defaults(\\s)*secure_path(\\s)*="
state: present state: present

View File

@@ -1,46 +1,49 @@
- name: check packages for updates - name: Check packages for updates
shell: yum list updates | awk 'f;/Updated Packages/{f=1;}' | awk '{ print $1 }' ansible.builtin.shell: set -o pipefail && yum list updates | awk 'f;/Updated Packages/{f=1;}' | awk '{ print $1 }'
changed_when: updates.stdout_lines | length > 0 changed_when: updates.stdout_lines | length > 0
args: args:
warn: false warn: false
register: updates register: updates
- name: display count - name: Display count
debug: ansible.builtin.debug:
msg: "Found {{ updates.stdout_lines | length }} packages to be updated:\n\n{{ updates.stdout }}" msg: "Found {{ updates.stdout_lines | length }} packages to be updated:\n\n{{ updates.stdout }}"
- when: updates.stdout_lines | length > 0 - name: Update if needed
when: updates.stdout_lines | length > 0
block: block:
- name: install updates using yum
yum:
name: "*"
state: latest
- name: install yum-utils - name: Install updates using yum
package: ansible.builtin.yum:
name: "*"
state: present
update_only: true
- name: Install yum-utils
ansible.builtin.package:
name: yum-utils name: yum-utils
- name: check if reboot is required - name: Check if reboot is required
shell: needs-restarting -r ansible.builtin.command: needs-restarting -r
failed_when: false failed_when: false
register: reboot_required register: reboot_required
changed_when: false changed_when: false
- when: updates.stdout_lines | length > 0 and reboot_required.rc != 0 - name: Reboot if required
when: updates.stdout_lines | length > 0 and reboot_required.rc != 0
block: block:
- name: reboot the server if required - name: Reboot the server if required
shell: sleep 3; reboot ansible.builtin.shell: sleep 3; reboot
ignore_errors: true ignore_errors: "{{ ansible_check_mode }}"
changed_when: false changed_when: false
async: 1 async: 1
poll: 0 poll: 0
- name: wait for server to come back after reboot - name: Wait for server to come back after reboot
wait_for_connection: ansible.builtin.wait_for_connection:
timeout: 600 timeout: 600
delay: 20 delay: 20
register: reboot_result register: reboot_result
- name: reboot time - name: Reboot time
debug: ansible.builtin.debug:
msg: "The system rebooted in {{ reboot_result.elapsed }} seconds." msg: "The system rebooted in {{ reboot_result.elapsed }} seconds."

View File

@@ -1,5 +1,5 @@
- hosts: all - hosts: all
gather_facts: yes gather_facts: true
become: yes become: true
roles: roles:
- update - update