Exemplo n.º 1
0
    public void SpawnWithVertices(bool useLerp)
    {
        zoomedForVertices = true;
        Clear();
        var verticesCopysystem = World.Active.GetOrCreateSystem <VerticesCopySystem>();

        verticesCopysystem.SetVertices(SkinToDrawWithItems, UnityEngine.Animations.Axis.None, 0);
        verticesCopysystem.Enabled = true;
        count = verticesCopysystem.GetPointsCount();

        var gravitateToTargetSystem = World.Active.GetOrCreateSystem <GravitateToTargetSystem>();

        gravitateToTargetSystem.SetPhysicsScales(75, 2f, 3, 15);

        if (useLerp)
        {
            SpawnViaPrebuiltGameObjects(SkinRendererScale, true);
        }
        else
        {
            SpawnViaPrebuiltGameObjects(SkinRendererScale);
        }

        Camera.main.transform.position = cameraTransformSkinned.position;
        Camera.main.transform.rotation = cameraTransformSkinned.rotation;
        SetLightDirection(false);

        ECSHelper.EnableSystem <PositionWiggleSystem>(false);
        ECSHelper.EnableSystem <LerpPositionSystem>(useLerp);
        ECSHelper.EnableSystem <GravitateToTargetSystem>(!useLerp);
    }
Exemplo n.º 2
0
    protected override void OnUpdate()
    {
        // Debug.Log("on OnUpdate role looks system");
        var requestArray = SpawnGroup.ToComponentDataArray <RoleLooksSpawnRequest>(Allocator.TempJob);

        if (requestArray.Length == 0)
        {
            requestArray.Dispose();
            return;
        }

        var requestEntityArray = SpawnGroup.ToEntityArray(Allocator.TempJob);

        // Copy requests as spawning will invalidate Group
        var spawnRequests = new RoleLooksSpawnRequest[requestArray.Length];

        for (var i = 0; i < requestArray.Length; i++)
        {
            spawnRequests[i] = requestArray[i];
            PostUpdateCommands.DestroyEntity(requestEntityArray[i]);
        }

        for (var i = 0; i < spawnRequests.Length; i++)
        {
            var request = spawnRequests[i];
            // var playerState = EntityManager.GetComponentObject<RoleState>(request.ownerEntity);
            var looksInfo = EntityManager.GetComponentData <LooksInfo>(request.ownerEntity);
            int career    = request.career;
            int body      = request.body;
            int hair      = request.hair;
            // Debug.Log("body : "+body+" hair:"+hair);
            string bodyPath = ResPath.GetRoleBodyResPath(career, body);
            string hairPath = ResPath.GetRoleHairResPath(career, hair);
            // Debug.Log("SpawnRoleLooks bodyPath : "+bodyPath);
            XLuaFramework.ResourceManager.GetInstance().LoadAsset <GameObject>(bodyPath, delegate(UnityEngine.Object[] objs) {
                if (objs != null && objs.Length > 0)
                {
                    GameObject bodyObj        = objs[0] as GameObject;
                    GameObjectEntity bodyOE   = m_world.Spawn <GameObjectEntity>(bodyObj);
                    var parentTrans           = EntityManager.GetComponentObject <Transform>(request.ownerEntity);
                    parentTrans.localPosition = request.position;
                    bodyOE.transform.SetParent(parentTrans);
                    bodyOE.transform.localPosition = Vector3.zero;
                    bodyOE.transform.localRotation = Quaternion.identity;
                    ECSHelper.UpdateNameboardHeight(request.ownerEntity, bodyOE.transform);
                    LoadHair(hairPath, bodyOE.transform.Find("head"));
                    // Debug.Log("load ok role model");
                    looksInfo.CurState    = LooksInfo.State.Loaded;
                    looksInfo.LooksEntity = bodyOE.Entity;
                    EntityManager.SetComponentData <LooksInfo>(request.ownerEntity, looksInfo);
                }
                else
                {
                    Debug.LogError("cannot fine file " + bodyPath);
                }
            });
        }
        requestEntityArray.Dispose();
        requestArray.Dispose();
    }
        public WebAppWithDockerFileTests()
        {
            _httpHelper = new HttpHelper();

            var cloudFormationClient = new AmazonCloudFormationClient();

            _cloudFormationHelper = new CloudFormationHelper(cloudFormationClient);

            var ecsClient = new AmazonECSClient();

            _ecsHelper = new ECSHelper(ecsClient);

            var serviceCollection = new ServiceCollection();

            serviceCollection.AddCustomServices();
            serviceCollection.AddTestServices();

            var serviceProvider = serviceCollection.BuildServiceProvider();

            _app = serviceProvider.GetService <App>();
            Assert.NotNull(_app);

            _interactiveService = serviceProvider.GetService <InMemoryInteractiveService>();
            Assert.NotNull(_interactiveService);

            _testAppManager = new TestAppManager();
        }
