- Infrastrukturní DevOps s HPE OneView (1) – Infrastructure as Code
- Infrastrukturní DevOps s HPE OneView (2) – API
- Infrastrukturní DevOps s HPE OneView (3) – Message bus
- Infrastrukturní DevOps s HPE OneView (4) – PowerShell
- Infrastrukturní DevOps s HPE OneView (5) – PowerShell skripty
- Infrastrukturní DevOps s HPE OneView (6) – Python
- Infrastrukturní DevOps s HPE OneView (7) – Python skripty
- Infrastrukturní DevOps s HPE OneView (8) – vaše vlastní aplikace s Grommet
- Infrastrukturní DevOps s HPE OneView (9) – Ansible a infrastruktura
- Infrastrukturní DevOps s HPE OneView (10) – Ansible a Blade networking
- Infrastrukturní DevOps s HPE OneView (11) – Ansible a síťový fabric
- Infrastrukturní DevOps s HPE OneView (12) – Ansible a servery
V povídání o HPE OneView, Ansible a Infrastructure as code jdeme do finále – rozebereme si vytváření serverů.
OneView, Ansible a servery
V našem hlavním playbooku na závěr skáčeme do role, která připraví naše servery:
- name: Servers hosts: localhost gather_facts: no connection: local vars: oneview_config_file: "oneview-config.json" state: present vars_files: - config.yaml roles: - server-profiles
Podívejme se do tasků této role blíže, ale ještě před tím si zopakujme klíčová nastavení z našeho config.yaml, kde držíme požadavky na naší infrastrukturu.
Najdeteme tam definici základních požadavků pro naše serverové profily, tedy řejněme typy fyzických serverů.
server_profiles: - name: DB_servers hardware_type: /rest/server-hardware-types/993EE3AD-44BB-42F5-86BB-DCCCB4BE5CE6 enclosure_group: ENCL-group ethernet_networks: - Prod-101 - Prod-102 - name: APP_servers hardware_type: /rest/server-hardware-types/993EE3AD-44BB-42F5-86BB-DCCCB4BE5CE6 enclosure_group: ENCL-group ethernet_networks: - Dev-103
Říkáme tedy jaký fyzický typ serveru to je a přiřazujeme síťovou konektivitu. Jde jen o jednoduchý příklad, v praxi bychom tady jistě chtěli nastavovat BIOS, power management, lokální storage (kolik disků a v jakém RAIDu), SAN kontektivitu včetně bootování ze storage, vytvoření a přiřazení nové či stávající LUN ve storage a tak dále. Pro jednoduchost příkladu zůstáváme jen u základů. V další části už říkáme kolik jakých serverů chceme mít:
servers: - name: My_DB_1 profile: DB_servers - name: My_DB_2 profile: DB_servers - name: My_APP_1 profile: APP_servers - name: My_APP_2 profile: APP_servers
Definovali jsme tedy požadavek na 4 servery. Podívejme se, jak tasky v roli pro vytváření serverů fungují.
Nejprve se musíme ujistit, že existují požadované profily serverů. Procházíme tedy seznamem požadovaných typů serverů a pro zjednodušení zápisu voláme vnořený playbook profile-template-yaml pro každý typ.
- name: Ensure server profiles templates are presentt include: profile-template.yaml with_items: "{{ server_profiles }}"
Podívejme se, co v něm děláme. Nejprve si potřebuji vytáhnout nějaké informace z OneView, které použijeme později.
- name: Gather facts about a Enclosure Group by name oneview_enclosure_group_facts: config: "{{ oneview_config_file }}" name: "{{ item.enclosure_group }}" - name: Gather facts about Ethernet networks oneview_ethernet_network_facts: config: "{{ oneview_config_file }}" name: "{{ item }}" with_items: "{{ item.ethernet_networks }}" register: eth_facts
Následně potřebujeme vytvořit objekt, který bude obsahovat seznam požadovaných sítí. U některého profilu máme jednu LAN síť, u druhého jich máme několik. Ve složitějších případech tady budou ještě SAN sítě. Nejprve si tedy dosadíme požadované hodnoty a vytvoříme součástky JSON datové struktury a ty následně propojíme do výsledného objektu.
- name: Prepare individual JSON objects for Ethernet networks set_fact: net: '{ "functionType" : "Ethernet", "portId" : "Auto", "networkUri" : "{{ item.ansible_facts.ethernet_networks[0].uri }}" }' with_items: "{{ eth_facts.results }}" register: eth_map - name: Map Ethernet configurations to JSON array set_fact: eth_config: "{{ eth_map.results | map(attribute='ansible_facts.net') | list }}"
Teď už můžeme zajistit, že takový template opravdu existuje a je v požadovaném stavu. Všimněte si, že mu podhazujeme například objekt se seznamem sítí, který jsme před chvilkou vytvořili.
- name: Ensure server profile template is present oneview_server_profile_template: config: "{{ oneview_config_file }}" state: "{{ state }}" data: name: "{{ item.name }}" serverHardwareTypeUri: "{{ item.hardware_type }}" enclosureGroupUri: "{{ enclosure_groups[0].uri }}" connections: "{{ eth_config }}"
Tím se vracíme do hlavního tasku role a máme zajištěno, že profily jsou v požadovaném stavu. Teď tedy zbývá projít seznam požadovaných serverů včetně jejich požadovaných profilů a ujistit se, že jsou v požadovaném stavu a pokud ne, vyřešit to (vytvořit, upravit).
- name: Ensure server profiles are present oneview_server_profile: config: "{{ oneview_config_file }}" state: "{{ state }}" data: server_template: "{{ item.profile }}" name: "{{ item.name }}" with_items: "{{ servers }}"
Kam dál?
Infrastructure as code je velké téma a my jsme si ukázali jen velmi jednoduchý příklad. Co dalšího můžete s OneView a Ansible dělat?
- Konfigurační možnosti jsou podstatně bohatší, než jsme si předvedli – můžete přidat SAN, ovládání externí storage, nastavení lokální storage, BIOSu apod.
- OneView lze integrovat s Insight Control Server Provisioning a zajistit i instalaci serveru do požadovaného OS, například VMware hypervisor, Helion OpenStack node, Azure Stack node či bare metal Docker nebo databáze.
- S využitím nové generace komponovatelných serverů se vám otevře víc možností, například možnost jednoduché nabootování do požadovaného prostředí (Image Streamer), OneView zabudované v samotném řešení, více možností s definicí lokální storage ze společného zásobníku disků apod.
- Vaše playbooky a desired state konfiguraci ukládejte ve version control systému, třeba Git, GitHub, …
- Použijte version control pro řízení a review, tedy kdo smí dělat změny, jak lze na změnách spolupracovat v rámci týmu apod.
- Použijte automatizaci testovacích scénářů, například v případě změny desired state tuto automatizovaně (třeba s využití Jenkins orchestrátoru) vyzkoušejte v simulovaném prostředí či na jednom kusu železa (+ OneView) určeném pro testovací prostředí