Speeding Up Performance with Binary Array Search in Python using Bisect module

Quick Intro

Have you ever come across searching through timestamps or line numbers that are sorted?

What about searching for a number in a sorted list of millions of numbers?

Some might be tempted to use the in operator like this:

And it works, right?

However, for much larger numeric datasets, this might not be desirable because in operator searches sequentially through a list.

In this article, I'm going to show you a much more efficient way not only to find numbers in a sorted list efficiently, but also to insert numbers.

I'll start off by showing how to find an insertion point and then the difference between right and left insertion.

Lastly, I'll explain how to use bisect for searching only purposes and kick off a performance test comparing bisect with in operator by searching through a list of 900 million sorted numbers.

Bisect to find Insertion Point in a List

Bisect module was designed to insert numbers into a sorted list but not necessarily to find a number.

Let's find where we would insert the numbers 0.5 and 1.5 in A:

In above case, if we were to insert 0.5, bisect would insert it in the first position as it's the lowest number in the list.

Likewise, 1.5 would be inserted between numbers 1 and 2.

Make sense, right?

Right vs Left Insertion Point

If number is already on the list, bisect() by default picks the insertion point to the right of existing number:

If we were to insert 56, it would insert 56 after the existing 56 on the list (index 12).

If we were to insert 1, it would insert 1 after the existing 1 (index 1).

However, bisect also gives us to the option to insert to the left if that's what we want:

The other interesting thing to note is that the regular bisect() function is an alias for bisect_right():

Let's see how we can use it for searching purposes only.

Using Bisect for Searching Only

We can return True/False if we find number or not:

The above function finds our insertion point using Binary Array Search technique and stores the value in insert_point variable.

As insertion point is 1 index after (to the right, remember?) highest number that is lower than what we're looking for, I subtracted insertion_point by 1.

Another function and maybe more useful one would be to return the index corresponding to the number we're looking for in case we want to retrieve the number at a later point:

It's similar to first function, but we return the index straightaway.

This is useful because retrieving a number with an array index is extremely fast (constant time operation).

Performance Comparison: In vs Bisect

When we use the in operator, Python starts searching at index 0, then 1, 2, 3 and so on.

When we use bisect(), Python starts by breaking up the list in 2 halves and comparing our number with the number in the middle of the list.

If number we're looking for is less than the middle element, we know it's in the left half, so we can exclude all numbers on the right half and keep going.

Similarly, if number we're looking for is greater than middle element, we know it's in the right half, so we can exclude all numbers on the left half and keep going.

What this means is that in a single operation, we can potentially exclude half of the list!

For those who like maths, while in operator performance is linear (0, 1, 2, etc), we can say that bisect()'s performance is logarithmic.

Here's our test script:

The function above creates a list of 900 million sorted numbers and then searches for a random number between 1 million and 900 million. 

In our example below, the in operator will go through ~623 million steps before it can find number 623358246 but bisect will only go through 29 steps:

It took 58 seconds for in operator to find number 623358246 but bisect was so fast that even 2 decimal numbers only were not enough to display the time it took below 1 second.

Published Jun 15, 2016
Version 1.0

1 Comment

No CommentsBe the first to comment
"}},"componentScriptGroups({\"componentId\":\"custom.widget.Beta_MetaNav\"})":{"__typename":"ComponentScriptGroups","scriptGroups":{"__typename":"ComponentScriptGroupsDefinition","afterInteractive":{"__typename":"PageScriptGroupDefinition","group":"AFTER_INTERACTIVE","scriptIds":[]},"lazyOnLoad":{"__typename":"PageScriptGroupDefinition","group":"LAZY_ON_LOAD","scriptIds":[]}},"componentScripts":[]},"component({\"componentId\":\"custom.widget.Beta_Footer\"})":{"__typename":"Component","render({\"context\":{\"component\":{\"entities\":[],\"props\":{}},\"page\":{\"entities\":[\"message:290235\"],\"name\":\"TkbMessagePage\",\"props\":{},\"url\":\"https://community.f5.com/kb/technicalarticles/getting-started-with-icontrol-working-with-configuration-objects/290235\"}}})":{"__typename":"ComponentRenderResult","html":"
 
 
 
 
 

\"F5 ©2024 F5, Inc. All rights reserved.
Trademarks Policies Privacy California Privacy Do Not Sell My Personal Information
"}},"componentScriptGroups({\"componentId\":\"custom.widget.Beta_Footer\"})":{"__typename":"ComponentScriptGroups","scriptGroups":{"__typename":"ComponentScriptGroupsDefinition","afterInteractive":{"__typename":"PageScriptGroupDefinition","group":"AFTER_INTERACTIVE","scriptIds":[]},"lazyOnLoad":{"__typename":"PageScriptGroupDefinition","group":"LAZY_ON_LOAD","scriptIds":[]}},"componentScripts":[]},"component({\"componentId\":\"custom.widget.Tag_Manager_Helper\"})":{"__typename":"Component","render({\"context\":{\"component\":{\"entities\":[],\"props\":{}},\"page\":{\"entities\":[\"message:290235\"],\"name\":\"TkbMessagePage\",\"props\":{},\"url\":\"https://community.f5.com/kb/technicalarticles/getting-started-with-icontrol-working-with-configuration-objects/290235\"}}})":{"__typename":"ComponentRenderResult","html":" "}},"componentScriptGroups({\"componentId\":\"custom.widget.Tag_Manager_Helper\"})":{"__typename":"ComponentScriptGroups","scriptGroups":{"__typename":"ComponentScriptGroupsDefinition","afterInteractive":{"__typename":"PageScriptGroupDefinition","group":"AFTER_INTERACTIVE","scriptIds":[]},"lazyOnLoad":{"__typename":"PageScriptGroupDefinition","group":"LAZY_ON_LOAD","scriptIds":[]}},"componentScripts":[]},"component({\"componentId\":\"custom.widget.Consent_Blackbar\"})":{"__typename":"Component","render({\"context\":{\"component\":{\"entities\":[],\"props\":{}},\"page\":{\"entities\":[\"message:290235\"],\"name\":\"TkbMessagePage\",\"props\":{},\"url\":\"https://community.f5.com/kb/technicalarticles/getting-started-with-icontrol-working-with-configuration-objects/290235\"}}})":{"__typename":"ComponentRenderResult","html":"
"}},"componentScriptGroups({\"componentId\":\"custom.widget.Consent_Blackbar\"})":{"__typename":"ComponentScriptGroups","scriptGroups":{"__typename":"ComponentScriptGroupsDefinition","afterInteractive":{"__typename":"PageScriptGroupDefinition","group":"AFTER_INTERACTIVE","scriptIds":[]},"lazyOnLoad":{"__typename":"PageScriptGroupDefinition","group":"LAZY_ON_LOAD","scriptIds":[]}},"componentScripts":[]},"cachedText({\"lastModified\":\"1751557989989\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/common/QueryHandler\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/common/QueryHandler-1751557989989"}],"cachedText({\"lastModified\":\"1751557989989\",\"locale\":\"en-US\",\"namespaces\":[\"components/community/NavbarDropdownToggle\"]})":[{"__ref":"CachedAsset:text:en_US-components/community/NavbarDropdownToggle-1751557989989"}],"cachedText({\"lastModified\":\"1751557989989\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageView/MessageViewStandard\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageView/MessageViewStandard-1751557989989"}],"cachedText({\"lastModified\":\"1751557989989\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/ThreadedReplyList\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/ThreadedReplyList-1751557989989"}],"cachedText({\"lastModified\":\"1751557989989\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageReplyCallToAction\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageReplyCallToAction-1751557989989"}],"cachedText({\"lastModified\":\"1751557989989\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageSubject\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageSubject-1751557989989"}],"cachedText({\"lastModified\":\"1751557989989\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageBody\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageBody-1751557989989"}],"cachedText({\"lastModified\":\"1751557989989\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageCustomFields\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageCustomFields-1751557989989"}],"cachedText({\"lastModified\":\"1751557989989\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageRevision\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageRevision-1751557989989"}],"cachedText({\"lastModified\":\"1751557989989\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageReplyButton\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageReplyButton-1751557989989"}],"cachedText({\"lastModified\":\"1751557989989\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageAuthorBio\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageAuthorBio-1751557989989"}],"cachedText({\"lastModified\":\"1751557989989\",\"locale\":\"en-US\",\"namespaces\":[\"components/guides/GuideBottomNavigation\"]})":[{"__ref":"CachedAsset:text:en_US-components/guides/GuideBottomNavigation-1751557989989"}],"cachedText({\"lastModified\":\"1751557989989\",\"locale\":\"en-US\",\"namespaces\":[\"components/customComponent/CustomComponent\"]})":[{"__ref":"CachedAsset:text:en_US-components/customComponent/CustomComponent-1751557989989"}],"cachedText({\"lastModified\":\"1751557989989\",\"locale\":\"en-US\",\"namespaces\":[\"components/tags/TagView/TagViewChip\"]})":[{"__ref":"CachedAsset:text:en_US-components/tags/TagView/TagViewChip-1751557989989"}],"cachedText({\"lastModified\":\"1751557989989\",\"locale\":\"en-US\",\"namespaces\":[\"components/users/UserLink\"]})":[{"__ref":"CachedAsset:text:en_US-components/users/UserLink-1751557989989"}],"cachedText({\"lastModified\":\"1751557989989\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/users/UserRank\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/users/UserRank-1751557989989"}],"cachedText({\"lastModified\":\"1751557989989\",\"locale\":\"en-US\",\"namespaces\":[\"components/users/UserRegistrationDate\"]})":[{"__ref":"CachedAsset:text:en_US-components/users/UserRegistrationDate-1751557989989"}],"cachedText({\"lastModified\":\"1751557989989\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/users/UserAvatar\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/users/UserAvatar-1751557989989"}],"cachedText({\"lastModified\":\"1751557989989\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/ranks/UserRankLabel\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/ranks/UserRankLabel-1751557989989"}]},"Theme:customTheme1":{"__typename":"Theme","id":"customTheme1"},"User:user:-1":{"__typename":"User","id":"user:-1","entityType":"USER","eventPath":"community:zihoc95639/user:-1","uid":-1,"login":"Former Member","email":"","avatar":null,"rank":null,"kudosWeight":1,"registrationData":{"__typename":"RegistrationData","status":"ANONYMOUS","registrationTime":null,"confirmEmailStatus":false,"registrationAccessLevel":"VIEW","ssoRegistrationFields":[]},"ssoId":null,"profileSettings":{"__typename":"ProfileSettings","dateDisplayStyle":{"__typename":"InheritableStringSettingWithPossibleValues","key":"layout.friendly_dates_enabled","value":"false","localValue":"true","possibleValues":["true","false"]},"dateDisplayFormat":{"__typename":"InheritableStringSetting","key":"layout.format_pattern_date","value":"dd-MMM-yyyy","localValue":"MM-dd-yyyy"},"language":{"__typename":"InheritableStringSettingWithPossibleValues","key":"profile.language","value":"en-US","localValue":null,"possibleValues":["en-US","en-GB","fr-FR","de-DE","ja-JP","pt-PT","pt-BR","es-ES"]},"repliesSortOrder":{"__typename":"InheritableStringSettingWithPossibleValues","key":"config.user_replies_sort_order","value":"DEFAULT","localValue":"DEFAULT","possibleValues":["DEFAULT","LIKES","PUBLISH_TIME","REVERSE_PUBLISH_TIME"]}},"deleted":false},"CachedAsset:pages-1751560861975":{"__typename":"CachedAsset","id":"pages-1751560861975","value":[{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"HowDoI.GetInvolved.MvpProgram","type":"COMMUNITY","urlPath":"/c/how-do-i/get-involved/mvp-program","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"BlogViewAllPostsPage","type":"BLOG","urlPath":"/category/:categoryId/blog/:boardId/all-posts/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"CasePortalPage","type":"CASE_PORTAL","urlPath":"/caseportal","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"CreateGroupHubPage","type":"GROUP_HUB","urlPath":"/groups/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"CaseViewPage","type":"CASE_DETAILS","urlPath":"/case/:caseId/:caseNumber","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"InboxPage","type":"COMMUNITY","urlPath":"/inbox","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"HowDoI.GetInvolved.AdvocacyProgram","type":"COMMUNITY","urlPath":"/c/how-do-i/get-involved/advocacy-program","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"HowDoI.GetHelp.NonCustomer","type":"COMMUNITY","urlPath":"/c/how-do-i/get-help/non-customer","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"HelpFAQPage","type":"COMMUNITY","urlPath":"/help","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"HowDoI.GetHelp.F5Customer","type":"COMMUNITY","urlPath":"/c/how-do-i/get-help/f5-customer","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"IdeaMessagePage","type":"IDEA_POST","urlPath":"/idea/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"IdeaViewAllIdeasPage","type":"IDEA","urlPath":"/category/:categoryId/ideas/:boardId/all-ideas/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"LoginPage","type":"USER","urlPath":"/signin","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"WorkstreamsPage","type":"COMMUNITY","urlPath":"/workstreams","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"BlogPostPage","type":"BLOG","urlPath":"/category/:categoryId/blogs/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"HowDoI.GetInvolved","type":"COMMUNITY","urlPath":"/c/how-do-i/get-involved","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"HowDoI.Learn","type":"COMMUNITY","urlPath":"/c/how-do-i/learn","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739501996000,"localOverride":null,"page":{"id":"Test","type":"CUSTOM","urlPath":"/custom-test-2","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"ThemeEditorPage","type":"COMMUNITY","urlPath":"/designer/themes","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"TkbViewAllArticlesPage","type":"TKB","urlPath":"/category/:categoryId/kb/:boardId/all-articles/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"OccasionEditPage","type":"EVENT","urlPath":"/event/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"OAuthAuthorizationAllowPage","type":"USER","urlPath":"/auth/authorize/allow","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"PageEditorPage","type":"COMMUNITY","urlPath":"/designer/pages","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"PostPage","type":"COMMUNITY","urlPath":"/category/:categoryId/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"ForumBoardPage","type":"FORUM","urlPath":"/category/:categoryId/discussions/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"TkbBoardPage","type":"TKB","urlPath":"/category/:categoryId/kb/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"EventPostPage","type":"EVENT","urlPath":"/category/:categoryId/events/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"UserBadgesPage","type":"COMMUNITY","urlPath":"/users/:login/:userId/badges","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"GroupHubMembershipAction","type":"GROUP_HUB","urlPath":"/membership/join/:nodeId/:membershipType","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"MaintenancePage","type":"COMMUNITY","urlPath":"/maintenance","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"IdeaReplyPage","type":"IDEA_REPLY","urlPath":"/idea/:boardId/:messageSubject/:messageId/comments/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"UserSettingsPage","type":"USER","urlPath":"/mysettings/:userSettingsTab","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"GroupHubsPage","type":"GROUP_HUB","urlPath":"/groups","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"ForumPostPage","type":"FORUM","urlPath":"/category/:categoryId/discussions/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"OccasionRsvpActionPage","type":"OCCASION","urlPath":"/event/:boardId/:messageSubject/:messageId/rsvp/:responseType","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"VerifyUserEmailPage","type":"USER","urlPath":"/verifyemail/:userId/:verifyEmailToken","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"AllOccasionsPage","type":"OCCASION","urlPath":"/category/:categoryId/events/:boardId/all-events/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"EventBoardPage","type":"EVENT","urlPath":"/category/:categoryId/events/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"TkbReplyPage","type":"TKB_REPLY","urlPath":"/kb/:boardId/:messageSubject/:messageId/comments/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"IdeaBoardPage","type":"IDEA","urlPath":"/category/:categoryId/ideas/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"CommunityGuideLinesPage","type":"COMMUNITY","urlPath":"/communityguidelines","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"CaseCreatePage","type":"SALESFORCE_CASE_CREATION","urlPath":"/caseportal/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"TkbEditPage","type":"TKB","urlPath":"/kb/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"ForgotPasswordPage","type":"USER","urlPath":"/forgotpassword","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"IdeaEditPage","type":"IDEA","urlPath":"/idea/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"TagPage","type":"COMMUNITY","urlPath":"/tag/:tagName","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"BlogBoardPage","type":"BLOG","urlPath":"/category/:categoryId/blog/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"OccasionMessagePage","type":"OCCASION_TOPIC","urlPath":"/event/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"ManageContentPage","type":"COMMUNITY","urlPath":"/managecontent","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"ClosedMembershipNodeNonMembersPage","type":"GROUP_HUB","urlPath":"/closedgroup/:groupHubId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"HowDoI.GetHelp.Community","type":"COMMUNITY","urlPath":"/c/how-do-i/get-help/community","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"CommunityPage","type":"COMMUNITY","urlPath":"/","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"HowDoI.GetInvolved.ContributeCode","type":"COMMUNITY","urlPath":"/c/how-do-i/get-involved/contribute-code","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"ForumMessagePage","type":"FORUM_TOPIC","urlPath":"/discussions/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"IdeaPostPage","type":"IDEA","urlPath":"/category/:categoryId/ideas/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"BlogMessagePage","type":"BLOG_ARTICLE","urlPath":"/blog/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"RegistrationPage","type":"USER","urlPath":"/register","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"EditGroupHubPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"ForumEditPage","type":"FORUM","urlPath":"/discussions/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"ResetPasswordPage","type":"USER","urlPath":"/resetpassword/:userId/:resetPasswordToken","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"TkbMessagePage","type":"TKB_ARTICLE","urlPath":"/kb/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"HowDoI.Learn.AboutIrules","type":"COMMUNITY","urlPath":"/c/how-do-i/learn/about-irules","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"BlogEditPage","type":"BLOG","urlPath":"/blog/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"HowDoI.GetHelp.F5Support","type":"COMMUNITY","urlPath":"/c/how-do-i/get-help/f5-support","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"ManageUsersPage","type":"USER","urlPath":"/users/manage/:tab?/:manageUsersTab?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"ForumReplyPage","type":"FORUM_REPLY","urlPath":"/discussions/:boardId/:messageSubject/:messageId/replies/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"PrivacyPolicyPage","type":"COMMUNITY","urlPath":"/privacypolicy","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"NotificationPage","type":"COMMUNITY","urlPath":"/notifications","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"UserPage","type":"USER","urlPath":"/users/:login/:userId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"HealthCheckPage","type":"COMMUNITY","urlPath":"/health","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"OccasionReplyPage","type":"OCCASION_REPLY","urlPath":"/event/:boardId/:messageSubject/:messageId/comments/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"ManageMembersPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId/manage/:tab?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"SearchResultsPage","type":"COMMUNITY","urlPath":"/search","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"BlogReplyPage","type":"BLOG_REPLY","urlPath":"/blog/:boardId/:messageSubject/:messageId/replies/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"GroupHubPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"TermsOfServicePage","type":"COMMUNITY","urlPath":"/termsofservice","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"HowDoI.GetHelp","type":"COMMUNITY","urlPath":"/c/how-do-i/get-help","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"HowDoI.GetHelp.SecurityIncident","type":"COMMUNITY","urlPath":"/c/how-do-i/get-help/security-incident","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"CategoryPage","type":"CATEGORY","urlPath":"/category/:categoryId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"ForumViewAllTopicsPage","type":"FORUM","urlPath":"/category/:categoryId/discussions/:boardId/all-topics/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"TkbPostPage","type":"TKB","urlPath":"/category/:categoryId/kbs/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"GroupHubPostPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1751560861975,"localOverride":null,"page":{"id":"HowDoI","type":"COMMUNITY","urlPath":"/c/how-do-i","__typename":"PageDescriptor"},"__typename":"PageResource"}],"localOverride":false},"CachedAsset:text:en_US-components/context/AppContext/AppContextProvider-0":{"__typename":"CachedAsset","id":"text:en_US-components/context/AppContext/AppContextProvider-0","value":{"noCommunity":"Cannot find community","noUser":"Cannot find current user","noNode":"Cannot find node with id {nodeId}","noMessage":"Cannot find message with id {messageId}","userBanned":"We're sorry, but you have been banned from using this site.","userBannedReason":"You have been banned for the following reason: {reason}"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/common/Loading/LoadingDot-0":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/Loading/LoadingDot-0","value":{"title":"Loading..."},"localOverride":false},"AssociatedImage:{\"url\":\"https://community.f5.com/t5/s/zihoc95639/images/cmstMS01bkFrOTY\"}":{"__typename":"AssociatedImage","url":"https://community.f5.com/t5/s/zihoc95639/images/cmstMS01bkFrOTY","height":0,"width":0,"mimeType":"image/svg+xml"},"Rank:rank:1":{"__typename":"Rank","id":"rank:1","position":1,"name":"Admin","color":"C20025","icon":{"__ref":"AssociatedImage:{\"url\":\"https://community.f5.com/t5/s/zihoc95639/images/cmstMS01bkFrOTY\"}"},"rankStyle":"FILLED"},"User:user:51154":{"__typename":"User","id":"user:51154","uid":51154,"login":"JRahm","deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://community.f5.com/t5/s/zihoc95639/images/dS01MTE1NC1uYzdSVFk?image-coordinates=0%2C0%2C1067%2C1067"},"rank":{"__ref":"Rank:rank:1"},"email":"","messagesCount":4636,"biography":null,"topicsCount":640,"kudosReceivedCount":1071,"kudosGivenCount":843,"kudosWeight":1,"registrationData":{"__typename":"RegistrationData","status":null,"registrationTime":"2005-01-20T00:00:00.000-08:00","confirmEmailStatus":null},"followersCount":null,"solutionsCount":91},"Category:category:Articles":{"__typename":"Category","id":"category:Articles","entityType":"CATEGORY","displayId":"Articles","nodeType":"category","depth":1,"title":"Articles","shortTitle":"Articles","parent":{"__ref":"Category:category:top"},"categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:top":{"__typename":"Category","id":"category:top","entityType":"CATEGORY","displayId":"top","nodeType":"category","depth":0,"title":"Top","shortTitle":"Top"},"Tkb:board:TechnicalArticles":{"__typename":"Tkb","id":"board:TechnicalArticles","entityType":"TKB","displayId":"TechnicalArticles","nodeType":"board","depth":2,"conversationStyle":"TKB","repliesProperties":{"__typename":"RepliesProperties","sortOrder":"PUBLISH_TIME","repliesFormat":"threaded"},"tagProperties":{"__typename":"TagNodeProperties","tagsEnabled":{"__typename":"PolicyResult","failureReason":null}},"requireTags":true,"tagType":"FREEFORM_AND_PRESET","description":"F5 SMEs share good practice.","title":"Technical Articles","shortTitle":"Technical Articles","parent":{"__ref":"Category:category:Articles"},"ancestors":{"__typename":"CoreNodeConnection","edges":[{"__typename":"CoreNodeEdge","node":{"__ref":"Community:community:zihoc95639"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:Articles"}}]},"userContext":{"__typename":"NodeUserContext","canAddAttachments":false,"canUpdateNode":false,"canPostMessages":false,"isSubscribed":false},"theme":{"__ref":"Theme:customTheme1"},"boardPolicies":{"__typename":"BoardPolicies","canViewSpamDashBoard":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.feature.moderation_spam.action.access_spam_quarantine.allowed.accessDenied","key":"error.lithium.policies.feature.moderation_spam.action.access_spam_quarantine.allowed.accessDenied","args":[]}},"canArchiveMessage":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.content_archivals.enable_content_archival_settings.accessDenied","key":"error.lithium.policies.content_archivals.enable_content_archival_settings.accessDenied","args":[]}},"canPublishArticleOnCreate":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.forums.policy_can_publish_on_create_workflow_action.accessDenied","key":"error.lithium.policies.forums.policy_can_publish_on_create_workflow_action.accessDenied","args":[]}},"canReadNode":{"__typename":"PolicyResult","failureReason":null}},"isManualSortOrderAvailable":false,"tkbPolicies":{"__typename":"TkbPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"linkProperties":{"__typename":"LinkProperties","isExternalLinkWarningEnabled":false}},"TkbTopicMessage:message:290235":{"__typename":"TkbTopicMessage","uid":290235,"subject":"Getting Started with iControl: Working with Configuration Objects","id":"message:290235","entityType":"TKB_ARTICLE","eventPath":"category:Articles/community:zihoc95639board:TechnicalArticles/message:290235","revisionNum":1,"repliesCount":0,"author":{"__ref":"User:user:51154"},"depth":0,"hasGivenKudo":false,"helpful":null,"board":{"__ref":"Tkb:board:TechnicalArticles"},"conversation":{"__ref":"Conversation:conversation:290235"},"messagePolicies":{"__typename":"MessagePolicies","canPublishArticleOnEdit":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.forums.policy_can_publish_on_edit_workflow_action.accessDenied","key":"error.lithium.policies.forums.policy_can_publish_on_edit_workflow_action.accessDenied","args":[]}},"canModerateSpamMessage":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.feature.moderation_spam.action.moderate_entity.allowed.accessDenied","key":"error.lithium.policies.feature.moderation_spam.action.moderate_entity.allowed.accessDenied","args":[]}}},"contentWorkflow":{"__typename":"ContentWorkflow","state":"PUBLISH","scheduledPublishTime":null,"scheduledTimezone":null,"userContext":{"__typename":"MessageWorkflowContext","canSubmitForReview":null,"canEdit":false,"canRecall":null,"canSubmitForPublication":null,"canReturnToAuthor":null,"canPublish":null,"canReturnToReview":null,"canSchedule":false},"shortScheduledTimezone":null},"readOnly":false,"editFrozen":false,"showMoveIndicator":false,"moderationData":{"__ref":"ModerationData:moderation_data:290235"},"teaser":"","body":"

