Skip to content

lisenet/homelab-ansible

Repository files navigation

homelab-ansible

Ansible infrastructure for my homelab.

version python license last commit commit activity issues pull_requests_closed

Version Table

Software versions used by this repository:

Package Version
ansible 9.3.0
ansible-core 2.16.4
ansible-lint 6.22.0
python 3.11

Install Ansible

This repository uses Ansible version that requires Python 3.11.

Install required packages.

Use apt for Debian based systems:

sudo apt install -y python3.11 python3.11-pip

Use yum for Red Hat based systems:

sudo yum install -y python3.11 python3.11-pip python3.11-netaddr

Use pip in your selected Python environment to install the Ansible package of your choice for the current user:

TMPDIR="${HOME}/tmp" python3.11 -m pip install --user ansible==9.3.0

Optional: Ansible-lint and pre-commit

Ansible Lint is a command-line tool for linting playbooks, roles and collection.

Note that ansible-core 2.12+ was made as a direct dependency with Ansible Lint release v6.0.0. This means that when you install the ansible-lint package >=v6.0.0, it also installs ansible-core and ansible packages as dependencies. Package yamllint is installed as a dependency as well.

Install packages:

python3.11 -m pip install --user ansible-lint==6.22.0

To use Ansible-lint with pre-commit, use the following command to create a pre-commit configuration file:

cat <<EOF > .pre-commit-config.yaml
- repo: https://github.com/ansible/ansible-lint
  rev: v6.22.0
  hooks:
    - id: ansible-lint
      files: \.(yaml|yml)$
EOF

Install pre-commit package:

python3.11 -m pip install --user pre-commit==3.3.3

Enable pre-commit for the git repository:

pre-commit install

Passwordless SSH Authentication

Servers built with Kickstart/Packer have root SSH keys pre-configured. If that is not the case, then see below.

Configure passwordless root SSH authentication from the device where Ansible is installed (e.g. your laptop):

ssh-copy-id -f -i ./roles/hl.users/files/id_rsa_root.pub root@10.11.1.XX

Set Ansible User Password

Create a file vault.key to store your Ansible Vault secret (see ansible.cfg for vault_password_file). Use Ansible Vault to create an encrypted file ./roles/hl.users/defaults/secure.yml to store your user password:

ansible-vault create ./roles/hl.users/defaults/secure.yml

The variable for user password is user_password.

Configuration with Ansible

Configure PXE Hosts

ansible-playbook ./playbooks/configure-pxe-hosts.yml --extra-vars "download_pxe_boot_media=true download_packer_media=true"

Configure KVM Hosts

ansible-playbook ./playbooks/configure-kvm-hosts.yml

Configure Admin Hosts

ansible-playbook ./playbooks/configure-admin-hosts.yml

Configure Kubernetes Hosts

Prepare Kubernetes hosts for cluster deployment:

ansible-playbook ./playbooks/configure-k8s-hosts.yml

Configure Kubernetes cluster for the first time:

ansible-playbook ./playbooks/configure-k8s-cluster.yml

Configure OpenVAS Hosts

ansible-playbook ./playbooks/configure-openvas-hosts.yml

Configure Dell Hosts

ansible-playbook ./playbooks/configure-dell-hosts.yml

Optional: Configure Hosts File

This is optional because of the local DNS server:

ansible-playbook ./playbooks/configure-hostsfile.yml

Optional: Configure New Relic Agent

ansible-playbook ./playbooks/configure-newrelic-hosts.yml

Ansible-configured PXE Boot Server

Note that user password for PXE boot Kickstart files is set to packer.

Homelab PXE Boot Menu

Homelab Network Diagram

Homelab Network Diagram