public async Task LoadExistingApps() { await _lock.WaitAsync(); try { var jsonBody = await GetContainerGroups(); JArray valueArray = jsonBody.value; var publicPorts = new HashSet <uint>(); foreach (dynamic value in valueArray) { string containerGroupName = value.name; string appName = ACIUtils.GetAppNameFromContainerGroupName(containerGroupName); var properties = value.properties; var ipAddress = properties.ipAddress; string ip = ipAddress.ip; if (ip == null) { continue; } var containerGroup = new ContainerGroup(containerGroupName, _config.Region, ip); foreach (var port in ipAddress.ports) { uint portNo = port.port; publicPorts.Add(portNo); } var containers = properties.containers; foreach (var container in containers) { string containerName = container.name; var containerProperties = container.properties; string containerImage = containerProperties.image; var currentContainer = new Container(containerName, containerImage); var containerPorts = containerProperties.ports; foreach (var containerPort in containerPorts) { uint portNo = containerPort.port; var cPort = new ContainerPort(portNo, publicPorts.Contains(portNo)); currentContainer.AddPort(cPort); } containerGroup.AddContainer(currentContainer); } ContainerGroupCollection containerGroupCollection; if (!_containerGroupCollections.TryGetValue(appName, out containerGroupCollection)) { containerGroupCollection = new ContainerGroupCollection(appName); } containerGroupCollection.AddContainerGroup(containerGroup); _containerGroupCollections[appName] = containerGroupCollection; publicPorts.Clear(); } } finally { _lock.Release(); } }
public async Task CreateApp(string appName, dynamic appDefinition) { await _lock.WaitAsync(); try { if (_containerGroupCollections.ContainsKey(appName)) { throw new Exception($"{appName} exists already"); } var containerGroupDefinition = appDefinition.containerGroup; var containerDefinitions = containerGroupDefinition.containers; var containerGroupName = ACIUtils.GetContainerGroupNameForAppName(appName); var containerGroup = new ContainerGroup(containerGroupName, _config.Region, ""); foreach (var containerDefinition in containerDefinitions) { string containerName = containerDefinition.name; string image = containerDefinition.image; var container = new Container(containerName, image); var containerPortsDefinition = containerDefinition.ports; foreach (var containerPortDefinition in containerPortsDefinition) { uint port = containerPortDefinition.port; string typeString = containerPortDefinition.type; var isPublic = typeString.Equals("public", StringComparison.OrdinalIgnoreCase); var containerPort = new ContainerPort(port, isPublic); container.AddPort(containerPort); } containerGroup.AddContainer(container); } containerGroup.IpAddress = await CreateContainerGroup(containerGroup); var containerGroupCollection = new ContainerGroupCollection(appName); containerGroupCollection.AddContainerGroup(containerGroup); _containerGroupCollections[appName] = containerGroupCollection; await Task.Delay(ContainerGroupCreationMillisecondsDelay); } finally { _lock.Release(); } }
public override int GetHashCode() { int hash = 1; if (ContainerPort != 0) { hash ^= ContainerPort.GetHashCode(); } if (PublicPort != 0) { hash ^= PublicPort.GetHashCode(); } if (Kind != 0) { hash ^= Kind.GetHashCode(); } return(hash); }
public ContainerPort ReservePort(ushort suggestedPort) { rwlock.EnterUpgradeableReadLock(); try { if (port == null) { rwlock.EnterWriteLock(); try { port = new ContainerPort(suggestedPort, this.user); } finally { rwlock.ExitWriteLock(); } } else { log.Trace("Container '{0}' already assigned port '{1}'", handle, port); } } finally { rwlock.ExitUpgradeableReadLock(); } return port; }
private static void UpdateSubContainers(DesignPrimitivesWrapper de, Container rootContainerType, DesignModel rootDesignModel, Dictionary <CyPhy.Port, PortInstance> cyphyPorts2PortInstances, Dictionary <CyPhy.Port, ContainerPort> containerPorts, List <Connection> connectionsToBeVisited, Dictionary <CyPhy.SimpleFormula, ContainerCalculation> simpleFormulas, Dictionary <CyPhy.ValueFlowTarget, AVM.META.Design.ValueType> valueInstances, Dictionary <CyPhy.Port, StructuralInterfaceInstance> innerStructuralPortInstances, Dictionary <CyPhy.Port, ContainerStructuralInterface> containerStructuralPortInstances) { System.Diagnostics.Debug.WriteLine(de.Path); // Init list if (rootContainerType.ContainerPorts == null) { rootContainerType.ContainerPorts = new List <ContainerPort>(); } rootContainerType.ComponentInstances = new List <ComponentInstance>(); // Add Powerflows, JointStrucutres and ValueFlows for later steps connectionsToBeVisited.AddRange(de.ValueFlows); #region Handle ComponentRefs var componentRefs = de.ComponentRefs; foreach (var compRef in componentRefs) { var isComponent = false; try { var c = compRef.Referred.Component; // line above throws an exception if it is not a component isComponent = true; } catch { } if (compRef != null && isComponent) { CyPhy.Component comp = compRef.Referred.Component; System.Diagnostics.Debug.WriteLine(comp.Path); ComponentInstance compInst = Component2ComponentInstance(comp); rootContainerType.ComponentInstances.AddItem(compInst); compInst.Name = compRef.Name; //compInst.id = GetOrSetID(compRef); //compInst.id = compRef.Guid.ToString(); String instanceGUID = compRef.Attributes.InstanceGUID; // Set this value if not set if (String.IsNullOrWhiteSpace(instanceGUID)) { compRef.Attributes.InstanceGUID = compRef.Guid.ToString(); instanceGUID = compRef.Attributes.InstanceGUID; } compInst.id = compRef.Attributes.InstanceGUID; String s_SrcDesignSpaceContainerID = GetDesignSpaceSourceObjectID(compRef); if (!String.IsNullOrWhiteSpace(s_SrcDesignSpaceContainerID)) { compInst.SrcDesignSpaceContainerID = s_SrcDesignSpaceContainerID; } // Update Component's PortInstances compInst.PortInstances = new List <PortInstance>(); foreach (CyPhy.Port port in comp.Children.PortCollection) { #if TRACK_PORT_ID var portInst = new PortInstance { IDinSourceModel = port.ID }; #else var portInst = new PortInstance { IDinSourceModel = port.Attributes.ID }; #endif //var portInst = new PortInstance { IDinSourceModel = port.ID }; compInst.PortInstances.AddItem(portInst); if (!cyphyPorts2PortInstances.ContainsKey(port)) { cyphyPorts2PortInstances.Add(port, portInst); // Update Ports list } } // Convert parameters foreach (var p in comp.Children.ParameterCollection) { double result = 0; double.TryParse(p.Attributes.Value, out result); var componentNamedValueInstance = new ComponentNamedValueInstance { IDinComponentModel = p.Attributes.ID, Value = result }; compInst.NamedValueInstances.AddItem(componentNamedValueInstance); if (valueInstances.ContainsKey(p)) { continue; } valueInstances.Add(p, componentNamedValueInstance); } // Convert properties foreach (var p in comp.Children.PropertyCollection) { double result = 0; double.TryParse(p.Attributes.Value, out result); var componentNamedValueInstance = new ComponentNamedValueInstance { IDinComponentModel = p.Attributes.ID, Value = result }; compInst.NamedValueInstances.AddItem(componentNamedValueInstance); if (valueInstances.ContainsKey(p)) { continue; } valueInstances.Add(p, componentNamedValueInstance); } } } #endregion #region Handle Component instances List <CyPhy.Component> lcChildComps = de.Components; foreach (CyPhy.Component comp in lcChildComps) { System.Diagnostics.Debug.WriteLine(comp.Path); ComponentInstance compInst = Component2ComponentInstance(comp); rootContainerType.ComponentInstances.AddItem(compInst); // Update Component's PortInstances compInst.PortInstances = new List <PortInstance>(); foreach (CyPhy.Port port in comp.Children.PortCollection) { #if TRACK_PORT_ID var structPort = new StructuralInterfaceInstance { IDinSourceModel = port.ID }; #else var structPort = new StructuralInterfaceInstance { IDinSourceModel = port.Attributes.ID }; #endif if (!innerStructuralPortInstances.ContainsKey(port)) { innerStructuralPortInstances.Add(port, structPort); compInst.StructuralInterfaceInstances.Add(structPort); } #if TRACK_PORT_ID var portInst = new PortInstance { IDinSourceModel = port.ID }; #else var portInst = new PortInstance { IDinSourceModel = port.Attributes.ID }; #endif compInst.PortInstances.AddItem(portInst); if (!cyphyPorts2PortInstances.ContainsKey(port)) { cyphyPorts2PortInstances.Add(port, portInst); // Update Ports list } } // Convert parameters foreach (var p in comp.Children.ParameterCollection) { double result = 0; double.TryParse(p.Attributes.Value, out result); var componentNamedValueInstance = new ComponentNamedValueInstance { IDinComponentModel = p.Attributes.ID, Value = result }; compInst.NamedValueInstances.AddItem(componentNamedValueInstance); if (valueInstances.ContainsKey(p)) { continue; } valueInstances.Add(p, componentNamedValueInstance); } // Convert properties foreach (var p in comp.Children.PropertyCollection) { double result = 0; double.TryParse(p.Attributes.Value, out result); var componentNamedValueInstance = new ComponentNamedValueInstance { IDinComponentModel = p.Attributes.ID, Value = result }; compInst.NamedValueInstances.AddItem(componentNamedValueInstance); if (valueInstances.ContainsKey(p)) { continue; } valueInstances.Add(p, componentNamedValueInstance); } } #endregion // Recursively add all ContainerTypes from sub-DesignEntities rootContainerType.Containers = new List <Container>(); var ldeDesignEntityChildren = de.ComponentAssemblies.Cast <CyPhy.DesignEntity>().ToList(); ldeDesignEntityChildren.AddRange(de.DesignContainers); foreach (CyPhy.DesignEntity subDE in ldeDesignEntityChildren) { Container subRootContainerType; if (subDE is CyPhy.DesignContainer && (subDE as CyPhy.DesignContainer).Attributes.ContainerType == CyPhyClasses.DesignContainer.AttributesClass.ContainerType_enum.Compound) { subRootContainerType = new Compound(); } else if (subDE is CyPhy.DesignContainer && (subDE as CyPhy.DesignContainer).Attributes.ContainerType == CyPhyClasses.DesignContainer.AttributesClass.ContainerType_enum.Alternative) { subRootContainerType = new Alternative(); } else if (subDE is CyPhy.DesignContainer && (subDE as CyPhy.DesignContainer).Attributes.ContainerType == CyPhyClasses.DesignContainer.AttributesClass.ContainerType_enum.Optional) { subRootContainerType = new Optional(); } else if (subDE is CyPhy.ComponentAssembly) { subRootContainerType = new Compound(); } else { continue; } subRootContainerType.Name = subDE.Name; subRootContainerType.id = GetOrSetID(subDE); rootContainerType.Containers.AddItem(subRootContainerType); UpdateSubContainers(new DesignPrimitivesWrapper(subDE), subRootContainerType, rootDesignModel, cyphyPorts2PortInstances, containerPorts, connectionsToBeVisited, simpleFormulas, valueInstances, innerStructuralPortInstances, containerStructuralPortInstances); } #region Elements on the current container // Convert simple formulas foreach (var sf in de.SimpleFormulas) { var containerCalculation = new ContainerCalculation(); rootContainerType.ContainerValues.AddItem(containerCalculation); simpleFormulas[sf] = containerCalculation; } // Add container ports (from ports) foreach (var port in de.Ports) { if (containerPorts.ContainsKey(port)) { continue; } var pi = new ContainerPort(); containerPorts.Add(port, pi); rootContainerType.ContainerPorts.AddItem(pi); } // Convert parameters foreach (var p in de.Parameters) { var containerNamedValue = new ContainerNamedValue { IsParameter = true, Value = p.Attributes.Value }; rootContainerType.ContainerValues.AddItem(containerNamedValue); if (valueInstances.ContainsKey(p)) { continue; } valueInstances.Add(p, containerNamedValue); } // Convert properties foreach (var p in de.Properties) { var containerNamedValue = new ContainerNamedValue { IsParameter = false, Value = p.Attributes.Value }; rootContainerType.ContainerValues.AddItem(containerNamedValue); if (valueInstances.ContainsKey(p)) { continue; } valueInstances.Add(p, containerNamedValue); } #endregion }