Lab/Ansible: Difference between revisions

From Slaskete wiki
Jump to navigation Jump to search
Content deleted Content added
No edit summary
No edit summary
 
(14 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å 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):
activate-global-python-argcomplete --user
sudo apt install python3-argcomplete
sudo activate-global-python-argcomplete3
Dette oppretter nye kataloger i $HOME, så bash må få beskjed om at det er nye steder å finne programmer:
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 14: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.