- 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í
