Skip to content

Commit 14b90a0

Browse files
committed
Final fixes to work with new Components version
1 parent b587a02 commit 14b90a0

File tree

5 files changed

+66
-21
lines changed

5 files changed

+66
-21
lines changed

Diff for: .gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,4 @@ build/
2020
env.js
2121
package-lock.json
2222
test
23+
tmp/

Diff for: README.md

+15-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,21 @@ Just create a `serverless.yml` file
2525
$ touch serverless.yml
2626
```
2727

28-
Make sure that you have generated your [`Kubeconfig` file](https://rancher.com/docs/rancher/v2.x/en/cluster-admin/kubeconfig/) via `kubectl`.
28+
Then create a `.env` file
29+
30+
```console
31+
$ touch .env
32+
```
33+
34+
Update the `.env` file with information about your Kubernetes setup
35+
36+
```
37+
# .env
38+
KUBERNETES_ENDPOINT=https://cluster.example.com
39+
KUBERNETES_PORT=6443
40+
KUBERNETES_SERVICE_ACCOUNT_TOKEN=xxxx
41+
KUBERNETES_SKIP_TLS_VERIFY=false
42+
```
2943

3044
### 3. Configure
3145

@@ -38,7 +52,6 @@ name: todo-kubernetes-namespace
3852
component: kubernetes-namespace@dev
3953

4054
inputs:
41-
kubeConfigPath: ../kubeconfig # default is `~/.kube/config`
4255
name: 'default' # default is `'default'`
4356
labels: # default is `null`
4457
foo: bar

Diff for: package.json

-5
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,6 @@
1111
},
1212
"author": "Serverless, Inc.",
1313
"license": "Apache",
14-
"dependencies": {
15-
"@kubernetes/client-node": "^0.11.1",
16-
"@serverless/core": "^1.1.2",
17-
"ramda": "^0.26.1"
18-
},
1914
"devDependencies": {
2015
"babel-eslint": "^9.0.0",
2116
"eslint": "^5.6.0",

Diff for: src/package.json

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"name": "@serverless/kubernetes-namespace",
3+
"version": "0.2.0",
4+
"main": "./serverless.js",
5+
"publishConfig": {
6+
"access": "public"
7+
},
8+
"scripts": {
9+
"test": "echo \"Error: no test specified\" && exit 1"
10+
},
11+
"author": "Serverless, Inc.",
12+
"license": "Apache",
13+
"dependencies": {
14+
"@kubernetes/client-node": "^0.11.1"
15+
}
16+
}

Diff for: src/serverless.js

+34-14
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
1-
const path = require('path')
2-
const { isEmpty, mergeDeepRight } = require('ramda')
31
const kubernetes = require('@kubernetes/client-node')
42
const { Component } = require('@serverless/core')
53

64
const defaults = {
7-
kubeConfigPath: path.join(process.env.HOME, '.kube', 'config'),
85
name: 'default',
96
labels: null
107
}
118

129
class KubernetesNamespace extends Component {
1310
async deploy(inputs = {}) {
14-
const config = mergeDeepRight(defaults, inputs)
11+
const config = {
12+
...defaults,
13+
...inputs
14+
}
1515

16-
const k8sCore = this.getKubernetesClient(config.kubeConfigPath, kubernetes.CoreV1Api)
16+
const k8sCore = this.getKubernetesClient(kubernetes.CoreV1Api)
1717

1818
let namespaceExists = true
1919
try {
@@ -31,12 +31,13 @@ class KubernetesNamespace extends Component {
3131
}
3232

3333
async remove(inputs = {}) {
34-
let config = mergeDeepRight(defaults, inputs)
35-
if (isEmpty(config)) {
36-
config = this.state
34+
const config = {
35+
...defaults,
36+
...inputs,
37+
...this.state
3738
}
3839

39-
const k8sCore = this.getKubernetesClient(config.kubeConfigPath, kubernetes.CoreV1Api)
40+
const k8sCore = this.getKubernetesClient(kubernetes.CoreV1Api)
4041

4142
await this.deleteNamespace(k8sCore, config)
4243

@@ -45,11 +46,30 @@ class KubernetesNamespace extends Component {
4546
}
4647

4748
// "private" methods
48-
getKubernetesClient(configPath, type) {
49-
let kc = new kubernetes.KubeConfig()
50-
kc.loadFromFile(configPath)
51-
kc = kc.makeApiClient(type)
52-
return kc
49+
getKubernetesClient(type) {
50+
const { endpoint, port } = this.credentials.kubernetes
51+
const token = this.credentials.kubernetes.serviceAccountToken
52+
const skipTLSVerify = this.credentials.kubernetes.skipTlsVerify ? true : false
53+
const kc = new kubernetes.KubeConfig()
54+
kc.loadFromOptions({
55+
clusters: [
56+
{
57+
name: 'cluster',
58+
skipTLSVerify,
59+
server: `${endpoint}:${port}`
60+
}
61+
],
62+
users: [{ name: 'user', token }],
63+
contexts: [
64+
{
65+
name: 'context',
66+
user: 'user',
67+
cluster: 'cluster'
68+
}
69+
],
70+
currentContext: 'context'
71+
})
72+
return kc.makeApiClient(type)
5373
}
5474

5575
async createNamespace(k8s, { name, labels }) {

0 commit comments

Comments
 (0)