import Editor from "@monaco-editor/react"; import RefreshIcon from "@mui/icons-material/Refresh"; import { Grid, IconButton, InputAdornment, Tooltip } from "@mui/material"; import { v4 as uuidv4 } from "uuid"; import { VMInfo } from "../../api/VMApi"; import { CheckboxInput } from "./CheckboxInput"; import { EditSection } from "./EditSection"; import { SelectInput } from "./SelectInput"; import { TextInput } from "./TextInput"; interface CloudInitProps { vm: VMInfo; onChange?: () => void; editable: boolean; } export function CloudInitEditor(p: CloudInitProps): React.ReactElement { return ( <> {/* Attach cloud init disk */} { p.vm.cloud_init.attach_config = v; p.onChange?.(); }} /> ); } function CloudInitMetadata(p: CloudInitProps): React.ReactElement { // Regenerate instance id const reGenerateInstanceId = () => { p.vm.cloud_init.instance_id = uuidv4(); p.onChange?.(); }; return ( {/* Instance ID */} { p.vm.cloud_init.instance_id = v; p.onChange?.(); }} endAdornment={ p.editable ? ( ) : ( <> ) } /> {/* Instance hostname */} { p.vm.cloud_init.local_hostname = v; p.onChange?.(); }} /> {/* Data source mode */} { p.vm.cloud_init.dsmode = v as any; p.onChange?.(); }} options={[ { label: "None", value: undefined }, { value: "Net" }, { value: "Local" }, ]} /> ); } function CloudInitRawUserData(p: CloudInitProps): React.ReactElement { return ( { p.vm.cloud_init.user_data = v ?? ""; p.onChange?.(); }} /> ); }