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); }
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(); }
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]}'"); } } }
void Clear() { ECSHelper.EnableSystem <LerpPositionSystem>(false); ECSHelper.EnableSystem <GravitateToTargetSystem>(false); character.SetActive(false); EnableButtons(); _spawner.Clear(); }
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(); }
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}"); } } } } }
// 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--; }
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(); }
void SpawnWithPhysics(bool physicsEnabled) { ECSHelper.EnableSystem <PositionWiggleSystem>(true); StartCoroutine(SpawnInternal(physicsEnabled)); }
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]}'"); } } }
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(); }
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); }