Exemplo n.º 4
0
        private static void executeECS(string[] args)
        {
            var nArgs = CLIHelper.GetNamedArguments(args);

            var helper = new ECSHelper();

            switch (args[1])
            {
            case "destroy-cluster":
                helper.DeleteClusterAsync(nArgs["name"]).Wait();
                ; break;

            case "destroy-service":
                helper.DestroyService(
                    nArgs.FirstOrDefault(x => x.Key == "cluster").Value,     //optional
                    nArgs["service"]).Wait();
                ; break;

            case "destroy-task-definitions":
                helper.DestroyTaskDefinitions(nArgs["family"]).Wait();
                ; break;

            case "await-service-start":
                helper.WaitForServiceToStart(
                    nArgs.FirstOrDefault(x => x.Key == "cluster").Value,     //optional
                    nArgs["service"],
                    nArgs["timeout"].ToInt32()).Wait();
                ; break;

            case "describe-tasks":
            {
                var result = helper.DescribeTasksAsync(nArgs["cluster"], nArgs["tasks"].Split(',')).Result;
                Console.WriteLine(result.JsonSerialize(Newtonsoft.Json.Formatting.Indented));
            }
                ; break;

            case "help":
            case "--help":
            case "-help":
            case "-h":
            case "h":
                HelpPrinter($"{args[0]}", "Amazon S3",
                            ("destroy-cluster", "Accepts params: name"),
                            ("destroy-service", "Accepts params: cluster, service"),
                            ("destroy-task-definitions", "Accepts params: family"),
                            ("await-service-start", "Accepts params: cluster, service, timeout"),
                            ("describe-tasks", "Accepts params: tasks (array, comma separated guid's)"));
                break;

            default:
            {
                Console.WriteLine($"Try '{args[0]} help' to find out list of available commands.");
                throw new Exception($"Unknown ECS command: '{args[0]} {args[1]}'");
            }
            }
        }
Exemplo n.º 5
0
    void Clear()
    {
        ECSHelper.EnableSystem <LerpPositionSystem>(false);
        ECSHelper.EnableSystem <GravitateToTargetSystem>(false);
        character.SetActive(false);

        EnableButtons();

        _spawner.Clear();
    }
Exemplo n.º 6
0
    protected override void OnUpdate()
    {
        var entities   = group.ToEntityArray(Allocator.TempJob);
        var locoStates = group.ToComponentDataArray <LocomotionState>(Allocator.TempJob);
        var targets    = group.ToComponentDataArray <TargetPosition>(Allocator.TempJob);
        var querys     = group.ToComponentArray <MoveQuery>();
        var transforms = group.ToComponentArray <Transform>();

        for (int i = 0; i < locoStates.Length; i++)
        {
            var locoState = locoStates[i];
            if (locoState.LocoState == LocomotionState.State.Dead)
            {
                continue;
            }
            var query = querys[i];
            // Check for ground change (hitting ground or leaving ground)
            var isOnGround = locoState.IsOnGround();
            // Debug.Log("isOnGround : "+isOnGround.ToString()+" query:"+query.isGrounded);
            if (isOnGround != query.isGrounded)
            {
                if (query.isGrounded)
                {
                    Vector3 startPos     = transforms[i].localPosition;
                    Vector3 targetPos    = targets[i].Value;
                    var     groundDir    = targetPos - startPos;
                    bool    isMoveWanted = Vector3.Magnitude(groundDir) > 0.01f;
                    if (isMoveWanted)
                    {
                        locoState.LocoState = LocomotionState.State.Run;
                    }
                    else
                    {
                        locoState.LocoState = LocomotionState.State.Idle;
                    }
                }
                else
                {
                    locoState.LocoState = LocomotionState.State.InAir;
                }
                // locoState.StartTime = Time.time;
                // locoStates[i] = locoState;
                // EntityManager.SetComponentData<LocomotionState>(entities[i], locoState);
                ECSHelper.ChangeLocoState(entities[i], locoState);
            }
        }
        entities.Dispose();
        locoStates.Dispose();
        targets.Dispose();
    }
