Your IP : 216.73.217.13


Current Path : /snap/lxd/current/share/lxd-ui/assets/
Upload File :
Current File : //snap/lxd/current/share/lxd-ui/assets/CreateInstance-BVNecuzG.js

import{r as v,C as Re,b as Ee,J as ne,K as $e,j as e,d as o,M as Ae,x as z,O as He,P as ke,Q as qe,y as ze,S as ce,T as Ke,t as Le,U as Z,E as ue,v as de,c as me,V as pe,k as he,f as ge,W as fe,s as Pe,X as We,z as ae,R as K,Y as we,Z as Ce,_ as Oe,$ as Be,p as Me,a0 as be,a1 as Ye,h as Qe,a2 as Xe,a3 as Je,a4 as Ze,a5 as ea}from"./index-BsQN_SZU.js";import{l as aa,b as ta,a as ve,L as J,i as te,c as se,d as ie}from"./images-dZFGKb1g.js";import{Y as sa,y as na,o as oa}from"./YamlSwitch-BStSXJFs.js";import{u as ra,P as la,a as ia,S as ca,M as xe,Y as ee,I as ua,D as ye,N as da,G as ma,b as pa,O as ha,R as ga,c as fa,d as Ca,e as ba,f as va,g as xa,h as ya,i as Ia,B as ja,j as Sa,C as _a,k as Ta,l as Na,r as Fa,s as Ra,m as Ea,n as Aa,o as La,p as Pa,q as wa,t as Oa,v as Ba}from"./SshKeyForm-BNz7yPwa.js";import{b as Ma}from"./useClusterGroups-BmTnhLw-.js";import{P as Ua}from"./PlacementGroupForm-BwX2oRGT.js";import{C as Va,h as Da,a as Ga,b as Ie,D as $a,N as Ha,G as ka,P as qa,O as za,c as Ka}from"./NetworkDevicePanel-Dyz6smUO.js";import{A as Wa}from"./AutoExpandingTextArea-Bd-45rZK.js";import{S as Ya}from"./formFields-DzJouV_d.js";import{P as Qa}from"./ProgressBar-CZqVHpuJ.js";import{S as Ue}from"./StoragePoolSelector-Bvqvds5t.js";import{C as Xa}from"./ClusterMemberSelector-o7hg9ebZ.js";import{B as Ja}from"./BaseLayout-D3ZT4TU8.js";import{F as Za}from"./FormFooterLayout-CcbL_-PB.js";import{Y as et}from"./NetworkDefaultACLSelector-8KsXe1ya.js";import{u as at,p as je}from"./usePanelParams-CNAJZsSX.js";import"./limits-yeXZOxhv.js";import"./scroll-Dc7Cgzms.js";import"./ProjectRichChip-DZzjTfq6.js";import"./ConfigFieldDescription-CjXKAIpa.js";import"./snapshots-LtzKNDw1.js";import"./DiskSizeSelector-C9kWj54D.js";import"./StorageVolumeForm-C6mvm1BU.js";import"./formChangeCount-Kjdextdt.js";import"./StoragePoolRichChip-Daex_aZU.js";import"./StoragePoolSize-BNbqTfwA.js";import"./Meter-cq8smrSm.js";import"./projects-CczQ3aFg.js";import"./useVolumes-Bxw5lKYj.js";import"./storage-volumes-CG043sqG.js";import"./FormLink-3uUdaYvf.js";import"./UploadCustomIso-C4mIsVip.js";import"./useNetworks-1j5RF-bH.js";import"./ExpandableList-DsGr0BpD.js";import"./NetworkRichChip-Cp8QBNS_.js";import"./NetworkSelector-DuJmwRYk.js";import"./useNetworkAcls-Bl3lzJua.js";import"./network-acls-bpCzo6oH.js";const Se={ARCH_32BIT_INTEL_X86:"i686",ARCH_64BIT_INTEL_X86:"x86_64",ARCH_32BIT_ARMV6_LITTLE_ENDIAN:"armv6l",ARCH_32BIT_ARMV7_LITTLE_ENDIAN:"armv7l",ARCH_32BIT_ARMV8_LITTLE_ENDIAN:"armv8l",ARCH_64BIT_ARMV8_LITTLE_ENDIAN:"aarch64",ARCH_32BIT_POWERPC_BIG_ENDIAN:"ppc",ARCH_64BIT_POWERPC_BIG_ENDIAN:"ppc64",ARCH_64BIT_POWERPC_LITTLE_ENDIAN:"ppc64le",ARCH_64BIT_S390_BIG_ENDIAN:"s390x",ARCH_32BIT_MIPS:"mips",ARCH_64BIT_MIPS:"mips64",ARCH_32BIT_RISCV_LITTLE_ENDIAN:"riscv32",ARCH_64BIT_RISCV_LITTLE_ENDIAN:"riscv64"},_e={ARCH_32BIT_INTEL_X86:["i386","i586","386","x86","generic_32"],ARCH_64BIT_INTEL_X86:["amd64","generic_64"],ARCH_32BIT_ARMV6_LITTLE_ENDIAN:["armel","arm"],ARCH_32BIT_ARMV7_LITTLE_ENDIAN:["armhf","armhfp","armv7a_hardfp","armv7","armv7a_vfpv3_hardfp"],ARCH_32BIT_ARMV8_LITTLE_ENDIAN:[],ARCH_64BIT_ARMV8_LITTLE_ENDIAN:["arm64","arm64_generic"],ARCH_32BIT_POWERPC_BIG_ENDIAN:["powerpc"],ARCH_64BIT_POWERPC_BIG_ENDIAN:["powerpc64","ppc64"],ARCH_64BIT_POWERPC_LITTLE_ENDIAN:["ppc64el"],ARCH_32BIT_MIPS:["mipsel","mipsle"],ARCH_64BIT_MIPS:["mips64el","mips64le"],ARCH_32BIT_RISCV_LITTLE_ENDIAN:[],ARCH_64BIT_RISCV_LITTLE_ENDIAN:[]},tt=a=>{const l=[],i=Object.keys(Se);return a.map(c=>{const d=i.find(r=>Se[r]===c);d&&d in _e&&l.push(..._e[d]),l.push(c)}),l},st="https://cloud-images.ubuntu.com/releases/streams/v1/com.ubuntu.cloud:released:download.json",oe="https://cloud-images.ubuntu.com/releases",nt="https://cloud-images.ubuntu.com/minimal/releases/streams/v1/com.ubuntu.cloud:released:download.json",re="https://cloud-images.ubuntu.com/minimal/releases/",ot="https://images.lxd.canonical.com/streams/v1/images.json",le="https://images.lxd.canonical.com/",X="any",Te="container",Ne="virtual-machine",rt=({onSelect:a,onClose:l})=>{const[i,c]=v.useState(""),[d,r]=v.useState(""),[p,j]=v.useState(""),[m,b]=v.useState("amd64"),[S,R]=v.useState(void 0),[L,w]=v.useState(X),[_,O]=v.useState(!1),{project:D}=Re(),B=async(t,x)=>new Promise((E,I)=>{fetch(t).then(He).then(P=>{const k=Object.entries(P.products).map(Q=>{const{os:Y,...De}=Q[1],Ge=ke(Y);return{...De,os:Ge,server:x}});E(k)}).catch(I)}),{data:G,isLoading:H}=Ee(),{data:U=[],isLoading:h}=ne({queryKey:[z.images,oe],queryFn:async()=>B(st,oe),retry:!1}),{data:$=[],isLoading:V}=ne({queryKey:[z.images,re],queryFn:async()=>B(nt,re),retry:!1}),{data:M=[],isLoading:g}=ne({queryKey:[z.images,le],queryFn:async()=>B(ot,le),retry:!1}),{data:s=[],isLoading:y}=$e(D??"default"),q=!_&&(h||V||g)||y||H,W=tt(G?.environment?.architectures??[]),T=q?[]:s.map(aa).sort(ta).concat([...U].reverse().sort(ve)).concat([...$].reverse().sort(ve)).concat([...M]).filter(t=>W.includes(t.arch)),f=[...new Set(T.map(t=>t.arch))].filter(t=>t!=="").sort(),F=[...new Set(T.map(t=>t.variant))].sort();!q&&!f.includes(m)&&f.length>0&&b(f[0]);const N=(t,x=()=>!0)=>{const E=[...new Set(T.filter(x).map(t))].sort().map(I=>({label:I,value:I}));return E.unshift({label:"Any",value:""}),E},n=T.filter(t=>{const x=t.server===J;return S===Ne&&te(t)||S===Te&&se(t)||m!==t.arch&&!x||L!==X&&L!==t.variant||d&&t.os!==d||p&&t.release!==p?!1:i?t.aliases.toLowerCase().includes(i)||t.arch.toLowerCase().includes(i)||t.os.toLowerCase().includes(i)||t.release.toLowerCase().includes(i):!0}).filter(t=>_?t.server===ie||t.cached:!0).map(t=>{const E=t.type?t.type:se(t)?Ne:te(t)?Te:"all",I=()=>{a(t,t.type??S)},P=t.os==="Ubuntu"&&t.release_title&&!t.release.includes(t.release_title)?t.release_title:t.release,k=t.os==="Ubuntu"&&t.release_title&&!t.variant&&!t.release.includes(t.release_title)?t.release:t.variant,Q=()=>{let Y="Custom";return!t.cached&&t.created_at&&(Y="Local"),t.server===oe&&(Y="Ubuntu"),t.server===re&&(Y="Ubuntu Minimal"),t.server===le&&(Y="LXD Images"),Y};return{key:E+t.os+P+k+t.server+t.fingerprint,className:"u-row",columns:[{content:t.os,role:"rowheader","aria-label":"Distribution",onClick:I},{content:P,role:"cell","aria-label":"Release",onClick:I},{content:k,role:"cell","aria-label":"Variant",onClick:I},{content:E,role:"cell","aria-label":"Type",onClick:I},{className:"u-hide--small u-hide--medium",content:t.aliases.split(",").pop(),role:"cell","aria-label":"Alias",onClick:I},{content:Q(),role:"cell","aria-label":"Source",onClick:I},{className:"u-hide--small u-hide--medium",content:t.cached?"Cached":"Remote",role:"cell","aria-label":"Cached",onClick:I},{className:"u-hide--small u-hide--medium",content:e.jsx(o.Button,{onClick:I,type:"button",dense:!0,className:"u-no-margin--bottom",appearance:t.cached||t.server===ie?"positive":"default",children:"Select"}),role:"cell","aria-label":"Action",onClick:I}],sortData:{os:t.os.toLowerCase(),release:P.toLowerCase(),variant:k?.toLowerCase(),type:E,alias:t.aliases}}}),C=[{content:"Distribution",sortKey:"os"},{content:"Release",sortKey:"release"},{content:"Variant",sortKey:"variant"},{content:"Type",sortKey:"type"},{content:"Alias",sortKey:"alias",className:"u-hide--small u-hide--medium"},{content:"Source"},{className:"u-hide--small u-hide--medium",content:"Cached"},{className:"u-hide--small u-hide--medium",content:"","aria-label":"Actions"}];return e.jsx(o.Modal,{close:l,title:"Select base image",className:"image-select-modal",children:e.jsxs(o.Row,{className:"u-no-padding--left u-no-padding--right",children:[e.jsx(o.Col,{size:3,children:e.jsxs("div",{className:"image-select-filters",children:[e.jsx(o.Select,{id:"imageFilterDistribution",label:"Distribution",name:"distribution",onChange:t=>{r(t.target.value),j("")},options:N(t=>t.os),value:d}),e.jsx(o.Select,{id:"imageFilterRelease",label:"Release",name:"release",onChange:t=>{j(t.target.value)},options:N(t=>t.release,t=>t.os===d),value:p,disabled:d===""}),e.jsx(o.Select,{id:"imageFilterVariant",label:"Variant",name:"variant",onChange:t=>{w(t.target.value)},options:[{label:"Any",value:X}].concat(F.filter(t=>!!t).map(t=>({label:t??"",value:t??""}))),value:L}),e.jsx(o.Select,{id:"imageFilterArchitecture",label:"Architecture",name:"architecture",onChange:t=>{b(t.target.value)},options:f.map(t=>({label:t,value:t})),value:m}),e.jsx(o.Select,{id:"imageFilterType",label:"Type",name:"type",onChange:t=>{R(t.target.value===X?void 0:t.target.value)},options:[{label:"Any",value:X},...Ae],value:S??""}),e.jsx(o.CheckboxInput,{"aria-label":"Only show cached images",checked:_,label:"Show only cached images",onChange:()=>{O(t=>!t)}})]})}),e.jsxs(o.Col,{size:9,children:[e.jsx("div",{className:"image-select-header",children:e.jsx("div",{children:e.jsx(o.SearchBox,{autoFocus:!0,className:"search-image",name:"search-image",type:"text",onChange:t=>{c(t.toLowerCase()),r(""),j("")},placeholder:"Search an image"})})}),e.jsx("div",{className:"image-list",children:e.jsx(o.ScrollableTable,{dependencies:[T],tableId:"image-selector-table",children:e.jsx(o.MainTable,{id:"image-selector-table",className:"table-image-select",emptyStateMsg:q?e.jsx(o.Spinner,{className:"u-loader",text:"Loading images..."}):"No matching images found",headers:C,rows:n,paginate:null,sortable:!0})})})]})]})})},lt=({onSelect:a})=>{const{openPortal:l,closePortal:i,isOpen:c,Portal:d}=o.usePortal(),r=(p,j)=>{i(),a(p,j)};return e.jsxs(e.Fragment,{children:[e.jsx(o.Button,{appearance:"positive",onClick:l,type:"button",id:"select-image",children:e.jsx("span",{children:"Browse images"})}),c&&e.jsx(d,{children:e.jsx(rt,{onClose:i,onSelect:r})})]})},A={AUTO:"auto",CLUSTER_GROUP:"clusterGroup",CLUSTER_MEMBER:"clusterMember",PLACEMENT_GROUP:"placementGroup"},it=a=>a.target?.startsWith(Z)?A.CLUSTER_GROUP:a.placementGroup?A.PLACEMENT_GROUP:a.target?A.CLUSTER_MEMBER:A.AUTO,ct=a=>a?.startsWith(Z)?a.split(Z)[1]:"",Fe=a=>!a||a.startsWith(Z)?"":a,ut=({formik:a})=>{if(!qe())return e.jsx(e.Fragment,{});const{canOverrideClusterTargetRestriction:i}=ze(),{project:c}=ce(),d=it(a.values),r=v.useRef(null),p=v.useRef(null),j=v.useRef(null),{data:m=[],isLoading:b}=Ma(),S=c?.config.restricted==="true",R=c?.config["restricted.cluster.groups"],L=m.filter(s=>s.members.length<1?!1:S&&R?R.includes(s.name):!0).map(s=>({label:e.jsxs("div",{className:"label",children:[e.jsx("span",{className:"name",children:s.name}),e.jsx("span",{className:"members",children:s.members.length})]}),text:`${s.name} (${s.members.length} ${Ke("member",s.members.length)})`,value:s.name})),{data:w=[]}=Le(),_=w.map(s=>({label:s.server_name,value:s.server_name})),{data:O=[]}=ra(c?.name??"default"),D=()=>{a.setFieldValue("target",void 0),a.setFieldValue("placementGroup",void 0)},B=s=>{a.setFieldValue("target",`${Z}${s}`),a.values.placementGroup&&a.setFieldValue("placementGroup",void 0)},G=s=>{a.setFieldValue("target",s),a.values.placementGroup&&a.setFieldValue("placementGroup",void 0)},H=s=>{a.setFieldValue("placementGroup",s),a.values.target&&a.setFieldValue("target",void 0)},U=O.find(s=>s.name===a.values.placementGroup),h=U&&U.used_by.length===0&&U.config.policy===Ua,$=c?.config["restricted.cluster.target"],V=S&&!i()&&($==="block"||$===void 0),M=a.values.targetSelectedByVolume;if(b)return e.jsx(o.Spinner,{className:"u-loader",text:"Loading..."});if(M)return e.jsx(o.Input,{id:"clusterMember",label:"Cluster member",value:a.values.target,disabled:!0,help:"Member is determined by the selected ISO volume and can't be changed.",type:"text"});const g=a.values.image?void 0:"Please select an image before adding a placement group";return e.jsxs("div",{className:"instance-target-selector",children:[e.jsx(o.Select,{id:"target",label:e.jsxs(e.Fragment,{children:["Target"," ",e.jsx(o.Tooltip,{message:`LXD automatically selects a cluster member for the instance.
Placement groups allow you to control how instances are distributed across cluster members.`,children:e.jsx(o.Icon,{name:"information"})})]}),wrapperClassName:"select-input",value:d,options:[{label:"Auto",value:A.AUTO},{label:"Cluster group",value:A.CLUSTER_GROUP,disabled:L.length===0},{label:"Cluster member",value:A.CLUSTER_MEMBER,disabled:_.length===0||V},{label:"Placement group",value:A.PLACEMENT_GROUP}],onChange:s=>{const y=s.target.value;y===A.AUTO&&D(),y===A.CLUSTER_GROUP&&(B(L[0].value),setTimeout(()=>p.current?.open(),100)),y===A.CLUSTER_MEMBER&&(G(_[0].value),setTimeout(()=>r.current?.open(),100)),y===A.PLACEMENT_GROUP&&(H(O[0]?.name??"-"),O.length>0&&setTimeout(()=>j.current?.open(),100))},disabled:!a.values.image,error:d===A.PLACEMENT_GROUP&&O.length===0?"No placement groups found for this project.":"",title:g}),d===A.CLUSTER_GROUP&&e.jsx(o.CustomSelect,{id:"clusterGroup",label:"Cluster group",wrapperClassName:"select-input",dropdownClassName:"instance-target-dropdown",selectRef:p,onChange:B,value:ct(a.values.target),options:L,header:e.jsxs("div",{className:"header",children:[e.jsx("span",{className:"name",children:"Name"}),e.jsx("span",{className:"members",children:"Members"})]}),disabled:!a.values.image}),d===A.CLUSTER_MEMBER&&e.jsx(o.CustomSelect,{id:"clusterMember",label:"Cluster member",wrapperClassName:"select-input",dropdownClassName:"instance-target-dropdown",selectRef:r,onChange:G,value:Fe(a.values.target),options:_,disabled:!a.values.image}),d===A.PLACEMENT_GROUP&&e.jsx(la,{value:a.values.placementGroup,setValue:H,project:c?.name??"default",ref:j,disabled:!a.values.image,profileNames:a.values.profiles,isCreateInstance:!0}),h&&e.jsx(o.CustomSelect,{id:"clusterMember",label:"Anchor",wrapperClassName:"select-input",dropdownClassName:"instance-target-dropdown",selectRef:r,onChange:s=>{const y=s??void 0;a.setFieldValue("target",y)},value:Fe(a.values.target),options:[{label:"Auto",value:""}].concat(..._),disabled:!a.values.image,help:"Cluster member to anchor the placement group"})]})},dt=({onSelect:a})=>{const{openPortal:l,closePortal:i,isOpen:c,Portal:d}=o.usePortal(),r=(p,j)=>{i(),a(p,j)};return e.jsxs(e.Fragment,{children:[e.jsx(o.Button,{onClick:l,type:"button",id:"select-custom-iso",children:e.jsx("span",{children:"Use custom ISO"})}),c&&e.jsx(d,{children:e.jsx(Va,{onClose:i,onSelect:r})})]})},Ve=({value:a,onChange:l})=>e.jsxs(e.Fragment,{children:[e.jsx("label",{htmlFor:"file-type",children:"Select upload file type"}),e.jsxs("div",{id:"file-type",children:[e.jsx("div",{className:"u-sv1",children:e.jsx(o.RadioInput,{label:"LXD backup archive (.tar.gz)",checked:a==="instance-backup",onChange:()=>{l("instance-backup")}})}),e.jsx("div",{className:"u-sv3",children:e.jsx(o.RadioInput,{label:e.jsxs("span",{children:["External format (.qcow2, .vmdk,"," ",e.jsx("abbr",{title:".qcow, .vdi, .vhdx",children:"etc..."}),")"]}),checked:a==="external-format",onChange:()=>{l("external-format")}})})]})]}),mt=({close:a,uploadState:l,setUploadState:i,fileType:c,setFileType:d,defaultInstanceName:r})=>{const{project:p,isLoading:j}=ce(),m=ue(),b=o.useToastNotification(),S=o.useNotify(),R=de(),L=me(),[w,_]=v.useState(null),O=v.useState(null),{hasInstanceImportConversion:D}=pe(),B=g=>{const s=`${K}/ui/project/${encodeURIComponent(p?.name??"")}/instance/${encodeURIComponent(g)}`,y=e.jsxs(e.Fragment,{children:["Created instance"," ",e.jsx(Ce,{instanceName:g,projectName:p?.name??""}),"."]}),u=[{label:"Configure",onClick:async()=>L(`${s}/configuration`)}];b.success(y,u)},G=g=>{b.failure("Instance creation failed.",new Error(g))},H=()=>{R.invalidateQueries({predicate:g=>g.queryKey[0]===z.instances})},U=g=>{const s=new AbortController;_(s),We(g.instanceFile,g.name,p?.name,g.pool,i,s).then(y=>{b.info(e.jsxs(e.Fragment,{children:["Upload completed. Now creating instance"," ",e.jsx(ae,{bold:!0,type:"instance",value:g.name}),"."]})),m.set(y.metadata.id,()=>{B(g.name)},G,H),$(),L(`${K}/ui/project/${encodeURIComponent(p?.name??"")}/instances`)}).catch(y=>{const u=new Error(y.response?.data.error);S.failure("Instance upload failed",u),h.setSubmitting(!1),i(null)})},h=he({initialValues:{name:r||"",pool:"",instanceFile:null},validateOnMount:!0,validationSchema:ge().shape({name:fe(p?.name||"",O).optional()}),onSubmit:U}),$=v.useCallback(()=>{w?.abort(),i(null),_(null),h.resetForm(),a(),S.clear()},[w,h.resetForm,a,S]),V=async g=>{const{onChange:s}=h.getFieldProps("instanceFile");if(s(g),g.currentTarget.files){const y=g.currentTarget.files[0];if(await h.setFieldValue("instanceFile",y),!r){const u=we(y.name,"-import");await h.setFieldValue("name",u),await h.validateField("name"),h.setFieldTouched("name",!0,!0),h.errors.name||h.setFieldError("name",void 0)}}},M=h.values.instanceFile?"":"Please select a file before adding custom configuration.";return e.jsxs(e.Fragment,{children:[e.jsxs(o.Form,{onSubmit:h.handleSubmit,className:Pe({"u-hide":l}),children:[D&&e.jsx(Ve,{value:c,onChange:d}),e.jsx(o.Input,{id:"instance-file",name:"instanceFile",type:"file",accept:".tar, application/gzip, application/x-bzip, application/x-xz, application/x-lzma, application/x-squashfs, application/x-qcow2, application/zstd",label:"Local file",labelClassName:D?"u-hide":"",onChange:g=>{V(g)}}),e.jsx(o.Input,{...h.getFieldProps("name"),id:"upload-instance-name",type:"text",label:"New instance name",placeholder:"Enter name",error:h.touched.name?h.errors.name:null,disabled:!!M,title:M}),e.jsx(Ue,{value:h.values.pool,setValue:g=>{h.setFieldValue("pool",g)},selectProps:{id:"pool",label:"Root storage pool",disabled:j||!!M,title:M}})]}),e.jsxs("footer",{className:"p-modal__footer",id:"modal-footer",children:[e.jsx(o.Button,{appearance:"base",className:"u-no-margin--bottom",type:"button",onClick:$,children:"Cancel"}),e.jsx(o.ActionButton,{appearance:"positive",className:"u-no-margin--bottom",loading:h.isSubmitting||!!l,disabled:!h.isValid||h.isSubmitting||j||!h.values.instanceFile,onClick:()=>{h.submitForm()},children:"Upload and create"})]})]})},pt=a=>[{value:"x86_64",label:"x86_64"},{value:"aarch64",label:"aarch64"},{value:"ppc64le",label:"ppc64le"},{value:"s390x",label:"s390x"}].filter(i=>a.includes(i.value)),ht=a=>{const l=a.file?.size||0,i=[];a.formatConversion&&i.push("format"),a.virtioConversion&&i.push("virtio");const c={source:{type:"conversion",mode:"push",conversion_options:i,source_disk_size:l},devices:{root:{path:"/",type:"disk",pool:a.pool}},type:"virtual-machine",name:a.name,architecture:a.architecture};return JSON.stringify(c)},gt=(a,l,i,c)=>{const r=new WebSocket(a);return r.onopen=()=>{const p=new FileReader;let j=0;const m=()=>{if(!l)return;const b=l.slice(j,j+1048576);if(!b.size){r.close(1e3,"File upload complete");return}p.readAsArrayBuffer(b)};p.onload=b=>{if(!l||r.readyState===WebSocket.CLOSING||r.readyState===WebSocket.CLOSED)return;const S=b.target?.result;let R;S&&typeof S=="string"?R=new TextEncoder().encode(S).buffer:R=S,r.send(R),j+=R.byteLength,i&&i(j,l.size),setTimeout(m,0)},p.onerror=b=>{c&&c(b.target?.error?b.target.error:new Error("Failed to read read file"))},m()},r},ft=async a=>new Promise(l=>{const i=new FileReader;i.onload=c=>{const d=c.target?.result,r=new Uint8Array(d);r[510]===85&&r[511]===170?l(!0):l(!1)},i.onerror=()=>{l(!1)},i.readAsArrayBuffer(a.slice(0,512))}),Ct=({close:a,uploadState:l,setUploadState:i,fileType:c,setFileType:d,defaultInstanceName:r})=>{const{project:p,isLoading:j}=ce(),m=v.useState(null),[b,S]=v.useState(),[R,L]=v.useState(""),w=o.useToastNotification(),_=o.useNotify(),O=me(),D=ue(),B=de(),{data:G}=Ee(),{data:H=[]}=Le(),U=(f,F,N)=>{i({percentage:Math.floor(F/N*100),loaded:F,total:N}),F===N&&(a(),w.info(e.jsxs(e.Fragment,{children:["Upload completed. Now creating instance"," ",e.jsx(ae,{bold:!0,type:"instance",value:f}),"."]})),O(`${K}/ui/project/${encodeURIComponent(p?.name??"")}/instances`))},h=f=>{_.failure("File upload failed.",f),i(null)},$=()=>{b&&b.readyState===WebSocket.OPEN&&b.close(1e3,"cancel upload"),D.remove(R)},V=f=>{const F=`${K}/ui/project/${encodeURIComponent(p?.name??"")}/instance/${encodeURIComponent(f)}`,N=e.jsxs(e.Fragment,{children:["Created instance"," ",e.jsx(Ce,{instanceName:f,projectName:p?.name??""}),"."]}),n=[{label:"Configure",onClick:async()=>O(`${F}/configuration`)}];w.success(N,n)},M=f=>{w.failure("Instance creation failed.",new Error(f))},g=()=>{B.invalidateQueries({predicate:f=>f.queryKey[0]===z.instances})},s=f=>{Oe(ht(f),p?.name||"",f.member).then(F=>{const N=F.metadata.id,n=F.metadata.metadata?.fs??"",C=Be(F.metadata),x=`${location.protocol==="https:"?"wss":"ws"}://${location.host}${K}/1.0/operations/${encodeURIComponent(N)}/websocket?secret=${encodeURIComponent(n)}`,E=gt(x,u.values.file,U.bind(null,C),h);S(E),L(N),D.set(N,()=>{V(C)},M,g)}).catch(F=>{_.failure("Instance creation failed.",F),u.setSubmitting(!1),i(null)})},y=pt(G?.environment?.architectures||[]),u=he({initialValues:{name:r||"",pool:"",member:H?.[0]?.server_name,file:null,formatConversion:!0,virtioConversion:!1,architecture:y[0]?.value},enableReinitialize:!0,validateOnMount:!0,validationSchema:ge().shape({name:fe(p?.name||"",m).optional()}),onSubmit:s}),q=async f=>{const{onChange:F}=u.getFieldProps("file");if(F(f),f.currentTarget.files){const N=f.currentTarget.files[0];if(await u.setFieldValue("file",N),!r){const C=we(N.name,"-import");await u.setFieldValue("name",C),await u.validateField("name"),u.setFieldTouched("name",!0,!0),u.errors.name||u.setFieldError("name",void 0)}const n=await ft(N);await u.setFieldValue("formatConversion",!n)}},W=v.useCallback(()=>{u.resetForm(),a(),_.clear(),$()},[u.resetForm,a,_,b]),T=u.values.file?"":"Please select a file before adding custom configuration.";return e.jsxs(e.Fragment,{children:[e.jsxs(o.Form,{onSubmit:u.handleSubmit,className:Pe({"u-hide":l}),children:[e.jsx(Ve,{value:c,onChange:d}),e.jsx(o.Input,{id:"image-file",name:"file",type:"file",label:"Local file",accept:".img, .qcow, .qcow2, .vdi, .vhdx, .vmdk",labelClassName:"u-hide",onChange:f=>{q(f)}}),e.jsx(o.Input,{...u.getFieldProps("name"),id:"upload-instance-name",type:"text",label:"New instance name",placeholder:"Enter name",error:u.touched.name?u.errors.name:null,disabled:!!T,title:T}),e.jsx(Xa,{...u.getFieldProps("member"),id:"member",label:"Target cluster member"}),e.jsx(Ue,{value:u.values.pool,setValue:f=>{u.setFieldValue("pool",f)},selectProps:{id:"pool",label:"Root storage pool",disabled:!p||!!T,title:T}}),e.jsx(o.Select,{...u.getFieldProps("architecture"),id:"architecture",label:"Image architecture",options:y,disabled:!!T,title:T}),e.jsx("label",{htmlFor:"",children:"Conversion options"}),e.jsx(o.Input,{...u.getFieldProps("formatConversion"),type:"checkbox",label:e.jsxs("span",{title:T,children:["Convert to raw format"," ",e.jsx(o.Icon,{name:"information",title:T||"Can be skipped if the image is already in raw format to speed up the import."})]}),disabled:!!T,checked:u.values.formatConversion}),e.jsx(o.Input,{...u.getFieldProps("virtioConversion"),type:"checkbox",label:e.jsxs("span",{title:T,children:["Add Virtio drivers"," ",e.jsx(o.Icon,{name:"information",title:T||"Mandatory, if the image does not have Virtio drivers installed."})]}),disabled:!!T,checked:u.values.virtioConversion})]}),e.jsxs("footer",{className:"p-modal__footer",id:"modal-footer",children:[e.jsx(o.Button,{appearance:"base",className:"u-no-margin--bottom",type:"button",onClick:W,children:"Cancel"}),e.jsx(o.ActionButton,{appearance:"positive",className:"u-no-margin--bottom",loading:u.isSubmitting||!!l,disabled:!u.isValid||u.isSubmitting||j||!u.values.file,onClick:()=>{u.submitForm()},children:"Upload and create"})]})]})},bt=({close:a,name:l})=>{const[i,c]=v.useState("instance-backup"),[d,r]=v.useState(null);return e.jsxs(o.Modal,{close:a,className:"upload-instance-modal",title:"Upload instance file",closeOnOutsideClick:!1,children:[e.jsx(Me,{className:"u-no-padding u-no-margin"}),d&&e.jsxs(e.Fragment,{children:[e.jsx(Qa,{percentage:Math.floor(d.percentage)}),e.jsxs("p",{children:[be(d.loaded)," loaded of"," ",be(d.total??0)]})]}),i==="instance-backup"&&e.jsx(mt,{close:a,uploadState:d,setUploadState:r,fileType:i,setFileType:c,defaultInstanceName:l}),i==="external-format"&&e.jsx(Ct,{close:a,uploadState:d,setUploadState:r,fileType:i,setFileType:c,defaultInstanceName:l})]})},vt=({name:a})=>{const{openPortal:l,closePortal:i,isOpen:c,Portal:d}=o.usePortal();return e.jsxs(e.Fragment,{children:[e.jsx(o.Button,{onClick:l,type:"button",children:e.jsx("span",{children:"Upload instance file"})}),c&&e.jsx(d,{children:e.jsx(bt,{close:i,name:a})})]})},xt=a=>{const l={name:a.name,description:a.description,type:a.instanceType,profiles:a.profiles,source:{alias:a.image?.aliases.split(",")[0],mode:"pull",protocol:"simplestreams",server:a.image?.server,type:"image"}};return a.image?.server===ie&&(l.source={type:"image",certificate:"",fingerprint:a.image?.fingerprint,allow_inconsistent:!1}),a.image?.server===J&&(l.source={type:"none",certificate:"",allow_inconsistent:!1}),l},yt=({formik:a,onSelectImage:l,project:i})=>{const{hasCustomVolumeIso:c}=pe(),d=()=>{const r=a.values.image;return r?r.variant?.toLocaleLowerCase().includes("desktop")?`${r.os} ${r.release} ${r.aliases.split(",")[0]}`:r.variant==="iso"?`${r.os} - ${r.aliases.split(",")[0]}`:`${r.os} ${r.release} ${r.release_title}`:""};return e.jsxs(Ya,{children:[e.jsx(o.Row,{children:e.jsxs(o.Col,{size:12,children:[e.jsx(o.Input,{id:"name",name:"name",type:"text",label:"Instance name",placeholder:"Enter name",onBlur:a.handleBlur,onChange:a.handleChange,value:a.values.name,error:a.touched.name?a.errors.name:null}),e.jsx(Wa,{id:"description",name:"description",label:"Description",placeholder:"Enter description",onBlur:a.handleBlur,onChange:a.handleChange,value:a.values.description})]})}),e.jsx(o.Row,{children:e.jsxs(o.Col,{size:12,children:[e.jsx("p",{className:"p-form__label",children:"Base Image*"}),e.jsx("div",{className:"p-form__control u-clearfix base-image",children:a.values.image?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"u-text--muted u-truncate u-sv3 image-name",children:d()}),e.jsx(o.Button,{appearance:"base",type:"button",onClick:async()=>a.setFieldValue("image",void 0),title:"Clear",hasIcon:!0,children:e.jsx(o.Icon,{name:"close"})})]}):e.jsxs(e.Fragment,{children:[e.jsx(lt,{onSelect:l}),c&&e.jsx(dt,{onSelect:l}),e.jsx(vt,{name:a.values.name})]})}),e.jsx(o.Select,{id:"instanceType",label:"Instance type",name:"instanceType",onBlur:a.handleBlur,onChange:a.handleChange,options:Ae,value:a.values.instanceType,disabled:!a.values.image||te(a.values.image)||se(a.values.image),title:a.values.image?"":"Please select an image before adding a type"}),e.jsx(ut,{formik:a})]})}),e.jsx(ia,{project:i,selected:a.values.profiles,setSelected:r=>{a.setFieldValue("profiles",r)},readOnly:!a.values.image,title:a.values.image?"":"Please select an image before adding profiles"}),e.jsx(ca,{formik:a,disabledReason:a.values.image?"":"Please select an image before adding SSH Keys"})]})},rs=()=>{const a=ue(),l=Ye(),i=me(),c=o.useToastNotification(),d=o.useNotify(),{project:r}=Re(),p=de(),j=v.useState(null),[m,b]=v.useState(xe),{hasInstanceCreateStart:S}=pe(),R=at();if(!r)return e.jsx(e.Fragment,{children:"Missing project"});const L=ge().shape({name:fe(r,j).optional(),instanceType:Qe().required("Instance type is required")}),w=()=>{Je("form-contents","p-bottom-controls")};v.useEffect(w,[m]),o.useListener(window,w,"resize",!0);const _=()=>{p.invalidateQueries({queryKey:[z.instances]}),p.invalidateQueries({queryKey:[z.operations,r]}),p.invalidateQueries({queryKey:[z.projects,r]})},O=(n,C)=>{c.info(e.jsxs(e.Fragment,{children:["Creation for instance"," ",e.jsx(ae,{bold:!0,type:C,value:n})," started."]}))},D=n=>{c.info(e.jsxs(e.Fragment,{children:["Created instance ",n,", now starting it."]})),_()},B=n=>{c.success(e.jsxs(e.Fragment,{children:["Created and started instance ",n,"."]})),_()},G=(n,C)=>{c.failure("The instance was created, but could not be started.",C,n),_()},H=(n,C)=>{c.success(e.jsxs(e.Fragment,{children:["Created instance ",n,".",C]})),_()},U=(n,C,t,x,E)=>{(x==="toast"?c:d).failure("Instance creation failed",n,null,[{label:"Check configuration",onClick:()=>{i(C,{state:{retryFormValues:t,retryFormSection:E}})}}]),_()},h=(n,C)=>{c.info(e.jsxs(e.Fragment,{children:["Instance ",e.jsx(ae,{bold:!0,type:C,value:n})," ","creation has begun. The instance will automatically start upon completion."]}))},$=(n,C,t)=>{const x=e.jsx(Ce,{instanceName:n,projectName:r});if(C&&!S){D(x),ea({name:n,project:r}).then(P=>{a.set(P.metadata.id,()=>{B(x)},k=>{G(x,new Error(k))})}).catch(P=>{G(x,P)});return}const E=`${K}/ui/project/${encodeURIComponent(r)}/instance/${encodeURIComponent(n)}/console`,I=t&&e.jsxs(e.Fragment,{children:[e.jsx("p",{children:"Continue the installation process from its console."}),e.jsxs(o.Button,{onClick:async()=>i(E),hasIcon:!0,children:[e.jsx(o.Icon,{name:"canvas"}),e.jsx("span",{children:"Open console"})]})]});C?B(x):H(x,I)},{data:V=[],isLoading:M}=Xe(r),g=(n,C=!0)=>{const t=n.yaml?na(n.yaml):q(n);if(Ie(n,V)){b(ye);return}const x=l.pathname+l.search;i(`${K}/ui/project/${encodeURIComponent(r)}/instances`);const E={...t,start:S?C:void 0};Oe(JSON.stringify(E),r,n.target).then(I=>{const P=Be(I.metadata);if(!P)return;C&&S?h(P,n.instanceType):O(P,n.instanceType);const k=n.image?.server===J;a.set(I.metadata.id,()=>{$(P,C,k)},Q=>{U(new Error(Q),x,n,"toast",m)})}).catch(I=>{I.message!=="Cancelled"&&U(I,x,n,void 0,m)})},s=he({initialValues:l.state?.retryFormValues??{instanceType:"container",profiles:["default"],devices:[],cloud_init_ssh_keys:[],readOnly:!1,entityType:"instance",isCreating:!0},validationSchema:L,onSubmit:n=>{g(n)}});v.useEffect(()=>{M||V.find(C=>C.name==="default")||s.setFieldValue("profiles",[])},[M,V]);const y=s.values.image?.server===J,u=(n,C)=>{s.setFieldValue("image",n);const t=s.values.devices.filter(x=>x.type!==Ze);if(n.server===J){const x=Fa(n);t.push(x)}s.setFieldValue("devices",t),C?s.setFieldValue("instanceType",C):se(n)?s.setFieldValue("instanceType","virtual-machine"):te(n)&&s.setFieldValue("instanceType","container"),n.volume?.location&&n.volume.location!=="none"?(s.setFieldValue("target",n.volume?.location),s.setFieldValue("targetSelectedByVolume",!0)):s.setFieldValue("targetSelectedByVolume",void 0)};v.useEffect(()=>{const n=l.state?.selectedImage;n&&u(n,n.type)},[l.state?.selectedImage]),v.useEffect(()=>{l.state?.retryFormSection&&b(l.state.retryFormSection)},[l.state?.retryFormSection]);const q=n=>({...xt(n),devices:Ba(n.devices),config:{...Oa(n),...wa(n),...Pa(n),...La(n),...Aa(n),...Ea(n),...Ra(n),...n.placementGroup&&{"placement.group":n.placementGroup}}}),W=n=>{s.values.yaml&&n!==ee&&s.setFieldValue("yaml",void 0),b(n)};function T(){if(l.state?.retryFormSection===ee&&s.values.yaml)return s.values.yaml;const n=q(s.values);return oa(n)}const f=Da(s),F=Ga(s),N=!s.isValid||!s.values.image||f||F;return e.jsxs(Ja,{title:"Create an instance",contentClassName:"create-instance",children:[e.jsxs(o.Form,{onSubmit:s.handleSubmit,className:"form",children:[m!==ee&&e.jsx(ua,{active:m,setActive:W,isDisabled:!s.values.image,hasDiskError:f||Ie(s.values,V),hasNetworkError:F,formik:s}),e.jsx(o.Row,{className:"form-contents",children:e.jsxs(o.Col,{size:12,children:[e.jsx(Me,{}),m===xe&&e.jsx(yt,{formik:s,project:r,onSelectImage:u}),m===ye&&e.jsx($a,{formik:s,project:r}),m===da&&e.jsx(Ha,{formik:s,project:r}),m===ma&&e.jsx(ka,{formik:s,project:r}),m===pa&&e.jsx(qa,{formik:s,project:r}),m===ha&&e.jsx(za,{formik:s,project:r}),m===ga&&e.jsx(fa,{formik:s}),m===Ca&&e.jsx(ba,{formik:s,setSection:W}),m===va&&e.jsx(xa,{formik:s}),m===ya&&e.jsx(Ia,{formik:s}),m===ja&&e.jsx(Sa,{formik:s}),m===_a&&e.jsx(Ta,{formik:s,project:r}),m===ee&&e.jsx(Na,{yaml:T(),setYaml:n=>{s.setFieldValue("yaml",n)},children:e.jsx(et,{entity:"instance",docPath:"/instances"})})]})},m)]}),e.jsxs(Za,{children:[e.jsx("div",{className:"yaml-switch",children:e.jsx(sa,{formik:s,section:m,setSection:W,disableReason:s.values.image?void 0:"Please select an image before adding custom configuration"})}),e.jsx(o.Button,{appearance:"base",onClick:async()=>i(l.state?.cancelLocation??`${K}/ui/project/${encodeURIComponent(r)}/instances`),children:"Cancel"}),e.jsx(o.ActionButton,{loading:s.isSubmitting,disabled:N||s.isSubmitting,appearance:y?"positive":"default",onClick:()=>{g(s.values,!1)},children:"Create"}),!y&&e.jsx(o.ActionButton,{appearance:"positive",loading:s.isSubmitting,disabled:N||s.isSubmitting,onClick:()=>{g(s.values)},children:"Create and start"})]}),(R.panel===je.editNetworkDevice||R.panel===je.createNetworkDevice)&&e.jsx(Ka,{project:r,formik:s})]})};export{rs as default};