Skip to content

Commit

Permalink
fix: add create enclave name and production mode for enclaves (#1211)
Browse files Browse the repository at this point in the history
  • Loading branch information
Peeeekay committed Aug 31, 2023
1 parent c774df0 commit 2760f48
Show file tree
Hide file tree
Showing 25 changed files with 110 additions and 51 deletions.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Expand Up @@ -7,7 +7,7 @@
// Code generated by protoc-gen-grpc-web. DO NOT EDIT.
// versions:
// protoc-gen-grpc-web v1.4.2
// protoc v3.15.6
// protoc v3.19.1
// source: api_container_service.proto


Expand Down
Expand Up @@ -13,7 +13,13 @@

var jspb = require('google-protobuf');
var goog = jspb;
var global = Function('return this')();
var global = (function() {
if (this) { return this; }
if (typeof window !== 'undefined') { return window; }
if (typeof global !== 'undefined') { return global; }
if (typeof self !== 'undefined') { return self; }
return Function('return this')();
}.call(null));

var google_protobuf_empty_pb = require('google-protobuf/google/protobuf/empty_pb.js');
goog.object.extend(proto, google_protobuf_empty_pb);
Expand Down
Expand Up @@ -7,7 +7,7 @@
// Code generated by protoc-gen-grpc-web. DO NOT EDIT.
// versions:
// protoc-gen-grpc-web v1.4.2
// protoc v3.15.6
// protoc v3.19.1
// source: engine_service.proto


Expand Down
Expand Up @@ -13,7 +13,13 @@

var jspb = require('google-protobuf');
var goog = jspb;
var global = Function('return this')();
var global = (function() {
if (this) { return this; }
if (typeof window !== 'undefined') { return window; }
if (typeof global !== 'undefined') { return global; }
if (typeof self !== 'undefined') { return self; }
return Function('return this')();
}.call(null));

var google_protobuf_empty_pb = require('google-protobuf/google/protobuf/empty_pb.js');
goog.object.extend(proto, google_protobuf_empty_pb);
Expand Down
8 changes: 5 additions & 3 deletions engine/frontend/src/api/api.js
Expand Up @@ -7,7 +7,7 @@ import {
InspectFilesArtifactContentsRequest,
RunStarlarkPackageRequest
} from "enclave-manager-sdk/build/kurtosis_enclave_manager_api_pb";
import {CreateEnclaveArgs} from "enclave-manager-sdk/build/engine_service_pb";
import {CreateEnclaveArgs, EnclaveMode} from "enclave-manager-sdk/build/engine_service_pb";
import {RunStarlarkPackageArgs} from "enclave-manager-sdk/build/api_container_service_pb";

export const createClient = (apiHost) => {
Expand Down Expand Up @@ -68,16 +68,18 @@ export const inspectFilesArtifactContentsFromEnclaveManager = async (host, port,
return enclaveManagerClient.inspectFilesArtifactContents(request, createHeaderOptionsWithToken(token));
}


export const createEnclaveFromEnclaveManager = async (enclaveName, logLevel, versionTag, token, apiHost) => {
export const createEnclaveFromEnclaveManager = async (enclaveName, logLevel, versionTag, token, apiHost, productionMode) => {
const enclaveManagerClient = createClient(apiHost);
const mode = productionMode ? EnclaveMode.PRODUCTION : EnclaveMode.TEST;
const request = new CreateEnclaveArgs(
{
"enclaveName": enclaveName,
"apiContainerVersionTag": versionTag,
"apiContainerLogLevel": logLevel,
"mode": mode,
}
);
console.log("Sending Create Enclave Request with Args", request)
return enclaveManagerClient.createEnclave(request, createHeaderOptionsWithToken(token));
}

Expand Down
5 changes: 2 additions & 3 deletions engine/frontend/src/api/enclave.js
Expand Up @@ -19,11 +19,10 @@ export const getEnclavesFromKurtosis = async (token, apiHost) => {
return []
}

export const createEnclave = async (token, apiHost) => {
const enclaveName = ""; // TODO We could make this input from the UI
export const createEnclave = async (token, apiHost, enclaveName, productionMode) => {
const apiContainerVersionTag = "";
const apiContainerLogLevel = "info";
const response = await createEnclaveFromEnclaveManager(enclaveName, apiContainerLogLevel, apiContainerVersionTag, token, apiHost)
const response = await createEnclaveFromEnclaveManager(enclaveName, apiContainerLogLevel, apiContainerVersionTag, token, apiHost, productionMode)

const enclave = response.enclaveInfo;
return {
Expand Down
10 changes: 8 additions & 2 deletions engine/frontend/src/component/CreateEnclave.js
Expand Up @@ -7,9 +7,12 @@ import {useAppContext} from "../context/AppState";

const CreateEnclave = ({addEnclave}) => {
const navigate = useNavigate()
const [enclaveName, setEnclaveName] = useState("")
const [name, setName] = useState('');
const [args, setArgs] = useState('{}')
const [enclave, setEnlave] = useState(null);
const [productionMode, setProductionMode] = useState(false)

const {appData} = useAppContext()

const handleModalSubmit = (enclave) => {
Expand All @@ -21,10 +24,13 @@ const CreateEnclave = ({addEnclave}) => {
<div className='h-full w-full flex'>
<Routes>
<Route path="/create"
element={<CreateEnclaveModal addEnclave={addEnclave} name={name} setName={setName} args={args}
element={<CreateEnclaveModal enclaveName={enclaveName} addEnclave={addEnclave} name={name} setName={setName} setEnclaveName={setEnclaveName} args={args}
setArgs={setArgs} handleSubmit={handleModalSubmit}
token={appData.jwtToken}
apiHost={appData.apiHost}/>}/>
apiHost={appData.apiHost}
productionMode={productionMode}
setProductionMode={setProductionMode}
/>}/>
<Route path="/progress" element={<CreateEnclaveView args={args} packageId={name} enclave={enclave}/>}/>
</Routes>
</div>
Expand Down
32 changes: 24 additions & 8 deletions engine/frontend/src/component/CreateEnclaveModal.js
@@ -1,17 +1,17 @@
import React, {useState}from 'react';
import { useNavigate } from 'react-router';
import {createEnclave} from "../api/enclave";
import {Button} from "@chakra-ui/react";
import {Button, Checkbox} from "@chakra-ui/react";

export const CreateEnclaveModal = ({handleSubmit, name, setName, args, setArgs, addEnclave, token, apiHost}) => {
export const CreateEnclaveModal = ({enclaveName, handleSubmit, name, setName, args, setArgs, addEnclave, token, apiHost, setEnclaveName, productionMode, setProductionMode}) => {
const [jsonError, setJsonError] = useState("")
const navigate = useNavigate();
const [runningPackage, setRunningPackage] = useState(false)

const handleFormSubmit = (e) => {
e.preventDefault();
const fetch = async () => {
const enclave = await createEnclave(token, apiHost);
const enclave = await createEnclave(token, apiHost, enclaveName, productionMode);
addEnclave(enclave)
handleSubmit(enclave);
}
Expand All @@ -30,16 +30,32 @@ export const CreateEnclaveModal = ({handleSubmit, name, setName, args, setArgs,
<div className="flex justify-center w-full h-fit m-14">
<form className="bg-gray-100 p-6 rounded-lg shadow-md w-1/3" on>
<div className="text-center">
<label className="block mb-4 text-2xl text-black">
<label className="block mb-4 text-2xl text-black">
Enclave Name:
<input
type="text"
placeholder="Optional"
value={enclaveName}
onChange={(e) => setEnclaveName(e.target.value)}
className="block w-full rounded-md border-gray-300 py-2 px-3 mt-1 focus:outline-none focus:ring-blue-500 focus:border-blue-500"
/>
</label>
<label className="block mb-4 text-2xl text-black space-x-2">
<Checkbox colorScheme='blue' border={'black'} isChecked={productionMode} onChange={(e)=>setProductionMode(e.target.checked)}>
<div class="text-xl text-black"> Production Mode </div>
</Checkbox>
</label>
<label className="block mb-4 text-2xl text-black">
Package Id:
<input
type="text"
placeholder="Required"
value={name}
onChange={(e) => setName(e.target.value)}
className="block w-full rounded-md border-gray-300 py-2 px-3 mt-1 focus:outline-none focus:ring-blue-500 focus:border-blue-500"
/>
</label>
<label className="block mb-4 text-black">
</label>
<label className="block mb-4 text-black">
Args: (Json)
<textarea
value={args}
Expand All @@ -48,8 +64,8 @@ export const CreateEnclaveModal = ({handleSubmit, name, setName, args, setArgs,
rows={4}
></textarea>
<p className='text-red-300 font-bold'>{jsonError}</p>
</label>
<div className="flex row gap-10">
</label>
<div className="flex row gap-10">
<Button
onClick={handleFormSubmit}
type="submit"
Expand Down
2 changes: 1 addition & 1 deletion engine/frontend/src/component/PackageCatalog.js
Expand Up @@ -69,7 +69,7 @@ const PackageCatalog = ({kurtosisPackages: defaultPackages}) => {
gap={2}
>
<GridItem area={'option'} pt="1">
<PackageCatalogOption />
<PackageCatalogOption catalog={true}/>
</GridItem>
<GridItem area={'search'} m="10px">
<InputGroup>
Expand Down
36 changes: 30 additions & 6 deletions engine/frontend/src/component/PackageCatalogForm.js
Expand Up @@ -8,14 +8,14 @@ import {
Stack,
Text,
Textarea,
Checkbox,
} from '@chakra-ui/react'
import PackageCatalogOption from "./PackageCatalogOption";
import { useLocation, useNavigate } from "react-router";
import {useState} from 'react';

const yaml = require("js-yaml")


const renderArgs = (args, handleChange, formData, errorData) => {
return args.map((arg, index) => {
let placeholder = "";
Expand Down Expand Up @@ -108,6 +108,7 @@ const PackageCatalogForm = ({handleCreateNewEnclave}) => {
const {kurtosisPackage} = state
const [runningPackage, setRunningPackage] = useState(false)
const [enclaveName, setEnclaveName] = useState("")
const [productionMode, setProductionMode] = useState(false)

let initialFormData = {}
kurtosisPackage.args.map(
Expand Down Expand Up @@ -213,7 +214,8 @@ const PackageCatalogForm = ({handleCreateNewEnclave}) => {
packageId: kurtosisPackage.name,
args: stringifiedArgs,
}
handleCreateNewEnclave(runKurtosisPackageArgs)

handleCreateNewEnclave(runKurtosisPackageArgs, enclaveName, productionMode)

} else {
const newErrorData = {
Expand All @@ -240,15 +242,37 @@ const PackageCatalogForm = ({handleCreateNewEnclave}) => {
gap={2}
>
<GridItem area={'option'} pt="1">
<PackageCatalogOption />
<PackageCatalogOption catalog={true} />
</GridItem>
<GridItem area={'packageId'} p="1">
<Center>
<Text color={"white"} fontSize={"4xl"}> {kurtosisPackage.name} </Text>
</Center>
<Flex direction={"column"} gap={"2"}>
<Center>
<Text color={"white"} fontSize={"4xl"}> {kurtosisPackage.name} </Text>
</Center>
<Center>
<Checkbox color={"white"} fontSize={"2xl"} isChecked={productionMode} onChange={(e)=>setProductionMode(e.target.checked)}>
<Text color={"white"} fontSize={"xl"} textAlign={"justify-center"}>
Production Mode
</Text>
</Checkbox>
</Center>
</Flex>
</GridItem>
<GridItem area={'main'} h="90%" overflowY={"scroll"} mt="10">
<Stack spacing={4}>
<Flex color={"white"}>
<Flex mr="3" direction={"column"} w="15%">
<Text align={"center"} fontSize={"xl"}> Enclave Name </Text>
</Flex>
<Flex flex="1" mr="3" direction={"column"}>
<Input
placeholder={"IF NOT PROVIDED, THIS WILL BE GENERATED AUTOMATICALLY"}
color='gray.300'
value={enclaveName}
onChange={(e)=>setEnclaveName(e.target.value)}
/>
</Flex>
</Flex>
{renderArgs(kurtosisPackage.args, handleFormDataChange, formData, errorData)}
</Stack>
</GridItem>
Expand Down
8 changes: 4 additions & 4 deletions engine/frontend/src/component/PackageCatalogOption.js
Expand Up @@ -6,14 +6,14 @@ import {

import { useNavigate, useLocation} from 'react-router';

const PackageCatalogOption = () => {
const PackageCatalogOption = ({catalog}) => {
const navigate = useNavigate();
const location = useLocation();
const handleCatalogForm = () => {
if (!(location.pathname.includes("catalog"))) {
if (!catalog) {
navigate("/catalog")
}
}

return (
<Grid
templateAreas={`"catalog manual"`}
Expand All @@ -26,7 +26,7 @@ const PackageCatalogOption = () => {
gap={2}
>
<GridItem area={'catalog'}>
<Center h="100%" w="100%" color='white' bg="#24BA27" p="2" onClick={handleCatalogForm}>
<Center border={catalog ? "2px": null} h="100%" w="100%" color='white' bg="#24BA27" p="2" onClick={handleCatalogForm}>
Catalog
</Center>
</GridItem>
Expand Down
4 changes: 2 additions & 2 deletions engine/frontend/src/component/PackageCatalogRouter.js
Expand Up @@ -22,9 +22,9 @@ const PackageCatalogRouter = ({addEnclave}) => {
fetchPackages();
},[])

const createNewEnclave = (runArgs) => {
const createNewEnclave = (runArgs, enclaveName, productionMode) => {
const request = async () => {
const enclave = await createEnclave(appData.jwtToken, appData.apiHost);
const enclave = await createEnclave(appData.jwtToken, appData.apiHost, enclaveName, productionMode);
addEnclave(enclave)
navigate("/catalog/progress", {state: {
enclave,
Expand Down
12 changes: 6 additions & 6 deletions engine/server/webapp/asset-manifest.json
@@ -1,13 +1,13 @@
{
"files": {
"main.css": "./static/css/main.36b0e1c8.css",
"main.js": "./static/js/main.ae44d0f7.js",
"main.css": "./static/css/main.57000d71.css",
"main.js": "./static/js/main.bfca3041.js",
"index.html": "./index.html",
"main.36b0e1c8.css.map": "./static/css/main.36b0e1c8.css.map",
"main.ae44d0f7.js.map": "./static/js/main.ae44d0f7.js.map"
"main.57000d71.css.map": "./static/css/main.57000d71.css.map",
"main.bfca3041.js.map": "./static/js/main.bfca3041.js.map"
},
"entrypoints": [
"static/css/main.36b0e1c8.css",
"static/js/main.ae44d0f7.js"
"static/css/main.57000d71.css",
"static/js/main.bfca3041.js"
]
}
2 changes: 1 addition & 1 deletion engine/server/webapp/index.html
@@ -1 +1 @@
<!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><title>Kurtosis Enclave Manager</title><script defer="defer" src="./static/js/main.ae44d0f7.js"></script><link href="./static/css/main.36b0e1c8.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
<!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><title>Kurtosis Enclave Manager</title><script defer="defer" src="./static/js/main.bfca3041.js"></script><link href="./static/css/main.57000d71.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>

0 comments on commit 2760f48

Please sign in to comment.