GNU/Linux >> Belajar Linux >  >> Linux

Mesin Virtual Multipass dengan menggunakan Ansible

Posting ini tentang Mesin Virtual Multipass dengan menggunakan Ansible

Prasyarat

Mesin virtual Multipass harus dibuat sesuai dengan instruksi dalam artikel Mesin virtual Multipass dan mengautentikasi menggunakan kunci pribadi . Perhatikan di mana file yang berisi kunci pribadi disimpan.
Prasyarat kedua adalah Ansible. Petunjuk tentang cara menginstal Ansible dapat ditemukan di dokumentasi resmi Ansible.

Persiapan

Persiapan untuk contoh artikel ini adalah sebagai berikut:

  • Buat direktori untuk menampung file-file contoh di artikel ini.
    Saya akan memanggil direktori saya “AnsibleMultipass”.
  • Salin file kunci pribadi, bernama “user_key”, ke direktori baru.
    File kunci ini dibuat sebagai bagian dari pembuatan VM Multipass di artikel sebelumnya.
  • Mulai VM Multipass yang memiliki autentikasi berbasis kunci.
  • Temukan alamat IP VM Multipass dengan autentikasi berbasis kunci.
    Ini dapat dilakukan dengan menggunakan, misalnya, daftar multipass perintah di jendela terminal. Dalam kasus saya, IP-nya adalah 192.168.64.20.

Inventaris yang Mungkin

Inventaris Ansible memberi tahu Ansible cara terhubung ke satu atau beberapa node dalam infrastruktur. Jadi, contoh artikel ini memiliki infrastruktur yang sangat kecil yang hanya terdiri dari satu mesin virtual.

Di direktori AnsibleMultipass, buat file bernama “multipass-vm-inventory.yml” dengan konten berikut:

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

Perhatikan bahwa:

  • Ada satu host dalam file inventaris Ansible ini – multipassvm1.
  • Jenis koneksi ke host ditentukan oleh nilai ansible_connection, yaitu SSH.
  • Alamat IP host, atau nama DNS jika ada, ditentukan oleh nilai ansible_host.
  • Alamat IP harus diganti dengan alamat IP VM Multipass lokal.
  • Nilai ansible_user, vmadmin, adalah nama pengguna yang akan digunakan saat menghubungkan ke host.
  • Nilai ini, vmadmin dalam contoh ini, harus berupa nama pengguna yang digunakan saat kunci dibuat dengan perintah ssh-keygen.
  • Ansible_ssh_common_args menentukan argumen umum yang ditambahkan ke perintah sftp, scp, dan ssh.
  • StrictHostKeyChecking=no akan menonaktifkan konfirmasi apakah kunci baru dapat dipercaya atau tidak. Sebagai gantinya, kunci baru apa pun akan ditambahkan secara diam-diam ke file known_hosts.
  • Pengaturan ControlMaster dan ControlPath adalah solusi untuk masalah di komputer saya yang disebabkan oleh ControlPath default yang berisi spasi yang tidak diloloskan. Ini mungkin tidak diperlukan di komputer lain dan dapat diabaikan.
  • Terakhir, nilai ansible_ssh_private_key_file menentukan nama, dan secara opsional lokasi, dari file kunci pribadi yang akan digunakan saat menghubungkan ke host.
  • Jika hanya nama file yang ditentukan, lokasi file kunci relatif terhadap file inventaris. Dapat menjadi lokasi mutlak.

Modul yang Memungkinkan

Dengan tersedianya inventaris Ansible, kini kami dapat menjalankan modul Ansible terhadap host di inventaris. Jadi, dalam artikel ini saya hanya akan memberikan beberapa contoh. Ada daftar semua modul Ansible yang tersedia dalam dokumentasi.

Modul Ping

Salah satu modul Ansbile adalah modul ping. Seperti yang dinyatakan oleh dokumentasinya, modul ping mencoba terhubung ke host dan memverifikasi instalasi Python yang dapat digunakan.
Di jendela terminal, terletak di direktori AnsibleMultipass, jalankan perintah berikut:

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

Perintah di atas memiliki parameter berikut:

  • -i multipass-vm-inventory.yml
    Gunakan file inventaris khusus bernama multipass-vm-inventory.yml
  • multipassvm1
    Nama host tempat menjalankan modul. Harus menjadi tuan rumah dalam inventaris yang digunakan.
  • -m ping
    Menentukan nama modul yang akan dieksekusi – ping dalam kasus ini.

Output yang dihasilkan akan terlihat seperti ini:

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

Seperti yang bisa dilihat, koneksi berhasil dibuat dengan VM Multipass dan penerjemah Python ditemukan.

Jadi, Jika ada masalah dalam menjalankan modul ping terhadap host VM Multipass, tambahkan -vvv ke perintah Ansible untuk keluaran verbose yang lebih banyak:

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

Dengan eksekusi yang berhasil, di atas akan menghasilkan output yang mirip dengan berikut (beberapa output telah dihilangkan):

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

Detail proses membaca konfigurasi inventaris, menghubungkan ke host menggunakan SSH, memverifikasi instalasi Python, dan memperoleh informasi tentang sistem operasi host dapat dilihat.

Modul Penyiapan

Modul Ansible kedua dan terakhir yang akan saya coba dalam artikel ini adalah modul setup, yang mengumpulkan informasi tentang host. Untuk mengumpulkan informasi tentang host VM Multipass, jalankan perintah berikut di jendela terminal:

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

Akan ada banyak output informasi ke konsol. Untungnya dimungkinkan untuk memilih subset informasi dengan menerapkan filter seperti dalam contoh ini:

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

Di atas mengumpulkan informasi tentang multipassvm1 dan hanya menyimpan informasi yang memiliki kunci yang dimulai dengan ansible_env. Di sistem saya, hasilnya terlihat seperti ini:

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
}

Di atas adalah variabel lingkungan yang disetel untuk pengguna vmadmin saat login ke VM Multipass.

Mampu membuat inventaris Ansible yang berisi host VM Multipass memungkinkan kami untuk menggunakan Ansible dengan mesin virtual semacam ini. Dengan demikian, kita dapat membuat buku pedoman Ansible untuk menyiapkan dan mengonfigurasi mesin virtual Multipass, sesuatu yang akan saya gunakan di artikel mendatang.


Linux
  1. Panduan Ansible:Kelola File menggunakan Ansible

  2. Cara membuat Pengguna Linux Menggunakan Ansible

  3. Menyebarkan folder file template menggunakan ansible

  1. Terapkan Nextcloud di Docker menggunakan Ansible

  2. Melayani beberapa domain dengan menggunakan virtual host

  3. Mesin Virtual Mingguan, dengan Skrip Build

  1. Cara Mengelola Host Windows Jarak Jauh menggunakan Ansible

  2. Cara Mengelola Mesin Virtual KVM Dengan Virt-Manager

  3. Kelola Mesin Virtual KVM Menggunakan Cockpit Web Console