/
get.js
115 lines (103 loc) · 3.29 KB
/
get.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/*
Copyright 2019 Adobe Inc. All rights reserved.
This file is licensed to you under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. You may obtain a copy
of the License at http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under
the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
OF ANY KIND, either express or implied. See the License for the specific language
governing permissions and limitations under the License.
*/
const RuntimeBaseCommand = require('../../../RuntimeBaseCommand')
const { flags } = require('@oclif/command')
const { cli } = require('cli-ux')
function createColumns (columnName) {
return {
firstColumn: {
header: columnName,
minWidth: 50,
'no-truncate': true,
get: row => `/${row.namespace}/${row.name}`
},
published: {
header: '',
'no-truncate': true,
minWidth: 8,
get: row => `${row.publish === false ? 'private' : 'public'}`
},
exec: {
header: '',
minWidth: 15,
'no-truncate': true,
get: (row) => {
const filtered = row.annotations.filter(elem => elem.key === 'exec')
if (filtered.length) {
return filtered[0].value
}
return ''
}
},
status: {
header: '',
minWidth: 10,
'no-truncate': true,
get: row => row.status ? row.status : ''
}
}
}
async function getRulesWithStatus (ow, rules) {
// unfortunately for rules, we need to do a 'get' for each to get the status
// (this is done the same way in the Go CLI)
const fetchRules = rules.map(async (rule) => {
return ow.rules.get({ name: rule.name })
})
return Promise.all(fetchRules)
}
class NamespaceGet extends RuntimeBaseCommand {
async run () {
const { flags } = this.parse(NamespaceGet)
try {
const ow = await this.wsk()
const data = await ow.namespaces.get()
data.rules = await getRulesWithStatus(ow, data.rules)
if (flags['name-sort'] || flags.name) {
data.rules.sort((a, b) => a.name.localeCompare(b.name))
data.actions.sort((a, b) => a.name.localeCompare(b.name))
data.packages.sort((a, b) => a.name.localeCompare(b.name))
data.triggers.sort((a, b) => a.name.localeCompare(b.name))
}
if (flags.json) {
this.logJSON('', data)
} else {
this.log('Entities in namespace:')
cli.table(data.packages, createColumns('packages'))
cli.table(data.actions, createColumns('actions'))
cli.table(data.triggers, createColumns('triggers'))
cli.table(data.rules, createColumns('rules'))
}
} catch (err) {
this.handleError('failed to get the data for a namespace', err)
}
}
}
NamespaceGet.flags = {
...RuntimeBaseCommand.flags,
json: flags.boolean({
description: 'output raw json'
}),
'name-sort': flags.boolean({
description: 'sort results by name'
}),
name: flags.boolean({
char: 'n',
description: 'sort results by name'
})
}
NamespaceGet.description = 'Get triggers, actions, and rules in the registry for namespace'
NamespaceGet.aliases = [
'rt:get',
'runtime:list',
'rt:list',
'runtime:ls',
'rt:ls']
module.exports = NamespaceGet