ruby

14 Topics
"}},"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\":[],\"name\":\"TagPage\",\"props\":{},\"url\":\"https://community.f5.com/tag/ruby\"}}})":{"__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\":[],\"name\":\"TagPage\",\"props\":{},\"url\":\"https://community.f5.com/tag/ruby\"}}})":{"__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\":[],\"name\":\"TagPage\",\"props\":{},\"url\":\"https://community.f5.com/tag/ruby\"}}})":{"__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\":\"1745595728815\",\"locale\":\"en-US\",\"namespaces\":[\"components/community/NavbarDropdownToggle\"]})":[{"__ref":"CachedAsset:text:en_US-components/community/NavbarDropdownToggle-1745595728815"}],"cachedText({\"lastModified\":\"1745595728815\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageListTabs\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageListTabs-1745595728815"}],"cachedText({\"lastModified\":\"1745595728815\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageView/MessageViewInline\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageView/MessageViewInline-1745595728815"}],"cachedText({\"lastModified\":\"1745595728815\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/common/Pager/PagerLoadMore\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/common/Pager/PagerLoadMore-1745595728815"}],"cachedText({\"lastModified\":\"1745595728815\",\"locale\":\"en-US\",\"namespaces\":[\"components/customComponent/CustomComponent\"]})":[{"__ref":"CachedAsset:text:en_US-components/customComponent/CustomComponent-1745595728815"}],"cachedText({\"lastModified\":\"1745595728815\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/common/OverflowNav\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/common/OverflowNav-1745595728815"}],"cachedText({\"lastModified\":\"1745595728815\",\"locale\":\"en-US\",\"namespaces\":[\"components/users/UserLink\"]})":[{"__ref":"CachedAsset:text:en_US-components/users/UserLink-1745595728815"}],"cachedText({\"lastModified\":\"1745595728815\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageSubject\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageSubject-1745595728815"}],"cachedText({\"lastModified\":\"1745595728815\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageBody\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageBody-1745595728815"}],"cachedText({\"lastModified\":\"1745595728815\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageTime\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageTime-1745595728815"}],"cachedText({\"lastModified\":\"1745595728815\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/nodes/NodeIcon\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/nodes/NodeIcon-1745595728815"}],"cachedText({\"lastModified\":\"1745595728815\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageUnreadCount\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageUnreadCount-1745595728815"}],"cachedText({\"lastModified\":\"1745595728815\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageViewCount\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageViewCount-1745595728815"}],"cachedText({\"lastModified\":\"1745595728815\",\"locale\":\"en-US\",\"namespaces\":[\"components/kudos/KudosCount\"]})":[{"__ref":"CachedAsset:text:en_US-components/kudos/KudosCount-1745595728815"}],"cachedText({\"lastModified\":\"1745595728815\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageRepliesCount\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageRepliesCount-1745595728815"}],"cachedText({\"lastModified\":\"1745595728815\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/users/UserAvatar\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/users/UserAvatar-1745595728815"}]},"Theme:customTheme1":{"__typename":"Theme","id":"customTheme1"},"User:user:-1":{"__typename":"User","id":"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","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-1745595724052":{"__typename":"CachedAsset","id":"pages-1745595724052","value":[{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"BlogViewAllPostsPage","type":"BLOG","urlPath":"/category/:categoryId/blog/:boardId/all-posts/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"CasePortalPage","type":"CASE_PORTAL","urlPath":"/caseportal","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"CreateGroupHubPage","type":"GROUP_HUB","urlPath":"/groups/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"CaseViewPage","type":"CASE_DETAILS","urlPath":"/case/:caseId/:caseNumber","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"InboxPage","type":"COMMUNITY","urlPath":"/inbox","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"HelpFAQPage","type":"COMMUNITY","urlPath":"/help","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"IdeaMessagePage","type":"IDEA_POST","urlPath":"/idea/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"IdeaViewAllIdeasPage","type":"IDEA","urlPath":"/category/:categoryId/ideas/:boardId/all-ideas/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"LoginPage","type":"USER","urlPath":"/signin","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"BlogPostPage","type":"BLOG","urlPath":"/category/:categoryId/blogs/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739501733000,"localOverride":null,"page":{"id":"Test","type":"CUSTOM","urlPath":"/custom-test-2","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"ThemeEditorPage","type":"COMMUNITY","urlPath":"/designer/themes","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"TkbViewAllArticlesPage","type":"TKB","urlPath":"/category/:categoryId/kb/:boardId/all-articles/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"OccasionEditPage","type":"EVENT","urlPath":"/event/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"OAuthAuthorizationAllowPage","type":"USER","urlPath":"/auth/authorize/allow","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"PageEditorPage","type":"COMMUNITY","urlPath":"/designer/pages","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"PostPage","type":"COMMUNITY","urlPath":"/category/:categoryId/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"ForumBoardPage","type":"FORUM","urlPath":"/category/:categoryId/discussions/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"TkbBoardPage","type":"TKB","urlPath":"/category/:categoryId/kb/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"EventPostPage","type":"EVENT","urlPath":"/category/:categoryId/events/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"UserBadgesPage","type":"COMMUNITY","urlPath":"/users/:login/:userId/badges","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"GroupHubMembershipAction","type":"GROUP_HUB","urlPath":"/membership/join/:nodeId/:membershipType","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"MaintenancePage","type":"COMMUNITY","urlPath":"/maintenance","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"IdeaReplyPage","type":"IDEA_REPLY","urlPath":"/idea/:boardId/:messageSubject/:messageId/comments/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"UserSettingsPage","type":"USER","urlPath":"/mysettings/:userSettingsTab","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"GroupHubsPage","type":"GROUP_HUB","urlPath":"/groups","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"ForumPostPage","type":"FORUM","urlPath":"/category/:categoryId/discussions/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"OccasionRsvpActionPage","type":"OCCASION","urlPath":"/event/:boardId/:messageSubject/:messageId/rsvp/:responseType","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"VerifyUserEmailPage","type":"USER","urlPath":"/verifyemail/:userId/:verifyEmailToken","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"AllOccasionsPage","type":"OCCASION","urlPath":"/category/:categoryId/events/:boardId/all-events/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"EventBoardPage","type":"EVENT","urlPath":"/category/:categoryId/events/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"TkbReplyPage","type":"TKB_REPLY","urlPath":"/kb/:boardId/:messageSubject/:messageId/comments/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"IdeaBoardPage","type":"IDEA","urlPath":"/category/:categoryId/ideas/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"CommunityGuideLinesPage","type":"COMMUNITY","urlPath":"/communityguidelines","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"CaseCreatePage","type":"SALESFORCE_CASE_CREATION","urlPath":"/caseportal/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"TkbEditPage","type":"TKB","urlPath":"/kb/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"ForgotPasswordPage","type":"USER","urlPath":"/forgotpassword","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"IdeaEditPage","type":"IDEA","urlPath":"/idea/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"TagPage","type":"COMMUNITY","urlPath":"/tag/:tagName","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"BlogBoardPage","type":"BLOG","urlPath":"/category/:categoryId/blog/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"OccasionMessagePage","type":"OCCASION_TOPIC","urlPath":"/event/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"ManageContentPage","type":"COMMUNITY","urlPath":"/managecontent","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"ClosedMembershipNodeNonMembersPage","type":"GROUP_HUB","urlPath":"/closedgroup/:groupHubId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"CommunityPage","type":"COMMUNITY","urlPath":"/","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"ForumMessagePage","type":"FORUM_TOPIC","urlPath":"/discussions/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"IdeaPostPage","type":"IDEA","urlPath":"/category/:categoryId/ideas/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"BlogMessagePage","type":"BLOG_ARTICLE","urlPath":"/blog/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"RegistrationPage","type":"USER","urlPath":"/register","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"EditGroupHubPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"ForumEditPage","type":"FORUM","urlPath":"/discussions/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"ResetPasswordPage","type":"USER","urlPath":"/resetpassword/:userId/:resetPasswordToken","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"TkbMessagePage","type":"TKB_ARTICLE","urlPath":"/kb/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"BlogEditPage","type":"BLOG","urlPath":"/blog/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"ManageUsersPage","type":"USER","urlPath":"/users/manage/:tab?/:manageUsersTab?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"ForumReplyPage","type":"FORUM_REPLY","urlPath":"/discussions/:boardId/:messageSubject/:messageId/replies/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"PrivacyPolicyPage","type":"COMMUNITY","urlPath":"/privacypolicy","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"NotificationPage","type":"COMMUNITY","urlPath":"/notifications","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"UserPage","type":"USER","urlPath":"/users/:login/:userId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"HealthCheckPage","type":"COMMUNITY","urlPath":"/health","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"OccasionReplyPage","type":"OCCASION_REPLY","urlPath":"/event/:boardId/:messageSubject/:messageId/comments/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"ManageMembersPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId/manage/:tab?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"SearchResultsPage","type":"COMMUNITY","urlPath":"/search","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"BlogReplyPage","type":"BLOG_REPLY","urlPath":"/blog/:boardId/:messageSubject/:messageId/replies/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"GroupHubPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"TermsOfServicePage","type":"COMMUNITY","urlPath":"/termsofservice","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"CategoryPage","type":"CATEGORY","urlPath":"/category/:categoryId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"ForumViewAllTopicsPage","type":"FORUM","urlPath":"/category/:categoryId/discussions/:boardId/all-topics/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"TkbPostPage","type":"TKB","urlPath":"/category/:categoryId/kbs/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"localOverride":null,"page":{"id":"GroupHubPostPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745595724052,"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},"CachedAsset:theme:customTheme1-1745595709981":{"__typename":"CachedAsset","id":"theme:customTheme1-1745595709981","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":"JimmyPackets-512-1702592938213.png","imageLastModified":"1702592945815","__typename":"ThemeAsset"},"customerLogo":{"imageAssetName":"f5_logo_fix-1704824537976.svg","imageLastModified":"1704824540697","__typename":"ThemeAsset"},"maximumWidthOfPageContent":"1600px","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":"400","textTransform":"NONE","disabledOpacity":0.5,"primaryTextColor":"var(--lia-bs-white)","primaryTextHoverColor":"var(--lia-bs-white)","primaryTextActiveColor":"var(--lia-bs-white)","primaryBgColor":"var(--lia-bs-primary)","primaryBgHoverColor":"hsl(var(--lia-bs-primary-h), var(--lia-bs-primary-s), calc(var(--lia-bs-primary-l) * 0.85))","primaryBgActiveColor":"hsl(var(--lia-bs-primary-h), var(--lia-bs-primary-s), calc(var(--lia-bs-primary-l) * 0.7))","primaryBorder":"1px solid transparent","primaryBorderHover":"1px solid transparent","primaryBorderActive":"1px solid transparent","primaryBorderFocus":"1px solid var(--lia-bs-white)","primaryBoxShadowFocus":"0 0 0 1px var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","secondaryTextColor":"var(--lia-bs-gray-900)","secondaryTextHoverColor":"hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.95))","secondaryTextActiveColor":"hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.9))","secondaryBgColor":"var(--lia-bs-gray-400)","secondaryBgHoverColor":"hsl(var(--lia-bs-gray-400-h), var(--lia-bs-gray-400-s), calc(var(--lia-bs-gray-400-l) * 0.96))","secondaryBgActiveColor":"hsl(var(--lia-bs-gray-400-h), var(--lia-bs-gray-400-s), calc(var(--lia-bs-gray-400-l) * 0.92))","secondaryBorder":"1px solid transparent","secondaryBorderHover":"1px solid transparent","secondaryBorderActive":"1px solid transparent","secondaryBorderFocus":"1px solid transparent","secondaryBoxShadowFocus":"0 0 0 1px var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","tertiaryTextColor":"var(--lia-bs-gray-900)","tertiaryTextHoverColor":"hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.95))","tertiaryTextActiveColor":"hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.9))","tertiaryBgColor":"transparent","tertiaryBgHoverColor":"transparent","tertiaryBgActiveColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.04)","tertiaryBorder":"1px solid transparent","tertiaryBorderHover":"1px solid hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.08)","tertiaryBorderActive":"1px solid transparent","tertiaryBorderFocus":"1px solid transparent","tertiaryBoxShadowFocus":"0 0 0 1px var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 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 var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 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":"NONE","sideContent":"NONE","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.08)","sm":"0 2px 4px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.06)","md":"0 5px 15px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.15)","lg":"0 10px 30px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.15)","__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":"400","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":"#0C5C8D","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"],"__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":"Inter","fontStyle":"NORMAL","fontWeight":"600","h1FontSize":"30px","h2FontSize":"25px","h3FontSize":"20px","h4FontSize":"18px","h5FontSize":"16px","h6FontSize":"16px","lineHeight":"1.2","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","__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":"Atkinson Hyperlegible","fontStyleBase":"NORMAL","fontWeightBase":"400","fontWeightLight":"300","fontWeightNormal":"400","fontWeightMd":"500","fontWeightBold":"700","letterSpacingSm":"normal","letterSpacingXs":"normal","lineHeightBase":"1.3","fontSizeBase":"15px","fontSizeXxs":"11px","fontSizeXs":"12px","fontSizeSm":"13px","fontSizeLg":"20px","fontSizeXl":"24px","smallFontSize":"14px","customFonts":[],"__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-1745595728815":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/Loading/LoadingDot-1745595728815","value":{"title":"Loading..."},"localOverride":false},"CachedAsset:text:en_US-components/common/EmailVerification-1745595728815":{"__typename":"CachedAsset","id":"text:en_US-components/common/EmailVerification-1745595728815","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/tags/TagPage-1745595728815":{"__typename":"CachedAsset","id":"text:en_US-pages/tags/TagPage-1745595728815","value":{"tagPageTitle":"Tag:\"{tagName}\" | {communityTitle}","tagPageForNodeTitle":"Tag:\"{tagName}\" in \"{title}\" | {communityTitle}","name":"Tags Page","tag":"Tag: {tagName}"},"localOverride":false},"AssociatedImage:{\"url\":\"https://community.f5.com/t5/s/zihoc95639/images/bi04Ny0xOTQ1NWk4ODNCOUNEMkFDNDZCQjI0\"}":{"__typename":"AssociatedImage","url":"https://community.f5.com/t5/s/zihoc95639/images/bi04Ny0xOTQ1NWk4ODNCOUNEMkFDNDZCQjI0","mimeType":"image/png"},"Category:category:CrowdSRC":{"__typename":"Category","id":"category:CrowdSRC","entityType":"CATEGORY","displayId":"CrowdSRC","nodeType":"category","depth":1,"title":"CrowdSRC","shortTitle":"CrowdSRC","parent":{"__ref":"Category:category:top"},"categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:top":{"__typename":"Category","id":"category:top","displayId":"top","nodeType":"category","depth":0,"title":"Top"},"Tkb:board:codeshare":{"__typename":"Tkb","id":"board:codeshare","entityType":"TKB","displayId":"codeshare","nodeType":"board","depth":2,"conversationStyle":"TKB","title":"CodeShare","description":"Have some code. Share some code.","avatar":{"__ref":"AssociatedImage:{\"url\":\"https://community.f5.com/t5/s/zihoc95639/images/bi04Ny0xOTQ1NWk4ODNCOUNEMkFDNDZCQjI0\"}"},"profileSettings":{"__typename":"ProfileSettings","language":null},"parent":{"__ref":"Category:category:CrowdSRC"},"ancestors":{"__typename":"CoreNodeConnection","edges":[{"__typename":"CoreNodeEdge","node":{"__ref":"Community:community:zihoc95639"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:CrowdSRC"}}]},"userContext":{"__typename":"NodeUserContext","canAddAttachments":false,"canUpdateNode":false,"canPostMessages":false,"isSubscribed":false},"boardPolicies":{"__typename":"BoardPolicies","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}},"theme":{"__ref":"Theme:customTheme1"},"tkbPolicies":{"__typename":"TkbPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"shortTitle":"CodeShare","tagPolicies":{"__typename":"TagPolicies","canSubscribeTagOnNode":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.labels.action.corenode.subscribe_labels.allow.accessDenied","key":"error.lithium.policies.labels.action.corenode.subscribe_labels.allow.accessDenied","args":[]}},"canManageTagDashboard":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.labels.action.corenode.admin_labels.allow.accessDenied","key":"error.lithium.policies.labels.action.corenode.admin_labels.allow.accessDenied","args":[]}}}},"CachedAsset:quilt:f5.prod:pages/tags/TagPage:board:codeshare-1745595726654":{"__typename":"CachedAsset","id":"quilt:f5.prod:pages/tags/TagPage:board:codeshare-1745595726654","value":{"id":"TagPage","container":{"id":"Common","headerProps":{"removeComponents":["community.widget.bannerWidget"],"__typename":"QuiltContainerSectionProps"},"items":[{"id":"tag-header-widget","layout":"ONE_COLUMN","bgColor":"var(--lia-bs-white)","showBorder":"BOTTOM","sectionEditLevel":"LOCKED","columnMap":{"main":[{"id":"tags.widget.TagsHeaderWidget","__typename":"QuiltComponent"}],"__typename":"OneSectionColumns"},"__typename":"OneColumnQuiltSection"},{"id":"messages-list-for-tag-widget","layout":"ONE_COLUMN","columnMap":{"main":[{"id":"messages.widget.messageListForNodeByRecentActivityWidget","props":{"viewVariant":{"type":"inline","props":{"useUnreadCount":true,"useViewCount":true,"useAuthorLogin":true,"clampBodyLines":3,"useAvatar":true,"useBoardIcon":false,"useKudosCount":true,"usePreviewMedia":true,"useTags":false,"useNode":true,"useNodeLink":true,"useTextBody":true,"truncateBodyLength":-1,"useBody":true,"useRepliesCount":true,"useSolvedBadge":true,"timeStampType":"conversation.lastPostingActivityTime","useMessageTimeLink":true,"clampSubjectLines":2}},"panelType":"divider","useTitle":false,"hideIfEmpty":false,"pagerVariant":{"type":"loadMore"},"style":"list","showTabs":true,"tabItemMap":{"default":{"mostRecent":true,"mostRecentUserContent":false,"newest":false},"additional":{"mostKudoed":true,"mostViewed":true,"mostReplies":false,"noReplies":false,"noSolutions":false,"solutions":false}}},"__typename":"QuiltComponent"}],"__typename":"OneSectionColumns"},"__typename":"OneColumnQuiltSection"}],"__typename":"QuiltContainer"},"__typename":"Quilt"},"localOverride":false},"CachedAsset:text:en_US-components/common/ActionFeedback-1745595728815":{"__typename":"CachedAsset","id":"text:en_US-components/common/ActionFeedback-1745595728815","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:1745595708603":{"__typename":"CachedAsset","id":"quiltWrapper:f5.prod:Common:1745595708603","value":{"id":"Common","header":{"backgroundImageProps":{"assetName":"header.jpg","backgroundSize":"COVER","backgroundRepeat":"NO_REPEAT","backgroundPosition":"LEFT_CENTER","lastModified":"1702932449000","__typename":"BackgroundImageProps"},"backgroundColor":"transparent","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,"style":{"boxShadow":"var(--lia-bs-box-shadow-sm)","linkFontWeight":"700","controllerHighlightColor":"hsla(30, 100%, 50%)","dropdownDividerMarginBottom":"10px","hamburgerBorderHover":"none","linkFontSize":"15px","linkBoxShadowHover":"none","backgroundOpacity":0.4,"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":"0","hamburgerBorder":"none","dropdownPaddingX":"10px","brandMarginRightSm":"10px","linkBoxShadow":"none","linkJustifyContent":"center","linkColor":"var(--lia-bs-primary)","collapseMenuDividerBg":"var(--lia-nav-link-color)","dropdownPaddingTop":"10px","controllerHighlightTextColor":"var(--lia-yiq-dark)","background":{"imageAssetName":"","color":"var(--lia-bs-white)","size":"COVER","repeat":"NO_REPEAT","position":"CENTER_CENTER","imageLastModified":""},"linkBorderRadius":"var(--lia-bs-border-radius-sm)","linkHoverColor":"var(--lia-bs-primary)","position":"FIXED","linkBorder":"none","linkTextBorderBottomHover":"2px solid #0C5C8D","brandMarginRight":"30px","hamburgerHoverColor":"var(--lia-nav-controller-icon-color)","linkBorderHover":"none","collapseMenuMarginLeft":"20px","linkFontStyle":"NORMAL","linkPaddingX":"10px","paddingTop":"10px","linkPaddingY":"5px","linkTextTransform":"NONE","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)","linkDropdownPaddingX":"var(--lia-nav-link-px)","linkBgColor":"transparent","linkDropdownPaddingY":"9px","controllerIconColor":"#0C5C8D","dropdownDividerMarginTop":"10px","linkGap":"10px","controllerIconHoverColor":"#0C5C8D"},"links":{"sideLinks":[],"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},"__typename":"QuiltComponent"},{"id":"community.widget.bannerWidget","props":{"backgroundColor":"transparent","visualEffects":{"showBottomBorder":false},"backgroundImageProps":{"backgroundSize":"COVER","backgroundPosition":"CENTER_CENTER","backgroundRepeat":"NO_REPEAT"},"fontColor":"#222222"},"__typename":"QuiltComponent"},{"id":"community.widget.breadcrumbWidget","props":{"backgroundColor":"var(--lia-bs-primary)","linkHighlightColor":"#FFFFFF","visualEffects":{"showBottomBorder":false},"backgroundOpacity":60,"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-1745595734446":{"__typename":"CachedAsset","id":"component:custom.widget.GainsightShared-en-us-1745595734446","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-1745595734446":{"__typename":"CachedAsset","id":"component:custom.widget.Beta_MetaNav-en-us-1745595734446","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-1745595734446":{"__typename":"CachedAsset","id":"component:custom.widget.Beta_Footer-en-us-1745595734446","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-1745595734446":{"__typename":"CachedAsset","id":"component:custom.widget.Tag_Manager_Helper-en-us-1745595734446","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-1745595734446":{"__typename":"CachedAsset","id":"component:custom.widget.Consent_Blackbar-en-us-1745595734446","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-1745595728815":{"__typename":"CachedAsset","id":"text:en_US-components/community/Breadcrumb-1745595728815","value":{"navLabel":"Breadcrumbs","dropdown":"Additional parent page navigation"},"localOverride":false},"CachedAsset:text:en_US-components/tags/TagsHeaderWidget-1745595728815":{"__typename":"CachedAsset","id":"text:en_US-components/tags/TagsHeaderWidget-1745595728815","value":{"tag":"{tagName}","topicsCount":"{count} {count, plural, one {Topic} other {Topics}}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageListForNodeByRecentActivityWidget-1745595728815":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageListForNodeByRecentActivityWidget-1745595728815","value":{"title@userScope:other":"Recent Content","title@userScope:self":"Contributions","title@board:FORUM@userScope:other":"Recent Discussions","title@board:BLOG@userScope:other":"Recent Blogs","emptyDescription":"No content to show","MessageListForNodeByRecentActivityWidgetEditor.nodeScope.label":"Scope","title@instance:1706288370055":"Content Feed","title@instance:1743095186784":"Most Recent Updates","title@instance:1704317906837":"Content Feed","title@instance:1743095018194":"Most Recent Updates","title@instance:1702668293472":"Community Feed","title@instance:1743095117047":"Most Recent Updates","title@instance:1704319314827":"Blog Feed","title@instance:1743095235555":"Most Recent Updates","title@instance:1704320290851":"My Contributions","title@instance:1703720491809":"Forum Feed","title@instance:1743095311723":"Most Recent Updates","title@instance:1703028709746":"Group Content Feed","title@instance:VTsglH":"Content Feed"},"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}}},"Category:category:Articles":{"__typename":"Category","id":"category:Articles","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Tkb:board:TechnicalArticles":{"__typename":"Tkb","id":"board:TechnicalArticles","tkbPolicies":{"__typename":"TkbPolicies","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}}},"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}}},"Conversation:conversation:277897":{"__typename":"Conversation","id":"conversation:277897","topic":{"__typename":"TkbTopicMessage","uid":277897},"lastPostingActivityTime":"2023-06-05T22:32:33.695-07:00","solved":false},"User:user:2693":{"__typename":"User","uid":2693,"login":"Mitra_Kelly_625","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://community.f5.com/t5/s/zihoc95639/m_assets/avatars/default/avatar-8.svg?time=0"},"id":"user:2693"},"TkbTopicMessage:message:277897":{"__typename":"TkbTopicMessage","subject":"Ruby NAT Maker","conversation":{"__ref":"Conversation:conversation:277897"},"id":"message:277897","revisionNum":2,"uid":277897,"depth":0,"board":{"__ref":"Tkb:board:codeshare"},"author":{"__ref":"User:user:2693"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":"","introduction":"","metrics":{"__typename":"MessageMetrics","views":192},"postTime":"2015-03-09T13:47:58.000-07:00","lastPublishTime":"2023-06-05T22:32:33.695-07:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" Problem this snippet solves: The purpose of the NAT Maker tool is to add or delete a list of NATs. \n The file bigip-config.ylm contains the information about the BIG-IP that the tool is to connect to. It needs to be updated with the name and IP address of the BIG-IP as well as the username and password of the administrator account on the BIG-IP. \n The file LocalLB.NAT.WSDL defines the NAT section of iControl. This WSDL was used to generate some classes used this tool. It also needs to be updated. The 4th to last line in this file is \n < soap:address location=\"https://:443/iControl/iControlPortal.cgi\"/> \n This line needs to be altered to use the IP address of the actual BIG-IP to which this script will connect. How to use this snippet: Tool Usage \n Add a list of NATs \n NATMaker.rb -a inputfile \n Delete a list of NATs \n NATMaker.rb -d inputfile \n Delete all NATs \n NATMaker.rb -dd \n Note: The input file should consist of a series of NATs, each on its own line. A NAT is defined by two IP addresses separated by a space. The first address is the origin address, and the second is the translation address. Code : # missing file ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"1162","kudosSumWeight":0,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"videos":{"__typename":"VideoConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}}},"Conversation:conversation:277899":{"__typename":"Conversation","id":"conversation:277899","topic":{"__typename":"TkbTopicMessage","uid":277899},"lastPostingActivityTime":"2023-06-05T22:32:30.988-07:00","solved":false},"TkbTopicMessage:message:277899":{"__typename":"TkbTopicMessage","subject":"Ruby VIP Maker","conversation":{"__ref":"Conversation:conversation:277899"},"id":"message:277899","revisionNum":2,"uid":277899,"depth":0,"board":{"__ref":"Tkb:board:codeshare"},"author":{"__ref":"User:user:2693"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":"","introduction":"","metrics":{"__typename":"MessageMetrics","views":298},"postTime":"2015-03-09T13:50:48.000-07:00","lastPublishTime":"2023-06-05T22:32:30.988-07:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" Problem this snippet solves: This is a utility created for the purpose of producing large numbers of virtual servers, including pools. This was created to make our testing efforts easier. \n Configuration \n For MakeVips and DeleteVips to work, the following files need the following edits: \n ltmbigip-config.yml needs to be updated with the correct IP address of the LTM and the username and password. LocalLB.Pool.wsdl needs to have the IP address on the second to last line of the file updated to the correct IP of the LTM LocalLB.VirtualServer.wsdl needs to have the IP address on the second to last line of the file updated to the correct IP of the LTM How to use this snippet: Tool Usage \n Add Virtual Servers \n MakeVips.rb namePrefix numberOfVIPs vipStartIP port ipsPerPool poolStartIP \n This will create numberOfVIPs virtual servers on the BIG-IP. These virtual servers will have names that begin with namePrefix. Each VIP will answer on its own IP address beginning with vipStartIP and counting up. The IP addresses roll over at their boundaries. Every VIP will answer on the specified port. Every VIP will have its own unique pool containing ipsPerPool number of IP addresses as members. These nodes begin at poolStartIP IP address and count up just as the VIP IP addresses do. There will be numberOfVips multiplied by ipsPerPool number of nodes created by this utility. \n Delete Virtual Servers \n DeleteVips.rb namePrefix numberOfVIPs \n This will delete the first numberOfVIPs virtual servers from the BIG-IP beginning with namePrefix, along with the pools associated with those virtual servers, assuming that they were created with the same utility as described above. ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"1695","kudosSumWeight":0,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"videos":{"__typename":"VideoConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}}},"Conversation:conversation:277903":{"__typename":"Conversation","id":"conversation:277903","topic":{"__typename":"TkbTopicMessage","uid":277903},"lastPostingActivityTime":"2023-06-05T22:32:28.189-07:00","solved":false},"TkbTopicMessage:message:277903":{"__typename":"TkbTopicMessage","subject":"Ruby Wide IP Maker","conversation":{"__ref":"Conversation:conversation:277903"},"id":"message:277903","revisionNum":2,"uid":277903,"depth":0,"board":{"__ref":"Tkb:board:codeshare"},"author":{"__ref":"User:user:2693"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":"","introduction":"","metrics":{"__typename":"MessageMetrics","views":222},"postTime":"2015-03-09T13:55:29.000-07:00","lastPublishTime":"2023-06-05T22:32:28.189-07:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" Problem this snippet solves: This is a utility created for the purpose of producing large numbers of WideIPs, including pools. This was created to make our testing efforts easier. \n Configuration \n For MakeWideIps and DeleteWideIps to work, the following files need the following edits: \n gtmbigip-config.yml needs to be updated with the correct IP address of the GTM and the username and password. GlobalLB.Pool.wsdl needs to have the IP address on the second to last line of the file updated to the correct IP of the GTM GlobalLB.WideIp.wsdl needs to have the IP address on the second to last line of the file updated to the correct IP of the GTM How to use this snippet: Tool Usage \n Add WideIPs \n MakeWideIps.rb namePrefix numberOfWideIPs port ipsPerPool poolStartIP \n This will create numberOfWideIPs WideIPs on the BIG-IP. These WideIPs will have names that begin with namePrefix. Every WideIP will answer on the specified port. Every WideIP will have its own unique pool containing ipsPerPool number of IP addresses as members. These nodes begin at poolStartIP IP address and count up . The IP addresses roll over at their boundaries. There will be numberOfWideIPs multiplied by ipsPerPool number of nodes created by this utility. \n Delete WideIPs \n DeleteWideIps.rb namePrefix numberOfWideIPs \n This will delete the first numberOfWideIPs WideIPs from the BIG-IP beginning with namePrefix, along with the pools associated with them, assuming that they were created with the same utility as described above. ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"1530","kudosSumWeight":0,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"videos":{"__typename":"VideoConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}}},"Conversation:conversation:282070":{"__typename":"Conversation","id":"conversation:282070","topic":{"__typename":"TkbTopicMessage","uid":282070},"lastPostingActivityTime":"2016-08-06T02:59:33.000-07:00","solved":false},"User:user:92256":{"__typename":"User","uid":92256,"login":"JG","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://community.f5.com/t5/s/zihoc95639/m_assets/avatars/default/avatar-3.svg?time=0"},"id":"user:92256"},"TkbTopicMessage:message:282070":{"__typename":"TkbTopicMessage","subject":"iControlREST: Ruby: To Output a List of Virtual Servers and their Associated Pools and Pool Members.","conversation":{"__ref":"Conversation:conversation:282070"},"id":"message:282070","revisionNum":1,"uid":282070,"depth":0,"board":{"__ref":"Tkb:board:codeshare"},"author":{"__ref":"User:user:92256"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":"","introduction":"","metrics":{"__typename":"MessageMetrics","views":294},"postTime":"2016-08-06T02:59:33.000-07:00","lastPublishTime":"2016-08-06T02:59:33.000-07:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" Problem this snippet solves: This script enumerates virtual servers and their associated pools and pool members and their status, each virtual server on a line of its own in the \";' delimited format. Essentially, the code shows a way to parse the 'ltm/virtual' object and get the information required. It had a specific need to address when it was written, and it can be modified to suit other similar requirements. How to use this snippet: This code has been tested with Ruby 2.3.1p112. Code : #!/usr/local/bin/ruby -w\n #\n # This script enumerates virtual servers and their associated pools and \n # pool members and their status, each virtual server on a line of its own \n # in the \";' delimited format.\n #\n #-------------------------------------------------------------------------\n\n require 'rubygems'\n require 'rest-client'\n require 'json'\n\n # define program-wide variables\n BIGIP_ADDRESS = 'mgmt_IP_addr'\n BIGIP_USER = 'admin'\n BIGIP_PASS = 'admin'\n SLEEP_TIME = 20\n\n bigip = RestClient::Resource.new(\n \"https://#{BIGIP_ADDRESS}/mgmt/tm/\", \n :user => BIGIP_USER, \n :password => BIGIP_PASS, \n :headers => { :content_type => 'application/json' },\n :verify_ssl => false\n )\n\n # Get virtual servers:\n\n vservers = bigip['ltm/virtual'].get\n vservers_obj = JSON.parse(vservers)\n\n # Get pools:\n\n pools = bigip['ltm/pool?expandSubcollections=true'].get\n pools_obj = JSON.parse(pools)\n\n # Output header:\n puts \"Virtual Server Name;Virtual Server Destination;Virtual Server Partition;Pool Name;Pool LB Mode;Pool Member Name (address)(state)\"\n $output = ''\n\n # Process data:\n\n vservers_obj.each do |vserver_obj|\n vserver_obj.each do |vserver_obj_element|\n if vserver_obj_element.is_a?(Array)\n vserver_obj_element.each do |vserver_obj_element_property|\n if vserver_obj_element_property.is_a?(Hash)\n if vserver_obj_element_property.has_key?(\"name\")\n vs_name = vserver_obj_element_property.fetch(\"name\")\n $output = $output + vs_name + ';'\n end\n if vserver_obj_element_property.has_key?(\"destination\")\n vs_destination = vserver_obj_element_property.fetch(\"destination\")\n $output = $output + vs_destination + ';'\n end\n if vserver_obj_element_property.has_key?(\"partition\")\n vs_partition = vserver_obj_element_property.fetch(\"partition\")\n $output = $output + vs_partition + ';'\n end\n if vserver_obj_element_property.has_key?(\"pool\")\n pool_name_from_vs = vserver_obj_element_property.fetch(\"pool\")\n pools_obj.each_pair do |key, val|\n next if key == \"kind\"\n next if key == \"selfLink\"\n for x in 0..(val.length-1)\n if val[x][\"fullPath\"] == pool_name_from_vs\n $output = $output + val[x][\"name\"] + \";\" + val[x][\"loadBalancingMode\"]\n if val[x].has_key?(\"membersReference\")\n val[x][\"membersReference\"].each_pair do |mrefkey,mrefval|\n next if mrefkey == \"link\"\n next if mrefkey == \"isSubcollection\"\n for i in 0..(mrefval.length-1)\n if i == 0\n $output = $output + \";\" + mrefval[i][\"name\"] + \"(\" + mrefval[i][\"address\"] + \")(\" + mrefval[i][\"state\"] + \"),\"\n else\n $output = $output + mrefval[i][\"name\"] + \"(\" + mrefval[i][\"address\"] + \")(\" + mrefval[i][\"state\"] + \"),\"\n end\n if i == mrefval.length-1\n $output.chop!\n $output += \"\\n\"\n end\n end\n end\n else\n $output = $output + \";;\\n\"\n end\n break\n end\n end\n end\n else\n $output = $output + \";;\\n\"\n end\n end\n end\n end\n end\n end\n\n puts $output\n\n #---END--- Tested this on version: 11.6","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"5226","kudosSumWeight":0,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"videos":{"__typename":"VideoConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}}},"Conversation:conversation:278160":{"__typename":"Conversation","id":"conversation:278160","topic":{"__typename":"TkbTopicMessage","uid":278160},"lastPostingActivityTime":"2015-11-05T01:39:40.000-08:00","solved":false},"User:user:131293":{"__typename":"User","uid":131293,"login":"CodeCentral_194","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://community.f5.com/t5/s/zihoc95639/m_assets/avatars/default/avatar-10.svg?time=0"},"id":"user:131293"},"TkbTopicMessage:message:278160":{"__typename":"TkbTopicMessage","subject":"Enumerate All Modules","conversation":{"__ref":"Conversation:conversation:278160"},"id":"message:278160","revisionNum":1,"uid":278160,"depth":0,"board":{"__ref":"Tkb:board:codeshare"},"author":{"__ref":"User:user:131293"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":"","introduction":"","metrics":{"__typename":"MessageMetrics","views":215},"postTime":"2015-03-09T14:50:30.000-07:00","lastPublishTime":"2015-03-09T14:50:30.000-07:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" Problem this snippet solves: The iControl REST Users Guide documents a way to discover all components by using the curl command to manually scroll through all the different modules. I wanted something a bit more automated, so I came up with this short program to enumerate through all the possible modules. The program loads in all the top-level API modules into a stack, then proceeds to query the iControl REST API daemon (tmapid) for the contents of those containers. As the sub-modules are discovered, they are pushed down on to the stack to be queried as well. Since the REST API makes use of the same command processor as TMSH, you will notice that the item REST paths just about match up with TMSH. If you know the TMSH path, you can just about guess what the REST URI should look like. Code : #!/usr/bin/ruby\n#---------------------------------------------------------------------------- \n# iControl_REST_Enum.rb\n#---------------------------------------------------------------------------- \n#\n#\n# Before you can run this program, you need to enable the tmapid daemon:\n#tmsh modify /sys service tmapid enable\n# tmsh start /sys service tmapid\n#\n# You can query the iControl REST API from the command line using curl:\n#\n# $ curl -s -k -u admin:admin https://10.147.29.117/mgmt/tm/sys/application | python -mjson.tool\n# {\n# \"apiPartition\": \"/Common/\",\n# \"currentItemCount\": 4,\n# \"items\": [\n# {\n# \"apiName\": \"apl-script\",\n# \"kind\": \"tm:sys:application:apl-script:apl-scriptstate\",\n# \"selfLink\": \"https://localhost/mgmt/tm/sys/application/apl-script\"\n# },\n# {\n# \"apiName\": \"custom-stat\",\n# \"kind\": \"tm:sys:application:custom-stat:custom-statstate\",\n# \"selfLink\": \"https://localhost/mgmt/tm/sys/application/custom-stat\"\n# },\n# {\n# \"apiName\": \"service\",\n# \"kind\": \"tm:sys:application:service:servicestate\",\n# \"selfLink\": \"https://localhost/mgmt/tm/sys/application/service\"\n# },\n# {\n# \"apiName\": \"template\",\n# \"kind\": \"tm:sys:application:template:templatestate\",\n# \"selfLink\": \"https://localhost/mgmt/tm/sys/application/template\"\n# }\n# ],\n# \"kind\": \"tm:sys:application:applicationstate\",\n# \"nextLink\": null,\n# \"pageIndex\": 1,\n# \"previousLink\": null,\n# \"selfLink\": \"https://localhost/mgmt/tm/sys/application\",\n# \"startIndex\": 1,\n# \"totalItems\": 4,\n# \"totalPages\": 1\n# }\n#\n# The python json.tool on the end of the command line just formats the JSON into something\n# more readable. \n#---------------------------------------------------------------------------- \n# Software is distributed on an \"AS IS\" basis,\n# WITHOUT WARRANTY OF ANY KIND, either express or implied. See\n# the License for the specific language governing rights and limitations\n# under the License.\n#\n# The Initial Developer of the Original Code is F5 Networks,\n# Inc. Seattle, WA, USA. Portions created by F5 are Copyright (C) 2013 F5 Networks,\n# Inc. All Rights Reserved.\n#\n# Author: John D. Allen, Principal Solutions Engineer\n# Email: john.allen@f5.com\n#---------------------------------------------------------------------------- \n#\n# Version:\n#1.0INITIAL Version\n#1.1Corrected to work with new icrd daemon JSON format.\n#\n#----------------------------------------------------------------------------\n\nrequire 'rubygems'\nrequire 'net/http'\nrequire 'net/https'\nrequire 'uri'\nrequire 'json'\n\nREST_host = \"//10.147.29.121\" ## Your BIGIP v11.4 host IP or Name here. The '//' at the start need to be there.\n\ndef RESTcall(x) ## Yes there are other ways to do this call, but I already had the tried and true code in hand.\n uri = URI.parse(x)\n http = Net::HTTP.new(uri.host, uri.port)\n req = Net::HTTP::Get.new(uri.request_uri)\n req.basic_auth \"admin\", \"admin\" ## You will need to change this if you have a different password.\n http.use_ssl = true\n http.verify_mode = OpenSSL::SSL::VERIFY_NONE ## if your like me, you don't have a valid cert on your BIGIP\n return http.request(req)\nend\n\n##----- Load the query stack -----##\nstack = []\nstack.push \"https:#{REST_host}/mgmt/tm/sys\"\nstack.push \"https:#{REST_host}/mgmt/tm/net\"\nstack.push \"https:#{REST_host}/mgmt/tm/ltm\"\nstack.push \"https:#{REST_host}/mgmt/tm/cm\"\nstack.push \"https:#{REST_host}/mgmt/tm/cli\"\nstack.push \"https:#{REST_host}/mgmt/tm/auth\"\nstack.push \"https:#{REST_host}/mgmt/tm/pem\"\nstack.push \"https:#{REST_host}/mgmt/tm/security\"\nstack.push \"https:#{REST_host}/mgmt/tm/afm\"\nstack.push \"https:#{REST_host}/mgmt/tm/analytics\" \nstack.push \"https:#{REST_host}/mgmt/tm/apm\"\nstack.push \"https:#{REST_host}/mgmt/tm/gtm\"\nstack.push \"https:#{REST_host}/mgmt/tm/wam\"\n## If you don't have a module installed, you will get a '500' error, but the program will continue.\n\nresp = \"\"\n\n##\n## Check our host to see if it is ready\n## For some reason the initial REST API calls usually timeout while the tmapid daemon works on the \n## first API packet. Once going, it seems to be fine. This call just checks to see if it is \n## responding back with a correct '200' status code. If not, tmapid responds back with a '000' \n## status code. We just loop until we get a 200, or die trying.\n##\ni = 0\nloop do\n i += 1\n resp = RESTcall(\"https:#{REST_host}/mgmt/tm/ltm/available\")\n break if resp.code == \"200\" or i > 5\n puts \"--> Waking up tmapid daemon\"\nend\nif i > 5\n puts \"--->Unable to wake up tmapid daemon on BIGIP host.\"\n exit\nend\n\n##\n## Main Loop\n##\n## This program uses a simple FILO stack to enumerate through all the items exposed from the iControl REST API.\n## Some containers have large numbers of items, so if there are more than 50, they are not pushed onto the stack.\n## There are a few containers that seem to reference themselves, and thus were causing loops in the program. So\n## if the selfLink field of the item matches the selfLink field of the container, the item is ignored. Some of\n## the containers seem to have items defined that cause errors when queried for. Not sure if that is by design,\n## or if it is a bug in the v11.4 Beta code.\n##\nloop do\n uri = stack.pop\n uu = URI.parse(uri)\n puts uu.path\n uri.gsub!(/\\/\\/localhost/, REST_host) ## BIGIP REST interface returns 'localhost' in its URI's for some strange reason.\n i = 0\n loop do\n i += 1\n resp = RESTcall(uri)\n break if resp.code == \"200\" or i > 3\n end\n if i > 3\n case resp.code ## This is the HTTP response code from the REST API call.\n when \"400\"\n puts \"--->[400] Item(s) not currently available?\"\n when \"401\"\n puts \"--->[401] Not Authorized to Access.\"\n when \"403\"\n puts \"--->[403] Verboten\"\n when \"404\"\n puts \"--->[404] Item(s) Not Found.\" \n when \"500\"\n puts \"--->[500] Not Definded to API server?\"\n end\n else\n api = JSON.parse(resp.body)\n if api.has_key?('items') ## if container, not end parameter\n if api['totalItems'].to_i < 50 ## some containers have hundreds!!\n api['items'].each do |r|\n if r.has_key?('selfLink')\n stack.push r['selfLink'] if api['selfLink'] != r['selfLink'].chop ## some items reference themselves?!?!\n else\n stack.push r['reference']['link'] ## v11.4 Build 145 has a different format from Beta I.\n end\n end\n else\n puts \"---> Too many Items to store (#{api['totalItems']})\"\n end\n end\n end\n break if stack.empty?\nend\n\nexit ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"7766","kudosSumWeight":0,"repliesCount":1,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"videos":{"__typename":"VideoConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}}},"Conversation:conversation:278162":{"__typename":"Conversation","id":"conversation:278162","topic":{"__typename":"TkbTopicMessage","uid":278162},"lastPostingActivityTime":"2015-05-26T09:16:27.000-07:00","solved":false},"TkbTopicMessage:message:278162":{"__typename":"TkbTopicMessage","subject":"Ruby Virtual Server and Pool Creation","conversation":{"__ref":"Conversation:conversation:278162"},"id":"message:278162","revisionNum":1,"uid":278162,"depth":0,"board":{"__ref":"Tkb:board:codeshare"},"author":{"__ref":"User:user:131293"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":"","introduction":"","metrics":{"__typename":"MessageMetrics","views":238},"postTime":"2015-03-09T15:11:30.000-07:00","lastPublishTime":"2015-03-09T15:11:30.000-07:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" Problem this snippet solves: A simple script to add and delete both Virtual IPs and Pools in: Ruby Code : require 'rubygems'\nrequire 'rest-client'\nrequire 'json'\n\n# define program-wide variables\nBIGIP_ADDRESS = 'test-ltm-03.element.local'\nBIGIP_USER = 'admin'\nBIGIP_PASS = 'admin'\n\nSLEEP_TIME = 20\n\nVS_NAME = 'test-http-virtual_ruby'\nVS_ADDRESS = '1.1.1.1'\nVS_PORT = '80'\n\nPOOL_NAME = 'test-http-pool_ruby'\nPOOL_LB_METHOD = 'least-connections-member'\nPOOL_MEMBERS = [ '10.0.0.1:80', '10.0.0.2:80', '10.0.0.3:80' ]\n\n# create/delete methods\ndef create_pool bigip, name, members, lb_method\n# convert member format\nmembers.collect { |member| { :kind => 'ltm:pool:members', :name => member} }\n\n# define test pool\npayload = {\n:kind => 'tm:ltm:pool:poolstate',\n:name => name,\n:description => 'A Ruby rest-client test pool',\n:loadBalancingMode => lb_method,\n:monitor => 'http',\n:members => members\n}\n\nbigip['ltm/pool'].post payload.to_json\nend\n\ndef create_http_virtual bigip, name, address, port, pool\n# define test virtual\npayload = { \n:kind => 'tm:ltm:virtual:virtualstate',\n:name => name,\n:description => 'A Ruby rest-client test virtual server',\n:destination => \"#{address}:#{port}\",\n:mask => '255.255.255.255',\n:ipProtocol => 'tcp',\n:sourceAddressTranslation => { :type => 'automap' },\n:profiles => [\n{ :kind => 'ltm:virtual:profile', :name => 'http' }, \n{ :kind => 'ltm:virtual:profile', :name => 'tcp' }\n],\n:pool => pool\n}\n\nbigip['ltm/virtual'].post payload.to_json\nend\n\ndef delete_pool bigip, name\nurl = \"ltm/pool/#{name}\"\nbigip[url].delete\nend\n\ndef delete_virtual bigip, name\nurl = \"ltm/virtual/#{name}\"\nbigip[url].delete\nend\n\n# REST resource for BIG-IP that all other requests will use\nbigip = RestClient::Resource.new(\n\"https://#{BIGIP_ADDRESS}/mgmt/tm/\", \n:user => BIGIP_USER, \n:password => BIGIP_PASS, \n:headers => { :content_type => 'application/json' }\n)\nputs \"created REST resource for BIG-IP at #{BIGIP_ADDRESS}...\"\n\n# create pool\ncreate_pool bigip, POOL_NAME, POOL_MEMBERS, POOL_LB_METHOD\nputs \"created pool \\\"#{POOL_NAME}\\\" with members #{POOL_MEMBERS.join(', ')}...\"\n\n# create virtual\ncreate_http_virtual bigip, VS_NAME, VS_ADDRESS, VS_PORT, POOL_NAME\nputs \"created virtual server \\\"#{VS_NAME}\\\" with destination #{VS_ADDRESS}:#{VS_PORT}...\"\n\n# sleep for a little while\nputs \"sleeping for #{SLEEP_TIME} seconds, check for successful creation...\"\nsleep SLEEP_TIME\n\n# delete virtual\ndelete_virtual bigip, VS_NAME\nputs \"deleted virtual server \\\"#{VS_NAME}\\\"...\"\n\n# delete pool\ndelete_pool bigip, POOL_NAME\nputs \"deleted pool \\\"#{POOL_NAME}\\\"...\" ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"2637","kudosSumWeight":0,"repliesCount":1,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"videos":{"__typename":"VideoConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}}},"Conversation:conversation:277574":{"__typename":"Conversation","id":"conversation:277574","topic":{"__typename":"TkbTopicMessage","uid":277574},"lastPostingActivityTime":"2015-03-09T14:21:50.000-07:00","solved":false},"User:user:354560":{"__typename":"User","uid":354560,"login":"George_Watkins_","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://community.f5.com/t5/s/zihoc95639/m_assets/avatars/default/avatar-2.svg?time=0"},"id":"user:354560"},"TkbTopicMessage:message:277574":{"__typename":"TkbTopicMessage","subject":"Virtual Address ARP Switcher","conversation":{"__ref":"Conversation:conversation:277574"},"id":"message:277574","revisionNum":1,"uid":277574,"depth":0,"board":{"__ref":"Tkb:board:codeshare"},"author":{"__ref":"User:user:354560"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":"","introduction":"","metrics":{"__typename":"MessageMetrics","views":208},"postTime":"2015-03-09T14:21:50.000-07:00","lastPublishTime":"2015-03-09T14:21:50.000-07:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" Problem this snippet solves: The virtual-address-arp-switcher script is used to quickly and efficiently migrate virtual addresses from one BIG-IP to another. The BIG-IP that is active and currently holds the ARP-enabled virtual address is referred to as the 'source'. The BIG-IP holding the same virtual address with ARP disabled is the 'target'. This script will login to both units, ensure that the virtual address is present on both units and that the ARP setting for both the source and target are in their correct state. A delay can be inserted during which both virtual addresses are in the disabled state. The delay can be set to the ARP cache timeout to ensure that duplicates ARP entries do not exist in the caches. How to use this snippet: Requirements \n Ruby Ruby Gems F5 iControl for Ruby library (http://devcentral.f5.com/Tutorials/TechTips/tabid/63/articleType/ArticleView/articleId/1086421/Getting-Started-With-Ruby-and-iControl.aspx) other dependencies will be installed with the iControl gem \n Installation Steps \n \nInstall Ruby, Ruby's OpenSSL library, Ruby Gems, and the Ruby iControl libraries\n http://devcentral.f5.com/Tutorials/TechTips/tabid/63/articleType/ArticleView/articleId/1086421/Getting-Started-With-Ruby-and-iControl.aspx \n Copy this code to /usr/local/bin and chmod +x to make the script executable \nRun it!\n virtual-address-arp-switcher --bigip-address-source 10.0.0.10 --bigip-address-target 10.0.0.20 -u admin -p admin -v 192.168.22.44 -d 10 \n Code : #!/usr/bin/ruby\n\n# == Synopsis\n#\n# virtual-address-arp-switcher - quickly swap virtual addresses between BIG-IPs\n#\n# The virtual-address-arp-switcher script is used to quickly and efficiently migrate virtual addresses from one BIG-IP to another. The BIG-IP that is active and currently holds the ARP-enabled virtual address is referred to as the 'source'. The BIG-IP holding the same virtual address with ARP disabled is the 'target'. This script will login to both units, ensure that the virtual address is present on both units and that the ARP setting for both the source and target are in their correct state. A delay can be inserted during which both virtual addresses are in the disabled state. The delay can be set to the ARP cache timeout to ensure that duplicates ARP entries do not exist in the caches.\n#\n# == Usage\n#\n# virtual-address-arp-switcher [OPTIONS]\n#\n# -h, --help:\n# show help\n#\n# --bigip-address-source, -b [hostname]:\n# specify the hostname or IP address for source BIG-IP\n#\n# --bigip-user-source, -u [username]:\n# username for source BIG-IP\n#\n# --bigip-pass-source, -p [password]:\n# password for source BIG-IP\n#\n# --bigip-address-target [hostname]:\n# specify the target BIG-IP address\n#\n# --bigip-user-target [username]:\n# username for target BIG-IP, by default assumes same as source BIG-IP\n#\n# --bigip-pass-target [password]:\n# password for target BIG-IP, by default assumes same as source BIG-IP\n#\n# --virtual-address, -v [ip address]:\n# virtual address for which to disable and enable ARP\n#\n# --delay, -d [seconds]:\n# delay between disabling ARP on the source BIG-IP and enabling on target\n\n\nrequire 'rubygems'\nrequire 'f5-icontrol'\nrequire 'getoptlong'\nrequire 'rdoc/usage'\n\noptions = GetoptLong.new(\n [ '--bigip-address-source', '-b', GetoptLong::REQUIRED_ARGUMENT ],\n [ '--bigip-user-source', '-u', GetoptLong::REQUIRED_ARGUMENT ],\n [ '--bigip-pass-source', '-p', GetoptLong::REQUIRED_ARGUMENT ],\n [ '--bigip-address-target', GetoptLong::REQUIRED_ARGUMENT ],\n [ '--bigip-user-target', GetoptLong::REQUIRED_ARGUMENT ],\n [ '--bigip-pass-target', GetoptLong::REQUIRED_ARGUMENT ],\n [ '--virtual-address', '-v', GetoptLong::REQUIRED_ARGUMENT ],\n [ '--delay', '-d', GetoptLong::REQUIRED_ARGUMENT ],\n [ '--help', '-h', GetoptLong::NO_ARGUMENT ]\n)\n\n# set inital values\n\nbigip_address_source = ''\nbigip_user_source = ''\nbigip_pass_source = ''\nbigip_address_target = ''\nbigip_user_target = ''\nbigip_pass_target = ''\nvirtual_address = ''\ndelay = 0\n\noptions.each do |option, arg|\n case option\n when '--bigip-address-source'\n bigip_address_source = arg\n when '--bigip-user-source'\n bigip_user_source = arg\n when '--bigip-pass-source'\n bigip_pass_source = arg\n when '--bigip-address-target'\n bigip_address_target = arg\n when '--bigip-user-target'\n bigip_user_target = arg\n when '--bigip-pass-target'\n bigip_pass_target = arg\n when '--virtual-address'\n if arg =~ /\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}/\n virtual_address = arg\n end\n when '--delay'\n delay = arg.to_i\n when '--help'\n RDoc::usage\n end\nend\n\nRDoc::usage if bigip_address_source.empty? \\\n or bigip_user_source.empty? \\\n or bigip_pass_source.empty? \\\n or bigip_address_target.empty? \\\n or virtual_address.empty?\n\nbigip_user_target = bigip_user_source if bigip_user_target.empty?\nbigip_pass_target = bigip_pass_source if bigip_pass_target.empty?\n\n# Initiate SOAP RPC connection to BIG-IP\n\nbegin\n bigip_source = F5::IControl.new(bigip_address_source, bigip_user_source, bigip_pass_source, ['LocalLB.VirtualAddress']).get_interfaces\nrescue\n puts 'ERROR: Connection error occured while connecting to the source BIG-IP at '\n puts \"#{bigip_address_source}.\"\n exit 1\nend\n\nbegin\n bigip_target = F5::IControl.new(bigip_address_target, bigip_user_target, bigip_pass_target, ['LocalLB.VirtualAddress']).get_interfaces\nrescue\n puts 'ERROR: Connection error occured while connecting to the target BIG-IP at '\n puts \"#{bigip_address_target}.\"\n exit 1\nend\n\n# Make sure that the virtual address is available on both BIG-IPs\n\nunless bigip_source['LocalLB.VirtualAddress'].get_list.include? virtual_address\n puts 'ERROR: The source BIG-IP does not contain the virtual address provided.'\n exit 1\nend\n\nunless bigip_target['LocalLB.VirtualAddress'].get_list.include? virtual_address\n puts 'ERROR: The target BIG-IP does not contain the virtual address provided.'\n exit 1\nend\n\n# Ensure that the ARP state of both addresses is correct\n\nbigip_source_arp_state = bigip_source['LocalLB.VirtualAddress'].get_arp_state(virtual_address).to_s\nbigip_target_arp_state = bigip_target['LocalLB.VirtualAddress'].get_arp_state(virtual_address).to_s\n\nif bigip_source_arp_state == 'STATE_DISABLED' and bigip_target_arp_state == 'STATE_ENABLED'\n puts 'ERROR: ARP is currently disabled for the virtual address on the source BIG-IP and enabled on the target. It appears that the two are reversed. Please read the help message for more information on which unit should be the source and the other the target.'\n exit 1\nelsif (bigip_source_arp_state and bigip_target_arp_state) == 'STATE_ENABLED'\n puts 'ERROR: ARP is enabled for the virtual address on both BIG-IPs. It is likely that there is an IP address conflict at the moment.'\n exit 1\nelsif bigip_source_arp_state == 'STATE_DISABLED'\n puts 'ERROR: ARP is currently disabled for the virtual address on the source BIG-IP and needs to be enabled to proceed.'\n exit 1\nelsif bigip_target_arp_state == 'STATE_ENABLED'\n puts 'ERROR: ARP is currently enabled for the virtual address on the target BIG-IP and needs to be disabled to proceed.'\n exit 1\nend\n\n# Everything looks good so far, confirm the swap, then proceed\n\nputs \"Virtual address details\"\nputs \"-\" * 20\nputs \"Virtual address: #{virtual_address}\"\nputs \"Current location: #{bigip_address_source}\"\nputs \"Future location: #{bigip_address_target}\"\nputs \"Delay: #{delay} seconds\"\n\nanswer = ''\nprint \"\\nAre you sure you want to proceed? (no/yes) \"\n\nSTDOUT.flush\nanswer = STDIN.gets.chomp\nexit unless answer == \"yes\"\n\n# Begin the swap\n\nputs \"WARNING: Commencing swap! Do not exit script! Wait for exit!\"\n\nputs \"INFO: Disabling ARP for virtual address #{virtual_address} on #{bigip_address_source}...\"\nbigip_source['LocalLB.VirtualAddress'].set_arp_state([virtual_address], ['STATE_DISABLED'])\n\nputs \"INFO: Sleeping for #{delay} seconds...\"\nsleep delay\n\nputs \"INFO: Enabling ARP for virtual address #{virtual_address} on #{bigip_address_target}...\"\nbigip_target['LocalLB.VirtualAddress'].set_arp_state([virtual_address], ['STATE_ENABLED']) ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"8200","kudosSumWeight":0,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"videos":{"__typename":"VideoConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}}},"Conversation:conversation:277569":{"__typename":"Conversation","id":"conversation:277569","topic":{"__typename":"TkbTopicMessage","uid":277569},"lastPostingActivityTime":"2015-03-09T14:10:00.000-07:00","solved":false},"TkbTopicMessage:message:277569":{"__typename":"TkbTopicMessage","subject":"SSLKeyAndCSRCreator","conversation":{"__ref":"Conversation:conversation:277569"},"id":"message:277569","revisionNum":1,"uid":277569,"depth":0,"board":{"__ref":"Tkb:board:codeshare"},"author":{"__ref":"User:user:354560"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":"","introduction":"","metrics":{"__typename":"MessageMetrics","views":262},"postTime":"2015-03-09T14:10:00.000-07:00","lastPublishTime":"2015-03-09T14:10:00.000-07:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" Problem this snippet solves: This is a script will generate a private key and output a certificate signing request. This is all done from a workstation command line and communicated to the BIG-IP via iControl. How to use this snippet: Requirements \n Ruby Ruby Gems F5 iControl for Ruby library other dependencies will be installed with the iControl gem \n Installation Steps \n \nInstall Ruby, Ruby's \"\"OpenSSL\"\" library, Ruby Gems, and the Ruby iControl libraries\n Getting-Started-With-Ruby-and-iControl.aspx \n Copy this code to /usr/local/bin and chmod +x to make the script executable \nRun it!\n minimal options: ssl-key-and-csr-creator.rb -b 192.168.1.245 -u admin -i test-key-001 full options: ssl-key-and-csr-creator.rb -b 192.168.1.245 -u admin -p admin -i test-key-001 -t RSA -l 4096 -s fips --common-name=www.example.com --country=US --state=Washington --locality=Seattle --organization=\"Example Company, Inc.\" --division=\"Information Technology\" -o /my-ssl-directory/ -k -c \n Code : #!/usr/bin/ruby\n\nrequire \"rubygems\"\nrequire \"f5-icontrol\"\nrequire \"getoptlong\"\n\noptions = GetoptLong.new(\n [ \"--bigip-address\", \"-b\", GetoptLong::REQUIRED_ARGUMENT ],\n [ \"--bigip-user\", \"-u\", GetoptLong::REQUIRED_ARGUMENT ],\n [ \"--bigip-pass\", \"-p\", GetoptLong::REQUIRED_ARGUMENT ],\n [ \"--key-id\", \"-i\", GetoptLong::REQUIRED_ARGUMENT ],\n [ \"--key-type\", \"-t\", GetoptLong::OPTIONAL_ARGUMENT ],\n [ \"--key-bit-length\", \"-l\", GetoptLong::OPTIONAL_ARGUMENT ],\n [ \"--key-security\", \"-s\", GetoptLong::OPTIONAL_ARGUMENT ],\n [ \"--common-name\", GetoptLong::OPTIONAL_ARGUMENT ],\n [ \"--country\", GetoptLong::OPTIONAL_ARGUMENT ],\n [ \"--state\", GetoptLong::OPTIONAL_ARGUMENT ],\n [ \"--locality\", GetoptLong::OPTIONAL_ARGUMENT ],\n [ \"--organization\", GetoptLong::OPTIONAL_ARGUMENT ],\n [ \"--division\", GetoptLong::OPTIONAL_ARGUMENT ],\n [ \"--output-dir\", \"-o\", GetoptLong::OPTIONAL_ARGUMENT ],\n [ \"--key-output\", \"-k\", GetoptLong::NO_ARGUMENT ],\n [ \"--csr-output\", \"-c\", GetoptLong::NO_ARGUMENT ],\n [ \"--help\", \"-h\", GetoptLong::NO_ARGUMENT ]\n)\n\ndef usage \n puts $0 + \" -b -u -i \"\n puts\n puts \"BIG-IP connection parameters\"\n puts \"-\" * 20\n puts \" -b (--bigip-address) BIG-IP management-accessible address\"\n puts \" -u (--bigip-user) BIG-IP username\"\n puts \" -p (--bigip-pass) BIG-IP password (will prompt if left blank\"\n puts\n puts \"Private key parameters\"\n puts \"-\" * 20\n puts \" -i (--key-id) key ID: must be unique and should be indicative of the purpose (required)\"\n puts \" -t (--key-type) key type: [RSA|DSA] (default is 'RSA')\"\n puts \" -l (--key-bit-length) key bit length: should be a minimum of 1024-bit (default is 2048; most CAs won't sign weaker keys)\"\n puts \" -s (--key-security) key security: [normal|fips|password] (default is 'normal' with no passphrase)\"\n puts\n puts \"X.509 data parameters (if blank, you'll be prompted for the answers)\"\n puts \"-\" * 20\n puts \" (--common-name) common name: FQDN for virtual server (www.example.com)\"\n puts \" (--country) country: two letter country abbreviation (US, CN, etc.)\"\n puts \" (--state) state: two letter state abbreviation (WA, OR, CA, etc.)\"\n puts \" (--locality) locality: locality or city name (Seattle, Portland, etc.)\"\n puts \" (--organization) organization: organization or company name (F5 Networks, Company XYZ, etc.)\"\n puts \" (--division) division: department or division name (IT, HR, Finance, etc.)\"\n puts\n puts \"Output options\"\n puts \"-\" * 20\n puts \" -o (--output-dir) CSR/key output directory: location to output private key and CSR files (defaults to current working directory)\"\n puts \" -k (--key-output) key output: save private key to a local file (saved as key_id.key)\"\n puts \" -c (--csr-output) CSR output: save certificate signing request to a local file (saved as key_id.csr)\"\n puts\n puts \"Help and usage\"\n puts \"-\" * 20\n puts \" -h (--help) shows this help/usage dialog\"\n puts\n\n exit\nend\n\n# set STDOUT buffer to synchronous\nSTDOUT.sync = true\n\n# global variables\nKEY_TYPES = { \"RSA\" => \"KTYPE_RSA_PRIVATE\", \"DSA\" => \"KTYPE_DSA_PRIVATE\" }\nKEY_SECURITIES = { \"normal\" => \"STYPE_NORMAL\", \"fips\" => \"STYPE_FIPS\", \"password\" => \"STYPE_PASSWORD\" }\n\n# initial parameter values\noverwrite_key = false\n\n# key/CSR default output file values\nkey_output = false\ncsr_output = false\noutput_dir = Dir.pwd\n\n# BIG-IP connection parameters\nbigip = {}\nbigip['address'] = ''\nbigip['user'] = ''\nbigip['pass'] = ''\n\n# private key parameters\nkey_data = {}\nkey_data['id'] = ''\nkey_data['key_type'] = KEY_TYPES[\"RSA\"]\nkey_data['bit_length'] = 2048\nkey_data['security'] = KEY_SECURITIES[\"normal\"]\n\n# X.509 data parameters\nx509_data = {}\nx509_data['common_name'] = ''\nx509_data['country_name'] = ''\nx509_data['state_name'] = ''\nx509_data['locality_name'] = ''\nx509_data['organization_name'] = ''\nx509_data['division_name'] = ''\n\n# loop through command line options\noptions.each do |option, arg|\n case option\n when \"--bigip-address\"\n bigip['address'] = arg\n when \"--bigip-user\"\n bigip['user'] = arg\n when \"--bigip-pass\"\n bigip['pass'] = arg\n when \"--key-id\"\n key_data['id'] = arg\n when \"--key-type\"\n if KEY_TYPES.keys.include? arg.upcase\n key_data['key_type'] = KEY_TYPES[arg.upcase]\n else\n puts \"Error: Invalid key type. Exiting.\"\n exit 1\n end\n when \"--key-bit-length\"\n key_data['bit_length'] = arg.to_i\n when \"--key-security\"\n if KEY_SECURITIES.keys.include? arg.downcase\n key_data['security'] = KEY_SECURITIES[arg.downcase]\n else\n puts \"Error: Invalid key security type. Exiting.\"\n exit 1\n end\n when \"--common-name\"\n x509_data['common_name'] = arg\n when \"--country\"\n if arg =~ /[a-z]{2}/i\n x509_data['country_name'] = arg.upcase\n else\n puts \"Error: Use exactly two letters for the country code. Exiting.\"\n exit 1\n end\n when \"--state\"\n x509_data['state_name'] = arg\n when \"--locality\"\n x509_data['locality_name'] = arg\n when \"--organization\"\n x509_data['organization_name'] = arg\n when \"--division\"\n x509_data['division_name'] = arg\n when \"--output-dir\"\n if File.directory? arg\n output_dir = arg\n else\n puts \"Error: Invalid directory for output. Exiting.\"\n end\n when \"--key-output\"\n key_output = true\n when \"--csr-output\"\n csr_output = true\n when \"--help\"\n usage\n end\nend\n\n# we need at least the BIG-IP's address, user, and a key ID to proceed\n\nusage if bigip['address'].empty? or bigip['user'].empty? or key_data['id'].empty?\n\nif bigip['pass'].empty?\n puts \"Please enter the BIG-IPs password...\"\n print \"Password: \"\n system(\"stty\", \"-echo\")\n bigip['pass'] = gets.chomp\n system(\"stty\", \"echo\")\n puts\nend\n\n# set up connection to BIG-IP and Management.KeyCertificate interface\n\nbigip = F5::IControl.new(bigip['address'], bigip['user'], bigip['pass'], [\"Management.KeyCertificate\"]).get_interfaces\n\n#grab a list of existing keys and confirm overwrite if a conflict exists\n\nexisting_keys = bigip[\"Management.KeyCertificate\"].get_key_list('MANAGEMENT_MODE_DEFAULT').collect { |key| key[\"key_info\"][\"id\"] }\n\nif existing_keys.include? key_data['id']\n print \"A key with an ID of '#{key_data['id']}' already exists. Overwrite it? (yes/no) \"\n answer = gets.chomp\n\n if answer !~ /^yes$/i\n puts \"Will not overwrite existing key. Exiting.\"\n exit\n else\n overwrite_key = true\n end\nend\n\n# time to play 20 questions with the X.509 data\n\nif x509_data.values.delete_if { |value| !value.empty? }.size > 0\n puts \"Please fill in the following X.509 data parameters...\"\nend\n\nx509_data.sort.each do |key, value| \n if value.empty?\n print key.capitalize.gsub('_', ' ') + \"? \"\n x509_data[key] = gets.chomp\n end\nend\n\nbigip[\"Management.KeyCertificate\"].key_generate('MANAGEMENT_MODE_DEFAULT', [key_data], [x509_data], true, overwrite_key)\n\n# write private key to local file if specified by user\n\nif key_output\n key_output_file = output_dir + \"/\" + key_data['id'] + \".key\"\n key = bigip[\"Management.KeyCertificate\"].key_export_to_pem('MANAGEMENT_MODE_DEFAULT', [key_data['id']])[0]\n File.open(key_output_file, 'w') { |file| file.write(key) }\nend\n\n# display subject information for CSR as well as the CSR\n\nputs \"Certificate Request\"\nputs \"-\" * 20\nputs \"Subject: C=#{x509_data['country_name']}, ST=#{x509_data['state_name']}, L=#{x509_data['locality_name']}, O=#{x509_data['organization_name']}, OU=#{x509_data['division_name']}, CN=#{x509_data['common_name']}\"\n\ncsr = bigip[\"Management.KeyCertificate\"].certificate_request_export_to_pem('MANAGEMENT_MODE_DEFAULT', [key_data['id']])\n\n# write csr key to local file if specified by user\n\nif csr_output\n csr_output_file = output_dir + \"/\" + key_data['id'] + \".csr\"\n File.open(csr_output_file, 'w') { |file| file.write(csr) }\nend\n\nputs\nputs csr ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"9196","kudosSumWeight":0,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"videos":{"__typename":"VideoConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}}},"Conversation:conversation:277560":{"__typename":"Conversation","id":"conversation:277560","topic":{"__typename":"TkbTopicMessage","uid":277560},"lastPostingActivityTime":"2015-03-09T14:07:17.000-07:00","solved":false},"TkbTopicMessage:message:277560":{"__typename":"TkbTopicMessage","subject":"SSL Certificate Report","conversation":{"__ref":"Conversation:conversation:277560"},"id":"message:277560","revisionNum":1,"uid":277560,"depth":0,"board":{"__ref":"Tkb:board:codeshare"},"author":{"__ref":"User:user:354560"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":"","introduction":"","metrics":{"__typename":"MessageMetrics","views":306},"postTime":"2015-03-09T14:07:17.000-07:00","lastPublishTime":"2015-03-09T14:07:17.000-07:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" Problem this snippet solves: This is a script will generate a report of all or some of the certificates managed by a BIG-IP. It will output a multitude of information including: subject and issuers properties, serial, public key bit-length, and expiration dates. How to use this snippet: Requirements \n Ruby Ruby Gems F5 iControl for Ruby library (http://devcentral.f5.com/Tutorials/TechTips/tabid/63/articleType/ArticleView/articleId/1086421/Getting-Started-With-Ruby-and-iControl.aspx) other dependencies will be installed with the iControl gem \n Installation Steps \n \nInstall Ruby, Ruby's OpenSSL library, Ruby Gems, and the Ruby iControl libraries\n http://devcentral.f5.com/Tutorials/TechTips/tabid/63/articleType/ArticleView/articleId/1086421/Getting-Started-With-Ruby-and-iControl.aspx \n Copy this code to /usr/local/bin and chmod +x to make the script executable \nRun it!\n ssl-certificate-report.rb -b 192.168.1.245 -u admin -p admin -v \n Code : #!/usr/bin/ruby\n\nrequire \"rubygems\"\nrequire \"f5-icontrol\"\nrequire \"getoptlong\"\n\noptions = GetoptLong.new(\n [ \"--bigip-address\", \"-b\", GetoptLong::REQUIRED_ARGUMENT ],\n [ \"--bigip-user\", \"-u\", GetoptLong::REQUIRED_ARGUMENT ],\n [ \"--bigip-pass\", \"-p\", GetoptLong::REQUIRED_ARGUMENT ],\n [ \"--cert-name\", \"-n\", GetoptLong::OPTIONAL_ARGUMENT ],\n [ \"--cert-list\", \"-l\", GetoptLong::NO_ARGUMENT ],\n [ \"--watermark-days\", \"-d\", GetoptLong::OPTIONAL_ARGUMENT ],\n [ \"--no-color\", \"-c\", GetoptLong::NO_ARGUMENT ],\n [ \"--verbose\", \"-v\", GetoptLong::OPTIONAL_ARGUMENT ],\n [ \"--help\", \"-h\", GetoptLong::NO_ARGUMENT ]\n)\n\ndef usage\n puts $0 + \" -b -u \"\n puts \" -b (--bigip-address) BIG-IP management-accessible address\"\n puts \" -u (--bigip-user) BIG-IP username\"\n puts \" -p (--bigip-pass) BIG-IP password (will prompt if left blank\"\n puts \" -n (--cert-name) name of certificate to display (display all by default)\"\n puts \" -l (--cert-list) list of certificates managed by the BIG-IP\"\n puts \" -d (--watermark-days) certificates expiring inside this number of days will\"\n puts \" be marked as \\\"expiring soon\\\", default is 30 days\"\n puts \" -c (--no-color) disable color coding for the shell (useful if piping\"\n puts \" output to less or are using Windows)\"\n puts \" -v (--verbose) show all certificate information (brief by default)\"\n puts \" -h (--help) shows this help/usage dialog\"\n\n exit\nend\n\n# initial parameter values\n\nbigip_address = ''\nbigip_user = ''\nbigip_pass = ''\ncert_name = ''\ncert_list = false\nwatermark_days = 30\nverbose = false\n\n# the color_code variable must be global to be read within the format_text method\n\n$color_code = true\n\noptions.each do |option, arg|\n case option\n when \"--bigip-address\"\n bigip_address = arg\n when \"--bigip-user\"\n bigip_user = arg\n when \"--bigip-pass\"\n bigip_pass = arg\n when \"--cert-name\"\n cert_name = arg\n when \"--cert-list\"\n cert_list = true\n when \"--watermark-days\"\n arg = arg.to_i\n watermark_days = arg\n when \"--no-color\"\n $color_code = false\n when \"--verbose\"\n verbose = true\n when \"--help\"\n usage\n end\nend\n\nusage if bigip_address.empty? or bigip_user.empty?\n\nif bigip_pass.empty?\n puts \"Please enter the BIG-IPs password...\"\n print \"Password: \"\n system(\"stty\", \"-echo\")\n bigip_pass = gets.chomp\n system(\"stty\", \"echo\")\nend\n\nbigip = F5::IControl.new(bigip_address, bigip_user, bigip_pass, [\"Management.KeyCertificate\"]).get_interfaces\n\ndef format_text(text, code)\n if $color_code\n \"#{code}#{text}\\e[00m\"\n else\n text\n end\nend\n\ndef red(text)\n format_text(text, \"\\e[01;31m\")\nend\n\ndef green(text)\n format_text(text, \"\\e[01;32m\")\nend\n\ndef yellow(text)\n format_text(text, \"\\e[01;33m\")\nend\n\ndef bold(text)\n format_text(text, \"\\e[1m\")\nend\n\ndef underline(text)\n format_text(text, \"\\e[4m\")\nend\n\ndef bold_underline(text)\n format_text(text, \"\\e[4;1m\")\nend\n\ndef cert_validity_label(expire_text)\n case expire_text\n when \"VTYPE_CERTIFICATE_VALID\"\n green(\"valid\")\n when \"VTYPE_CERTIFICATE_EXPIRED\"\n red(\"expired\")\n when \"VTYPE_CERTIFICATE_WILL_EXPIRE\"\n yellow(\"expiring soon\")\n when \"VTYPE_CERTIFICATE_INVALID\"\n red(\"invalid\")\n else\n yellow(\"unknown\")\n end\nend\n\ndef key_strength_label(key_length)\n case(key_length)\n when 0..1023\n red(\"low\")\n when 1024..2047\n yellow(\"medium\")\n else\n green(\"strong\")\n end\nend\n\ndef key_type_label(key_type)\n case key_type\n when \"KTYPE_RSA_PRIVATE\"\n \"RSA private key\"\n when \"KTYPE_RSA_PUBLIC\"\n \"RSA public key\"\n when \"KTYPE_DSA_PRIVATE\"\n \"DSA private key\"\n when \"KTYPE_DSA_PUBLIC\"\n \"DSA public key\"\n else\n \"Unkown\"\n end\nend\n\n# collect certificate properties\n\ncerts = {}\n\nbigip[\"Management.KeyCertificate\"].get_certificate_list(\"MANAGEMENT_MODE_DEFAULT\").each do |cert|\n id = cert['certificate']['cert_info']['id']\n\n certs[id] = {}\n\n # general properties\n\n certs[id]['expires'] = Time.at(cert['certificate']['expiration_date']).strftime(\"%b %e, %Y\")\n certs[id]['version'] = cert['certificate']['version']\n certs[id]['serial'] = cert['certificate']['serial_number']\n certs[id]['serial'] = 'unavailable' if certs[id]['serial'].empty?\n\n # subject and issuers properties\n\n ['subject', 'issuer'].each do |x|\n certs[id][x] = {}\n ['common_name', 'organization_name', 'division_name', 'locality_name', 'state_name', 'country_name'].each do |y|\n\n certs[id][x][y] = cert['certificate'][x][y]\n end\n end\n\n certs[id]['key'] = {}\n certs[id]['key']['length'] = cert['certificate']['bit_length']\n certs[id]['key']['length_text'] = key_strength_label(cert['certificate']['bit_length'].to_i)\n certs[id]['key']['type'] = key_type_label(cert['certificate']['key_type'])\nend\n\n# collect certificate validity information\n\nvalidity_states = bigip[\"Management.KeyCertificate\"].certificate_check_validity('MANAGEMENT_MODE_DEFAULT', certs.keys, ([watermark_days] * certs.keys.size))\n\nx = 0\n\ncerts.each do |id,cert|\n cert['expire_text'] = cert_validity_label(validity_states[x])\n x += 1\nend\n\n# display BIG-IP information\n\nputs bold(\"\\nConnected to BIG-IP at #{bigip_address} with user '#{bigip_user}'...\")\n\n# if user only wants list, display it and exit\n\nif cert_list\n puts\n puts underline(\"Available certificates\\n\")\n puts certs.keys.sort.collect { |id| id = \" \" + id }\n puts\n exit\nend\n\nunless cert_name.empty?\n if certs.key? cert_name\n certs = { cert_name => certs[cert_name] }\n else\n puts \"Error: could not locate a certificate by that name, try '-l' for a list\"\n exit\n end\nend\n\nputs bold_underline(\" \" * 80)\nputs\n\ncerts.keys.sort.each do |id|\n puts underline(\"General Properties\")\n puts \"\\t\" + bold(\"Name: \") + id\n puts \"\\t\" + bold(\"Certificate Subject(s): \") + certs[id]['subject']['common_name'] + \", \" + certs[id]['subject']['organization_name'] + \"\\n\\n\"\n\n puts underline(\"Certificate Properties\")\n puts \"\\t\" + bold(\"Expires: \\t\") + certs[id]['expires'] + \" (\" + certs[id]['expire_text'] + \")\"\n\n puts \"\\t\" + bold(\"Version: \\t\") + certs[id]['version'].to_s\n puts \"\\t\" + bold(\"Serial: \\t\") + certs[id]['serial']\n\n if verbose\n ['subject', 'issuer'].each do |section|\n puts \"\\t\" + bold(section.capitalize) + \":\"\n\n subsections = { 'Common Name' => 'common_name', \\\n 'Organization' => 'organization_name', \\\n 'Division' => 'division_name', \\\n 'Locality' => 'locality_name', \\\n 'State (Prov)' => 'state_name', \\\n 'Country' => 'country_name' } \\\n\n subsections.each do |key, subsection|\n puts \"\\t\\t\\t\" + key + \": \\t\" + certs[id][section][subsection] unless certs[id][section][subsection].empty?\n end\n end\n\n puts\n end\n\n puts underline(\"Public Key Properties\")\n puts \"\\t\" + bold(\"Key Type: \") + certs[id]['key']['type']\n puts \"\\t\" + bold(\"Size: \") + certs[id]['key']['length'].to_s + \" (\" + certs[id]['key']['length_text'] + \")\"\n\n puts\n puts bold_underline(\" \" * 80)\n puts\nend ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"8108","kudosSumWeight":0,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"videos":{"__typename":"VideoConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}}},"Conversation:conversation:277904":{"__typename":"Conversation","id":"conversation:277904","topic":{"__typename":"TkbTopicMessage","uid":277904},"lastPostingActivityTime":"2015-03-09T13:52:46.000-07:00","solved":false},"TkbTopicMessage:message:277904":{"__typename":"TkbTopicMessage","subject":"Ruby Web Accelerator Policy Switcher Class","conversation":{"__ref":"Conversation:conversation:277904"},"id":"message:277904","revisionNum":1,"uid":277904,"depth":0,"board":{"__ref":"Tkb:board:codeshare"},"author":{"__ref":"User:user:2693"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":"","introduction":"","metrics":{"__typename":"MessageMetrics","views":293},"postTime":"2015-03-09T13:52:46.000-07:00","lastPublishTime":"2015-03-09T13:52:46.000-07:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" Problem this snippet solves: The WAPolicySwitcher class will connect to two BIG-IPs and allow for Web Accelerator application policies to be added and removed from a Web Accelerator. In our testing, we use this class to adjust how the web accelerator is dealing with traffic. \n Important: This class must be called from within a Ruby program. \n Configuration \n The following files need to be changed: \n Edit the bigip-config.ylm and bigip2-config.ylm files to include the addresses and credentials for the two BIG-IPs. Edit the WebAccelerator.Applications.wsdl and WebAccelerator.Applications2.wsdl files to include the correct IP addresses for the two BIG-IPs. (4th to last line in each file) How to use this snippet: Methods: \n deleteAppPolicy \n Requires the name of the application to delete. \n createPolicy \n Takes the name for the application, the local policy name, the remote policy name, and a list of domain names to use for the application. \n makePolicySymmetric \n Takes the name for the application, a single policy name, and a list of one or more host domain names to use for the application. Calls createPolicy. Will use the specified policy for both the local and remote policies. \n makePolicyAsymmetric \n Takes the name for the application, a single policy name, and a list of one or more host domain names to use for the application. Calls createPolicy. Will use the specified policy for the local policy and “Symmetric Deployment” for the remote policy. Code : # missing file ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"1503","kudosSumWeight":0,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"videos":{"__typename":"VideoConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}}},"CachedAsset:text:en_US-components/community/Navbar-1745595728815":{"__typename":"CachedAsset","id":"text:en_US-components/community/Navbar-1745595728815","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-1745595728815":{"__typename":"CachedAsset","id":"text:en_US-components/community/NavbarHamburgerDropdown-1745595728815","value":{"hamburgerLabel":"Side Menu"},"localOverride":false},"CachedAsset:text:en_US-components/community/BrandLogo-1745595728815":{"__typename":"CachedAsset","id":"text:en_US-components/community/BrandLogo-1745595728815","value":{"logoAlt":"Khoros","themeLogoAlt":"Brand Logo"},"localOverride":false},"CachedAsset:text:en_US-components/community/NavbarTextLinks-1745595728815":{"__typename":"CachedAsset","id":"text:en_US-components/community/NavbarTextLinks-1745595728815","value":{"more":"More"},"localOverride":false},"CachedAsset:text:en_US-components/authentication/AuthenticationLink-1745595728815":{"__typename":"CachedAsset","id":"text:en_US-components/authentication/AuthenticationLink-1745595728815","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-1745595728815":{"__typename":"CachedAsset","id":"text:en_US-components/nodes/NodeLink-1745595728815","value":{"place":"Place {name}"},"localOverride":false},"CachedAsset:text:en_US-components/tags/TagSubscriptionAction-1745595728815":{"__typename":"CachedAsset","id":"text:en_US-components/tags/TagSubscriptionAction-1745595728815","value":{"success.follow.title":"Following Tag","success.unfollow.title":"Unfollowed Tag","success.follow.message.followAcrossCommunity":"You will be notified when this tag is used anywhere across the community","success.unfollowtag.message":"You will no longer be notified when this tag is used anywhere in this place","success.unfollowtagAcrossCommunity.message":"You will no longer be notified when this tag is used anywhere across the community","unexpected.error.title":"Error - Action Failed","unexpected.error.message":"An unidentified problem occurred during the action you took. Please try again later.","buttonTitle":"{isSubscribed, select, true {Unfollow} false {Follow} other{}}","unfollow":"Unfollow"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/common/QueryHandler-1745595728815":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/QueryHandler-1745595728815","value":{"title":"Query Handler"},"localOverride":false},"CachedAsset:text:en_US-components/community/NavbarDropdownToggle-1745595728815":{"__typename":"CachedAsset","id":"text:en_US-components/community/NavbarDropdownToggle-1745595728815","value":{"ariaLabelClosed":"Press the down arrow to open the menu"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageListTabs-1745595728815":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageListTabs-1745595728815","value":{"mostKudoed":"{value, select, IDEA {Most Votes} other {Most Likes}}","mostReplies":"Most Replies","mostViewed":"Most Viewed","newest":"{value, select, IDEA {Newest Ideas} OCCASION {Newest Events} other {Newest Topics}}","newestOccasions":"Newest Events","mostRecent":"Most Recent","noReplies":"No Replies Yet","noSolutions":"No Solutions Yet","solutions":"Solutions","mostRecentUserContent":"Most Recent","trending":"Trending","draft":"Drafts","spam":"Spam","abuse":"Abuse","moderation":"Moderation","tags":"Tags","PAST":"Past","UPCOMING":"Upcoming","sortBymostRecent":"Sort By Most Recent","sortBymostRecentUserContent":"Sort By Most Recent","sortBymostKudoed":"Sort By Most Likes","sortBymostReplies":"Sort By Most Replies","sortBymostViewed":"Sort By Most Viewed","sortBynewest":"Sort By Newest Topics","sortBynewestOccasions":"Sort By Newest Events","otherTabs":" Messages list in the {tab} for {conversationStyle}","guides":"Guides","archives":"Archives"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageView/MessageViewInline-1745595728815":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageView/MessageViewInline-1745595728815","value":{"bylineAuthor":"{bylineAuthor}","bylineBoard":"{bylineBoard}","anonymous":"Anonymous","place":"Place {bylineBoard}","gotoParent":"Go to parent {name}"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/common/Pager/PagerLoadMore-1745595728815":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/Pager/PagerLoadMore-1745595728815","value":{"loadMore":"Show More"},"localOverride":false},"CachedAsset:text:en_US-components/customComponent/CustomComponent-1745595728815":{"__typename":"CachedAsset","id":"text:en_US-components/customComponent/CustomComponent-1745595728815","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-shared/client/components/common/OverflowNav-1745595728815":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/OverflowNav-1745595728815","value":{"toggleText":"More"},"localOverride":false},"CachedAsset:text:en_US-components/users/UserLink-1745595728815":{"__typename":"CachedAsset","id":"text:en_US-components/users/UserLink-1745595728815","value":{"authorName":"View Profile: {author}","anonymous":"Anonymous"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageSubject-1745595728815":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageSubject-1745595728815","value":{"noSubject":"(no subject)"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageBody-1745595728815":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageBody-1745595728815","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/MessageTime-1745595728815":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageTime-1745595728815","value":{"postTime":"Published: {time}","lastPublishTime":"Last Update: {time}","conversation.lastPostingActivityTime":"Last posting activity time: {time}","conversation.lastPostTime":"Last post time: {time}","moderationData.rejectTime":"Rejected time: {time}"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/nodes/NodeIcon-1745595728815":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/nodes/NodeIcon-1745595728815","value":{"contentType":"Content Type {style, select, FORUM {Forum} BLOG {Blog} TKB {Knowledge Base} IDEA {Ideas} OCCASION {Events} other {}} icon"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageUnreadCount-1745595728815":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageUnreadCount-1745595728815","value":{"unread":"{count} unread","comments":"{count, plural, one { unread comment} other{ unread comments}}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageViewCount-1745595728815":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageViewCount-1745595728815","value":{"textTitle":"{count, plural,one {View} other{Views}}","views":"{count, plural, one{View} other{Views}}"},"localOverride":false},"CachedAsset:text:en_US-components/kudos/KudosCount-1745595728815":{"__typename":"CachedAsset","id":"text:en_US-components/kudos/KudosCount-1745595728815","value":{"textTitle":"{count, plural,one {{messageType, select, IDEA{Vote} other{Like}}} other{{messageType, select, IDEA{Votes} other{Likes}}}}","likes":"{count, plural, one{like} other{likes}}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageRepliesCount-1745595728815":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageRepliesCount-1745595728815","value":{"textTitle":"{count, plural,one {{conversationStyle, select, IDEA{Comment} OCCASION{Comment} other{Reply}}} other{{conversationStyle, select, IDEA{Comments} OCCASION{Comments} other{Replies}}}}","comments":"{count, plural, one{Comment} other{Comments}}"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/users/UserAvatar-1745595728815":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/users/UserAvatar-1745595728815","value":{"altText":"{login}'s avatar","altTextGeneric":"User's avatar"},"localOverride":false}}}},"page":"/tags/TagPage/TagPage","query":{"nodeId":"board:codeshare","tagName":"ruby"},"buildId":"ISAhs0UxT148eG089lpQq","runtimeConfig":{"buildInformationVisible":false,"logLevelApp":"info","logLevelMetrics":"info","openTelemetryClientEnabled":false,"openTelemetryConfigName":"f5","openTelemetryServiceVersion":"25.3.0","openTelemetryUniverse":"prod","openTelemetryCollector":"http://localhost:4318","openTelemetryRouteChangeAllowedTime":"5000","apolloDevToolsEnabled":false,"inboxMuteWipFeatureEnabled":false},"isFallback":false,"isExperimentalCompile":false,"dynamicIds":["./components/customComponent/CustomComponent/CustomComponent.tsx","./components/community/Navbar/NavbarWidget.tsx","./components/community/Breadcrumb/BreadcrumbWidget.tsx","./components/tags/TagsHeaderWidget/TagsHeaderWidget.tsx","./components/messages/MessageListForNodeByRecentActivityWidget/MessageListForNodeByRecentActivityWidget.tsx","./components/tags/TagSubscriptionAction/TagSubscriptionAction.tsx","./components/customComponent/CustomComponentContent/TemplateContent.tsx","../shared/client/components/common/List/ListGroup/ListGroup.tsx","./components/messages/MessageView/MessageView.tsx","./components/messages/MessageView/MessageViewInline/MessageViewInline.tsx","../shared/client/components/common/Pager/PagerLoadMore/PagerLoadMore.tsx","./components/customComponent/CustomComponentContent/HtmlContent.tsx","./components/customComponent/CustomComponentContent/CustomComponentScripts.tsx"],"appGip":true,"scriptLoader":[]}