def Run(self, args): """See base class.""" release_track = self.ReleaseTrack() project = properties.VALUES.core.project.GetOrFail() guest_policy_uri_path = osconfig_command_utils.GetGuestPolicyUriPath( 'projects', project, args.POLICY_ID) client = osconfig_api_utils.GetClientInstance( release_track, api_version_override='v1beta') service = client.projects_guestPolicies messages = osconfig_api_utils.GetClientMessages( release_track, api_version_override='v1beta') get_request = messages.OsconfigProjectsGuestPoliciesGetRequest( name=guest_policy_uri_path) try: get_response = service.Get(get_request) except apitools_exceptions.HttpNotFoundError: raise ops_agents_exceptions.PolicyNotFoundError( policy_id=args.POLICY_ID) if not guest_policy_validator.IsOpsAgentPolicy(get_response): raise ops_agents_exceptions.PolicyNotFoundError( policy_id=args.POLICY_ID) try: ops_agents_policy = to_ops_agents.ConvertGuestPolicyToOpsAgentPolicy( get_response) except calliope_exceptions.BadArgumentException: raise ops_agents_exceptions.PolicyMalformedError( policy_id=args.POLICY_ID) return ops_agents_policy
def testConvertGuestPolicyToOpsAgentPolicyNonJsonObjDescription_Raises(self): description_json_array = '[]' self.guest_policy.description = description_json_array with self.assertRaisesRegex( exceptions.BadArgumentException, 'description field is not a JSON object.'): converter.ConvertGuestPolicyToOpsAgentPolicy(self.guest_policy)
def Run(self, args): """See base class.""" release_track = self.ReleaseTrack() client = osconfig_api_utils.GetClientInstance( release_track, api_version_override='v1beta') messages = osconfig_api_utils.GetClientMessages( release_track, api_version_override='v1beta') ops_agents_policy = agent_policy.CreateOpsAgentPolicy( args.description, args.agent_rules, args.group_labels, args.os_types, args.zones, args.instances) validator.ValidateOpsAgentsPolicy(ops_agents_policy) guest_policy = to_guest_policy.ConvertOpsAgentPolicyToGuestPolicy( messages, ops_agents_policy) project = properties.VALUES.core.project.GetOrFail() parent_path = osconfig_command_utils.GetProjectUriPath(project) request = messages.OsconfigProjectsGuestPoliciesCreateRequest( guestPolicy=guest_policy, guestPolicyId=args.POLICY_ID, parent=parent_path, ) service = client.projects_guestPolicies complete_guest_policy = service.Create(request) ops_agents_policy = to_ops_agents.ConvertGuestPolicyToOpsAgentPolicy( complete_guest_policy) return ops_agents_policy
def testConvertGuestPolicyToOpsAgentPolicyNonJsonDescription_Raises(self): description_missing_quote = '{type": "ops-agents}' self.guest_policy.description = description_missing_quote with self.assertRaisesRegex( exceptions.BadArgumentException, 'description field is not a JSON object: .*'): converter.ConvertGuestPolicyToOpsAgentPolicy(self.guest_policy)
def testConvertGuestPolicyToOpsAgentPolicyMissingKeyAgentRules_Raises(self): agent_rules_key_missing = ( '{"type": "ops-agents","description": "some desc"}') self.guest_policy.description = agent_rules_key_missing with self.assertRaisesRegex( exceptions.BadArgumentException, 'missing a required key agentRules:.*'): converter.ConvertGuestPolicyToOpsAgentPolicy(self.guest_policy)
def testConvertGuestPolicyToOpsAgentPolicyMissingKeyDescription_Raises(self): description_key_missing = ( '{"type": "ops-agents", "agentRules": [{"enableAutoupgrade": true, ' '"type": "logging", "version": "1.6.35-1"}]}') self.guest_policy.description = description_key_missing with self.assertRaisesRegex( exceptions.BadArgumentException, 'missing a required key description:.*'): converter.ConvertGuestPolicyToOpsAgentPolicy(self.guest_policy)
def testConvertGuestPolicyToOpsAgentPolicyMissingField_Raises(self): agent_rules_missing_package_state_field = ( '{"type": "ops-agents","description": "some desc","agentRules": ' '[{"enableAutoupgrade": true, "type": "logging", "version": ' '"1.6.35-1"}]}') self.guest_policy.description = agent_rules_missing_package_state_field with self.assertRaisesRegex( exceptions.BadArgumentException, 'agent rule specification .* missing a required key.*packageState'): converter.ConvertGuestPolicyToOpsAgentPolicy(self.guest_policy)
def Run(self, args): """See base class.""" release_track = self.ReleaseTrack() client = osconfig_api_utils.GetClientInstance( release_track, api_version_override='v1beta') messages = osconfig_api_utils.GetClientMessages( release_track, api_version_override='v1beta') project = properties.VALUES.core.project.GetOrFail() request = messages.OsconfigProjectsGuestPoliciesGetRequest( name=osconfig_command_utils.GetGuestPolicyUriPath( 'projects', project, args.POLICY_ID)) service = client.projects_guestPolicies current_guest_policy = service.Get(request) current_ops_agents_policy = guest_policy_to_ops_agents_policy_converter.ConvertGuestPolicyToOpsAgentPolicy( current_guest_policy) updated_ops_agents_policy = ops_agents_policy.UpdateOpsAgentsPolicy( current_ops_agents_policy, args.description, args.etag, args.agent_rules, args.os_types, [] if args.clear_group_labels else args.group_labels, [] if args.clear_zones else args.zones, [] if args.clear_instances else args.instances) ops_agents_policy_validator.ValidateOpsAgentsPolicy( updated_ops_agents_policy) updated_os_config_policy = ops_agents_policy_to_guest_policy_converter.ConvertOpsAgentPolicyToGuestPolicy( messages, updated_ops_agents_policy, current_guest_policy.recipes) request = messages.OsconfigProjectsGuestPoliciesPatchRequest( guestPolicy=updated_os_config_policy, name=osconfig_command_utils.GetGuestPolicyUriPath( 'projects', project, args.POLICY_ID), updateMask=None, ) complete_os_config_policy = service.Patch(request) complete_ops_agent_policy = guest_policy_to_ops_agents_policy_converter.ConvertGuestPolicyToOpsAgentPolicy( complete_os_config_policy) return complete_ops_agent_policy
def Run(self, args): """See base class.""" release_track = self.ReleaseTrack() client = osconfig_api_utils.GetClientInstance( release_track, api_version_override='v1beta') messages = osconfig_api_utils.GetClientMessages( release_track, api_version_override='v1beta') project = properties.VALUES.core.project.GetOrFail() request = messages.OsconfigProjectsGuestPoliciesListRequest( pageSize=args.page_size, parent=osconfig_command_utils.GetProjectUriPath(project), ) service = client.projects_guestPolicies for guest_policy in list_pager.YieldFromList( service, request, limit=args.limit, predicate=guest_policy_validator.IsOpsAgentPolicy, batch_size=osconfig_command_utils.GetListBatchSize(args), field='guestPolicies', batch_size_attribute='pageSize', ): try: yield converter.ConvertGuestPolicyToOpsAgentPolicy(guest_policy) except exceptions.BadArgumentException: log.warning( 'Encountered a malformed policy. The Ops Agents policy [%s] may ' 'have been modified directly by the OS Config guest policy API / ' 'gcloud commands. If so, please delete and re-create with the Ops ' 'Agents policy gcloud commands. If not, this may be an internal ' 'error.', guest_policy.name, ) yield agent_policy.OpsAgentPolicy( assignment=None, agent_rules=None, description='<MALFORMED>', etag=None, name=guest_policy.name, update_time=guest_policy.updateTime, create_time=guest_policy.createTime )
def testConvertGuestPolicyToOpsAgentPolicy(self): actual_ops_agents_policy = converter.ConvertGuestPolicyToOpsAgentPolicy( self.guest_policy) self.assertEqual(self.expected_ops_agents_policy, actual_ops_agents_policy)