/// <summary> /// Creates a cluster /// </summary> /// <param name="cluster">the cluster definition to insert into the database</param> /// <param name="OwnedBy">the ogranisation that has creted this cluster/the owner of the cluster</param> /// <returns>The created cluster</returns> public static Cluster Create(Monosoft.Auth.DTO.Cluster cluster, Guid OwnedBy) { // TODO: revisionslog, hvem har opdateret (fra hvad, til hvad og hvornår) Cluster dbcluster = new Cluster(); dbcluster.Name = cluster.Name; dbcluster.OwnedByOrganisationId = OwnedBy; dbcluster.Endpoints = cluster.Endpoints.Select(p => p.IP).ToArray(); DataContext.Instance.Clusters.Add(dbcluster); if (cluster.Servers != null) { foreach (var server in cluster.Servers) { Server dbserver = new Server(); dbserver.Cluster = dbcluster; dbserver.IP = server.IP; dbserver.Name = server.Name; DataContext.Instance.Servers.Add(dbserver); if (server.Services != null) { foreach (var service in server.Services) { MicroService dbservice = new MicroService(); dbservice.Name = service.Name; dbservice.Version = service.Version; dbservice.Server = dbserver; DataContext.Instance.MicroServices.Add(dbservice); } } } } DataContext.Instance.SaveChanges(); return(dbcluster); }
/// <summary> /// Update a cluster /// </summary> /// <param name="cluster">the cluster definition to updated in the database</param> /// <param name="callingOrganisation">the calling organisation - which must be the owner to update</param> /// <returns>The updated cluster</returns> public static Cluster Update(Monosoft.Auth.DTO.Cluster cluster, Guid callingOrganisation) { // TODO: revisionslog, hvem har opdateret (fra hvad, til hvad og hvornår) var dbcluster = DataContext.Instance.Clusters.Where(p => p.ClusterId == cluster.ClusterId && p.OwnedByOrganisationId == callingOrganisation).FirstOrDefault(); if (dbcluster != null) { dbcluster.Name = cluster.Name; dbcluster.Endpoints = cluster.Endpoints.Select(p => p.IP).ToArray(); var removedServers = dbcluster.Servers.Where(p => cluster.Servers.Select(x => x.Id).Contains(p.Id) == false).ToList(); var updatedServers = dbcluster.Servers.Where(p => cluster.Servers.Select(x => x.Id).Contains(p.Id) == true).ToList(); var addedServers = cluster.Servers.Where(x => dbcluster.Servers.Select(p => p.Id).Contains(x.Id) == false).ToList(); foreach (var removedserver in removedServers) { dbcluster.Servers.Remove(removedserver); } foreach (var updatedserver in updatedServers) { var server = cluster.Servers.Where(p => p.Id == updatedserver.Id).FirstOrDefault(); updatedserver.IP = server.IP; updatedserver.Name = server.Name; updatedserver.MicroServices.Clear(); if (server.Services != null) { foreach (var service in server.Services) { MicroService dbservice = new MicroService(); dbservice.Name = service.Name; dbservice.Version = service.Version; updatedserver.MicroServices.Add(dbservice); } } } foreach (var addedserver in addedServers) { Server dbserver = new Server(); dbcluster.Servers.Add(dbserver); dbserver.IP = addedserver.IP; dbserver.Name = addedserver.Name; dbserver.MicroServices.Clear(); if (addedserver.Services != null) { foreach (var service in addedserver.Services) { MicroService dbservice = new MicroService(); dbservice.Name = service.Name; dbservice.Version = service.Version; dbserver.MicroServices.Add(dbservice); } } } DataContext.Instance.SaveChanges(); } return(dbcluster); }