.POSIX: WORKON_HOME ?= .direnv PYTHON_VERSION := $(shell python --version | cut -d " " -f 2 | awk -F. '{print $$1"."$$2}') VENV_BASE ?= $(WORKON_HOME)/python-$(PYTHON_VERSION) PYTHON := ${VENV_BASE}/bin/python3 PYTHON_BIN_DIR := ${VENV_BASE}/bin SSH_KEY_FILE ?= ~/.ssh/id_ed25519 ANSIBLE_EXTRA_ARGS ?= default: prepare cluster $(SSH_KEY_FILE): ssh-keygen -t ed25519 -f "$@" .PHONY: venv venv: @if [ ! -d "$(VENV_BASE)" ]; then \ python3 -m venv $(VENV_BASE); \ fi .PHONY: requirements requirements: requirements: venv @echo Install requirements @${PYTHON_BIN_DIR}/pip install -r requirements.txt > /dev/null # --ignore-errors: roles/geerlingguy.ntp is gitignored and galaxy-installed. When the # directory already exists without .galaxy_install_info, galaxy refuses to replace it # and exits 1, which would break every target that depends on requirements-ansible. # Never pass --force here. .PHONY: requirements-ansible requirements-ansible: requirements-ansible: requirements @echo Install ansible-galaxy requirements @${PYTHON_BIN_DIR}/ansible-galaxy install -r requirements.yml --ignore-errors > /dev/null @${PYTHON_BIN_DIR}/ansible-galaxy collection install -r requirements.yml > /dev/null .PHONY: first-boot first-boot: first-boot: $(SSH_KEY_FILE) requirements-ansible ${PYTHON_BIN_DIR}/ansible-playbook playbooks/install/prepare.yml \ -e prepare_additional_disks_force_format=true \ -e ansible_user=root \ --ask-pass \ $(ANSIBLE_EXTRA_ARGS) \ --limit 'arm' ${PYTHON_BIN_DIR}/ansible-playbook playbooks/install/prepare.yml \ -e prepare_additional_disks_force_format=true \ $(ANSIBLE_EXTRA_ARGS) \ --limit 'all:!arm' .PHONY: prepare prepare: prepare: $(SSH_KEY_FILE) requirements-ansible ${PYTHON_BIN_DIR}/ansible-playbook \ $(ANSIBLE_EXTRA_ARGS) \ playbooks/install/prepare.yml .PHONY: cluster cluster: cluster: $(SSH_KEY_FILE) requirements-ansible ${PYTHON_BIN_DIR}/ansible-playbook \ $(ANSIBLE_EXTRA_ARGS) \ playbooks/install/cluster.yml .PHONY: uninstall-k3s uninstall-k3s: uninstall-k3s: $(SSH_KEY_FILE) requirements-ansible ${PYTHON_BIN_DIR}/ansible-playbook \ $(ANSIBLE_EXTRA_ARGS) \ playbooks/uninstall/k3s.yml .PHONY: uninstall-longhorn uninstall-longhorn: uninstall-longhorn: $(SSH_KEY_FILE) requirements-ansible ${PYTHON_BIN_DIR}/ansible-playbook \ $(ANSIBLE_EXTRA_ARGS) \ playbooks/uninstall/longhorn.yml .PHONY: console console: console: $(SSH_KEY_FILE) requirements ${PYTHON_BIN_DIR}/ansible-console \ $(ANSIBLE_EXTRA_ARGS) \ --become