1 | ;
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const p_spawn_1 = require("p-spawn");
|
4 | const main_1 = require("./main");
|
5 | //#region ---------- Hook Functions ----------
|
6 | // finish initializing a realm object
|
7 | async function realm_init(realm) {
|
8 | // a aws realm must have a profile. Default is 'default'
|
9 | if (!realm.profile) {
|
10 | realm.profile = 'default';
|
11 | }
|
12 | }
|
13 | exports.realm_init = realm_init;
|
14 | async function dpush_prep(realm, serviceNames) {
|
15 | const repoNames = serviceNames.map(sn => { return main_1.getRepositoryName(realm, sn); });
|
16 | const existingRepositoryNames = await getRepositoryNames(realm);
|
17 | const missingRepositoryNames = repoNames.filter(n => !existingRepositoryNames.includes(n));
|
18 | await createRepositories(realm, missingRepositoryNames);
|
19 | }
|
20 | exports.dpush_prep = dpush_prep;
|
21 | // const args = ['login', '-u', 'AWS', '-p',
|
22 | // "eyJwYXlsb2FkIjoiSGNQSXUyWEFRaE9KaU1NVGtzTGRKZXdibVJnSGdULy9KbmxCdDF1bUVySlFiUGpuY0ZYMWRHazg2YU4vU1hpTGg3c2tmeURoSkRlUzRHS3NSYi8yYnk1MXNnRkJieW1vVExrVkdvMS9ycXk2bURyMGxUUXVnNlNkb0ZsN2I5ZVdBZjlYdjdFN0ZSVjBQME56UEFteWloVmQ3Si8zNWJNU1k1ZGw5dHZ2U2sxeEd6Y3JUUGRZN0RxK0lwQVA2TXZjYjFUT1BORDc0OXdjN1UzcWw2Zkd2Y2htVkZPdzZDa2NuVlNsOHJqUTJRU3orRUdnMDl3K1FQL0hteGhEY1A4UXhmL0l2SnM5QXVDRkhpMWN5bWpCdXZxUlE0SWtPKzYvbDJadS9CN1BNNDZqeU0wM3NIQzBsVGRNdktpVFhzSFpOQ0RSU1AyQ3hFT0x1T3pFcHpjTnZaUUhBZXpHdzQvRy8zQjVINFZ1bG5iY1pPaklkZVEyeklkbXBvcW9WZmNoMVJaL2MxOHJFbnhKaVcwM0pudTRIMElLSXVzaksvaytCdU9PZVlNSnRHUmpDK1NFWWk0ajBZMDhOZ1I4cVp4bktIdFBwSkUrVm9jTVJmdCtub3lLQklac0JJdTZtQ2srTTc1ZnVYeEp1V01ZL3pQY1dlcUdFbnZTWVRPbzRsd0RzRmlocEE3WmVsQjdGS1d0Y01Za2JBU1Z6d1JIUDlkM1dBRGhVMXBMcm1hM1VmUnFZVmtXdkNVaVF2QU5wbUZhVG9iWkJzeU9UUkFLaVM4cWV5ZUdtZnJyK3lUUGNVNW93REdnRWduMHdFbENnTDd6bkR1OTdMWjhvVUVZZkROd2FvdnJacEtWbUpJVW5UVWNMdml0eTFVa2tNSHhPNDBDRnRSckc3Y0hSbXovc0VhMjFOeDhpbTRlbVpKSUdNUzI1TUw1YWRqQ1ZOMXRDUVFRWUVTUWVqSzdXUkt3YmgvSWVGSXE3RjJDeVdUNllJU3BmTGYrbG5RR1pReXVOTlovbUtLNzRDOGJacDN5b3pVRUhoMWJPTy9UK2htQVp5Z1pTdmFBVnJkbTJ6OS9mcXpldWcxbzFhZGRwbG9sbDJMMlZZVFJBbklCcHhBQjlRQ0d4MDRsU3dyajJmL25Xc0JOT0xyR3BDZytJYnZpRlRWUzBxK2dLcU1rOWV4K1ZldGVKbXhWTjVZbm9TK1pxZHdGUmk5bkcxeW5QSVkwMWl4TnNRbzgxZ3BHNWJCclFqK0RwUEVxMnNrN2dlOUwzejNlWGRkaWdxcyt6eG5oUUNsdStJOEk4YjRiTEJEQmZTclBNUU0rSnpZblpGZ0hCUFF6NVBKU2U5d0syMGtFNk9KMzk0QVZmN0NHRGRjVThTc0JJanhoL2hyZ2tvMmlxZG9vQ3ZncTFKNnlROVdSY09RSXBORTg4VVBXZExvamZNcFBCZ0hnVVl4aVlPMHBMY2RqUVFaY0dNdGJwT29aSnc9PSIsImRhdGFrZXkiOiJBUUVCQUhqNmxjNFhJSncvN2xuMEhjMDBETWVrNkdFeEhDYlk0UklwVE1DSTU4SW5Vd0FBQUg0d2ZBWUpLb1pJaHZjTkFRY0dvRzh3YlFJQkFEQm9CZ2txaGtpRzl3MEJCd0V3SGdZSllJWklBV1VEQkFFdU1CRUVET2x2cmtCYi9VbFJQOE1HOEFJQkVJQTdkcEtMYlBMZHcvWS94MGR2aWV1cXFKc2c5Ni9aNnR6ZnBhdEozOUxka0d6VXgrMHF2cnYyajJUN2I4bC9MWW5ZaURIUExNVFVIMjBJR1A0PSIsInZlcnNpb24iOiIyIiwidHlwZSI6IkRBVEFfS0VZIiwiZXhwaXJhdGlvbiI6MTU2MDE2NjYyNn0=", 'https://349642121055.dkr.ecr.us-west-2.amazonaws.com']
|
23 | async function dpush_image_ex(realm, ex, remoteImage) {
|
24 | console.log(`dpush - recovering - first docker dpush to ${remoteImage} failed, trying to recover`);
|
25 | // aws ecr get-login --no-include-email
|
26 | const reloginCmd = await p_spawn_1.spawn('aws', ['ecr', 'get-login', '--no-include-email', '--profile', realm.profile], { capture: 'stdout' });
|
27 | const reloginArg = reloginCmd.stdout.trim().split(' ');
|
28 | reloginArg.shift(); // remove the 'docker' first item.
|
29 | try {
|
30 | const relogin = await p_spawn_1.spawn('docker', reloginArg, { capture: 'stdout' });
|
31 | console.log('dpush - relogin success');
|
32 | console.log(`dpush - trying to push again ${remoteImage}`);
|
33 | await p_spawn_1.spawn('docker', ['push', remoteImage]);
|
34 | console.log('dpush - fully recovered');
|
35 | }
|
36 | catch (ex2) {
|
37 | console.log('dpush - error - relogin/repush failed', ex2);
|
38 | throw ex2;
|
39 | }
|
40 | return true;
|
41 | }
|
42 | exports.dpush_image_ex = dpush_image_ex;
|
43 | //#endregion ---------- /Hook Functions ----------
|
44 | //#region ---------- Utils ----------
|
45 | async function createRepositories(realm, repoNames) {
|
46 | for (const repo of repoNames) {
|
47 | // aws ecr create-repository --profile default --repository-name cstar-agent
|
48 | console.log(`Info - aws ECR repository ${repo} does not exist, creating...`);
|
49 | await p_spawn_1.spawn('aws', ['ecr', 'create-repository', '--profile', realm.profile, '--repository-name', repo]);
|
50 | }
|
51 | }
|
52 | async function getRepositoryNames(realm) {
|
53 | // NOTE: Somehow even when the login has expired, this call works (it's the push that does not work)
|
54 | const dataStr = await p_spawn_1.spawn('aws', ['ecr', 'describe-repositories', '--profile', realm.profile], { capture: 'stdout' });
|
55 | const repositories = JSON.parse(dataStr.stdout.trim()).repositories;
|
56 | if (repositories) {
|
57 | return repositories.map((r) => r.repositoryName);
|
58 | }
|
59 | else {
|
60 | return [];
|
61 | }
|
62 | }
|
63 | //#endregion ---------- /Utils ----------
|