示例#1
0
        public override void Unleash()
        {
            var random     = new Random();
            var ec2Factory = new Ec2Factory(_settings.AwsAccessKey, _settings.AwsSecretKey, _settings.ServiceUrl, _logger);

            _logger.Log(string.Format("Looking for instances in {0} with tag {1}={2}", _settings.ServiceUrl, _settings.Tagkey, _settings.TagValue));

            List <Reservation> instances;

            try
            {
                instances = ec2Factory.ListInstancesByTag(_settings.Tagkey, _settings.TagValue);
            }
            catch (Exception ex)
            {
                _logger.Log("ERROR: " + ex.Message);
                return;
            }

            if (instances.Count == 0)
            {
                _logger.Log("No instances found");
            }
            else
            {
                _logger.Log(string.Format("Found {0} candidate instance(s) for chaos!", instances.Count));
                var victimIndex = random.Next(0, instances.Count);
                var instanceId  = instances[victimIndex].RunningInstance[0].InstanceId;
                _logger.Log(string.Format("Randomly chosen instance {0} ({1}) as the chaos victim.", instanceId, instances[victimIndex].RunningInstance[0].PublicDnsName));
                _logger.Log(string.Format("Terminating {0}...", instanceId));

                ec2Factory.TerminateInstance(instanceId);
                _logger.Log(string.Format("{0} terminated", instanceId));
            }
        }
示例#2
0
        public static void UnleashChaos(Settings settings, ChaosLogger logger)
        {
            var ec2Factory = new Ec2Factory(settings.AwsAccessKey, settings.AwsSecretKey, settings.ServiceUrl, logger);
            var random     = new Random();

            if (settings.Repeat == 0)
            {
                settings.Repeat = 1;
            }

            if (settings.Repeat > 1)
            {
                logger.Log(string.Format("Repeating {0} times", settings.Repeat));
            }

            for (var t = 0; t < settings.Repeat; t++)
            {
                logger.Log(string.Format("Looking for instances in {0} with tag {1}={2}", settings.ServiceUrl, settings.Tagkey, settings.TagValue));

                List <Reservation> instances;
                try
                {
                    instances = ec2Factory.ListInstancesByTag(settings.Tagkey, settings.TagValue);
                }
                catch (Exception ex)
                {
                    logger.Log("ERROR: " + ex.Message);
                    return;
                }

                if (instances.Count == 0)
                {
                    logger.Log("No instances found");
                }
                else
                {
                    logger.Log(string.Format("Found {0} candidate instance(s) for chaos!", instances.Count));
                    var victimIndex = random.Next(0, instances.Count);
                    var instanceId  = instances[victimIndex].RunningInstance[0].InstanceId;
                    logger.Log(string.Format("Randomly chosen instance {0} ({1}) as the chaos victim.", instanceId, instances[victimIndex].RunningInstance[0].PublicDnsName));
                    logger.Log(string.Format("Terminating {0}...", instanceId));

                    ec2Factory.TerminateInstance(instanceId);
                    logger.Log(string.Format("{0} terminated", instanceId));
                }

                if (settings.Delay <= 0)
                {
                    continue;
                }

                logger.Log(string.Format("Waiting {0} ms", settings.Delay));
                System.Threading.Thread.Sleep(settings.Delay);
            }
        }
示例#3
0
        public static void UnleashChaos(Settings settings, ChaosLogger logger)
        {
            var ec2Factory = new Ec2Factory(settings.AwsAccessKey, settings.AwsSecretKey, settings.ServiceUrl, logger);
            var random = new Random();
            if (settings.Repeat == 0)
            {
                settings.Repeat = 1;
            }

            if (settings.Repeat > 1)
            {
                logger.Log(string.Format("Repeating {0} times", settings.Repeat));
            }

            for (var t = 0; t < settings.Repeat; t++)
            {
                logger.Log(string.Format("Looking for instances in {0} with tag {1}={2}", settings.ServiceUrl, settings.Tagkey, settings.TagValue));

                List<Reservation> instances;
                try
                {
                    instances = ec2Factory.ListInstancesByTag(settings.Tagkey, settings.TagValue);
                }
                catch (Exception ex)
                {
                    logger.Log("ERROR: " + ex.Message);
                    return;
                }

                if (instances.Count == 0)
                {
                    logger.Log("No instances found");
                }
                else
                {
                    logger.Log(string.Format("Found {0} candidate instance(s) for chaos!", instances.Count));
                    var victimIndex = random.Next(0, instances.Count);
                    var instanceId = instances[victimIndex].RunningInstance[0].InstanceId;
                    logger.Log(string.Format("Randomly chosen instance {0} ({1}) as the chaos victim.", instanceId, instances[victimIndex].RunningInstance[0].PublicDnsName));
                    logger.Log(string.Format("Terminating {0}...", instanceId));

                    ec2Factory.TerminateInstance(instanceId);
                    logger.Log(string.Format("{0} terminated", instanceId));
                }

                if (settings.Delay <= 0) continue;

                logger.Log(string.Format("Waiting {0} ms", settings.Delay));
                System.Threading.Thread.Sleep(settings.Delay);
            }
        }
示例#4
0
        public void MyTestInitialize()
        {
            var appConfig = ConfigurationManager.AppSettings;

            ec2Factory = new Ec2Factory(appConfig["AWSAccessKey"], appConfig["AWSSecretKey"], "ec2.eu-west-1.amazonaws.com", null);
        }