227 lines
3.2 KiB
Markdown
227 lines
3.2 KiB
Markdown
---
|
|
title: Ansible
|
|
author: Malin
|
|
theme: Warsaw
|
|
colortheme: orchid
|
|
---
|
|
|
|
# First: Idempotence
|
|
|
|
## My Setup Script
|
|
|
|
|
|
```sh
|
|
# Place locale info
|
|
echo 'LANG=en_GB.UTF-8' >> /etc/locale.conf
|
|
/etc/default/libc-locales
|
|
xbps-reconfigure -fy glibc-locales
|
|
|
|
# Start cron service
|
|
xbps-install -y crontab
|
|
ln -s /etc/sv/cronie /var/service
|
|
sv start crontab
|
|
|
|
# Add default dot files
|
|
git clone https://gitlab.com/andonome/mkdots.git /etc/skel/.dots
|
|
|
|
useradd -m ghost
|
|
usermod -aG wheel
|
|
|
|
```
|
|
|
|
***
|
|
|
|
> Error: no package 'cron tab'
|
|
|
|
***
|
|
|
|
```sh
|
|
# Place locale info
|
|
echo 'LANG=en_GB.UTF-8' >> /etc/locale.conf
|
|
/etc/default/libc-locales
|
|
xbps-reconfigure -fy glibc-locales
|
|
|
|
# Start cron service
|
|
xbps-install -y cronie
|
|
ln -s /etc/sv/cronie /var/service
|
|
sv start cronie
|
|
|
|
# Add default dot files
|
|
git clone https://gitlab.com/andonome/mkdots.git /etc/skel/.dots
|
|
|
|
useradd -m ghost
|
|
usermod -aG wheel
|
|
|
|
```
|
|
|
|
> ...loading locales
|
|
|
|
***
|
|
|
|
> Error: No command 'git'
|
|
> Error: user already exists
|
|
|
|
***
|
|
|
|
```sh
|
|
# Place locale info
|
|
echo 'LANG=en_GB.UTF-8' >> /etc/locale.conf
|
|
/etc/default/libc-locales
|
|
xbps-reconfigure -fy glibc-locales
|
|
|
|
# Start cron service
|
|
xbps-install -y cronie git
|
|
ln -s /etc/sv/cronie /var/service
|
|
sv start cronie
|
|
|
|
# Add default dot files
|
|
git clone https://gitlab.com/andonome/mkdots.git /etc/skel/.dots
|
|
|
|
useradd -m ghost
|
|
usermod -G wheel
|
|
|
|
```
|
|
|
|
***
|
|
|
|
> `$ cat /etc/locale.conf`
|
|
|
|
```sh
|
|
LC_COLLATE=C
|
|
LANG=en_GB.UTF-8
|
|
LANG=en_GB.UTF-8
|
|
LANG=en_GB.UTF-8
|
|
LANG=en_GB.UTF-8
|
|
LANG=en_GB.UTF-8
|
|
LANG=en_GB.UTF-8
|
|
```
|
|
|
|
> `$ ???`
|
|
|
|
***
|
|
|
|
|
|
```sh
|
|
grep en_GB /etc/locale.conf || \
|
|
echo 'LANG=en_GB.UTF-8' >> /etc/locale.conf
|
|
|
|
```
|
|
|
|
***
|
|
|
|
# So Ansible...
|
|
|
|
|
|
```sh
|
|
ansible --module-name=ping localhost
|
|
ansible -m package -a 'upgrade=yes' localhost
|
|
```
|
|
|
|
## Lines in Files
|
|
|
|
```sh
|
|
ansible -m lineinfile -a 'line=test create=yes path=/tmp/x' localhost
|
|
ansible -m say -a 'voice=en_GB msg="Testing"' localhost
|
|
ansible -m say -a 'voice=en_GB msg="Testing"' localhost
|
|
```
|
|
|
|
***
|
|
|
|
# More Hosts!
|
|
|
|
Hark at the hosts in `~/.ssh/config`:
|
|
|
|
```sh
|
|
Host soft
|
|
HostName soft.dmz.rs
|
|
Port 2222
|
|
User ghost
|
|
IdentityFile ~/.ssh/id_rsa
|
|
Host krov
|
|
HostName krov.dmz.rs
|
|
User malin
|
|
Host kralizec
|
|
HostName dmz.rs
|
|
User root
|
|
Host laka
|
|
HostName 192.168.0.50
|
|
IdentityFile ~/.ssh/id_rsa
|
|
```
|
|
|
|
***
|
|
|
|
## Hosts in toml
|
|
|
|
|
|
```toml
|
|
[webby]
|
|
nginx12
|
|
|
|
[webby:vars]
|
|
user=alice
|
|
```
|
|
|
|
This is easy to read, but breaks standards.
|
|
|
|
***
|
|
|
|
`ansible-play -i hosts.toml playbooks/mmcli`
|
|
|
|
***
|
|
|
|
Better to stick with standards, even if you can't read it!
|
|
|
|
***
|
|
|
|
Very yaml:
|
|
|
|
```yml
|
|
all:
|
|
vars:
|
|
ansible_python_interpreter: /usr/bin/python3.13
|
|
cow_selection: random
|
|
username: ghost
|
|
locale: Europe/Belgrade
|
|
libc_locale: en_GB.UTF-8 UTF-8
|
|
children:
|
|
arch:
|
|
children:
|
|
archyay:
|
|
hosts:
|
|
ratking:
|
|
archkube:
|
|
nimbus:
|
|
void:
|
|
hosts:
|
|
hex:
|
|
debian:
|
|
vars:
|
|
ansible_python_interpreter: /usr/bin/python3.12
|
|
hosts:
|
|
laka:
|
|
proxmox:
|
|
|
|
```
|
|
|
|
***
|
|
|
|
`ansible-play -i hosts.yml playbooks/mmcli`
|
|
|
|
***
|
|
|
|
# What it Does
|
|
|
|
- Installs packages
|
|
- Copies configs *to* host
|
|
- Fetches files *from* host
|
|
* Backup ssl certs
|
|
* Backup ssh identify keys
|
|
|
|
***
|
|
|
|
# Check the Repository Here!
|
|
|
|
`[ $git_repo_address ]`
|
|
|
|
|