GNU/Linux >> Znalost Linux >  >> Linux

Víceprůchodové virtuální stroje pomocí Ansible

Tento příspěvek je o Multipass Virtual Machines pomocí Ansible

Předpoklady

Virtuální stroj Multipass by měl být vytvořen podle pokynů v článku Virtuální stroj Multipass a ověřování pomocí soukromého klíče. Všimněte si, kde je uložen soubor obsahující soukromý klíč.
Druhým předpokladem je Ansible. Pokyny k instalaci Ansible naleznete v oficiální dokumentaci Ansible.

Přípravy

Přípravy pro příklad tohoto článku jsou následující:

  • Vytvořte adresář pro uložení souborů z příkladu v tomto článku.
    Svůj adresář budu nazývat „AnsibleMultipass“.
  • Zkopírujte soubor soukromého klíče s názvem „user_key“ do nového adresáře.
    Tento soubor klíčů byl vytvořen jako součást vytváření virtuálního počítače Multipass v předchozím článku.
  • Spusťte víceprůchodový virtuální počítač, který má ověřování na základě klíče.
  • Zjistěte IP adresu víceprůchodového virtuálního počítače pomocí ověřování na základě klíče.
    Toho lze dosáhnout například pomocí seznamu více průchodů příkaz v okně terminálu. V mém případě je IP 192.168.64.20.

Ansible Inventory

Inventář Ansible říká Ansible, jak se připojit k jednomu nebo více uzlům v infrastruktuře. Příklad tohoto článku má tedy velmi malou infrastrukturu, která se skládá pouze z jediného virtuálního stroje.

V adresáři AnsibleMultipass vytvořte soubor s názvem „multipass-vm-inventory.yml“ s následujícím obsahem:

all:
  hosts:
    multipassvm1:
      ansible_connection: ssh
      ansible_host: "192.168.64.20"
      ansible_user: vmadmin
      ansible_ssh_common_args: "-o StrictHostKeyChecking=no -o ControlMaster=no -o ControlPath=none"
      ansible_ssh_private_key_file: user_key

Všimněte si, že:

  • V tomto souboru inventáře Ansible je jeden hostitel – multipassvm1.
  • Typ připojení k hostiteli je určen hodnotou ansible_connection, což je SSH.
  • IP adresa hostitele nebo název DNS, pokud existuje, je určena hodnotou ansible_host.
  • Adresa IP musí být nahrazena adresou IP místního virtuálního počítače Multipass.
  • Hodnota ansible_user, vmadmin, je jméno uživatele, které bude použito při připojování k hostiteli.
  • Tato hodnota, v tomto příkladu vmadmin, musí být uživatelské jméno použité při generování klíčů pomocí příkazu ssh-keygen.
  • Ansible_ssh_common_args specifikují běžné argumenty, které se připojují k příkazům sftp, scp a ssh.
  • Příkaz StrictHostKeyChecking=no vypne dotaz, zda jsou nové klíče důvěryhodné nebo ne. Místo toho budou všechny nové klíče tiše přidány do souboruknown_hosts.
  • Nastavení ControlMaster a ControlPath jsou řešením problému na mém počítači způsobeného výchozí cestou ControlPath obsahující mezeru, která nebyla escapována. Na jiných počítačích nemusí být nutné a lze je vynechat.
  • Nakonec hodnota ansible_ssh_private_key_file určuje název a volitelně umístění souboru soukromého klíče, který bude použit při připojení k hostiteli.
  • Pokud je zadán pouze název souboru, umístění souboru klíčů je relativní vzhledem k souboru inventáře. Může to být absolutní umístění.

Moduly Ansible

S inventářem Ansible nyní můžeme spouštět moduly Ansible proti hostiteli (hostitelům) v inventáři. V tomto článku tedy uvedu pouze několik příkladů. V dokumentaci je seznam všech dostupných modulů Ansible.

Modul Ping

