//If image is running, ping healthcheck. // If not healthy, get latest version from docker registry, stop old and start new //Otherwise, start latest version from docker registry //Ensure started container is healthy func up(applications []Application, airplaneMode bool) { healthChecker := healthcheck.HealthChecker{1, 1, 60} for _, app := range applications { fmt.Printf("%s", app.ImageName) var start = true if docker.IsImageRunning(app.ImageName) { fmt.Println(" checking") if healthcheck.IsHealthy(app.HealthCheck, healthChecker) { fmt.Println(" - healthy") start = false } else { fmt.Println(" unhealthy. Restarting") latestVersion := getLatestVersion(app.ImageName, airplaneMode) image := fmt.Sprintf("%s:%s", strings.Split(app.ImageName, ":")[0], latestVersion) docker.Stop([]docker.Container{docker.GetContainerIdFromImageName(image)}) } } else { fmt.Println(" starting") } if start { image := fmt.Sprintf("%s:%s", strings.Split(app.ImageName, ":")[0], getLatestVersion(app.ImageName, airplaneMode)) docker.Start(app.Service, image, app.Ports) fmt.Printf(" - Healthcheck: %s\n ", app.HealthCheck.Description()) if !healthcheck.AttemptHealthCheck(app.HealthCheck, healthChecker) { os.Exit(1) } } fmt.Println("") } }
//If image is running, stop and refresh with latest version from docker registry. //Otherwise, start latest version from docker registry //Ensure started container is healthy func refresh(appNames string, pathToYml string, airplaneMode bool) { fmt.Println("Fetching latest versions of applications from docker hub") apps := splitCommas(appNames) internalApplications := getInternalApplications(pathToYml) registeredApps := filterAppsAndExpandDepends(apps, internalApplications, airplaneMode) var appsInStartOrder []Application for i := len(registeredApps) - 1; i >= 0; i-- { appsInStartOrder = append(appsInStartOrder, registeredApps[i]) } healthChecker := healthcheck.HealthChecker{1, 1, 30} for _, app := range appsInStartOrder { var start = true latestVersion := getLatestVersion(app.ImageName, airplaneMode) if docker.IsImageRunning(app.ImageName) { fmt.Println(" checking") currentVersion := docker.GetImageVersion(app.ImageName) image := fmt.Sprintf("%s:%s", currentVersion, latestVersion) fmt.Printf("Running Version [%s:%s], Latest Version: [%s:%s]\n", app.ImageName, currentVersion, app.ImageName, latestVersion) if currentVersion != latestVersion { fmt.Printf("Stopping Version [%s:%s]\n", app.ImageName, currentVersion) docker.Stop([]docker.Container{docker.GetContainerIdFromImageName(fmt.Sprintf("%s:%s", app.ImageName, currentVersion))}) } else { if healthcheck.IsHealthy(app.HealthCheck, healthChecker) { fmt.Println(" - healthy") start = false } else { fmt.Println(" unhealthy. Restarting") docker.Stop([]docker.Container{docker.GetContainerIdFromImageName(image)}) } } } else { fmt.Println(" starting") } if start { newImage := fmt.Sprintf("%s:%s", app.ImageName, latestVersion) docker.Start(app.Service, newImage, app.Ports) fmt.Printf(" - Healthcheck: %s\n ", app.HealthCheck.Description()) if !healthcheck.AttemptHealthCheck(app.HealthCheck, healthChecker) { os.Exit(1) } } fmt.Println("") } }