Beispiel #1
0
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
}