@osaas/cli 4.8.4 → 4.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"cmd.d.ts","sourceRoot":"","sources":["../../src/web/cmd.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,wBAAgB,MAAM,YA6DrB"}
1
+ {"version":3,"file":"cmd.d.ts","sourceRoot":"","sources":["../../src/web/cmd.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,MAAM,YA4MrB"}
package/dist/web/cmd.js CHANGED
@@ -59,6 +59,94 @@ function cmdWeb() {
59
59
  console.log(err.message);
60
60
  }
61
61
  });
62
+ web
63
+ .command('config-create')
64
+ .description('Create a configuration service instance')
65
+ .argument('<name>', 'Name of the configuration service instance')
66
+ .action(async (name, options, command) => {
67
+ try {
68
+ const globalOpts = command.optsWithGlobals();
69
+ const environment = globalOpts?.env || 'prod';
70
+ const ctx = new client_core_1.Context({ environment });
71
+ const configToken = await ctx.getServiceAccessToken('eyevinn-app-config-svc');
72
+ let configInstance = await (0, client_core_1.getInstance)(ctx, 'eyevinn-app-config-svc', name, configToken);
73
+ if (!configInstance) {
74
+ const valkeyToken = await ctx.getServiceAccessToken('valkey-io-valkey');
75
+ let valkeyInstance = await (0, client_core_1.getInstance)(ctx, 'valkey-io-valkey', name, valkeyToken);
76
+ if (!valkeyInstance) {
77
+ valkeyInstance = await (0, client_core_1.createInstance)(ctx, 'valkey-io-valkey', valkeyToken, {
78
+ name
79
+ });
80
+ await (0, client_core_1.waitForInstanceReady)('valkey-io-valkey', name, ctx);
81
+ }
82
+ const ports = await (0, client_core_1.getPortsForInstance)(ctx, 'valkey-io-valkey', name, valkeyToken);
83
+ const redisPort = ports.find((port) => port.internalPort == 6379);
84
+ if (!redisPort) {
85
+ throw new Error(`Failed to get redis port for instance ${name}`);
86
+ }
87
+ configInstance = await (0, client_core_1.createInstance)(ctx, 'eyevinn-app-config-svc', configToken, {
88
+ name,
89
+ RedisUrl: `redis://${redisPort.externalIp}:${redisPort.externalPort}`
90
+ });
91
+ await (0, client_core_1.waitForInstanceReady)('eyevinn-app-config-svc', name, ctx);
92
+ }
93
+ console.log(`Configuration service instance available at ${configInstance.url}`);
94
+ }
95
+ catch (err) {
96
+ console.log(err.message);
97
+ }
98
+ });
99
+ web
100
+ .command('config-delete')
101
+ .description('Delete a configuration service instance')
102
+ .argument('<name>', 'Name of the configuration service instance')
103
+ .option('--data', 'Delete config data')
104
+ .action(async (name, options, command) => {
105
+ try {
106
+ const globalOpts = command.optsWithGlobals();
107
+ const environment = globalOpts?.env || 'prod';
108
+ const ctx = new client_core_1.Context({ environment });
109
+ const configToken = await ctx.getServiceAccessToken('eyevinn-app-config-svc');
110
+ const configInstance = await (0, client_core_1.getInstance)(ctx, 'eyevinn-app-config-svc', name, configToken);
111
+ if (configInstance) {
112
+ await (0, client_core_1.removeInstance)(ctx, 'eyevinn-app-config-svc', name, configToken);
113
+ if (options.data) {
114
+ console.log('Deleting config data...');
115
+ const valkeyToken = await ctx.getServiceAccessToken('valkey-io-valkey');
116
+ await (0, client_core_1.removeInstance)(ctx, 'valkey-io-valkey', name, valkeyToken);
117
+ }
118
+ }
119
+ }
120
+ catch (err) {
121
+ console.log(err.message);
122
+ }
123
+ });
124
+ web
125
+ .command('config-to-env')
126
+ .description('Load configuration from Application Config service and set as environment variables')
127
+ .argument('<configInstance>', 'Name of the application configuration service instance')
128
+ .action(async (configInstance, options, command) => {
129
+ try {
130
+ const globalOpts = command.optsWithGlobals();
131
+ const environment = globalOpts?.env || 'prod';
132
+ const ctx = new client_core_1.Context({ environment });
133
+ const token = await ctx.getServiceAccessToken('eyevinn-app-config-svc');
134
+ const instance = await (0, client_core_1.getInstance)(ctx, 'eyevinn-app-config-svc', configInstance, token);
135
+ if (instance) {
136
+ const url = new URL('/api/v1/config', instance.url);
137
+ const response = await fetch(url);
138
+ if (response.ok) {
139
+ const data = (await response.json());
140
+ data.items.map((config) => {
141
+ console.log(`export ${config.key.toUpperCase()}=${config.value}`);
142
+ });
143
+ }
144
+ }
145
+ }
146
+ catch (err) {
147
+ console.log(err.message);
148
+ }
149
+ });
62
150
  return web;
