public async Task <Guid> Create( Guid tenantId, string name, NodeCredentials conn ) { await connectionService.TestConnection(conn); var node = new Node { TenantId = tenantId, Host = conn.host, Enabled = true, Id = Guid.NewGuid(), Name = name, Port = conn.port, Username = conn.username, Password = string.IsNullOrWhiteSpace(conn.password) ? null : await crypto.EncryptSecret(conn.password), PrivateKey = string.IsNullOrWhiteSpace(conn.privateKey) ? null : await crypto.EncryptSecret(conn.privateKey) }; await ctx.Nodes.AddAsync(node); await ctx.SaveChangesAsync(); await nodeUpdater.NotifyAboutNodeChange(node.Id); return(node.Id); }
public async Task Update(Guid id, string?name, string?directory, bool?serviceEnabled, string?content) { var compose = await ctx.Composes .Include(x => x.Current) .Include(x => x.Deployments) .FirstOrDefaultAsync(x => x.Id == id); if (compose == null) { throw new ComposeNotFoundException(); } if (name != null) { compose.Name = name; } if (directory != null || serviceEnabled != null) { var version = new ComposeVersion { Id = Guid.NewGuid(), Content = content ?? compose.Current.Content, Directory = directory ?? compose.Current.Directory, ServiceEnabled = serviceEnabled ?? compose.Current.ServiceEnabled, ServiceName = name != null?ServiceNameFromCompose(name) : compose.Current.ServiceName, ComposeId = compose.Id }; await ctx.ComposeVersions.AddAsync(version); compose.CurrentId = version.Id; } await ctx.SaveChangesAsync(); foreach (var deployment in compose.Deployments) { await nodeUpdater.NotifyAboutNodeChange(deployment.NodeId); } }
public async Task <Guid> Create(Guid nodeId, Guid composeId) { var nodeQuery = ctx.Nodes.Where(x => x.Id == nodeId).FutureValue(); var composeQuery = ctx.Composes.Where(x => x.Id == composeId).FutureValue(); var node = await nodeQuery.ValueAsync(); if (node == null) { throw new NodeNotFoundException(); } var compose = await composeQuery.ValueAsync(); if (compose == null) { throw new ComposeNotFoundException(); } var deployment = new Deployment { TenantId = node.TenantId, Id = Guid.NewGuid(), Node = node, Compose = compose, Enabled = true }; await ctx.Deployments.AddAsync(deployment); await ctx.SaveChangesAsync(); await nodeUpdater.NotifyAboutNodeChange(node.Id); return(deployment.Id); }