useKubernetes.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. const App = require('../../../models/App');
  2. const k8s = require('@kubernetes/client-node');
  3. const Logger = require('../../../utils/Logger');
  4. const logger = new Logger();
  5. const loadConfig = require('../../../utils/loadConfig');
  6. const useKubernetes = async (apps) => {
  7. const { useOrdering: orderType, unpinStoppedApps } = await loadConfig();
  8. let ingresses = null;
  9. try {
  10. const kc = new k8s.KubeConfig();
  11. kc.loadFromCluster();
  12. const k8sNetworkingV1Api = kc.makeApiClient(k8s.NetworkingV1Api);
  13. await k8sNetworkingV1Api.listIngressForAllNamespaces().then((res) => {
  14. ingresses = res.body.items;
  15. });
  16. } catch {
  17. logger.log("Can't connect to the Kubernetes API", 'ERROR');
  18. }
  19. if (ingresses) {
  20. apps = await App.findAll({
  21. order: [[orderType, 'ASC']],
  22. });
  23. ingresses = ingresses.filter(
  24. (e) => Object.keys(e.metadata.annotations).length !== 0
  25. );
  26. const kubernetesApps = [];
  27. for (const ingress of ingresses) {
  28. const annotations = ingress.metadata.annotations;
  29. if (
  30. 'flame.georgesg/name' in annotations &&
  31. 'flame.georgesg/url' in annotations &&
  32. /^app/.test(annotations['flame.georgesg/type'])
  33. ) {
  34. kubernetesApps.push({
  35. name: annotations['flame.georgesg/name'],
  36. url: annotations['flame.georgesg/url'],
  37. icon: annotations['flame.georgesg/icon'] || 'kubernetes',
  38. });
  39. }
  40. }
  41. if (unpinStoppedApps) {
  42. for (const app of apps) {
  43. await app.update({ isPinned: false });
  44. }
  45. }
  46. for (const item of kubernetesApps) {
  47. if (apps.some((app) => app.name === item.name)) {
  48. const app = apps.find((a) => a.name === item.name);
  49. await app.update({ ...item, isPinned: true });
  50. } else {
  51. await App.create({
  52. ...item,
  53. isPinned: true,
  54. });
  55. }
  56. }
  57. }
  58. };
  59. module.exports = useKubernetes;