diff --git a/http/dayu.http b/http/dayu.http index 1f5ff16..f761d70 100644 --- a/http/dayu.http +++ b/http/dayu.http @@ -50,6 +50,12 @@ POST {{service}}/swirl_swirl/restart @id=6365041d2e52c5896dd14a5450920e482dddc33e6addaa07fab413bcda78d723 GET {{container}}/{{id}}/logs +### Config +@config={{url}}/configs + +##### Config +GET {{config}}/ + ### Dashboard @dashboard={{url}}/dashboard diff --git a/packages/core/public/logs/js/index.js b/packages/core/public/logs/js/index.js index 97e511d..666c29f 100644 --- a/packages/core/public/logs/js/index.js +++ b/packages/core/public/logs/js/index.js @@ -66,17 +66,5 @@ switch (query.action) { } term.on('data', async data => { - if (data == '\t') { - return; - } - term.write(data); - if (data == '\r') { - term.write('\n'); - container.emit('logs', { - id: command - }) - command = ''; - } else { - command += data; - } + }); diff --git a/packages/core/src/controller/docker/config.ts b/packages/core/src/controller/docker/config.ts new file mode 100644 index 0000000..8e841fb --- /dev/null +++ b/packages/core/src/controller/docker/config.ts @@ -0,0 +1,14 @@ +import * as docker from '@dayu/docker-api' +import { controller, get, requestParam } from '@cc-server/binding' + +@controller('/config') +class ConfigController { + @get('/list') + public async list() { + return await docker.config.list({ label: "com.docker.stack.namespace=nacos-cloud" }); + } + @get('/:id') + public async info(@requestParam('id') id: string) { + return await docker.config.inspect(id); + } +} \ No newline at end of file diff --git a/packages/core/src/controller/docker/container.ts b/packages/core/src/controller/docker/container.ts index 69e08ce..dff46c5 100644 --- a/packages/core/src/controller/docker/container.ts +++ b/packages/core/src/controller/docker/container.ts @@ -1,10 +1,10 @@ import * as docker from '@dayu/docker-api' import { io, interfaces, namespace, listener, Message } from '@cc-server/ws' -import { controller, httpGet, requestParam } from '@cc-server/binding' +import { controller, get, post, requestParam } from '@cc-server/binding' @controller('/container') class ContainerController { - @httpGet('/list') + @get('/list') public async list() { return await docker.container.list({ filters: JSON.stringify({ @@ -12,7 +12,21 @@ class ContainerController { }) }); } - @httpGet('/:id') + @get('/:id') + public async info(@requestParam('id') id: string) { + return await docker.container; + } +} + +@controller('/exec') +class ContainerExecController { + @post('/:id') + public async create(@requestParam('id') id: string) { + return await docker.container.exec.create(id, { + + }) + } + @get('/:id') public async info(@requestParam('id') id: string) { return await docker.container; } diff --git a/packages/core/src/controller/docker/stack.ts b/packages/core/src/controller/docker/stack.ts index 23dc090..9429bb9 100644 --- a/packages/core/src/controller/docker/stack.ts +++ b/packages/core/src/controller/docker/stack.ts @@ -46,4 +46,9 @@ class StackController { networks: networks.map(network => network.Name), } } + + @post('/create') + public async create() { + + } } diff --git a/packages/docker-api/src/api/common.ts b/packages/docker-api/src/api/common.ts index 357b490..8d0d2d9 100644 --- a/packages/docker-api/src/api/common.ts +++ b/packages/docker-api/src/api/common.ts @@ -9,3 +9,19 @@ export type Options = StringMap export type Config = StringMap export type Labels = StringMap export type Ports = StringMap | ObjectMap +export interface Version { + Index: number; +} +export interface Meta { + Version: Version; + CreatedAt: string; + UpdatedAt: string; +} +export interface Annotations { + Name: string; + Labels: Labels; +} +export interface Driver { + Name: string; + Options: Options; +} \ No newline at end of file diff --git a/packages/docker-api/src/api/opts/common.ts b/packages/docker-api/src/api/opts/common.ts index 3def63d..c36a55a 100644 --- a/packages/docker-api/src/api/opts/common.ts +++ b/packages/docker-api/src/api/opts/common.ts @@ -1,5 +1,5 @@ export declare namespace query { - export interface FilterOpt { + export interface Filter { filters?: string; } export interface LabelOpt { diff --git a/packages/docker-api/src/api/opts/config.ts b/packages/docker-api/src/api/opts/config.ts new file mode 100644 index 0000000..ef0b2dd --- /dev/null +++ b/packages/docker-api/src/api/opts/config.ts @@ -0,0 +1,8 @@ +export declare namespace config { + export interface FilterOpt { + id?: string; + label?: string; + name?: string; + names?: string; + } +} \ No newline at end of file diff --git a/packages/docker-api/src/api/opts/container.ts b/packages/docker-api/src/api/opts/container.ts index 2bee3ec..7c651bb 100644 --- a/packages/docker-api/src/api/opts/container.ts +++ b/packages/docker-api/src/api/opts/container.ts @@ -1,7 +1,7 @@ import * as common from './common' export declare namespace container { - export interface ListOpts extends common.query.FilterOpt { + export interface ListOpts extends common.query.Filter { all?: boolean; limit?: number; size?: boolean; @@ -15,4 +15,26 @@ export declare namespace container { timestamps?: boolean; tail?: number | "all"; } + export namespace exec { + export interface Create { + AttachStdin?: boolean; + AttachStdout?: boolean; + AttachStderr?: boolean; + DetachKeys?: string; + Tty?: boolean; + Cmd?: string[]; + Env?: string[]; + Privileged?: boolean; + User?: string; + WorkingDir?: string; + } + export interface Start { + Detach?: boolean; + Tty?: boolean; + } + export interface Resize { + h?: number; + w?: number; + } + } } \ No newline at end of file diff --git a/packages/docker-api/src/api/opts/filter.ts b/packages/docker-api/src/api/opts/filter.ts new file mode 100644 index 0000000..6fb9abd --- /dev/null +++ b/packages/docker-api/src/api/opts/filter.ts @@ -0,0 +1,9 @@ +export function toJSON(filter: any) { + let filters: any = {} + for (const key in filter) { + let temp: any = {} + temp[`${filter[key]}`] = true + filters[`${key}`] = temp + } + return JSON.stringify(filters); +} \ No newline at end of file diff --git a/packages/docker-api/src/api/opts/index.ts b/packages/docker-api/src/api/opts/index.ts index 2ec8b76..91a174d 100644 --- a/packages/docker-api/src/api/opts/index.ts +++ b/packages/docker-api/src/api/opts/index.ts @@ -1,5 +1,6 @@ export * from './swarm' export * from './common' +export * from './config' export * from './network' export * from './service' export * from './container' diff --git a/packages/docker-api/src/api/opts/network.ts b/packages/docker-api/src/api/opts/network.ts index fa8eedc..2d8e40b 100644 --- a/packages/docker-api/src/api/opts/network.ts +++ b/packages/docker-api/src/api/opts/network.ts @@ -1,6 +1,6 @@ import * as common from './common' export declare namespace network { - export interface ListOpts extends common.query.FilterOpt { + export interface ListOpts extends common.query.Filter { } } \ No newline at end of file diff --git a/packages/docker-api/src/api/opts/node.ts b/packages/docker-api/src/api/opts/node.ts index 4074b2a..b30adb5 100644 --- a/packages/docker-api/src/api/opts/node.ts +++ b/packages/docker-api/src/api/opts/node.ts @@ -1,6 +1,6 @@ import * as common from './common' export declare namespace node { - export interface ListOpts extends common.query.FilterOpt { + export interface ListOpts extends common.query.Filter { } } \ No newline at end of file diff --git a/packages/docker-api/src/api/opts/service.ts b/packages/docker-api/src/api/opts/service.ts index f35161b..4bfef3e 100644 --- a/packages/docker-api/src/api/opts/service.ts +++ b/packages/docker-api/src/api/opts/service.ts @@ -1,7 +1,8 @@ import * as common from './common' export declare namespace service { - export interface ListOpts extends common.query.FilterOpt { + export interface FilterOpt { + } export interface LogsOpts { details?: boolean; diff --git a/packages/docker-api/src/api/types/config.ts b/packages/docker-api/src/api/types/config.ts new file mode 100644 index 0000000..0d2f480 --- /dev/null +++ b/packages/docker-api/src/api/types/config.ts @@ -0,0 +1,11 @@ +import { Meta, Annotations } from '../common' + +export declare namespace config { + export interface Spec extends Annotations { + Data: string; + } + export interface Config extends Meta { + ID: string; + Spec: Spec; + } +} diff --git a/packages/docker-api/src/api/types/container.ts b/packages/docker-api/src/api/types/container.ts index 7b57523..e989938 100644 --- a/packages/docker-api/src/api/types/container.ts +++ b/packages/docker-api/src/api/types/container.ts @@ -302,4 +302,36 @@ export declare namespace container { ContainersDeleted: string[]; SpaceReclaimed: number; } + + export namespace exec { + export interface CreateResult { + Id: string; + } + export interface StartResult { + + } + export interface ResizeResult { + + } + export interface ProcessConfig { + arguments: string[]; + entrypoint: string; + privileged: boolean; + tty: boolean; + user: string; + } + export interface ExecJson { + CanRemove: boolean; + ContainerID: string; + DetachKeys: string; + ExitCode: number; + ID: string; + OpenStderr: boolean; + OpenStdin: boolean; + OpenStdout: boolean; + ProcessConfig: ProcessConfig; + Running: boolean; + Pid: number; + } + } } diff --git a/packages/docker-api/src/api/types/index.ts b/packages/docker-api/src/api/types/index.ts index 5de851a..633854c 100644 --- a/packages/docker-api/src/api/types/index.ts +++ b/packages/docker-api/src/api/types/index.ts @@ -2,6 +2,7 @@ export * from './node' export * from './task' export * from './image' export * from './swarm' +export * from './config' export * from './volume' export * from './system' export * from './network' diff --git a/packages/docker-api/src/api/types/network.ts b/packages/docker-api/src/api/types/network.ts index 97eec86..97d998c 100644 --- a/packages/docker-api/src/api/types/network.ts +++ b/packages/docker-api/src/api/types/network.ts @@ -1,4 +1,4 @@ -import { Labels, Options, StringMap } from '../common' +import { Labels, Options, StringMap, Annotations } from '../common' export declare namespace network { export interface Config { @@ -48,8 +48,7 @@ export declare namespace network { Tasks: Task; } - export interface NetworkResource { - Name: string; + export interface NetworkResource extends Annotations { Id: string; Created: string; Scope: string; @@ -63,7 +62,6 @@ export declare namespace network { ConfigOnly: boolean; Containers?: Containers; Options: Options; - Labels: Labels; Peers: network.PeerInfo[]; Services: network.ServiceInfo[]; } diff --git a/packages/docker-api/src/api/types/swarm.ts b/packages/docker-api/src/api/types/swarm.ts index 6493415..a69212a 100644 --- a/packages/docker-api/src/api/types/swarm.ts +++ b/packages/docker-api/src/api/types/swarm.ts @@ -1,11 +1,6 @@ +import { Version, Labels, Meta } from '../common' + export declare namespace swarm { - export interface Version { - Index: number; - } - - export interface Labels { - } - export interface Orchestration { TaskHistoryRetentionLimit?: number; } @@ -55,11 +50,8 @@ export declare namespace swarm { Manager: string; } - export interface Info { + export interface Info extends Meta { ID: string; - Version: Version; - CreatedAt: string; - UpdatedAt: string; Spec: Spec; TLSInfo: TLSInfo; RootRotationInProgress: boolean; diff --git a/packages/docker-api/src/client/config.ts b/packages/docker-api/src/client/config.ts new file mode 100644 index 0000000..34656af --- /dev/null +++ b/packages/docker-api/src/client/config.ts @@ -0,0 +1,18 @@ +import * as api from '../utils/api' +import * as opts from '../api/opts' +import * as types from '../api/types' +import * as filterUtil from '../api/opts/filter' + +export namespace config { + export async function list(filter?: opts.config.FilterOpt) { + return await api.get('/configs', { + filters: filterUtil.toJSON(filter) + }); + } + export async function inspect(id: string) { + return await api.get(`/configs/${id}`) + } + export async function create() { + return await api.post<{}>('/configs/create') + } +} diff --git a/packages/docker-api/src/client/container.ts b/packages/docker-api/src/client/container.ts index 1fb5116..79f66c2 100644 --- a/packages/docker-api/src/client/container.ts +++ b/packages/docker-api/src/client/container.ts @@ -26,4 +26,29 @@ export namespace container { } return await api.stream(`/containers/${id}/logs`, data); } + + export namespace exec { + export function create(id: string, opts: opts.container.exec.Create = {}): Promise { + let request = { + AttachStdin: true, + AttachStdout: true, + AttachStderr: true, + DetachKeys: 'ctrl-d', + Tty: true, + Cmd: '/bin/sh', + ...opts + } + request.AttachStderr = true + return api.post(`/containers/${id}/exec`, request) + } + export function start(id: string, opts: opts.container.exec.Start = {}) { + return api.post(`/exec/${id}/start`, opts) + } + export function resize(id: string, opts: opts.container.exec.Resize = {}) { + return api.post(`/exec/${id}/resize`, opts) + } + export function inspect(id: string) { + return api.get(`/exec/${id}/json`) + } + } } diff --git a/packages/docker-api/src/client/index.ts b/packages/docker-api/src/client/index.ts index 5de851a..633854c 100644 --- a/packages/docker-api/src/client/index.ts +++ b/packages/docker-api/src/client/index.ts @@ -2,6 +2,7 @@ export * from './node' export * from './task' export * from './image' export * from './swarm' +export * from './config' export * from './volume' export * from './system' export * from './network' diff --git a/packages/docker-api/src/client/service.ts b/packages/docker-api/src/client/service.ts index 293a3fb..68a7ccd 100644 --- a/packages/docker-api/src/client/service.ts +++ b/packages/docker-api/src/client/service.ts @@ -1,11 +1,14 @@ import * as api from '../utils/api'; import * as opts from '../api/opts'; import * as types from '../api/types'; +import * as filterUtil from '../api/opts/filter' import * as http from 'http' export namespace service { - export async function list(filters?: opts.service.ListOpts) { - return await api.get('/services', filters); + export async function list(filter?: opts.service.FilterOpt) { + return await api.get('/services', { + filters: filterUtil.toJSON(filter) + }); } export async function create() {