63
151
  }
64
152
  exports.cmdWeb = cmdWeb;
@@ -1 +1 @@
1
- {"version":3,"file":"cmd.js","sourceRoot":"","sources":["../../src/web/cmd.ts"],"names":[],"mappings":";;;AAAA,oDAA6C;AAC7C,kDAA0E;AAC1E,yCAAoC;AAEpC,SAAgB,MAAM;IACpB,MAAM,GAAG,GAAG,IAAI,mBAAO,CAAC,KAAK,CAAC,CAAC;IAE/B,GAAG;SACA,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,mBAAmB,CAAC;SAChC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;SACrC,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAC;SACzC,MAAM,CAAC,YAAY,EAAE,wBAAwB,CAAC;SAC9C,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;QAC5C,IAAI;YACF,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;YAC7C,MAAM,WAAW,GAAG,UAAU,EAAE,GAAG,IAAI,MAAM,CAAC;YAC9C,MAAM,GAAG,GAAG,IAAI,qBAAO,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;YAEzC,MAAM,OAAO,GAAG,MAAM,IAAA,oBAAO,EAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YACtE,OAAO,CAAC,GAAG,CAAC,yBAAyB,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YACvE,OAAO,CAAC,GAAG,CACT,6BACE,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QACnC,GAAG,CACJ,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,mBAAmB,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;SACnD;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO,CAAC,GAAG,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;SACrC;IACH,CAAC,CAAC,CAAC;IAEL,GAAG;SACA,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CAAC,kDAAkD,CAAC;SAC/D,QAAQ,CAAC,aAAa,EAAE,YAAY,CAAC;SACrC,QAAQ,CAAC,gBAAgB,EAAE,eAAe,CAAC;SAC3C,MAAM,CAAC,uBAAuB,EAAE,oCAAoC,CAAC;SACrE,MAAM,CAAC,4BAA4B,EAAE,0BAA0B,CAAC;SAChE,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;QAC1D,IAAI;YACF,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;YAC7C,MAAM,WAAW,GAAG,UAAU,EAAE,GAAG,IAAI,MAAM,CAAC;YAC9C,MAAM,GAAG,GAAG,IAAI,qBAAO,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;YAEzC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;gBACrB,OAAO,CAAC,QAAQ,GAAG,YAAY,CAAC;aACjC;YACD,IAAI,OAAO,CAAC,QAAQ,KAAK,YAAY,EAAE;gBACrC,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;gBACnD,MAAM,IAAA,yCAA4B,EAAC,SAAS,EAAE,YAAY,EAAE,GAAG,EAAE;oBAC/D,UAAU,EAAE,OAAO,CAAC,UAAU;iBAC/B,CAAC,CAAC;gBACH,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;aAChD;iBAAM;gBACL,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;aACnE;SACF;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO,CAAC,GAAG,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;SACrC;IACH,CAAC,CAAC,CAAC;IACL,OAAO,GAAG,CAAC;AACb,CAAC;AA7DD,wBA6DC"}
1
+ {"version":3,"file":"cmd.js","sourceRoot":"","sources":["../../src/web/cmd.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@osaas/cli",
3
- "version": "4.8.4",
3
+ "version": "4.10.0",
4
4
  "description": "Open Source Cloud CLI",
5
5
  "author": "Eyevinn Open Source Cloud <osc@eyevinn.se>",
6
6
  "homepage": "https://www.osaas.io",
@@ -38,5 +38,5 @@
38
38
  "publishConfig": {
39
39
  "access": "public"
40
40
  },
41
- "gitHead": "f2fd26e785fc80d629cab4916f3fd22e77726888"
41
+ "gitHead": "b88a923c7df03c125540d6ad7ff145684d8a98e9"
42
42
  }
package/readme.md CHANGED
@@ -152,3 +152,34 @@ PAT_SECRET=<pat-secret> osc admin list-instances eyevinn channel-engine
152
152
  ```
153
153
  PAT_SECRET=<pat-secret> osc --env dev admin remove-instance asdasd channel-engine mychannel
154
154
  ```
155
+
156
+ ### Create application configuration service instance
157
+
158
+ To manage configuration values for an application we can create an instance of an Application Config Service.
159
+
160
+ ```bash
161
+ % osc web config-create jonastest
162
+ Configuration service instance available at https://eyevinnlab-jonastest.eyevinn-app-config-svc.auto.prod.osaas.io
163
+ ```
164
+
165
+ And to remove it (with the data)
166
+
167
+ ```bash
168
+ % osc web config-delete --data jonastest
169
+ ```
170
+
171
+ ### Store application configuration values as environment variables
172
+
173
+ Configuration values managed by the Application Config Service can be stored as environment variable using this commmand.
174
+
175
+ ```bash
176
+ % osc web config-to-env <config-instance-name>
177
+ export AWS_ACCESS_KEY_ID=admin
178
+ export CHANNELURL=https://eyevinnlab.ce.prod.osaas.io/channels/mychannel/master.m3u8
179
+ ```
180
+
181
+ And storing it in the shell.
182
+
183
+ ```bash
184
+ % eval `osc web config-to-env <config-instance-name>`
185
+ ```
package/src/web/cmd.ts CHANGED
@@ -1,7 +1,21 @@
1
- import { Context } from '@osaas/client-core';
1
+ import {
2
+ Context,
3
+ createInstance,
4
+ getInstance,
5
+ getPortsForInstance,
6
+ removeInstance,
7
+ waitForInstanceReady
8
+ } from '@osaas/client-core';
2
9
  import { createCloudfrontDistribution, publish } from '@osaas/client-web';
3
10
  import { Command } from 'commander';
4
11
 
12
+ interface ConfigList {
13
+ offset: number;
14
+ limit: number;
15
+ total: number;
16
+ items: [{ key: string; value: string }];
17
+ }
18
+
5
19
  export function cmdWeb() {
6
20
  const web = new Command('web');
7
21
 
@@ -62,5 +76,148 @@ export function cmdWeb() {
62
76
  console.log((err as Error).message);
63
77
  }
64
78
  });