Exemplo n.º 7
0
    public void Clear()
    {
        ECSHelper.EnableSystem <VerticesCopySystem>(false); //Should only be running while we've got something to copy to

        var queryDes = new EntityQueryDesc {
            All = new ComponentType[] { typeof(PositionComponent) }
        };
        var query = World.Active.EntityManager.CreateEntityQuery(queryDes);

        World.Active.EntityManager.DestroyEntity(query);
        query.Dispose();

        Camera.main.transform.position = cameraTransform.position;
        Camera.main.transform.rotation = cameraTransform.rotation;

        SetLightDirection(true);
        counter = 0;
        count   = 100;
    }
        public void Explosion(AbstractEntity entity)
        {
            ExplodesWhenTimerExpiresComponent ewtec = (ExplodesWhenTimerExpiresComponent)entity.GetComponent(nameof(ExplodesWhenTimerExpiresComponent));
            PositionComponent pos = ECSHelper.GetPosition(entity);

            foreach (var e in this.entities)
            {
                PositionComponent epos = ECSHelper.GetPosition(e);
                if (epos != null)
                {
                    if (GeometryFunctions.Distance(epos.x, epos.y, pos.x, pos.y) <= ewtec.range)
                    {
                        if (this.checkVis.CanSee(epos.x, epos.y, pos.x, pos.y))
                        {
                            this.damageSystem.Damage(e, ewtec.power, $"Exploding {entity.name}");
                        }
                    }
                }
            }
        }
Exemplo n.º 9
0
 // Called each frame while the state is set to Play
 public override void PrepareFrame(Playable playable, FrameData info)
 {
     if (Defenders == null || Defenders.Count <= 0 || leftShowCount <= 0)
     {
         return;
     }
     for (int i = 0; i < Defenders.Count; i++)
     {
         var defender = Defenders[i];
         // Debug.Log("defender uid : "+defender.uid+" count:"+Defenders.Count+" damage:"+defender.damage+" hp:"+defender.cur_hp+" damagetype:"+defender.flag);
         var defenderEntity = SceneMgr.Instance.GetSceneObject(defender.uid);
         // Debug.Log("has health : "+EntityMgr.HasComponent<HealthStateData>(defenderEntity));
         if (defenderEntity.Equals(Entity.Null) || ECSHelper.IsDead(defenderEntity, EntityMgr))
         {
             continue;
         }
         if (EntityMgr.HasComponent <LocomotionState>(defenderEntity))
         {
             //进入受击状态
             var locomotionState = EntityMgr.GetComponentData <LocomotionState>(defenderEntity);
             locomotionState.LocoState = LocomotionState.State.BeHit;
             locomotionState.StartTime = Time.time;
             EntityMgr.SetComponentData <LocomotionState>(defenderEntity, locomotionState);
             //显示战斗飘字
             var          defenderTrans = EntityMgr.GetComponentObject <Transform>(defenderEntity);
             var          flyWordObj    = ResMgr.GetInstance().SpawnGameObject("FightFlyWord");
             FightFlyWord flyWord       = flyWordObj.GetComponent <FightFlyWord>();
             flyWord.SetData(defender.damage, defender.flag);
             var pos = defenderTrans.position;
             pos += Vector3.up * 1;
             flyWord.transform.SetParent(UnityMMO.SceneMgr.Instance.FlyWordContainer);
             flyWord.transform.position = pos;
             flyWord.StartFly();
         }
     }
     leftShowCount--;
 }
