Пример #1
0
        public async Task BuildCodePipelinelevel_1And2(int level, string oAuthToken)
        {
            var helper = new CloudFormationHelper(
                GlobalVariables.Enviroment, GlobalVariables.Region, GlobalVariables.Color);

            var sa_parameters = new List <KeyValuePair <string, string> >();

            sa_parameters.Add(new KeyValuePair <string, string>("Environment", GlobalVariables.Enviroment.ToString()));
            sa_parameters.Add(new KeyValuePair <string, string>("OAuthToken", oAuthToken));

            string stackName = $"{GlobalVariables.Enviroment}-level-{level}";

            if (level == 2)
            {
                sa_parameters.Add(new KeyValuePair <string, string>("Color", GlobalVariables.Color));
                stackName += $"-{GlobalVariables.Color}";
            }

            await helper.CreateStack
            (
                ConfigurationManager.AppSettings["InfraFileFolder"],
                stackName,
                ReadCodePipelineConfigs(level),
                sa_parameters
            );

            LogServices.WriteLog($"{GlobalVariables.Enviroment}-level-{level}-{GlobalVariables.Color} is created.",
                                 LogType.Information, GlobalVariables.Enviroment.ToString());
        }
Пример #2
0
 public void SaveAllAutoScalingGroupSettings(List <AutoScalingGroupSettings> settings)
 {
     foreach (var setting in settings)
     {
         db.Add(setting);
     }
     LogServices.WriteLog($"{GlobalVariables.Enviroment} auto scaling group settings were started.", LogType.Information, GlobalVariables.Enviroment.ToString());
 }
Пример #3
0
        public async Task StartRdsInstances(List <SA_RdsInstance> lstInstances)
        {
            RDSHelper rdsHelper = new RDSHelper(GlobalVariables.Enviroment, GlobalVariables.Region, GlobalVariables.Color);

            foreach (var instance in lstInstances)
            {
                await rdsHelper.StartRdsInstance(instance.DBInstanceIdentifier, instance.MultiAZ);

                LogServices.WriteLog($"{GlobalVariables.Enviroment} RDS {instance.DBInstanceIdentifier} was started.", LogType.Information, GlobalVariables.Enviroment.ToString());
            }
        }
Пример #4
0
        public async Task StartSystem(
            List <AutoScalingGroupSettings> lstSettings, bool isRdsMultyAz)
        {
            try
            {
                ElasticBeanstalkServices service = new ElasticBeanstalkServices();
                service.DisableScheduleActions(false);
                //Start RDS
                RDSHelper rdsHelper = new RDSHelper(GlobalVariables.Enviroment, GlobalVariables.Region, GlobalVariables.Color);
                try
                {
                    var response = await rdsHelper.GetRDSInstance();

                    await rdsHelper.StartRdsInstance(response.DBInstanceIdentifier, isRdsMultyAz);
                }
                catch (Exception ex)
                {
                    if (ex.GetType().Name == "InvalidDBInstanceStateException")
                    {
                        LogServices.WriteLog(
                            $"RDS instance is not stopped, system starting will continue. Detailed message: {ex.Message}",
                            LogType.Warn, GlobalVariables.Enviroment.ToString());
                    }
                }
                //Start applications by changing the auto scaling group
                var autoScalingHelper = new AutoScalingHelper(GlobalVariables.Enviroment, GlobalVariables.Region, GlobalVariables.Color);
                var lstGroup          = await autoScalingHelper.GetEnvironmentAutoScalingGroupList();

                var jumpBox = lstGroup.Find(o => o.Name.IndexOf("Jump") >= 0);
                if (jumpBox.MaxSize == 0)
                {
                    var settings = new AutoScalingGroupSettings()
                    {
                        MaxSize         = 1,
                        MinSize         = 1,
                        DesiredCapacity = 1
                    };
                    await autoScalingHelper.ChangeScalingGroup(jumpBox.AutoScalingGroupName, settings);
                }
                foreach (var group in lstGroup)
                {
                    var settings = lstSettings.Find(o => group.Name.IndexOf(o.Environment.ToString()) == 0 &&
                                                    group.Name.IndexOf(o.Application.ToString()) > 0);
                    if (settings != null)
                    {
                        await autoScalingHelper.ChangeScalingGroup(group.AutoScalingGroupName, settings);
                    }
                }
            }
            catch (Exception ex)
            {
                LogServices.WriteLog(ex.Message + " Stack trace: " + ex.StackTrace, LogType.Error, GlobalVariables.Enviroment.ToString());
            }
        }
Пример #5
0
        public async Task BuildCodePipelinelevel_3(List <string> apps)
        {
            var helper = new CloudFormationHelper(
                GlobalVariables.Enviroment, GlobalVariables.Region, GlobalVariables.Color);

            foreach (string app in apps)
            {
                var sa_parameters = new List <KeyValuePair <string, string> >();
                sa_parameters.Add(new KeyValuePair <string, string>("Environment", GlobalVariables.Enviroment.ToString()));
                sa_parameters.Add(new KeyValuePair <string, string>("Color", GlobalVariables.Color));
                sa_parameters.Add(new KeyValuePair <string, string>("Application", app));

                await helper.CreateStack
                (
                    ConfigurationManager.AppSettings["InfraFileFolder"],
                    $"{GlobalVariables.Enviroment}-level-3-{app}-{GlobalVariables.Color}",
                    ReadCodePipelineConfigs(3),
                    sa_parameters
                );

                LogServices.WriteLog($"{GlobalVariables.Enviroment}-level-3-{GlobalVariables.Color}-{app} is created.",
                                     LogType.Information, GlobalVariables.Enviroment.ToString());
            }
        }