79
+
80
+ web
81
+ .command('config-create')
82
+ .description('Create a configuration service instance')
83
+ .argument('<name>', 'Name of the configuration service instance')
84
+ .action(async (name, options, command) => {
85
+ try {
86
+ const globalOpts = command.optsWithGlobals();
87
+ const environment = globalOpts?.env || 'prod';
88
+ const ctx = new Context({ environment });
89
+ const configToken = await ctx.getServiceAccessToken(
90
+ 'eyevinn-app-config-svc'
91
+ );
92
+ let configInstance = await getInstance(
93
+ ctx,
94
+ 'eyevinn-app-config-svc',
95
+ name,
96
+ configToken
97
+ );
98
+ if (!configInstance) {
99
+ const valkeyToken = await ctx.getServiceAccessToken(
100
+ 'valkey-io-valkey'
101
+ );
102
+ let valkeyInstance = await getInstance(
103
+ ctx,
104
+ 'valkey-io-valkey',
105
+ name,
106
+ valkeyToken
107
+ );
108
+ if (!valkeyInstance) {
109
+ valkeyInstance = await createInstance(
110
+ ctx,
111
+ 'valkey-io-valkey',
112
+ valkeyToken,
113
+ {
114
+ name
115
+ }
116
+ );
117
+ await waitForInstanceReady('valkey-io-valkey', name, ctx);
118
+ }
119
+ const ports = await getPortsForInstance(
120
+ ctx,
121
+ 'valkey-io-valkey',
122
+ name,
123
+ valkeyToken
124
+ );
125
+ const redisPort = ports.find((port) => port.internalPort == 6379);
126
+ if (!redisPort) {
127
+ throw new Error(`Failed to get redis port for instance ${name}`);
128
+ }
129
+ configInstance = await createInstance(
130
+ ctx,
131
+ 'eyevinn-app-config-svc',
132
+ configToken,
133
+ {
134
+ name,
135
+ RedisUrl: `redis://${redisPort.externalIp}:${redisPort.externalPort}`
136
+ }
137
+ );
138
+ await waitForInstanceReady('eyevinn-app-config-svc', name, ctx);
139
+ }
140
+ console.log(
141
+ `Configuration service instance available at ${configInstance.url}`
142
+ );
143
+ } catch (err) {
144
+ console.log((err as Error).message);
145
+ }
146
+ });
147
+
148
+ web
149
+ .command('config-delete')
150
+ .description('Delete a configuration service instance')
151
+ .argument('<name>', 'Name of the configuration service instance')
152
+ .option('--data', 'Delete config data')
153
+ .action(async (name, options, command) => {
154
+ try {
155
+ const globalOpts = command.optsWithGlobals();
156
+ const environment = globalOpts?.env || 'prod';
157
+ const ctx = new Context({ environment });
158
+ const configToken = await ctx.getServiceAccessToken(
159
+ 'eyevinn-app-config-svc'
160
+ );
161
+ const configInstance = await getInstance(
162
+ ctx,
163
+ 'eyevinn-app-config-svc',
164
+ name,
165
+ configToken
166
+ );
167
+ if (configInstance) {
168
+ await removeInstance(
169
+ ctx,
170
+ 'eyevinn-app-config-svc',
171
+ name,
172
+ configToken
173
+ );
174
+ if (options.data) {
175
+ console.log('Deleting config data...');
176
+ const valkeyToken = await ctx.getServiceAccessToken(
177
+ 'valkey-io-valkey'
178
+ );
179
+ await removeInstance(ctx, 'valkey-io-valkey', name, valkeyToken);
180
+ }
181
+ }
182
+ } catch (err) {
183
+ console.log((err as Error).message);
184
+ }
185
+ });
186
+
187
+ web
188
+ .command('config-to-env')
189
+ .description(
190
+ 'Load configuration from Application Config service and set as environment variables'
191
+ )
192
+ .argument(
193
+ '<configInstance>',
194
+ 'Name of the application configuration service instance'
195
+ )
196
+ .action(async (configInstance, options, command) => {
197
+ try {
198
+ const globalOpts = command.optsWithGlobals();
199
+ const environment = globalOpts?.env || 'prod';
200
+ const ctx = new Context({ environment });
201
+ const token = await ctx.getServiceAccessToken('eyevinn-app-config-svc');
202
+ const instance = await getInstance(
203
+ ctx,
204
+ 'eyevinn-app-config-svc',
205
+ configInstance,
206
+ token
207
+ );
208
+ if (instance) {
209
+ const url = new URL('/api/v1/config', instance.url);
210
+ const response = await fetch(url);
211
+ if (response.ok) {
212
+ const data: ConfigList = (await response.json()) as ConfigList;
213
+ data.items.map((config) => {
214
+ console.log(`export ${config.key.toUpperCase()}=${config.value}`);
215
+ });
216
+ }
217
+ }
218
+ } catch (err) {
219
+ console.log((err as Error).message);
220
+ }
221
+ });
65
222
  return web;
66
223
  }