github.com/liamawhite/cli-with-i18n@v6.32.1-0.20171122084555-dede0a5c3448+incompatible/command/v2/shared/get_application_changes.go (about) 1 package shared 2 3 import ( 4 "github.com/cloudfoundry/bytefmt" 5 "github.com/liamawhite/cli-with-i18n/actor/pushaction" 6 "github.com/liamawhite/cli-with-i18n/util/ui" 7 ) 8 9 func GetApplicationChanges(appConfig pushaction.ApplicationConfig) []ui.Change { 10 changes := []ui.Change{ 11 { 12 Header: "name:", 13 CurrentValue: appConfig.CurrentApplication.Name, 14 NewValue: appConfig.DesiredApplication.Name, 15 }, 16 } 17 18 if appConfig.DesiredApplication.DockerImage != "" { 19 changes = append(changes, 20 ui.Change{ 21 Header: "docker image:", 22 CurrentValue: appConfig.CurrentApplication.DockerImage, 23 NewValue: appConfig.DesiredApplication.DockerImage, 24 }) 25 26 if appConfig.CurrentApplication.DockerCredentials.Username != "" || appConfig.DesiredApplication.DockerCredentials.Username != "" { 27 changes = append(changes, 28 ui.Change{ 29 Header: "docker username:", 30 CurrentValue: appConfig.CurrentApplication.DockerCredentials.Username, 31 NewValue: appConfig.DesiredApplication.DockerCredentials.Username, 32 }) 33 } 34 } else { 35 changes = append(changes, 36 ui.Change{ 37 Header: "path:", 38 CurrentValue: appConfig.Path, 39 NewValue: appConfig.Path, 40 }) 41 } 42 43 // Existing buildpack and existing detected buildpack are mutually exclusive 44 oldBuildpack := appConfig.CurrentApplication.CalculatedBuildpack() 45 newBuildpack := appConfig.DesiredApplication.CalculatedBuildpack() 46 if oldBuildpack != "" || newBuildpack != "" { 47 changes = append(changes, 48 ui.Change{ 49 Header: "buildpack:", 50 CurrentValue: oldBuildpack, 51 NewValue: newBuildpack, 52 }) 53 } 54 55 // Existing command and existing detected start command are mutually exclusive 56 oldCommand := appConfig.CurrentApplication.CalculatedCommand() 57 newCommand := appConfig.DesiredApplication.CalculatedCommand() 58 if oldCommand != "" || newCommand != "" { 59 changes = append(changes, 60 ui.Change{ 61 Header: "command:", 62 CurrentValue: oldCommand, 63 NewValue: newCommand, 64 }) 65 } 66 67 if appConfig.CurrentApplication.DiskQuota != 0 || appConfig.DesiredApplication.DiskQuota != 0 { 68 var currentDiskQuota string 69 if appConfig.CurrentApplication.DiskQuota != 0 { 70 currentDiskQuota = MegabytesToString(appConfig.CurrentApplication.DiskQuota) 71 } 72 changes = append(changes, 73 ui.Change{ 74 Header: "disk quota:", 75 CurrentValue: currentDiskQuota, 76 NewValue: MegabytesToString(appConfig.DesiredApplication.DiskQuota), 77 }) 78 } 79 80 if appConfig.CurrentApplication.HealthCheckHTTPEndpoint != "" || appConfig.DesiredApplication.HealthCheckHTTPEndpoint != "" { 81 changes = append(changes, 82 ui.Change{ 83 Header: "health check http endpoint:", 84 CurrentValue: appConfig.CurrentApplication.HealthCheckHTTPEndpoint, 85 NewValue: appConfig.DesiredApplication.HealthCheckHTTPEndpoint, 86 }) 87 } 88 89 if appConfig.CurrentApplication.HealthCheckTimeout != 0 || appConfig.DesiredApplication.HealthCheckTimeout != 0 { 90 changes = append(changes, 91 ui.Change{ 92 Header: "health check timeout:", 93 CurrentValue: appConfig.CurrentApplication.HealthCheckTimeout, 94 NewValue: appConfig.DesiredApplication.HealthCheckTimeout, 95 }) 96 } 97 98 if appConfig.CurrentApplication.HealthCheckType != "" || appConfig.DesiredApplication.HealthCheckType != "" { 99 changes = append(changes, 100 ui.Change{ 101 Header: "health check type:", 102 CurrentValue: string(appConfig.CurrentApplication.HealthCheckType), 103 NewValue: string(appConfig.DesiredApplication.HealthCheckType), 104 }) 105 } 106 107 if appConfig.CurrentApplication.Instances.IsSet || appConfig.DesiredApplication.Instances.IsSet { 108 changes = append(changes, 109 ui.Change{ 110 Header: "instances:", 111 CurrentValue: appConfig.CurrentApplication.Instances, 112 NewValue: appConfig.DesiredApplication.Instances, 113 }) 114 } 115 116 if appConfig.CurrentApplication.Memory != 0 || appConfig.DesiredApplication.Memory != 0 { 117 var currentMemory string 118 if appConfig.CurrentApplication.Memory != 0 { 119 currentMemory = MegabytesToString(appConfig.CurrentApplication.Memory) 120 } 121 changes = append(changes, 122 ui.Change{ 123 Header: "memory:", 124 CurrentValue: currentMemory, 125 NewValue: MegabytesToString(appConfig.DesiredApplication.Memory), 126 }) 127 } 128 129 if appConfig.CurrentApplication.Stack.Name != "" || appConfig.DesiredApplication.Stack.Name != "" { 130 changes = append(changes, 131 ui.Change{ 132 Header: "stack:", 133 CurrentValue: appConfig.CurrentApplication.Stack.Name, 134 NewValue: appConfig.DesiredApplication.Stack.Name, 135 }) 136 } 137 138 var oldServices []string 139 for name := range appConfig.CurrentServices { 140 oldServices = append(oldServices, name) 141 } 142 143 var newServices []string 144 for name := range appConfig.DesiredServices { 145 newServices = append(newServices, name) 146 } 147 148 changes = append(changes, 149 ui.Change{ 150 Header: "services:", 151 CurrentValue: oldServices, 152 NewValue: newServices, 153 }) 154 155 changes = append(changes, 156 ui.Change{ 157 Header: "env:", 158 CurrentValue: appConfig.CurrentApplication.EnvironmentVariables, 159 NewValue: appConfig.DesiredApplication.EnvironmentVariables, 160 }) 161 162 var currentRoutes []string 163 for _, route := range appConfig.CurrentRoutes { 164 currentRoutes = append(currentRoutes, route.String()) 165 } 166 167 var desiredRotues []string 168 for _, route := range appConfig.DesiredRoutes { 169 desiredRotues = append(desiredRotues, route.String()) 170 } 171 172 changes = append(changes, 173 ui.Change{ 174 Header: "routes:", 175 CurrentValue: currentRoutes, 176 NewValue: desiredRotues, 177 }) 178 179 return changes 180 } 181 182 func SelectNonBlankValue(str ...string) string { 183 for _, s := range str { 184 if s != "" { 185 return s 186 } 187 } 188 return "" 189 } 190 191 func MegabytesToString(value uint64) string { 192 return bytefmt.ByteSize(bytefmt.MEGABYTE * uint64(value)) 193 }