initial commit
This commit is contained in:
commit
c326886eb1
|
@ -0,0 +1,19 @@
|
||||||
|
FROM python:3.9-slim
|
||||||
|
|
||||||
|
ARG UNAME=ansible
|
||||||
|
# should match host
|
||||||
|
ARG UID=1000
|
||||||
|
ARG GID=1000
|
||||||
|
|
||||||
|
RUN groupadd -g $GID -o $UNAME && \
|
||||||
|
useradd -m -u $UID -g $GID -s /bin/sh $UNAME && \
|
||||||
|
apt-get update && \
|
||||||
|
apt-get install -y sshpass && \
|
||||||
|
pip3 install --no-cache-dir ansible==2.10 && \
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
USER $UNAME
|
||||||
|
|
||||||
|
COPY . /etc/ansible
|
||||||
|
|
||||||
|
ENTRYPOINT []
|
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
exec docker-compose run ansible $@
|
|
@ -0,0 +1,10 @@
|
||||||
|
version: '3'
|
||||||
|
services:
|
||||||
|
ansible:
|
||||||
|
build: .
|
||||||
|
command: ansible-playbook --ask-vault-pass /etc/ansible/playbook.yml
|
||||||
|
stdin_open: yes
|
||||||
|
tty: yes
|
||||||
|
volumes:
|
||||||
|
- .:/etc/ansible
|
||||||
|
- ~/.ssh:/home/ansible/.ssh:ro
|
|
@ -0,0 +1,13 @@
|
||||||
|
users:
|
||||||
|
marchambault:
|
||||||
|
# generated with `openssl passwd -salt <salt> -1 <plaintext>`
|
||||||
|
default_password: !vault |
|
||||||
|
$ANSIBLE_VAULT;1.1;AES256
|
||||||
|
35393364373830636539356334653263306262613038643231313762626537383637616534643237
|
||||||
|
3433636332383765653665643235633464343433636435300a623365666266366665363966303033
|
||||||
|
34656561653763636438303166363631636138616563636331323866643166323232353834376165
|
||||||
|
3939303664343638300a326131333663333365373036666634363235636663333465343337313638
|
||||||
|
39356365633332643132336438373131313239653231383735656436636332303034303466626232
|
||||||
|
3461626364346238666434303839373839633661616166613364
|
||||||
|
authorized_keys:
|
||||||
|
- https://github.com/badjware.keys
|
|
@ -0,0 +1,4 @@
|
||||||
|
k3s:
|
||||||
|
version: v1.21.0+k3s1
|
||||||
|
# disable local-path-provisioner, we use longhorn instead
|
||||||
|
extra_server_args: --no-deploy local-storage
|
|
@ -0,0 +1,29 @@
|
||||||
|
haproxy:
|
||||||
|
routing:
|
||||||
|
https:
|
||||||
|
- src:
|
||||||
|
- cloud.badjware.dev
|
||||||
|
- code.badjware.dev
|
||||||
|
- drone.badjware.dev
|
||||||
|
dst:
|
||||||
|
- 192.168.20.21
|
||||||
|
- 192.168.20.22
|
||||||
|
- 192.168.20.23
|
||||||
|
tcp: [] # TODO, for ssh-forward
|
||||||
|
|
||||||
|
letsencrypt:
|
||||||
|
domains:
|
||||||
|
- badjware.dev
|
||||||
|
- '*.badjware.dev'
|
||||||
|
email: marchambault@badjware.dev
|
||||||
|
digitalocean:
|
||||||
|
token: !vault |
|
||||||
|
$ANSIBLE_VAULT;1.1;AES256
|
||||||
|
35643864626166636564363831336663363335356530316464353864643030316662633230343763
|
||||||
|
3439343831386632366137376137383936396164646237640a633132356332636134653832666636
|
||||||
|
63386235636632613666393036643737633635613139326362353166653264633536633037306632
|
||||||
|
3461313436326139330a366265343131366436653635623138373736353262653633666337623935
|
||||||
|
31653964336664313261373031613566636337643934316430306638626631633434366164306639
|
||||||
|
30616238613334633933343339393938326561633036633062323463636161336665373732626330
|
||||||
|
37386264353239353435643266333033353931336637343038353765396134333763386637653638
|
||||||
|
35343739666634323562
|
|
@ -0,0 +1,63 @@
|
||||||
|
# When adding a new host:
|
||||||
|
# 1. create new user `useradd -m -G sudo -s /bin/bash ansible`
|
||||||
|
# 2. configure user password `passwd ansible` (set password to badjnet/ssh/ansible)
|
||||||
|
|
||||||
|
# These will throw some warnings that can be safely be ignored
|
||||||
|
.user_config: &user_config
|
||||||
|
ansible_user: ansible
|
||||||
|
ansible_password: !vault |
|
||||||
|
$ANSIBLE_VAULT;1.1;AES256
|
||||||
|
34376132666239383830316437356430306535396466396537323833633137376239386464343363
|
||||||
|
6234303430623964353762383935323335383737666533390a643033363235383138393932393833
|
||||||
|
34633732646430383131643662626635373661373261323365366531316439653963353739383664
|
||||||
|
6139363534616231380a373931333530373339653132626238333566663362343663623532393330
|
||||||
|
35616230643533363032623066376536366236353335373130643262613561396131
|
||||||
|
ansible_become: 'yes'
|
||||||
|
ansible_become_password: !vault |
|
||||||
|
$ANSIBLE_VAULT;1.1;AES256
|
||||||
|
34376132666239383830316437356430306535396466396537323833633137376239386464343363
|
||||||
|
6234303430623964353762383935323335383737666533390a643033363235383138393932393833
|
||||||
|
34633732646430383131643662626635373661373261323365366531316439653963353739383664
|
||||||
|
6139363534616231380a373931333530373339653132626238333566663362343663623532393330
|
||||||
|
35616230643533363032623066376536366236353335373130643262613561396131
|
||||||
|
|
||||||
|
all:
|
||||||
|
hosts:
|
||||||
|
pfsense:
|
||||||
|
ansible_host: 192.168.30.1
|
||||||
|
children:
|
||||||
|
proxmox:
|
||||||
|
hosts:
|
||||||
|
router-0:
|
||||||
|
ansible_host: 192.168.10.10
|
||||||
|
vars:
|
||||||
|
ansible_user: root
|
||||||
|
lb:
|
||||||
|
hosts:
|
||||||
|
lb:
|
||||||
|
ansible_host: 192.168.20.10
|
||||||
|
k3s:
|
||||||
|
children:
|
||||||
|
k3s-server:
|
||||||
|
hosts:
|
||||||
|
k3s-s0:
|
||||||
|
ansible_host: 192.168.20.20
|
||||||
|
k3s-agent:
|
||||||
|
hosts:
|
||||||
|
k3s-w0:
|
||||||
|
ansible_host: 192.168.20.21
|
||||||
|
k3s-w1:
|
||||||
|
ansible_host: 192.168.20.22
|
||||||
|
k3s-w2:
|
||||||
|
ansible_host: 192.168.20.23
|
||||||
|
ubuntu:
|
||||||
|
hosts:
|
||||||
|
ubiquiti:
|
||||||
|
ansible_host: 192.168.10.2
|
||||||
|
pihole:
|
||||||
|
ansible_host: 192.168.20.2
|
||||||
|
children:
|
||||||
|
lb:
|
||||||
|
k3s:
|
||||||
|
vars:
|
||||||
|
<<: *user_config
|
|
@ -0,0 +1,18 @@
|
||||||
|
- hosts: ubuntu
|
||||||
|
roles:
|
||||||
|
- common
|
||||||
|
|
||||||
|
- hosts: lb
|
||||||
|
roles:
|
||||||
|
- haproxy
|
||||||
|
|
||||||
|
- hosts: proxmox
|
||||||
|
roles:
|
||||||
|
- proxmox
|
||||||
|
|
||||||
|
- hosts: k3s-server
|
||||||
|
roles:
|
||||||
|
- k3s-server
|
||||||
|
- hosts: k3s-agent
|
||||||
|
roles:
|
||||||
|
- k3s-agent
|
|
@ -0,0 +1 @@
|
||||||
|
users: {}
|
|
@ -0,0 +1,45 @@
|
||||||
|
|
||||||
|
- name: Perform system update
|
||||||
|
apt:
|
||||||
|
update_cache: yes
|
||||||
|
upgrade: 'yes'
|
||||||
|
|
||||||
|
- name: Install basic packages
|
||||||
|
apt:
|
||||||
|
name:
|
||||||
|
- curl
|
||||||
|
- vim
|
||||||
|
- tmux
|
||||||
|
|
||||||
|
- name: Set default editor to vim
|
||||||
|
lineinfile:
|
||||||
|
path: /etc/environment
|
||||||
|
line: EDITOR=vim
|
||||||
|
|
||||||
|
- name: Disable root login
|
||||||
|
user:
|
||||||
|
name: root
|
||||||
|
password: '*'
|
||||||
|
|
||||||
|
- name: Ensure sudoers is correctly configured
|
||||||
|
lineinfile:
|
||||||
|
path: /etc/sudoers
|
||||||
|
line: '%sudo ALL=(ALL:ALL) ALL'
|
||||||
|
regexp: '^%sudo\s+'
|
||||||
|
validate: '/usr/sbin/visudo -cf %s'
|
||||||
|
|
||||||
|
- name: Configure users
|
||||||
|
include_tasks: user.yml
|
||||||
|
with_dict: '{{ users }}'
|
||||||
|
|
||||||
|
- name: Configure hostname
|
||||||
|
hostname:
|
||||||
|
name: '{{ inventory_hostname }}'
|
||||||
|
|
||||||
|
- name: Configure hostname in /etc/hosts
|
||||||
|
blockinfile:
|
||||||
|
dest: /etc/hosts
|
||||||
|
marker: '# {mark} ANSIBLE MANAGED BLOCK HOSTNAME'
|
||||||
|
block: |
|
||||||
|
127.0.0.1 {{ inventory_hostname }}
|
||||||
|
::1 {{ inventory_hostname }}
|
|
@ -0,0 +1,17 @@
|
||||||
|
- name: Create user {{ item.key }}
|
||||||
|
user:
|
||||||
|
name: '{{ item.key }}'
|
||||||
|
password: '{{ item.value.default_password }}'
|
||||||
|
update_password: on_create
|
||||||
|
shell: /bin/bash
|
||||||
|
groups: sudo
|
||||||
|
|
||||||
|
- name: '{{ item.key }}: Configure ssh public keys'
|
||||||
|
authorized_key:
|
||||||
|
user: '{{ item.key }}'
|
||||||
|
key: '{{ key }}'
|
||||||
|
loop: '{{ item.value.authorized_keys }}'
|
||||||
|
loop_control:
|
||||||
|
loop_var: key
|
||||||
|
when:
|
||||||
|
item.value.authorized_keys is defined
|
|
@ -0,0 +1,4 @@
|
||||||
|
haproxy:
|
||||||
|
routing:
|
||||||
|
https: []
|
||||||
|
tcp: []
|
|
@ -0,0 +1,8 @@
|
||||||
|
- name: Run certbot
|
||||||
|
command: sh /opt/certbot/certbot-run.sh
|
||||||
|
|
||||||
|
- name: Restart haproxy
|
||||||
|
service:
|
||||||
|
name: haproxy
|
||||||
|
enabled: true
|
||||||
|
state: restarted
|
|
@ -0,0 +1,43 @@
|
||||||
|
- name: Install haproxy and certbot
|
||||||
|
apt:
|
||||||
|
pkg:
|
||||||
|
- haproxy
|
||||||
|
- certbot
|
||||||
|
- python3-certbot-dns-digitalocean
|
||||||
|
update_cache: yes
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Install haproxy.cfg
|
||||||
|
vars:
|
||||||
|
https_routing: '{{ haproxy.routing.https }}'
|
||||||
|
tcp_routing: '{{ haproxy.routing.tcp }}'
|
||||||
|
template:
|
||||||
|
src: haproxy.cfg
|
||||||
|
dest: /etc/haproxy/haproxy.cfg
|
||||||
|
notify: Restart haproxy
|
||||||
|
|
||||||
|
- name: Create certbot configuration directory
|
||||||
|
file:
|
||||||
|
path: /opt/certbot
|
||||||
|
state: directory
|
||||||
|
|
||||||
|
- name: Install certbot-creds.ini
|
||||||
|
template:
|
||||||
|
src: certbot-creds.ini
|
||||||
|
dest: /opt/certbot/certbot-creds.ini
|
||||||
|
mode: '0600'
|
||||||
|
notify: Run certbot
|
||||||
|
|
||||||
|
- name: Install certbot-run.sh
|
||||||
|
template:
|
||||||
|
src: certbot-run.sh
|
||||||
|
dest: /opt/certbot/certbot-run.sh
|
||||||
|
mode: '0700'
|
||||||
|
notify: Run certbot
|
||||||
|
|
||||||
|
- name: Install certbot-deploy.sh
|
||||||
|
template:
|
||||||
|
src: certbot-deploy.sh
|
||||||
|
dest: /opt/certbot/certbot-deploy.sh
|
||||||
|
mode: '0700'
|
||||||
|
notify: Run certbot
|
|
@ -0,0 +1 @@
|
||||||
|
dns_digitalocean_token = {{ letsencrypt.digitalocean.token }}
|
|
@ -0,0 +1,2 @@
|
||||||
|
#!/bin/sh
|
||||||
|
cat /etc/letsencrypt/live/{{ letsencrypt.domains[0] }}/fullchain.pem /etc/letsencrypt/live/{{ letsencrypt.domains[0] }}/privkey.pem >/etc/letsencrypt/live/{{ letsencrypt.domains[0] }}/{{ letsencrypt.domains[0] }}.pem
|
|
@ -0,0 +1,11 @@
|
||||||
|
#!/bin/sh
|
||||||
|
certbot certonly \
|
||||||
|
--non-interactive \
|
||||||
|
--agree-tos \
|
||||||
|
--email {{ letsencrypt.email }} \
|
||||||
|
--deploy-hook '/opt/certbot/certbot-deploy.sh' \
|
||||||
|
--dns-digitalocean \
|
||||||
|
--dns-digitalocean-credentials /opt/certbot/certbot-creds.ini \
|
||||||
|
--dns-digitalocean-propagation-seconds 30 \
|
||||||
|
{% for domain in letsencrypt.domains %}-d '{{ domain }}' {% endfor %} \
|
||||||
|
$@
|
|
@ -0,0 +1,80 @@
|
||||||
|
global
|
||||||
|
daemon
|
||||||
|
maxconn 1024
|
||||||
|
log 127.0.0.1 local0
|
||||||
|
stats timeout 30s
|
||||||
|
|
||||||
|
defaults
|
||||||
|
timeout connect 5s
|
||||||
|
timeout client 30s
|
||||||
|
timeout server 30s
|
||||||
|
log global
|
||||||
|
|
||||||
|
option forwardfor
|
||||||
|
option http-server-close
|
||||||
|
|
||||||
|
default-server init-addr last,none resolvers dns
|
||||||
|
|
||||||
|
resolvers dns
|
||||||
|
parse-resolv-conf
|
||||||
|
|
||||||
|
## FRONTENDS ##
|
||||||
|
|
||||||
|
# haproxy stuff
|
||||||
|
frontend http_management
|
||||||
|
bind *:8080
|
||||||
|
mode http
|
||||||
|
|
||||||
|
# redirects /status to haproxy monitor
|
||||||
|
monitor-uri /status
|
||||||
|
|
||||||
|
# redirects /stats to stats backend
|
||||||
|
acl prefixed-with-stats path_beg -i /stats
|
||||||
|
use_backend haproxy_stats if prefixed-with-stats
|
||||||
|
|
||||||
|
# redirects /metrics to metrics backend
|
||||||
|
acl prefixed-with-metrics path_beg -i /metrics
|
||||||
|
use_backend haproxy_metrics if prefixed-with-metrics
|
||||||
|
|
||||||
|
frontend http_in
|
||||||
|
bind *:80
|
||||||
|
mode http
|
||||||
|
|
||||||
|
http-request redirect scheme https code 302
|
||||||
|
|
||||||
|
frontend https_in
|
||||||
|
# backend is assumed to be http, perform ssl termination here
|
||||||
|
bind *:443 ssl crt /etc/letsencrypt/live/{{ letsencrypt.domains[0] }}/{{ letsencrypt.domains[0] }}.pem
|
||||||
|
# mode tcp
|
||||||
|
|
||||||
|
# request is ssl
|
||||||
|
# tcp-request inspect-delay 5s
|
||||||
|
# tcp-request content accept if { req.ssl_hello_type 1 }
|
||||||
|
|
||||||
|
{% for route in https_routing %}
|
||||||
|
# use_backend https_{{ route.src[0]|replace('.','_') }} if { req.ssl_sni -i {% for src in route.src %}{{ src }} {% endfor %}}
|
||||||
|
use_backend https_{{ route.src[0]|replace('.','_') }} if { hdr_end(host) -i {% for src in route.src %}{{ src }} {% endfor %}}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
## BACKENDS ##
|
||||||
|
|
||||||
|
backend haproxy_stats
|
||||||
|
mode http
|
||||||
|
stats uri /stats
|
||||||
|
stats enable
|
||||||
|
stats refresh 10s
|
||||||
|
stats auth admin:admin
|
||||||
|
|
||||||
|
backend haproxy_metrics
|
||||||
|
mode http
|
||||||
|
http-request use-service prometheus-exporter
|
||||||
|
|
||||||
|
{% for route in https_routing %}
|
||||||
|
backend https_{{ route.src[0]|replace('.','_') }}
|
||||||
|
# mode tcp
|
||||||
|
balance roundrobin
|
||||||
|
{% for dst in route.dst %}
|
||||||
|
# server {{ dst }} {{ dst }}{% if ':' not in dst %}:443{% endif %} check
|
||||||
|
server {{ dst }} {{ dst }}{% if ':' not in dst %}:80{% endif %} check
|
||||||
|
{% endfor %}
|
||||||
|
{% endfor %}
|
|
@ -0,0 +1,2 @@
|
||||||
|
dependencies:
|
||||||
|
- role: k3s
|
|
@ -0,0 +1,14 @@
|
||||||
|
- name: Copy k3s service file
|
||||||
|
register: k3s_service
|
||||||
|
template:
|
||||||
|
src: k3s.service
|
||||||
|
dest: /etc/systemd/system/k3s.service
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: 0644
|
||||||
|
|
||||||
|
- name: Enable k3s service
|
||||||
|
systemd:
|
||||||
|
name: k3s
|
||||||
|
daemon_reload: yes
|
||||||
|
enabled: yes
|
|
@ -0,0 +1,23 @@
|
||||||
|
Description=Lightweight Kubernetes
|
||||||
|
Documentation=https://k3s.io
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=notify
|
||||||
|
ExecStartPre=-/sbin/modprobe br_netfilter
|
||||||
|
ExecStartPre=-/sbin/modprobe overlay
|
||||||
|
ExecStart=/usr/local/bin/k3s agent --server https://{{ hostvars[groups['k3s-server'][0]]['ansible_facts']['default_ipv4']['address'] }}:6443 --token {{ hostvars[groups['k3s-server'][0]]['token'] }} {{ k3s.extra_agent_args | default("") }}
|
||||||
|
KillMode=process
|
||||||
|
Delegate=yes
|
||||||
|
# Having non-zero Limit*s causes performance problems due to accounting overhead
|
||||||
|
# in the kernel. We recommend using cgroups to do container-local accounting.
|
||||||
|
LimitNOFILE=1048576
|
||||||
|
LimitNPROC=infinity
|
||||||
|
LimitCORE=infinity
|
||||||
|
TasksMax=infinity
|
||||||
|
TimeoutStartSec=0
|
||||||
|
Restart=always
|
||||||
|
RestartSec=5s
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
|
@ -0,0 +1,2 @@
|
||||||
|
dependencies:
|
||||||
|
- role: k3s
|
|
@ -0,0 +1,69 @@
|
||||||
|
- name: Copy k3s service file
|
||||||
|
register: k3s_service
|
||||||
|
template:
|
||||||
|
src: k3s.service
|
||||||
|
dest: /etc/systemd/system/k3s.service
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: 0644
|
||||||
|
|
||||||
|
- name: Enable k3s service
|
||||||
|
systemd:
|
||||||
|
name: k3s
|
||||||
|
daemon_reload: yes
|
||||||
|
enabled: yes
|
||||||
|
|
||||||
|
- name: Wait for server node-token to be available
|
||||||
|
wait_for:
|
||||||
|
path: /var/lib/rancher/k3s/server/node-token
|
||||||
|
|
||||||
|
- name: Read node-token from server
|
||||||
|
slurp:
|
||||||
|
src: /var/lib/rancher/k3s/server/node-token
|
||||||
|
register: node_token
|
||||||
|
|
||||||
|
- name: Store server node-token as fact
|
||||||
|
set_fact:
|
||||||
|
token: "{{ node_token.content | b64decode | regex_replace('\n', '') }}"
|
||||||
|
|
||||||
|
- name: Create ~/.kube directory
|
||||||
|
file:
|
||||||
|
path: ~/.kube
|
||||||
|
state: directory
|
||||||
|
mode: "u=rwx,g=rx,o="
|
||||||
|
|
||||||
|
- name: Copy config file to user home directory
|
||||||
|
copy:
|
||||||
|
src: /etc/rancher/k3s/k3s.yaml
|
||||||
|
dest: ~/.kube/config
|
||||||
|
remote_src: yes
|
||||||
|
mode: "u=rw,g=,o="
|
||||||
|
|
||||||
|
- name: Set kubeconfig server ip
|
||||||
|
command: >-
|
||||||
|
k3s kubectl config set-cluster default
|
||||||
|
--server=https://{{ ansible_default_ipv4.address }}:6443
|
||||||
|
--kubeconfig ~/.kube/config
|
||||||
|
changed_when: no # TODO
|
||||||
|
|
||||||
|
- name: Create kubectl symlink
|
||||||
|
file:
|
||||||
|
src: /usr/local/bin/k3s
|
||||||
|
dest: /usr/local/bin/kubectl
|
||||||
|
state: link
|
||||||
|
|
||||||
|
- name: Create crictl symlink
|
||||||
|
file:
|
||||||
|
src: /usr/local/bin/k3s
|
||||||
|
dest: /usr/local/bin/crictl
|
||||||
|
state: link
|
||||||
|
|
||||||
|
# - name: Create longhorn install directory
|
||||||
|
# file:
|
||||||
|
# path: /var/lib/rancher/k3s/server/manifests/longhorn
|
||||||
|
# state: directory
|
||||||
|
|
||||||
|
# - name: Install longhorn
|
||||||
|
# get_url:
|
||||||
|
# url: https://raw.githubusercontent.com/longhorn/longhorn/v1.2.0/deploy/longhorn.yaml
|
||||||
|
# dest: /var/lib/rancher/k3s/server/manifests/longhorn/longhorn.yaml
|
|
@ -0,0 +1,24 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Lightweight Kubernetes
|
||||||
|
Documentation=https://k3s.io
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=notify
|
||||||
|
ExecStartPre=-/sbin/modprobe br_netfilter
|
||||||
|
ExecStartPre=-/sbin/modprobe overlay
|
||||||
|
ExecStart=/usr/local/bin/k3s server {{ k3s.extra_server_args | default("") }}
|
||||||
|
KillMode=process
|
||||||
|
Delegate=yes
|
||||||
|
# Having non-zero Limit*s causes performance problems due to accounting overhead
|
||||||
|
# in the kernel. We recommend using cgroups to do container-local accounting.
|
||||||
|
LimitNOFILE=1048576
|
||||||
|
LimitNPROC=infinity
|
||||||
|
LimitCORE=infinity
|
||||||
|
TasksMax=infinity
|
||||||
|
TimeoutStartSec=0
|
||||||
|
Restart=always
|
||||||
|
RestartSec=5s
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
|
@ -0,0 +1 @@
|
||||||
|
net.ifnames=0 dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=LABEL=writable rootfstype=ext4 elevator=deadline rootwait fixrtc cgroup_memory=1 cgroup_enable=memory
|
|
@ -0,0 +1,2 @@
|
||||||
|
- name: reboot
|
||||||
|
reboot:
|
|
@ -0,0 +1,14 @@
|
||||||
|
- name: Download k3s binary
|
||||||
|
get_url:
|
||||||
|
url: https://github.com/k3s-io/k3s/releases/download/{{ k3s.version }}/k3s-arm64
|
||||||
|
checksum: sha256:https://github.com/k3s-io/k3s/releases/download/{{ k3s.version }}/sha256sum-arm64.txt
|
||||||
|
dest: /usr/local/bin/k3s
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: 0755
|
||||||
|
|
||||||
|
- name: Enable cgroups
|
||||||
|
copy:
|
||||||
|
src: cmdline.txt
|
||||||
|
dest: /boot/firmware/cmdline.txt
|
||||||
|
notify: reboot
|
|
@ -0,0 +1,2 @@
|
||||||
|
deb http://download.proxmox.com/debian/pve buster pve-no-subscription
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
- name: update grub
|
||||||
|
command: update-grub
|
|
@ -0,0 +1,34 @@
|
||||||
|
- name: Enable IOMMU
|
||||||
|
lineinfile:
|
||||||
|
path: /etc/default/grub
|
||||||
|
regexp: '^GRUB_CMDLINE_LINUX_DEFAULT='
|
||||||
|
line: 'GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"'
|
||||||
|
notify: update grub
|
||||||
|
|
||||||
|
- name: Copy pve-no-subscription.list
|
||||||
|
copy:
|
||||||
|
src: pve-no-subscription.list
|
||||||
|
dest: /etc/apt/sources.list.d/pve-no-subscription.list
|
||||||
|
|
||||||
|
- name: Stat pve-enterprise.list
|
||||||
|
stat:
|
||||||
|
path: /etc/apt/sources.list.d/pve-enterprise.list
|
||||||
|
register: pve_enterprise_stat
|
||||||
|
|
||||||
|
- name: Backup pve-enterprise.list
|
||||||
|
copy:
|
||||||
|
remote_src: True
|
||||||
|
src: /etc/apt/sources.list.d/pve-enterprise.list
|
||||||
|
dest: /etc/apt/sources.list.d/pve-enterprise.list.bak
|
||||||
|
when: pve_enterprise_stat.stat.exists
|
||||||
|
|
||||||
|
- name: Disable pve-enterprise.list
|
||||||
|
file:
|
||||||
|
path: /etc/apt/sources.list.d/pve-enterprise.list
|
||||||
|
state: absent
|
||||||
|
|
||||||
|
- name: Perform dist-upgrade
|
||||||
|
apt:
|
||||||
|
update_cache: yes
|
||||||
|
upgrade: dist
|
||||||
|
|
Loading…
Reference in New Issue