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(); }