Developer Sessions – Introduction into Automating Cisco UCS Dr. Adolf Hohl (FCI Lead EMEA) NetApp Confidential - Internal Use Only 1 Developer Sessions What is it about? – Integration – Automation – Customization Improving IT and operation at customer For Whom? – Consultants, integration engineers, architects How? Apps – Use the glue: Leverage NetApp APIs to do better integrations at customers HyperVisor Storage – Use case centric approach When? – Tuesday 15:00-16:00 CET – https://communities.netapp.com/community/interfaces_and_tools/ developer/developer-sessions NetApp Confidential - Internal Use Only 2 Schedule May/June Date (cal. entry) 15.05.2012 22.05.2012 29.05.2012 Date (cal. entry) Topic Abstract and Takeaway This session is an introduction to the NetApp Powershell Toolkit. It show the feature richness and the simplicity of use. You learn how to install the toolkit, connect to controllers and get an overview on its features. This session is an introduction to the NetApp Manageability SDK in its latest NetApp Manageability release. You learn the coverage to the SDK and get an overview on its features. SDK Introduction You learn how to install it and start rapid prototyping with automatic code generation. Use Case: Automated This session is about automated snapshot archiving leveraging NetApp APIs. You Snapshot Archiving learn how to organize snapshot archives from different sources. using APIs NetApp Powershell Toolkit Intro Topic Abstract and Takeaway Programming Language Powershell Various Perl Programming Language 05.06.2012 Introduction into Automating Cisco UCS This session is an introduction to the Cisco UCSPS library to automate Cisco UCS components in a FlexPod. You learn how to install, connect and use basic Powershell commandlets. 12.06.2012 Use Case: This session is about extracting performance data of the storage infrastructure and Performance Advisor making it available in structured SQL database for further processing. You learn Perl Data Extraction how to parse performance data and extract relevant counters. 19.06.2012 Within this session the Cisco UCSPS library is used to create VLANs according to Use Case: Creating the specification of the FlexPod reference architecture. You learn how to query for VLANs on Cisco UCS existing VLANs, define new VLANs and register them in a VLAN template. 26.06.2012 Use Case: DB This session is about a backup workflow for a database which includes a verification Backup Workflow with phase before treating the backup as valid. You learn the basic structure of a backup Perl DB Verification workflow and how to embed any postprocessing steps. NetApp Confidential - Internal Use Only Powershell 3 UCS Automation – VLANs, VNIC & SP templates NetApp Confidential - Internal Use Only 4 Todays Session Ingredients UCS Emulator – http://developer.cisco.com/web/unifiedcomputin g/ucsemulatordownload UCS PowerTool for UCSM – http://developer.cisco.com/web/unifiedcomputin g/pshell-download Flexpod Provisioning Sample Scripts – Certain fragments NetApp Confidential - Internal Use Only 6 Session Takeaway Get familiar with: – Creating VLANs – Creating VNIC templates – Creating Service Profile templates Navigate in sample Flexpod Provisioning Scripts and start to innovate NetApp Confidential - Internal Use Only 7 VLANs Create a VLAN in UCSM NetApp Confidential - Internal Use Only 8 VLANs in FlexPod Stack Implementing different trust domains: – Storage: vfiler – Network: VLANs Multiple VLANs defined for infrastructure (see implementation guide) VLANs for customer, each customer gets e.g.: – Frontend VLAN: Access to the hosted services – Storage VLAN: Access to storage – Management VLAN NetApp Confidential - Internal Use Only 9 VLANs in the entire Stack U U Po13 Po14 INPUT: vlan.id/.descr PRE: Po10-Po14 exist, vlan.id does not exist on all Po10-Po14 POST: vlan.id enabled from storage (S) to Ucs (U). INFO: storage vlan needs to be enabled everywhere. E.g. frontentaccess would only go on Po10,13,14 For left and right Nexus Switch: N Po11 S Po10 N Po12 S config t vlan <vlan.id> descr <vlan.descr> forall <if> in {Po10, …, Po14} int <if> switchport trunk allowed vlan add <vlan.id> exit exit NetApp Confidential - Internal Use Only 10 Infrastructure VLANs MGMT-VLAN NFS-VLAN vMotion-VLAN Pkt-Ctrl-VLAN VM-Traffic-VLAN Native-VLAN ##line 207 UCSpart1.ps1 $NAMES_TO_VLANS = @{ "MGMT-VLAN" = $config.Get_Item("<<var_global_mgmt_vlan_id>>"); "NFS-VLAN" = $config.Get_Item("<<var_global_nfs_vlan_id>>"); "vMotion-VLAN" = $config.Get_Item("<<var_global_vmotion_vlan_id>>"); "Pkt-Ctrl-VLAN" = $config.Get_Item("<<var_global_packet_control_vlan_id>>"); "VM-Traffic-VLAN" = $config.Get_Item("<<var_global_vm_traffic_vlan_id>>"); "Native-VLAN" = $config.Get_Item("<<var_global_native_vlan_id>>");} NetApp Confidential - Internal Use Only 11 Creating them in bulk manner Iterate through associative array VLANs are not hierarchically organized in UCS ## input: $NAMES_TO_VLANS ## line 435 3_4_UCS.ps1 $fabricEthLan = New-Object Cisco.Ucs.FabricEthLan $fabricEthLan.Dn = "fabric/lan" foreach($item in $NAMES_TO_VLANS.GetEnumerator()) { $vLanName = $item.Name Write-Host "create vlan: $vLanName" $result = Get-UcsVlan -FabricLanCloud $fabricEthLan -Name $vLanName -Ucs $ucsHandle if(!$result) { if($vlanName -eq "Native-VLAN") { $native = "true" } else { $native = "false" } Add-UcsVlan -FabricLanCloud $fabricEthLan -Name $vLanName \\ -Id $item.Value -DefaultNet $native -Ucs $ucsHandle } else { Write-host "vlan $vLanName already exists, skipping" } } NetApp Confidential - Internal Use Only 12 Missing Associations VLANs are there, but … – Not enabled from fabric to blades – Half way NetApp Confidential - Internal Use Only 13 VNIC Templates Set of VLANs Organization Network Control Policy VNIC Template Hierarchical element VNIC templates bundle network settings for reusability In FlexPod infrastructure for each fabric a VNIC template is created NetApp Confidential - Internal Use Only 14 Creating VNIC templates ## line 487 3_4_UCS.ps1 foreach($switchId in $switchIds_a) { $orgName = $organization.Name $variable = "VNIC_TEMPLATE_" + $switchId + "_NAME" $vNicTemplateName = Get-Variable $variable -ValueOnly $vNicTemplateDescr = $vNicTemplateName + " description" $variable= "MAC_POOL_" + $switchId + "_NAME" $macPoolName = Get-Variable $variable -ValueOnly $result = Get-UcsVnicTemplate -Org $organization -Name $vNicTemplateName -Ucs $ucsHandle if($result) { Write-Host "vNIC template $vNicTemplateName already exists in org $($ourOrg.Name), replacing" Remove-UcsVnicTemplate -VnicTemplate $result -Ucs $ucsHandle -Force } $z = Add-UcsVnicTemplate -Org $rootOrg -Name $vNicTemplateName -IdentPoolName $macPoolName -Mtu 9000 \\ -NwCtrlPolicyName $NCP_NAME -SwitchId $switchId -TemplType "updating-template" foreach($item in $NAMES_TO_VLANS.GetEnumerator()) { #Add-UcsVnicInterface -VnicTemplate $z -Name $item.Name if($item.Name -eq "Native-VLAN") { $native = "true" } else { $native = "false" } Add-UcsVnicInterface -VnicTemplate $z -Name $item.Name -DefaultNet $native } Get-UcsVnicTemplate -Org $organization -Name $vNicTemplateName -Ucs $ucsHandle } NetApp Confidential - Internal Use Only 15 Service Profile Templates Set of VLANs Organization Network Control Policy … … VNIC Template Service Profile Template Service Profile Blade Hierarchical element Service Profile Templates reference the VNIC templates (among other things) Reusable entity to create Service Profiles Line 1051 3_4_UCS.ps1 NetApp Confidential - Internal Use Only 16 Navigate in FlexPod Provisioning Sample Code NetApp Confidential - Internal Use Only 17 FlexPod Provisioning Code Outline (I) 18 FlexPod Provisioning Code Outline (II) • Automated Day 0 according TR 3939 • Aligned section by section strictly MakeMyPod.ps1 Cabling + Enable IP Communication (via sshexec.jar) 3.7 3.2 NetApp FAS Part I 3.6 3.3 Nexus 5548 Part I 3.4 FAS( Data Ontap Powershell Toolkit NEXUS( ) Nexus Command Line Interface (SSH) UCS UCS( Cisco XML API ) 3.8 VMWare Install ~8-12 minutes (excluding zeroing disks) TR3939 Continue on page 54 19 ) NetApp Confidential - Internal Use Only 20