Difference between revisions of "Lab/Ansible"

From Slaskete wiki
Jump to navigation Jump to search
 
(13 intermediate revisions by the same user not shown)
Line 2: Line 2:
 
Ansible benyttes for å administrere maskinene i laben. Når man jobber med ansible må man ha et sted hvor konfigurasjon er organisert og pushes ut til maskinene. For å gjøre ting enkelt blir dette gjort fra den samme maskinen som kjører Proxmox, med en egen bruker (einar).
 
Ansible benyttes for å administrere maskinene i laben. Når man jobber med ansible må man ha et sted hvor konfigurasjon er organisert og pushes ut til maskinene. For å gjøre ting enkelt blir dette gjort fra den samme maskinen som kjører Proxmox, med en egen bruker (einar).
   
=== Installasjon ===
+
=== Installasjon og oppsett ===
 
Som brukeren einar kjøres følgende kommando:
 
Som brukeren einar kjøres følgende kommando:
pip3 install ansible argcomplete
+
pip3 install ansible pywinrm pywinrm[credssp]
 
Og argcomplete må installeres og aktiveres (det er nyttig for å få auto-complete på ansible-kommandoer):
 
Og argcomplete må installeres og aktiveres (det er nyttig for å få auto-complete på ansible-kommandoer):
 
sudo apt install python3-argcomplete
 
sudo apt install python3-argcomplete
sudo mkdir /etc/bash_completion.d
 
 
sudo activate-global-python-argcomplete3
 
sudo activate-global-python-argcomplete3
Dette oppretter nye kataloger som ikke eksisterte tidligere, så bash må få beskjed om at det er nye steder å finne programmer (oppdatere $PATH):
+
Dette oppretter nye kataloger som ikke eksisterte tidligere, så bash må få beskjed om at det er nye steder å finne programmer (oppdatere <code>$PATH</code>):
 
. .profile
 
. .profile
  +
Videre trengs det SSH-nøkler for login og management (trykker enter på alle valgene for å få standard-oppsett uten passord):
  +
ssh-keygen
  +
ssh-keygen -t ed25519
  +
Det trengs også å sette noen innstillinger for git:
  +
git config --global init.defaultBranch main
  +
git config --global user.name "Einar Jørgen Haraldseid"
  +
git config --global user.email einar.haraldseid@ntnu.no
  +
  +
=== Test av oppsett ===
  +