Jedním z modulů Ansbile je modul ping. Jak je uvedeno v dokumentaci, modul ping se pokouší připojit k hostiteli a ověřit použitelnou instalaci Pythonu.
V okně terminálu v adresáři AnsibleMultipass zadejte následující příkaz:

ansible -i multipass-vm-inventory.yml multipassvm1 -m ping

Výše uvedený příkaz má následující parametry:

  • -i multipass-vm-inventory.yml
    Použijte vlastní soubor inventáře s názvem multipass-vm-inventory.yml
  • multipassvm1
    Název hostitele, na kterém se má modul spustit. V použitém inventáři musí být hostitel.
  • -m ping
    Určuje název modulu, který se má spustit – v tomto případě ping.

Výsledný výstup by měl vypadat takto:

multipassvm1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

Jak je vidět, spojení bylo úspěšně navázáno s Multipass VM a byl objeven interpret Pythonu.

Pokud se tedy vyskytnou nějaké problémy se spuštěním modulu ping proti hostiteli Multipass VM, přidejte -vvv do příkazu Ansible pro podrobnější výstup:

ansible -vvv -i multipass-vm-inventory.yml multipassvm1 -m ping

Po úspěšném provedení bude výše uvedený výstup generovat výstup podobný následujícímu (některý výstup byl vynechán):

ansible 2.10.3
...
Parsed /Users/ivan/AnsibleMultipass/multipass-vm-inventory.yml inventory source with yaml plugin
...
<192.168.64.20> ESTABLISH SSH CONNECTION FOR USER: vmadmin
<192.168.64.20> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="user_key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="vmadmin"' -o ConnectTimeout=10 -o StrictHostKeyChecking=no -o ControlMaster=no -o ControlPath=none 192.168.64.20 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo /home/vmadmin/.ansible/tmp `"&& mkdir "` echo /home/vmadmin/.ansible/tmp/ansible-tmp-1621106467.2205691-7451-138900743300503 `" && echo ansible-tmp-1621106467.2205691-7451-138900743300503="` echo /home/vmadmin/.ansible/tmp/ansible-tmp-1621106467.2205691-7451-138900743300503 `" ) && sleep 0'"'"''
<192.168.64.20> (0, b'ansible-tmp-1621106467.2205691-7451-138900743300503=/home/vmadmin/.ansible/tmp/ansible-tmp-1621106467.2205691-7451-138900743300503\n', b'')
<multipassvm1> Attempting python interpreter discovery
<192.168.64.20> ESTABLISH SSH CONNECTION FOR USER: vmadmin
<192.168.64.20> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="user_key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="vmadmin"' -o ConnectTimeout=10 -o StrictHostKeyChecking=no -o ControlMaster=no -o ControlPath=none 192.168.64.20 '/bin/sh -c '"'"'echo PLATFORM; uname; echo FOUND; command -v '"'"'"'"'"'"'"'"'/usr/bin/python'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.7'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.6'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.5'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python2.7'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python2.6'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'/usr/libexec/platform-python'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'/usr/bin/python3'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python'"'"'"'"'"'"'"'"'; echo ENDFOUND && sleep 0'"'"''
<192.168.64.20> (0, b'PLATFORM\nLinux\nFOUND\n/usr/bin/python3\nENDFOUND\n', b'')
<192.168.64.20> ESTABLISH SSH CONNECTION FOR USER: vmadmin
<192.168.64.20> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="user_key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="vmadmin"' -o ConnectTimeout=10 -o StrictHostKeyChecking=no -o ControlMaster=no -o ControlPath=none 192.168.64.20 '/bin/sh -c '"'"'/usr/bin/python3 && sleep 0'"'"''
<192.168.64.20> (0, b'{"platform_dist_result": [], "osrelease_content": "NAME=\\"Ubuntu\\"\\nVERSION=\\"20.04.2 LTS (Focal Fossa)\\"\\nID=ubuntu\\nID_LIKE=debian\\nPRETTY_NAME=\\"Ubuntu 20.04.2 LTS\\"\\nVERSION_ID=\\"20.04\\"\\nHOME_URL=\\"https://www.ubuntu.com/\\"\\nSUPPORT_URL=\\"https://help.ubuntu.com/\\"\\nBUG_REPORT_URL=\\"https://bugs.launchpad.net/ubuntu/\\"\\nPRIVACY_POLICY_URL=\\"https://www.ubuntu.com/legal/terms-and-policies/privacy-policy\\"\\nVERSION_CODENAME=focal\\nUBUNTU_CODENAME=focal\\n"}\n', b'')
...
multipassvm1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "invocation": {
        "module_args": {
            "data": "pong"
        }
    },
    "ping": "pong"
}
META: ran handlers

