func()

in providers/ibm/ibm_kp.go [100:176]


func (g *KPGenerator) InitResources() error {
	region := g.Args["region"].(string)
	bmxConfig := &bluemix.Config{
		BluemixAPIKey: os.Getenv("IC_API_KEY"),
	}
	sess, err := session.New(bmxConfig)
	if err != nil {
		return err
	}

	catalogClient, err := catalog.New(sess)
	if err != nil {
		return err
	}

	controllerClient, err := controllerv2.New(sess)
	if err != nil {
		return err
	}

	serviceID, err := catalogClient.ResourceCatalog().FindByName("kms", true)
	if err != nil {
		return err
	}
	query := controllerv2.ServiceInstanceQuery{
		ServiceID: serviceID[0].ID,
	}
	kpInstances, err := controllerClient.ResourceServiceInstanceV2().ListInstances(query)
	if err != nil {
		return err
	}
	kpurl := fmt.Sprintf("https://%s.kms.cloud.ibm.com", region)
	options := kp.ClientConfig{
		BaseURL: envFallBack([]string{"IBMCLOUD_KP_API_ENDPOINT"}, kpurl),
		APIKey:  os.Getenv("IC_API_KEY"),
		Verbose: kp.VerboseFailOnly,
	}

	client, err := kp.New(options, kp.DefaultTransport())
	if err != nil {
		return err
	}
	fnObjt := g.loadKP()
	for _, kpInstance := range kpInstances {
		g.Resources = append(g.Resources, fnObjt(kpInstance.ID, kpInstance.Name))
		resourceName := g.Resources[len(g.Resources)-1:][0].ResourceName
		client.Config.InstanceID = kpInstance.Guid

		output, err := client.GetKeys(context.Background(), 100, 0)
		if err != nil {
			return err
		}

		fnObjt := g.loadkPKeys()
		for _, key := range output.Keys {
			var dependsOn []string
			dependsOn = append(dependsOn,
				"ibm_resource_instance."+resourceName)
			g.Resources = append(g.Resources, fnObjt(key.CRN, key.Name, dependsOn))
			resourceName := g.Resources[len(g.Resources)-1:][0].ResourceName

			fnObjt := g.loadkPKeyAliases()
			dependsOn = append(dependsOn,
				"ibm_kms_key."+resourceName)
			for _, alias := range key.Aliases {
				g.Resources = append(g.Resources, fnObjt(key.CRN, alias, dependsOn))
			}

			policies, _ := client.GetPolicies(context.Background(), key.ID)
			funObjt := g.loadKpKeyPolicies()
			for range policies {
				g.Resources = append(g.Resources, funObjt(key.CRN, dependsOn))
			}
		}
	}
	return nil
}