% Správa sítí pomocí OpenLMI % Radek Nováček % EurOpen -- květen 2013 # Abstrakt > Projekt OpenLMI si klade za cíl vytvořit jednotnou infrastrukturu pro správu linuxových systémů za použití otevřených standardů. Přednáška se bude zabývat představením tohoto projektu, úvodem do použitých standardů a dále návrhem rozhraní pro správu sítí a jeho implementací. # Obsah * Co je OpenLMI * WBEM a CIM * Správa sítí s OpenLMI * Závěr # Co je OpenLMI - Infrastruktura pro správu linuxových systémů za použití otevřených standardů - Jednotné rozhraní pro konfiguraci systému - Snadná integrace do existujících nástrojů --- ## Proč OpenLMI? - Centrání bod pro správu - Ostaní nástroje nepokrývají všechny požadavky (monitoring, správa, upozornění, atd.) - Unifikace rozhraní --- ## Jak? - Standardy: WBEM a CIM - Open Source Software: LGPLv2.1+ - Pouze GNU/Linux - Implementace providerů - Skriptování (OpenLMI Shell) - Dokumentace --- ## Současný stav - Síťování - Disková úložiště - Software (RPM) - Systémové služby - Hardware - Uživatelské účty - Souborový systém - atd. --- # WBEM a CIM - Organizace DMTF (Distributed Management Task Force) - ~200 organizací (AMD, Broadcom, Cisco, Citrix, Fujitsu, HP, Huawei, IBM, Intel, Microsoft, Oracle, Red Hat, VMware, atd.) --- ## WBEM (Web Based Enterprise Management) - Protokoly (CIM-XML, WS-Management) - Standardní operace - Model = CIM - Dotazovací jazyk --- ## CIM (Common Information Model) - Specifikace infrastruktury + Jazyk pro CIM schéma (metamodel) + Mapování na ostatní modely (např. SNMP) - Schéma + Popis objektového modelu --- ## Objektový model - Třídy: vlastnosti, metody, kvalifikátory - Metody - vnitřní a vnější - Dědičnost - Asociace - relace mezi třídami - Indikace - výskyt události --- ## Příklad \begin{figure} \includegraphics[width=4.5in]{cim-example.png} \end{figure} --- ## Implementace - CIMOM + Síťový server -- HTTP(s), CIM-XML + Komunikace s providery + Běží na spravovaném počítači \begin{figure} \includegraphics[width=4in]{cim-xml-https.png} \end{figure} --- ## Implementace - Providery + Sdílené knihovny (DSO), načítány CIMOMem + CMPI = Rozhraní mezi CIMOMem a Providerem (pro jazyk C) + Bindings pro ostatní jazyky (Python, Java, Ruby, ...) --- ## CIM Operace - Vnitřní metody (Intrinsic) + EnumerateClasses, EnumerateInstances + EnumerateClassNames, EnumerateInstanceNames + GetClass, GetInstance + CreateClass, CreateInstance + ModifyClass, ModifyInstance + DeleteClass, DeleteInstance + Associatiors, AssociatorNames + References, ReferenceNames + GetProperty, SetProperty + ExecQuery, ... - Vnější metody (Extrinsic) + libovolné další, definovány ve schématu --- ## Profily - Unifikovaný popis funkční oblasti - Profil je popis modelu a jeho chování (třídy, vlastnosti, metody a hodnoty) - Obsahuje případy užití (use cases) - --- ## OpenLMI -- implementace \begin{figure} \includegraphics[width=2in]{openlmi-arch.png} \end{figure} --- # Správa sítí s OpenLMI - implementace profilu [DSP1116 -- IP Configuration Profile](http://dmtf.org/sites/default/files/standards/documents/DSP1116_1.0.0.pdf) a částečně [DSP1035 -- Host LAN Network Port Profile](http://dmtf.org/sites/default/files/standards/documents/DSP1035_1.0.2.pdf) - používá NetworkManager jako backend - "tenká" vrstva pro překlad mezi API NetworkManageru a CIMem --- ## Profil DSP1116 * Diagram tříd: \begin{figure} \includegraphics[width=4in]{class-diagram.png} \end{figure} --- ## Základní třídy * ``CIM_IPNetworkConnection`` -- síťové rozhraní * ``CIM_IPProtocolEndpoint`` -- koncový bod (= IP adresa) * ``CIM_RemoteServiceAccessPoint`` -- funkce poskytnutá jiným systémem (Gateway, DNS server, DHCP server, ...) * Diagram tříd: \begin{figure} \includegraphics[width=4.5in]{intro-current.png} \end{figure} --- ## Síťová připojení * odpovídají připojením v NetworkManageru * ``CIM_IPAssignmentSettingData`` -- nadtřída pro jednotlivá nastavení + ``CIM_DHCPSettingData`` + ``CIM_ExtendedStaticIPAssignmentSettingData`` + ``CIM_DNSSettingData`` \begin{figure} \includegraphics[width=4in]{intro-setting.png} \end{figure} --- ## Aktivace připojení * Singleton ``CIM_IPConfigurationService`` * Metoda ``ApplySettingToIPNetworkConnection`` + aplikuje ``CIM_IPAssignmentSettingData`` na ``CIM_IPNetworkConnection`` + parametr ``Mode`` -- enumerace určující hodnoty IsCurrent a IsNext --- ## Vytváření připojení * Není definováno profilem! * Metoda ``LMI_CreateIPSetting`` třídy ``CIM_IPNetworkConnectionCapabilities`` * Parametry: + název + metoda pro IPv4 (staticky, DHCP, vypnuto) + metoda pro IPv6 (staticky, DHCPv6, Stateless, vypnuto) + typ (Ethernet, Bridge, Bond, VPN, atd.) + vrací instanci ``CIM_IPAssignmentSettingData`` * Nutné zavolat ModifyInstance na vytvořenou instanci --- ## Další možnosti * Nastavení routování * Nastavení DNS serverů * Statistiky (množství přenesených dat, chyby) --- ## Příkady použití * Zjištění MAC address pro sítové porty \footnotesize `````python for ethernetPort in c.root.cimv2.LMI_EthernetPort.instances(): print ethernetPort.DeviceID, ethernetPort.PermanentAddress ````` \normalsize * Výpis nastavených IP adres \footnotesize `````python port = 'eth1' ipnetworkconnection = c.root.cimv2.LMI_IPNetworkConnection.\ first_instance(Key='Name', Value=port) for assoc in ipnetworkconnection.associators(): if assoc.classname == "LMI_IPProtocolEndpoint": if assoc.ProtocolIFType in [4096, 4098]: # IPv4 print "%s/%s" % (assoc.IPv4Address, assoc.SubnetMask) if assoc.ProtocolIFType in [4097, 4098]: # IPv6 print "%s/%d" % (assoc.IPv6Address, assoc.PrefixLength) ````` \normalsize --- ## Plány do budoucna * Indikace * Asynchronní aktivace připojení * Enterprise nasazení + Bridging, Bonding, VLAN + Záleží na NetworkManageru * Wifi a VPN není zatím v plánu --- # Závěr ## Děkuji za pozornost