In the previous articles in the Getting Started with iControl series, we covered the history of iControl, taxonomy, and introduced the languages most common to our community. In this article, we'll start looking at some code samples. With each task we cover, we'll show an example for a few languages for both the soap and rest interface. The sheer amount of space in this article required to show full samples of each language for both soap and rest would be overwhelming in line, so for the sample code, we have pulled out the appropriate sections of the code for you to study. Understand that based on the libraries used, if at all, some of the work may be abstracted. Full scripts for each language and portal preference are linked at the bottom of this article. If you click each of the iControl REST and iControl SOAP tabs, you'll see a language listing for the sample code provided. Joe Pruitt is the super hero providing everything not python here, so give him a shout out next time you see him in these parts.

\n\n

Note: This article published by Jason Rahm but co-authored with Joe Pruitt.

\n\n

With all the disclaimers out of the way, let's get down to business! The first thing you have to do to talk to the BIG-IP is know where to connect. Some prerequisites:

\n\n\n\n

There are dozens of articles and codeshare samples on DevCentral on creating/modifying objects both in rest and soap, so we're not going to cover all the details ad nauseam here. But we do want to introduce the basic concepts of retrieving, creating, and modifying a couple simple objects in this article. The first one we'll tackle is one of the most important building blocks of the BIG-IP configuration: the pool.

\n\n
\n

Working with the Pool Object

\n\n

The pool has many attributes that can be set, but not all are required. In this exercise however, we're going to simply demonstrate the creation of a pool and a pool listing. The pool object can be created via rest with a simple name, and with soap with the name, the lb method, and the members attribute (it can be empty, but the attribute needs to be present.)

\n\n
\n
\n

Java SOAP Example

