. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo/extensions/table" . "github.com/onsi/gomega" ) var _ = Describe("Manifest", func() { Describe("NewManifest", func() { It("generates a valid Consul BOSH-Lite manifest", func() { manifest, err := consul.NewManifest(consul.Config{ DirectorUUID: "some-director-uuid", Name: "consul-some-random-guid", Networks: []consul.ConfigNetwork{ { IPRange: "10.244.4.0/26", Nodes: 2, }, { IPRange: "10.244.5.0/26", Nodes: 1, }, }, }, iaas.NewWardenConfig()) Expect(err).NotTo(HaveOccurred()) Expect(manifest.DirectorUUID).To(Equal("some-director-uuid")) Expect(manifest.Name).To(Equal("consul-some-random-guid")) Expect(manifest.Releases).To(Equal([]core.Release{{ Name: "consul", Version: "latest", }}))
}) }) }) Context("Manifest V1", func() { Describe("SetConsulJobInstanceCount", func() { var ( manifest consul.Manifest ) BeforeEach(func() { var err error manifest, err = consul.NewManifest(consul.Config{ Networks: []consul.ConfigNetwork{ { IPRange: "10.244.4.0/24", Nodes: 1, }, }, }, iaas.NewWardenConfig()) Expect(err).NotTo(HaveOccurred()) }) It("sets the correct values for instances and static_ips given a count", func() { job := manifest.Jobs[0] properties := manifest.Properties Expect(job.Instances).To(Equal(1)) Expect(job.Networks[0].StaticIPs).To(HaveLen(1)) Expect(job.Networks[0].StaticIPs).To(Equal([]string{"10.244.4.4"})) Expect(properties.Consul.Agent.Servers.Lan).To(Equal([]string{"10.244.4.4"}))
func DeployMultiAZConsul(deploymentPrefix string, client bosh.Client, config Config) (manifest consul.Manifest, err error) { guid, err := NewGUID() if err != nil { return } info, err := client.Info() if err != nil { return } manifestConfig := consul.Config{ DirectorUUID: info.UUID, Name: fmt.Sprintf("consul-%s-%s", deploymentPrefix, guid), } var iaasConfig iaas.Config switch info.CPI { case "aws_cpi": awsConfig := buildAWSConfig(config) if len(config.AWS.Subnets) >= 2 { subnet := config.AWS.CloudConfigSubnets[0] awsConfig.Subnets = append(awsConfig.Subnets, iaas.AWSConfigSubnet{ID: subnet.ID, Range: subnet.Range, AZ: subnet.AZ, SecurityGroup: subnet.SecurityGroup}) manifestConfig.Networks = append(manifestConfig.Networks, consul.ConfigNetwork{IPRange: subnet.Range, Nodes: 2}) subnet = config.AWS.CloudConfigSubnets[1] awsConfig.Subnets = append(awsConfig.Subnets, iaas.AWSConfigSubnet{ID: subnet.ID, Range: subnet.Range, AZ: subnet.AZ, SecurityGroup: subnet.SecurityGroup}) manifestConfig.Networks = append(manifestConfig.Networks, consul.ConfigNetwork{IPRange: subnet.Range, Nodes: 1}) } else { err = errors.New("AWSSubnet is required for AWS IAAS deployment") return } iaasConfig = awsConfig case "warden_cpi": iaasConfig = iaas.NewWardenConfig() manifestConfig.Networks = []consul.ConfigNetwork{ {IPRange: "10.244.4.0/24", Nodes: 2}, {IPRange: "10.244.5.0/24", Nodes: 1}, } default: err = errors.New("unknown infrastructure type") return } manifest, err = consul.NewManifest(manifestConfig, iaasConfig) if err != nil { return } for i := range manifest.Releases { if manifest.Releases[i].Name == "consul" { manifest.Releases[i].Version = ConsulReleaseVersion() } } yaml, err := manifest.ToYAML() if err != nil { return } yaml, err = client.ResolveManifestVersions(yaml) if err != nil { return } err = consul.FromYAML(yaml, &manifest) if err != nil { return } _, err = client.Deploy(yaml) if err != nil { return } err = VerifyDeploymentRelease(client, manifestConfig.Name, ConsulReleaseVersion()) if err != nil { return } return }