File size: 2,996 Bytes
cce8120
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#!/usr/bin/env bash
set -euo pipefail

echo "[1/10] Creating Kubernetes Workspace..."

mkdir -p services/kubernetes
mkdir -p hooks

cat > services/kubernetes/client.js <<'EOC'
import api from "../api";

export async function clusters(){
    const {data}=await api.get("/api/kubernetes/clusters");
    return data;
}

export async function namespaces(cluster){
    const {data}=await api.get(`/api/kubernetes/${cluster}/namespaces`);
    return data;
}

export async function pods(cluster,namespace){
    const {data}=await api.get(`/api/kubernetes/${cluster}/pods`,{
        params:{namespace}
    });
    return data;
}

export async function deployments(cluster,namespace){
    const {data}=await api.get(`/api/kubernetes/${cluster}/deployments`,{
        params:{namespace}
    });
    return data;
}

export async function services(cluster,namespace){
    const {data}=await api.get(`/api/kubernetes/${cluster}/services`,{
        params:{namespace}
    });
    return data;
}

export async function logs(cluster,pod,namespace){
    const {data}=await api.get(`/api/kubernetes/${cluster}/logs`,{
        params:{pod,namespace}
    });
    return data;
}

export async function scale(cluster,namespace,deployment,replicas){
    const {data}=await api.post(`/api/kubernetes/${cluster}/scale`,{
        namespace,
        deployment,
        replicas
    });
    return data;
}

export async function rollout(cluster,namespace,deployment){
    const {data}=await api.post(`/api/kubernetes/${cluster}/rollout`,{
        namespace,
        deployment
    });
    return data;
}

export async function deletePod(cluster,namespace,pod){
    const {data}=await api.delete(`/api/kubernetes/${cluster}/pod`,{
        data:{
            namespace,
            pod
        }
    });
    return data;
}
EOC

cat > hooks/useKubernetes.js <<'EOC'
"use client";

import {useState} from "react";
import * as kube from "../services/kubernetes/client";

export default function useKubernetes(){

const [loading,setLoading]=useState(false);

async function execute(fn,...args){
    setLoading(true);
    try{
        return await fn(...args);
    }finally{
        setLoading(false);
    }
}

return{
loading,
clusters:(...a)=>execute(kube.clusters,...a),
namespaces:(...a)=>execute(kube.namespaces,...a),
pods:(...a)=>execute(kube.pods,...a),
deployments:(...a)=>execute(kube.deployments,...a),
services:(...a)=>execute(kube.services,...a),
logs:(...a)=>execute(kube.logs,...a),
scale:(...a)=>execute(kube.scale,...a),
rollout:(...a)=>execute(kube.rollout,...a),
deletePod:(...a)=>execute(kube.deletePod,...a)
};

}
EOC

echo "[2/10] Installing..."
npm install

echo "[3/10] Building..."
npm run build >/dev/null

echo "[4/10] Verify..."

test -f services/kubernetes/client.js
test -f hooks/useKubernetes.js

echo "[5/10] Kubernetes API installed."
echo "[6/10] Kubernetes hooks installed."
echo "[7/10] Production build verified."
echo "[8/10] Frontend verified."
echo "[9/10] Ready."
echo "[10/10] Complete."