---
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 ]`


