| Current Path : /proc/thread-self/root/snap/lxd/39313/share/lxd-ui/assets/ |
| Current File : //proc/thread-self/root/snap/lxd/39313/share/lxd-ui/assets/NetworkForm-VVshF-VF.js |
import{h as pe,E as ve,bw as n,bx as _e,d as t,r as j,al as ge,by as he,j as s,I as $,bq as xe,bp as ye,bz as E,bA as L,bB as te,R as B,a0 as Z,s as Y,v as be,a9 as O,a8 as m,bC as h,M as je,bD as ne,a5 as V,bE as Ne,bF as we,bG as Fe,S as le,bH as T,bo as Ve,Z as me,bI as Ie,bJ as Ce}from"./index-BFGypnt-.js";import{G as de,B as K,D as z,I as J,a as W,O as Q,C as Te,Y as U,N as Pe}from"./NetworkFormMenu-CXUwfE9b.js";import{c as Se}from"./YamlSwitch-BQqYYI1i.js";import{e as C}from"./FormMenuItem-fhYfVpHc.js";import{f as S}from"./FormFooterLayout-CMGxv4XX.js";import{h as X,i as Re,j as ie}from"./useNetworks-B1lu5MbM.js";import{C as Oe}from"./ClusterSpecificSelect-aZ9P5CkH.js";import{u as re}from"./useClusterMembers-B29_ixY7.js";import{E as ce}from"./ExpandableList-DK5_MQFC.js";import{U as Ee}from"./UsedByItem-DETYWHDN.js";import{g as u,C as f}from"./ConfigurationTable-CmO6jSmV.js";import{A as Le}from"./AutoExpandingTextArea-WEdimI5c.js";import{F as fe,C as De}from"./ClusterSpecificInput-BYM6R5do.js";import{N as Ae,a as Me,b as Ue,Y as Be}from"./NetworkDefaultACLSelector-C5Ak_9zq.js";import{a as $e}from"./useNetworkAcls-DNeSgtR0.js";import{N as H}from"./NetworkRichChip-D2iomVd3.js";import{a as k}from"./ClusterMemberRichChip-h3WaiYeI.js";import{P as He}from"./ProjectRichChip-CtiU36yR.js";import{g as qe}from"./scroll-Dc7Cgzms.js";const ms=(e,a,l)=>{const d={};a?.forEach(r=>d[r.memberName]=r.config.parent??"");const i={};a?.forEach(r=>i[r.memberName]=r.config[n("bridge_external_interfaces")]??"");const c=Object.values(i).find(r=>r.length>0);return{readOnly:!0,isCreating:!1,name:e.name,description:e.description,networkType:e.type,bridge_driver:e.config[n("bridge_driver")],bridge_external_interfaces:c?"set":e.config[n("bridge_external_interfaces")],bridge_external_interfaces_per_member:i,bridge_hwaddr:e.config[n("bridge_hwaddr")],bridge_mtu:e.config[n("bridge_mtu")],dns_domain:e.config[n("dns_domain")],dns_mode:e.config[n("dns_mode")],dns_nameservers:e.config[n("dns_nameservers")],dns_search:e.config[n("dns_search")],gvrp:e.config.gvrp,ipv4_address:e.config[n("ipv4_address")],ipv4_dhcp:e.config[n("ipv4_dhcp")],ipv4_dhcp_expiry:e.config[n("ipv4_dhcp_expiry")],ipv4_dhcp_ranges:e.config[n("ipv4_dhcp_ranges")],ipv4_l3only:e.config[n("ipv4_l3only")],ipv4_nat:e.config[n("ipv4_nat")],ipv4_nat_address:e.config[n("ipv4_nat_address")],ipv4_ovn_ranges:e.config[n("ipv4_ovn_ranges")],ipv4_gateway:e.config[n("ipv4_gateway")],ipv4_routes:e.config[n("ipv4_routes")],ipv4_routes_anycast:e.config[n("ipv4_routes_anycast")],ipv6_address:e.config[n("ipv6_address")],ipv6_dhcp:e.config[n("ipv6_dhcp")],ipv6_dhcp_expiry:e.config[n("ipv6_dhcp_expiry")],ipv6_dhcp_ranges:e.config[n("ipv6_dhcp_ranges")],ipv6_dhcp_stateful:e.config[n("ipv6_dhcp_stateful")],ipv6_l3only:e.config[n("ipv6_l3only")],ipv6_nat:e.config[n("ipv6_nat")],ipv6_nat_address:e.config[n("ipv6_nat_address")],ipv6_ovn_ranges:e.config[n("ipv6_ovn_ranges")],ipv6_gateway:e.config[n("ipv6_gateway")],ipv6_routes:e.config[n("ipv6_routes")],ipv6_routes_anycast:e.config[n("ipv6_routes_anycast")],mtu:e.config.mtu,ovn_ingress_mode:e.config[n("ovn_ingress_mode")],network:e.config.network,parent:e.config.parent,security_acls:_e(e),vlan:e.config.vlan,parentPerClusterMember:d,entityType:"network",bareNetwork:e,editRestriction:l,security_acls_default_egress:e.config[n("security_acls_default_egress")],security_acls_default_ingress:e.config[n("security_acls_default_ingress")]}},Is=(e,a,l)=>pe().min(2,"Minimum length is 2 characters").max(15,"Maximum length is 15 characters").test("no-double-dots","Network name must not contain '..'",d=>!d||!d.includes("..")).matches(/^[-_a-zA-Z0-9.]+$/,"Network name can only contain letters, numbers, hyphens, underscores, and periods").test("deduplicate","A network with this name already exists",async d=>l&&d===l||ve(d,e,a,"networks")).required("Network name is required"),Ge=({project:e,props:a,formik:l})=>{const d=t.useNotify(),{data:i=[],error:c,isLoading:r}=X("default");j.useEffect(()=>{c&&d.failure("Loading networks failed",c)},[c]);const{data:v,error:o,isLoading:x}=ge(e);j.useEffect(()=>{o&&d.failure("Loading projects failed",o)},[o]);const w=(v?.config?.["restricted.networks.uplinks"]?.split(",")||i.filter(g=>he.includes(g.type)&&g.managed).map(g=>g.name)).map(g=>({label:g,value:g}));return w.unshift({label:w.length===0?"No networks available":"Select option",value:""}),r||x?s.jsx(t.Spinner,{className:"u-loader",text:"Loading..."}):s.jsxs("div",{className:"general-field",children:[s.jsx("div",{className:"general-field-label can-edit",children:s.jsx(t.Label,{forId:"network",required:l.values.isCreating,children:"Uplink"})}),s.jsx("div",{className:"general-field-content",children:l.values.readOnly?s.jsxs(s.Fragment,{children:[l.values.network,s.jsx(t.Button,{onClick:()=>{C(l),S("uplink")},className:"u-no-margin--bottom",type:"button",appearance:"base",title:l.values.editRestriction??"Edit",hasIcon:!0,disabled:!!l.values.editRestriction,children:s.jsx(t.Icon,{name:"edit"})})]}):s.jsx(t.Select,{help:"Uplink network to use for external network access",options:w,required:!0,...a})},l.values.readOnly?"read":"edit")]})},Ye=({props:e,formik:a,isClustered:l})=>{const{project:d}=$(),{data:i=[]}=re(),c=t.useNotify();if(!d)return s.jsx(s.Fragment,{children:"Missing project"});const r=!l,{data:v=[],error:o,isLoading:x}=X(d,void 0,r);j.useEffect(()=>{o&&c.failure("Loading networks failed",o)},[o]);const{data:P=[],error:w,isLoading:g}=Re("default");j.useEffect(()=>{xe(P,c)},[P]),j.useEffect(()=>{w&&c.failure("Loading cluster networks failed",w)},[w]);const y=v.filter(N=>N.managed===!1).map(N=>({label:N.name,value:N.name}));if(y.unshift({label:y.length===0?"No networks available":"Select option",value:""}),x||g)return s.jsxs("div",{className:"general-field",children:[s.jsx("div",{className:"general-field-label can-edit",children:s.jsx(t.Label,{forId:"parent",required:a.values.isCreating,children:"Parent"})}),s.jsx("div",{className:"general-field-content",children:s.jsx(t.Spinner,{className:"u-loader",text:"Loading..."})})]});const _=()=>a.values.networkType===E?s.jsxs(s.Fragment,{children:["Parent interface to create ",s.jsx("code",{children:"Macvlan"})," NICs on"]}):a.values.networkType===L?s.jsxs(s.Fragment,{children:["Parent interface to create ",s.jsx("code",{children:"SR-IOV"})," NICs on"]}):"Existing interface to use for network";if(l){const N=Object.values(a.values.parentPerClusterMember??{}),R=[];return i.forEach(b=>R.push({memberName:b.server_name,values:P.filter(ye).filter(p=>p.memberName===b.server_name&&p.managed===!1).map(p=>p.name)})),s.jsxs("div",{className:"general-field",children:[s.jsx("div",{className:"general-field-label can-edit",children:s.jsx(t.Label,{forId:"parent",required:a.values.isCreating,children:"Parent"})}),s.jsx("div",{className:"general-field-content",children:s.jsx(Oe,{id:"parent",options:R,values:a.values.parentPerClusterMember,onChange:b=>{a.setFieldValue("parentPerClusterMember",b)},isReadOnly:a.values.readOnly,toggleReadOnly:()=>{C(a),S("parent")},isDefaultSpecific:N.some(b=>b!==N[0]),disableReason:a.values.editRestriction,helpText:_()},JSON.stringify(a.values.parentPerClusterMember))})]})}return s.jsxs("div",{className:"general-field",children:[s.jsx("div",{className:"general-field-label can-edit",children:s.jsx(t.Label,{forId:"parent",required:a.values.isCreating,children:"Parent"})}),s.jsx("div",{className:"general-field-content",children:a.values.readOnly?s.jsxs(s.Fragment,{children:[a.values.parent,s.jsx(t.Button,{onClick:()=>{C(a),S("parent")},className:"u-no-margin--bottom",type:"button",appearance:"base",title:a.values.editRestriction??"Edit",hasIcon:!0,disabled:!!a.values.editRestriction,children:s.jsx(t.Icon,{name:"edit"})})]}):s.jsx(t.Select,{help:_(),options:y,...e})},a.values.readOnly?"read":"edit")]})},Ke=({formik:e,project:a})=>{const l=te("profile",e.values.bareNetwork?.used_by);return s.jsxs("div",{className:"general-field",children:[s.jsx("div",{className:"general-field-label",children:"Used by profiles"}),s.jsx("div",{className:"general-field-content",children:l.length===0?"-":s.jsx(ce,{items:l.map(d=>s.jsx(Ee,{item:d,activeProject:a,type:"profile",to:`${B}/ui/project/${encodeURIComponent(d.project)}/profile/${encodeURIComponent(d.name)}`,projectLinkDetailPage:"profiles"},d.name))})})]})},ee=({id:e,address:a,setAddress:l,family:d})=>{const i=a!=="none"&&a!=="auto";return s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"ip-address-selector",children:[s.jsx(t.RadioInput,{label:"Auto",checked:a==="auto",onChange:()=>{l("auto")}}),s.jsx(t.RadioInput,{label:"None",checked:a==="none",onChange:()=>{l("none")}})]}),s.jsxs("div",{className:"ip-address-selector ip-address-custom",children:[s.jsx(t.RadioInput,{label:"Custom","aria-label":"custom",checked:i,onChange:()=>{l("")}}),s.jsx(t.Input,{id:e,name:e,type:"text",placeholder:"Enter address",onChange:c=>{l(c.target.value)},value:i&&a?a:"",disabled:!i,help:s.jsxs(s.Fragment,{children:["Use CIDR notation.",s.jsx("br",{}),"You can set the option to ",s.jsx("code",{children:"none"})," to turn off ",d,", or to ",s.jsx("code",{children:"auto"})," to generate a new random unused subnet."]})})]})]})},se=({row:e})=>s.jsxs("div",{className:"general-field ip-address",children:[s.jsx("div",{className:"general-field-label can-edit",children:e.columns?.[0].content}),s.jsx("div",{className:"general-field-content",children:e.columns?.[2].content},e.columns?.[2].key)]}),ze=({formik:e,project:a})=>{const{member:l}=$(),d=t.useNotify(),{data:i,error:c}=ie(e.values.bareNetwork?.name??"",a,l,!e.values.isCreating);j.useEffect(()=>{c&&d.failure("Loading network state failed",c)},[c]);const r=e.values.bareNetwork?.managed??!0;return s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"general-field",children:[s.jsx("div",{className:"general-field-label",children:"RX"}),s.jsxs("div",{className:"general-field-content",children:[Z(i?.counters.bytes_received??0)," (",i?.counters.packets_received??0," packets)"]})]}),s.jsxs("div",{className:"general-field",children:[s.jsx("div",{className:"general-field-label",children:"TX"}),s.jsxs("div",{className:"general-field-content",children:[Z(i?.counters.bytes_sent??0)," (",i?.counters.packets_sent??0," packets)"]})]}),r&&s.jsxs("div",{className:"general-field",children:[s.jsx("div",{className:"general-field-label",children:"Status"}),s.jsx("div",{className:"general-field-content",children:e.values.bareNetwork?.status??"-"})]})]})},Je=({props:e,formik:a})=>s.jsxs("div",{className:"general-field",children:[s.jsx("div",{className:"general-field-label can-edit",children:s.jsx(t.Label,{forId:"description",children:"Description"})}),s.jsx("div",{className:Y("general-field-content",{"description-readonly":a.values.readOnly}),children:a.values.readOnly?s.jsxs(s.Fragment,{children:[a.values.description?.length??!1?a.values.description:"-",s.jsx(t.Button,{onClick:()=>{C(a),S("description")},className:"u-no-margin--bottom",type:"button",appearance:"base",title:a.values.editRestriction??"Edit",hasIcon:!0,disabled:!!a.values.editRestriction,children:s.jsx(t.Icon,{name:"edit"})})]}):s.jsx(Le,{...e})},a.values.readOnly?"read":"edit")]}),We=({formik:e,project:a})=>{const{member:l}=$(),d=t.useNotify(),i=e.values.bareNetwork?.name??"",{data:c,error:r}=ie(i,a,l);return j.useEffect(()=>{r&&d.failure("Loading network state failed",r)},[r]),s.jsxs(s.Fragment,{children:[s.jsx("h2",{className:"p-heading--4",children:"Addresses"}),(c?.addresses??[]).length>0?s.jsx(t.MainTable,{sortable:!0,headers:[{content:"IP",sortKey:"ip"},{content:"Netmask",sortKey:"netmask"},{content:"Scope",sortKey:"scope"},{content:"Family",sortKey:"family"}],rows:c?.addresses.map(v=>({key:v.address,columns:[{content:v.address,role:"rowheader","aria-label":"Address"},{content:v.netmask,role:"cell","aria-label":"Netmask"},{content:v.scope,role:"cell","aria-label":"Scope"},{content:v.family,role:"cell","aria-label":"family"}],sortData:{ip:v.address,netmask:v.netmask,scope:v.scope,family:v.family}}))}):"None"]})},Qe=({formik:e,project:a})=>{const l=j.useId(),{data:d=[],isLoading:i}=$e(a),c=i?"Loading ACLs...":e.values.editRestriction,r={Egress:e.values.security_acls_default_egress??"",Ingress:e.values.security_acls_default_ingress??""},v={Egress:"security_acls_default_egress",Ingress:"security_acls_default_ingress"};return s.jsxs("div",{className:"general-field",children:[s.jsx("div",{className:"general-field-label can-edit",children:s.jsx(t.Label,{forId:l,children:"Access Control Lists"})}),s.jsxs("div",{className:"general-field-content",children:[e.values.readOnly&&s.jsxs(s.Fragment,{children:[e.values.security_acls.length===0?"-":s.jsx(ce,{items:e.values.security_acls.map(o=>s.jsx(be,{type:"network-acl",value:o,to:`${B}/ui/project/${encodeURIComponent(a)}/network-acl/${encodeURIComponent(o)}`},o))}),s.jsx(fe,{toggleReadOnly:()=>{C(e),setTimeout(()=>{const o=document.getElementById(l);o?.scrollIntoView({block:"nearest",inline:"nearest"}),o?.click()},100)},disableReason:c})]}),!e.values.readOnly&&s.jsx(Ae,{project:a,selectedAcls:e.values.security_acls,setSelectedAcls:o=>{e.setFieldValue("security_acls",o)},id:l,availableAcls:d}),e.values.readOnly?e.values.security_acls.length!==0&&s.jsx(Me,{values:r}):s.jsx(Ue,{onChange:(o,x)=>{e.setFieldValue(o,x)},values:r,disabled:e.values.security_acls.length===0,directionField:v})]},e.values.readOnly?"read":"edit")]})},q=({formik:e})=>s.jsxs("div",{className:"general-field",children:[s.jsx("div",{className:"general-field-label can-edit",children:s.jsx(t.Label,{forId:"vlan",children:"VLAN Id"})}),s.jsx("div",{className:"general-field-content",children:e.values.readOnly?s.jsxs(s.Fragment,{children:[e.values.vlan?.length??!1?e.values.vlan:"-",s.jsx(t.Button,{onClick:()=>{C(e),S("vlan")},className:"u-no-margin--bottom",type:"button",appearance:"base",title:e.values.editRestriction??"Edit",hasIcon:!0,disabled:!!e.values.editRestriction,children:s.jsx(t.Icon,{name:"edit"})})]}):s.jsx(t.Input,{...e.getFieldProps("vlan"),id:"vlan",type:"number",placeholder:"Enter VLAN ID",help:"The VLAN ID to attach to"})},e.values.readOnly?"read":"edit")]}),G=({formik:e})=>s.jsxs("div",{className:"general-field",children:[s.jsx("div",{className:"general-field-label can-edit",children:s.jsx(t.Label,{forId:"mtu",children:"MTU"})}),s.jsx("div",{className:"general-field-content",children:e.values.readOnly?s.jsxs(s.Fragment,{children:[e.values.mtu?.length??!1?e.values.mtu:"-",s.jsx(t.Button,{onClick:()=>{C(e),S("mtu")},className:"u-no-margin--bottom",type:"button",appearance:"base",title:e.values.editRestriction??"Edit",hasIcon:!0,disabled:!!e.values.editRestriction,children:s.jsx(t.Icon,{name:"edit"})})]}):s.jsx(t.Input,{...e.getFieldProps("mtu"),id:"mtu",type:"number",placeholder:"Enter MTU",help:"The MTU of the interface"})},e.values.readOnly?"read":"edit")]}),Xe=({formik:e})=>s.jsxs("div",{className:"general-field",children:[s.jsx("div",{className:"general-field-label can-edit",children:s.jsx(t.Label,{forId:"gvrp",children:"GARP Registration"})}),s.jsx("div",{className:"general-field-content",children:e.values.readOnly?s.jsxs(s.Fragment,{children:[e.values.gvrp?.length??!1?e.values.gvrp==="true"?"Yes":"No":"-",s.jsx(t.Button,{onClick:()=>{C(e),S("gvrp")},className:"u-no-margin--bottom",type:"button",appearance:"base",title:e.values.editRestriction??"Edit",hasIcon:!0,disabled:!!e.values.editRestriction,children:s.jsx(t.Icon,{name:"edit"})})]}):s.jsx(t.Select,{...e.getFieldProps("gvrp"),id:"gvrp",options:[{label:"Select option",value:""},{label:"Yes",value:"true"},{label:"No",value:"false"}],help:"Register VLAN using GARP VLAN Registration Protocol"})},e.values.readOnly?"read":"edit")]}),Ze=({formik:e})=>s.jsx(t.CustomSelect,{id:"networkType",name:"networkType",help:e.values.networkType===m?s.jsx(je,{docPath:"/howto/network_ovn_setup/#set-up-a-lxd-cluster-on-ovn",children:"Learn how to set up OVN"}):void 0,required:!0,searchable:"never",options:[{label:s.jsxs("div",{className:"label network-type-label",children:[s.jsx("span",{className:"network-type-name",children:"Bridge"}),s.jsx("span",{className:"network-type-explanation u-text--muted",children:"Setup local virtual subnet providing NAT, DHCP and DNS to instances."})]}),text:"Bridge",value:O},{label:s.jsxs("div",{className:"label network-type-label",children:[s.jsx("span",{className:"network-type-name",children:"Macvlan"}),s.jsx("span",{className:"network-type-explanation u-text--muted",children:"Connect instances to an existing network interface without a bridge."})]}),text:"Macvlan",value:E},{label:s.jsxs("div",{className:"label network-type-label",children:[s.jsx("div",{className:"network-type-name",children:"OVN"}),s.jsx("div",{className:"network-type-explanation u-text--muted",children:"Setup cluster-wide virtual subnet providing NAT, DHCP and DNS to instances."})]}),text:"OVN",value:m},{label:s.jsxs("div",{className:"label network-type-label",children:[s.jsx("span",{className:"network-type-name",children:"Physical"}),s.jsx("span",{className:"network-type-explanation u-text--muted",children:"Define OVN uplink or pass-through existing physical interface to one instance."})]}),text:"Physical",value:h},{label:s.jsxs("div",{className:"label network-type-label",children:[s.jsx("span",{className:"network-type-name",children:"SR-IOV"}),s.jsx("span",{className:"network-type-explanation u-text--muted",children:"Connect instances to an existing SR-IOV network interface."})]}),text:"SR-IOV",value:L}],onChange:a=>{a===O&&(e.setFieldValue("networkType",O),e.setFieldValue("network",void 0),e.setFieldValue("parent",void 0),e.setFieldValue("parentPerClusterMember",void 0),e.setFieldValue("dns_nameservers",void 0),e.setFieldValue("gvrp",void 0),e.setFieldValue("ipv4_address","auto"),e.setFieldValue("ipv4_l3only",void 0),e.setFieldValue("ipv4_gateway",void 0),e.setFieldValue("ipv4_routes",void 0),e.setFieldValue("ipv4_routes_anycast",void 0),e.setFieldValue("ipv6_address","auto"),e.setFieldValue("ipv6_l3only",void 0),e.setFieldValue("ipv6_gateway",void 0),e.setFieldValue("ipv6_routes",void 0),e.setFieldValue("ipv6_routes_anycast",void 0),e.setFieldValue("mtu",void 0),e.setFieldValue("ovn_ingress_mode",void 0)),a===E&&(e.setFieldValue("networkType",E),e.setFieldValue("network",void 0),e.setFieldValue("bridge_driver",void 0),e.setFieldValue("bridge_external_interfaces",void 0),e.setFieldValue("bridge_hwaddr",void 0),e.setFieldValue("bridge_mtu",void 0),e.setFieldValue("dns_domain",void 0),e.setFieldValue("dns_mode",void 0),e.setFieldValue("dns_search",void 0),e.setFieldValue("ipv4_address",void 0),e.setFieldValue("ipv4_dhcp",void 0),e.setFieldValue("ipv4_dhcp_expiry",void 0),e.setFieldValue("ipv4_dhcp_ranges",void 0),e.setFieldValue("ipv4_ovn_ranges",void 0),e.setFieldValue("ipv4_l3only",void 0),e.setFieldValue("ipv6_address",void 0),e.setFieldValue("ipv6_dhcp",void 0),e.setFieldValue("ipv6_dhcp_stateful",void 0),e.setFieldValue("ipv6_dhcp_expiry",void 0),e.setFieldValue("ipv6_dhcp_ranges",void 0),e.setFieldValue("ipv6_ovn_ranges",void 0),e.setFieldValue("ipv6_l3only",void 0),e.setFieldValue("ovn_ingress_mode",void 0),e.setFieldValue("security_acls",[])),a===m&&(e.setFieldValue("networkType",m),e.setFieldValue("bridge_driver",void 0),e.setFieldValue("bridge_external_interfaces",void 0),e.setFieldValue("dns_mode",void 0),e.setFieldValue("gvrp",void 0),e.setFieldValue("parent",void 0),e.setFieldValue("parentPerClusterMember",void 0),e.setFieldValue("dns_nameservers",void 0),e.setFieldValue("ipv4_address","auto"),e.setFieldValue("ipv4_dhcp_expiry",void 0),e.setFieldValue("ipv4_dhcp_ranges",void 0),e.setFieldValue("ipv4_ovn_ranges",void 0),e.setFieldValue("ipv4_gateway",void 0),e.setFieldValue("ipv4_routes",void 0),e.setFieldValue("ipv4_routes_anycast",void 0),e.setFieldValue("ipv6_address","auto"),e.setFieldValue("ipv6_dhcp_expiry",void 0),e.setFieldValue("ipv6_dhcp_ranges",void 0),e.setFieldValue("ipv6_ovn_ranges",void 0),e.setFieldValue("ipv6_gateway",void 0),e.setFieldValue("ipv6_routes",void 0),e.setFieldValue("ipv6_routes_anycast",void 0),e.setFieldValue("mtu",void 0),e.setFieldValue("ovn_ingress_mode",void 0)),a===h&&(e.setFieldValue("networkType",h),e.setFieldValue("network",void 0),e.setFieldValue("bridge_driver",void 0),e.setFieldValue("bridge_external_interfaces",void 0),e.setFieldValue("bridge_hwaddr",void 0),e.setFieldValue("bridge_mtu",void 0),e.setFieldValue("dns_domain",void 0),e.setFieldValue("dns_mode",void 0),e.setFieldValue("dns_search",void 0),e.setFieldValue("gvrp",void 0),e.setFieldValue("ipv4_address",void 0),e.setFieldValue("ipv4_dhcp",void 0),e.setFieldValue("ipv4_dhcp_expiry",void 0),e.setFieldValue("ipv4_dhcp_ranges",void 0),e.setFieldValue("ipv4_ovn_ranges",void 0),e.setFieldValue("ipv4_l3only",void 0),e.setFieldValue("ipv6_address",void 0),e.setFieldValue("ipv6_dhcp",void 0),e.setFieldValue("ipv6_dhcp_stateful",void 0),e.setFieldValue("ipv6_dhcp_expiry",void 0),e.setFieldValue("ipv6_dhcp_ranges",void 0),e.setFieldValue("ipv6_ovn_ranges",void 0),e.setFieldValue("ipv6_l3only",void 0),e.setFieldValue("mtu",void 0),e.setFieldValue("security_acls",[])),a===L&&(e.setFieldValue("networkType",L),e.setFieldValue("network",void 0),e.setFieldValue("bridge_driver",void 0),e.setFieldValue("bridge_external_interfaces",void 0),e.setFieldValue("bridge_hwaddr",void 0),e.setFieldValue("bridge_mtu",void 0),e.setFieldValue("dns_domain",void 0),e.setFieldValue("dns_mode",void 0),e.setFieldValue("dns_search",void 0),e.setFieldValue("gvrp",void 0),e.setFieldValue("ipv4_address",void 0),e.setFieldValue("ipv4_dhcp",void 0),e.setFieldValue("ipv4_dhcp_expiry",void 0),e.setFieldValue("ipv4_dhcp_ranges",void 0),e.setFieldValue("ipv4_ovn_ranges",void 0),e.setFieldValue("ipv4_l3only",void 0),e.setFieldValue("ipv6_address",void 0),e.setFieldValue("ipv6_dhcp",void 0),e.setFieldValue("ipv6_dhcp_stateful",void 0),e.setFieldValue("ipv6_dhcp_expiry",void 0),e.setFieldValue("ipv6_dhcp_ranges",void 0),e.setFieldValue("ipv6_ovn_ranges",void 0),e.setFieldValue("ipv6_l3only",void 0),e.setFieldValue("ovn_ingress_mode",void 0),e.setFieldValue("security_acls",[]))},value:e.values.networkType,disabled:e.values.readOnly||!e.values.isCreating}),ke=({formik:e,project:a,isClustered:l})=>{const d=r=>({id:r,name:r,onBlur:e.handleBlur,onChange:v=>{C(e),e.handleChange(v)},value:e.values[r]??"",error:e.touched[r]?e.errors[r]:null,placeholder:`Enter ${r.replaceAll("_"," ")}`}),i=e.values.bareNetwork?.managed??!0,c=ne.includes(e.values.networkType);return s.jsxs(s.Fragment,{children:[s.jsx("h2",{className:"p-heading--4",id:V(de),children:"General"}),s.jsxs("div",{className:"u-sv3",children:[s.jsxs("div",{className:"general-field",children:[s.jsx("div",{className:"general-field-label",children:s.jsx(t.Label,{forId:"networkType",children:"Type"})}),s.jsx("div",{className:"general-field-content",children:e.values.isCreating?s.jsx(Ze,{formik:e}):s.jsxs(s.Fragment,{children:[Ne(e.values.networkType),!i&&s.jsx("span",{className:"u-text--muted",children:", not managed"})]})})]}),e.values.isCreating&&s.jsxs("div",{className:"general-field",children:[s.jsx("div",{className:"general-field-label",children:s.jsx(t.Label,{forId:"name",required:e.values.isCreating,children:"Name"})}),s.jsx("div",{className:"general-field-content",children:s.jsx(t.Input,{...d("name"),type:"text",required:!0})})]}),i&&s.jsx(Je,{formik:e,props:d("description")}),e.values.networkType===m&&i&&s.jsx(Ge,{props:d("network"),project:a,formik:e}),c&&i&&s.jsx(Ye,{props:d("parent"),formik:e,isClustered:l}),e.values.networkType===h&&i&&s.jsxs(s.Fragment,{children:[s.jsx(G,{formik:e}),s.jsx(q,{formik:e})]}),e.values.networkType===E&&i&&s.jsxs(s.Fragment,{children:[s.jsx(G,{formik:e}),s.jsx(q,{formik:e}),s.jsx(Xe,{formik:e})]}),e.values.networkType===L&&i&&s.jsxs(s.Fragment,{children:[s.jsx(G,{formik:e}),s.jsx(q,{formik:e})]}),we.includes(e.values.networkType)&&i&&s.jsx(Qe,{project:a,formik:e}),!c&&i&&s.jsxs(s.Fragment,{children:[s.jsx(se,{row:u({formik:e,name:"ipv4_address",label:"IPv4 address",defaultValue:"auto",children:s.jsx(ee,{id:"ipv4_address",family:"IPv4",address:e.values.ipv4_address,setAddress:r=>{e.setFieldValue("ipv4_address",r),r==="none"&&["ipv4_nat","ipv4_dhcp","ipv4_dhcp_expiry","ipv4_dhcp_ranges"].forEach(o=>{e.setFieldValue(o,void 0)})}})})}),s.jsx(se,{row:u({formik:e,name:"ipv6_address",label:"IPv6 address",defaultValue:"auto",children:s.jsx(ee,{id:"ipv6_address",family:"IPv6",address:e.values.ipv6_address,setAddress:r=>{e.setFieldValue("ipv6_address",r),r==="none"&&["ipv6_nat","ipv6_dhcp","ipv6_dhcp_expiry","ipv6_dhcp_ranges","ipv6_dhcp_stateful","ipv6_ovn_ranges"].forEach(o=>{e.setFieldValue(o,void 0)})}})})})]}),!e.values.isCreating&&Fe.includes(e.values.networkType)&&s.jsx(ze,{formik:e,project:a}),!i&&s.jsx(We,{formik:e,project:a}),!e.values.isCreating&&i&&s.jsx(Ke,{project:a,formik:e})]})]})},ae=({formik:e,helpText:a,disabled:l,placeholder:d})=>{const{data:i=[]}=re(),c=i.map(r=>r.server_name);return s.jsx(De,{values:e.values.bridge_external_interfaces_per_member,id:"bridge_external_interfaces_per_member",isReadOnly:e.values.readOnly,onChange:r=>{e.setFieldValue("bridge_external_interfaces_per_member",r)},toggleReadOnly:()=>{C(e),e.setFieldValue("bridge_external_interfaces",""),S("bridge_external_interfaces_per_member")},memberNames:c,disabled:l,helpText:a,placeholder:d,classname:"",disabledReason:e.values.editRestriction})},es=({formik:e,filterRows:a})=>{const l=le(),d=a([u({formik:e,name:"bridge_mtu",label:"MTU",defaultValue:"",children:s.jsx(t.Input,{type:"text"})}),u({formik:e,name:"bridge_hwaddr",label:"Hardware address",defaultValue:"",children:s.jsx(t.Input,{type:"text"})}),...e.values.networkType===O?[u({formik:e,name:"bridge_driver",label:"Driver",defaultValue:"",children:s.jsx(t.Select,{options:[{label:"Select option",value:"",disabled:!0},{label:"Native",value:"native"},{label:"Openvswitch",value:"openvswitch"}]})}),u({formik:e,name:"bridge_external_interfaces",label:"External interfaces",defaultValue:"",hideOverrideBtn:l&&e.values.bridge_external_interfaces==="set",children:l?s.jsx(ae,{formik:e,placeholder:"Enter interface name"}):s.jsx(t.Input,{type:"text"}),readOnlyRenderer:i=>l&&i!=="-"&&i!==void 0?s.jsx(ae,{formik:e,placeholder:"Enter interface name"},JSON.stringify(e.values.bridge_external_interfaces_per_member??{})):s.jsx(s.Fragment,{children:i})})]:[]]);return d.length===0?null:s.jsxs(s.Fragment,{children:[s.jsx("h2",{className:"p-heading--4",id:V(K),children:"Bridge"}),s.jsx(f,{rows:d})]})},ss=({formik:e,filterRows:a})=>{const l=a([...e.values.networkType!==h?[u({formik:e,name:"dns_domain",label:"DNS domain",defaultValue:"",children:s.jsx(t.Input,{type:"text"})})]:[],...e.values.networkType===O?[u({formik:e,name:"dns_mode",label:"DNS mode",defaultValue:"",children:s.jsx(t.Select,{options:[{label:"Select option",value:"",disabled:!0},{label:"None",value:"none"},{label:"Managed",value:"managed"},{label:"Dynamic",value:"dynamic"}]})})]:[],...e.values.networkType===h?[u({formik:e,name:"dns_nameservers",label:"DNS nameservers",defaultValue:"",children:s.jsx(t.Input,{type:"text"})})]:[u({formik:e,name:"dns_search",label:"DNS search",defaultValue:"",children:s.jsx(t.Textarea,{})})]]);return l.length===0?null:s.jsxs(s.Fragment,{children:[s.jsx("h2",{className:"p-heading--4",id:V(z),children:"DNS"}),s.jsx(f,{rows:l})]})},as=({formik:e,filterRows:a})=>{const l=e.values.ipv4_dhcp!=="false",d=a([...e.values.networkType!==h?[u({formik:e,name:"ipv4_nat",label:"IPv4 NAT",defaultValue:"",children:s.jsx(t.Select,{options:T}),disabled:e.values.ipv4_address==="none",disabledReason:"IPv4 address is set to none"})]:[],...e.values.networkType!==h?[u({formik:e,name:"ipv4_dhcp",label:"IPv4 DHCP",defaultValue:"",children:s.jsx(t.Select,{options:T})})]:[],...e.values.networkType!==m&&e.values.networkType!==h?[u({formik:e,name:"ipv4_dhcp_expiry",label:"IPv4 DHCP expiry",defaultValue:"",disabled:!l,disabledReason:"IPv4 DHCP is disabled",children:s.jsx(t.Input,{type:"text"})}),u({formik:e,name:"ipv4_dhcp_ranges",label:"IPv4 DHCP ranges",defaultValue:"",disabled:!l,disabledReason:"IPv4 DHCP is disabled",children:s.jsx(t.Textarea,{})})]:[],...e.values.networkType===m?[u({formik:e,name:"ipv4_l3only",label:"IPv4 L3 only",defaultValue:"",children:s.jsx(t.Select,{options:T})})]:[],...e.values.networkType!==m?[u({formik:e,name:"ipv4_ovn_ranges",label:"IPv4 OVN ranges",defaultValue:"",children:s.jsx(t.Textarea,{})})]:[],...[O,h].includes(e.values.networkType)?[u({formik:e,name:"ipv4_routes",label:"IPv4 routes",defaultValue:"",children:s.jsx(t.Textarea,{})})]:[],...e.values.networkType===h?[u({formik:e,name:"ipv4_gateway",label:"IPv4 gateway",defaultValue:"",children:s.jsx(t.Textarea,{})}),u({formik:e,name:"ipv4_routes_anycast",label:"IPv4 routes anycast",defaultValue:"",children:s.jsx(t.Select,{options:T})})]:[]]);return d.length===0?null:s.jsxs(s.Fragment,{children:[s.jsx("h2",{className:"p-heading--4",id:V(J),children:"IPv4"}),s.jsx(f,{rows:d})]})},ts=({formik:e,filterRows:a})=>{const l=e.values.ipv6_dhcp!=="false",d=a([...e.values.networkType!==h?[u({formik:e,name:"ipv6_nat",label:"IPv6 NAT",defaultValue:"",children:s.jsx(t.Select,{options:T}),disabled:e.values.ipv6_address==="none",disabledReason:"IPv6 address is set to none"})]:[],...e.values.networkType!==h?[u({formik:e,name:"ipv6_dhcp",label:"IPv6 DHCP",defaultValue:"",children:s.jsx(t.Select,{options:T})})]:[],...e.values.networkType!==m&&e.values.networkType!==h?[u({formik:e,name:"ipv6_dhcp_expiry",label:"IPv6 DHCP expiry",defaultValue:"",disabled:!l,disabledReason:"IPv6 DHCP is disabled",children:s.jsx(t.Input,{type:"text"})}),u({formik:e,name:"ipv6_dhcp_ranges",label:"IPv6 DHCP ranges",defaultValue:"",disabled:!l,disabledReason:"IPv6 DHCP is disabled",children:s.jsx(t.Textarea,{})})]:[],...e.values.networkType!==h?[u({formik:e,name:"ipv6_dhcp_stateful",label:"IPv6 DHCP stateful",defaultValue:"",disabled:!l,disabledReason:"IPv6 DHCP is disabled",children:s.jsx(t.Select,{options:T})})]:[],...e.values.networkType===m?[u({formik:e,name:"ipv6_l3only",label:"IPv6 L3 only",defaultValue:"",children:s.jsx(t.Select,{options:T})})]:[],...e.values.networkType!==m?[u({formik:e,name:"ipv6_ovn_ranges",label:"IPv6 OVN ranges",defaultValue:"",children:s.jsx(t.Textarea,{})})]:[],...[O,h].includes(e.values.networkType)?[u({formik:e,name:"ipv6_routes",label:"IPv6 routes",defaultValue:"",children:s.jsx(t.Textarea,{})})]:[],...e.values.networkType===h?[u({formik:e,name:"ipv6_gateway",label:"IPv6 gateway",defaultValue:"",children:s.jsx(t.Textarea,{})}),u({formik:e,name:"ipv6_routes_anycast",label:"IPv6 routes anycast",defaultValue:"",children:s.jsx(t.Select,{options:T})})]:[]]);return d.length===0?null:s.jsxs(s.Fragment,{children:[s.jsx("h2",{className:"p-heading--4",id:V(W),children:"IPv6"}),s.jsx(f,{rows:d})]})},ns=({formik:e,filterRows:a})=>{const l=a([u({formik:e,name:"ovn_ingress_mode",label:"OVN ingress mode",defaultValue:"",children:s.jsx(t.Select,{options:[{label:"Select option",value:"",disabled:!0},{label:"l2proxy",value:"l2proxy"},{label:"routed",value:"routed"}]})})]);return l.length===0?null:s.jsxs(s.Fragment,{children:[s.jsx("h2",{className:"p-heading--4",id:V(Q),children:"OVN"}),s.jsx(f,{rows:l})]})},ls=({formik:e,project:a,isServerClustered:l})=>{const{member:d}=$(),i=t.useNotify(),[c,r]=j.useState(!0),[v,o]=j.useState(!0),x=e.values.bareNetwork;if(!x)return;const P=l&&Ve.includes(x.type),{data:w=[],error:g}=X(a);j.useEffect(()=>{g&&i.failure("Loading networks failed",g)},[g]);const y=w.filter(p=>p.config.network===e.values.name||p.config.parent===e.values.name||x.used_by?.includes(`/1.0/networks/${encodeURIComponent(p.name)}`)),_=te("instance",x.used_by),N=e.values.parent??e.values.network,R=Object.keys(e.values.parentPerClusterMember??{}).map(p=>{const I=e.values.parentPerClusterMember?.[p];return I?s.jsxs("div",{className:"uplink-item",children:[s.jsx("span",{className:"has-descendents",children:s.jsx(k,{clusterMember:p})}),s.jsx(H,{networkName:I,projectName:a,clusterMember:p})]},p):null}),b=N??R.filter(p=>p!==null).length>0;return s.jsxs(s.Fragment,{children:[s.jsx("h2",{className:"p-heading--4",id:V(Te),children:"Connections"}),s.jsxs("div",{className:"u-sv3 network-topology",children:[b&&s.jsx("div",{className:"uplink",children:P?R:N&&s.jsx("div",{className:"uplink-item has-parent",children:s.jsx(H,{networkName:N,projectName:"default"})})}),s.jsxs("div",{className:Y("current-network",{"has-descendents":_.length>0||y.length>0,"has-parent":b}),children:[d&&s.jsx("span",{className:"has-descendents",children:s.jsx(k,{clusterMember:d})}),s.jsxs("div",{className:"p-chip is-inline is-dense resource-link active-chip",title:x.name,children:[s.jsx(t.Icon,{name:"exposed",light:!0}),s.jsx("span",{className:"p-chip__value",children:x.name})]})]}),s.jsxs("div",{className:"downstream",children:[y.slice(0,c?5:y.length).map(p=>{const I=`${B}/ui/project/default/network/${encodeURIComponent(p.name)}`;return s.jsx("div",{className:Y("downstream-item",{"has-descendents":(p.used_by??[]).length>0}),children:s.jsx(H,{networkName:p.name,projectName:"default"})},I)}),y.length>5&&c&&s.jsx("div",{className:"downstream-item",children:s.jsx(t.Button,{appearance:"link",onClick:()=>{r(!1)},small:!0,children:"Show all"})}),_.slice(0,v?5:_.length).map(p=>{const I=`${B}/ui/project/${encodeURIComponent(p.project)}/instance/${encodeURIComponent(p.name)}`,D=p.project!==a;return s.jsxs("div",{className:"downstream-item",children:[D&&s.jsxs(s.Fragment,{children:[s.jsx(He,{projectName:p.project})," /"," "]}),s.jsx(me,{instanceName:p.name,projectName:p.project})]},I)}),_.length>5&&v&&s.jsx("div",{className:"downstream-item",children:s.jsx(t.Button,{appearance:"link",onClick:()=>{o(!1)},small:!0,children:"Show all"})})]})]})]})},Cs=e=>{const a=new Set(["used_by","etag","status","locations","managed","name","description","config","type"]),l=Object.fromEntries(Object.entries(e.bareNetwork??{}).filter(c=>!a.has(c[0]))),d=Ie(),i=Object.fromEntries(Object.entries(e.bareNetwork?.config??{}).filter(c=>!d.has(c[0])));return{...l,name:e.name,description:e.description,type:e.networkType,config:{...i,[n("bridge_driver")]:e.bridge_driver,[n("bridge_external_interfaces")]:Object.keys(e.bridge_external_interfaces_per_member??{}).length===0?e.bridge_external_interfaces:void 0,[n("bridge_hwaddr")]:e.bridge_hwaddr,[n("bridge_mtu")]:e.bridge_mtu,[n("dns_domain")]:e.dns_domain,[n("dns_mode")]:e.dns_mode,[n("dns_nameservers")]:e.dns_nameservers,[n("dns_search")]:e.dns_search,[n("gvrp")]:e.gvrp,[n("ipv4_address")]:e.ipv4_address,[n("ipv4_dhcp")]:e.ipv4_dhcp,[n("ipv4_dhcp_expiry")]:e.ipv4_dhcp_expiry,[n("ipv4_dhcp_ranges")]:e.ipv4_dhcp_ranges,[n("ipv4_l3only")]:e.ipv4_l3only,[n("ipv4_nat")]:e.ipv4_nat,[n("ipv4_nat_address")]:e.ipv4_nat_address,[n("ipv4_ovn_ranges")]:e.ipv4_ovn_ranges,[n("ipv4_gateway")]:e.ipv4_gateway,[n("ipv4_routes")]:e.ipv4_routes,[n("ipv4_routes_anycast")]:e.ipv4_routes_anycast,[n("ipv6_address")]:e.ipv6_address,[n("ipv6_dhcp")]:e.ipv6_dhcp,[n("ipv6_dhcp_expiry")]:e.ipv6_dhcp_expiry,[n("ipv6_dhcp_ranges")]:e.ipv6_dhcp_ranges,[n("ipv6_dhcp_stateful")]:e.ipv6_dhcp_stateful,[n("ipv6_l3only")]:e.ipv6_l3only,[n("ipv6_nat")]:e.ipv6_nat,[n("ipv6_nat_address")]:e.ipv6_nat_address,[n("ipv6_ovn_ranges")]:e.ipv6_ovn_ranges,[n("ipv6_gateway")]:e.ipv6_gateway,[n("ipv6_routes")]:e.ipv6_routes,[n("ipv6_routes_anycast")]:e.ipv6_routes_anycast,[n("mtu")]:e.mtu?e.mtu.toString():void 0,[n("network")]:e.network,[n("ovn_ingress_mode")]:e.ovn_ingress_mode,[n("parent")]:e.parent,[n("security_acls")]:e.security_acls.length>0?e.security_acls.join(","):void 0,[n("security_acls_default_egress")]:e.security_acls_default_egress,[n("security_acls_default_ingress")]:e.security_acls_default_ingress,[n("vlan")]:e.vlan?e.vlan.toString():void 0}}},Ts=(e,a)=>!e.isValid||!e.values.name||e.values.networkType===m&&!e.values.network||ne.includes(e.values.networkType)&&!e.values.parent&&Object.values(e.values.parentPerClusterMember??{}).filter(l=>l.length>0).length!==a.length,Ps=({formik:e,getYaml:a,project:l,section:d,setSection:i,version:c=0})=>{const r=t.useNotify(),v=le(),[o,x]=j.useState(""),[P,w]=j.useState(!1),g=F=>{if(!o)return F;const A=F.filter(M=>M.name?.toString()?.toLowerCase().includes(o));return A.length>0&&w(!1),A},y=e.values.bareNetwork?.managed??!0,_=[de],N=e.values.ipv4_address!=="none",R=e.values.ipv6_address!=="none",b=e.values.networkType===E,p=e.values.networkType===h,I=e.values.networkType===L;y&&!p&&!b&&!I&&_.push(K),y&&N&&!b&&!I&&_.push(J),y&&R&&!b&&!I&&_.push(W),y&&!b&&!I&&_.push(z),y&&p&&_.push(Q),j.useEffect(()=>{const F=document.getElementById("content-details"),A=()=>{const oe=_.map(V),ue=qe(oe,F);i(ue,"scroll")},M=()=>{Ce(A,20)};return F?.addEventListener("scroll",M),()=>F?.removeEventListener("scroll",M)},[_]);const D=e.values.bareNetwork?.managed===!1;return s.jsxs("div",{className:"network-form",children:[s.jsxs(t.ScrollableContainer,{className:"contents",dependencies:[r.notification],belowIds:["form-footer","status-bar"],children:[!e.values.isCreating&&o.length<1&&d!==V(U)&&s.jsx(ls,{formik:e,project:l,isServerClustered:v}),s.jsxs(t.Form,{className:"sections",onSubmit:e.handleSubmit,children:[d!==V(U)&&s.jsxs(s.Fragment,{children:[s.jsx(t.Input,{type:"submit",hidden:!0,value:"Hidden input"}),o.length<1&&s.jsx(ke,{formik:e,project:l,isClustered:v},`main-${e.values.bareNetwork?.name}`),_.includes(K)&&s.jsx(es,{formik:e,filterRows:g},`bridge-${e.values.bareNetwork?.name}`),_.includes(J)&&s.jsx(as,{formik:e,filterRows:g},`ipv4-${e.values.bareNetwork?.name}`),_.includes(W)&&s.jsx(ts,{formik:e,filterRows:g},`ipv6-${e.values.bareNetwork?.name}`),_.includes(z)&&s.jsx(ss,{formik:e,filterRows:g},`dns-${e.values.bareNetwork?.name}`),_.includes(Q)&&s.jsx(ns,{formik:e,filterRows:g},`ovn-${e.values.bareNetwork?.name}`)]}),d===V(U)&&s.jsx(Se,{yaml:a(),setYaml:F=>{C(e),e.setFieldValue("yaml",F)},readOnly:!!e.values.editRestriction||D,readOnlyMessage:D?"Unmanaged networks are read only":e.values.editRestriction,children:s.jsx(Be,{entity:"network",docPath:"/explanation/networks/#managed-networks"})},`yaml-form-${c}`),P&&s.jsx("div",{children:"No configuration found matching this search."})]})]}),d!==V(U)&&_.length>1&&s.jsxs("div",{className:"aside",children:[s.jsx(t.SearchBox,{onChange:F=>{x(F),w(!0)},value:o,name:"search-setting",type:"text",placeholder:"Search for key"}),s.jsx(Pe,{active:d,setActive:F=>{i(F,"click")},formik:e,availableSections:_})]})]})};export{Ps as N,ms as a,Is as g,Ts as i,Cs as t};