Exemplo n.º 10
0
    protected override void OnUpdate()
    {
        if (SceneMgr.Instance.IsLoadingScene)
        {
            return;
        }
        float dt              = Time.deltaTime;
        var   entities        = group.ToEntityArray(Allocator.TempJob);
        var   targetPositions = group.ToComponentDataArray <TargetPosition>(Allocator.TempJob);
        var   speeds          = group.ToComponentArray <SpeedData>();
        var   transforms      = group.ToComponentArray <Transform>();
        var   moveQuerys      = group.ToComponentArray <MoveQuery>();
        var   locoStates      = group.ToComponentDataArray <LocomotionState>(Allocator.TempJob);
        var   posOffsets      = group.ToComponentDataArray <PosOffset>(Allocator.TempJob);

        for (int i = 0; i < targetPositions.Length; i++)
        {
            var targetPos       = targetPositions[i].Value;
            var speed           = speeds[i].CurSpeed;
            var posOffset       = posOffsets[i].Value;
            var curLocoStateObj = locoStates[i];
            var query           = moveQuerys[i];
            if (speed <= 0)
            {
                continue;
            }
            if (curLocoStateObj.LocoState == LocomotionState.State.BeHit ||
                curLocoStateObj.LocoState == LocomotionState.State.Dead ||
                curLocoStateObj.LocoState == LocomotionState.State.Dizzy)
            {
                continue;
            }
            var    curTrans  = transforms[i];
            float3 startPos  = curTrans.localPosition;
            var    moveDir   = targetPos - startPos;
            var    groundDir = moveDir;
            groundDir.y = 0;
            float moveDistance = Vector3.Magnitude(groundDir);
            groundDir = Vector3.Normalize(groundDir);
            var  isAutoFinding = query.IsAutoFinding;
            bool isMoveWanted  = moveDistance > 0.01f || isAutoFinding;
            var  newLocoState  = LocomotionState.State.StateNum;
            var  phaseDuration = TimeEx.ServerTime - curLocoStateObj.StartTime;
            var  curLocoState  = curLocoStateObj.LocoState;
            bool isOnGround    = curLocoStateObj.IsOnGround();
            if (isOnGround)
            {
                if (isMoveWanted)
                {
                    newLocoState = LocomotionState.State.Run;
                }
                else
                {
                    newLocoState = LocomotionState.State.Idle;
                }
            }
            float ySpeed = 0;
            // Jump
            var isCanJump = EntityManager.HasComponent <JumpData>(entities[i]);
            if (isCanJump)
            {
                var jumpData      = EntityManager.GetComponentData <JumpData>(entities[i]);
                var lastJumpCount = jumpData.JumpCount;
                if (isOnGround)
                {
                    jumpData.JumpCount = 0;
                }

                bool isClickJump = false;
                if (EntityManager.HasComponent <ActionData>(entities[i]))
                {
                    var actionData = EntityManager.GetComponentData <ActionData>(entities[i]);
                    isClickJump = actionData.Jump == 1;
                }
                if (isClickJump && isOnGround)
                {
                    jumpData.JumpCount = 1;
                    newLocoState       = LocomotionState.State.Jump;
                }

                if (isClickJump && curLocoStateObj.IsInJump() && jumpData.JumpCount < 3)
                {
                    jumpData.JumpCount++;
                    newLocoState = jumpData.JumpCount == 2?LocomotionState.State.DoubleJump:LocomotionState.State.TrebleJump;
                }

                if (curLocoStateObj.LocoState == LocomotionState.State.Jump || curLocoStateObj.LocoState == LocomotionState.State.DoubleJump || curLocoStateObj.LocoState == LocomotionState.State.TrebleJump)
                {
                    if (phaseDuration >= GameConst.JumpAscentDuration[curLocoStateObj.LocoState - LocomotionState.State.Jump])
                    {
                        newLocoState = LocomotionState.State.InAir;
                    }
                }
                if (jumpData.JumpCount != lastJumpCount)
                {
                    EntityManager.SetComponentData(entities[i], jumpData);
                }
            }
            if (newLocoState != LocomotionState.State.StateNum && newLocoState != curLocoState)
            {
                curLocoStateObj.LocoState = newLocoState;
                ECSHelper.ChangeLocoState(entities[i], curLocoStateObj);
            }
            if (curLocoStateObj.LocoState == LocomotionState.State.Jump || curLocoStateObj.LocoState == LocomotionState.State.DoubleJump || curLocoStateObj.LocoState == LocomotionState.State.TrebleJump)
            {
                ySpeed = GameConst.JumpAscentHeight[curLocoStateObj.LocoState - LocomotionState.State.Jump] / GameConst.JumpAscentDuration[curLocoStateObj.LocoState - LocomotionState.State.Jump] - GameConst.Gravity;
            }
            // EntityManager.SetComponentData<LocomotionState>(entities[i], curLocoStateObj);
            if (isAutoFinding)
            {
                curTrans.rotation = query.navAgent.transform.rotation;
            }
            else
            {
                float3 newPos;
                if (moveDistance < speed * dt)
                {
                    //目标已经离得很近了
                    newPos = targetPos;
                }
                else
                {
                    newPos = startPos + groundDir * speed * dt;
                }
                newPos.y = startPos.y;
                //模仿重力,人物需要贴着地面走,有碰撞检测的所以不怕
                newPos.y            += (GameConst.Gravity + ySpeed) * dt;
                newPos              += posOffset;
                query.moveQueryStart = startPos;
                // Debug.Log("newPos : "+newPos.x+" z:"+newPos.z+" target:"+targetPos.x+" z:"+targetPos.z);
                //不能直接设置新坐标,因为需要和地形做碰撞处理什么的,所以利用CharacterController走路,在HandleMovementQueries才设置新坐标
                query.moveQueryEnd = newPos;

                //change role rotation
                if (isMoveWanted)
                {
                    Vector3    targetDirection   = new Vector3(groundDir.x, groundDir.y, groundDir.z);
                    Vector3    lookDirection     = targetDirection.normalized;
                    Quaternion freeRotation      = Quaternion.LookRotation(lookDirection, curTrans.up);
                    var        diferenceRotation = freeRotation.eulerAngles.y - curTrans.eulerAngles.y;
                    var        eulerY            = curTrans.eulerAngles.y;

                    if (diferenceRotation < 0 || diferenceRotation > 0)
                    {
                        eulerY = freeRotation.eulerAngles.y;
                    }
                    var euler = new Vector3(0, eulerY, 0);
                    curTrans.rotation = Quaternion.Slerp(curTrans.rotation, Quaternion.Euler(euler), Time.deltaTime * 50);
                }
            }
        }
        entities.Dispose();
        targetPositions.Dispose();
        locoStates.Dispose();
        posOffsets.Dispose();
    }
