Strona korzysta z plików cookies w celu realizacji usług i zgodnie z Polityką Plików Cookies.
Data publikacji: 03-03-2023 | Autor: | Bartosz Bielawski |
W tej części cyklu przyglądamy się temu, jak infrastrukturę VMware'a można konfigurować za pomocą Ansible’a. Omawiamy poszczególne kroki na podstawie konfigurowania pamięci masowych. Założymy przy tym, że same pamięci masowe tworzone będą również za pomocą Ansible’a na urządzeniach NetAppa. Sprawdzimy też, jakie inne moduły dostępne są w ramach kolekcji modułów Community.VMware.
W odróżnieniu od wielu modułów Ansible’a, korzystając z modułu Community.VMware (podobnie jest w przypadku modułów z kolekcji NetApp.ONTAP), nie będziemy próbowali konfigurować maszyny, z którą bezpośrednio się połączymy. Serwer ten będzie jedynie pośredniczyć w komunikacji z właściwą infrastrukturą VMware’u czy klastrami NetAppa. Mimo że z serwerami ESXi i klastrami NetAppa moglibyśmy łączyć się za pomocą sesji SSH, to takie połączenie będzie realizowane z wykorzystaniem REST API.
Vmware i NetApp a inne moduły
Nie interesują nas zatem informacje o bieżącym systemie, ponieważ jego właściwości nie wpłyną na to, jakie parametry przekażemy do poszczególnych modułów. Zamiast faktów pobieranych z bieżącego systemu pobierzemy informacje od vCenter odnośnie do ustawień naszej infrastruktury VMware’u czy od klastrów NetAppa o istniejących zasobach dyskowych. Posłużą nam do tego moduły informacyjne, których jedynym zadaniem jest zbieranie informacji o istniejących zasobach. W naszym przypadku przydatny będzie przede wszystkim moduł vmware_datastore_info. Zbierze on informację o istniejących datastore’ach w ramach interesującego nas klastra, do którego będziemy chcieli podpiąć nowy dysk, oraz vmware_host_disk_info, który podobną informację zbierze o fizycznych dyskach. Przyda się nam też moduł na_ontap_rest_info – pozwoli nam pobrać dane o dostępnych LUN-ach.
Łączenie dysków z serwerami
W interesującym nas scenariuszu zadbamy o to, by nowo utworzony LUN na urządzeniu NetAppa podłączyć do klastra VMware’u. Postaramy się jednocześnie, by nazwa w ramach NetAppa pokrywała się z tą, którą nadamy dyskowi w VMware (ułatwi nam to późniejszą administrację). Zanim jednak zaczniemy komunikować się z obiema platformami, musimy zadbać o uwierzytelnianie.
VMware i NetApp – uwierzytelnianie
O uwierzytelnianie należy zadbać w obu przypadkach. Jeśli chodzi o NetAppa, możemy skorzystać z certyfikatów lub pary użytkownik i hasło. W przypadku VMware’a uwierzytelniać się będziemy za pomocą użytkownika i hasła. Aby nie powielać tych danych (oraz danych dotyczących klastra NetAppa lub vCenter VMware’u), utworzymy odpowiednie dane na samym początku naszego playbooka:
- set_fact:
vcauth: &vcauth
hostname: "{{ vcenter }}"
username: "{{ vcenter_user }}"
password: "{{ vcenter_password }}"
auth: &auth
hostname: "{{ netapp_hostname }}"
cert_filepath: "{{ cert_filepath }}"
key_filepath: "{{ key_filepath }}"
https: true
validate_certs: false
Dzięki temu wszystkie zasoby muszą jedynie przekazać uprzednio utworzony blok, korzystając z przeznaczonej do tego składni. Dla przykładu wspomniane wcześniej moduły informacyjne (dla NetAppa i VMware’u):
- name: Zbieranie informacji o istniejących datastorach
community.vmware.vmware_datastore_info:
cluster: "{{ cluster }}"
properties: [name]
<<: *vcauth
register: datastores
- name: Zbieranie informacji o istniejących LUNach na klastrze NetApp
netapp.ontap.na_ontap_rest_info:
gather_subset:
- storage_luns_info
parameters:
name: "*{{ lun }}"
fields:
- name
- serial_number
<<: *auth
register: luninformation
Pobrane informacje rejestrujemy, by móc skorzystać z nich w kolejnych krokach.
Tworzenie filtrów
Ansible ma wiele filtrów, dzięki którym można przetwarzać uprzednio zebrane informacje. Niestety, jeśli chcemy, by nasze datastore’y nazywały się tak samo jak LUN-y na NetAppie, musimy powiązać informację z VMware’u (gdzie dyski reprezentowane będą przez WWID) oraz NetAppa (od którego uzyskamy jedynie informację o numerze seryjnym, jaki po przetworzeniu określać będzie unikalny fragment WWID). Utworzymy w tym celu dwa filtry: jeden dokonujący operacji podobnej do JOIN znanego z TSQL i drugi, który przetworzy serial (w wersji ASCII) na liczbę szesnastkową:
class FilterModule(object):
def ascii_to_hex(self, ascii):
return ascii.encode("ascii").hex()
def to_dict(self, obj, attr=""):
out = dict()
if type(obj) is not dict:
temp = dict()
temp["name"] = obj
obj = temp
if attr != "":
out[attr] = obj
else:
out.update(obj)
return out
def join_dict_list(self, list1, list2, attr1="", attr2="", on="True"):
out = []
for a in list1:
for b in list2:
_item_ = dict()
_item_.update(self.to_dict(a, attr1))
_item_.update(self.to_dict(b, attr2))
if eval(on.replace('`', '"')):
out.append(_item_)
return out
def filters(self):
return {
'ascii_to_hex': self.ascii_to_hex,
'to_dict': self.to_dict,
'join_dict_list': self.join_dict_list
}
Plik zawierający filtry musimy umieścić w folderze filter_plugins w ramach naszego repozytorium. Dzięki temu informację pobraną od VMware’u będziemy mogli powiązać z informacjami uzyskanymi od NetAppa.
Najpierw musimy przeskanować HBA:
- name: Przeskanowanie HBA dla wybranego klastra VMware
community.vmware.vmware_host_scanhba:
cluster_name: "{{ cluster }}"
refresh_storage: yes
rescan_hba: yes
rescan_vmfs: yes
<<: *vcauth
Następnie pobierzemy informację o fizycznych dyskach, z założeniem, że będzie wśród nich nowo utworzony LUN:
- name: Pobranie informacji o dyskach VMware
community.vmware.vmware_host_disk_info:
cluster_name: "{{ cluster }}"
<<: *vcauth
register: vmwarediskinfo
[...]
Autor zawodowo zajmuje się informatyką. Były Microsoft MVP w dziedzinie PowerShella. Bloger oraz jeden z moderatorów forum dotyczącego skryptów w serwisie TechNet. Autor książki „Windows PowerShell 5.1 Biblia”.
Pełna treść artykułu jest dostępna w papierowym wydaniu pisma.
Transmisje online zapewnia: StreamOnline