Difference between revisions of "Lab/Ansible"
| (12 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 |
+ | 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 === |
=== 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.