1// Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. 2// 3// Example code for Compartments Service API 4// 5 6// This script provides an example on how to move a compartment to a different compartment 7// This script will 8// 9// * create cp_source_GOSDK under tenancy 10// * create cp_target_GOSDK under tenancy 11// * move cp_source_GOSDK under cp_target_GOSDK 12 13package example 14 15import ( 16 "context" 17 "fmt" 18 "log" 19 20 "github.com/oracle/oci-go-sdk/common" 21 "github.com/oracle/oci-go-sdk/example/helpers" 22 "github.com/oracle/oci-go-sdk/identity" 23) 24 25// ExampleMoveCompartment Moves an active compartment under a different parent 26func ExampleMoveCompartment() { 27 c, err := identity.NewIdentityClientWithConfigurationProvider(common.DefaultConfigProvider()) 28 helpers.FatalIfError(err) 29 30 // The OCID of the tenancy containing the compartment. 31 tenancyID, err := common.DefaultConfigProvider().TenancyOCID() 32 helpers.FatalIfError(err) 33 34 ctx := context.Background() 35 cpSource := createCompartment(ctx, c, common.String(tenancyID), common.String("cp_source_GOSDK")) 36 cpTarget := createCompartment(ctx, c, common.String(tenancyID), common.String("cp_target_GOSDK")) 37 38 moveDetail := identity.MoveCompartmentDetails{ 39 TargetCompartmentId: cpTarget, 40 } 41 42 moveRequest := identity.MoveCompartmentRequest{ 43 CompartmentId: cpSource, 44 MoveCompartmentDetails: moveDetail, 45 RequestMetadata: helpers.GetRequestMetadataWithDefaultRetryPolicy(), 46 } 47 48 resp, err := c.MoveCompartment(ctx, moveRequest) 49 helpers.FatalIfError(err) 50 log.Printf("move compartment with workrequest id: %s", *resp.OpcWorkRequestId) 51 fmt.Println("move compartment request is accepted") 52 53 // get cpSource new parent 54 cpSourceNewParent := getCompartment(ctx, c, cpSource).CompartmentId 55 cpSourceNewParentName := getCompartment(ctx, c, cpSourceNewParent).Name 56 57 log.Printf("cp_source_GOSDK new parent is: %v", *cpSourceNewParentName) 58 fmt.Println("move compartment completed") 59 60 // Output: 61 // move compartment request is accepted 62 // move compartment completed 63} 64 65func createCompartment(ctx context.Context, client identity.IdentityClient, tenantId *string, compartmentName *string) *string { 66 detail := identity.CreateCompartmentDetails{ 67 CompartmentId: tenantId, 68 Name: compartmentName, 69 Description: compartmentName, 70 } 71 request := identity.CreateCompartmentRequest{ 72 CreateCompartmentDetails: detail, 73 RequestMetadata: helpers.GetRequestMetadataWithDefaultRetryPolicy(), 74 } 75 76 resp, err := client.CreateCompartment(ctx, request) 77 helpers.FatalIfError(err) 78 79 return resp.Id 80} 81 82func getCompartment(ctx context.Context, client identity.IdentityClient, compartmentId *string) identity.Compartment { 83 request := identity.GetCompartmentRequest{ 84 CompartmentId: compartmentId, 85 RequestMetadata: helpers.GetRequestMetadataWithDefaultRetryPolicy(), 86 } 87 88 resp, err := client.GetCompartment(ctx, request) 89 helpers.FatalIfError(err) 90 91 return resp.Compartment 92} 93