- Alle ExtraHop-Systeme
Thank you! We will contact you soon to ask how we can improve our documentation. We appreciate your feedback.
Wie können wir uns verbessern?
Automatisieren Sie die Bereitstellung virtueller Appliances mit VMware und Ansible
In diesem Handbuch wird erklärt, wie Sie Ansible-Playbooks und Python-Skripte erstellen, die virtuelle Appliances auf einem VMware vSphere-Server bereitstellen und ESX/ESXi-Hosts für die Spiegelung von Wire-Daten konfigurieren.
Sie müssen mit der Verwaltung von VMware und der Erstellung von Ansible-Playbooks vertraut sein. Darüber hinaus erfordern diese Verfahren die folgenden VMware Python-Module und Befehlszeilentools:
- PyvMomi 6.7.3
- Installationsanweisungen finden Sie unter http://vmware.github.io/pyvmomi-community-samples/#getting-started.
- OVF-Werkzeug 4.2.0
- Installationsanweisungen finden Sie unter https://code.vmware.com/web/tool/4.3.0/ovf.
Daten zu Spiegeldrähten
Sie müssen vSwitches auf ESX/ESXi-Servern so konfigurieren, dass sie wire data spiegeln, damit virtuelle ExtraHop-Appliances den Netzwerkverkehr überwachen können.
Überwachen Sie den externen Verkehr
Um den externen Verkehr zu überwachen, müssen Sie einen zweiten vSwitch auf einer Netzwerkschnittstelle erstellen. Diese Schnittstelle stellt eine Verbindung zu einem Mirror, Tap oder Aggregator her, der den Datenverkehr von einem Switch kopiert.
-
Erstellen Sie Einträge für die ESX/ESXi-Hosts, die Sie konfigurieren möchten, in Ihrer
Ansible-Inventardatei, ähnlich dem folgenden Beispiel:
esxis: hosts: esxi1.example.com: vswitch: vSwitch1 port_group: "Remote Port Mirror" vmnic: vmnic1 vars: vcenter: vcenter.example.com user: extrahop@vsphere.local password: !vault | $ANSIBLE_VAULT;1.1;AES256 32313761623336326566303039613131373465663363326130336435326432666335333739643539 6266386436363563653363306137653839633334666466630a643032303035376137363839656330 63396465323039666531353437663934343735663638303166316534316134633739626231386662 3234363063636563650a326336343334393638336433303063623636376231643934323961393338 6133
Die obigen Beispielinventareinträge definieren die folgenden Konfigurationsvariablen:
- esxi1.example.com
- Der Name des ESX/ESXi-Hosts, auf dem die virtuellen Appliances bereitgestellt werden .
- vswitch
- Der Name des zweiten zu erstellenden vSwitches. Wir empfehlen, dass Sie den vSwitch benennen, indem Sie eine Zahl anhängen. Zum Beispiel, wenn vSwitch1 ist bereits auf Ihrem ESX/ESXi-Host vorhanden, geben Sie an vSwitch2.
- Portgruppe
- Der Name der Portgruppe, die auf dem vSwitch erstellt werden soll.
- vmnic
- Der Name der NIC, zu der der vSwitch hinzugefügt werden soll.
- vcenter
- Der Hostname des vCenter Server.
- Benutzer
- Der Name eines Benutzerkonto auf dem vCenter Server.
- Passwort
- Das Passwort des Benutzerkonto.
-
Erstellen Sie einen Aufgabeneintrag in einer YML-Playbook-Datei, ähnlich dem folgenden Beispiel:
- name: Mirror Wire Data eh_vsphere_external_mirror: esxi: "{{ inventory_hostname }}" vswitch: "{{ vswitch }}" port_group: "{{ port_group }}" vmnic: "{{ vmnic }}" vcenter: "{{ vcenter }}" user: "{{ user }}" password: "{{ password }}"
-
Fügen Sie Ihrem Bibliotheksverzeichnis ein Python-Skript hinzu und öffnen Sie die Datei in einem
Texteditor.
In diesem Beispiel heißt das Skript /library/eh_vsphere_external_mirror.py.
-
Importieren Sie alle Python-Module, die das Skript benötigt.
Der folgende Code importiert die Module, die für den Rest des Verfahrens erforderlich sind:
from ansible.module_utils.basic import AnsibleModule from pyVim import connect from pyVmomi import vim import ssl
-
Erstellen Sie ein AnsibleModule-Objekt und importieren Sie Variablen aus der .yml-Datei:
module = AnsibleModule( argument_spec = dict( esxi = dict(required=True), vswitch = dict(required=True), port_group = dict(required=True), vmnic = dict(required=True), vcenter = dict(required=True), user = dict(required=True), password = dict(required=True, no_log=True) ), supports_check_mode=False ) esxi = module.params['esxi'] vswitch = module.params['vswitch'] port_group = module.params['port_group'] vmnic = module.params['vmnic'] vcenter = module.params['vcenter'] user = module.params['user'] password = module.params['password']
-
Stellen Sie eine Verbindung zum vCenter Server her:
context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) try: si = connect.SmartConnect(host=vcenter, user=user, pwd=password, sslContext=context) except: module.fail_json(msg='Could not connect to vcenter.')
-
Rufen Sie ein Objekt ab, das den ESX/ESXi-Server darstellt:
content = si.RetrieveContent() object_view = content.viewManager.CreateContainerView(content.rootFolder, [], True) for obj in object_view.view: if isinstance(obj, vim.HostSystem): if obj.name.lower() == esxi.lower(): object_view.Destroy() host_system = obj object_view.Destroy() host_network_system = host_system.configManager.networkSystem
-
Konfigurieren Sie den neuen virtuellen Switch und fügen Sie ihn hinzu:
switch_spec = vim.host.VirtualSwitch.Specification() switch_spec.numPorts = 120 switch_spec.bridge = vim.host.VirtualSwitch.BondBridge(nicDevice=[vmnic]) host_network_system.AddVirtualSwitch(vswitchName=vswitch, spec=switch_spec)
-
Konfigurieren Sie die neue Portgruppe:
spec = vim.host.PortGroup.Specification() spec.name = port_group spec.vswitchName = vswitch spec.vlanId = 4095 security_policy = vim.host.NetworkPolicy.SecurityPolicy() security_policy.allowPromiscuous = True security_policy.forgedTransmits = True security_policy.macChanges = True spec.policy = vim.host.NetworkPolicy(security=security_policy)
-
Fügen Sie die Portgruppe hinzu:
host_network_system.AddPortGroup(portgrp=spec)
Überwachen Sie den internen VM-Verkehr
Damit eine virtuelle Appliance den internen VM-Verkehr überwachen kann, müssen Sie eine zusätzliche Portgruppe auf dem virtuellen Standard-Switch eines ESX/ESXi-Hosts erstellen.
-
Erstellen Sie Einträge für die ESX/ESXi-Hosts, die Sie konfigurieren möchten, in Ihrer
Ansible-Inventardatei, ähnlich dem folgenden Beispiel:
esxis: hosts: esxi1.example.com: local_port_mirror: "Remote Port Mirror" vars: vcenter: vcenter.example.com user: extrahop@vsphere.local password: !vault | $ANSIBLE_VAULT;1.1;AES256 32313761623336326566303039613131373465663363326130336435326432666335333739643539 6266386436363563653363306137653839633334666466630a643032303035376137363839656330 63396465323039666531353437663934343735663638303166316534316134633739626231386662 3234363063636563650a326336343334393638336433303063623636376231643934323961393338 6133
Die obigen Beispielinventareinträge definieren die folgenden Konfigurationsvariablen:
- esxi1.example.com
- Der Name des ESX/ESXi-Hosts, auf dem die virtuellen Appliances bereitgestellt werden .
- local_port_mirror
- Der Name der Portgruppe, die auf dem vSwitch erstellt werden soll.
- vcenter
- Der Hostname des vCenter Server.
- Benutzer
- Der Name eines Benutzerkonto auf dem vCenter Server.
- Passwort
- Das Passwort des Benutzerkonto.
-
Erstellen Sie einen Aufgabeneintrag in einer YML-Playbook-Datei, ähnlich dem folgenden Beispiel:
- name: Mirror Intra-VM Wire Data when: local_port_mirror is defined eh_vsphere_intra_mirror: esxi: "{{ inventory_hostname }}" local_port_mirror: "{{ local_port_mirror }}" vcenter: "{{ vcenter }}" user: "{{ user }}" password: "{{ password }}"
-
Fügen Sie Ihrem Bibliotheksverzeichnis ein Python-Skript hinzu und öffnen Sie die Datei in einem
Texteditor.
In diesem Beispiel heißt das Skript /library/eh_vsphere_intra_mirror.py.
-
Importieren Sie alle Python-Module, die das Skript benötigt.
Der folgende Code importiert die Module, die für den Rest des Verfahrens erforderlich sind:
from ansible.module_utils.basic import AnsibleModule from pyVim import connect from pyVmomi import vim import ssl
-
Erstellen Sie ein AnsibleModule-Objekt und importieren Sie Variablen aus der .yml-Datei:
module = AnsibleModule( argument_spec = dict( esxi = dict(required=True), local_port_mirror = dict(required=True), vcenter = dict(required=True), user = dict(required=True), password = dict(required=True, no_log=True) ), supports_check_mode=False ) esxi = module.params['esxi'] local_port_mirror = module.params['local_port_mirror'] vcenter = module.params['vcenter'] user = module.params['user'] password = module.params['password']
-
Stellen Sie eine Verbindung zum vCenter Server her:
context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) try: si = connect.SmartConnect(host=vcenter, user=user, pwd=password, sslContext=context) except: module.fail_json(msg='Could not connect to vcenter.')
-
Rufen Sie ein Objekt ab, das den ESX/ESXi-Server darstellt:
content = si.RetrieveContent() object_view = content.viewManager.CreateContainerView(content.rootFolder, [], True) for obj in object_view.view: if isinstance(obj, vim.HostSystem): if obj.name.lower() == esxi.lower(): object_view.Destroy() Host_sytem = obj object_view.Destroy() host_network_system = host_system.configManager.networkSystem
-
Konfigurieren Sie die neue Portgruppe:
spec = vim.host.PortGroup.Specification() spec.name = local_port_mirror spec.vswitchName = 'vSwitch0' spec.vlanId = 4095 network_policy = vim.host.NetworkPolicy() network_policy.security = vim.host.NetworkPolicy.SecurityPolicy() network_policy.security.allowPromiscuous = True security_policy.forgedTransmits = True security_policy.macChanges = True spec.policy = network_policy
-
Fügen Sie die neue Portgruppe hinzu:
host_network_system.AddPortGroup(spec)
Stellen Sie die OVA-Datei bereit
Das folgende Beispiel zeigt, wie Sie ein Playbook und eine Aufgabenbibliothek einrichten, um die OVA-Datei für ein bereitzustellen Sensor VM. Die OVA-Datei muss auf den Computer heruntergeladen werden, auf dem Ansible ausgeführt wird.
-
Erstellen Sie Einträge für virtuelle Appliances in Ihrer Ansible-Inventardatei,
ähnlich dem folgenden Beispiel:
vms: hosts: exampleTestEDA: app_type: EDA datacenter: "Example Datacenter" folder: "VM Folder" esxi: esxi1.example.com datastore: DATA ova: ../firmware_images/extrahop-eda-1100v-vmware-7.9.0.2924.ova add_disk: 250 vars: vcenter: vcenter.example.com user: extrahop@vsphere.local password: !vault | $ANSIBLE_VAULT;1.1;AES256 32313761623336326566303039613131373465663363326130336435326432666335333739643539 6266386436363563653363306137653839633334666466630a643032303035376137363839656330 63396465323039666531353437663934343735663638303166316534316134633739626231386662 3234363063636563650a326336343334393638336433303063623636376231643934323961393338 6133
Die obigen Inventareinträge definieren die folgenden Konfigurationsvariablen:
- Beispiel EDA
- Der Name der VM.
- App-Typ
- Der Typ der virtuellen Appliance.
- Rechenzentrum
- Das Rechenzentrum, das den ESX/ESXi-Host enthält.
- Mappe
- Der Ordner mit den VMs im Rechenzentrum.
- esxi
- Der Name des ESX/ESXi-Hosts, auf dem die VM bereitgestellt wird.
- Datenspeicher
- Der Name des Datenspeichers, der die VM enthalten wird.
- Eizellen
- Der relative Pfad der ExtraHop-OVA-Datei.
- vcenter
- Der Hostname des vCenter Server.
- Benutzer
- Der Name eines Benutzerkonto auf dem vCenter Server.
- Passwort
- Das Passwort des Benutzerkonto.
-
Erstellen Sie einen Aufgabeneintrag in einem .yml-Playbook, ähnlich dem folgenden Beispiel:
- name: Deploy ExtraHop OVA to vSphere eh_vsphere_deploy: appliance: "{{ inventory_hostname }}" app_type: "{{ app_type }}" datacenter: "{{ datacenter }}" folder: "{{ folder }}" esxi: "{{ esxi }}" datastore: "{{ datastore }}" ova: "{{ ova }}" vcenter: "{{ vcenter }}" user: "{{ user }}" password: "{{ password }}"
-
Fügen Sie Ihrem Bibliotheksverzeichnis ein Python-Skript hinzu und öffnen Sie die Datei in einem
Texteditor.
In diesem Beispiel heißt das Skript /library/eh_vsphere_deploy.py.
-
Importieren Sie alle Python-Module, die das Skript benötigt.
Der folgende Code importiert die Module, die für den Rest des Verfahrens erforderlich sind:
from ansible.module_utils.basic import AnsibleModule import subprocess import urllib
-
Erstellen Sie ein AnsibleModule-Objekt und importieren Sie Variablen aus der .yml-Datei:
module = AnsibleModule( argument_spec = dict( appliance = dict(required=True), app_type = dict(required=True), datacenter = dict(required=True), folder = dict(required=True), esxi = dict(required=True), ova = dict(required=True), datastore = dict(required=True), vcenter = dict(required=True), user = dict(required=True), password = dict(required=True, no_log=True) ), supports_check_mode=False ) appliance = module.params['appliance'] app_type = module.params['app_type'] datastore = module.params['datastore'] ova = module.params['ova'] attrs = { 'vcenter': module.params['vcenter'], 'user': module.params['user'], 'password': module.params['password'], 'datacenter': module.params['datacenter'], 'folder': module.params['folder'], 'esxi': module.params['esxi'] }
-
Erstellen Sie die Hostzeichenfolge, die den Speicherort des ESX/ESXi-Hosts in vCenter angibt:
attrs = dict((k, urllib.quote(v)) for k, v in attrs.items()) host_str = 'vi://{user}:{password}@{vcenter}/{datacenter}/host/{folder}/{esxi}'.format(**attrs)
Weitere Informationen zum Erstellen einer Hostzeichenfolge finden Sie in der OVF-Tool-Dokumentation auf der VMware-Website: https://vdc-download.vmware.com/vmwb-repository/dcr-public/bb505ca7-88b5-4b11-aff4-f59125ab27bc/f3d05149-23e9-4ac2-8f99-0c851a8a5231/ovftool-430-userguide.pdf
-
Erstellen Sie ein Array zur Definition der ovtool Befehl:
cmd = ['ovftool', '--disableVerification', '--noSSLVerify', '-ds=%s' % datastore, '-dm=%s' % 'thick', '-n=%s' % eda, '--net:VM Network=VM Network', '--X:logFile=ovflogs.log', '--X:logLevel=verbose', ova, host_str] if app_type == 'EDA' or app_type == 'ETA': cmd.insert(7, '--net:Remote Port Mirror=Remote Port Mirror')
Hinweis: Dieser Code definiert zwei Netzwerkzuordnungen für Sensoren und Paketspeicher. VM Network ordnet sich dem VM-Verwaltungsnetzwerk auf dem ESX/ESXi-Host zu. Remote Port Mirror ordnet sich dem Netzwerk zu, das wire data spiegelt. Die Namen der Zielnetzwerke müssen mit den Netzwerken auf Ihrem ESX/ESXi-Host übereinstimmen. Wenn Sie beispielsweise ein Netzwerk mit dem Namen konfiguriert haben Local Port Mirror um den internen VM-Verkehr zu spiegeln, geben Sie Folgendes an: --net:Remote Port Mirror=Local Port Mirror
Für EDA 6100v-Appliances können Sie dem obigen Array zusätzliche Netzwerkzuordnungen für Remote Port Mirror 2 und Remote Port Mirror 3 hinzufügen, zum Beispiel:--net:Remote Port Mirror2=Remote Port Mirror2
-
Führen Sie den ovftool Befehl mit dem
subprocess.Popen Klasse:
proc = subprocess.Popen(cmd) proc.communicate() if proc.returncode != 0: module.fail_json(msg='Unable to deploy OVA') else: module.exit_json(changed=True, msg="Deployed OVA")
Fügen Sie eine Festplatte in VMware hinzu (optional)
Für Sensoren die für die PCAP und alle EXAs lizenziert sind, müssen Sie eine zusätzliche Festplatte für die virtuelle Appliance konfigurieren.
-
Erstellen Sie Einträge für virtuelle Appliances in Ihrer Ansible-Inventardatei ähnlich
dem folgenden Beispiel:
vms: hosts: exampleEXA: add_disk: 150 app_type: EXA datacenter: "Example Datacenter" folder: "VM Folder" esxi: esxi1.example.com ova: ../firmware_images/extrahop-exa-5100v-xs-vmware-7.9.0.2924.ova vars: vcenter: vcenter.example.com user: extrahop@vsphere.local password: !vault | $ANSIBLE_VAULT;1.1;AES256 32313761623336326566303039613131373465663363326130336435326432666335333739643539 6266386436363563653363306137653839633334666466630a643032303035376137363839656330 63396465323039666531353437663934343735663638303166316534316134633739626231386662 3234363063636563650a326336343334393638336433303063623636376231643934323961393338 6133
Die obigen Inventareinträge definieren die folgenden Konfigurationsvariablen:
- Beispiel EXA
- Der Name der VM.
- Festplatte hinzufügen
- Die Größe der hinzuzufügenden Festplatte in GB. Die folgenden Größenwerte sind
gültig:
Virtuelle Appliance Größe EDA 1100 v 250 EDA 6100 v 500 EXA-XS 250 oder weniger EXA-S 500 oder weniger EXA-M 1000 oder weniger EXA-L 2000 oder weniger - App-Typ
- Der Typ der virtuellen Appliance.
- Rechenzentrum
- Das Rechenzentrum, das den ESX/ESXi-Host enthält.
- Mappe
- Der Ordner mit den VMs im Rechenzentrum.
- esxi
- Der Name des ESX/ESXi-Hosts, auf dem die VM bereitgestellt wird.
- Datenspeicher
- Der Name des Datenspeichers, der die VM enthalten wird.
- Eizellen
- Der relative Pfad der ExtraHop-OVA-Datei.
- vcenter
- Der Hostname des vCenter Server.
- Benutzer
- Der Name eines Benutzerkonto auf dem vCenter Server.
- Passwort
- Das Passwort des Benutzerkonto.
-
Erstellen Sie einen Aufgabeneintrag in einem .yml-Playbook, ähnlich dem folgenden Beispiel:
- name: Add a disk when: add_disk is defined eh_vsphere_add_disk: vm_name: "{{ inventory_hostname }}" add_disk: "{{ add_disk }}" vcenter: "{{ vcenter }}" user: "{{ user }}" password: "{{ password }}"
-
Fügen Sie Ihrem Bibliotheksverzeichnis ein Python-Skript hinzu und öffnen Sie die Datei in einem
Texteditor.
In diesem Beispiel heißt das Skript /library/eh_vsphere_add_disk.py.
-
Importieren Sie alle Python-Module, die das Skript benötigt.
Der folgende Code importiert die Module, die für den Rest des Verfahrens erforderlich sind:
from ansible.module_utils.basic import AnsibleModule from pyVim import connect from pyVmomi import vim import ssl
-
Erstellen Sie ein AnsibleModule-Objekt und importieren Sie Variablen aus der .yml-Datei:
module = AnsibleModule( argument_spec = dict( vm_name = dict(required=True), add_disk = dict(required=True), vcenter = dict(required=True), user = dict(required=True), password = dict(required=True, no_log=True) ), supports_check_mode=False ) vm_name = module.params['vm_name'] add_disk = module.params['add_disk'] vcenter = module.params['vcenter'] user = module.params['user'] password = module.params['password']
-
Übersetze die Größe der PCAP-Festplatte von GB in KB:
add_disk = int(add_disk) * 1024 * 1024
-
Stellen Sie eine Verbindung zum vCenter Server her:
context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) try: si = connect.SmartConnect(host=vcenter, user=user, pwd=password, sslContext=context) except: module.fail_json(msg='Could not connect to vcenter.')
-
Rufen Sie ein Objekt ab, das die VM darstellt, zu der Sie die Festplatte
hinzufügen.
content = si.RetrieveContent() object_view = content.viewManager.CreateContainerView(content.rootFolder, [], True) for obj in object_view.view: if isinstance(obj, vim.VirtualMachine): if obj.name.lower() == vm_name.lower(): object_view.Destroy() return obj object_view.Destroy()
-
Suchen Sie den Speicherort, an dem das virtuelle Laufwerk hinzugefügt werden soll, indem Sie alle Geräte auf der VM durchqueren.
Die Einheitsnummer der Festplatte sollte der Einheitsnummer der letzten virtuellen Festplatte
auf dem Gerät plus eins entsprechen. Rufen Sie außerdem das Objekt ab, das den
iSCSI-Controller für die VM darstellt:
for dev in vm.config.hardware.device: if isinstance(dev, vim.vm.device.VirtualDisk): unit_number = int(dev.unitNumber) + 1 if unit_number == 7: unit_number += 1 if unit_number >= 16: module.fail_json(msg="Number of disks not supported") if isinstance(dev, vim.vm.device.VirtualSCSIController): controller = dev
-
Konfigurieren Sie die Festplattenspezifikationen:
dev_changes = [] diskSpec = vim.vm.device.VirtualDeviceSpec() diskSpec.fileOperation = "create" diskSpec.operation = vim.vm.device.VirtualDeviceSpec.Operation.add diskSpec.device = vim.vm.device.VirtualDisk() diskSpec.device.backing = vim.vm.device.VirtualDisk.FlatVer2BackingInfo() diskSpec.device.backing.thinProvisioned = False diskSpec.device.backing.diskMode = 'persistent' diskSpec.device.unitNumber = unit_number diskSpec.device.capacityInKB = add_disk diskSpec.device.controllerKey = controller.key dev_changes.append(diskSpec) vm_spec = vim.vm.ConfigSpec() vm_spec.deviceChange = dev_changes
-
Fügen Sie die Festplatte hinzu:
vm.ReconfigVM_Task(spec=vm_spec)
Erhöhen Sie die Packetstore-Festplatte auf einem ExtraHop-Packetstore (optional)
Das folgende Beispiel zeigt, wie die Kapazität der Packetstore-Festplatte auf einer ETA 1150v-Appliance erhöht werden kann.
Hinweis: | Das Beispiel gilt nicht für ETA 6150-Appliances, die eine Packetstore-Festplatte zwischen 1 TB und 25 TB benötigen. |
-
Erstellen Sie Einträge für virtuelle Appliances in Ihrer Ansible-Inventardatei ähnlich
dem folgenden Beispiel:
vms: hosts: exampleETA: app_type: ETA datacenter: "Example Datacenter" folder: "VM Folder" esxi: esxi1.example.com datastore: DATA ova: ../firmware_images/extrahop-eta-1150v-vmware-7.9.0.2924.ova increase_disk: 2000 vars: vcenter: vcenter.example.com user: extrahop@vsphere.local password: !vault | $ANSIBLE_VAULT;1.1;AES256 32313761623336326566303039613131373465663363326130336435326432666335333739643539 6266386436363563653363306137653839633334666466630a643032303035376137363839656330 63396465323039666531353437663934343735663638303166316534316134633739626231386662 3234363063636563650a326336343334393638336433303063623636376231643934323961393338 6133
-
Erstellen Sie einen Aufgabeneintrag in einer YML-Playbook-Datei, ähnlich dem folgenden Beispiel:
- name: Increase an ETA packetstore when: increase_disk is defined eh_vsphere_increase_disk: vm_name: "{{ inventory_hostname }}" increase_disk: "{{ increase_disk }}" datacenter: "{{ datacenter }}" vcenter: "{{ vcenter }}" user: "{{ user }}" password: "{{ password }}"
-
Fügen Sie Ihrem Bibliotheksverzeichnis ein Python-Skript hinzu und öffnen Sie die Datei in einem
Texteditor.
In diesem Beispiel heißt das Skript library/eh_vsphere_increase_disk.py.
-
Importieren Sie alle Python-Module, die das Skript benötigt.
Der folgende Code importiert die Module, die für den Rest des Verfahrens erforderlich sind:
from ansible.module_utils.basic import AnsibleModule from pyVim import connect from pyVmomi import vim import ssl
-
Erstellen Sie ein AnsibleModule-Objekt und importieren Sie Variablen aus der .yml-Datei:
module = AnsibleModule( argument_spec = dict( vm_name = dict(required=True), increase_disk = dict(required=True), datacenter = dict(required=True), vcenter = dict(required=True), user = dict(required=True), password = dict(required=True, no_log=True) ), supports_check_mode=False ) vm_name = module.params['vm_name'] increase_disk = module.params['increase_disk'] datacenter = module.params['datacenter'] vcenter = module.params['vcenter'] user = module.params['user'] password = module.params['password']
-
Übersetze die Größe der Festplatte von GB in KB:
increase_disk = int(increase_disk) * 1024 * 1024
-
Stellen Sie eine Verbindung zum vCenter Server her:
context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) try: si = connect.SmartConnect(host=vcenter, user=user, pwd=password, sslContext=context) except: module.fail_json(msg='Could not connect to vcenter.')
-
Rufen Sie ein Objekt ab, das die VM der ETA darstellt:
content = si.RetrieveContent() object_view = content.viewManager.CreateContainerView(content.rootFolder, [], True) for obj in object_view.view: if isinstance(obj, vim.VirtualMachine): if obj.name.lower() == vm_name.lower(): object_view.Destroy() vm = obj object_view.Destroy()
-
Rufen Sie den Pfad der Datei ab, die die Festplatte unterstützt, deren Größe Sie ändern möchten:
for dev in vm.config.hardware.device: if isinstance(dev, vim.vm.device.VirtualDisk) and dev.deviceInfo.label == 'Hard disk 2': disk = dev path = disk.backing.fileName
-
Rufen Sie ein Objekt ab, das das Rechenzentrum darstellt, in dem sich die VM befindet:
datacenter_list = si.content.rootFolder.childEntity for d in datacenter_list: if d.name == dcName: datacenter_obj = d
-
Erhöhen Sie die Größe der Festplatte:
virtualDiskManager = si.content.virtualDiskManager virtualDiskManager.ExtendVirtualDisk(path, datacenter_obj, increase_disk, False)
Danke für deine Rückmeldung. Dürfen wir Sie kontaktieren, um weitere Fragen zu stellen?