Vi kan nå prøve å logge inn på VyOS-routeren vår (disse stegene er tatt rett ut av [https://docs.ansible.com/ansible/latest/network/getting_started/first_playbook.html#establish-a-manual-connection-to-a-managed-node Ansible-håndboken])
  +
ssh vyos@10.0.10.1
  +
show config
  +
exit
  +
Og så prøve å se om ansible kan lese data fra vyos-routeren:
  +
ansible all -i 10.0.10.1, -c ansible.netcommon.network_cli -u vyos -k -m vyos.vyos.vyos_facts -e ansible_network_os=vyos.vyos.vyos
  +
Etter å ha oppgitt passordet skal dette ende opp med en JSON-dump av litt data, ca. sånn:
  +
10.0.10.1 | SUCCESS => {
  +
"ansible_facts": {
  +
"ansible_net_api": "cliconf",
  +
"ansible_net_gather_network_resources": [],
  +
"ansible_net_gather_subset": [
  +
"neighbors",
  +
"default"
  +
],
  +
"ansible_net_hostname": "vyos",
  +
"ansible_net_neighbors": {},
  +
"ansible_net_python_version": "3.9.2",
  +
"ansible_net_serialnum": null,
  +
"ansible_net_system": "vyos",
  +
"ansible_net_version": "VyOS 1.4-rolling-202206090217",
  +
"ansible_network_resources": {}
  +
},
  +
"changed": false
  +
}
  +
  +
=== Opprette Ansible-katalog og konfigurere Ansible ===
  +
Opprett katalog som skal inneholde Ansible-dokumentasjonen vår:
  +
git init ansible
  +
cd ansible
  +
mkdir roles
  +
Opprett filen <code>ansible.cfg</code> og skriv inn følgende, som gjør at ansible kan finne igjen hosts-filen
  +
[defaults]
  +
inventory = ${PWD}/hosts
  +
Og opprett filen <code>hosts</code>, legg inn routeren vår, som foreløpig er den eneste hosten som eksisterer:
  +
[routers]
  +
router ansible_host=10.0.10.1
  +
  +
=== Lagring av passord ===
  +
Passord bør ikke lagres i ren tekst, men det er også slitsomt å skrive dem inn hele tiden. Vi kan bruke <code>ansible_vault</code> for å lagre passord i kryptert form, og dekryptere dem med étt superhemmelig passord. Men fordi vi er skikkelig late lagrer vi dette passordet i en fil og sørger for at det ikke blir lagret i git (legg merke til at vi har et mellomrom foran <code>echo</code> i den første linjen, da havner ikke kommandoen i kommandohistorikken):
  +
echo -n "vårthemmeligepassord" > .vault_pass
  +
echo ".vault_pass" >> .gitignore
  +
Og følgende linje må legges inn i <code>ansible.cfg</code> under <code>[defaults]</code> for at Ansible skal finne passordet:
  +
vault_password_file = ./.vault_pass
  +
Mer detaljer om bruken av ansible-vault finnes i artikkelen om å [[Lab/Domene|opprette domenet]].

Latest revision as of 15:34, 21 June 2022

Ansible

Ansible benyttes for å administrere maskinene i laben. Når man jobber med ansible må man ha et sted hvor konfigurasjon er organisert og pushes ut til maskinene. For å gjøre ting enkelt blir dette gjort fra den samme maskinen som kjører Proxmox, med en egen bruker (einar).

Installasjon og oppsett

Som brukeren einar kjøres følgende kommando:

pip3 install ansible pywinrm pywinrm[credssp]

Og argcomplete må installeres og aktiveres (det er nyttig for å få auto-complete på ansible-kommandoer):

sudo apt install python3-argcomplete
sudo activate-global-python-argcomplete3

Dette oppretter nye kataloger som ikke eksisterte tidligere, så bash må få beskjed om at det er nye steder å finne programmer (oppdatere $PATH):

. .profile

Videre trengs det SSH-nøkler for login og management (trykker enter på alle valgene for å få standard-oppsett uten passord):

ssh-keygen
ssh-keygen -t ed25519

Det trengs også å sette noen innstillinger for git:

git config --global init.defaultBranch main
git config --global user.name "Einar Jørgen Haraldseid"
git config --global user.email einar.haraldseid@ntnu.no

Test av oppsett

Vi kan nå prøve å logge inn på VyOS-routeren vår (disse stegene er tatt rett ut av Ansible-håndboken)

ssh vyos@10.0.10.1
show config
exit

Og så prøve å se om ansible kan lese data fra vyos-routeren:

ansible all -i 10.0.10.1, -c ansible.netcommon.network_cli -u vyos -k -m vyos.vyos.vyos_facts -e ansible_network_os=vyos.vyos.vyos

Etter å ha oppgitt passordet skal dette ende opp med en JSON-dump av litt data, ca. sånn:

10.0.10.1 | SUCCESS => {
    "ansible_facts": {
        "ansible_net_api": "cliconf",
        "ansible_net_gather_network_resources": [],
        "ansible_net_gather_subset": [
            "neighbors",
            "default"
        ],
        "ansible_net_hostname": "vyos",
        "ansible_net_neighbors": {},
        "ansible_net_python_version": "3.9.2",
        "ansible_net_serialnum": null,
        "ansible_net_system": "vyos",
        "ansible_net_version": "VyOS 1.4-rolling-202206090217",
        "ansible_network_resources": {}
    },
    "changed": false
}

Opprette Ansible-katalog og konfigurere Ansible

Opprett katalog som skal inneholde Ansible-dokumentasjonen vår:

git init ansible
cd ansible
mkdir roles

Opprett filen ansible.cfg og skriv inn følgende, som gjør at ansible kan finne igjen hosts-filen

[defaults]
inventory = ${PWD}/hosts

Og opprett filen hosts, legg inn routeren vår, som foreløpig er den eneste hosten som eksisterer:

[routers]
router ansible_host=10.0.10.1

Lagring av passord

Passord bør ikke lagres i ren tekst, men det er også slitsomt å skrive dem inn hele tiden. Vi kan bruke ansible_vault for å lagre passord i kryptert form, og dekryptere dem med étt superhemmelig passord. Men fordi vi er skikkelig late lagrer vi dette passordet i en fil og sørger for at det ikke blir lagret i git (legg merke til at vi har et mellomrom foran echo i den første linjen, da havner ikke kommandoen i kommandohistorikken):

 echo -n "vårthemmeligepassord" > .vault_pass
echo ".vault_pass" >> .gitignore

Og følgende linje må legges inn i ansible.cfg under [defaults] for at Ansible skal finne passordet:

vault_password_file = ./.vault_pass

Mer detaljer om bruken av ansible-vault finnes i artikkelen om å opprette domenet.