github.com/jghiloni/cli@v6.28.1-0.20170628223758-0ce05fe032a2+incompatible/actor/v2action/domain.go (about) 1 package v2action 2 3 import ( 4 "code.cloudfoundry.org/cli/api/cloudcontroller/ccerror" 5 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv2" 6 7 log "github.com/sirupsen/logrus" 8 ) 9 10 // Domain represents a CLI Domain. 11 type Domain ccv2.Domain 12 13 // DomainNotFoundError is an error wrapper that represents the case 14 // when the domain is not found. 15 type DomainNotFoundError struct{} 16 17 // Error method to display the error message. 18 func (_ DomainNotFoundError) Error() string { 19 return "Domain not found." 20 } 21 22 // TODO: Move into own file or add function to CCV2/3 23 func isResourceNotFoundError(err error) bool { 24 _, isResourceNotFound := err.(ccerror.ResourceNotFoundError) 25 return isResourceNotFound 26 } 27 28 // GetDomain returns the shared or private domain associated with the provided 29 // Domain GUID. 30 func (actor Actor) GetDomain(domainGUID string) (Domain, Warnings, error) { 31 var allWarnings Warnings 32 33 domain, warnings, err := actor.GetSharedDomain(domainGUID) 34 allWarnings = append(allWarnings, warnings...) 35 switch err.(type) { 36 case nil: 37 return domain, allWarnings, nil 38 case DomainNotFoundError: 39 default: 40 return Domain{}, allWarnings, err 41 } 42 43 domain, warnings, err = actor.GetPrivateDomain(domainGUID) 44 allWarnings = append(allWarnings, warnings...) 45 switch err.(type) { 46 case nil: 47 return domain, allWarnings, nil 48 default: 49 return Domain{}, allWarnings, err 50 } 51 } 52 53 // GetSharedDomain returns the shared domain associated with the provided 54 // Domain GUID. 55 func (actor Actor) GetSharedDomain(domainGUID string) (Domain, Warnings, error) { 56 if domain, found := actor.loadDomain(domainGUID); found { 57 log.WithFields(log.Fields{ 58 "domain": domain.Name, 59 "GUID": domain.GUID, 60 }).Debug("using domain from cache") 61 return domain, nil, nil 62 } 63 64 domain, warnings, err := actor.CloudControllerClient.GetSharedDomain(domainGUID) 65 if isResourceNotFoundError(err) { 66 return Domain{}, Warnings(warnings), DomainNotFoundError{} 67 } 68 69 actor.saveDomain(domain) 70 return Domain(domain), Warnings(warnings), err 71 } 72 73 // GetPrivateDomain returns the private domain associated with the provided 74 // Domain GUID. 75 func (actor Actor) GetPrivateDomain(domainGUID string) (Domain, Warnings, error) { 76 if domain, found := actor.loadDomain(domainGUID); found { 77 log.WithFields(log.Fields{ 78 "domain": domain.Name, 79 "GUID": domain.GUID, 80 }).Debug("using domain from cache") 81 return domain, nil, nil 82 } 83 84 domain, warnings, err := actor.CloudControllerClient.GetPrivateDomain(domainGUID) 85 if isResourceNotFoundError(err) { 86 return Domain{}, Warnings(warnings), DomainNotFoundError{} 87 } 88 89 actor.saveDomain(domain) 90 return Domain(domain), Warnings(warnings), err 91 } 92 93 // GetOrganizationDomains returns the shared and private domains associated 94 // with an organization. 95 func (actor Actor) GetOrganizationDomains(orgGUID string) ([]Domain, Warnings, error) { 96 var allWarnings Warnings 97 var allDomains []Domain 98 99 domains, warnings, err := actor.CloudControllerClient.GetSharedDomains() 100 allWarnings = append(allWarnings, warnings...) 101 102 if err != nil { 103 return []Domain{}, allWarnings, err 104 } 105 for _, domain := range domains { 106 allDomains = append(allDomains, Domain(domain)) 107 } 108 109 domains, warnings, err = actor.CloudControllerClient.GetOrganizationPrivateDomains(orgGUID, nil) 110 allWarnings = append(allWarnings, warnings...) 111 112 if err != nil { 113 return []Domain{}, allWarnings, err 114 } 115 for _, domain := range domains { 116 allDomains = append(allDomains, Domain(domain)) 117 } 118 119 return allDomains, allWarnings, nil 120 } 121 122 func (actor Actor) saveDomain(domain ccv2.Domain) { 123 if domain.GUID != "" { 124 actor.domainCache[domain.GUID] = Domain(domain) 125 } 126 } 127 128 func (actor Actor) loadDomain(domainGUID string) (Domain, bool) { 129 domain, found := actor.domainCache[domainGUID] 130 return domain, found 131 }