github.com/cloudfoundry-community/cloudfoundry-cli@v6.44.1-0.20240130060226-cda5ed8e89a5+incompatible/actor/v7action/domain.go (about) 1 package v7action 2 3 import ( 4 "code.cloudfoundry.org/cli/resources" 5 "fmt" 6 7 "code.cloudfoundry.org/cli/actor/actionerror" 8 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3" 9 "code.cloudfoundry.org/cli/types" 10 ) 11 12 type Domain resources.Domain 13 14 type SharedOrgs ccv3.SharedOrgs 15 16 func (domain Domain) Shared() bool { 17 return domain.OrganizationGUID == "" 18 } 19 20 func (actor Actor) CreateSharedDomain(domainName string, internal bool) (Warnings, error) { 21 _, warnings, err := actor.CloudControllerClient.CreateDomain(resources.Domain{ 22 Name: domainName, 23 Internal: types.NullBool{IsSet: true, Value: internal}, 24 }) 25 return Warnings(warnings), err 26 } 27 28 func (actor Actor) CreatePrivateDomain(domainName string, orgName string) (Warnings, error) { 29 allWarnings := Warnings{} 30 organization, warnings, err := actor.GetOrganizationByName(orgName) 31 allWarnings = append(allWarnings, warnings...) 32 33 if err != nil { 34 return allWarnings, err 35 } 36 _, apiWarnings, err := actor.CloudControllerClient.CreateDomain(resources.Domain{ 37 Name: domainName, 38 OrganizationGUID: organization.GUID, 39 }) 40 41 actorWarnings := Warnings(apiWarnings) 42 allWarnings = append(allWarnings, actorWarnings...) 43 44 return allWarnings, err 45 } 46 47 func (actor Actor) DeleteSharedDomain(domainName string) (Warnings, error) { 48 allWarnings := Warnings{} 49 domain, warnings, err := actor.GetDomainByName(domainName) 50 allWarnings = append(allWarnings, warnings...) 51 52 if err != nil { 53 return allWarnings, err 54 } 55 56 _, apiWarnings, err := actor.CloudControllerClient.DeleteDomain(domain.GUID) 57 58 actorWarnings := Warnings(apiWarnings) 59 allWarnings = append(allWarnings, actorWarnings...) 60 61 return allWarnings, err 62 } 63 64 func (actor Actor) DeletePrivateDomain(domainName string) (Warnings, error) { 65 allWarnings := Warnings{} 66 domain, warnings, err := actor.GetDomainByName(domainName) 67 68 allWarnings = append(allWarnings, warnings...) 69 70 if err != nil { 71 return allWarnings, err 72 } 73 _, apiWarnings, err := actor.CloudControllerClient.DeleteDomain(domain.GUID) 74 75 actorWarnings := Warnings(apiWarnings) 76 allWarnings = append(allWarnings, actorWarnings...) 77 78 return allWarnings, err 79 } 80 81 func (actor Actor) CheckSharedDomain(domainName string) (Warnings, error) { 82 allWarnings := Warnings{} 83 domain, warnings, err := actor.GetDomainByName(domainName) 84 85 allWarnings = append(allWarnings, warnings...) 86 87 if err != nil { 88 return allWarnings, err 89 } 90 if domain.Shared() { 91 err = fmt.Errorf("Domain '%s' is a shared domain, not a private domain.", domainName) 92 } 93 94 return allWarnings, err 95 } 96 97 func (actor Actor) GetOrganizationDomains(orgGuid string) ([]Domain, Warnings, error) { 98 ccv3Domains, warnings, err := actor.CloudControllerClient.GetOrganizationDomains(orgGuid) 99 100 if err != nil { 101 return nil, Warnings(warnings), err 102 } 103 104 var domains []Domain 105 for _, domain := range ccv3Domains { 106 domains = append(domains, Domain(domain)) 107 } 108 109 return domains, Warnings(warnings), nil 110 } 111 112 func (actor Actor) GetDomainByName(domainName string) (Domain, Warnings, error) { 113 domains, warnings, err := actor.CloudControllerClient.GetDomains( 114 ccv3.Query{Key: ccv3.NameFilter, Values: []string{domainName}}, 115 ) 116 117 if err != nil { 118 return Domain{}, Warnings(warnings), err 119 } 120 121 if len(domains) == 0 { 122 return Domain{}, Warnings(warnings), actionerror.DomainNotFoundError{Name: domainName} 123 } 124 125 return Domain(domains[0]), Warnings(warnings), nil 126 } 127 128 func (actor Actor) SharePrivateDomain(domainName string, orgName string) (Warnings, error) { 129 orgGUID, domainGUID, warnings, err := actor.GetDomainAndOrgGUIDsByName(domainName, orgName) 130 131 if err != nil { 132 return warnings, err 133 } 134 135 apiWarnings, err := actor.CloudControllerClient.SharePrivateDomainToOrgs( 136 domainGUID, 137 ccv3.SharedOrgs{GUIDs: []string{orgGUID}}, 138 ) 139 140 allWarnings := append(warnings, Warnings(apiWarnings)...) 141 142 return allWarnings, err 143 } 144 145 func (actor Actor) UnsharePrivateDomain(domainName string, orgName string) (Warnings, error) { 146 orgGUID, domainGUID, warnings, err := actor.GetDomainAndOrgGUIDsByName(domainName, orgName) 147 148 if err != nil { 149 return warnings, err 150 } 151 152 apiWarnings, err := actor.CloudControllerClient.UnsharePrivateDomainFromOrg( 153 domainGUID, 154 orgGUID, 155 ) 156 157 allWarnings := append(warnings, Warnings(apiWarnings)...) 158 159 return allWarnings, err 160 } 161 162 func (actor Actor) GetDomainAndOrgGUIDsByName(domainName string, orgName string) (string, string, Warnings, error) { 163 org, getOrgWarnings, err := actor.GetOrganizationByName(orgName) 164 165 if err != nil { 166 return "", "", getOrgWarnings, err 167 } 168 169 domain, getDomainWarnings, err := actor.GetDomainByName(domainName) 170 allWarnings := append(getOrgWarnings, getDomainWarnings...) 171 172 if err != nil { 173 return "", "", allWarnings, err 174 } 175 176 return org.GUID, domain.GUID, allWarnings, nil 177 }