Пример #1
0
func main() {
	configuration, err := flags.ParseFlags(os.Args[1:])
	if err != nil {
		fmt.Fprintf(os.Stderr, "\n\n%s\n", err)
		os.Exit(1)
	}

	boshConfig := bosh.Config{
		URL:              configuration.BoshDirector,
		Password:         configuration.BoshPassword,
		Username:         configuration.BoshUser,
		AllowInsecureSSL: true,
	}

	aws := clients.NewAWS(configuration.AWSAccessKeyID, configuration.AWSSecretAccessKey,
		configuration.AWSRegion, configuration.AWSEndpointOverride)
	bosh := clients.NewBOSH(bosh.NewClient(boshConfig), os.Stdout)
	subnetChecker := subnetchecker.NewSubnetChecker(aws)

	awsDeployer := awsdeployer.NewAWSDeployer(bosh, subnetChecker, os.Stdout)

	err = awsDeployer.Deploy(configuration.ManifestPath)
	if err != nil {
		fmt.Fprintf(os.Stderr, "\n\n%s\n", err)
		os.Exit(1)
	}

	os.Exit(0)
}
			username, password, ok := r.BasicAuth()
			Expect(ok).To(BeTrue())
			Expect(username).To(Equal("some-username"))
			Expect(password).To(Equal("some-password"))

			rawBody, err := ioutil.ReadAll(r.Body)

			Expect(err).NotTo(HaveOccurred())
			Expect(string(rawBody)).To(Equal(cloudConfig))

			w.WriteHeader(http.StatusCreated)
		}))

		client := bosh.NewClient(bosh.Config{
			URL:      testServer.URL,
			Username: "******",
			Password: "******",
		})

		err := client.UpdateCloudConfig([]byte(cloudConfig))

		Expect(err).NotTo(HaveOccurred())
		Expect(testServerCallCount).To(Equal(1))
	})

	Context("failure cases", func() {
		It("returns an error when request creation fails", func() {
			client := bosh.NewClient(bosh.Config{
				URL: "%%%%%",
			})
func TestDeploy(t *testing.T) {
	RegisterFailHandler(Fail)
	RunSpecs(t, "turbulence")
}

var _ = BeforeSuite(func() {
	configPath, err := helpers.ConfigPath()
	Expect(err).NotTo(HaveOccurred())

	config, err = helpers.LoadConfig(configPath)
	Expect(err).NotTo(HaveOccurred())

	consulReleaseVersion = helpers.ConsulReleaseVersion()
	boshClient = bosh.NewClient(bosh.Config{
		URL:              fmt.Sprintf("https://%s:25555", config.BOSH.Target),
		Username:         config.BOSH.Username,
		Password:         config.BOSH.Password,
		AllowInsecureSSL: true,
	})
})

func lockedDeployments() ([]string, error) {
	var lockNames []string
	locks, err := boshClient.Locks()
	if err != nil {
		return []string{}, err
	}
	for _, lock := range locks {
		lockNames = append(lockNames, lock.Resource[0])
	}
	return lockNames, nil
}
		server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
			serverCallCount++
			Expect(r.URL.Path).To(Equal("/locks"))
			Expect(r.Method).To(Equal("GET"))

			username, password, ok := r.BasicAuth()
			Expect(ok).To(BeTrue())
			Expect(username).To(Equal("some-username"))
			Expect(password).To(Equal("some-password"))

			w.Write([]byte(`[{"type":"deployment","resource":["some-deployment"],"timeout":"1475796348.793560"}]`))
		}))

		client = bosh.NewClient(bosh.Config{
			URL:      server.URL,
			Username: "******",
			Password: "******",
		})

		locks, err := client.Locks()
		Expect(err).NotTo(HaveOccurred())
		Expect(serverCallCount).To(Equal(1))

		Expect(locks).To(Equal([]bosh.Lock{
			{Type: "deployment", Resource: []string{"some-deployment"}, Timeout: "1475796348.793560"},
		}))
	})

	Context("failure cases", func() {
		It("returns an error when url is invalid", func() {
			client := bosh.NewClient(bosh.Config{
	. "github.com/onsi/ginkgo"
	. "github.com/onsi/gomega"
)

var _ = Describe("Info", func() {
	It("fetches the director info", func() {
		server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
			Expect(r.URL.Path).To(Equal("/info"))
			Expect(r.Method).To(Equal("GET"))

			w.Write([]byte(`{"uuid":"some-director-uuid", "cpi":"some-cpi"}`))
		}))

		client := bosh.NewClient(bosh.Config{
			URL:                 server.URL,
			TaskPollingInterval: time.Nanosecond,
		})

		info, err := client.Info()

		Expect(err).NotTo(HaveOccurred())
		Expect(info).To(Equal(bosh.DirectorInfo{
			UUID: "some-director-uuid",
			CPI:  "some-cpi",
		}))
	})

	Context("failure cases", func() {
		It("should error on malformed json", func() {
			server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
				w.Write([]byte(`&&%%%%%&%&%&%&%&%&%&%&`))
	})

	It("is able to deploy concourse", func() {
		bbl.Up()

		certPath, err := testhelpers.WriteContentsToTempFile(testhelpers.BBL_CERT)
		Expect(err).NotTo(HaveOccurred())

		keyPath, err := testhelpers.WriteContentsToTempFile(testhelpers.BBL_KEY)
		Expect(err).NotTo(HaveOccurred())

		bbl.CreateLB("concourse", certPath, keyPath, "")

		boshClient := bosh.NewClient(bosh.Config{
			URL:              bbl.DirectorAddress(),
			Username:         bbl.DirectorUsername(),
			Password:         bbl.DirectorPassword(),
			AllowInsecureSSL: true,
		})

		err = downloadAndUploadRelease(boshClient, ConcourseReleaseURL)
		Expect(err).NotTo(HaveOccurred())

		err = downloadAndUploadRelease(boshClient, GardenReleaseURL)
		Expect(err).NotTo(HaveOccurred())

		err = downloadAndUploadStemcell(boshClient, StemcellURL)
		Expect(err).NotTo(HaveOccurred())

		concourseExampleManifest, err := downloadConcourseExampleManifest()
		Expect(err).NotTo(HaveOccurred())
				Expect(taskCallCount).NotTo(Equal(0))

				w.Write([]byte(`
						{"index": 0, "job_name": "consul_z1", "job_state":"some-state", "ips": ["1.2.3.4"]}
						{"index": 0, "job_name": "etcd_z1", "job_state":"some-state", "ips": ["1.2.3.5"]}
						{"index": 1, "job_name": "etcd_z1", "job_state":"some-other-state", "ips": ["1.2.3.6"]}
						{"index": 2, "job_name": "etcd_z1", "job_state":"some-more-state", "ips": ["1.2.3.7"]}
					`))
			default:
				Fail("unknown route")
			}
		}))

		client := bosh.NewClient(bosh.Config{
			URL:      server.URL,
			Username: "******",
			Password: "******",
		})

		vms, err := client.DeploymentVMs("some-deployment-name")
		Expect(err).NotTo(HaveOccurred())
		Expect(vms).To(ConsistOf([]bosh.VM{
			{
				Index:   0,
				JobName: "consul_z1",
				State:   "some-state",
				IPs:     []string{"1.2.3.4"},
			},
			{
				Index:   0,
				JobName: "etcd_z1",
				Expect(r.Method).To(Equal("GET"))
				w.Write([]byte(`{"versions":["2.0.0","3.0.0","4.0.0"]}`))
			case "/stemcells":
				Expect(r.Method).To(Equal("GET"))
				w.Write([]byte(`[
					{"name": "some-stemcell-name","version": "1"},
					{"name": "some-stemcell-name","version": "2"},
					{"name": "some-other-stemcell-name","version": "100"}
				]`))
			default:
				Fail("unexpected route")
			}
		}))
		client = bosh.NewClient(bosh.Config{
			URL:                 server.URL,
			Username:            "******",
			Password:            "******",
			TaskPollingInterval: time.Nanosecond,
		})
	})

	It("resolves manifest-v2 latest version of releases", func() {
		manifest := `---
director_uuid: some-director-uuid
name: some-name
stemcells:
- alias: default
  name: some-stemcell-name
  version: latest
instance_groups:
- azs:
  - z1
				Expect(password).To(Equal("some-password"))

				if callCount == 3 {
					w.Write([]byte(`{"id": 1, "state": "done"}`))
				} else {
					w.Write([]byte(`{"id": 1, "state": "processing"}`))
				}
				callCount++
			default:
				Fail("could not match any URL endpoints")
			}
		}))

		client := bosh.NewClient(bosh.Config{
			URL:                 server.URL,
			Username:            "******",
			Password:            "******",
			TaskPollingInterval: time.Nanosecond,
		})

		taskId, err := client.Deploy([]byte("some-yaml"))

		Expect(err).NotTo(HaveOccurred())
		Expect(callCount).To(Equal(4))
		Expect(taskId).To(Equal(1))
	})

	Context("failure cases", func() {
		It("should error on a non 302 redirect response with a body", func() {
			server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
				switch r.URL.Path {
				case "/deployments":