Skip to content

Commit 6b10236

Browse files
committed
Implement default and remove methods
1 parent 70c52b5 commit 6b10236

File tree

1 file changed

+41
-1
lines changed

1 file changed

+41
-1
lines changed

Diff for: serverless.js

+41-1
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,30 @@
1+
const path = require('path')
12
const { isEmpty, mergeDeepRight } = require('ramda')
3+
const kubernetes = require('@kubernetes/client-node')
24
const { Component } = require('@serverless/core')
35

46
const defaults = {
5-
foo: 'bar'
7+
kubeConfigPath: path.join(process.env.HOME, '.kube', 'config'),
8+
name: 'default'
69
}
710

811
class KubernetesNamespace extends Component {
912
async default(inputs = {}) {
1013
const config = mergeDeepRight(defaults, inputs)
1114

15+
const k8sCore = this.getKubernetesClient(config.kubeConfigPath, kubernetes.CoreV1Api)
16+
17+
let namespaceExists = true
18+
try {
19+
await this.readNamespace(k8sCore, config)
20+
} catch (error) {
21+
namespaceExists = error.response.body.code === 404 ? false : true
22+
}
23+
24+
if (!namespaceExists) {
25+
await this.createNamespace(k8sCore, config)
26+
}
27+
1228
this.state = config
1329
await this.save()
1430
return this.state
@@ -20,10 +36,34 @@ class KubernetesNamespace extends Component {
2036
config = this.state
2137
}
2238

39+
const k8sCore = this.getKubernetesClient(config.kubeConfigPath, kubernetes.CoreV1Api)
40+
41+
await this.deleteNamespace(k8sCore, config)
42+
2343
this.state = {}
2444
await this.save()
2545
return {}
2646
}
47+
48+
// "private" methods
49+
getKubernetesClient(configPath, type) {
50+
let kc = new kubernetes.KubeConfig()
51+
kc.loadFromFile(configPath)
52+
kc = kc.makeApiClient(type)
53+
return kc
54+
}
55+
56+
async createNamespace(k8s, { name }) {
57+
return k8s.createNamespace({ metadata: { name } })
58+
}
59+
60+
async readNamespace(k8s, { name }) {
61+
return k8s.readNamespace(name)
62+
}
63+
64+
async deleteNamespace(k8s, { name }) {
65+
return k8s.deleteNamespace(name)
66+
}
2767
}
2868

2969
module.exports = KubernetesNamespace

0 commit comments

Comments
 (0)