def StepMain(Framework): logger.debug('Start dependency mapping') # get result from workflow state workflowState = Framework.getWorkflowState() searchResult = workflowState.getProperty(DependenciesDiscoveryConsts.DEPENDENCIES_DISCOVERY_RESULT) oshv = ObjectStateHolderVector() dependencyCount = 0 if searchResult: providerServiceOsh = None providerDeployable = searchResult.getProviderDeployable() if providerDeployable: providerServiceOsh = providerDeployable.getDeployable() if providerServiceOsh: logger.debug('The search result does not contain a provider object, generate one from destination data instead') triggerId = Framework.getCurrentDestination().getId() providerType = Framework.getDestinationAttribute('PROVIDERTYPE') providerServiceOsh = ObjectStateHolder(providerType, CmdbObjectID.Factory.restoreObjectID(triggerId)) moreProviderOshs = createOtherProviderOshsIfNeed(Framework) for index in range(0, searchResult.size()): deployable = searchResult.get(index) deployableOsh = deployable.getDeployable() if providerServiceOsh.compareTo(deployableOsh): dependencyNames = [] references = [] for dependency in deployable.getDependencies(): dependencyName = dependency.getDependencyName() variables = dependency.getExportVariables() logger.debug('%s export variables found by dependency %s' % (variables.size(), dependencyName)) dependencyNames.append(dependencyName) for var in variables: varName = var.getName() values = var.getValues() logger.debug('Variable %s:%s' % (varName, values)) if varName.lower() == REFERENCES: references += list(values) reference = references and ','.join(references) logger.debug('Found %s link from %s(%s) to %s(%s) by dependency [%s] with reference %s' % ( CONSUMER_PROVIDER_LINK_TYPE, deployableOsh.getObjectClass(), deployableOsh.getCmdbId(), providerServiceOsh.getObjectClass(), providerServiceOsh.getCmdbId(), '/'.join(dependencyNames), reference)) consumerProviderLink = modeling.createLinkOSH(CONSUMER_PROVIDER_LINK_TYPE, deployableOsh, providerServiceOsh) if reference: consumerProviderLink.setAttribute(REFERENCES, reference) oshv.add(consumerProviderLink) dependencyCount += 1 for otherProviderOsh in moreProviderOshs: oshv.add(modeling.createLinkOSH(CONSUMER_PROVIDER_LINK_TYPE, deployableOsh, otherProviderOsh)) else: logger.debug('Ignore self link found on %s(%s)' % (deployableOsh.getObjectClass(), deployableOsh.getCmdbId())) logger.debug('%s consumer-provider link(s) found' % dependencyCount) if dependencyCount: Framework.sendObjects(oshv) Framework.flushObjects() logger.debug("Finished sending results")
def StepMain(Framework): logger.debug('Start dependency mapping') # get result from workflow state workflowState = Framework.getWorkflowState() searchResult = workflowState.getProperty( DependenciesDiscoveryConsts.DEPENDENCIES_DISCOVERY_RESULT) oshv = ObjectStateHolderVector() dependencyCount = 0 if searchResult: providerServiceOsh = None providerDeployable = searchResult.getProviderDeployable() if providerDeployable: providerServiceOsh = providerDeployable.getDeployable() if providerServiceOsh: logger.debug( 'The search result does not contain a provider object, generate one from destination data instead' ) triggerId = Framework.getCurrentDestination().getId() providerType = Framework.getDestinationAttribute('PROVIDERTYPE') providerServiceOsh = ObjectStateHolder( providerType, CmdbObjectID.Factory.restoreObjectID(triggerId)) moreProviderOshs = createOtherProviderOshsIfNeed(Framework) for index in range(0, searchResult.size()): deployable = searchResult.get(index) deployableOsh = deployable.getDeployable() if providerServiceOsh.compareTo(deployableOsh): dependencyNames = [] references = [] for dependency in deployable.getDependencies(): dependencyName = dependency.getDependencyName() variables = dependency.getExportVariables() logger.debug('%s export variables found by dependency %s' % (variables.size(), dependencyName)) dependencyNames.append(dependencyName) for var in variables: varName = var.getName() values = var.getValues() logger.debug('Variable %s:%s' % (varName, values)) if varName.lower() == REFERENCES: references += list(values) reference = references and ','.join(references) logger.debug( 'Found %s link from %s(%s) to %s(%s) by dependency [%s] with reference %s' % (CONSUMER_PROVIDER_LINK_TYPE, deployableOsh.getObjectClass(), deployableOsh.getCmdbId(), providerServiceOsh.getObjectClass(), providerServiceOsh.getCmdbId(), '/'.join(dependencyNames), reference)) consumerProviderLink = modeling.createLinkOSH( CONSUMER_PROVIDER_LINK_TYPE, deployableOsh, providerServiceOsh) if reference: consumerProviderLink.setAttribute(REFERENCES, reference) oshv.add(consumerProviderLink) dependencyCount += 1 for otherProviderOsh in moreProviderOshs: oshv.add( modeling.createLinkOSH(CONSUMER_PROVIDER_LINK_TYPE, deployableOsh, otherProviderOsh)) else: logger.debug('Ignore self link found on %s(%s)' % (deployableOsh.getObjectClass(), deployableOsh.getCmdbId())) logger.debug('%s consumer-provider link(s) found' % dependencyCount) if dependencyCount: Framework.sendObjects(oshv) Framework.flushObjects() logger.debug("Finished sending results")