New README.md. Thanks javif89
This commit is contained in:
parent
ebab5d44f0
commit
0bff8b768e
149
README.md
149
README.md
@ -1,150 +1,5 @@
|
||||
# Ansible Starter Kit
|
||||
# Only for people that hate wasting time
|
||||
|
||||
Easy way for my homies to start up an ansible project for their homelab or local machine.
|
||||
This is how I deploy all my self-hosted infrastructure. Declare everything, commit everything, know nothing.
|
||||
|
||||
# Prerequisites
|
||||
|
||||
The ideal setup for a homelab is to have:
|
||||
|
||||
- The same username/password in all vms/hosts so you don't have to type a different password for each host
|
||||
- SSH key auth on each host so you don't have to type a password at all
|
||||
|
||||
# Ansible basics
|
||||
|
||||
I'll explain the basic units of an ansible project. For this example we're going to assume you want to mount
|
||||
an NFS share in all your hosts.
|
||||
|
||||
From bottom to top we have:
|
||||
|
||||
## Tasks
|
||||
|
||||
A task is the lowest unit in an ansible project.
|
||||
|
||||
A task could be:
|
||||
|
||||
- Creating a directory
|
||||
- Installing an os package (curl, docker, nfs-common, etc)
|
||||
- Starting a docker container
|
||||
|
||||
### Examples
|
||||
|
||||
```yml
|
||||
- name: Add SSH key for remote user
|
||||
ansible.posix.authorized_key:
|
||||
user: javi
|
||||
state: present
|
||||
key: "{{ lookup('file', '/home/javi/.ssh/homelab_keypair_ed25519.pub') }}"
|
||||
```
|
||||
|
||||
```yml
|
||||
- name: Ensure NFS client is installed
|
||||
ansible.builtin.package:
|
||||
name: nfs-common
|
||||
state: present
|
||||
become: true
|
||||
```
|
||||
|
||||
## Role
|
||||
|
||||
A role is a self contained, re-usable unit that will give a meaningful result. Think of it like a class in a program.
|
||||
|
||||
Roles have a list of tasks, as well as variables and files associated with those tasks. All contained in a folder.
|
||||
|
||||
A role can look like:
|
||||
|
||||
```
|
||||
roles/
|
||||
portainer/
|
||||
├── defaults/
|
||||
│ └── main.yml # Default variables
|
||||
├── files/
|
||||
│ └── ... # Static files to be copied (e.g., configs, scripts)
|
||||
├── handlers/
|
||||
│ └── main.yml # Handlers (e.g., service restart)
|
||||
├── meta/
|
||||
│ └── main.yml # Role metadata (e.g., dependencies)
|
||||
├── tasks/
|
||||
│ └── main.yml # Main list of tasks to execute
|
||||
├── templates/
|
||||
│ └── ... # Jinja2 templates
|
||||
├── vars/
|
||||
│ └── main.yml # Non-overridable variables
|
||||
└── README.md # Optional: Document what this role does
|
||||
sshkey/
|
||||
├── defaults/
|
||||
│ └── main.yml # Default variables
|
||||
├── files/
|
||||
│ └── ... # Static files to be copied (e.g., configs, scripts)
|
||||
├── handlers/
|
||||
│ └── main.yml # Handlers (e.g., service restart)
|
||||
├── meta/
|
||||
│ └── main.yml # Role metadata (e.g., dependencies)
|
||||
├── tasks/
|
||||
│ └── main.yml # Main list of tasks to execute
|
||||
├── templates/
|
||||
│ └── ... # Jinja2 templates
|
||||
├── vars/
|
||||
│ └── main.yml # Non-overridable variables
|
||||
└── README.md # Optional: Document what this role does
|
||||
|
||||
```
|
||||
|
||||
However, only the `defaults` and `tasks` subfolders and subsequent `main.yml` are required. Everything else is optional.
|
||||
|
||||
A role can be:
|
||||
|
||||
- Mounting a share
|
||||
- Deploying a docker container with all its requirements like a database and mapped volumes
|
||||
|
||||
# Playbook
|
||||
|
||||
A playbook combines roles and task to create a final state in a host or group of hosts.
|
||||
|
||||
A playbook can be:
|
||||
|
||||
- Make sure all your hosts have sshkey auth, portainer, docker and an nfs share mounted.
|
||||
- Deploy a suite of apps to a host or multiple hosts
|
||||
|
||||
## Example
|
||||
|
||||
```yml
|
||||
---
|
||||
- name: Deploy apps to apps-1 node
|
||||
hosts: apps
|
||||
become: true
|
||||
roles:
|
||||
- role: apps/kan
|
||||
vars:
|
||||
port: 7070
|
||||
- role: apps/memos
|
||||
vars:
|
||||
port: 7071
|
||||
- role: apps/vaultwarden
|
||||
vars:
|
||||
port: 7072
|
||||
- role: apps/erugo
|
||||
vars:
|
||||
port: 7073
|
||||
- role: apps/tianji
|
||||
vars:
|
||||
port: 7074
|
||||
- role: apps/stirling-pdf o
|
||||
vars:
|
||||
port: 7075
|
||||
- role: apps/dumbware-todo
|
||||
vars:
|
||||
port: 7076
|
||||
pin: 8989
|
||||
- role: apps/dumbware-drop
|
||||
vars:
|
||||
port: 7077
|
||||
pin: "8989"
|
||||
```
|
||||
|
||||
# Setup
|
||||
|
||||
1. Clone this repo `git clone git@gitgud.foo:javif89/ansible-starter-kit.git [your project name]`
|
||||
2. Run `setup.sh` to set up the vault password and become password
|
||||
3. Set up your hosts in `hosts.yml`
|
||||
4. Start making your roles and playbooks
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user