\n\n
\npublic void displayAllPools() throws Exception\n{\nString [] pool_list = m_interfaces.getLocalLBPool().get_list();\nSystem.out.println(\"Pools\\n\");\nSystem.out.println(\"-----------\\n\");\nfor(int i=0; i<pool_list.length; i++)\n{\nSystem.out.println(pool_list[i]);\n}\n}\n\npublic void createPool(String poolname, String partition) throws Exception\n{\nString [] pool_list = new String[] {\"/\" + partition + \"/\" + poolname};\niControl.LocalLBLBMethod [] lb_methods = new iControl.LocalLBLBMethod[] { iControl.LocalLBLBMethod.LB_METHOD_ROUND_ROBIN };\niControl.CommonIPPortDefinition[][] membersAofA = new iControl.CommonIPPortDefinition[1][];\nmembersAofA[0] = new iControl.CommonIPPortDefinition[1];\nmembersAofA[0][0] = new iControl.CommonIPPortDefinition();\nmembersAofA[0][0].setAddress(\"10.10.10.10\");\nmembersAofA[0][0].setPort(80);\n\nm_interfaces.getLocalLBPool().create(\npool_list,\nlb_methods,\nmembersAofA\n);\n\nSystem.out.println(\"Pool \" + poolname + \" created in partition \" + partition);\n}
\n
\n\n
\n

Perl SOAP Example

\n\n
\n#----------------------------------------------------------------------------\n# getPoolList\n#----------------------------------------------------------------------------\nsub getPoolList()\n{\n$soapResponse = $Pool->get_list();\n&checkResponse($soapResponse);\nmy @pool_list = @{$soapResponse->result};\nprint \"POOL LIST\\n\";\nprint \"---------\\n\";\nforeach $pool (@pool_list) {\nprint \"  ${pool}\\n\";\n}\n}\n#----------------------------------------------------------------------------\n# createPool()\n#----------------------------------------------------------------------------\nsub createPool()\n{\nmy ($partition, $pool) = @_;\n\nprint \"CREATING POOL $pool\\n\";\n\nmy @pool_names = [$pool];\nmy @lb_methods = [\"LB_METHOD_ROUND_ROBIN\"]; \n  $member = \n  {\n    address => \"10.10.10.10\",\n    port => 80\n  };\n  \n  # memberA is the 1st dimension of the array, we need one for each pool\n  push @memberA, $member;\n  # memberAofA is the 2nd dimension. push pool members for each pool here.\n  push @memberAofA, [@memberA];\n\n$soapResponse = $Pool->create(\nSOAP::Data->name( pool_names => [\"/$partition/$pool\"]),\nSOAP::Data->name( lb_methods => [\"LB_METHOD_ROUND_ROBIN\"]),\n    SOAP::Data->name(members => [@memberAofA])\n);\n&checkResponse($soapResponse);\n\nprint \"POOL ${pool} created in partition ${partition}...\\n\";\n}
\n
\n\n
\n

Powershell SOAP Example

\n\n
\n#----------------------------------------------------------------------------\nfunction Get-PoolList()\n#----------------------------------------------------------------------------\n{\n  $pool_list = $(Get-F5.iControl).LocalLBPool.get_list();\nWrite-Host \"POOL LIST\";\nWrite-Host \"---------\";\n  foreach($pool in $pool_list)\n  {\nWrite-Host \"  $pool\";\n}\n}\n#----------------------------------------------------------------------------\nfunction Create-Pool()\n#\n#  Description:\n#    This function creates a new pool if the given pool name doesn't\n#    already exist.\n#\n#  Parameters:\n#    Name       - The Name of the pool you wish to create.\n#    MemberList - A string list of pool member addresses.\n#    MemberPort - The port the pool members will be configured with.\n#----------------------------------------------------------------------------\n{\n  param(\n    [string]$Name,\n    [string[]]$MemberList,\n    [int]$MemberPort\n  );\n  \n  $IPPortDefList = New-Object -TypeName iControl.CommonIPPortDefinition[] $MemberList.Length;\n  for($i=0; $i-lt$MemberList.Length; $i++)\n  {\n    $IPPortDefList[$i] = New-Object -TypeName iControl.CommonIPPortDefinition;\n    $IPPortDefList[$i].address = $MemberList[$i];\n    $IPPortDefList[$i].port = $MemberPort;\n  }\n    \n  Write-Host \"Creating Pool $Name\";\n  $(Get-F5.iControl).LocalLBPool.create(\n    (,$Name),\n    (,\"LB_METHOD_ROUND_ROBIN\"),\n    (,$IPPortDefList)\n  );\n  Write-Host \"Pool '$Name' Successfully Created\";\n}
\n
\n\n
\n

Python SOAP Example

\n\n
\ndef get_pool_list(bigip):\n    try:\n        poollist = bigip.LocalLB.Pool.get_list()\n        print \"POOL LIST\"\n        print \" ---------\"\n        for pool in poollist:\n            print \"   %s\" % pool\n\n    except Exception, e:\n        print e\n\n\ndef create_pool(bigip, pool):\n    try:\n        bigip.LocalLB.Pool.create_v2([pool], ['LB_METHOD_ROUND_ROBIN'], [[]])\n    except Exception, e:\n        print e
\n
\n\n
\n

Node.js REST Example

\n\n
\n//--------------------------------------------------------\nfunction handleVERB(verb, resource, body, callback) {\n//--------------------------------------------------------\ngetAuthToken( function(token) {\nhttpRequest(verb, resource, body, null, null, token, function(json) {\ncallback(json);\n});\n});\n}\n\n//--------------------------------------------------------\nfunction handleGetPoolList(callback) {\n//--------------------------------------------------------\nvar uri = \"/mgmt/tm/ltm/pool\";\nhandleVERB(\"GET\", uri, null, function(json) {\ncallback(json);\n});\n}\n//--------------------------------------------------------\nfunction handleCreatePool(pool, partition, callback) {\n//--------------------------------------------------------\nvar uri = \"/mgmt/tm/ltm/pool\";\nvar body = '{\"name\":\"' + pool + '\", \"partition\":\"' + partition + '\"}';\n\nconsole.log(\"BODY: \" + body);\nhandleVERB(\"POST\", uri, body, function(json) {\ncallback(json);\n});\n}
\n
\n\n
\n

Perl REST Example

\n\n
\n#---------------------------------------------------\nsub getPoolList() {\n#---------------------------------------------------\n$resp_json = &handleGET(\"/mgmt/tm/ltm/pool\");\n$resp = decode_json($resp_json);\n@items = @{$resp->{\"items\"}};\n\nprint \"POOL NAMES\\n\";\nprint \"----------\\n\";\nforeach $item (@items) {\n$fullPath = $item->{\"fullPath\"};\nprint \"  $fullPath\\n\";\nprint Dumper($item);\n}\n}\n#---------------------------------------------------\nsub handleGET() {\n#---------------------------------------------------\nmy ($resource) = @_;\n\n$url = &buildURL($resource);\n\n$resp = &getHttpRequest($url);\n\nreturn $resp;\n}\n#---------------------------------------------------\nsub createPool() {\n#---------------------------------------------------\nmy ($pool, $partition) = @_;\n\nmy $poolObj;\n$poolObj->{\"name\"} = $pool;\n$poolObj->{\"partition\"} = $partition;\n\nmy $json = encode_json($poolObj);\n\nprint \"JSON: $json\\n\";\nexit();\n\n$resp = &handlePOST(\"/mgmt/tm/ltm/pool\", $json);\n\nprint Dumper($resp);\n}\n#---------------------------------------------------\nsub handlePOST() {\n#---------------------------------------------------\nmy ($resource, $body) = @_;\n\nif ( $body eq \"\" ) { &usage(); }\n\n$url = &buildURL($resource);\n\n$resp = &postHttpRequest($url, $body);\n\nreturn $resp;\n}
\n
\n\n
\n

Powershell REST Example

\n\n
\n#----------------------------------------------------------------------------\nfunction Get-PoolList()\n#----------------------------------------------------------------------------\n{\n$uri = \"/mgmt/tm/ltm/pool\";\n$link = \"https://$Bigip$uri\";\n$headers = @{};\n$headers.Add(\"ServerHost\", $Bigip);\n\n$secpasswd = ConvertTo-SecureString $Pass -AsPlainText -Force\n$mycreds = New-Object System.Management.Automation.PSCredential ($User, $secpasswd)\n\n$obj = Invoke-RestMethod -Method GET -Headers $headers -Uri $link -Credential $mycreds\n$items = $obj.items;\nWrite-Host \"POOL NAMES\";\nWrite-Host \"----------\";\nfor($i=0; $i -lt $items.length; $i++) {\n$name = $items[$i].fullPath;\nWrite-Host \"  $name\";\n}\n}\n#----------------------------------------------------------------------------\nfunction Create-Pool()\n#\n#  Description:\n#    This function creates a new pool if the given pool name doesn't\n#    already exist.\n#\n#  Parameters:\n#    Name       - The Name of the pool you wish to create.\n#    Partition  - The name of the partition to place the pool in.\n#----------------------------------------------------------------------------\n{\n  param(\n    [string]$Name,\n[string]$Partition\n  );\n\n$uri = \"/mgmt/tm/ltm/pool\";\n$link = \"https://$Bigip$uri\";\n$headers = @{};\n$headers.Add(\"ServerHost\", $Bigip);\n$headers.Add(\"Content-Type\", \"application/json\");\n$obj = @{\nname=$Name\npartition=$Partition\n};\n$body = $obj | ConvertTo-Json\n\n$secpasswd = ConvertTo-SecureString $Pass -AsPlainText -Force\n$mycreds = New-Object System.Management.Automation.PSCredential ($User, $secpasswd)\n\n$obj = Invoke-RestMethod -Method POST -Uri $link -Headers $headers -Credential $mycreds -Body $body;\n\nWrite-Host \"Pool ${Name} created in partition ${Partition}\"\n}
\n
\n\n
\n

Python REST Example

\n\n
\ndef get_pool_list(bigip, url):\n    try:\n        pools = bigip.get(\"%s/ltm/pool\" % url).json()\n        print \"POOL LIST\"\n        print \" ---------\"\n        for pool in pools['items']:\n            print \"   /%s/%s\" % (pool['partition'], pool['name'])\n    except Exception, e:\n        print e\n\n\ndef create_pool(bigip, url, pool, part=None):\n    try:\n        payload = {}\n        payload['name'] = pool\n        if part is not None:\n            payload['partition'] = part\n\n        pool_config = bigip.post(\"%s/ltm/pool\" % url, json.dumps(payload)).json()\n        print pool_config\n    except Exception, e:\n        print e
\n
\n
\n\n
\n

Working with the Data-Group Object

\n\n

Data-groups are interesting objects with which to work, primarily because you can have internal data-groups, which are wholly contained within bigip.conf, and external data-groups, which has it's definition in bigip.conf but the records are kept in an external file. Also interesting is that this particular object has different attributes via soap than it does in rest. In soap, all the records can be individually managed, so you can add, find, and delete on a record by record basis. Not so with rest. In rest we have the concepts of collections and a subcollections. A collection is like a list of pools. A sub-collection would be the members of a pool. Ideally, a data-group itself would be part of a collection, and it's records would be a subcollection, but that is not the case today. This has major implications if you want to update a data-group. Say you have a data-group with 10,000 records. You want add a record, so you issue an HTTP PUT method with your payload of one record. Instead of the desired outcome of a modified data-group with 10,001 records, you now have a much smaller data-group of exactly one record. Not good! So make sure if you are using the rest interface with data-groups, you store all the existing records, make all your adds/changes/deletes, then PUT the entire record collection. But where the soap interface has the upper hand with being able to update individual records, rest punches back with the ability to list out all data-group at once, whereas with soap, you have to query each type of data-group among string, integer, and address. So there are some pros and cons to both approaches to weigh as you dig in.

\n\n
\n
\n

Java SOAP Example

\n\n
\npublic void createDataGroup(String datagroup) throws Exception\n{\n// Create String Class\niControl.LocalLBClassStringClass [] StringClassA = new iControl.LocalLBClassStringClass[1];\nStringClassA[0] = new iControl.LocalLBClassStringClass();\nStringClassA[0].setName(datagroup);\nStringClassA[0].setMembers(new String [] { \"a\", \"b\", \"c\" });\n\nm_interfaces.getLocalLBClass().create_string_class(StringClassA);\n\n// Set Values\nString [][] valuesAofA = new String[1][];\nvaluesAofA[0] = new String[] { \"data 1\", \"data 2\", \"data 3\" };\n\nm_interfaces.getLocalLBClass().set_string_class_member_data_value(\nStringClassA,\nvaluesAofA\n);\n\ngetDataGroup(datagroup);\n}\npublic void removeFromDataGroup(String datagroup) throws Exception\n{\nString [] names = new String[] {\"c\"};\n\niControl.LocalLBClassStringClass [] StringClassA = new iControl.LocalLBClassStringClass[1];\nStringClassA[0] = new iControl.LocalLBClassStringClass();\nStringClassA[0].setName(datagroup);\nStringClassA[0].setMembers(new String [] { \"c\" });\n\nm_interfaces.getLocalLBClass().delete_string_class_member(StringClassA);\n\ngetDataGroup(datagroup);\n}\n\n//--------------------------------------------------------------------------\n//\n//--------------------------------------------------------------------------\npublic void addToDataGroup(String datagroup) throws Exception\n{\n// Create String Class\niControl.LocalLBClassStringClass [] StringClassA = new iControl.LocalLBClassStringClass[1];\nStringClassA[0] = new iControl.LocalLBClassStringClass();\nStringClassA[0].setName(datagroup);\nStringClassA[0].setMembers(new String [] { \"d\", \"e\" });\n\nm_interfaces.getLocalLBClass().add_string_class_member(StringClassA);\n\n// Set Values\nString [][] valuesAofA = new String[1][];\nvaluesAofA[0] = new String[] { \"data 4\", \"data 5\" };\n\nm_interfaces.getLocalLBClass().set_string_class_member_data_value(\nStringClassA,\nvaluesAofA\n);\n\ngetDataGroup(datagroup);\n}
\n
\n\n
\n

Perl SOAP Example

\n\n
\n#----------------------------------------------------------------------------\nsub createDataGroup()\n#----------------------------------------------------------------------------\n{\nmy ($datagroup) = @_;\n\n  my @names = (\"a\", \"b\", \"c\");\n\n  my $StringClass =\n  {\n    name => $datagroup,\n    members => [@names]\n  };\n\n# Create Data group with names\n$soapResponse = $Class->create_string_class(\nSOAP::Data->name(classes => [$StringClass])\n);\n&checkResponse($soapResponse);\n\n# Set values\n  # Build Values 2-D Array for values parameter\n  my @valuesA = (\"data 1\", \"data 2\", \"data 3\");\n  my @valuesAofA;\n  push @valuesAofA, [@valuesA];\n  $soapResponse = $Class->set_string_class_member_data_value\n  (\n    SOAP::Data->name(class_members => [$StringClass]),\n    SOAP::Data->name(values => [@valuesAofA])\n  );\n  &checkResponse($soapResponse);\n\n&getDataGroup($datagroup);\n}\n\n#----------------------------------------------------------------------------\nsub removeFromDataGroup()\n#----------------------------------------------------------------------------\n{\nmy ($datagroup) = @_;\n\n  my @names = (\"c\");\n\n  my $StringClass =\n  {\n    name => $datagroup,\n    members => [@names]\n  };\n\n# Create Data group with names\n$soapResponse = $Class->delete_string_class_member(\nSOAP::Data->name(class_members => [$StringClass])\n);\n&checkResponse($soapResponse);\n\n&getDataGroup($datagroup);\n}\n\n#----------------------------------------------------------------------------\nsub addToDataGroup()\n#----------------------------------------------------------------------------\n{\nmy ($datagroup) = @_;\n\n  my @names = (\"d\", \"e\");\n\n  my $StringClass =\n  {\n    name => $datagroup,\n    members => [@names]\n  };\n\n# Create Data group with names\n$soapResponse = $Class->add_string_class_member(\nSOAP::Data->name(class_members => [$StringClass])\n);\n&checkResponse($soapResponse);\n\n# Set values\n  # Build Values 2-D Array for values parameter\n  my @valuesA = (\"data 4\", \"data 5\");\n  my @valuesAofA;\n  push @valuesAofA, [@valuesA];\n  $soapResponse = $Class->set_string_class_member_data_value\n  (\n    SOAP::Data->name(class_members => [$StringClass]),\n    SOAP::Data->name(values => [@valuesAofA])\n  );\n  &checkResponse($soapResponse);\n\n&getDataGroup($datagroup);\n}
\n
\n\n
\n

Powershell SOAP Example

\n\n
\n#-------------------------------------------------------------------------\nfunction Create-DataGroup()\n#-------------------------------------------------------------------------\n{\nparam(\n[string]$Name\n);\n\n$StringClassA = New-Object -TypeName iControl.LocalLBClassStringClass[] 1;\n$StringClassA[0] = New-Object -TypeName iControl.LocalLBClassStringClass;\n$StringClassA[0].name = $Name;\n$StringClassA[0].members = (\"a\", \"b\", \"c\");\n\n$(Get-F5.iControl).LocalLBClass.create_string_class(\n$StringClassA\n);\n\n$DataValueA = (\"data 1\", \"data 2\", \"data 3\");\n$DataValuesAofA = \n$(Get-F5.iControl).LocalLBClass.set_string_class_member_data_value(\n$StringClassA,\n(, $DataValueA)\n)\n\nGet-DataGroup -Name $Name;\n}\n\n#-------------------------------------------------------------------------\nfunction RemoveFrom-DataGroup()\n#-------------------------------------------------------------------------\n{\nparam(\n[string]$Name\n);\n\n$StringClassA = New-Object -TypeName iControl.LocalLBClassStringClass[] 1;\n$StringClassA[0] = New-Object -TypeName iControl.LocalLBClassStringClass;\n$StringClassA[0].name = $Name;\n$StringClassA[0].members = (\"c\");\n\n$(Get-F5.iControl).LocalLBClass.delete_string_class_member(\n$StringClassA\n);\n\nGet-DataGroup -Name $Name;\n}\n\n#-------------------------------------------------------------------------\nfunction AddTo-DataGroup()\n#-------------------------------------------------------------------------\n{\nparam(\n[string]$Name\n);\n\n$StringClassA = New-Object -TypeName iControl.LocalLBClassStringClass[] 1;\n$StringClassA[0] = New-Object -TypeName iControl.LocalLBClassStringClass;\n$StringClassA[0].name = $Name;\n$StringClassA[0].members = (\"d\", \"e\");\n\n$(Get-F5.iControl).LocalLBClass.add_string_class_member(\n$StringClassA\n);\n\n$DataValueA = (\"data 4\", \"data 5\");\n$DataValuesAofA = \n$(Get-F5.iControl).LocalLBClass.set_string_class_member_data_value(\n$StringClassA,\n(, $DataValueA)\n)\n\nGet-DataGroup -Name $Name;\n}
\n
\n\n
\n

Python SOAP Example

\n\n
\ndef get_dg_list(bigip):\n    try:\n        dg_str_list = bigip.LocalLB.Class.get_string_class_list()\n        dg_str_names = bigip.LocalLB.Class.get_string_class(dg_str_list)\n\n\n        for dg in dg_str_names:\n            print dg\n            print '   Data Group: %s' % dg['name']\n            for x in dg['members']:\n                print '       %s' % x\n\n    except Exception, e:\n        print e\n\n\ndef extend_dg(bigip, dgname, keys, values):\n    try:\n        bigip.LocalLB.Class.add_string_class_member([{'name': dgname, 'members': keys}])\n        bigip.LocalLB.Class.set_string_class_member_data_value([{'name': dgname, 'members': keys}], [[values]])\n    except Exception, e:\n        print e\n\n\ndef contract_dg(bigip, dgname, keys):\n    try:\n        bigip.LocalLB.Class.delete_string_class_member([{'name': dgname, 'members': keys}])\n    except Exception, e:\n        print e\n\n\ndef create_dg(bigip, dgname, keys, values):\n    try:\n        bigip.LocalLB.Class.create_string_class([{'name': dgname, 'members': keys}])\n        bigip.LocalLB.Class.set_string_class_member_data_value([{'name': dgname, 'members': keys}], [[values]])\n    except Exception, e:\n        print e
\n
\n\n
\n

Node.js REST Example

\n\n
\n//--------------------------------------------------------\nfunction createDataGroup(datagroup) {\n//--------------------------------------------------------\n\ndatagroup = datagroup.replace(/\\//g, \"~\");\nvar uri = \"/mgmt/tm/ltm/data-group/internal\";\n\nvar dgObj = {};\ndgObj.name = datagroup;\ndgObj.type = \"string\";\ndgObj.records = [\n{name: \"a\", data: \"data 1\"},\n{name: \"b\", data: \"data 2\"},\n{name: \"c\", data: \"data 3\"},\n];\n\nvar body = JSON.stringify(dgObj);\n\nhandleVERB(\"POST\", uri, body, function(json) {\nconsole.log(json);\n});\n}\n\n//--------------------------------------------------------\nfunction removeFromDataGroup(datagroup) {\n//--------------------------------------------------------\ndg_uri = datagroup.replace(/\\//g, \"~\");\nvar uri = \"/mgmt/tm/ltm/data-group/internal/\" + dg_uri;\n\nvar dgObj = {};\ndgObj.name = datagroup;\ndgObj.records = [\n{name: \"a\", data: \"data 1\"},\n{name: \"b\", data: \"data 2\"}\n];\n\nvar body = JSON.stringify(dgObj);\n\nhandleVERB(\"PATCH\", uri, body, function(json) {\nconsole.log(json);\n});\n}\n\n//--------------------------------------------------------\nfunction addToDataGroup(datagroup) {\n//--------------------------------------------------------\ndg_uri = datagroup.replace(/\\//g, \"~\");\nvar uri = \"/mgmt/tm/ltm/data-group/internal/\" + dg_uri;\n\nvar dgObj = {};\ndgObj.name = datagroup;\ndgObj.records = [\n{name: \"a\", data: \"data 1\"},\n{name: \"b\", data: \"data 2\"},\n{name: \"d\", data: \"data 4\"},\n{name: \"e\", data: \"data 5\"}\n];\n\nvar body = JSON.stringify(dgObj);\n\nhandleVERB(\"PATCH\", uri, body, function(json) {\nconsole.log(json);\n});\n}
\n
\n\n
\n

Perl REST Example

\n\n
\n#----------------------------------------------------------------------------\nsub createDataGroup()\n#----------------------------------------------------------------------------\n{\nmy ($datagroup) = @_;\n\n  my @names = (\"a\", \"b\", \"c\");\n\n  my $StringClass =\n  {\n    name => $datagroup,\n    members => [@names]\n  };\n\n# Create Data group with names\n$soapResponse = $Class->create_string_class(\nSOAP::Data->name(classes => [$StringClass])\n);\n&checkResponse($soapResponse);\n\n# Set values\n  # Build Values 2-D Array for values parameter\n  my @valuesA = (\"data 1\", \"data 2\", \"data 3\");\n  my @valuesAofA;\n  push @valuesAofA, [@valuesA];\n  $soapResponse = $Class->set_string_class_member_data_value\n  (\n    SOAP::Data->name(class_members => [$StringClass]),\n    SOAP::Data->name(values => [@valuesAofA])\n  );\n  &checkResponse($soapResponse);\n\n&getDataGroup($datagroup);\n}\n\n#----------------------------------------------------------------------------\nsub removeFromDataGroup()\n#----------------------------------------------------------------------------\n{\nmy ($datagroup) = @_;\n\n  my @names = (\"c\");\n\n  my $StringClass =\n  {\n    name => $datagroup,\n    members => [@names]\n  };\n\n# Create Data group with names\n$soapResponse = $Class->delete_string_class_member(\nSOAP::Data->name(class_members => [$StringClass])\n);\n&checkResponse($soapResponse);\n\n&getDataGroup($datagroup);\n}\n\n#----------------------------------------------------------------------------\nsub addToDataGroup()\n#----------------------------------------------------------------------------\n{\nmy ($datagroup) = @_;\n\n  my @names = (\"d\", \"e\");\n\n  my $StringClass =\n  {\n    name => $datagroup,\n    members => [@names]\n  };\n\n# Create Data group with names\n$soapResponse = $Class->add_string_class_member(\nSOAP::Data->name(class_members => [$StringClass])\n);\n&checkResponse($soapResponse);\n\n# Set values\n  # Build Values 2-D Array for values parameter\n  my @valuesA = (\"data 4\", \"data 5\");\n  my @valuesAofA;\n  push @valuesAofA, [@valuesA];\n  $soapResponse = $Class->set_string_class_member_data_value\n  (\n    SOAP::Data->name(class_members => [$StringClass]),\n    SOAP::Data->name(values => [@valuesAofA])\n  );\n  &checkResponse($soapResponse);\n\n&getDataGroup($datagroup);\n}
\n
\n\n
\n

Powershell REST Example

\n\n
\n#----------------------------------------------------------------------------\nfunction Create-DataGroup()\n#\n#  Description:\n#    This function creates a new internal data group\n#\n#  Parameters:\n#    Name       - The Name of the data group\n#----------------------------------------------------------------------------\n{\n  param(\n    [string]$Name\n  );\n\n$uri = \"/mgmt/tm/ltm/data-group/internal\";\n$link = \"https://$Bigip$uri\";\n$headers = @{};\n$headers.Add(\"ServerHost\", $Bigip);\n$headers.Add(\"Content-Type\", \"application/json\");\n$obj = @{\nname=$Name\ntype=\"string\"\nrecords= (\n@{ name=\"a\"\ndata=\"data 1\"\n},\n@{ name=\"b\"\ndata=\"data 2\"\n},\n@{ name=\"c\"\ndata=\"data 3\"\n}\n)\n};\n$body = $obj | ConvertTo-Json\n\n$secpasswd = ConvertTo-SecureString $Pass -AsPlainText -Force\n$mycreds = New-Object System.Management.Automation.PSCredential ($User, $secpasswd)\n\n$obj = Invoke-RestMethod -Method POST -Uri $link -Headers $headers -Credential $mycreds -Body $body;\n\nWrite-Host \"Pool ${Name} created in partition ${Partition}\"\n}\n\n#----------------------------------------------------------------------------\nfunction RemoveFrom-DataGroup()\n#\n#  Description:\n#    This function removes an entry from a data group\n#\n#  Parameters:\n#    Name       - The Name of the data group\n#----------------------------------------------------------------------------\n{\n  param(\n    [string]$Name\n  );\n\n$uri = \"/mgmt/tm/ltm/data-group/internal/${Name}\";\n$link = \"https://$Bigip$uri\";\n$headers = @{};\n$headers.Add(\"ServerHost\", $Bigip);\n$headers.Add(\"Content-Type\", \"application/json\");\n$obj = @{\nname=$Name\nrecords= (\n@{ name=\"a\"\ndata=\"data 1\"\n},\n@{ name=\"b\"\ndata=\"data 2\"\n}\n)\n};\n$body = $obj | ConvertTo-Json\n\n$secpasswd = ConvertTo-SecureString $Pass -AsPlainText -Force\n$mycreds = New-Object System.Management.Automation.PSCredential ($User, $secpasswd)\n\n$obj = Invoke-RestMethod -Method PATCH -Uri $link -Headers $headers -Credential $mycreds -Body $body;\n\n$obj | Format-List\n}\n\n#----------------------------------------------------------------------------\nfunction AddTo-DataGroup()\n#\n#  Description:\n#    This function adds records to an existing data group\n#\n#  Parameters:\n#    Name       - The Name of the data group\n#----------------------------------------------------------------------------\n{\n  param(\n    [string]$Name\n  );\n\n$uri = \"/mgmt/tm/ltm/data-group/internal/${Name}\";\n$link = \"https://$Bigip$uri\";\n$headers = @{};\n$headers.Add(\"ServerHost\", $Bigip);\n$headers.Add(\"Content-Type\", \"application/json\");\n$obj = @{\nname=$Name\nrecords= (\n@{ name=\"a\"\ndata=\"data 1\"\n},\n@{ name=\"b\"\ndata=\"data 2\"\n},\n@{ name=\"d\"\ndata=\"data 4\"\n},\n@{ name=\"e\"\ndata=\"data 5\"\n}\n)\n};\n$body = $obj | ConvertTo-Json\n\n$secpasswd = ConvertTo-SecureString $Pass -AsPlainText -Force\n$mycreds = New-Object System.Management.Automation.PSCredential ($User, $secpasswd)\n\n$obj = Invoke-RestMethod -Method PATCH -Uri $link -Headers $headers -Credential $mycreds -Body $body;\n\n$obj | Format-List\n}
\n
\n\n
\n

Python REST Example

\n\n
\ndef get_dg_list(rq, url):\n    try:\n        dg_list = rq.get('%s/ltm/data-group/internal' % url).json()\n        for dg in dg_list['items']:\n            print dg\n            print '   Data Group: %s' % dg['name']\n            print '   --------------'\n            if 'records' in dg:\n                for record in dg['records']:\n                    if 'data' in record:\n                        print '      %s: %s' % (record['name'], record['data'])\n                    else:\n                        print '      %s' % record['name']\n\n    except Exception, e:\n        print e\n\n\ndef extend_dg(rq, url, dgname, additional_records):\n    dg = rq.get('%s/ltm/data-group/internal/%s' % (url, dgname)).json()\n\n    current_records = dg['records']\n    new_records = []\n    for record in current_records:\n        if 'data' in record:\n            nr = [{'name': record['name'], 'data': record['data']}]\n        else:\n            nr = [{'name': record['name']}]\n        new_records.extend(nr)\n    for record in additional_records:\n        if 'data' in record:\n            nr = [{'name': record['name'], 'data': record['data']}]\n        else:\n            nr = [{'name': record['name']}]\n        new_records.extend(nr)\n\n    payload = {}\n    payload['records'] = new_records\n    rq.put('%s/ltm/data-group/internal/%s' % (url, dgname), json.dumps(payload))\n\n\ndef contract_dg(rq, url, dgname, removal_records):\n    dg = rq.get('%s/ltm/data-group/internal/%s' % (url, dgname)).json()\n    current_records = dg['records']\n\n    new_records = []\n    for record in removal_records:\n        if 'data' in record:\n            nr = [{'name': record['name'], 'data': record['data']}]\n        else:\n            nr = [{'name': record['name']}]\n        new_records.extend(nr)\n\n    new_records = [x for x in current_records if x not in new_records]\n\n    payload = {}\n    payload['records'] = new_records\n    rq.put('%s/ltm/data-group/internal/%s' % (url, dgname), json.dumps(payload))\n\n\ndef create_dg(rq, url, dgname, records):\n    new_records = []\n    for record in records:\n        if 'data' in record:\n            nr = [{'name': record['name'], 'data': record['data']}]\n        else:\n            nr = [{'name': record['name']}]\n        new_records.extend(nr)\n\n    payload = {}\n    payload['type'] = 'string'\n    payload['name'] = dgname\n    payload['records'] = new_records\n    try:\n        rq.post('%s/ltm/data-group/internal' % url, json.dumps(payload))\n    except Exception, e:\n        print e
\n
\n
\n\n
\n

Resources

\n\n

All the scripts for this article are available in the codeshare under \"Getting Started with iControl Code Samples.\"

","body@stringLength":"35277","rawBody":"

In the previous articles in the Getting Started with iControl series, we covered the history of iControl, taxonomy, and introduced the languages most common to our community. In this article, we'll start looking at some code samples. With each task we cover, we'll show an example for a few languages for both the soap and rest interface. The sheer amount of space in this article required to show full samples of each language for both soap and rest would be overwhelming in line, so for the sample code, we have pulled out the appropriate sections of the code for you to study. Understand that based on the libraries used, if at all, some of the work may be abstracted. Full scripts for each language and portal preference are linked at the bottom of this article. If you click each of the iControl REST and iControl SOAP tabs, you'll see a language listing for the sample code provided. Joe Pruitt is the super hero providing everything not python here, so give him a shout out next time you see him in these parts.

\n\n

Note: This article published by Jason Rahm but co-authored with Joe Pruitt.

\n\n

With all the disclaimers out of the way, let's get down to business! The first thing you have to do to talk to the BIG-IP is know where to connect. Some prerequisites:

\n\n\n\n

There are dozens of articles and codeshare samples on DevCentral on creating/modifying objects both in rest and soap, so we're not going to cover all the details ad nauseam here. But we do want to introduce the basic concepts of retrieving, creating, and modifying a couple simple objects in this article. The first one we'll tackle is one of the most important building blocks of the BIG-IP configuration: the pool.

\n\n
\n

Working with the Pool Object

\n\n

The pool has many attributes that can be set, but not all are required. In this exercise however, we're going to simply demonstrate the creation of a pool and a pool listing. The pool object can be created via rest with a simple name, and with soap with the name, the lb method, and the members attribute (it can be empty, but the attribute needs to be present.)

\n\n
\n
\n

Java SOAP Example

\n\n
\npublic void displayAllPools() throws Exception\n{\nString [] pool_list = m_interfaces.getLocalLBPool().get_list();\nSystem.out.println(\"Pools\\n\");\nSystem.out.println(\"-----------\\n\");\nfor(int i=0; i<pool_list.length; i++)\n{\nSystem.out.println(pool_list[i]);\n}\n}\n\npublic void createPool(String poolname, String partition) throws Exception\n{\nString [] pool_list = new String[] {\"/\" + partition + \"/\" + poolname};\niControl.LocalLBLBMethod [] lb_methods = new iControl.LocalLBLBMethod[] { iControl.LocalLBLBMethod.LB_METHOD_ROUND_ROBIN };\niControl.CommonIPPortDefinition[][] membersAofA = new iControl.CommonIPPortDefinition[1][];\nmembersAofA[0] = new iControl.CommonIPPortDefinition[1];\nmembersAofA[0][0] = new iControl.CommonIPPortDefinition();\nmembersAofA[0][0].setAddress(\"10.10.10.10\");\nmembersAofA[0][0].setPort(80);\n\nm_interfaces.getLocalLBPool().create(\npool_list,\nlb_methods,\nmembersAofA\n);\n\nSystem.out.println(\"Pool \" + poolname + \" created in partition \" + partition);\n}
\n
\n\n
\n

Perl SOAP Example

\n\n
\n#----------------------------------------------------------------------------\n# getPoolList\n#----------------------------------------------------------------------------\nsub getPoolList()\n{\n$soapResponse = $Pool->get_list();\n&checkResponse($soapResponse);\nmy @pool_list = @{$soapResponse->result};\nprint \"POOL LIST\\n\";\nprint \"---------\\n\";\nforeach $pool (@pool_list) {\nprint \"  ${pool}\\n\";\n}\n}\n#----------------------------------------------------------------------------\n# createPool()\n#----------------------------------------------------------------------------\nsub createPool()\n{\nmy ($partition, $pool) = @_;\n\nprint \"CREATING POOL $pool\\n\";\n\nmy @pool_names = [$pool];\nmy @lb_methods = [\"LB_METHOD_ROUND_ROBIN\"]; \n  $member = \n  {\n    address => \"10.10.10.10\",\n    port => 80\n  };\n  \n  # memberA is the 1st dimension of the array, we need one for each pool\n  push @memberA, $member;\n  # memberAofA is the 2nd dimension. push pool members for each pool here.\n  push @memberAofA, [@memberA];\n\n$soapResponse = $Pool->create(\nSOAP::Data->name( pool_names => [\"/$partition/$pool\"]),\nSOAP::Data->name( lb_methods => [\"LB_METHOD_ROUND_ROBIN\"]),\n    SOAP::Data->name(members => [@memberAofA])\n);\n&checkResponse($soapResponse);\n\nprint \"POOL ${pool} created in partition ${partition}...\\n\";\n}
\n
\n\n
\n

Powershell SOAP Example

\n\n
\n#----------------------------------------------------------------------------\nfunction Get-PoolList()\n#----------------------------------------------------------------------------\n{\n  $pool_list = $(Get-F5.iControl).LocalLBPool.get_list();\nWrite-Host \"POOL LIST\";\nWrite-Host \"---------\";\n  foreach($pool in $pool_list)\n  {\nWrite-Host \"  $pool\";\n}\n}\n#----------------------------------------------------------------------------\nfunction Create-Pool()\n#\n#  Description:\n#    This function creates a new pool if the given pool name doesn't\n#    already exist.\n#\n#  Parameters:\n#    Name       - The Name of the pool you wish to create.\n#    MemberList - A string list of pool member addresses.\n#    MemberPort - The port the pool members will be configured with.\n#----------------------------------------------------------------------------\n{\n  param(\n    [string]$Name,\n    [string[]]$MemberList,\n    [int]$MemberPort\n  );\n  \n  $IPPortDefList = New-Object -TypeName iControl.CommonIPPortDefinition[] $MemberList.Length;\n  for($i=0; $i-lt$MemberList.Length; $i++)\n  {\n    $IPPortDefList[$i] = New-Object -TypeName iControl.CommonIPPortDefinition;\n    $IPPortDefList[$i].address = $MemberList[$i];\n    $IPPortDefList[$i].port = $MemberPort;\n  }\n    \n  Write-Host \"Creating Pool $Name\";\n  $(Get-F5.iControl).LocalLBPool.create(\n    (,$Name),\n    (,\"LB_METHOD_ROUND_ROBIN\"),\n    (,$IPPortDefList)\n  );\n  Write-Host \"Pool '$Name' Successfully Created\";\n}
\n
\n\n
\n

Python SOAP Example

\n\n
\ndef get_pool_list(bigip):\n    try:\n        poollist = bigip.LocalLB.Pool.get_list()\n        print \"POOL LIST\"\n        print \" ---------\"\n        for pool in poollist:\n            print \"   %s\" % pool\n\n    except Exception, e:\n        print e\n\n\ndef create_pool(bigip, pool):\n    try:\n        bigip.LocalLB.Pool.create_v2([pool], ['LB_METHOD_ROUND_ROBIN'], [[]])\n    except Exception, e:\n        print e
\n
\n\n
\n

Node.js REST Example

\n\n
\n//--------------------------------------------------------\nfunction handleVERB(verb, resource, body, callback) {\n//--------------------------------------------------------\ngetAuthToken( function(token) {\nhttpRequest(verb, resource, body, null, null, token, function(json) {\ncallback(json);\n});\n});\n}\n\n//--------------------------------------------------------\nfunction handleGetPoolList(callback) {\n//--------------------------------------------------------\nvar uri = \"/mgmt/tm/ltm/pool\";\nhandleVERB(\"GET\", uri, null, function(json) {\ncallback(json);\n});\n}\n//--------------------------------------------------------\nfunction handleCreatePool(pool, partition, callback) {\n//--------------------------------------------------------\nvar uri = \"/mgmt/tm/ltm/pool\";\nvar body = '{\"name\":\"' + pool + '\", \"partition\":\"' + partition + '\"}';\n\nconsole.log(\"BODY: \" + body);\nhandleVERB(\"POST\", uri, body, function(json) {\ncallback(json);\n});\n}
\n
\n\n
\n

Perl REST Example

\n\n
\n#---------------------------------------------------\nsub getPoolList() {\n#---------------------------------------------------\n$resp_json = &handleGET(\"/mgmt/tm/ltm/pool\");\n$resp = decode_json($resp_json);\n@items = @{$resp->{\"items\"}};\n\nprint \"POOL NAMES\\n\";\nprint \"----------\\n\";\nforeach $item (@items) {\n$fullPath = $item->{\"fullPath\"};\nprint \"  $fullPath\\n\";\nprint Dumper($item);\n}\n}\n#---------------------------------------------------\nsub handleGET() {\n#---------------------------------------------------\nmy ($resource) = @_;\n\n$url = &buildURL($resource);\n\n$resp = &getHttpRequest($url);\n\nreturn $resp;\n}\n#---------------------------------------------------\nsub createPool() {\n#---------------------------------------------------\nmy ($pool, $partition) = @_;\n\nmy $poolObj;\n$poolObj->{\"name\"} = $pool;\n$poolObj->{\"partition\"} = $partition;\n\nmy $json = encode_json($poolObj);\n\nprint \"JSON: $json\\n\";\nexit();\n\n$resp = &handlePOST(\"/mgmt/tm/ltm/pool\", $json);\n\nprint Dumper($resp);\n}\n#---------------------------------------------------\nsub handlePOST() {\n#---------------------------------------------------\nmy ($resource, $body) = @_;\n\nif ( $body eq \"\" ) { &usage(); }\n\n$url = &buildURL($resource);\n\n$resp = &postHttpRequest($url, $body);\n\nreturn $resp;\n}
\n
\n\n
\n

Powershell REST Example

\n\n
\n#----------------------------------------------------------------------------\nfunction Get-PoolList()\n#----------------------------------------------------------------------------\n{\n$uri = \"/mgmt/tm/ltm/pool\";\n$link = \"https://$Bigip$uri\";\n$headers = @{};\n$headers.Add(\"ServerHost\", $Bigip);\n\n$secpasswd = ConvertTo-SecureString $Pass -AsPlainText -Force\n$mycreds = New-Object System.Management.Automation.PSCredential ($User, $secpasswd)\n\n$obj = Invoke-RestMethod -Method GET -Headers $headers -Uri $link -Credential $mycreds\n$items = $obj.items;\nWrite-Host \"POOL NAMES\";\nWrite-Host \"----------\";\nfor($i=0; $i -lt $items.length; $i++) {\n$name = $items[$i].fullPath;\nWrite-Host \"  $name\";\n}\n}\n#----------------------------------------------------------------------------\nfunction Create-Pool()\n#\n#  Description:\n#    This function creates a new pool if the given pool name doesn't\n#    already exist.\n#\n#  Parameters:\n#    Name       - The Name of the pool you wish to create.\n#    Partition  - The name of the partition to place the pool in.\n#----------------------------------------------------------------------------\n{\n  param(\n    [string]$Name,\n[string]$Partition\n  );\n\n$uri = \"/mgmt/tm/ltm/pool\";\n$link = \"https://$Bigip$uri\";\n$headers = @{};\n$headers.Add(\"ServerHost\", $Bigip);\n$headers.Add(\"Content-Type\", \"application/json\");\n$obj = @{\nname=$Name\npartition=$Partition\n};\n$body = $obj | ConvertTo-Json\n\n$secpasswd = ConvertTo-SecureString $Pass -AsPlainText -Force\n$mycreds = New-Object System.Management.Automation.PSCredential ($User, $secpasswd)\n\n$obj = Invoke-RestMethod -Method POST -Uri $link -Headers $headers -Credential $mycreds -Body $body;\n\nWrite-Host \"Pool ${Name} created in partition ${Partition}\"\n}
\n
\n\n
\n

Python REST Example

\n\n
\ndef get_pool_list(bigip, url):\n    try:\n        pools = bigip.get(\"%s/ltm/pool\" % url).json()\n        print \"POOL LIST\"\n        print \" ---------\"\n        for pool in pools['items']:\n            print \"   /%s/%s\" % (pool['partition'], pool['name'])\n    except Exception, e:\n        print e\n\n\ndef create_pool(bigip, url, pool, part=None):\n    try:\n        payload = {}\n        payload['name'] = pool\n        if part is not None:\n            payload['partition'] = part\n\n        pool_config = bigip.post(\"%s/ltm/pool\" % url, json.dumps(payload)).json()\n        print pool_config\n    except Exception, e:\n        print e
\n
\n
\n\n
\n

Working with the Data-Group Object

\n\n

Data-groups are interesting objects with which to work, primarily because you can have internal data-groups, which are wholly contained within bigip.conf, and external data-groups, which has it's definition in bigip.conf but the records are kept in an external file. Also interesting is that this particular object has different attributes via soap than it does in rest. In soap, all the records can be individually managed, so you can add, find, and delete on a record by record basis. Not so with rest. In rest we have the concepts of collections and a subcollections. A collection is like a list of pools. A sub-collection would be the members of a pool. Ideally, a data-group itself would be part of a collection, and it's records would be a subcollection, but that is not the case today. This has major implications if you want to update a data-group. Say you have a data-group with 10,000 records. You want add a record, so you issue an HTTP PUT method with your payload of one record. Instead of the desired outcome of a modified data-group with 10,001 records, you now have a much smaller data-group of exactly one record. Not good! So make sure if you are using the rest interface with data-groups, you store all the existing records, make all your adds/changes/deletes, then PUT the entire record collection. But where the soap interface has the upper hand with being able to update individual records, rest punches back with the ability to list out all data-group at once, whereas with soap, you have to query each type of data-group among string, integer, and address. So there are some pros and cons to both approaches to weigh as you dig in.

\n\n
\n
\n

Java SOAP Example

\n\n
\npublic void createDataGroup(String datagroup) throws Exception\n{\n// Create String Class\niControl.LocalLBClassStringClass [] StringClassA = new iControl.LocalLBClassStringClass[1];\nStringClassA[0] = new iControl.LocalLBClassStringClass();\nStringClassA[0].setName(datagroup);\nStringClassA[0].setMembers(new String [] { \"a\", \"b\", \"c\" });\n\nm_interfaces.getLocalLBClass().create_string_class(StringClassA);\n\n// Set Values\nString [][] valuesAofA = new String[1][];\nvaluesAofA[0] = new String[] { \"data 1\", \"data 2\", \"data 3\" };\n\nm_interfaces.getLocalLBClass().set_string_class_member_data_value(\nStringClassA,\nvaluesAofA\n);\n\ngetDataGroup(datagroup);\n}\npublic void removeFromDataGroup(String datagroup) throws Exception\n{\nString [] names = new String[] {\"c\"};\n\niControl.LocalLBClassStringClass [] StringClassA = new iControl.LocalLBClassStringClass[1];\nStringClassA[0] = new iControl.LocalLBClassStringClass();\nStringClassA[0].setName(datagroup);\nStringClassA[0].setMembers(new String [] { \"c\" });\n\nm_interfaces.getLocalLBClass().delete_string_class_member(StringClassA);\n\ngetDataGroup(datagroup);\n}\n\n//--------------------------------------------------------------------------\n//\n//--------------------------------------------------------------------------\npublic void addToDataGroup(String datagroup) throws Exception\n{\n// Create String Class\niControl.LocalLBClassStringClass [] StringClassA = new iControl.LocalLBClassStringClass[1];\nStringClassA[0] = new iControl.LocalLBClassStringClass();\nStringClassA[0].setName(datagroup);\nStringClassA[0].setMembers(new String [] { \"d\", \"e\" });\n\nm_interfaces.getLocalLBClass().add_string_class_member(StringClassA);\n\n// Set Values\nString [][] valuesAofA = new String[1][];\nvaluesAofA[0] = new String[] { \"data 4\", \"data 5\" };\n\nm_interfaces.getLocalLBClass().set_string_class_member_data_value(\nStringClassA,\nvaluesAofA\n);\n\ngetDataGroup(datagroup);\n}
\n
\n\n
\n

Perl SOAP Example

\n\n
\n#----------------------------------------------------------------------------\nsub createDataGroup()\n#----------------------------------------------------------------------------\n{\nmy ($datagroup) = @_;\n\n  my @names = (\"a\", \"b\", \"c\");\n\n  my $StringClass =\n  {\n    name => $datagroup,\n    members => [@names]\n  };\n\n# Create Data group with names\n$soapResponse = $Class->create_string_class(\nSOAP::Data->name(classes => [$StringClass])\n);\n&checkResponse($soapResponse);\n\n# Set values\n  # Build Values 2-D Array for values parameter\n  my @valuesA = (\"data 1\", \"data 2\", \"data 3\");\n  my @valuesAofA;\n  push @valuesAofA, [@valuesA];\n  $soapResponse = $Class->set_string_class_member_data_value\n  (\n    SOAP::Data->name(class_members => [$StringClass]),\n    SOAP::Data->name(values => [@valuesAofA])\n  );\n  &checkResponse($soapResponse);\n\n&getDataGroup($datagroup);\n}\n\n#----------------------------------------------------------------------------\nsub removeFromDataGroup()\n#----------------------------------------------------------------------------\n{\nmy ($datagroup) = @_;\n\n  my @names = (\"c\");\n\n  my $StringClass =\n  {\n    name => $datagroup,\n    members => [@names]\n  };\n\n# Create Data group with names\n$soapResponse = $Class->delete_string_class_member(\nSOAP::Data->name(class_members => [$StringClass])\n);\n&checkResponse($soapResponse);\n\n&getDataGroup($datagroup);\n}\n\n#----------------------------------------------------------------------------\nsub addToDataGroup()\n#----------------------------------------------------------------------------\n{\nmy ($datagroup) = @_;\n\n  my @names = (\"d\", \"e\");\n\n  my $StringClass =\n  {\n    name => $datagroup,\n    members => [@names]\n  };\n\n# Create Data group with names\n$soapResponse = $Class->add_string_class_member(\nSOAP::Data->name(class_members => [$StringClass])\n);\n&checkResponse($soapResponse);\n\n# Set values\n  # Build Values 2-D Array for values parameter\n  my @valuesA = (\"data 4\", \"data 5\");\n  my @valuesAofA;\n  push @valuesAofA, [@valuesA];\n  $soapResponse = $Class->set_string_class_member_data_value\n  (\n    SOAP::Data->name(class_members => [$StringClass]),\n    SOAP::Data->name(values => [@valuesAofA])\n  );\n  &checkResponse($soapResponse);\n\n&getDataGroup($datagroup);\n}
\n
\n\n
\n

Powershell SOAP Example

\n\n
\n#-------------------------------------------------------------------------\nfunction Create-DataGroup()\n#-------------------------------------------------------------------------\n{\nparam(\n[string]$Name\n);\n\n$StringClassA = New-Object -TypeName iControl.LocalLBClassStringClass[] 1;\n$StringClassA[0] = New-Object -TypeName iControl.LocalLBClassStringClass;\n$StringClassA[0].name = $Name;\n$StringClassA[0].members = (\"a\", \"b\", \"c\");\n\n$(Get-F5.iControl).LocalLBClass.create_string_class(\n$StringClassA\n);\n\n$DataValueA = (\"data 1\", \"data 2\", \"data 3\");\n$DataValuesAofA = \n$(Get-F5.iControl).LocalLBClass.set_string_class_member_data_value(\n$StringClassA,\n(, $DataValueA)\n)\n\nGet-DataGroup -Name $Name;\n}\n\n#-------------------------------------------------------------------------\nfunction RemoveFrom-DataGroup()\n#-------------------------------------------------------------------------\n{\nparam(\n[string]$Name\n);\n\n$StringClassA = New-Object -TypeName iControl.LocalLBClassStringClass[] 1;\n$StringClassA[0] = New-Object -TypeName iControl.LocalLBClassStringClass;\n$StringClassA[0].name = $Name;\n$StringClassA[0].members = (\"c\");\n\n$(Get-F5.iControl).LocalLBClass.delete_string_class_member(\n$StringClassA\n);\n\nGet-DataGroup -Name $Name;\n}\n\n#-------------------------------------------------------------------------\nfunction AddTo-DataGroup()\n#-------------------------------------------------------------------------\n{\nparam(\n[string]$Name\n);\n\n$StringClassA = New-Object -TypeName iControl.LocalLBClassStringClass[] 1;\n$StringClassA[0] = New-Object -TypeName iControl.LocalLBClassStringClass;\n$StringClassA[0].name = $Name;\n$StringClassA[0].members = (\"d\", \"e\");\n\n$(Get-F5.iControl).LocalLBClass.add_string_class_member(\n$StringClassA\n);\n\n$DataValueA = (\"data 4\", \"data 5\");\n$DataValuesAofA = \n$(Get-F5.iControl).LocalLBClass.set_string_class_member_data_value(\n$StringClassA,\n(, $DataValueA)\n)\n\nGet-DataGroup -Name $Name;\n}
\n
\n\n
\n

Python SOAP Example

\n\n
\ndef get_dg_list(bigip):\n    try:\n        dg_str_list = bigip.LocalLB.Class.get_string_class_list()\n        dg_str_names = bigip.LocalLB.Class.get_string_class(dg_str_list)\n\n\n        for dg in dg_str_names:\n            print dg\n            print '   Data Group: %s' % dg['name']\n            for x in dg['members']:\n                print '       %s' % x\n\n    except Exception, e:\n        print e\n\n\ndef extend_dg(bigip, dgname, keys, values):\n    try:\n        bigip.LocalLB.Class.add_string_class_member([{'name': dgname, 'members': keys}])\n        bigip.LocalLB.Class.set_string_class_member_data_value([{'name': dgname, 'members': keys}], [[values]])\n    except Exception, e:\n        print e\n\n\ndef contract_dg(bigip, dgname, keys):\n    try:\n        bigip.LocalLB.Class.delete_string_class_member([{'name': dgname, 'members': keys}])\n    except Exception, e:\n        print e\n\n\ndef create_dg(bigip, dgname, keys, values):\n    try:\n        bigip.LocalLB.Class.create_string_class([{'name': dgname, 'members': keys}])\n        bigip.LocalLB.Class.set_string_class_member_data_value([{'name': dgname, 'members': keys}], [[values]])\n    except Exception, e:\n        print e
\n
\n\n
\n

Node.js REST Example

\n\n
\n//--------------------------------------------------------\nfunction createDataGroup(datagroup) {\n//--------------------------------------------------------\n\ndatagroup = datagroup.replace(/\\//g, \"~\");\nvar uri = \"/mgmt/tm/ltm/data-group/internal\";\n\nvar dgObj = {};\ndgObj.name = datagroup;\ndgObj.type = \"string\";\ndgObj.records = [\n{name: \"a\", data: \"data 1\"},\n{name: \"b\", data: \"data 2\"},\n{name: \"c\", data: \"data 3\"},\n];\n\nvar body = JSON.stringify(dgObj);\n\nhandleVERB(\"POST\", uri, body, function(json) {\nconsole.log(json);\n});\n}\n\n//--------------------------------------------------------\nfunction removeFromDataGroup(datagroup) {\n//--------------------------------------------------------\ndg_uri = datagroup.replace(/\\//g, \"~\");\nvar uri = \"/mgmt/tm/ltm/data-group/internal/\" + dg_uri;\n\nvar dgObj = {};\ndgObj.name = datagroup;\ndgObj.records = [\n{name: \"a\", data: \"data 1\"},\n{name: \"b\", data: \"data 2\"}\n];\n\nvar body = JSON.stringify(dgObj);\n\nhandleVERB(\"PATCH\", uri, body, function(json) {\nconsole.log(json);\n});\n}\n\n//--------------------------------------------------------\nfunction addToDataGroup(datagroup) {\n//--------------------------------------------------------\ndg_uri = datagroup.replace(/\\//g, \"~\");\nvar uri = \"/mgmt/tm/ltm/data-group/internal/\" + dg_uri;\n\nvar dgObj = {};\ndgObj.name = datagroup;\ndgObj.records = [\n{name: \"a\", data: \"data 1\"},\n{name: \"b\", data: \"data 2\"},\n{name: \"d\", data: \"data 4\"},\n{name: \"e\", data: \"data 5\"}\n];\n\nvar body = JSON.stringify(dgObj);\n\nhandleVERB(\"PATCH\", uri, body, function(json) {\nconsole.log(json);\n});\n}
\n
\n\n
\n

Perl REST Example

\n\n
\n#----------------------------------------------------------------------------\nsub createDataGroup()\n#----------------------------------------------------------------------------\n{\nmy ($datagroup) = @_;\n\n  my @names = (\"a\", \"b\", \"c\");\n\n  my $StringClass =\n  {\n    name => $datagroup,\n    members => [@names]\n  };\n\n# Create Data group with names\n$soapResponse = $Class->create_string_class(\nSOAP::Data->name(classes => [$StringClass])\n);\n&checkResponse($soapResponse);\n\n# Set values\n  # Build Values 2-D Array for values parameter\n  my @valuesA = (\"data 1\", \"data 2\", \"data 3\");\n  my @valuesAofA;\n  push @valuesAofA, [@valuesA];\n  $soapResponse = $Class->set_string_class_member_data_value\n  (\n    SOAP::Data->name(class_members => [$StringClass]),\n    SOAP::Data->name(values => [@valuesAofA])\n  );\n  &checkResponse($soapResponse);\n\n&getDataGroup($datagroup);\n}\n\n#----------------------------------------------------------------------------\nsub removeFromDataGroup()\n#----------------------------------------------------------------------------\n{\nmy ($datagroup) = @_;\n\n  my @names = (\"c\");\n\n  my $StringClass =\n  {\n    name => $datagroup,\n    members => [@names]\n  };\n\n# Create Data group with names\n$soapResponse = $Class->delete_string_class_member(\nSOAP::Data->name(class_members => [$StringClass])\n);\n&checkResponse($soapResponse);\n\n&getDataGroup($datagroup);\n}\n\n#----------------------------------------------------------------------------\nsub addToDataGroup()\n#----------------------------------------------------------------------------\n{\nmy ($datagroup) = @_;\n\n  my @names = (\"d\", \"e\");\n\n  my $StringClass =\n  {\n    name => $datagroup,\n    members => [@names]\n  };\n\n# Create Data group with names\n$soapResponse = $Class->add_string_class_member(\nSOAP::Data->name(class_members => [$StringClass])\n);\n&checkResponse($soapResponse);\n\n# Set values\n  # Build Values 2-D Array for values parameter\n  my @valuesA = (\"data 4\", \"data 5\");\n  my @valuesAofA;\n  push @valuesAofA, [@valuesA];\n  $soapResponse = $Class->set_string_class_member_data_value\n  (\n    SOAP::Data->name(class_members => [$StringClass]),\n    SOAP::Data->name(values => [@valuesAofA])\n  );\n  &checkResponse($soapResponse);\n\n&getDataGroup($datagroup);\n}
\n
\n\n
\n

Powershell REST Example

\n\n
\n#----------------------------------------------------------------------------\nfunction Create-DataGroup()\n#\n#  Description:\n#    This function creates a new internal data group\n#\n#  Parameters:\n#    Name       - The Name of the data group\n#----------------------------------------------------------------------------\n{\n  param(\n    [string]$Name\n  );\n\n$uri = \"/mgmt/tm/ltm/data-group/internal\";\n$link = \"https://$Bigip$uri\";\n$headers = @{};\n$headers.Add(\"ServerHost\", $Bigip);\n$headers.Add(\"Content-Type\", \"application/json\");\n$obj = @{\nname=$Name\ntype=\"string\"\nrecords= (\n@{ name=\"a\"\ndata=\"data 1\"\n},\n@{ name=\"b\"\ndata=\"data 2\"\n},\n@{ name=\"c\"\ndata=\"data 3\"\n}\n)\n};\n$body = $obj | ConvertTo-Json\n\n$secpasswd = ConvertTo-SecureString $Pass -AsPlainText -Force\n$mycreds = New-Object System.Management.Automation.PSCredential ($User, $secpasswd)\n\n$obj = Invoke-RestMethod -Method POST -Uri $link -Headers $headers -Credential $mycreds -Body $body;\n\nWrite-Host \"Pool ${Name} created in partition ${Partition}\"\n}\n\n#----------------------------------------------------------------------------\nfunction RemoveFrom-DataGroup()\n#\n#  Description:\n#    This function removes an entry from a data group\n#\n#  Parameters:\n#    Name       - The Name of the data group\n#----------------------------------------------------------------------------\n{\n  param(\n    [string]$Name\n  );\n\n$uri = \"/mgmt/tm/ltm/data-group/internal/${Name}\";\n$link = \"https://$Bigip$uri\";\n$headers = @{};\n$headers.Add(\"ServerHost\", $Bigip);\n$headers.Add(\"Content-Type\", \"application/json\");\n$obj = @{\nname=$Name\nrecords= (\n@{ name=\"a\"\ndata=\"data 1\"\n},\n@{ name=\"b\"\ndata=\"data 2\"\n}\n)\n};\n$body = $obj | ConvertTo-Json\n\n$secpasswd = ConvertTo-SecureString $Pass -AsPlainText -Force\n$mycreds = New-Object System.Management.Automation.PSCredential ($User, $secpasswd)\n\n$obj = Invoke-RestMethod -Method PATCH -Uri $link -Headers $headers -Credential $mycreds -Body $body;\n\n$obj | Format-List\n}\n\n#----------------------------------------------------------------------------\nfunction AddTo-DataGroup()\n#\n#  Description:\n#    This function adds records to an existing data group\n#\n#  Parameters:\n#    Name       - The Name of the data group\n#----------------------------------------------------------------------------\n{\n  param(\n    [string]$Name\n  );\n\n$uri = \"/mgmt/tm/ltm/data-group/internal/${Name}\";\n$link = \"https://$Bigip$uri\";\n$headers = @{};\n$headers.Add(\"ServerHost\", $Bigip);\n$headers.Add(\"Content-Type\", \"application/json\");\n$obj = @{\nname=$Name\nrecords= (\n@{ name=\"a\"\ndata=\"data 1\"\n},\n@{ name=\"b\"\ndata=\"data 2\"\n},\n@{ name=\"d\"\ndata=\"data 4\"\n},\n@{ name=\"e\"\ndata=\"data 5\"\n}\n)\n};\n$body = $obj | ConvertTo-Json\n\n$secpasswd = ConvertTo-SecureString $Pass -AsPlainText -Force\n$mycreds = New-Object System.Management.Automation.PSCredential ($User, $secpasswd)\n\n$obj = Invoke-RestMethod -Method PATCH -Uri $link -Headers $headers -Credential $mycreds -Body $body;\n\n$obj | Format-List\n}
\n
\n\n
\n

Python REST Example

\n\n
\ndef get_dg_list(rq, url):\n    try:\n        dg_list = rq.get('%s/ltm/data-group/internal' % url).json()\n        for dg in dg_list['items']:\n            print dg\n            print '   Data Group: %s' % dg['name']\n            print '   --------------'\n            if 'records' in dg:\n                for record in dg['records']:\n                    if 'data' in record:\n                        print '      %s: %s' % (record['name'], record['data'])\n                    else:\n                        print '      %s' % record['name']\n\n    except Exception, e:\n        print e\n\n\ndef extend_dg(rq, url, dgname, additional_records):\n    dg = rq.get('%s/ltm/data-group/internal/%s' % (url, dgname)).json()\n\n    current_records = dg['records']\n    new_records = []\n    for record in current_records:\n        if 'data' in record:\n            nr = [{'name': record['name'], 'data': record['data']}]\n        else:\n            nr = [{'name': record['name']}]\n        new_records.extend(nr)\n    for record in additional_records:\n        if 'data' in record:\n            nr = [{'name': record['name'], 'data': record['data']}]\n        else:\n            nr = [{'name': record['name']}]\n        new_records.extend(nr)\n\n    payload = {}\n    payload['records'] = new_records\n    rq.put('%s/ltm/data-group/internal/%s' % (url, dgname), json.dumps(payload))\n\n\ndef contract_dg(rq, url, dgname, removal_records):\n    dg = rq.get('%s/ltm/data-group/internal/%s' % (url, dgname)).json()\n    current_records = dg['records']\n\n    new_records = []\n    for record in removal_records:\n        if 'data' in record:\n            nr = [{'name': record['name'], 'data': record['data']}]\n        else:\n            nr = [{'name': record['name']}]\n        new_records.extend(nr)\n\n    new_records = [x for x in current_records if x not in new_records]\n\n    payload = {}\n    payload['records'] = new_records\n    rq.put('%s/ltm/data-group/internal/%s' % (url, dgname), json.dumps(payload))\n\n\ndef create_dg(rq, url, dgname, records):\n    new_records = []\n    for record in records:\n        if 'data' in record:\n            nr = [{'name': record['name'], 'data': record['data']}]\n        else:\n            nr = [{'name': record['name']}]\n        new_records.extend(nr)\n\n    payload = {}\n    payload['type'] = 'string'\n    payload['name'] = dgname\n    payload['records'] = new_records\n    try:\n        rq.post('%s/ltm/data-group/internal' % url, json.dumps(payload))\n    except Exception, e:\n        print e
\n
\n
\n\n
\n

Resources

\n\n

All the scripts for this article are available in the codeshare under \"Getting Started with iControl Code Samples.\"

","kudosSumWeight":0,"postTime":"2016-06-15T10:54:44.000-07:00","images":{"__typename":"AssociatedImageConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"attachments":{"__typename":"AttachmentConnection","pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null},"edges":[]},"tags":{"__typename":"TagConnection","pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null},"edges":[{"__typename":"TagEdge","cursor":"MjUuNHwyLjF8b3wxMHxfTlZffDE","node":{"__typename":"Tag","id":"tag:devops","text":"devops","time":"2011-10-19T17:50:55.000-07:00","lastActivityTime":null,"messagesCount":null,"followersCount":null}},{"__typename":"TagEdge","cursor":"MjUuNHwyLjF8b3wxMHxfTlZffDI","node":{"__typename":"Tag","id":"tag:iControl","text":"iControl","time":"2022-01-24T02:29:45.068-08:00","lastActivityTime":null,"messagesCount":null,"followersCount":null}},{"__typename":"TagEdge","cursor":"MjUuNHwyLjF8b3wxMHxfTlZffDM","node":{"__typename":"Tag","id":"tag:iControlREST","text":"iControlREST","time":"2022-01-24T02:29:46.488-08:00","lastActivityTime":null,"messagesCount":null,"followersCount":null}},{"__typename":"TagEdge","cursor":"MjUuNHwyLjF8b3wxMHxfTlZffDQ","node":{"__typename":"Tag","id":"tag:series-icontrol-getting-started","text":"series-icontrol-getting-started","time":"2022-02-08T15:18:10.188-08:00","lastActivityTime":null,"messagesCount":null,"followersCount":null}}]},"timeToRead":14,"rawTeaser":"","introduction":"","currentRevision":{"__ref":"Revision:revision:290235_1"},"latestVersion":{"__typename":"FriendlyVersion","major":"1","minor":"0"},"metrics":{"__typename":"MessageMetrics","views":3850},"read":false,"visibilityScope":"PUBLIC","canonicalUrl":null,"seoTitle":null,"seoDescription":null,"placeholder":false,"originalMessageForPlaceholder":null,"contributors":{"__typename":"UserConnection","edges":[]},"nonCoAuthorContributors":{"__typename":"UserConnection","edges":[]},"coAuthors":{"__typename":"UserConnection","edges":[{"__typename":"UserEdge","node":{"__ref":"User:user:51154"}}]},"tkbMessagePolicies":{"__typename":"TkbMessagePolicies","canDoAuthoringActionsOnTkb":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.tkb.policy_can_do_authoring_action.accessDenied","key":"error.lithium.policies.tkb.policy_can_do_authoring_action.accessDenied","args":[]}}},"archivalData":null,"replies":{"__typename":"MessageConnection","edges":[],"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"customFields":[],"revisions({\"constraints\":{\"isPublished\":{\"eq\":true}}})":{"__typename":"RevisionConnection","totalCount":1}},"Conversation:conversation:290235":{"__typename":"Conversation","id":"conversation:290235","solved":false,"topic":{"__ref":"TkbTopicMessage:message:290235"},"lastPostingActivityTime":"2016-06-15T10:54:44.000-07:00","lastPostTime":"2016-06-15T10:54:44.000-07:00","unreadReplyCount":0,"isSubscribed":false},"ModerationData:moderation_data:290235":{"__typename":"ModerationData","id":"moderation_data:290235","status":"APPROVED","rejectReason":null,"isReportedAbuse":false,"rejectUser":null,"rejectTime":null,"rejectActorType":null},"Revision:revision:290235_1":{"__typename":"Revision","id":"revision:290235_1","lastEditTime":"2016-06-15T10:54:44.000-07:00"},"CachedAsset:theme:customTheme1-1751557990837":{"__typename":"CachedAsset","id":"theme:customTheme1-1751557990837","value":{"id":"customTheme1","animation":{"fast":"150ms","normal":"250ms","slow":"500ms","slowest":"750ms","function":"cubic-bezier(0.07, 0.91, 0.51, 1)","__typename":"AnimationThemeSettings"},"avatar":{"borderRadius":"50%","collections":["custom"],"__typename":"AvatarThemeSettings"},"basics":{"browserIcon":{"imageAssetName":"android-chrome-512x512-1748534255255.png","imageLastModified":"1748534256856","__typename":"ThemeAsset"},"customerLogo":{"imageAssetName":"F5-devCentral-HR-color-reverse-1750868999153.png","imageLastModified":"1750869001512","__typename":"ThemeAsset"},"maximumWidthOfPageContent":"fluid","oneColumnNarrowWidth":"800px","gridGutterWidthMd":"30px","gridGutterWidthXs":"10px","pageWidthStyle":"WIDTH_OF_PAGE_CONTENT","__typename":"BasicsThemeSettings"},"buttons":{"borderRadiusSm":"5px","borderRadius":"5px","borderRadiusLg":"5px","paddingY":"5px","paddingYLg":"7px","paddingYHero":"var(--lia-bs-btn-padding-y-lg)","paddingX":"12px","paddingXLg":"14px","paddingXHero":"42px","fontStyle":"NORMAL","fontWeight":"500","textTransform":"NONE","disabledOpacity":0.5,"primaryTextColor":"var(--lia-bs-white)","primaryTextHoverColor":"var(--lia-bs-white)","primaryTextActiveColor":"var(--lia-bs-white)","primaryBgColor":"#0072B0","primaryBgHoverColor":"hsl(201.10000000000002, 100%, 29.3%)","primaryBgActiveColor":"hsl(201.10000000000002, 100%, 24.2%)","primaryBorder":"1px solid transparent","primaryBorderHover":"1px solid transparent","primaryBorderActive":"1px solid transparent","primaryBorderFocus":"1px solid var(--lia-bs-white)","primaryBoxShadowFocus":"0 0 0 1px #0072B0, 0 0 0 4px rgba(0, 114, 176, 0.2)","secondaryTextColor":"var(--lia-bs-white)","secondaryTextHoverColor":"var(--lia-bs-white)","secondaryTextActiveColor":"var(--lia-bs-white)","secondaryBgColor":"#0072B0","secondaryBgHoverColor":"hsl(201.10000000000002, 100%, 29.3%)","secondaryBgActiveColor":"hsl(201.10000000000002, 100%, 24.2%)","secondaryBorder":"1px solid transparent","secondaryBorderHover":"1px solid transparent","secondaryBorderActive":"1px solid transparent","secondaryBorderFocus":"1px solid transparent","secondaryBoxShadowFocus":"0 0 0 1px #0072B0, 0 0 0 4px rgba(0, 114, 176, 0.2)","tertiaryTextColor":"#0072B0","tertiaryTextHoverColor":"hsl(201.10000000000002, 100%, 32.8%)","tertiaryTextActiveColor":"hsl(201.10000000000002, 100%, 31.1%)","tertiaryBgColor":"transparent","tertiaryBgHoverColor":"transparent","tertiaryBgActiveColor":"rgba(0, 114, 176, 0.04)","tertiaryBorder":"1px solid transparent","tertiaryBorderHover":"1px solid rgba(0, 114, 176, 0.08)","tertiaryBorderActive":"1px solid transparent","tertiaryBorderFocus":"1px solid transparent","tertiaryBoxShadowFocus":"0 0 0 1px #0072B0, 0 0 0 4px rgba(0, 114, 176, 0.2)","destructiveTextColor":"var(--lia-bs-danger)","destructiveTextHoverColor":"hsl(var(--lia-bs-danger-h), var(--lia-bs-danger-s), calc(var(--lia-bs-danger-l) * 0.95))","destructiveTextActiveColor":"hsl(var(--lia-bs-danger-h), var(--lia-bs-danger-s), calc(var(--lia-bs-danger-l) * 0.9))","destructiveBgColor":"var(--lia-bs-gray-300)","destructiveBgHoverColor":"hsl(var(--lia-bs-gray-300-h), var(--lia-bs-gray-300-s), calc(var(--lia-bs-gray-300-l) * 0.96))","destructiveBgActiveColor":"hsl(var(--lia-bs-gray-300-h), var(--lia-bs-gray-300-s), calc(var(--lia-bs-gray-300-l) * 0.92))","destructiveBorder":"1px solid transparent","destructiveBorderHover":"1px solid transparent","destructiveBorderActive":"1px solid transparent","destructiveBorderFocus":"1px solid transparent","destructiveBoxShadowFocus":"0 0 0 1px #0072B0, 0 0 0 4px rgba(0, 114, 176, 0.2)","__typename":"ButtonsThemeSettings"},"border":{"color":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.08)","mainContent":"DARK","sideContent":"DARK","radiusSm":"3px","radius":"5px","radiusLg":"9px","radius50":"100vw","__typename":"BorderThemeSettings"},"boxShadow":{"xs":"0 0 0 1px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.08), 0 3px 0 -1px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.16)","sm":"0 2px 4px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.12)","md":"0 5px 15px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.3)","lg":"0 10px 30px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.3)","__typename":"BoxShadowThemeSettings"},"cards":{"bgColor":"var(--lia-panel-bg-color)","borderRadius":"var(--lia-panel-border-radius)","boxShadow":"var(--lia-box-shadow-xs)","__typename":"CardsThemeSettings"},"chip":{"maxWidth":"300px","height":"30px","__typename":"ChipThemeSettings"},"coreTypes":{"defaultMessageLinkColor":"var(--lia-bs-primary)","defaultMessageLinkDecoration":"none","defaultMessageLinkFontStyle":"NORMAL","defaultMessageLinkFontWeight":"500","defaultMessageFontStyle":"NORMAL","defaultMessageFontWeight":"400","defaultMessageFontFamily":"var(--lia-bs-font-family-base)","forumColor":"#0C5C8D","forumFontFamily":"var(--lia-bs-font-family-base)","forumFontWeight":"var(--lia-default-message-font-weight)","forumLineHeight":"var(--lia-bs-line-height-base)","forumFontStyle":"var(--lia-default-message-font-style)","forumMessageLinkColor":"var(--lia-default-message-link-color)","forumMessageLinkDecoration":"var(--lia-default-message-link-decoration)","forumMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","forumMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","forumSolvedColor":"#62C026","blogColor":"#730015","blogFontFamily":"var(--lia-bs-font-family-base)","blogFontWeight":"var(--lia-default-message-font-weight)","blogLineHeight":"1.75","blogFontStyle":"var(--lia-default-message-font-style)","blogMessageLinkColor":"var(--lia-default-message-link-color)","blogMessageLinkDecoration":"var(--lia-default-message-link-decoration)","blogMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","blogMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","tkbColor":"#C20025","tkbFontFamily":"var(--lia-bs-font-family-base)","tkbFontWeight":"var(--lia-default-message-font-weight)","tkbLineHeight":"1.75","tkbFontStyle":"var(--lia-default-message-font-style)","tkbMessageLinkColor":"var(--lia-default-message-link-color)","tkbMessageLinkDecoration":"var(--lia-default-message-link-decoration)","tkbMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","tkbMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","qandaColor":"#4099E2","qandaFontFamily":"var(--lia-bs-font-family-base)","qandaFontWeight":"var(--lia-default-message-font-weight)","qandaLineHeight":"var(--lia-bs-line-height-base)","qandaFontStyle":"var(--lia-default-message-link-font-style)","qandaMessageLinkColor":"var(--lia-default-message-link-color)","qandaMessageLinkDecoration":"var(--lia-default-message-link-decoration)","qandaMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","qandaMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","qandaSolvedColor":"#3FA023","ideaColor":"#F3704B","ideaFontFamily":"var(--lia-bs-font-family-base)","ideaFontWeight":"var(--lia-default-message-font-weight)","ideaLineHeight":"var(--lia-bs-line-height-base)","ideaFontStyle":"var(--lia-default-message-font-style)","ideaMessageLinkColor":"var(--lia-default-message-link-color)","ideaMessageLinkDecoration":"var(--lia-default-message-link-decoration)","ideaMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","ideaMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","contestColor":"#FCC845","contestFontFamily":"var(--lia-bs-font-family-base)","contestFontWeight":"var(--lia-default-message-font-weight)","contestLineHeight":"var(--lia-bs-line-height-base)","contestFontStyle":"var(--lia-default-message-link-font-style)","contestMessageLinkColor":"var(--lia-default-message-link-color)","contestMessageLinkDecoration":"var(--lia-default-message-link-decoration)","contestMessageLinkFontStyle":"ITALIC","contestMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","occasionColor":"#EE4B5B","occasionFontFamily":"var(--lia-bs-font-family-base)","occasionFontWeight":"var(--lia-default-message-font-weight)","occasionLineHeight":"var(--lia-bs-line-height-base)","occasionFontStyle":"var(--lia-default-message-font-style)","occasionMessageLinkColor":"var(--lia-default-message-link-color)","occasionMessageLinkDecoration":"var(--lia-default-message-link-decoration)","occasionMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","occasionMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","grouphubColor":"#491B62","categoryColor":"#949494","communityColor":"#FFFFFF","productColor":"#949494","__typename":"CoreTypesThemeSettings"},"colors":{"black":"#000000","white":"#FFFFFF","gray100":"#F7F7F7","gray200":"#F7F7F7","gray300":"#E8E8E8","gray400":"#D9D9D9","gray500":"#CCCCCC","gray600":"#949494","gray700":"#707070","gray800":"#545454","gray900":"#333333","dark":"#545454","light":"#F7F7F7","primary":"#0072B0","secondary":"#333333","bodyText":"#222222","bodyBg":"#F5F5F5","info":"#1D9CD3","success":"#62C026","warning":"#FFD651","danger":"#C20025","alertSystem":"#FF6600","textMuted":"#707070","highlight":"#FFFCAD","outline":"var(--lia-bs-primary)","custom":["#C20025","#081B85","#009639","#B3C6D7","#7CC0EB","#F29A36","#B2D7EB","#66AFD7","#007ABC","#343434","#0E6EB9","#0072B0"],"__typename":"ColorsThemeSettings"},"divider":{"size":"3px","marginLeft":"4px","marginRight":"4px","borderRadius":"50%","bgColor":"var(--lia-bs-gray-600)","bgColorActive":"var(--lia-bs-gray-600)","__typename":"DividerThemeSettings"},"dropdown":{"fontSize":"var(--lia-bs-font-size-sm)","borderColor":"var(--lia-bs-border-color)","borderRadius":"var(--lia-bs-border-radius-sm)","dividerBg":"var(--lia-bs-gray-300)","itemPaddingY":"5px","itemPaddingX":"20px","headerColor":"var(--lia-bs-gray-700)","__typename":"DropdownThemeSettings"},"email":{"link":{"color":"#0069D4","hoverColor":"#0061c2","decoration":"none","hoverDecoration":"underline","__typename":"EmailLinkSettings"},"border":{"color":"#e4e4e4","__typename":"EmailBorderSettings"},"buttons":{"borderRadiusLg":"5px","paddingXLg":"16px","paddingYLg":"7px","fontWeight":"700","primaryTextColor":"#ffffff","primaryTextHoverColor":"#ffffff","primaryBgColor":"#0069D4","primaryBgHoverColor":"#005cb8","primaryBorder":"1px solid transparent","primaryBorderHover":"1px solid transparent","__typename":"EmailButtonsSettings"},"panel":{"borderRadius":"5px","borderColor":"#e4e4e4","__typename":"EmailPanelSettings"},"__typename":"EmailThemeSettings"},"emoji":{"skinToneDefault":"#ffcd43","skinToneLight":"#fae3c5","skinToneMediumLight":"#e2cfa5","skinToneMedium":"#daa478","skinToneMediumDark":"#a78058","skinToneDark":"#5e4d43","__typename":"EmojiThemeSettings"},"heading":{"color":"var(--lia-bs-body-color)","fontFamily":"Neusa Next Pro Wide Bold","fontStyle":"NORMAL","fontWeight":"700","h1FontSize":"30px","h2FontSize":"25px","h3FontSize":"20px","h4FontSize":"18px","h5FontSize":"16px","h6FontSize":"16px","lineHeight":"1.1","subHeaderFontSize":"11px","subHeaderFontWeight":"500","h1LetterSpacing":"normal","h2LetterSpacing":"normal","h3LetterSpacing":"normal","h4LetterSpacing":"normal","h5LetterSpacing":"normal","h6LetterSpacing":"normal","subHeaderLetterSpacing":"2px","h1FontWeight":"var(--lia-bs-headings-font-weight)","h2FontWeight":"var(--lia-bs-headings-font-weight)","h3FontWeight":"var(--lia-bs-headings-font-weight)","h4FontWeight":"var(--lia-bs-headings-font-weight)","h5FontWeight":"var(--lia-bs-headings-font-weight)","h6FontWeight":"var(--lia-bs-headings-font-weight)","__typename":"HeadingThemeSettings"},"icons":{"size10":"10px","size12":"12px","size14":"14px","size16":"16px","size20":"20px","size24":"24px","size30":"30px","size40":"40px","size50":"50px","size60":"60px","size80":"80px","size120":"120px","size160":"160px","__typename":"IconsThemeSettings"},"imagePreview":{"bgColor":"var(--lia-bs-gray-900)","titleColor":"var(--lia-bs-white)","controlColor":"var(--lia-bs-white)","controlBgColor":"var(--lia-bs-gray-800)","__typename":"ImagePreviewThemeSettings"},"input":{"borderColor":"var(--lia-bs-gray-600)","disabledColor":"var(--lia-bs-gray-600)","focusBorderColor":"var(--lia-bs-primary)","labelMarginBottom":"10px","btnFontSize":"var(--lia-bs-font-size-sm)","focusBoxShadow":"0 0 0 3px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","checkLabelMarginBottom":"2px","checkboxBorderRadius":"3px","borderRadiusSm":"var(--lia-bs-border-radius-sm)","borderRadius":"var(--lia-bs-border-radius)","borderRadiusLg":"var(--lia-bs-border-radius-lg)","formTextMarginTop":"4px","textAreaBorderRadius":"var(--lia-bs-border-radius)","activeFillColor":"var(--lia-bs-primary)","__typename":"InputThemeSettings"},"loading":{"dotDarkColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.2)","dotLightColor":"hsla(var(--lia-bs-white-h), var(--lia-bs-white-s), var(--lia-bs-white-l), 0.5)","barDarkColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.06)","barLightColor":"hsla(var(--lia-bs-white-h), var(--lia-bs-white-s), var(--lia-bs-white-l), 0.4)","__typename":"LoadingThemeSettings"},"link":{"color":"var(--lia-bs-primary)","hoverColor":"hsl(var(--lia-bs-primary-h), var(--lia-bs-primary-s), calc(var(--lia-bs-primary-l) - 10%))","decoration":"none","hoverDecoration":"underline","__typename":"LinkThemeSettings"},"listGroup":{"itemPaddingY":"15px","itemPaddingX":"15px","borderColor":"var(--lia-bs-gray-300)","__typename":"ListGroupThemeSettings"},"modal":{"contentTextColor":"var(--lia-bs-body-color)","contentBg":"var(--lia-bs-white)","backgroundBg":"var(--lia-bs-black)","smSize":"440px","mdSize":"760px","lgSize":"1080px","backdropOpacity":0.3,"contentBoxShadowXs":"var(--lia-bs-box-shadow-sm)","contentBoxShadow":"var(--lia-bs-box-shadow)","headerFontWeight":"700","__typename":"ModalThemeSettings"},"navbar":{"position":"FIXED","background":{"attachment":null,"clip":null,"color":"var(--lia-bs-white)","imageAssetName":null,"imageLastModified":"0","origin":null,"position":"CENTER_CENTER","repeat":"NO_REPEAT","size":"COVER","__typename":"BackgroundProps"},"backgroundOpacity":0.8,"paddingTop":"15px","paddingBottom":"15px","borderBottom":"1px solid var(--lia-bs-border-color)","boxShadow":"var(--lia-bs-box-shadow-sm)","brandMarginRight":"30px","brandMarginRightSm":"10px","brandLogoHeight":"30px","linkGap":"10px","linkJustifyContent":"flex-start","linkPaddingY":"5px","linkPaddingX":"10px","linkDropdownPaddingY":"9px","linkDropdownPaddingX":"var(--lia-nav-link-px)","linkColor":"var(--lia-bs-body-color)","linkHoverColor":"var(--lia-bs-primary)","linkFontSize":"var(--lia-bs-font-size-sm)","linkFontStyle":"NORMAL","linkFontWeight":"400","linkTextTransform":"NONE","linkLetterSpacing":"normal","linkBorderRadius":"var(--lia-bs-border-radius-sm)","linkBgColor":"transparent","linkBgHoverColor":"transparent","linkBorder":"none","linkBorderHover":"none","linkBoxShadow":"none","linkBoxShadowHover":"none","linkTextBorderBottom":"none","linkTextBorderBottomHover":"none","dropdownPaddingTop":"10px","dropdownPaddingBottom":"15px","dropdownPaddingX":"10px","dropdownMenuOffset":"2px","dropdownDividerMarginTop":"10px","dropdownDividerMarginBottom":"10px","dropdownBorderColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.08)","controllerBgHoverColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.1)","controllerIconColor":"var(--lia-bs-body-color)","controllerIconHoverColor":"var(--lia-bs-body-color)","controllerTextColor":"var(--lia-nav-controller-icon-color)","controllerTextHoverColor":"var(--lia-nav-controller-icon-hover-color)","controllerHighlightColor":"hsla(30, 100%, 50%)","controllerHighlightTextColor":"var(--lia-yiq-light)","controllerBorderRadius":"var(--lia-border-radius-50)","hamburgerColor":"var(--lia-nav-controller-icon-color)","hamburgerHoverColor":"var(--lia-nav-controller-icon-color)","hamburgerBgColor":"transparent","hamburgerBgHoverColor":"transparent","hamburgerBorder":"none","hamburgerBorderHover":"none","collapseMenuMarginLeft":"20px","collapseMenuDividerBg":"var(--lia-nav-link-color)","collapseMenuDividerOpacity":0.16,"__typename":"NavbarThemeSettings"},"pager":{"textColor":"var(--lia-bs-link-color)","textFontWeight":"var(--lia-font-weight-md)","textFontSize":"var(--lia-bs-font-size-sm)","__typename":"PagerThemeSettings"},"panel":{"bgColor":"var(--lia-bs-white)","borderRadius":"var(--lia-bs-border-radius)","borderColor":"var(--lia-bs-border-color)","boxShadow":"none","__typename":"PanelThemeSettings"},"popover":{"arrowHeight":"8px","arrowWidth":"16px","maxWidth":"300px","minWidth":"100px","headerBg":"var(--lia-bs-white)","borderColor":"var(--lia-bs-border-color)","borderRadius":"var(--lia-bs-border-radius)","boxShadow":"0 0.5rem 1rem hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.15)","__typename":"PopoverThemeSettings"},"prism":{"color":"#000000","bgColor":"#f5f2f0","fontFamily":"var(--font-family-monospace)","fontSize":"var(--lia-bs-font-size-base)","fontWeightBold":"var(--lia-bs-font-weight-bold)","fontStyleItalic":"italic","tabSize":2,"highlightColor":"#b3d4fc","commentColor":"#62707e","punctuationColor":"#6f6f6f","namespaceOpacity":"0.7","propColor":"#990055","selectorColor":"#517a00","operatorColor":"#906736","operatorBgColor":"hsla(0, 0%, 100%, 0.5)","keywordColor":"#0076a9","functionColor":"#d3284b","variableColor":"#c14700","__typename":"PrismThemeSettings"},"rte":{"bgColor":"var(--lia-bs-white)","borderRadius":"var(--lia-panel-border-radius)","boxShadow":" var(--lia-panel-box-shadow)","customColor1":"#bfedd2","customColor2":"#fbeeb8","customColor3":"#f8cac6","customColor4":"#eccafa","customColor5":"#c2e0f4","customColor6":"#2dc26b","customColor7":"#f1c40f","customColor8":"#e03e2d","customColor9":"#b96ad9","customColor10":"#3598db","customColor11":"#169179","customColor12":"#e67e23","customColor13":"#ba372a","customColor14":"#843fa1","customColor15":"#236fa1","customColor16":"#ecf0f1","customColor17":"#ced4d9","customColor18":"#95a5a6","customColor19":"#7e8c8d","customColor20":"#34495e","customColor21":"#000000","customColor22":"#ffffff","defaultMessageHeaderMarginTop":"14px","defaultMessageHeaderMarginBottom":"10px","defaultMessageItemMarginTop":"0","defaultMessageItemMarginBottom":"10px","diffAddedColor":"hsla(170, 53%, 51%, 0.4)","diffChangedColor":"hsla(43, 97%, 63%, 0.4)","diffNoneColor":"hsla(0, 0%, 80%, 0.4)","diffRemovedColor":"hsla(9, 74%, 47%, 0.4)","specialMessageHeaderMarginTop":"14px","specialMessageHeaderMarginBottom":"10px","specialMessageItemMarginTop":"0","specialMessageItemMarginBottom":"10px","tableBgColor":"transparent","tableBorderColor":"var(--lia-bs-gray-700)","tableBorderStyle":"solid","tableCellPaddingX":"5px","tableCellPaddingY":"5px","tableTextColor":"var(--lia-bs-body-color)","tableVerticalAlign":"middle","__typename":"RteThemeSettings"},"tags":{"bgColor":"var(--lia-bs-gray-200)","bgHoverColor":"var(--lia-bs-gray-400)","borderRadius":"var(--lia-bs-border-radius-sm)","color":"var(--lia-bs-body-color)","hoverColor":"var(--lia-bs-body-color)","fontWeight":"var(--lia-font-weight-md)","fontSize":"var(--lia-font-size-xxs)","textTransform":"UPPERCASE","letterSpacing":"0.5px","__typename":"TagsThemeSettings"},"toasts":{"borderRadius":"var(--lia-bs-border-radius)","paddingX":"12px","__typename":"ToastsThemeSettings"},"typography":{"fontFamilyBase":"Proxima Nova A Medium","fontStyleBase":"NORMAL","fontWeightBase":"500","fontWeightLight":"300","fontWeightNormal":"400","fontWeightMd":"500","fontWeightBold":"700","letterSpacingSm":"normal","letterSpacingXs":"normal","lineHeightBase":"1.2","fontSizeBase":"15px","fontSizeXxs":"11px","fontSizeXs":"12px","fontSizeSm":"13px","fontSizeLg":"20px","fontSizeXl":"24px","smallFontSize":"14px","customFonts":[{"source":"SERVER","name":"Proxima Nova A Medium","styles":[{"style":"NORMAL","weight":"500","__typename":"FontStyleData"}],"assetNames":["ProximaNovaAMedium-normal-500.woff2"],"__typename":"CustomFont"},{"source":"SERVER","name":"Neusa Next Pro Wide Bold","styles":[{"style":"NORMAL","weight":"700","__typename":"FontStyleData"}],"assetNames":["NeusaNextProWideBold-normal-700.woff2"],"__typename":"CustomFont"}],"__typename":"TypographyThemeSettings"},"unstyledListItem":{"marginBottomSm":"5px","marginBottomMd":"10px","marginBottomLg":"15px","marginBottomXl":"20px","marginBottomXxl":"25px","__typename":"UnstyledListItemThemeSettings"},"yiq":{"light":"#ffffff","dark":"#000000","__typename":"YiqThemeSettings"},"colorLightness":{"primaryDark":0.36,"primaryLight":0.74,"primaryLighter":0.89,"primaryLightest":0.95,"infoDark":0.39,"infoLight":0.72,"infoLighter":0.85,"infoLightest":0.93,"successDark":0.24,"successLight":0.62,"successLighter":0.8,"successLightest":0.91,"warningDark":0.39,"warningLight":0.68,"warningLighter":0.84,"warningLightest":0.93,"dangerDark":0.41,"dangerLight":0.72,"dangerLighter":0.89,"dangerLightest":0.95,"__typename":"ColorLightnessThemeSettings"},"localOverride":false,"__typename":"Theme"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/common/Loading/LoadingDot-1751557989989":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/Loading/LoadingDot-1751557989989","value":{"title":"Loading..."},"localOverride":false},"CachedAsset:quilt:f5.prod:pages/kbs/TkbMessagePage:board:TechnicalArticles-1751557989071":{"__typename":"CachedAsset","id":"quilt:f5.prod:pages/kbs/TkbMessagePage:board:TechnicalArticles-1751557989071","value":{"id":"TkbMessagePage","container":{"id":"Common","headerProps":{"backgroundImageProps":null,"backgroundColor":null,"addComponents":null,"removeComponents":["community.widget.bannerWidget"],"componentOrder":null,"__typename":"QuiltContainerSectionProps"},"headerComponentProps":{"community.widget.breadcrumbWidget":{"disableLastCrumbForDesktop":false}},"footerProps":null,"footerComponentProps":null,"items":[{"id":"message-list","layout":"MAIN_SIDE","bgColor":"transparent","showTitle":true,"showDescription":true,"textPosition":"CENTER","textColor":"var(--lia-bs-body-color)","sectionEditLevel":null,"bgImage":null,"disableSpacing":null,"edgeToEdgeDisplay":null,"fullHeight":null,"showBorder":null,"__typename":"MainSideQuiltSection","columnMap":{"main":[{"id":"tkbs.widget.tkbArticleWidget","className":"lia-tkb-container","props":{"contributorListType":"panel","showHelpfulness":false,"showTimestamp":true,"showGuideNavigationSection":true,"showVersion":true,"lazyLoad":false,"editLevel":"CONFIGURE"},"__typename":"QuiltComponent"}],"side":[{"id":"featuredWidgets.widget.featuredContentWidget","className":null,"props":{"instanceId":"featuredWidgets.widget.featuredContentWidget-1702666556326","layoutProps":{"layout":"card","layoutOptions":{"useRepliesCount":false,"useAuthorRank":false,"useTimeToRead":true,"useKudosCount":false,"useViewCount":true,"usePreviewMedia":true,"useBody":false,"useCenteredCardContent":false,"useTags":true,"useTimestamp":false,"useBoardLink":true,"useAuthorLink":false,"useSolvedBadge":true}},"titleSrOnly":false,"showPager":true,"pageSize":3,"lazyLoad":true},"__typename":"QuiltComponent"},{"id":"messages.widget.relatedContentWidget","className":null,"props":{"hideIfEmpty":true,"enablePagination":true,"useTitle":true,"listVariant":{"type":"listGroup"},"pageSize":3,"style":"list","pagerVariant":{"type":"loadMore"},"viewVariant":{"type":"inline","props":{"useRepliesCount":true,"useMedia":true,"useAuthorRank":false,"useNode":true,"useTimeToRead":true,"useSpoilerFreeBody":true,"useKudosCount":true,"useNodeLink":true,"useViewCount":true,"usePreviewMedia":false,"useBody":false,"timeStampType":"postTime","useTags":true,"clampSubjectLines":2,"useBoardIcon":false,"useMessageTimeLink":true,"clampBodyLines":3,"useTextBody":true,"useSolvedBadge":true,"useAvatar":true,"useAuthorLogin":true,"useUnreadCount":true}},"lazyLoad":true,"panelType":"divider"},"__typename":"QuiltComponent"}],"__typename":"MainSideSectionColumns"}}],"__typename":"QuiltContainer"},"__typename":"Quilt","localOverride":false},"localOverride":false},"CachedAsset:text:en_US-components/common/EmailVerification-1751557989989":{"__typename":"CachedAsset","id":"text:en_US-components/common/EmailVerification-1751557989989","value":{"email.verification.title":"Email Verification Required","email.verification.message.update.email":"To participate in the community, you must first verify your email address. The verification email was sent to {email}. To change your email, visit My Settings.","email.verification.message.resend.email":"To participate in the community, you must first verify your email address. The verification email was sent to {email}. Resend email."},"localOverride":false},"CachedAsset:text:en_US-pages/kbs/TkbMessagePage-1751557989989":{"__typename":"CachedAsset","id":"text:en_US-pages/kbs/TkbMessagePage-1751557989989","value":{"title":"{contextMessageSubject} | {communityTitle}","errorMissing":"This article cannot be found","name":"TKB Message Page","section.message-list.title":"","archivedMessageTitle":"This Content Has Been Archived","section.erPqcf.title":"","section.erPqcf.description":"","section.message-list.description":""},"localOverride":false},"CachedAsset:text:en_US-components/common/ActionFeedback-1751557989989":{"__typename":"CachedAsset","id":"text:en_US-components/common/ActionFeedback-1751557989989","value":{"joinedGroupHub.title":"Welcome","joinedGroupHub.message":"You are now a member of this group and are subscribed to updates.","groupHubInviteNotFound.title":"Invitation Not Found","groupHubInviteNotFound.message":"Sorry, we could not find your invitation to the group. The owner may have canceled the invite.","groupHubNotFound.title":"Group Not Found","groupHubNotFound.message":"The grouphub you tried to join does not exist. It may have been deleted.","existingGroupHubMember.title":"Already Joined","existingGroupHubMember.message":"You are already a member of this group.","accountLocked.title":"Account Locked","accountLocked.message":"Your account has been locked due to multiple failed attempts. Try again in {lockoutTime} minutes.","editedGroupHub.title":"Changes Saved","editedGroupHub.message":"Your group has been updated.","leftGroupHub.title":"Goodbye","leftGroupHub.message":"You are no longer a member of this group and will not receive future updates.","deletedGroupHub.title":"Deleted","deletedGroupHub.message":"The group has been deleted.","groupHubCreated.title":"Group Created","groupHubCreated.message":"{groupHubName} is ready to use","accountClosed.title":"Account Closed","accountClosed.message":"The account has been closed and you will now be redirected to the homepage","resetTokenExpired.title":"Reset Password Link has Expired","resetTokenExpired.message":"Try resetting your password again","invalidUrl.title":"Invalid URL","invalidUrl.message":"The URL you're using is not recognized. Verify your URL and try again.","accountClosedForUser.title":"Account Closed","accountClosedForUser.message":"{userName}'s account is closed","inviteTokenInvalid.title":"Invitation Invalid","inviteTokenInvalid.message":"Your invitation to the community has been canceled or expired.","inviteTokenError.title":"Invitation Verification Failed","inviteTokenError.message":"The url you are utilizing is not recognized. Verify your URL and try again","pageNotFound.title":"Access Denied","pageNotFound.message":"You do not have access to this area of the community or it doesn't exist","eventAttending.title":"Responded as Attending","eventAttending.message":"You'll be notified when there's new activity and reminded as the event approaches","eventInterested.title":"Responded as Interested","eventInterested.message":"You'll be notified when there's new activity and reminded as the event approaches","eventNotFound.title":"Event Not Found","eventNotFound.message":"The event you tried to respond to does not exist.","redirectToRelatedPage.title":"Showing Related Content","redirectToRelatedPageForBaseUsers.title":"Showing Related Content","redirectToRelatedPageForBaseUsers.message":"The content you are trying to access is archived","redirectToRelatedPage.message":"The content you are trying to access is archived","relatedUrl.archivalLink.flyoutMessage":"The content you are trying to access is archived View Archived Content"},"localOverride":false},"CachedAsset:quiltWrapper:f5.prod:Common:1751557989536":{"__typename":"CachedAsset","id":"quiltWrapper:f5.prod:Common:1751557989536","value":{"id":"Common","header":{"backgroundImageProps":{"assetName":null,"backgroundSize":"COVER","backgroundRepeat":"NO_REPEAT","backgroundPosition":"CENTER_CENTER","lastModified":null,"__typename":"BackgroundImageProps"},"backgroundColor":"#343434","items":[{"id":"custom.widget.GainsightShared","props":{"widgetVisibility":"signedInOnly","useTitle":true,"useBackground":false,"title":"","lazyLoad":false},"__typename":"QuiltComponent"},{"id":"custom.widget.Beta_MetaNav","props":{"widgetVisibility":"signedInOrAnonymous","useTitle":true,"useBackground":false,"title":"","lazyLoad":false},"__typename":"QuiltComponent"},{"id":"community.widget.navbarWidget","props":{"showUserName":false,"showRegisterLink":true,"useIconLanguagePicker":true,"useLabelLanguagePicker":true,"style":{"boxShadow":"var(--lia-bs-box-shadow-sm)","linkFontWeight":"700","controllerHighlightColor":"#F29A36","dropdownDividerMarginBottom":"10px","hamburgerBorderHover":"none","linkFontSize":"15px","linkBoxShadowHover":"none","backgroundOpacity":1,"controllerBorderRadius":"var(--lia-border-radius-50)","hamburgerBgColor":"transparent","linkTextBorderBottom":"none","hamburgerColor":"var(--lia-nav-controller-icon-color)","brandLogoHeight":"48px","linkLetterSpacing":"normal","linkBgHoverColor":"transparent","collapseMenuDividerOpacity":0.16,"paddingBottom":"10px","dropdownPaddingBottom":"15px","dropdownMenuOffset":"2px","hamburgerBgHoverColor":"transparent","borderBottom":"unset","hamburgerBorder":"none","dropdownPaddingX":"10px","brandMarginRightSm":"10px","linkBoxShadow":"none","linkJustifyContent":"center","linkColor":"var(--lia-bs-white)","collapseMenuDividerBg":"var(--lia-nav-link-color)","dropdownPaddingTop":"10px","controllerHighlightTextColor":"var(--lia-yiq-dark)","controllerTextColor":"var(--lia-nav-controller-icon-color)","background":{"imageAssetName":"","color":"var(--lia-bs-body-color)","size":"COVER","repeat":"NO_REPEAT","position":"CENTER_CENTER","imageLastModified":""},"linkBorderRadius":"var(--lia-bs-border-radius-sm)","linkHoverColor":"var(--lia-bs-white)","position":"FIXED","linkBorder":"none","linkTextBorderBottomHover":"2px solid var(--lia-bs-white)","brandMarginRight":"30px","hamburgerHoverColor":"var(--lia-nav-controller-icon-color)","linkBorderHover":"none","collapseMenuMarginLeft":"20px","linkFontStyle":"NORMAL","linkPaddingX":"10px","controllerTextHoverColor":"var(--lia-nav-controller-icon-hover-color)","paddingTop":"10px","linkPaddingY":"5px","linkTextTransform":"NONE","dropdownBorderColor":"hsla(var(--lia-bs-white-h), var(--lia-bs-white-s), var(--lia-bs-white-l), 0.08)","controllerBgHoverColor":"hsla(var(--lia-bs-white-h), var(--lia-bs-white-s), var(--lia-bs-white-l), 0.1)","linkDropdownPaddingX":"var(--lia-nav-link-px)","linkBgColor":"transparent","linkDropdownPaddingY":"9px","controllerIconColor":"var(--lia-bs-white)","dropdownDividerMarginTop":"10px","linkGap":"10px","controllerIconHoverColor":"var(--lia-bs-white)"},"links":{"sideLinks":[],"logoLinks":[],"mainLinks":[{"children":[{"linkType":"INTERNAL","id":"migrated-link-1","params":{"boardId":"TechnicalForum","categoryId":"Forums"},"routeName":"ForumBoardPage"},{"linkType":"INTERNAL","id":"migrated-link-2","params":{"boardId":"WaterCooler","categoryId":"Forums"},"routeName":"ForumBoardPage"}],"linkType":"INTERNAL","id":"migrated-link-0","params":{"categoryId":"Forums"},"routeName":"CategoryPage"},{"children":[{"linkType":"INTERNAL","id":"migrated-link-4","params":{"boardId":"codeshare","categoryId":"CrowdSRC"},"routeName":"TkbBoardPage"},{"linkType":"INTERNAL","id":"migrated-link-5","params":{"boardId":"communityarticles","categoryId":"CrowdSRC"},"routeName":"TkbBoardPage"}],"linkType":"INTERNAL","id":"migrated-link-3","params":{"categoryId":"CrowdSRC"},"routeName":"CategoryPage"},{"children":[{"linkType":"INTERNAL","id":"migrated-link-7","params":{"boardId":"TechnicalArticles","categoryId":"Articles"},"routeName":"TkbBoardPage"},{"linkType":"INTERNAL","id":"article-series","params":{"boardId":"article-series","categoryId":"Articles"},"routeName":"TkbBoardPage"},{"linkType":"INTERNAL","id":"security-insights","params":{"boardId":"security-insights","categoryId":"Articles"},"routeName":"TkbBoardPage"},{"linkType":"INTERNAL","id":"migrated-link-8","params":{"boardId":"DevCentralNews","categoryId":"Articles"},"routeName":"TkbBoardPage"}],"linkType":"INTERNAL","id":"migrated-link-6","params":{"categoryId":"Articles"},"routeName":"CategoryPage"},{"children":[{"linkType":"INTERNAL","id":"migrated-link-10","params":{"categoryId":"CommunityGroups"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"migrated-link-11","params":{"categoryId":"F5-Groups"},"routeName":"CategoryPage"}],"linkType":"INTERNAL","id":"migrated-link-9","params":{"categoryId":"GroupsCategory"},"routeName":"CategoryPage"},{"children":[],"linkType":"INTERNAL","id":"migrated-link-12","params":{"boardId":"Events","categoryId":"top"},"routeName":"EventBoardPage"},{"children":[],"linkType":"INTERNAL","id":"migrated-link-13","params":{"boardId":"Suggestions","categoryId":"top"},"routeName":"IdeaBoardPage"},{"children":[],"linkType":"EXTERNAL","id":"Common-external-link","url":"https://community.f5.com/c/how-do-i","target":"SELF"}]},"className":"QuiltComponent_lia-component-edit-mode__lQ9Z6","showSearchIcon":false,"languagePickerStyle":"iconAndLabel"},"__typename":"QuiltComponent"},{"id":"community.widget.bannerWidget","props":{"backgroundColor":"#343434","visualEffects":{"showBottomBorder":false},"backgroundImageProps":{"backgroundSize":"COVER","backgroundPosition":"CENTER_CENTER","backgroundRepeat":"NO_REPEAT"},"fontColor":"var(--lia-bs-white)"},"__typename":"QuiltComponent"},{"id":"community.widget.breadcrumbWidget","props":{"backgroundColor":"#343434","linkHighlightColor":"#FFFFFF","visualEffects":{"showBottomBorder":true},"backgroundOpacity":100,"linkTextColor":"#FFFFFF"},"__typename":"QuiltComponent"}],"__typename":"QuiltWrapperSection"},"footer":{"backgroundImageProps":{"assetName":null,"backgroundSize":"COVER","backgroundRepeat":"NO_REPEAT","backgroundPosition":"CENTER_CENTER","lastModified":null,"__typename":"BackgroundImageProps"},"backgroundColor":"var(--lia-bs-body-color)","items":[{"id":"custom.widget.Beta_Footer","props":{"widgetVisibility":"signedInOrAnonymous","useTitle":true,"useBackground":false,"title":"","lazyLoad":false},"__typename":"QuiltComponent"},{"id":"custom.widget.Tag_Manager_Helper","props":{"widgetVisibility":"signedInOrAnonymous","useTitle":true,"useBackground":false,"title":"","lazyLoad":false},"__typename":"QuiltComponent"},{"id":"custom.widget.Consent_Blackbar","props":{"widgetVisibility":"signedInOrAnonymous","useTitle":true,"useBackground":false,"title":"","lazyLoad":false},"__typename":"QuiltComponent"}],"__typename":"QuiltWrapperSection"},"__typename":"QuiltWrapper","localOverride":false},"localOverride":false},"CachedAsset:component:custom.widget.GainsightShared-en-us-1751558010090":{"__typename":"CachedAsset","id":"component:custom.widget.GainsightShared-en-us-1751558010090","value":{"component":{"id":"custom.widget.GainsightShared","template":{"id":"GainsightShared","markupLanguage":"HTML","style":null,"texts":{},"defaults":{"config":{"applicablePages":[],"description":"Shared functions for Gainsight integration","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"components":[{"id":"custom.widget.GainsightShared","form":null,"config":null,"props":[],"__typename":"Component"}],"grouping":"TEXTHTML","__typename":"ComponentTemplate"},"properties":{"config":{"applicablePages":[],"description":"Shared functions for Gainsight integration","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"form":null,"__typename":"Component","localOverride":false},"globalCss":null,"form":null},"localOverride":false},"CachedAsset:component:custom.widget.Beta_MetaNav-en-us-1751558010090":{"__typename":"CachedAsset","id":"component:custom.widget.Beta_MetaNav-en-us-1751558010090","value":{"component":{"id":"custom.widget.Beta_MetaNav","template":{"id":"Beta_MetaNav","markupLanguage":"HANDLEBARS","style":null,"texts":{},"defaults":{"config":{"applicablePages":[],"description":"MetaNav menu at the top of every page.","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"components":[{"id":"custom.widget.Beta_MetaNav","form":null,"config":null,"props":[],"__typename":"Component"}],"grouping":"CUSTOM","__typename":"ComponentTemplate"},"properties":{"config":{"applicablePages":[],"description":"MetaNav menu at the top of every page.","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"form":null,"__typename":"Component","localOverride":false},"globalCss":null,"form":null},"localOverride":false},"CachedAsset:component:custom.widget.Beta_Footer-en-us-1751558010090":{"__typename":"CachedAsset","id":"component:custom.widget.Beta_Footer-en-us-1751558010090","value":{"component":{"id":"custom.widget.Beta_Footer","template":{"id":"Beta_Footer","markupLanguage":"HANDLEBARS","style":null,"texts":{},"defaults":{"config":{"applicablePages":[],"description":"DevCentral´s custom footer.","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"components":[{"id":"custom.widget.Beta_Footer","form":null,"config":null,"props":[],"__typename":"Component"}],"grouping":"CUSTOM","__typename":"ComponentTemplate"},"properties":{"config":{"applicablePages":[],"description":"DevCentral´s custom footer.","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"form":null,"__typename":"Component","localOverride":false},"globalCss":null,"form":null},"localOverride":false},"CachedAsset:component:custom.widget.Tag_Manager_Helper-en-us-1751558010090":{"__typename":"CachedAsset","id":"component:custom.widget.Tag_Manager_Helper-en-us-1751558010090","value":{"component":{"id":"custom.widget.Tag_Manager_Helper","template":{"id":"Tag_Manager_Helper","markupLanguage":"HANDLEBARS","style":null,"texts":{},"defaults":{"config":{"applicablePages":[],"description":"Helper widget to inject Tag Manager scripts into head element","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"components":[{"id":"custom.widget.Tag_Manager_Helper","form":null,"config":null,"props":[],"__typename":"Component"}],"grouping":"CUSTOM","__typename":"ComponentTemplate"},"properties":{"config":{"applicablePages":[],"description":"Helper widget to inject Tag Manager scripts into head element","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"form":null,"__typename":"Component","localOverride":false},"globalCss":null,"form":null},"localOverride":false},"CachedAsset:component:custom.widget.Consent_Blackbar-en-us-1751558010090":{"__typename":"CachedAsset","id":"component:custom.widget.Consent_Blackbar-en-us-1751558010090","value":{"component":{"id":"custom.widget.Consent_Blackbar","template":{"id":"Consent_Blackbar","markupLanguage":"HTML","style":null,"texts":{},"defaults":{"config":{"applicablePages":[],"description":"","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"components":[{"id":"custom.widget.Consent_Blackbar","form":null,"config":null,"props":[],"__typename":"Component"}],"grouping":"TEXTHTML","__typename":"ComponentTemplate"},"properties":{"config":{"applicablePages":[],"description":"","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"form":null,"__typename":"Component","localOverride":false},"globalCss":null,"form":null},"localOverride":false},"CachedAsset:text:en_US-components/community/Breadcrumb-1751557989989":{"__typename":"CachedAsset","id":"text:en_US-components/community/Breadcrumb-1751557989989","value":{"navLabel":"Breadcrumbs","dropdown":"Additional parent page navigation"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageBanner-1751557989989":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageBanner-1751557989989","value":{"messageMarkedAsSpam":"This post has been marked as spam","messageMarkedAsSpam@board:TKB":"This article has been marked as spam","messageMarkedAsSpam@board:BLOG":"This post has been marked as spam","messageMarkedAsSpam@board:FORUM":"This discussion has been marked as spam","messageMarkedAsSpam@board:OCCASION":"This event has been marked as spam","messageMarkedAsSpam@board:IDEA":"This idea has been marked as spam","manageSpam":"Manage Spam","messageMarkedAsAbuse":"This post has been marked as abuse","messageMarkedAsAbuse@board:TKB":"This article has been marked as abuse","messageMarkedAsAbuse@board:BLOG":"This post has been marked as abuse","messageMarkedAsAbuse@board:FORUM":"This discussion has been marked as abuse","messageMarkedAsAbuse@board:OCCASION":"This event has been marked as abuse","messageMarkedAsAbuse@board:IDEA":"This idea has been marked as abuse","preModCommentAuthorText":"This comment will be published as soon as it is approved","preModCommentModeratorText":"This comment is awaiting moderation","messageMarkedAsOther":"This post has been rejected due to other reasons","messageMarkedAsOther@board:TKB":"This article has been rejected due to other reasons","messageMarkedAsOther@board:BLOG":"This post has been rejected due to other reasons","messageMarkedAsOther@board:FORUM":"This discussion has been rejected due to other reasons","messageMarkedAsOther@board:OCCASION":"This event has been rejected due to other reasons","messageMarkedAsOther@board:IDEA":"This idea has been rejected due to other reasons","messageArchived":"This post was archived on {date}","relatedUrl":"View Related Content","relatedContentText":"Showing related content","archivedContentLink":"View Archived Content"},"localOverride":false},"CachedAsset:text:en_US-components/tkbs/TkbArticleWidget-1751557989989":{"__typename":"CachedAsset","id":"text:en_US-components/tkbs/TkbArticleWidget-1751557989989","value":{},"localOverride":false},"Category:category:Forums":{"__typename":"Category","id":"category:Forums","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Forum:board:TechnicalForum":{"__typename":"Forum","id":"board:TechnicalForum","forumPolicies":{"__typename":"ForumPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"boardPolicies":{"__typename":"BoardPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Forum:board:WaterCooler":{"__typename":"Forum","id":"board:WaterCooler","forumPolicies":{"__typename":"ForumPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"boardPolicies":{"__typename":"BoardPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Tkb:board:DevCentralNews":{"__typename":"Tkb","id":"board:DevCentralNews","tkbPolicies":{"__typename":"TkbPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"boardPolicies":{"__typename":"BoardPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:GroupsCategory":{"__typename":"Category","id":"category:GroupsCategory","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:F5-Groups":{"__typename":"Category","id":"category:F5-Groups","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:CommunityGroups":{"__typename":"Category","id":"category:CommunityGroups","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Occasion:board:Events":{"__typename":"Occasion","id":"board:Events","boardPolicies":{"__typename":"BoardPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"occasionPolicies":{"__typename":"OccasionPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Idea:board:Suggestions":{"__typename":"Idea","id":"board:Suggestions","boardPolicies":{"__typename":"BoardPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"ideaPolicies":{"__typename":"IdeaPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:CrowdSRC":{"__typename":"Category","id":"category:CrowdSRC","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Tkb:board:codeshare":{"__typename":"Tkb","id":"board:codeshare","tkbPolicies":{"__typename":"TkbPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"boardPolicies":{"__typename":"BoardPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Tkb:board:communityarticles":{"__typename":"Tkb","id":"board:communityarticles","tkbPolicies":{"__typename":"TkbPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"boardPolicies":{"__typename":"BoardPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Tkb:board:security-insights":{"__typename":"Tkb","id":"board:security-insights","tkbPolicies":{"__typename":"TkbPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"boardPolicies":{"__typename":"BoardPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Tkb:board:article-series":{"__typename":"Tkb","id":"board:article-series","tkbPolicies":{"__typename":"TkbPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"boardPolicies":{"__typename":"BoardPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"TkbTopicMessage:message:283240":{"__typename":"TkbTopicMessage","id":"message:283240","uid":283240,"subject":"Lightboard Lessons: What is HTTP?","board":{"__ref":"Tkb:board:TechnicalArticles"}},"Guide:guide:9":{"__typename":"Guide","id":"guide:9","lastArticle":{"__ref":"TkbTopicMessage:message:283240"}},"TkbTopicMessage:message:285178":{"__typename":"TkbTopicMessage","id":"message:285178","uid":285178,"subject":"Parsing complex BIG-IP json structures made easy with Ansible filters like json_query","board":{"__ref":"Tkb:board:TechnicalArticles"}},"Guide:guide:11":{"__typename":"Guide","id":"guide:11","firstArticle":{"__ref":"TkbTopicMessage:message:285178"}},"Guide:guide:10":{"__typename":"Guide","id":"guide:10","title":"iControl","node":{"__ref":"Tkb:board:article-series"},"previousGuide":{"__ref":"Guide:guide:9"},"nextGuide":{"__ref":"Guide:guide:11"}},"Chapter:chapter:99":{"__typename":"Chapter","id":"chapter:99","guide":{"__ref":"Guide:guide:10"}},"TkbTopicMessage:message:290306":{"__typename":"TkbTopicMessage","id":"message:290306","uid":290306,"subject":"Getting Started with iControl: Interface Taxonomy & Language Libraries","board":{"__ref":"Tkb:board:TechnicalArticles"}},"TkbTopicMessage:message:289161":{"__typename":"TkbTopicMessage","id":"message:289161","uid":289161,"subject":"Getting Started with iControl: Working with Statistics","board":{"__ref":"Tkb:board:TechnicalArticles"}},"CachedAsset:text:en_US-components/community/Navbar-1751557989989":{"__typename":"CachedAsset","id":"text:en_US-components/community/Navbar-1751557989989","value":{"community":"Community Home","inbox":"Inbox","manageContent":"Manage Content","tos":"Terms of Service","forgotPassword":"Forgot Password","themeEditor":"Theme Editor","edit":"Edit Navigation Bar","skipContent":"Skip to content","migrated-link-9":"Groups","migrated-link-7":"Technical Articles","migrated-link-8":"DevCentral News","migrated-link-1":"Technical Forum","migrated-link-10":"Community Groups","migrated-link-2":"Water Cooler","migrated-link-11":"F5 Groups","Common-external-link":"How Do I...?","migrated-link-0":"Forums","article-series":"Article Series","migrated-link-5":"Community Articles","migrated-link-6":"Articles","security-insights":"Security Insights","migrated-link-3":"CrowdSRC","migrated-link-4":"CodeShare","migrated-link-12":"Events","migrated-link-13":"Suggestions"},"localOverride":false},"CachedAsset:text:en_US-components/community/NavbarHamburgerDropdown-1751557989989":{"__typename":"CachedAsset","id":"text:en_US-components/community/NavbarHamburgerDropdown-1751557989989","value":{"hamburgerLabel":"Side Menu"},"localOverride":false},"CachedAsset:text:en_US-components/community/BrandLogo-1751557989989":{"__typename":"CachedAsset","id":"text:en_US-components/community/BrandLogo-1751557989989","value":{"logoAlt":"Khoros","themeLogoAlt":"Brand Logo"},"localOverride":false},"CachedAsset:text:en_US-components/community/NavbarTextLinks-1751557989989":{"__typename":"CachedAsset","id":"text:en_US-components/community/NavbarTextLinks-1751557989989","value":{"more":"More"},"localOverride":false},"CachedAsset:text:en_US-components/authentication/AuthenticationLink-1751557989989":{"__typename":"CachedAsset","id":"text:en_US-components/authentication/AuthenticationLink-1751557989989","value":{"title.login":"Sign In","title.registration":"Register","title.forgotPassword":"Forgot Password","title.multiAuthLogin":"Sign In"},"localOverride":false},"CachedAsset:text:en_US-components/nodes/NodeLink-1751557989989":{"__typename":"CachedAsset","id":"text:en_US-components/nodes/NodeLink-1751557989989","value":{"place":"Place {name}"},"localOverride":false},"QueryVariables:TopicReplyList:message:290235:1":{"__typename":"QueryVariables","id":"TopicReplyList:message:290235:1","value":{"id":"message:290235","first":10,"sorts":{"postTime":{"direction":"ASC"}},"repliesFirst":3,"repliesFirstDepthThree":1,"repliesSorts":{"postTime":{"direction":"ASC"}},"useAvatar":true,"useAuthorLogin":true,"useAuthorRank":true,"useBody":true,"useKudosCount":true,"useTimeToRead":false,"useMedia":false,"useReadOnlyIcon":false,"useRepliesCount":true,"useSearchSnippet":false,"useAcceptedSolutionButton":false,"useSolvedBadge":false,"useAttachments":false,"attachmentsFirst":5,"useTags":true,"useNodeAncestors":false,"useUserHoverCard":false,"useNodeHoverCard":false,"useModerationStatus":true,"usePreviewSubjectModal":false,"useMessageStatus":true}},"ROOT_MUTATION":{"__typename":"Mutation"},"CachedAsset:text:en_US-shared/client/components/common/QueryHandler-1751557989989":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/QueryHandler-1751557989989","value":{"title":"Query Handler"},"localOverride":false},"CachedAsset:text:en_US-components/community/NavbarDropdownToggle-1751557989989":{"__typename":"CachedAsset","id":"text:en_US-components/community/NavbarDropdownToggle-1751557989989","value":{"ariaLabelClosed":"Press the down arrow to open the menu"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageView/MessageViewStandard-1751557989989":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageView/MessageViewStandard-1751557989989","value":{"anonymous":"Anonymous","author":"{messageAuthorLogin}","authorBy":"{messageAuthorLogin}","board":"{messageBoardTitle}","replyToUser":" to {parentAuthor}","showMoreReplies":"Show More","replyText":"Reply","repliesText":"Replies","markedAsSolved":"Marked as Solution","messageStatus":"Status: ","statusChanged":"Status changed: {previousStatus} to {currentStatus}","statusAdded":"Status added: {status}","statusRemoved":"Status removed: {status}","labelExpand":"expand replies","labelCollapse":"collapse replies","unhelpfulReason.reason1":"Content is outdated","unhelpfulReason.reason2":"Article is missing information","unhelpfulReason.reason3":"Content is for a different Product","unhelpfulReason.reason4":"Doesn't match what I was searching for"},"localOverride":false},"CachedAsset:text:en_US-components/messages/ThreadedReplyList-1751557989989":{"__typename":"CachedAsset","id":"text:en_US-components/messages/ThreadedReplyList-1751557989989","value":{"title":"{count, plural, one{# Reply} other{# Replies}}","title@board:BLOG":"{count, plural, one{# Comment} other{# Comments}}","title@board:TKB":"{count, plural, one{# Comment} other{# Comments}}","title@board:IDEA":"{count, plural, one{# Comment} other{# Comments}}","title@board:OCCASION":"{count, plural, one{# Comment} other{# Comments}}","noRepliesTitle":"No Replies","noRepliesTitle@board:BLOG":"No Comments","noRepliesTitle@board:TKB":"No Comments","noRepliesTitle@board:IDEA":"No Comments","noRepliesTitle@board:OCCASION":"No Comments","noRepliesDescription":"Be the first to reply","noRepliesDescription@board:BLOG":"Be the first to comment","noRepliesDescription@board:TKB":"Be the first to comment","noRepliesDescription@board:IDEA":"Be the first to comment","noRepliesDescription@board:OCCASION":"Be the first to comment","messageReadOnlyAlert:BLOG":"Comments have been turned off for this post","messageReadOnlyAlert:TKB":"Comments have been turned off for this article","messageReadOnlyAlert:IDEA":"Comments have been turned off for this idea","messageReadOnlyAlert:FORUM":"Replies have been turned off for this discussion","messageReadOnlyAlert:OCCASION":"Comments have been turned off for this event"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageReplyCallToAction-1751557989989":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageReplyCallToAction-1751557989989","value":{"leaveReply":"Leave a reply...","leaveReply@board:BLOG@message:root":"Leave a comment...","leaveReply@board:TKB@message:root":"Leave a comment...","leaveReply@board:IDEA@message:root":"Leave a comment...","leaveReply@board:OCCASION@message:root":"Leave a comment...","repliesTurnedOff.FORUM":"Replies are turned off for this topic","repliesTurnedOff.BLOG":"Comments are turned off for this topic","repliesTurnedOff.TKB":"Comments are turned off for this topic","repliesTurnedOff.IDEA":"Comments are turned off for this topic","repliesTurnedOff.OCCASION":"Comments are turned off for this topic","infoText":"Stop poking me!"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageSubject-1751557989989":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageSubject-1751557989989","value":{"noSubject":"(no subject)"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageBody-1751557989989":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageBody-1751557989989","value":{"showMessageBody":"Show More","mentionsErrorTitle":"{mentionsType, select, board {Board} user {User} message {Message} other {}} No Longer Available","mentionsErrorMessage":"The {mentionsType} you are trying to view has been removed from the community.","videoProcessing":"Video is being processed. Please try again in a few minutes.","bannerTitle":"Video provider requires cookies to play the video. Accept to continue or {url} it directly on the provider's site.","buttonTitle":"Accept","urlText":"watch"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageCustomFields-1751557989989":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageCustomFields-1751557989989","value":{"CustomField.default.label":"Value of {name}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageRevision-1751557989989":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageRevision-1751557989989","value":{"lastUpdatedDatePublished":"{publishCount, plural, one{Published} other{Updated}} {date}","lastUpdatedDateDraft":"Created {date}","version":"Version {major}.{minor}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageReplyButton-1751557989989":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageReplyButton-1751557989989","value":{"repliesCount":"{count}","title":"Reply","title@board:BLOG@message:root":"Comment","title@board:TKB@message:root":"Comment","title@board:IDEA@message:root":"Comment","title@board:OCCASION@message:root":"Comment"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageAuthorBio-1751557989989":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageAuthorBio-1751557989989","value":{"sendMessage":"Send Message","actionMessage":"Follow this blog board to get notified when there's new activity","coAuthor":"CO-PUBLISHER","contributor":"CONTRIBUTOR","userProfile":"View Profile","iconlink":"Go to {name} {type}"},"localOverride":false},"CachedAsset:text:en_US-components/guides/GuideBottomNavigation-1751557989989":{"__typename":"CachedAsset","id":"text:en_US-components/guides/GuideBottomNavigation-1751557989989","value":{"nav.label":"Previous/Next Page","nav.previous":"Previous","nav.next":"Next"},"localOverride":false},"CachedAsset:text:en_US-components/customComponent/CustomComponent-1751557989989":{"__typename":"CachedAsset","id":"text:en_US-components/customComponent/CustomComponent-1751557989989","value":{"errorMessage":"Error rendering component id: {customComponentId}","bannerTitle":"Video provider requires cookies to play the video. Accept to continue or {url} it directly on the provider's site.","buttonTitle":"Accept","urlText":"watch"},"localOverride":false},"CachedAsset:text:en_US-components/tags/TagView/TagViewChip-1751557989989":{"__typename":"CachedAsset","id":"text:en_US-components/tags/TagView/TagViewChip-1751557989989","value":{"tagLabelName":"Tag name {tagName}"},"localOverride":false},"CachedAsset:text:en_US-components/users/UserLink-1751557989989":{"__typename":"CachedAsset","id":"text:en_US-components/users/UserLink-1751557989989","value":{"authorName":"View Profile: {author}","anonymous":"Anonymous"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/users/UserRank-1751557989989":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/users/UserRank-1751557989989","value":{"rankName":"{rankName}","userRank":"Author rank {rankName}"},"localOverride":false},"CachedAsset:text:en_US-components/users/UserRegistrationDate-1751557989989":{"__typename":"CachedAsset","id":"text:en_US-components/users/UserRegistrationDate-1751557989989","value":{"noPrefix":"{date}","withPrefix":"Joined {date}"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/users/UserAvatar-1751557989989":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/users/UserAvatar-1751557989989","value":{"altText":"{login}'s avatar","altTextGeneric":"User's avatar"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/ranks/UserRankLabel-1751557989989":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/ranks/UserRankLabel-1751557989989","value":{"altTitle":"Icon for {rankName} rank"},"localOverride":false}}}},"page":"/kbs/TkbMessagePage/TkbMessagePage","query":{"boardId":"technicalarticles","messageSubject":"getting-started-with-icontrol-working-with-configuration-objects","messageId":"290235"},"buildId":"3XH0qYWYCnEYycuN5W4S8","runtimeConfig":{"buildInformationVisible":false,"logLevelApp":"info","logLevelMetrics":"info","surveysEnabled":true,"openTelemetry":{"clientEnabled":false,"configName":"f5","serviceVersion":"25.4.0","universe":"prod","collector":"http://localhost:4318","logLevel":"error","routeChangeAllowedTime":"5000","headers":"","enableDiagnostic":"false","maxAttributeValueLength":"4095"},"apolloDevToolsEnabled":false,"quiltLazyLoadThreshold":"3"},"isFallback":false,"isExperimentalCompile":false,"dynamicIds":["components_customComponent_CustomComponent","components_community_Navbar_NavbarWidget","components_community_Breadcrumb_BreadcrumbWidget","components_tkbs_TkbArticleWidget","components_messages_MessageView_MessageViewStandard","components_messages_ThreadedReplyList","components_customComponent_CustomComponentContent_TemplateContent","components_customComponent_CustomComponentContent_HtmlContent","shared_client_components_common_List_UnwrappedList","components_tags_TagView","components_tags_TagView_TagViewChip","components_customComponent_CustomComponentContent_CustomComponentScripts"],"appGip":true,"scriptLoader":[]}