| Current Path : /snap/lxd/current/share/lxd-ui/assets/ |
| Current File : //snap/lxd/current/share/lxd-ui/assets/ProjectForm-DrdaiE90.js |
import{j as t,d as r,cS as a,V as D,cO as M,a0 as L,w as k,R as A,r as z,p as U,a6 as x}from"./index-BsQN_SZU.js";import{T as g,J as b,w as y,ad as V,ae as I,af as j,L as l}from"./SshKeyForm-BNz7yPwa.js";import{A as B}from"./AutoExpandingTextArea-Bd-45rZK.js";import{S as G,o}from"./formFields-DzJouV_d.js";import{S as J}from"./StoragePoolSelector-Bvqvds5t.js";import{N as K}from"./NetworkSelector-DuJmwRYk.js";import{h as Z}from"./useNetworks-1j5RF-bH.js";import{D as S}from"./DiskSizeSelector-C9kWj54D.js";import{b as $}from"./useClusterGroups-BmTnhLw-.js";const C="Project details",N="Resource limits",F="Clusters",P="Instances",O="Device usage",E="Networks",q=({isRestrictionsOpen:e,toggleRestrictionsOpen:s,isRestrictionsDisabled:n,active:d,setActive:_})=>{const i={active:d,setActive:_};return t.jsx("div",{className:"p-side-navigation--accordion form-navigation",children:t.jsx("nav",{"aria-label":"Project form navigation",children:t.jsxs("ul",{className:"p-side-navigation__list",children:[t.jsx(g,{label:C,...i}),t.jsx(g,{label:N,...i}),t.jsxs("li",{className:"p-side-navigation__item",children:[t.jsx(r.Button,{type:"button",className:"p-side-navigation__accordion-button","aria-expanded":e?"true":"false",onClick:s,disabled:n,children:"Restrictions"}),t.jsxs("ul",{className:"p-side-navigation__list","aria-expanded":e?"true":"false",children:[t.jsx(g,{label:F,...i}),t.jsx(g,{label:P,...i}),t.jsx(g,{label:O,...i}),t.jsx(g,{label:E,...i})]})]})]})})})},pe=e=>({name:e.name,description:e.description}),me=e=>{const s=n=>{if(n!==void 0)return n?"true":"false"};return{[a("restricted")]:s(e.restricted),[a("features_images")]:s(e.features_images),[a("features_profiles")]:s(e.features_profiles),[a("features_networks")]:s(e.features_networks),[a("features_networks_zones")]:s(e.features_networks_zones),[a("features_storage_buckets")]:s(e.features_storage_buckets),[a("features_storage_volumes")]:s(e.features_storage_volumes)}},H=({formik:e,project:s,isEdit:n})=>{const{hasProjectsNetworksZones:d,hasStorageBuckets:_}=D(),{data:i=[]}=Z(s?.name||"default"),m=i.filter(p=>p.managed),u=e.values.name==="default",h=s?!M(s):!1,w=s?.config["features.networks.zones"]==="true",f=!e.values.features_profiles,T=e.values.features_networks;return t.jsx(G,{children:t.jsx(r.Row,{children:t.jsxs(r.Col,{size:12,children:[t.jsx(r.Input,{id:"name",name:"name",type:"text",label:"Project name",placeholder:"Enter name",onBlur:e.handleBlur,onChange:e.handleChange,value:e.values.name,error:e.touched.name?e.errors.name:null,disabled:e.values.name==="default"||n,help:n&&e.values.name!=="default"&&"Click the name in the header to rename the project",required:!0}),t.jsx(B,{id:"description",name:"description",label:"Description",placeholder:"Enter description",onBlur:e.handleBlur,onChange:p=>{b(e),e.handleChange(p)},value:e.values.description,disabled:!!e.values.editRestriction,title:e.values.editRestriction}),t.jsx(J,{value:e.values.default_instance_storage_pool,setValue:p=>{e.setFieldValue("default_instance_storage_pool",p)},selectProps:{label:"Default instance storage pool",disabled:e.values.features_profiles===!1||n,help:n?t.jsxs(t.Fragment,{children:["Edit the storage pool in the"," ",t.jsx(y,{profileName:"default",projectName:s?.name??""})," "," profile"]}):""}}),t.jsx(K,{value:e.values.default_project_network,setValue:p=>{e.setFieldValue("default_project_network",p)},hasNoneOption:!0,label:"Default instance network",disabled:f||T||n,networkList:m,help:n?t.jsxs(t.Fragment,{children:["Configure networks in the"," ",t.jsx(y,{profileName:"default",projectName:s?.name??""})," ","profile"]}):""}),t.jsxs("div",{title:e.values.editRestriction??(u?"Custom features are immutable on the default project":""),children:["Isolate the following features:",!u&&t.jsxs(t.Fragment,{children:[" ",t.jsx(r.Tooltip,{message:"Unselected features will be shared with the default project",children:t.jsx(r.Icon,{name:"information"})})]}),t.jsx(r.CheckboxInput,{id:"features_images",name:"features_images",label:"Images",onChange:()=>{b(e),e.setFieldValue("features_images",!e.values.features_images)},checked:e.values.features_images,disabled:!!e.values.editRestriction||u||h}),t.jsx(r.CheckboxInput,{id:"features_profiles",name:"features_profiles",label:"Profiles",onChange:()=>{b(e);const p=!e.values.features_profiles;e.setFieldValue("features_profiles",p),p||e.setFieldValue("restricted",!1)},checked:e.values.features_profiles,disabled:!!e.values.editRestriction||u||h}),t.jsx(r.CheckboxInput,{id:"features_networks",name:"features_networks",label:"Networks",onChange:()=>{b(e),e.setFieldValue("features_networks",!e.values.features_networks);const p=!e.values.features_networks;e.setFieldValue("features_networks",p),p&&!n&&e.setFieldValue("default_project_network","none")},checked:e.values.features_networks,disabled:!!e.values.editRestriction||u||h}),d&&t.jsx(r.CheckboxInput,{id:"features_networks_zones",name:"features_networks_zones",label:"Network zones",onChange:()=>{b(e),e.setFieldValue("features_networks_zones",!e.values.features_networks_zones)},checked:e.values.features_networks_zones,disabled:!!e.values.editRestriction||u||h&&w}),_&&t.jsx(r.CheckboxInput,{id:"features_storage_buckets",name:"features_storage_buckets",label:"Storage buckets",onChange:()=>{b(e),e.setFieldValue("features_storage_buckets",!e.values.features_storage_buckets)},checked:e.values.features_storage_buckets,disabled:!!e.values.editRestriction||u||h}),t.jsx(r.CheckboxInput,{id:"features_storage_volumes",name:"features_storage_volumes",label:"Storage volumes",onChange:()=>{b(e),e.setFieldValue("features_storage_volumes",!e.values.features_storage_volumes)},checked:e.values.features_storage_volumes,disabled:!!e.values.editRestriction||u||h})]}),t.jsx("hr",{}),t.jsx("div",{title:e.values.editRestriction,children:t.jsx(r.CheckboxInput,{id:"custom_restrictions",name:"custom_restrictions",label:t.jsxs(t.Fragment,{children:["Allow custom restrictions on a project level",t.jsx(r.Tooltip,{className:"checkbox-label-tooltip",message:`Custom restrictions are only available
to projects with isolated profiles`,children:t.jsx(r.Icon,{name:"information"})})]}),onChange:()=>{b(e),e.setFieldValue("restricted",!e.values.restricted)},checked:e.values.restricted,disabled:!!e.values.editRestriction||e.values.features_profiles===!1})})]})})})},W=()=>{const e=r.useNotify(),{data:s=[],error:n,isLoading:d}=V();if(d)return t.jsx(r.Spinner,{className:"u-loader",text:"Loading resources..."});if(n)return e.failure("Loading resources failed",n),null;const i=I(s).reduce((m,u)=>m+u.memory.total,0);return t.jsxs(t.Fragment,{children:["Total memory: ",t.jsx("b",{children:L(i)})]})},Q=({help:e,...s})=>{const n=r.useNotify(),{data:d=[],error:_}=V();_&&n.failure("Loading resources failed",_);const i=I(d).reduce((w,f)=>w+f.cpu.total,0),u=i>0?t.jsxs(t.Fragment,{children:["Total number of CPU cores: ",t.jsx("b",{children:i})]}):null,h=t.jsxs(t.Fragment,{children:[e,e&&u&&t.jsx("br",{}),u]});return t.jsx(r.Input,{...s,help:h})},he=e=>({[a("limits_instances")]:e.limits_instances?.toString(),[a("limits_containers")]:e.limits_containers?.toString(),[a("limits_virtual_machines")]:e.limits_virtual_machines?.toString(),[a("limits_disk")]:e.limits_disk?.toString(),[a("limits_networks")]:e.limits_networks?.toString(),[a("limits_cpu")]:e.limits_cpu?.toString(),[a("limits_memory")]:e.limits_memory?.toString(),[a("limits_processes")]:e.limits_processes?.toString()}),X=({formik:e})=>t.jsx(j,{rows:[l({formik:e,name:"limits_instances",label:"Max number of instances",defaultValue:"",children:t.jsx(r.Input,{placeholder:"Enter number",min:0,type:"number"})}),l({formik:e,name:"limits_containers",label:"Max number of containers",defaultValue:"",children:t.jsx(r.Input,{placeholder:"Enter number",min:0,type:"number"})}),l({formik:e,name:"limits_virtual_machines",label:"Max number of VMs",defaultValue:"",children:t.jsx(r.Input,{placeholder:"Enter number",min:0,type:"number"})}),l({formik:e,name:"limits_disk",label:"Max disk space (used by all instances)",defaultValue:"",children:t.jsx(S,{setMemoryLimit:s=>{e.setFieldValue("limits_disk",s)}})}),l({formik:e,name:"limits_networks",label:"Max number of networks",defaultValue:"",children:t.jsx(r.Input,{placeholder:"Enter number",min:0,type:"number"})}),l({formik:e,name:"limits_cpu",label:"Max sum of CPU",defaultValue:"",children:t.jsx(Q,{placeholder:"Enter number",type:"number"})}),l({formik:e,name:"limits_memory",label:"Max sum of memory limits",defaultValue:"",children:t.jsx(S,{setMemoryLimit:s=>{e.setFieldValue("limits_memory",s)},helpTotal:t.jsx(W,{})})}),l({formik:e,name:"limits_processes",label:"Max sum of processes",defaultValue:"-",children:t.jsx(r.Input,{placeholder:"Enter number",min:0,type:"number"})})]}),c=[{label:"Select option",value:"",disabled:!0},{label:"Allow",value:"allow"},{label:"Block",value:"block"}],R=[{label:"Select option",value:"",disabled:!0},{label:"Allow",value:"allow"},{label:"Isolated",value:"isolated"},{label:"Unprivileged",value:"unprivileged"}],v=[{label:"Select option",value:"",disabled:!0},{label:"Allow",value:"allow"},{label:"Block",value:"block"},{label:"Managed",value:"managed"}],Y=({formik:e,help:s})=>{const{data:n=[]}=$(),d=e.values.restricted_cluster_groups?.split(",").filter(Boolean)??[],_=i=>{e.setFieldValue("restricted_cluster_groups",i.filter(Boolean).join(","))};return t.jsx("div",{className:"restricted-cluster-groups",children:t.jsx(r.MultiSelect,{id:"restricted_cluster_groups",help:s,items:n.map(i=>({label:i.name,value:i.name})),selectedItems:d.map(i=>({value:i,label:i})),onDeselectItem:i=>{_(d.filter(m=>m!==i.value))},onSelectItem:i=>{_(d.concat([i.value]))},onItemsUpdate:i=>{_(i.map(m=>m.value))},variant:"condensed"})})},be=e=>({[a("restricted_cluster_groups")]:e.restricted_cluster_groups,[a("restricted_cluster_target")]:e.restricted_cluster_target}),ee=({formik:e})=>t.jsx(j,{rows:[l({formik:e,name:"restricted_cluster_groups",label:"Cluster groups targeting",defaultValue:"",children:t.jsx(Y,{formik:e}),readOnlyRenderer:s=>{if(s==="-"||typeof s!="string")return s;const n=s.split(",").filter(Boolean);return t.jsx("span",{className:"restricted-cluster-groups",children:n?.map(d=>t.jsx(k,{type:"cluster-group",value:d,to:`${A}/ui/cluster/groups`},d))})}}),l({formik:e,name:"restricted_cluster_target",label:"Direct cluster targeting",defaultValue:"",readOnlyRenderer:s=>o(s,c),children:t.jsx(r.Select,{options:c})})]}),xe=e=>({[a("restricted_virtual_machines_low_level")]:e.restricted_virtual_machines_low_level,[a("restricted_containers_low_level")]:e.restricted_containers_low_level,[a("restricted_containers_nesting")]:e.restricted_containers_nesting,[a("restricted_containers_privilege")]:e.restricted_containers_privilege,[a("restricted_container_interception")]:e.restricted_container_interception,[a("restrict_backups")]:e.restrict_backups,[a("restrict_snapshots")]:e.restrict_snapshots,[a("restricted_idmap_uid")]:e.restricted_idmap_uid,[a("restricted_idmap_gid")]:e.restricted_idmap_gid}),te=({formik:e})=>t.jsx(j,{rows:[l({formik:e,name:"restricted_virtual_machines_low_level",label:"Low level VM operations",defaultValue:"",readOnlyRenderer:s=>o(s,c),children:t.jsx(r.Select,{options:c})}),l({formik:e,name:"restricted_containers_low_level",label:"Low level container operations",defaultValue:"",readOnlyRenderer:s=>o(s,c),children:t.jsx(r.Select,{options:c})}),l({formik:e,name:"restricted_containers_nesting",label:"Container nesting",defaultValue:"",readOnlyRenderer:s=>o(s,c),children:t.jsx(r.Select,{options:c})}),l({formik:e,name:"restricted_containers_privilege",label:"Container privilege",defaultValue:"",readOnlyRenderer:s=>o(s,R),children:t.jsx(r.Select,{options:R})}),l({formik:e,name:"restricted_container_interception",label:"Container interception",defaultValue:"",readOnlyRenderer:s=>o(s,c),children:t.jsx(r.Select,{options:c})}),l({formik:e,name:"restrict_backups",label:"Backup creation",defaultValue:"",readOnlyRenderer:s=>o(s,c),children:t.jsx(r.Select,{options:c})}),l({formik:e,name:"restrict_snapshots",label:"Snapshot creation",defaultValue:"",readOnlyRenderer:s=>o(s,c),children:t.jsx(r.Select,{options:c})}),l({formik:e,name:"restricted_idmap_uid",label:"Idmap UID",defaultValue:"",children:t.jsx(r.Input,{placeholder:"Enter UID ranges",type:"text"})}),l({formik:e,name:"restricted_idmap_gid",label:"Idmap GID",defaultValue:"",children:t.jsx(r.Input,{placeholder:"Enter GID ranges",type:"text"})})]}),ge=e=>({[a("restricted_devices_disk")]:e.restricted_devices_disk,[a("restricted_devices_disk_paths")]:e.restricted_devices_disk_paths,[a("restricted_devices_gpu")]:e.restricted_devices_gpu,[a("restricted_devices_infiniband")]:e.restricted_devices_infiniband,[a("restricted_devices_nic")]:e.restricted_devices_nic,[a("restricted_devices_pci")]:e.restricted_devices_pci,[a("restricted_devices_unix_block")]:e.restricted_devices_unix_block,[a("restricted_devices_unix_char")]:e.restricted_devices_unix_char,[a("restricted_devices_unix_hotplug")]:e.restricted_devices_unix_hotplug,[a("restricted_devices_usb")]:e.restricted_devices_usb}),se=({formik:e})=>t.jsx(j,{rows:[l({formik:e,name:"restricted_devices_disk",label:t.jsxs(t.Fragment,{children:["Disk devices",t.jsx("br",{}),"(except the root one)"]}),defaultValue:"",readOnlyRenderer:s=>o(s,v),children:t.jsx(r.Select,{options:v})}),l({formik:e,name:"restricted_devices_disk_paths",label:"Disk devices path",defaultValue:"",children:t.jsx(r.Input,{placeholder:"Enter paths",type:"text"})}),l({formik:e,name:"restricted_devices_gpu",label:"GPU devices",defaultValue:"",readOnlyRenderer:s=>o(s,c),children:t.jsx(r.Select,{options:c})}),l({formik:e,name:"restricted_devices_infiniband",label:"Infiniband devices",defaultValue:"",readOnlyRenderer:s=>o(s,c),children:t.jsx(r.Select,{options:c})}),l({formik:e,name:"restricted_devices_nic",label:"Network devices",defaultValue:"",readOnlyRenderer:s=>o(s,v),children:t.jsx(r.Select,{options:v})}),l({formik:e,name:"restricted_devices_pci",label:"PCI devices",defaultValue:"",readOnlyRenderer:s=>o(s,c),children:t.jsx(r.Select,{options:c})}),l({formik:e,name:"restricted_devices_unix_block",label:"Unix-block devices",defaultValue:"",readOnlyRenderer:s=>o(s,c),children:t.jsx(r.Select,{options:c})}),l({formik:e,name:"restricted_devices_unix_char",label:"Unix-char devices",defaultValue:"",readOnlyRenderer:s=>o(s,c),children:t.jsx(r.Select,{options:c})}),l({formik:e,name:"restricted_devices_unix_hotplug",label:"Unix-hotplug devices",defaultValue:"",readOnlyRenderer:s=>o(s,c),children:t.jsx(r.Select,{options:c})}),l({formik:e,name:"restricted_devices_usb",label:"USB devices",defaultValue:"",readOnlyRenderer:s=>o(s,c),children:t.jsx(r.Select,{options:c})})]}),je=e=>({[a("restricted_network_access")]:e.restricted_network_access,[a("restricted_network_subnets")]:e.restricted_network_subnets,[a("restricted_network_uplinks")]:e.restricted_network_uplinks,[a("restricted_network_zones")]:e.restricted_network_zones}),re=({formik:e})=>t.jsx(j,{rows:[l({formik:e,name:"restricted_network_access",label:"Available networks",defaultValue:"",children:t.jsx(r.Textarea,{placeholder:"Enter network names"})}),l({formik:e,name:"restricted_network_subnets",label:"Network subnets",defaultValue:"",children:t.jsx(r.Textarea,{placeholder:"Enter network subnets"})}),l({formik:e,name:"restricted_network_uplinks",label:"Network uplinks",defaultValue:"",children:t.jsx(r.Textarea,{placeholder:"Enter network names"})}),l({formik:e,name:"restricted_network_zones",label:"Network zones",defaultValue:"",children:t.jsx(r.Textarea,{placeholder:"Enter network zones"})})]}),ve=({formik:e,updateSection:s,section:n,project:d,isEdit:_})=>{const[i,m]=z.useState(!0),u=()=>{m(h=>!h)};return t.jsxs(r.Form,{onSubmit:e.handleSubmit,className:"form",children:[t.jsx(q,{active:n,setActive:s,isRestrictionsOpen:i&&e.values.restricted,isRestrictionsDisabled:!e.values.restricted,toggleRestrictionsOpen:u}),t.jsxs("div",{className:"details-form-wrapper",children:[t.jsx(U,{}),t.jsx(r.Row,{className:"form-contents",children:t.jsxs(r.Col,{size:12,children:[n===x(C)&&t.jsx(H,{formik:e,project:d,isEdit:_}),n===x(N)&&t.jsx(X,{formik:e}),n===x(F)&&t.jsx(ee,{formik:e}),n===x(P)&&t.jsx(te,{formik:e}),n===x(O)&&t.jsx(se,{formik:e}),n===x(E)&&t.jsx(re,{formik:e})]})},n)]})]})};export{C as P,pe as a,ve as b,be as c,ge as d,xe as i,je as n,me as p,he as r};