func DeployEtcdWithInstanceCount(count int, client bosh.Client, config Config) (manifest destiny.Manifest, err error) { guid, err := NewGUID() if err != nil { return } info, err := client.Info() if err != nil { return } manifestConfig := destiny.Config{ DirectorUUID: info.UUID, Name: fmt.Sprintf("etcd-%s", guid), } switch info.CPI { case "aws_cpi": manifestConfig.IAAS = destiny.AWS if config.AWS.Subnet != "" { manifestConfig.AWS.Subnet = config.AWS.Subnet } else { err = errors.New("AWSSubnet is required for AWS IAAS deployment") return } case "warden_cpi": manifestConfig.IAAS = destiny.Warden default: err = errors.New("unknown infrastructure type") return } manifest = destiny.NewEtcd(manifestConfig) manifest.Jobs[0], manifest.Properties = destiny.SetJobInstanceCount(manifest.Jobs[0], manifest.Networks[0], manifest.Properties, count) yaml, err := manifest.ToYAML() if err != nil { return } yaml, err = client.ResolveManifestVersions(yaml) if err != nil { return } manifest, err = destiny.FromYAML(yaml) if err != nil { return } err = client.Deploy(yaml) if err != nil { return } return }
}) It("scales from 1 to 3 nodes", func() { var keyVals map[string]string By("setting a persistent value", func() { etcdClient := helpers.NewEtcdClient([]string{ fmt.Sprintf("http://%s:4001", manifest.Properties.Etcd.Machines[0]), }) err := etcdClient.Set(testKey, testValue) Expect(err).ToNot(HaveOccurred()) }) By("scaling up to 3 nodes", func() { manifest.Jobs[0], manifest.Properties = destiny.SetJobInstanceCount(manifest.Jobs[0], manifest.Networks[0], manifest.Properties, 3) members := manifest.EtcdMembers() Expect(members).To(HaveLen(3)) yaml, err := manifest.ToYAML() Expect(err).NotTo(HaveOccurred()) var wg sync.WaitGroup done := make(chan struct{}) keysChan := helpers.SpamEtcd(done, &wg, manifest.Properties.Etcd.Machines) err = client.Deploy(yaml) Expect(err).NotTo(HaveOccurred())