Exemplo n.º 11
0
 void SpawnWithPhysics(bool physicsEnabled)
 {
     ECSHelper.EnableSystem <PositionWiggleSystem>(true);
     StartCoroutine(SpawnInternal(physicsEnabled));
 }
Exemplo n.º 12
0
        private static void executeFargate(string[] args, Credentials credentials)
        {
            var nArgs = CLIHelper.GetNamedArguments(args);

            var elb = new ELBHelper();
            var r53 = new Route53Helper();
            var ecs = new ECSHelper();
            var cw  = new CloudWatchHelper();
            var kms = new KMSHelper(credentials);
            var iam = new IAMHelper(credentials);
            var acm = new ACMHelper();

            switch (args[1])
            {
            case "create-resources":
            {
                bool catchDisable          = nArgs.GetValueOrDefault("catch-disable", "false").ToBool();
                int  resourceCreateTimeout = nArgs["resource-create-timeout"].ToInt32();

                var resource = new FargateResourceV2(nArgs);

                string prefix_new = "a-";
                string prefix_old = "b-";
                bool   setRoutes  = true;

                Console.WriteLine("Determining Temporary Resource Naming Conventions...");
                var record = r53.GetCNameRecordSet(resource.IsPublic ? resource.ZonePublic : resource.ZonePrivate, resource.DNSCName,
                                                   failover: "PRIMARY",
                                                   throwIfNotFound: false).Result;

                if (record?.ResourceRecords.IsNullOrEmpty() == false)
                {
                    var a_alb = elb.GetLoadBalancersByName(loadBalancerName: $"a-{resource.LoadBalancerName}", throwIfNotFound: false).Result.SingleOrDefault();
                    var b_alb = elb.GetLoadBalancersByName(loadBalancerName: $"b-{resource.LoadBalancerName}", throwIfNotFound: false).Result.SingleOrDefault();

                    if (a_alb != null && record.ResourceRecords.Any(r => r.Value == a_alb.DNSName))
                    {
                        prefix_new = "b-";
                        prefix_old = "a-";
                        setRoutes  = false;
                    }
                    else if (b_alb != null && record.ResourceRecords.Any(r => r.Value == b_alb.DNSName))
                    {
                        prefix_new = "a-";
                        prefix_old = "b-";
                        setRoutes  = false;
                    }
                    else
                    {
                        Console.WriteLine("WARNING!!! Record was present, but could NOT find any associated loadbalancers.");
                    }
                }

                var resourceNew = resource.DeepCopy();
                resourceNew.SetName($"{prefix_new}{resource.Name}");
                resourceNew.SetDNSCName($"{prefix_new}{resource.DNSCName}");

                var resourceOld = resource.DeepCopy();
                resourceOld.SetName($"{prefix_old}{resource.Name}");
                resourceOld.SetDNSCName($"{prefix_old}{resource.DNSCName}");

                Console.WriteLine("Destroying Temporary Resources...");
                FargateResourceHelperV2.Destroy(resourceNew, elb, r53, ecs, cw, kms, iam, throwOnFailure: true, catchDisable: catchDisable).Await();

                try
                {
                    Console.WriteLine("Creating New Resources...");
                    FargateResourceHelperV2.Create(resourceNew, elb, r53, ecs, cw, kms, iam, acm);

                    Console.WriteLine($"Awaiting up to {resourceCreateTimeout} [s] for Tasks Desired Status...");
                    ecs.WaitForServiceToStart(resourceNew.ClusterName, resourceNew.ServiceName, resourceCreateTimeout).Await();
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"Failed New Resource Deployment with exception: {ex.JsonSerializeAsPrettyException(Formatting.Indented)}");

                    Console.WriteLine("Destroying New Resources...");
                    FargateResourceHelperV2.Destroy(resourceNew, elb, r53, ecs, cw, kms, iam, throwOnFailure: true, catchDisable: catchDisable).Await();

                    throw new Exception("New Resource Deployment Failure", ex);
                }

                if (setRoutes ||
                    record?.HealthCheckId == null ||
                    record.HealthCheckId != r53.GetHealthCheckAsync(resource.HealthCheckName, throwIfNotFound: false).Result?.Id)
                {
                    Console.WriteLine("DNS Route Initialization...");
                    FargateResourceHelperV2.SetRoutes(resource, resourceNew, elb, r53, cw);
                }
                else
                {
                    Console.WriteLine("DNS Route Swap...");
                    FargateResourceHelperV2.SwapRoutes(resource, resourceNew, elb, r53, cw);
                }

                Console.WriteLine("Destroying Old Resources...");
                FargateResourceHelperV2.Destroy(resourceOld, elb, r53, ecs, cw, kms, iam, throwOnFailure: true, catchDisable: catchDisable).Await();
            }
                ; break;

            case "destroy-resources":
            {
                bool catchDisable = nArgs.GetValueOrDefault("catch-disable", "false").ToBool();

                var resource = new FargateResourceV2(nArgs);

                var resourceA = resource.DeepCopy();
                resourceA.SetName($"a-{resource.Name}");
                resourceA.SetDNSCName($"a-{resource.DNSCName}");

                var resourceB = resource.DeepCopy();
                resourceB.SetName($"b-{resource.Name}");
                resourceB.SetDNSCName($"b-{resource.DNSCName}");

                var t0 = FargateResourceHelperV2.Destroy(resource, elb, r53, ecs, cw, kms, iam, throwOnFailure: true, catchDisable: catchDisable);
                var t1 = FargateResourceHelperV2.Destroy(resourceA, elb, r53, ecs, cw, kms, iam, throwOnFailure: true, catchDisable: catchDisable);
                var t2 = FargateResourceHelperV2.Destroy(resourceB, elb, r53, ecs, cw, kms, iam, throwOnFailure: true, catchDisable: catchDisable);

                var result = Task.WhenAll(t0, t1, t2).Result;

                Console.WriteLine($"Destroying Health Check'{resource.ELBHealthyMetricAlarmName}'...");
                r53.DeleteHealthCheckByNameAsync(resource.HealthCheckName, throwIfNotFound: false)
                .CatchExceptionAsync(catchDisable: catchDisable).Result.PrintResult();
            }
            break;

            case "help":
            case "--help":
            case "-help":
            case "-h":
            case "h":
                HelpPrinter($"{args[0]}", "Amazon Fargate",
                            ("create-service", "Accepts params:"));
                break;

            default:
            {
                Console.WriteLine($"Try '{args[0]} help' to find out list of available commands.");
                throw new Exception($"Unknown Fargate command: '{args[0]} {args[1]}'");
            }
            }
        }
