Browse Source

Add configMap for defs.json in indexer

Anuj Bansal 3 years ago
parent
commit
123583adce
1 changed files with 70 additions and 41 deletions
  1. 70 41
      devops/infrastructure/query-node/index.ts

+ 70 - 41
devops/infrastructure/query-node/index.ts

@@ -5,9 +5,22 @@ import * as docker from '@pulumi/docker'
 import * as pulumi from '@pulumi/pulumi'
 import * as k8sjs from './k8sjs'
 import * as k8s from '@pulumi/kubernetes'
+import * as fs from 'fs'
 
 require('dotenv').config()
 
+interface EnvironmentType {
+  name: string
+  value: string
+}
+
+let envCopy: EnvironmentType[] = []
+let e: string = ''
+for (e in process.env) {
+  let envObject: EnvironmentType = { 'name': e, 'value': process.env[e]! }
+  envCopy.push(envObject)
+}
+
 // const awsConfig = new pulumi.Config('aws')
 
 // // Create a VPC for our cluster.
@@ -45,6 +58,10 @@ require('dotenv').config()
 //   localImageName: 'joystream/apps:latest',
 // }).imageName
 
+function getUniqueListByName(arr: EnvironmentType[]) {
+  return [...new Map(arr.map((item: EnvironmentType) => [item['name'], item])).values()]
+}
+
 export const joystreamAppsImage = 'joystream/apps'
 
 const name = 'query-node'
@@ -56,8 +73,16 @@ const ns = new k8s.core.v1.Namespace(name, {})
 // Export the Namespace name
 export const namespaceName = ns.metadata.name
 
-// Create a NGINX Deployment
 const appLabels = { appClass: name }
+
+const defsConfig = new k8s.core.v1.ConfigMap(name, {
+  metadata: { namespace: namespaceName, labels: appLabels },
+  data: { 'fileData': fs.readFileSync('../../../types/augment/all/defs.json').toString() },
+})
+const defsConfigName = defsConfig.metadata.apply((m) => m.name)
+
+// Create a Deployment
+
 const deployment = new k8s.apps.v1.Deployment(
   name,
   {
@@ -83,46 +108,51 @@ const deployment = new k8s.apps.v1.Deployment(
             {
               name: 'postgres-db',
               image: 'postgres:12',
-              env: [
+              env: getUniqueListByName([
                 { name: 'POSTGRES_USER', value: process.env.DB_USER! },
                 { name: 'POSTGRES_PASSWORD', value: process.env.DB_PASS! },
                 { name: 'POSTGRES_DB', value: process.env.INDEXER_DB_NAME! },
-              ],
+              ]),
               ports: [{ containerPort: 5432 }],
             },
             {
               name: 'temp-db-prepare-container',
               image: joystreamAppsImage,
               imagePullPolicy: 'Never',
-              env: [
+              env: getUniqueListByName([
                 {
                   name: 'DB_HOST',
                   value: 'postgres-db',
                 },
-              ],
+              ]),
               command: ['/bin/sh', '-c'],
               args: ['yarn workspace query-node-root db:prepare; yarn workspace query-node-root db:migrate'],
             },
-            // {
-            //   name: 'indexer',
-            //   image: 'joystream/hydra-indexer:2.1.0-beta.9',
-            //   env: [
-            //     { name: 'DB_HOST', value: 'postgres-db' },
-            //     { name: 'DB_NAME', value: process.env.INDEXER_DB_NAME! },
-            //     { name: 'INDEXER_WORKERS', value: '5' },
-            //     { name: 'REDIS_URI', value: 'redis://redis:6379/0' },
-            //     { name: 'DEBUG', value: 'index-builder:*' },
-            //     { name: 'WS_PROVIDER_ENDPOINT_URI', value: process.env.WS_PROVIDER_ENDPOINT_URI! },
-            //     { name: 'TYPES_JSON', value: 'types.json' },
-            //   ],
-            //   // volumeMounts: [
-            //   //   {
-            //   //     mountPath: '/home/hydra/packages/hydra-indexer/types.json',
-            //   //     name: 'indexer-volume',
-            //   //   },
-            //   // ],
-            //   command: ['sh', '-c', 'yarn db:bootstrap && yarn start:prod'],
-            // },
+            {
+              name: 'indexer',
+              image: 'joystream/hydra-indexer:2.1.0-beta.9',
+              env: getUniqueListByName([
+                // ...envCopy,
+                { name: 'DB_HOST', value: 'postgres-db' },
+                { name: 'DB_NAME', value: process.env.INDEXER_DB_NAME! },
+                { name: 'DB_PASS', value: process.env.DB_PASS! },
+                { name: 'INDEXER_WORKERS', value: '5' },
+                { name: 'REDIS_URI', value: 'redis://postgres-db:6379/0' },
+                { name: 'DEBUG', value: 'index-builder:*' },
+                { name: 'WS_PROVIDER_ENDPOINT_URI', value: process.env.WS_PROVIDER_ENDPOINT_URI! },
+                { name: 'TYPES_JSON', value: 'types.json' },
+                { name: 'PGUSER', value: process.env.DB_USER! },
+              ]),
+              volumeMounts: [
+                {
+                  mountPath: '/home/hydra/packages/hydra-indexer/types.json',
+                  name: 'indexer-volume',
+                  subPath: 'fileData',
+                },
+              ],
+              command: ['/bin/sh', '-c'],
+              args: ['yarn db:bootstrap && yarn start:prod'],
+            },
             // {
             //   name: 'hydra-indexer-gateway',
             //   image: 'joystream/hydra-indexer-gateway:2.1.0-beta.5',
@@ -173,22 +203,21 @@ const deployment = new k8s.apps.v1.Deployment(
             //   command: ['yarn', 'workspace', 'query-node-root', 'query-node:start:prod'],
             // },
           ],
-          // volumes: [
-          //   {
-          //     name: 'processor-volume',
-          //     hostPath: {
-          //       path: '/Users/anuj/Joystream/joystream/types/augment/all/defs.json',
-          //       type: 'FileOrCreate',
-          //     },
-          //   },
-          //   {
-          //     name: 'indexer-volume',
-          //     hostPath: {
-          //       path: '/Users/anuj/Joystream/joystream/types/augment/all/defs.json',
-          //       type: 'FileOrCreate',
-          //     },
-          //   },
-          // ],
+          volumes: [
+            // {
+            //   name: 'processor-volume',
+            //   hostPath: {
+            //     path: '/Users/anuj/Joystream/joystream/types/augment/all/defs.json',
+            //     type: 'FileOrCreate',
+            //   },
+            // },
+            {
+              name: 'indexer-volume',
+              configMap: {
+                name: defsConfigName,
+              },
+            },
+          ],
         },
       },
     },