Пример #6
0
        public async Task GenerateExternalLoadBalancers()
        {
            ALBHelper loadBalancerHelper = new ALBHelper(
                GlobalVariables.Enviroment, GlobalVariables.Region, GlobalVariables.Color);
            var scalingGroupHelper = new AutoScalingHelper(
                GlobalVariables.Enviroment, GlobalVariables.Region, GlobalVariables.Color);
            var apps = Enum.GetNames(typeof(ApplicationServer)).ToList();

            apps.Remove("JumpBox");
            apps.Remove("Worker");
            var colors  = Enum.GetNames(typeof(Color)).ToList();
            var sGroups = await scalingGroupHelper.GetEnvironmentAutoScalingGroupList(true);

            sGroups.Remove(sGroups.Find(o => o.Name.IndexOf("Jump") >= 0));
            var ec2Helper = new EC2Helper(GlobalVariables.Enviroment, GlobalVariables.Region, GlobalVariables.Color);
            var vpc       = await ec2Helper.GetVPC();

            var subnets = await ec2Helper.GetSubnetList();

            var securirtyGroups = await ec2Helper.GetSecurityGroupList();

            foreach (var appName in apps)
            {
                var tGroups = new List <SA_TargetGroup>();
                var newSGs  = new List <string>();
                var oldSGs  = securirtyGroups.FindAll(o =>
                                                      o.DisplayName.Contains(appName) &&
                                                      o.DisplayName.Contains(GlobalVariables.Enviroment) &&
                                                      o.Description == "Load Balancer Security Group").Select(o => o.GroupId).ToList();
                //foreach (string oldSG in oldSGs)
                //{
                //    await ec2Helper.CopySecurityGroup(oldSG,
                //        $"{GlobalVariables.Enviroment}-{GlobalVariables.Color}-{appName}-External-ALB",
                //        "External Application Load Balancer Security Group");
                //}
                //return;
                var loadBalancerArn = await loadBalancerHelper.CreateLoadBalancer(
                    $"{GlobalVariables.Enviroment.ToString()}-{appName}-ALB",
                    securirtyGroups.FindAll(o =>
                                            o.DisplayName.Contains(appName) &&
                                            o.DisplayName.Contains(GlobalVariables.Enviroment.ToString()) &&
                                            o.Description == "Load Balancer Security Group").Select(o => o.GroupId).ToList(),
                    subnets.FindAll(o => o.DisplayName.Contains("Public")).Select(o => o.SubnetId).ToList());

                foreach (var color in colors)
                {
                    var targetGroup = sGroups.Find(o => o.Name.Contains($"{GlobalVariables.Enviroment}-{color}-{appName}"));
                    if (targetGroup == null)
                    {
                        LogServices.WriteLog(
                            $"{GlobalVariables.Enviroment}-{color}-{appName} target group doesn't exist",
                            LogType.Warn, "SwitchDeploymentService");
                        continue;
                    }
                    var tGroup = await loadBalancerHelper.CreateTargetGroup(
                        $"{GlobalVariables.Enviroment.ToString()}-{color}-{appName}-TG",
                        vpc.VpcId, "HTTP", 80);

                    await scalingGroupHelper.AttachLoadBalancerTargetGroups(
                        sGroups.Find(o => o.Name.Contains($"{GlobalVariables.Enviroment}-{color}-{appName}")),
                        new List <string>() { tGroup.TargetGroupArn });

                    tGroups.Add(tGroup);
                }
                var greenTargetGroup = tGroups.Find(o => o.TargetGroupName.Contains(Color.green.ToString()));
                if (greenTargetGroup != null)
                {
                    await loadBalancerHelper.CreatListener(loadBalancerArn, greenTargetGroup.TargetGroupArn,
                                                           "HTTP", PRODUCTION_HTTP_PORT);

                    await loadBalancerHelper.CreatListener(loadBalancerArn, greenTargetGroup.TargetGroupArn,
                                                           "HTTPS", PRODUCTION_HTTPS_PORT,
                                                           "arn:aws:acm:us-east-2:125237747044:certificate/abb607ce-4090-45cb-bf29-923e08106664");
                }
                var blueTargetGroup = tGroups.Find(o => o.TargetGroupName.Contains(Color.blue.ToString()));
                if (blueTargetGroup != null)
                {
                    await loadBalancerHelper.CreatListener(loadBalancerArn, blueTargetGroup.TargetGroupArn,
                                                           "HTTP", PRE_PRODUCTION_HTTP_PORT);

                    await loadBalancerHelper.CreatListener(loadBalancerArn, blueTargetGroup.TargetGroupArn,
                                                           "HTTPS", PRE_PRODUCTION_HTTPS_PORT,
                                                           "arn:aws:acm:us-east-2:125237747044:certificate/abb607ce-4090-45cb-bf29-923e08106664");
                }
            }
        }