Exemplo n.º 13
0
        public static void Create(
            FargateResourceV2 resource,
            ELBHelper elb, Route53Helper e53, ECSHelper ecs, CloudWatchHelper cw, KMSHelper kms, IAMHelper iam, ACMHelper acm)
        {
            var errList = new List <Exception>();

            Console.WriteLine("Crating S3 Access Policy...");
            var policyS3 = iam.CreatePolicyS3Async(
                name: resource.PolicyNameAccessS3,
                paths: resource.PathsS3,
                permissions: resource.PermissionsS3,
                description: $"S3 Access Policy '{resource.PolicyNameAccessS3}' to '{resource.PathsS3.JsonSerialize()}' auto generated by AWSHelper").Result.PrintResponse();

            Console.WriteLine($"Crating Execution Role '{resource.RoleName}'...");
            var roleEcs = iam.CreateRoleWithPoliciesAsync(
                roleName: resource.RoleName,
                policies: new string[] { resource.ExecutionPolicy, resource.PolicyNameAccessS3 },
                roleDescription: $"Role '{resource.RoleName}' auto generated by AWSHelper").Result.PrintResponse();

            Console.WriteLine($"Awaiting {resource.RoleCreateAwaitDelay / 1000} [s] to ensure that role was indexed...");
            Thread.Sleep(resource.RoleCreateAwaitDelay);

            Console.WriteLine($"Crating Default S3 Storage Grant '{resource.StorageGrantDefaultS3}' created for role '{resource.RoleName}'...");
            var defaultGrantResult = kms.CreateRoleGrantByName(
                keyName: resource.StorageKeyDefaultS3,
                grantName: resource.StorageGrantDefaultS3,
                roleName: resource.RoleName,
                grant: KMSHelper.GrantType.EncryptDecrypt).Result.PrintResponse();

            Console.WriteLine($"Crating Internal S3 Storage Grant '{resource.StorageGrantInternalS3}' created for role '{resource.RoleName}'...");
            var internalGrantResult = kms.CreateRoleGrantByName(
                keyName: resource.StorageKeyInternalS3,
                grantName: resource.StorageGrantInternalS3,
                roleName: resource.RoleName,
                grant: KMSHelper.GrantType.EncryptDecrypt).Result.PrintResponse();

            Console.WriteLine("Crating Application Load Balancer...");
            var loadBalancer = elb.CreateApplicationLoadBalancerAsync(resource.LoadBalancerName, resource.Subnets, resource.SecurityGroups, !resource.IsPublic).Result.PrintResponse();

            Console.WriteLine("Retriving Certificate...");
            var cert = acm.DescribeCertificateByDomainName(resource.CertificateDomainName).Result.PrintResponse();

            Console.WriteLine("Creating HTTP Target Group...");
            var targetGroup_http = elb.CreateHttpTargetGroupAsync(resource.TargetGroupName, resource.Port, resource.VPC, resource.HealthCheckPath).Result.PrintResponse();

            Console.WriteLine("Creating HTTPS Listener...");
            var listener_https = elb.CreateHttpsListenerAsync(loadBalancer.LoadBalancerArn, targetGroup_http.TargetGroupArn, certificateArn: cert.CertificateArn).Result.PrintResponse();

            Console.WriteLine("Creating HTTP Listener...");
            var listener_http = elb.CreateHttpListenerAsync(loadBalancer.LoadBalancerArn, targetGroup_http.TargetGroupArn, resource.Port).Result.PrintResponse();

            if (resource.IsPublic && !resource.ZonePublic.IsNullOrWhitespace())
            {
                Console.WriteLine("Creating Route53 DNS Record for the public zone...");
                e53.UpsertCNameRecordAsync(
                    resource.ZonePublic,
                    name: resource.DNSCName,
                    value: loadBalancer.DNSName,
                    ttl: 60).Await();
            }

            if (!resource.ZonePrivate.IsNullOrWhitespace())
            {
                Console.WriteLine("Creating Route53 DNS Record for the private zone...");
                e53.UpsertCNameRecordAsync(
                    resource.ZonePrivate,
                    name: resource.DNSCName,
                    value: loadBalancer.DNSName,
                    ttl: 60).Await();
            }

            Console.WriteLine("Initializeing Cluster...");
            var createClusterResponse = ecs.CreateClusterAsync(resource.ClusterName).Result.PrintResponse();

            Console.WriteLine("Creating Log Group...");
            cw.CreateLogGroupAsync(resource.LogGroupName).Await();

            Console.WriteLine("Creating Task Definitions...");
            var taskDefinition = ecs.RegisterFargateTaskAsync(
                executionRoleArn: resource.RoleName,
                family: resource.TaskFamily,
                cpu: resource.CPU,
                memory: resource.Memory,
                name: resource.TaskDefinitionName,
                image: resource.Image,
                envVariables: resource.Environment,
                logGroup: resource.LogGroupName,
                ports: resource.Ports).Result.PrintResponse();

            Console.WriteLine("Creating Service...");
            var service = ecs.CreateFargateServiceAsync(
                name: resource.ServiceName,
                taskDefinition: taskDefinition,
                desiredCount: resource.DesiredCount,
                cluster: resource.ClusterName,
                targetGroup: targetGroup_http,
                assignPublicIP: resource.IsPublic,
                securityGroups: resource.SecurityGroups,
                subnets: resource.Subnets
                ).Result.PrintResponse();

            Console.WriteLine($"Creating Cloud Watch Metric '{resource.ELBHealthyMetricAlarmName}'...");
            var metricAlarm = cw.UpsertAELBMetricAlarmAsync(elb,
                                                            name: resource.ELBHealthyMetricAlarmName,
                                                            loadBalancer: resource.LoadBalancerName, targetGroup: resource.TargetGroupName,
                                                            metric: CloudWatchHelper.ELBMetricName.HealthyHostCount,
                                                            comparisonOperator: Amazon.CloudWatch.ComparisonOperator.LessThanThreshold,
                                                            treshold: 1).Result.PrintResponse();
        }
