github.com/swisscom/cloudfoundry-cli@v7.1.0+incompatible/cf/commands/service/services.go (about) 1 package service 2 3 import ( 4 "strings" 5 6 "code.cloudfoundry.org/cli/cf/commandregistry" 7 "code.cloudfoundry.org/cli/cf/flags" 8 . "code.cloudfoundry.org/cli/cf/i18n" 9 "code.cloudfoundry.org/cli/plugin/models" 10 11 "code.cloudfoundry.org/cli/cf/api" 12 "code.cloudfoundry.org/cli/cf/configuration/coreconfig" 13 "code.cloudfoundry.org/cli/cf/requirements" 14 "code.cloudfoundry.org/cli/cf/terminal" 15 ) 16 17 type ListServices struct { 18 ui terminal.UI 19 config coreconfig.Reader 20 serviceSummaryRepo api.ServiceSummaryRepository 21 pluginModel *[]plugin_models.GetServices_Model 22 pluginCall bool 23 } 24 25 func init() { 26 commandregistry.Register(&ListServices{}) 27 } 28 29 func (cmd *ListServices) MetaData() commandregistry.CommandMetadata { 30 return commandregistry.CommandMetadata{ 31 Name: "services", 32 ShortName: "s", 33 Description: T("List all service instances in the target space"), 34 Usage: []string{ 35 "CF_NAME services", 36 }, 37 } 38 } 39 40 func (cmd *ListServices) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) ([]requirements.Requirement, error) { 41 usageReq := requirements.NewUsageRequirement(commandregistry.CLICommandUsagePresenter(cmd), 42 T("No argument required"), 43 func() bool { 44 return len(fc.Args()) != 0 45 }, 46 ) 47 48 reqs := []requirements.Requirement{ 49 usageReq, 50 requirementsFactory.NewLoginRequirement(), 51 requirementsFactory.NewTargetedSpaceRequirement(), 52 } 53 54 return reqs, nil 55 } 56 57 func (cmd *ListServices) SetDependency(deps commandregistry.Dependency, pluginCall bool) commandregistry.Command { 58 cmd.ui = deps.UI 59 cmd.config = deps.Config 60 cmd.serviceSummaryRepo = deps.RepoLocator.GetServiceSummaryRepository() 61 cmd.pluginModel = deps.PluginModels.Services 62 cmd.pluginCall = pluginCall 63 return cmd 64 } 65 66 func (cmd *ListServices) Execute(fc flags.FlagContext) error { 67 cmd.ui.Say(T("Getting services in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", 68 map[string]interface{}{ 69 "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), 70 "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), 71 "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), 72 })) 73 74 serviceInstances, err := cmd.serviceSummaryRepo.GetSummariesInCurrentSpace() 75 76 if err != nil { 77 return err 78 } 79 80 cmd.ui.Ok() 81 cmd.ui.Say("") 82 83 if len(serviceInstances) == 0 { 84 cmd.ui.Say(T("No services found")) 85 return nil 86 } 87 88 table := cmd.ui.Table([]string{T("name"), T("service"), T("plan"), T("bound apps"), T("last operation")}) 89 90 for _, instance := range serviceInstances { 91 var serviceColumn string 92 var serviceStatus string 93 94 if instance.IsUserProvided() { 95 serviceColumn = T("user-provided") 96 } else { 97 serviceColumn = instance.ServiceOffering.Label 98 } 99 serviceStatus = InstanceStateToStatus(instance.LastOperation.Type, instance.LastOperation.State, instance.IsUserProvided()) 100 101 table.Add( 102 instance.Name, 103 serviceColumn, 104 instance.ServicePlan.Name, 105 strings.Join(instance.ApplicationNames, ", "), 106 serviceStatus, 107 ) 108 if cmd.pluginCall { 109 s := plugin_models.GetServices_Model{ 110 Name: instance.Name, 111 Guid: instance.GUID, 112 ServicePlan: plugin_models.GetServices_ServicePlan{ 113 Name: instance.ServicePlan.Name, 114 Guid: instance.ServicePlan.GUID, 115 }, 116 Service: plugin_models.GetServices_ServiceFields{ 117 Name: instance.ServiceOffering.Label, 118 }, 119 ApplicationNames: instance.ApplicationNames, 120 LastOperation: plugin_models.GetServices_LastOperation{ 121 Type: instance.LastOperation.Type, 122 State: instance.LastOperation.State, 123 }, 124 IsUserProvided: instance.IsUserProvided(), 125 } 126 127 *(cmd.pluginModel) = append(*(cmd.pluginModel), s) 128 } 129 130 } 131 132 err = table.Print() 133 if err != nil { 134 return err 135 } 136 return nil 137 }