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 testConvertOpsAgentPolicyToGuestPolicyDebian(self): expected_guest_policy = self._CreateGuestPolicyAPT() ops_agents_policy = _CreateOpsAgentPolicy( 'debian', LEGACY_OPS_AGENT_RULE_POLICY_AGENT_RULES) actual_guest_policy = converter.ConvertOpsAgentPolicyToGuestPolicy( self.messages, ops_agents_policy) self._AssertProtoMessageEqual(expected_guest_policy, actual_guest_policy)
def testConvertOpsAgentPolicyToGuestPolicy_PreviousRecipe(self): expected_guest_policy = self._CreateGuestPolicyYUM() ops_agents_policy = _CreateOpsAgentPolicy( 'centos', LEGACY_OPS_AGENT_RULE_POLICY_AGENT_RULES) actual_guest_policy = converter.ConvertOpsAgentPolicyToGuestPolicy( self.messages, ops_agents_policy, expected_guest_policy.recipes) for recipe in expected_guest_policy.recipes: recipe.version = '1' recipe.name = recipe.name.replace('0', '1') self._AssertProtoMessageEqual(expected_guest_policy, actual_guest_policy)
def testConvertOpsAgentPolicyToGuestPolicy_AddNewRecipe(self): expected_guest_policy = self._CreateGuestPolicyYUM() ops_agents_policy = _CreateOpsAgentPolicy( 'centos', LEGACY_OPS_AGENT_RULE_POLICY_AGENT_RULES) actual_guest_policy = converter.ConvertOpsAgentPolicyToGuestPolicy( self.messages, ops_agents_policy, [expected_guest_policy.recipes[0]]) expected_guest_policy.recipes[0].version = '1' expected_guest_policy.recipes[0].name = expected_guest_policy.recipes[ 0].name.replace('0', '1') expected_guest_policy.recipes[1].version = '0' self._AssertProtoMessageEqual(expected_guest_policy, actual_guest_policy)
def testConvertOpsAgentPolicyToGuestPolicyDebianLatest(self): expected_guest_policy = self._CreateGuestPolicyAPT( logging_version='latest', metrics_version='latest', logging_package_suffix='', metrics_package_suffix='') metrics_agent_latest = _CreateMetricsAgentRule(agent_version='latest') logging_agent_latest = _CreateLoggingAgentRule(agent_version='latest') ops_agents_policy = _CreateOpsAgentPolicy( 'debian', [logging_agent_latest, metrics_agent_latest]) actual_guest_policy = converter.ConvertOpsAgentPolicyToGuestPolicy( self.messages, ops_agents_policy) self._AssertProtoMessageEqual(expected_guest_policy, actual_guest_policy)
def testConvertOpsAgentPolicyToGuestPolicyDebianLegacy(self): expected_guest_policy = self._CreateGuestPolicyAPT( metrics_version='5.5.2-1000', metrics_enable_autoupgrade='false', metrics_desired_state='INSTALLED', metrics_package_suffix='=5.5.2-1000*') metrics_agent_latest = _CreateMetricsAgentRule( agent_version='5.5.2-1000', enable_autoupgrade=False) ops_agents_policy = _CreateOpsAgentPolicy( 'debian', [_CreateLoggingAgentRule(), metrics_agent_latest]) actual_guest_policy = converter.ConvertOpsAgentPolicyToGuestPolicy( self.messages, ops_agents_policy) self._AssertProtoMessageEqual(expected_guest_policy, actual_guest_policy)
def testConvertOpsAgentPolicyToGuestPolicyRhel(self): expected_guest_policy = self._CreateGuestPolicyYUM( logging_repo_suffix='-all', metrics_repo_suffix='-all') expected_guest_policy.assignment.osTypes[0].osShortName = 'rhel' expected_guest_policy.assignment.instances = [ 'zones/us-central1-a/instances/rhel7-0', 'zones/us-central1-a/instances/rhel7-1', ] expected_guest_policy.assignment.osTypes[0].osVersion = '7.8' ops_agents_policy = _CreateOpsAgentPolicy( 'rhel', LEGACY_OPS_AGENT_RULE_POLICY_AGENT_RULES) actual_guest_policy = converter.ConvertOpsAgentPolicyToGuestPolicy( self.messages, ops_agents_policy) self._AssertProtoMessageEqual(expected_guest_policy, actual_guest_policy)
def testConvertOpsAgentPolicyToGuestPolicyIntalled(self): expected_guest_policy = self._CreateGuestPolicyYUM( logging_enable_autoupgrade='false', metrics_enable_autoupgrade='false', logging_desired_state='INSTALLED', metrics_desired_state='INSTALLED') metrics_agent = _CreateMetricsAgentRule(agent_version='6.0.0', enable_autoupgrade=False) logging_agent = _CreateLoggingAgentRule(agent_version='1.6.35', enable_autoupgrade=False) ops_agents_policy = _CreateOpsAgentPolicy( 'centos', [logging_agent, metrics_agent]) actual_guest_policy = converter.ConvertOpsAgentPolicyToGuestPolicy( self.messages, ops_agents_policy) self._AssertProtoMessageEqual(expected_guest_policy, actual_guest_policy)
def testConvertOpsAgentPolicyToGuestPolicySlesWildCard(self): expected_guest_policy = self._CreateGuestPolicyZypper( logging_version='1.*.*', metrics_version='6.*.*', logging_repo_suffix='-1', metrics_repo_suffix='-6', logging_package_suffix='<2.*', metrics_package_suffix='<7.*') metrics_agent = _CreateMetricsAgentRule(agent_version='6.*.*') logging_agent = _CreateLoggingAgentRule(agent_version='1.*.*') ops_agents_policy = _CreateOpsAgentPolicy( 'sles', [logging_agent, metrics_agent]) actual_guest_policy = converter.ConvertOpsAgentPolicyToGuestPolicy( self.messages, ops_agents_policy) self._AssertProtoMessageEqual(expected_guest_policy, actual_guest_policy)
def testConvertOpsAgentPolicyToGuestPolicyCentosCurrentMajor(self): expected_guest_policy = self._CreateGuestPolicyYUM( metrics_version='latest', logging_version='1.*.*', logging_repo_suffix='-1', metrics_package_suffix='', logging_package_suffix='-1.*') metrics_agent_latest = _CreateMetricsAgentRule(agent_version='latest') logging_agent_current_major = _CreateLoggingAgentRule( agent_version='current-major') ops_agents_policy = _CreateOpsAgentPolicy( 'centos', [logging_agent_current_major, metrics_agent_latest]) actual_guest_policy = converter.ConvertOpsAgentPolicyToGuestPolicy( self.messages, ops_agents_policy) self.assertEqual( expected_guest_policy, actual_guest_policy, 'Expected guest policy:\n{}\nActual guest policy:\n{}'.format( expected_guest_policy, actual_guest_policy))
def testConvertOpsAgentPolicyToGuestPolicyDebian_UnifiedAgent(self): expected_guest_policy = self._LoadMessage( UNIFIED_AGENT_APT_GUEST_POLICY_YAML.format( ops_agent_enable_autoupgrade='true', ops_agent_package_state='installed', ops_agent_version='1.0.0', ops_agent_desired_state='UPDATED', ops_agent_repo_suffix='-all', etag=ETAG, ops_agent_run_script=OPS_AGENT_RULE_RUN_SCRIPT.format( repo_dir='/etc/apt/sources.list.d', repo_name='google-cloud-ops-agent', additional_install='', cache_dir='/var/cache/apt', package_name='google-cloud-ops-agent', package_manager='apt-get', package_suffix='=1.0.0-1*')), self.messages.GuestPolicy) ops_agents_policy = _CreateOpsAgentPolicy( 'debian', OPS_AGENT_RULE_POLICY_AGENT_RULES) actual_guest_policy = converter.ConvertOpsAgentPolicyToGuestPolicy( self.messages, ops_agents_policy) self._AssertProtoMessageEqual(expected_guest_policy, actual_guest_policy)
def testConvertOpsAgentPolicyToGuestPolicyRemoved(self): expected_guest_policy = self._LoadMessage( YUM_GUEST_POLICY_YAML.format( logging_enable_autoupgrade='false', logging_package_state='removed', logging_version='1.6.35', metrics_enable_autoupgrade='false', metrics_package_state='removed', metrics_version='6.0.0', logging_desired_state='REMOVED', metrics_desired_state='REMOVED', logging_repo_suffix='-all', metrics_repo_suffix='-all', etag=ETAG, logging_run_script=textwrap.dedent("""\ #!/bin/bash echo 'Skipping as the package state is [removed].'"""), metrics_run_script=textwrap.dedent("""\ #!/bin/bash echo 'Skipping as the package state is [removed].'""") ), self.messages.GuestPolicy) metrics_agent = _CreateMetricsAgentRule( agent_version='6.0.0', enable_autoupgrade=False, package_state=agent_policy.OpsAgentPolicy.AgentRule.PackageState. REMOVED) logging_agent = _CreateLoggingAgentRule( agent_version='1.6.35', enable_autoupgrade=False, package_state=agent_policy.OpsAgentPolicy.AgentRule.PackageState. REMOVED) ops_agents_policy = _CreateOpsAgentPolicy( 'centos', [logging_agent, metrics_agent]) actual_guest_policy = converter.ConvertOpsAgentPolicyToGuestPolicy( self.messages, ops_agents_policy) self._AssertProtoMessageEqual(expected_guest_policy, actual_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