Exemplo n.º 14
0
        public static async Task <List <Exception> > Destroy(
            FargateResourceV2 resource,
            ELBHelper elb, Route53Helper e53, ECSHelper ecs, CloudWatchHelper cw, KMSHelper kms, IAMHelper iam,
            bool throwOnFailure,
            bool catchDisable)
        {
            var errList    = new List <Exception>();
            int maxRepeats = throwOnFailure ? 1 : 3;
            int delay_ms   = throwOnFailure ? 500 : 10000;

            Console.WriteLine($"Destroying Role '{resource.RoleName}'...");
            (await iam.DeleteRoleAsync(resource.RoleName, detachPolicies: true)
             .TryCatchRetryAsync(maxRepeats: maxRepeats, delay: delay_ms).CatchExceptionAsync()).PrintResult();

            Console.WriteLine($"Destroying Policy '{resource.PolicyNameAccessS3}'...");
            errList.Add(iam.DeletePolicyByNameAsync(resource.PolicyNameAccessS3, throwIfNotFound: false)
                        .TryCatchRetryAsync(maxRepeats: maxRepeats, delay: delay_ms)
                        .CatchExceptionAsync(catchDisable: catchDisable).Result.PrintResult());

            Console.WriteLine($"Destroying Default Grant '{resource.StorageGrantDefaultS3}' for key '{resource.StorageKeyDefaultS3}'...");
            errList.Add(kms.RemoveGrantsByName(keyName: resource.StorageKeyDefaultS3, grantName: resource.StorageGrantDefaultS3, throwIfNotFound: false)
                        .TryCatchRetryAsync(maxRepeats: maxRepeats, delay: delay_ms)
                        .CatchExceptionAsync(catchDisable: catchDisable).Result.PrintResult());

            Console.WriteLine($"Destroying Internal Grant '{resource.StorageGrantInternalS3}' for key '{resource.StorageKeyInternalS3}'...");
            errList.Add(kms.RemoveGrantsByName(keyName: resource.StorageKeyInternalS3, grantName: resource.StorageGrantInternalS3, throwIfNotFound: false)
                        .TryCatchRetryAsync(maxRepeats: maxRepeats, delay: delay_ms)
                        .CatchExceptionAsync(catchDisable: catchDisable).Result.PrintResult());

            Console.WriteLine($"Destroying Application Load Balancer '{resource.LoadBalancerName}'...");
            errList.Add(elb.DestroyLoadBalancer(loadBalancerName: resource.LoadBalancerName, throwIfNotFound: false)
                        .TryCatchRetryAsync(maxRepeats: maxRepeats, delay: delay_ms)
                        .CatchExceptionAsync(catchDisable: catchDisable).Result.PrintResult());

            if (resource.IsPublic && !resource.ZonePublic.IsNullOrWhitespace())
            {
                Console.WriteLine($"Destroying Route53 DNS Record: '{resource.DNSCName}' of '{resource.ZonePublic}' zone...");
                errList.Add(e53.DestroyCNameRecord(resource.ZonePublic, resource.DNSCName, throwIfNotFound: false)
                            .TryCatchRetryAsync(maxRepeats: maxRepeats, delay: delay_ms)
                            .CatchExceptionAsync(catchDisable: catchDisable).Result.PrintResult());
            }

            if (!resource.ZonePrivate.IsNullOrWhitespace())
            {
                Console.WriteLine($"Destroying Route53 DNS Record: '{resource.DNSCName}' of '{resource.ZonePrivate}' zone...");
                errList.Add(e53.DestroyCNameRecord(resource.ZonePrivate, resource.DNSCName, throwIfNotFound: false)
                            .TryCatchRetryAsync(maxRepeats: maxRepeats, delay: delay_ms)
                            .CatchExceptionAsync(catchDisable: catchDisable).Result.PrintResult());
            }

            Console.WriteLine($"Destroying Log Group '{resource.LogGroupName}'...");
            errList.Add(cw.DeleteLogGroupAsync(resource.LogGroupName, throwIfNotFound: false)
                        .TryCatchRetryAsync(maxRepeats: maxRepeats, delay: delay_ms)
                        .CatchExceptionAsync(catchDisable: catchDisable).Result.PrintResult());

            Console.WriteLine($"Destroying Task Definitions of Family'{resource.TaskFamily}'...");
            errList.Add(ecs.DestroyTaskDefinitions(familyPrefix: resource.TaskFamily)
                        .TryCatchRetryAsync(maxRepeats: maxRepeats, delay: delay_ms)
                        .CatchExceptionAsync(catchDisable: catchDisable).Result.PrintResult());

            Console.WriteLine($"Destroying Service '{resource.ServiceName}'...");
            errList.Add(ecs.DestroyService(cluster: resource.ClusterName, serviceName: resource.ServiceName, throwIfNotFound: false)
                        .TryCatchRetryAsync(maxRepeats: maxRepeats, delay: delay_ms)
                        .CatchExceptionAsync(catchDisable: catchDisable).Result.PrintResult());

            Console.WriteLine($"Destroying Cluster '{resource.ClusterName}'...");
            errList.Add(ecs.DeleteClusterAsync(name: resource.ClusterName, throwIfNotFound: false)
                        .TryCatchRetryAsync(maxRepeats: maxRepeats, delay: delay_ms)
                        .CatchExceptionAsync(catchDisable: catchDisable).Result.PrintResult());

            Console.WriteLine($"Destroying Metric Alarm '{resource.ELBHealthyMetricAlarmName}'...");
            errList.Add(cw.DeleteMetricAlarmAsync(resource.ELBHealthyMetricAlarmName, throwIfNotFound: false)
                        .TryCatchRetryAsync(maxRepeats: maxRepeats, delay: delay_ms)
                        .CatchExceptionAsync(catchDisable: catchDisable).Result.PrintResult());

            if (throwOnFailure && errList.Any(x => x != null))
            {
                throw new AggregateException("Failed Fargate Resource Destruction", errList.ToArray());
            }

            return(errList);
        }