func registryCerts(testAgent test_with_docker.Agent, composeDir string, desc desc.EnvDesc) error { registryCertName := "testing.crt" certPath := filepath.Join(composeDir, registryCertName) caPath := fmt.Sprintf("/etc/docker/certs.d/%s/ca.crt", desc.RegistryName) certIPs, err := getCertIPSans(filepath.Join(composeDir, registryCertName)) if err != nil { return err } haveIP := false for _, certIP := range certIPs { if certIP.Equal(desc.AgentIP) { haveIP = true break } } if !haveIP { log.Printf("Rebuilding the registry certificate to add %v", desc.AgentIP) certIPs = append(certIPs, desc.AgentIP) err = buildTestingKeypair(composeDir, certIPs) if err != nil { return fmt.Errorf("While building testing keypair: %s", err) } err = testAgent.RebuildService(composeDir, "registry") if err != nil { return fmt.Errorf("While rebuilding the registry service: %s", err) } } differs, err := testAgent.DifferingFiles([]string{certPath, caPath}) if err != nil { return fmt.Errorf("While checking for differing certs: %s", err) } for _, diff := range differs { local, remote := diff[0], diff[1] log.Printf("Copying %q to %q\n", local, remote) err = testAgent.InstallFile(local, remote) if err != nil { return fmt.Errorf("installFile failed: %s", err) } } if len(differs) > 0 { err = testAgent.RestartDaemon() if err != nil { return fmt.Errorf("restarting docker machine's daemon failed: %s", err) } } return nil }