public static void vendAccount()

in src/main/java/software/aws/chatops_lex_api/resource/Util.java [229:297]


    public static void vendAccount(final Map<String, AttributeValue> accountRequest) {
    	
    	//add date to provisioned product name
    	LocalDateTime theDay = LocalDateTime.now().with(TemporalAdjusters.next(DayOfWeek.FRIDAY));
    	DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd-HH-mm");
    	String yyyyMMdd = theDay.format(formatter);
    	
    	
    	Collection<ProvisioningParameter> parameters	=	new ArrayList<>();
    	
    	parameters.add(ProvisioningParameter.builder().key("SSOUserEmail").value(accountRequest.get("UserEmail").s()).build());
    	parameters.add(ProvisioningParameter.builder().key("AccountEmail").value(accountRequest.get("RootEmail").s()).build());
    	parameters.add(ProvisioningParameter.builder().key("SSOUserFirstName").value(accountRequest.get("UserName").s()).build());
    	parameters.add(ProvisioningParameter.builder().key("SSOUserLastName").value(accountRequest.get("UserLastname").s()).build());
    	parameters.add(ProvisioningParameter.builder().key("ManagedOrganizationalUnit").value(accountRequest.get("AccountOU").s()).build());
    	parameters.add(ProvisioningParameter.builder().key("AccountName").value(accountRequest.get("AccountType").s()+"Account."+accountRequest.get("UserEmail").s().substring(0,accountRequest.get("UserEmail").s().indexOf("@")).replaceAll("\\s+","").replace("+", "_")+"."+yyyyMMdd).build());    	
    	

    	String productId	=	null;
    	//search product    	
    	Map<String,Collection<String>> filter = new HashMap<>();
    	Collection<String> values = new ArrayList<>();
    	values.add("AWS Control Tower Account Factory");
    	filter.put("FullTextSearch", values);
    	SearchProductsAsAdminResponse r = AccountVendor.scClient.searchProductsAsAdmin(SearchProductsAsAdminRequest.builder().filtersWithStrings(filter).build());
    	if( r.productViewDetails().size() > 0 ) {
    		
    		productId	=	r.productViewDetails().get(0).productViewSummary().productId();
    		logger.info("Found AWS Control Tower Account Factory with productId: "+productId);
    	}else {
    		logger.info("Could not find product AWS Control Tower Account Factory in the Service Catalog of the AWS Account");
    		logger.info("NOT vending new account. Please fix this and create a new request.");
    		return;
    	}
    	//describe product
    	String artifactId	=	null;
    	DescribeProductAsAdminResponse prodResponse = AccountVendor.scClient.describeProductAsAdmin(DescribeProductAsAdminRequest.builder().id(productId).build());
    	if( prodResponse.provisioningArtifactSummaries().size() > 0) {
    		
    		//always get the latest because it is the most recent version
    		artifactId	=	prodResponse.provisioningArtifactSummaries().get(prodResponse.provisioningArtifactSummaries().size()-1).id();
    		logger.info("AWS Control Tower Account Factory Artifact Id: "+artifactId);
    	}else {
    		logger.info("Could not find artifact id of product id="+productId+" inside Service Catalog of the account");
    	}
    	//get Launch Path
    	String launchPathId	=	null;
    	ListLaunchPathsResponse pathResponse = AccountVendor.scClient.listLaunchPaths(ListLaunchPathsRequest.builder().productId(productId).build());
    	if( pathResponse.launchPathSummaries().size() > 0 ) {
    		
    		launchPathId	=	pathResponse.launchPathSummaries().get(0).id();
    		logger.info("AWS Control Tower Account Factory Launch Path Id: "+launchPathId);
    	}else {
    		logger.info("Could not find launch path for product AWS Control Tower Account Factory ProductId: "+productId);
    	}
    	
    	//provision product using the product id
    	ProvisionProductResponse response =  AccountVendor.scClient.provisionProduct(ProvisionProductRequest.builder()
//    																		.productName("AWS Control Tower Account Factory")
    																		.productId(productId)
    																		.pathId(launchPathId)
    																		.provisionToken(accountRequest.get("UserId").s())
    																		.provisionedProductName(accountRequest.get("AccountType").s()+".Account."+accountRequest.get("UserEmail").s().substring(0,accountRequest.get("UserEmail").s().indexOf("@")).replace("+", "_")+"."+yyyyMMdd)
    																		.provisioningArtifactId(artifactId)
    																		.provisioningParameters(parameters)
    																		.build());
    	    	
    	logger.info("New account vended for user: "+accountRequest.get("UserEmail").s()+" and requestId: "+response.responseMetadata().requestId());
    }