Esempio n. 1
0
        public string Boostrap(string vpcId, string imageId, int numberOfInstances, string pathToRsaPrivateKey)
        {
            var config = new Ec2BootstrapConfig(Guid.NewGuid().ToString())
            {
                VpcId = vpcId,
                AwsProfileName = _awsProfileName
            };

            Logger.Info("Creating security group...");
            var securityGroupId = _securityGroupHandler.CreateSecurityGroup(vpcId, config.BootstrapId);
            var securityGroupTag = _tagHandler.CreateNameTags(config.BootstrapId, new[] {securityGroupId});

            config.SecurityGroupId = securityGroupId;
            config.SecurityGroupTag = securityGroupTag;

            Logger.Info("Creating instances...");
            var instanceIds = _instanceHandler.CreateInstances(config.BootstrapId, imageId, numberOfInstances, securityGroupId).ToList();

            Logger.Info("Tagging instances...");
            var instanceTag = _tagHandler.CreateNameTags(config.BootstrapId, instanceIds);

            Logger.WithLogSection("Waiting for instances to be ready", () => _instanceHandler.WaitForInstancesStatus(instanceIds, Ec2InstanceState.Running));

            List<Tuple<string, string>> passwords = null;

            Logger.WithLogSection("Waiting for Windows password to be available", () =>
            {
                passwords = _passwordHandler.WaitForPassword(instanceIds, pathToRsaPrivateKey);
            });

            var instances = _instanceHandler.GetInstances(instanceIds).ToList();

            foreach (var instance in instances)
            {
                config.Instances.Add(new Ec2Instance
                {
                    InstanceId = instance.InstanceId,
                    PublicDns = instance.PublicDnsName,
                    PublicIp = instance.PublicIpAddress,
                    Tag = instanceTag,
                    UserName = "******",
                    Password = passwords.Single(x => x.Item1 == instance.InstanceId).Item2
                });
            }

            HaveAccessToServers(config);
            //StopServers(config);

            //if (takeSnapshots)
            //{
            //    Logger.Info("Taking snapshots of disks to enable resets...");
            //    _snapshotHandler.TakeSnapshots(instances, config);
            //}
            //else
            //{
            //    Logger.Warn("Snapshots disabled. Note that reset will not work without snapshots.");
            //}

            //StartServers(config);

            Logger.Info("Storing configuration...");
            var configHandler = new BootstrapConfigHandler(config.BootstrapId);
            configHandler.Write(config);
            return config.BootstrapId;
        }
 private Ec2BootstrapConfig LoadConfig(string bootstrapId)
 {
     var configHandler = new BootstrapConfigHandler(bootstrapId);
     return configHandler.GetTypedEnvConfig();
 }