Lze zjistit podrobnosti o procesu čtení konfigurace inventáře, připojení k hostiteli pomocí SSH, ověření instalace Pythonu a získání informací o operačním systému hostitele.

Modul nastavení

Druhý a poslední modul Ansible, který v tomto článku vyzkouším, je instalační modul, který shromažďuje informace o hostitelích. Chcete-li získat informace o hostiteli Multipass VM, zadejte v okně terminálu následující příkaz:

ansible -i multipass-vm-inventory.yml multipassvm1 -m setup

Do konzole bude vycházet mnoho informací. Naštěstí je možné vybrat podmnožinu informací použitím filtru jako v tomto příkladu:

ansible -i multipass-vm-inventory.yml multipassvm1 -m setup -a "filter=ansible_env*"

Výše uvedené shromažďuje informace o multipassvm1 a uchovává pouze informace, které mají klíče začínající na ansible_env. V mém systému vypadá výstup takto:

multipassvm1 | SUCCESS => {
    "ansible_facts": {
        "ansible_env": {
            "DBUS_SESSION_BUS_ADDRESS": "unix:path=/run/user/1000/bus",
            "HOME": "/home/vmadmin",
            "LANG": "C.UTF-8",
            "LC_CTYPE": "C.UTF-8",
            "LOGNAME": "vmadmin",
            "MOTD_SHOWN": "pam",
            "PATH": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin",
            "PWD": "/home/vmadmin",
            "SHELL": "/bin/sh",
            "SSH_CLIENT": "192.168.64.1 49301 22",
            "SSH_CONNECTION": "192.168.64.1 49301 192.168.64.20 22",
            "SSH_TTY": "/dev/pts/0",
            "TERM": "xterm-256color",
            "USER": "vmadmin",
            "XDG_RUNTIME_DIR": "/run/user/1000",
            "XDG_SESSION_CLASS": "user",
            "XDG_SESSION_ID": "8",
            "XDG_SESSION_TYPE": "tty"
        },
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false
}

Výše uvedené jsou proměnné prostředí nastavené pro uživatele vmadmin při přihlášení k virtuálnímu počítači Multipass.

Možnost vytvořit inventář Ansible, který obsahuje hostitele Multipass VM, nám umožňuje používat Ansible s tímto druhem virtuálních strojů. Můžeme tak vytvořit Ansible playbooky pro nastavení a konfiguraci virtuálních strojů Multipass, což využiji v budoucích článcích.


Linux
  1. Ansible Guide:Správa souborů pomocí Ansible

  2. Nasaďte Nextcloud na Docker pomocí Ansible

  3. Obsluhujte více domén pomocí virtuálních hostitelů

  1. Jak vytvořit uživatele Linuxu pomocí Ansible

  2. Týdenní virtuální stroje s sestaveními skriptů

  3. Nasazení složky souborů šablon pomocí ansible

  1. Jak spravovat vzdáleného hostitele Windows pomocí Ansible

  2. Jak spravovat virtuální stroje KVM pomocí Virt-Manager

  3. Spravujte virtuální stroje KVM pomocí webové konzole Cockpit