Forum Discussion
Brandon_Lay_104
Nimbostratus
Jan 13, 2009How do I edit Datagroups via PowerShell
Can someone give me a clue on the method(s) to call for adding strings to datagroups?
- Check out this tech tip I wrote on Data Groups where I used the iControl Assembly via the PowerShell cmdlets.
http://devcentral.f5.com/Default.aspx?tabid=63&articleType=ArticleView&articleId=204
- Brandon_Lay_104
Nimbostratus
Awesome. that answers a lot of questions. However, I'm actually trying to deal with Data Groups of type Address and thus having difficulty adding a LocalLBClassAddressEntry. I only need to add host entries, not network addresses. - You are close. The LocalLBClassAddressClass's members member is of type LocalLB.Class.AddressEntry. You'll need to change your string literal of (10.100.100.1) to an appropriate structure. This should work:
$Class = (Get-F5.iControl).LocalLBClass $AddressClass = New-Object -TypeName iControl.LocalLBClassAddressClass $AddressClass.name = "MyAddressGroup" Allocate a AddressEntry structure with a netmask of 255.255.255.255 for a Host address. $AddrEntry = New-Object -TypeName iControl.LocalLBClassAddressEntry $AddrEntry.address = "10.100.100.1" $AddrEntry.netmask = "255.255.255.255" Assign the entry to the members member. $AddressClass.members = (,$AddrEntry) add the address class members $Class.add_address_class_member( (,$AddressClass) )
- Brandon_Lay_104
Nimbostratus
Joe, you ARE the man! Thanks. And for all of you people out there....here is the fruit of my work with Joe's much helpful input. This script can easily be converted to do Data Groups of type String (my next task). I'm sure I could have tightened up things (like the check if the data group exists or not), but it's quite functional. Enjoy!==================== ---------------------------------------------------------------------------- Created By Brandon Lay *Use at your own discretion and your own risk* PowerShell Script to Manage Data Groups of type Address. - Create an Address Data Group - Add Address Members to a Data Group - Delete a Data Group - Delete all members in an Address Data Group Connection criteria (host IP, userid and pwd) embedded, so set vars below Parameters to pass are Action, Data Group Name, Member to Add For valid Parameters, check out the usage or run script w/o params i.e. Addr_DataGroup_Mgmt.ps1 Action AddMember MYDataGroup .gif ---------------------------------------------------------------------------- param($Action=$null, $DataGroup=$null, $NewMemberToAdd=$null) Set the connection criteria for device below $g_bigip="0.0.0.0" $g_uid="username" $g_pwd="password" set-psdebug -strict Check to make sure the iControlSnapIn is loaded; otherwise load it. $checkSnapIn = Get-PSSnapIn iControlSnapIn -ErrorAction SilentlyContinue; If ($checkSnapIn -notlike "iControlSnapIn") {Add-PSSnapIn iControlSnapIn}; ------------------------------------------------------------------------- function Create-AddrGroup ------------------------------------------------------------------------- function Create-AddrGroup() { $Exists = "False" $Class = (Get-F5.iControl).LocalLBClass Check if Group Exists first ForEach ($a in $Class.get_address_class_list()) { if ($a -like $DataGroup) { $Exists = "True" } } If ($Exists -eq "True") {GeneralError("DataGroup $DataGroup already exists!")} $AddressClass = New-Object -TypeName iControl.LocalLBClassAddressClass $AddressClass.name = $DataGroup It seems that in order to create a group, you must specify at least one member Sooo, I'll create a bogus entry and then call the Delete-AllMembers Function to create an empty group. $AddrEntry = New-Object -TypeName iControl.LocalLBClassAddressEntry $AddrEntry.address = "1.1.1.1" $AddrEntry.netmask = "255.255.255.255" Assign the entry to the members member. $AddressClass.members = (,$AddrEntry) $Class.create_address_class(,$AddressClass) Now call Delete-AllMembers to result in a new empty group However if I call it too soon, apparently the new data group doesn't show up yet So let's wait a couple seconds Delete-AllMembers($DataGroup) $Class.get_address_class_list() } ------------------------------------------------------------------------- function Add-AddrMembers ------------------------------------------------------------------------- function Add-AddrMembers() { $Exists = "False" Check if $NewMemberToAdd is null if ($AddrMember=$null) {GeneralError("NewMemberToAdd must be specified in parameters for this Action")} $Class = (Get-F5.iControl).LocalLBClass Check if Group Exists first ForEach ($a in $Class.get_address_class_list()) { if ($a -like $DataGroup) { $Exists = "True" } } If ($Exists -ne "True") {GeneralError("DataGroup $DataGroup doesn't exist!")} $AddressClass = New-Object -TypeName iControl.LocalLBClassAddressClass $AddressClass.name = $DataGroup Allocate a AddressEntry structure with a netmask of 255.255.255.255 for a Host address. $AddrEntry = New-Object -TypeName iControl.LocalLBClassAddressEntry $AddrEntry.address = $NewMemberToAdd $AddrEntry.netmask = "255.255.255.255" Assign the entry to the members member. $AddressClass.members = (,$AddrEntry) add the address class members $Class.add_address_class_member( (,$AddressClass) ) } ------------------------------------------------------------------------- function Delete-DataGroup ------------------------------------------------------------------------- function Delete-DataGroup() { $Exists = "False" $Class = (Get-F5.iControl).LocalLBClass ForEach ($a in $Class.get_address_class_list()) { if ($a -like $DataGroup) { $Exists = "True" } } If ($Exists -ne "True") {GeneralError("DataGroup $DataGroup doesn't exist!")} $Class.delete_class(,$DataGroup) $Class.get_address_class_list() } ------------------------------------------------------------------------- function Delete-AllMembers ------------------------------------------------------------------------- function Delete-AllMembers() { $Exists = "False" $Class = (Get-F5.iControl).LocalLBClass Check if Group Exists first ForEach ($a in $Class.get_address_class_list()) { if ($a -like $DataGroup) { $Exists = "True" } } If ($Exists -ne "True") {GeneralError("DataGroup $DataGroup doesn't exist!")} $Class.delete_address_class_member($Class.get_address_class((,$DataGroup))) $Class.get_address_class_list() } ------------------------------------------------------------------------- function usage ------------------------------------------------------------------------- function usage() { Write-Host "Usage: DataGroup_Mmgmt.ps1 Action DataGroupName (optional MemberToAdd)"; Write-Host " Valid Actions are CreateGroup:AddMember:DeleteGroup:DeleteAllMembers"; Write-Host " DataGroupName must be specified"; Write-Host " MemberToAdd is only required for Action AddMember "; exit; } ------------------------------------------------------------------------- function GeneralError ------------------------------------------------------------------------- function GeneralError($ErrorMessage) { Write-Host $ErrorMessage; usage; } ------------------------------------------------------------------------- Exception Handler ------------------------------------------------------------------------- trap [System.Exception] { Write-Host "Exception Caught" Write-Error $_.Exception.Message; exit; } ------------------------------------------------------------------------- Main Application Logic ------------------------------------------------------------------------- if ( ($Action -eq $null) -or ($DataGroup -eq $null) ) { usage; } $success = Initialize-F5.iControl -HostName $g_bigip -Username $g_uid -Password $g_pwd; If ($Action -eq "CreateGroup") {Create-AddrGroup} elseif ($Action -eq "AddMember") {Add-AddrMembers} elseif ($Action -eq "DeleteGroup") {Delete-DataGroup} elseif ($Action -eq "DeleteAllMembers") {Delete-AllMembers} else {GeneralError("No supported Action specified!!!")} =======================================
- No, YOU are the man! Thanks for sticking in there and also for the contribution. I'll add it to the CodeShare!
- Eve_123996
Nimbostratus
I liked this script a lot. Can you tell me what resources should I look into in order to convert this script in Java? I have a hard time to find all the constructors/destructors and public interfaces for F5 framework. For example, I don't know how to instantiate LocalLBClassAddressEntry object with a string IP address.
Thanks,
Eve
Recent Discussions
Related Content
DevCentral Quicklinks
* Getting Started on DevCentral
* Community Guidelines
* Community Terms of Use / EULA
* Community Ranking Explained
* Community Resources
* Contact the DevCentral Team
* Update MFA on account.f5.com
Discover DevCentral Connects