| Current Path : /snap/lxd/current/share/lxd-ui/assets/ |
| Current File : //snap/lxd/current/share/lxd-ui/assets/NetworkForm-CUPjrYLG.js |
import{d as t,r as y,ay as pe,bR as ve,j as s,C as H,t as te,bL as he,bK as _e,bS as E,bT as L,bU as le,R as $,a0 as f,s as G,w as ge,ab as O,aa as m,bV as g,b3 as xe,bW as ne,a6 as V,bX as be,bY as je,bZ as ye,Q as de,b_ as T,bJ as Ne,Z as we,b$ as Fe,bH as i,c0 as Ve}from"./index-BsQN_SZU.js";import{G as ie,B as J,D as Q,I as W,a as X,O as Z,C as me,Y as B,N as Ie}from"./NetworkFormMenu-jasNljC3.js";import{J as C,L as u,Q as D,l as Ce}from"./SshKeyForm-BNz7yPwa.js";import{f as S}from"./formFields-DzJouV_d.js";import{h as z,i as Te,j as re}from"./useNetworks-1j5RF-bH.js";import{C as Pe}from"./ClusterSpecificSelect-B2H3HpuO.js";import{E as ce}from"./ExpandableList-DsGr0BpD.js";import{U as Se}from"./UsedByItem-DYTdOZkC.js";import{A as Re}from"./AutoExpandingTextArea-Bd-45rZK.js";import{F as Oe,C as Ee}from"./ClusterSpecificInput-7EvfCd3b.js";import{N as Le,a as De,b as Ae,Y as Me}from"./NetworkDefaultACLSelector-8KsXe1ya.js";import{a as Ue}from"./useNetworkAcls-Bl3lzJua.js";import{N as Y}from"./NetworkRichChip-Cp8QBNS_.js";import{a as k}from"./ClusterMemberRichChip-Di9w-E3M.js";import{P as Be}from"./ProjectRichChip-DZzjTfq6.js";import{g as $e}from"./scroll-Dc7Cgzms.js";const He=({project:e,props:a,formik:l})=>{const n=t.useNotify(),{data:d=[],error:c,isLoading:r}=z("default");y.useEffect(()=>{c&&n.failure("Loading networks failed",c)},[c]);const{data:v,error:o,isLoading:x}=pe(e);y.useEffect(()=>{o&&n.failure("Loading projects failed",o)},[o]);const w=(v?.config?.["restricted.networks.uplinks"]?.split(",")||d.filter(_=>ve.includes(_.type)&&_.managed).map(_=>_.name)).map(_=>({label:_,value:_}));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:n}=H(),{data:d=[]}=te(),c=t.useNotify();if(!n)return s.jsx(s.Fragment,{children:"Missing project"});const r=!l,{data:v=[],error:o,isLoading:x}=z(n,void 0,r);y.useEffect(()=>{o&&c.failure("Loading networks failed",o)},[o]);const{data:P=[],error:w,isLoading:_}=Te("default");y.useEffect(()=>{he(P,c)},[P]),y.useEffect(()=>{w&&c.failure("Loading cluster networks failed",w)},[w]);const b=v.filter(N=>N.managed===!1).map(N=>({label:N.name,value:N.name}));if(b.unshift({label:b.length===0?"No networks available":"Select option",value:""}),x||_)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 h=()=>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 d.forEach(j=>R.push({memberName:j.server_name,values:P.filter(_e).filter(p=>p.memberName===j.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(Pe,{id:"parent",options:R,values:a.values.parentPerClusterMember,onChange:j=>{a.setFieldValue("parentPerClusterMember",j)},isReadOnly:a.values.readOnly,toggleReadOnly:()=>{C(a),S("parent")},isDefaultSpecific:N.some(j=>j!==N[0]),disableReason:a.values.editRestriction,helpText:h()},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:h(),options:b,...e})},a.values.readOnly?"read":"edit")]})},qe=({formik:e,project:a})=>{const l=le("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(n=>s.jsx(Se,{item:n,activeProject:a,type:"profile",to:`${$}/ui/project/${encodeURIComponent(n.project)}/profile/${encodeURIComponent(n.name)}`,projectLinkDetailPage:"profiles"},n.name))})})]})},ee=({id:e,address:a,setAddress:l,family:n})=>{const d=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:d,onChange:()=>{l("")}}),s.jsx(t.Input,{id:e,name:e,type:"text",placeholder:"Enter address",onChange:c=>{l(c.target.value)},value:d&&a?a:"",disabled:!d,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 ",n,", 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)]}),Ke=({formik:e,project:a})=>{const{member:l}=H(),n=t.useNotify(),{data:d,error:c}=re(e.values.bareNetwork?.name??"",a,l,!e.values.isCreating);y.useEffect(()=>{c&&n.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:[f(d?.counters.bytes_received??0)," (",d?.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:[f(d?.counters.bytes_sent??0)," (",d?.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??"-"})]})]})},Ge=({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:G("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(Re,{...e})},a.values.readOnly?"read":"edit")]}),Je=({formik:e,project:a})=>{const{member:l}=H(),n=t.useNotify(),d=e.values.bareNetwork?.name??"",{data:c,error:r}=re(d,a,l);return y.useEffect(()=>{r&&n.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=y.useId(),{data:n=[],isLoading:d}=Ue(a),c=d?"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(ge,{type:"network-acl",value:o,to:`${$}/ui/project/${encodeURIComponent(a)}/network-acl/${encodeURIComponent(o)}`},o))}),s.jsx(Oe,{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(Le,{project:a,selectedAcls:e.values.security_acls,setSelectedAcls:o=>{e.setFieldValue("security_acls",o)},id:l,availableAcls:n}),e.values.readOnly?e.values.security_acls.length!==0&&s.jsx(De,{values:r}):s.jsx(Ae,{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")]}),K=({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")]}),We=({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")]}),Xe=({formik:e})=>s.jsx(t.CustomSelect,{id:"networkType",name:"networkType",help:e.values.networkType===m?s.jsx(xe,{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:g},{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===g&&(e.setFieldValue("networkType",g),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}),Ze=({formik:e,project:a,isClustered:l})=>{const n=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("_"," ")}`}),d=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(ie),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(Xe,{formik:e}):s.jsxs(s.Fragment,{children:[ye(e.values.networkType),!d&&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,{...n("name"),type:"text",required:!0})})]}),d&&s.jsx(Ge,{formik:e,props:n("description")}),e.values.networkType===m&&d&&s.jsx(He,{props:n("network"),project:a,formik:e}),c&&d&&s.jsx(Ye,{props:n("parent"),formik:e,isClustered:l}),e.values.networkType===g&&d&&s.jsxs(s.Fragment,{children:[s.jsx(K,{formik:e}),s.jsx(q,{formik:e})]}),e.values.networkType===E&&d&&s.jsxs(s.Fragment,{children:[s.jsx(K,{formik:e}),s.jsx(q,{formik:e}),s.jsx(We,{formik:e})]}),e.values.networkType===L&&d&&s.jsxs(s.Fragment,{children:[s.jsx(K,{formik:e}),s.jsx(q,{formik:e})]}),be.includes(e.values.networkType)&&d&&s.jsx(Qe,{project:a,formik:e}),!c&&d&&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&&je.includes(e.values.networkType)&&s.jsx(Ke,{formik:e,project:a}),!d&&s.jsx(Je,{formik:e,project:a}),!e.values.isCreating&&d&&s.jsx(qe,{project:a,formik:e})]})]})},ae=({formik:e,helpText:a,disabled:l,placeholder:n})=>{const{data:d=[]}=te(),c=d.map(r=>r.server_name);return s.jsx(Ee,{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:n,classname:"",disabledReason:e.values.editRestriction})},ze=({formik:e,filterRows:a})=>{const l=de(),n=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:d=>l&&d!=="-"&&d!==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:d})})]:[]]);return n.length===0?null:s.jsxs(s.Fragment,{children:[s.jsx("h2",{className:"p-heading--4",id:V(J),children:"Bridge"}),s.jsx(D,{rows:n})]})},fe=({formik:e,filterRows:a})=>{const l=a([...e.values.networkType!==g?[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===g?[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(Q),children:"DNS"}),s.jsx(D,{rows:l})]})},ke=({formik:e,filterRows:a})=>{const l=e.values.ipv4_dhcp!=="false",n=a([...e.values.networkType!==g?[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!==g?[u({formik:e,name:"ipv4_dhcp",label:"IPv4 DHCP",defaultValue:"",children:s.jsx(t.Select,{options:T})})]:[],...e.values.networkType!==m&&e.values.networkType!==g?[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,g].includes(e.values.networkType)?[u({formik:e,name:"ipv4_routes",label:"IPv4 routes",defaultValue:"",children:s.jsx(t.Textarea,{})})]:[],...e.values.networkType===g?[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 n.length===0?null:s.jsxs(s.Fragment,{children:[s.jsx("h2",{className:"p-heading--4",id:V(W),children:"IPv4"}),s.jsx(D,{rows:n})]})},es=({formik:e,filterRows:a})=>{const l=e.values.ipv6_dhcp!=="false",n=a([...e.values.networkType!==g?[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!==g?[u({formik:e,name:"ipv6_dhcp",label:"IPv6 DHCP",defaultValue:"",children:s.jsx(t.Select,{options:T})})]:[],...e.values.networkType!==m&&e.values.networkType!==g?[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!==g?[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,g].includes(e.values.networkType)?[u({formik:e,name:"ipv6_routes",label:"IPv6 routes",defaultValue:"",children:s.jsx(t.Textarea,{})})]:[],...e.values.networkType===g?[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 n.length===0?null:s.jsxs(s.Fragment,{children:[s.jsx("h2",{className:"p-heading--4",id:V(X),children:"IPv6"}),s.jsx(D,{rows:n})]})},ss=({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(Z),children:"OVN"}),s.jsx(D,{rows:l})]})},as=({formik:e,project:a,isServerClustered:l})=>{const{member:n}=H(),d=t.useNotify(),[c,r]=y.useState(!0),[v,o]=y.useState(!0),x=e.values.bareNetwork;if(!x)return;const P=l&&Ne.includes(x.type),{data:w=[],error:_}=z(a);y.useEffect(()=>{_&&d.failure("Loading networks failed",_)},[_]);const b=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)}`)),h=le("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(Y,{networkName:I,projectName:a,clusterMember:p})]},p):null}),j=N??R.filter(p=>p!==null).length>0;return s.jsxs(s.Fragment,{children:[s.jsx("h2",{className:"p-heading--4",id:V(me),children:"Connections"}),s.jsxs("div",{className:"u-sv3 network-topology",children:[j&&s.jsx("div",{className:"uplink",children:P?R:N&&s.jsx("div",{className:"uplink-item has-parent",children:s.jsx(Y,{networkName:N,projectName:"default"})})}),s.jsxs("div",{className:G("current-network",{"has-descendents":h.length>0||b.length>0,"has-parent":j}),children:[n&&s.jsx("span",{className:"has-descendents",children:s.jsx(k,{clusterMember:n})}),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:[b.slice(0,c?5:b.length).map(p=>{const I=`${$}/ui/project/default/network/${encodeURIComponent(p.name)}`;return s.jsx("div",{className:G("downstream-item",{"has-descendents":(p.used_by??[]).length>0}),children:s.jsx(Y,{networkName:p.name,projectName:"default"})},I)}),b.length>5&&c&&s.jsx("div",{className:"downstream-item",children:s.jsx(t.Button,{appearance:"link",onClick:()=>{r(!1)},small:!0,children:"Show all"})}),h.slice(0,v?5:h.length).map(p=>{const I=`${$}/ui/project/${encodeURIComponent(p.project)}/instance/${encodeURIComponent(p.name)}`,A=p.project!==a;return s.jsxs("div",{className:"downstream-item",children:[A&&s.jsxs(s.Fragment,{children:[s.jsx(Be,{projectName:p.project})," /"," "]}),s.jsx(we,{instanceName:p.name,projectName:p.project})]},I)}),h.length>5&&v&&s.jsx("div",{className:"downstream-item",children:s.jsx(t.Button,{appearance:"link",onClick:()=>{o(!1)},small:!0,children:"Show all"})})]})]})]})},js=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]))),n=Fe(),d=Object.fromEntries(Object.entries(e.bareNetwork?.config??{}).filter(c=>!n.has(c[0])));return{...l,name:e.name,description:e.description,type:e.networkType,config:{...d,[i("bridge_driver")]:e.bridge_driver,[i("bridge_external_interfaces")]:Object.keys(e.bridge_external_interfaces_per_member??{}).length===0?e.bridge_external_interfaces:void 0,[i("bridge_hwaddr")]:e.bridge_hwaddr,[i("bridge_mtu")]:e.bridge_mtu,[i("dns_domain")]:e.dns_domain,[i("dns_mode")]:e.dns_mode,[i("dns_nameservers")]:e.dns_nameservers,[i("dns_search")]:e.dns_search,[i("gvrp")]:e.gvrp,[i("ipv4_address")]:e.ipv4_address,[i("ipv4_dhcp")]:e.ipv4_dhcp,[i("ipv4_dhcp_expiry")]:e.ipv4_dhcp_expiry,[i("ipv4_dhcp_ranges")]:e.ipv4_dhcp_ranges,[i("ipv4_l3only")]:e.ipv4_l3only,[i("ipv4_nat")]:e.ipv4_nat,[i("ipv4_nat_address")]:e.ipv4_nat_address,[i("ipv4_ovn_ranges")]:e.ipv4_ovn_ranges,[i("ipv4_gateway")]:e.ipv4_gateway,[i("ipv4_routes")]:e.ipv4_routes,[i("ipv4_routes_anycast")]:e.ipv4_routes_anycast,[i("ipv6_address")]:e.ipv6_address,[i("ipv6_dhcp")]:e.ipv6_dhcp,[i("ipv6_dhcp_expiry")]:e.ipv6_dhcp_expiry,[i("ipv6_dhcp_ranges")]:e.ipv6_dhcp_ranges,[i("ipv6_dhcp_stateful")]:e.ipv6_dhcp_stateful,[i("ipv6_l3only")]:e.ipv6_l3only,[i("ipv6_nat")]:e.ipv6_nat,[i("ipv6_nat_address")]:e.ipv6_nat_address,[i("ipv6_ovn_ranges")]:e.ipv6_ovn_ranges,[i("ipv6_gateway")]:e.ipv6_gateway,[i("ipv6_routes")]:e.ipv6_routes,[i("ipv6_routes_anycast")]:e.ipv6_routes_anycast,[i("mtu")]:e.mtu?e.mtu.toString():void 0,[i("network")]:e.network,[i("ovn_ingress_mode")]:e.ovn_ingress_mode,[i("parent")]:e.parent,[i("security_acls")]:e.security_acls.length>0?e.security_acls.join(","):void 0,[i("security_acls_default_egress")]:e.security_acls_default_egress,[i("security_acls_default_ingress")]:e.security_acls_default_ingress,[i("vlan")]:e.vlan?e.vlan.toString():void 0}}},ys=(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,Ns=({formik:e,getYaml:a,project:l,section:n,setSection:d,version:c=0})=>{const r=t.useNotify(),v=de(),[o,x]=y.useState(""),[P,w]=y.useState(!1),_=F=>{if(!o)return F;const M=F.filter(U=>U.name?.toString()?.toLowerCase().includes(o));return M.length>0&&w(!1),M},b=e.values.bareNetwork?.managed??!0,h=[ie],N=e.values.ipv4_address!=="none",R=e.values.ipv6_address!=="none",j=e.values.networkType===E,p=e.values.networkType===g,I=e.values.networkType===L;b&&!p&&!j&&!I&&h.push(J),b&&N&&!j&&!I&&h.push(W),b&&R&&!j&&!I&&h.push(X),b&&!j&&!I&&h.push(Q),b&&p&&h.push(Z),y.useEffect(()=>{const F=document.getElementById("content-details"),M=()=>{const oe=h.map(V),ue=$e(oe,F);d(ue,"scroll")},U=()=>{Ve(M,20)};return F?.addEventListener("scroll",U),()=>F?.removeEventListener("scroll",U)},[h]);const A=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&&n!==V(B)&&s.jsx(as,{formik:e,project:l,isServerClustered:v}),s.jsxs(t.Form,{className:"sections",onSubmit:e.handleSubmit,children:[n!==V(B)&&s.jsxs(s.Fragment,{children:[s.jsx(t.Input,{type:"submit",hidden:!0,value:"Hidden input"}),o.length<1&&s.jsx(Ze,{formik:e,project:l,isClustered:v},`main-${e.values.bareNetwork?.name}`),h.includes(J)&&s.jsx(ze,{formik:e,filterRows:_},`bridge-${e.values.bareNetwork?.name}`),h.includes(W)&&s.jsx(ke,{formik:e,filterRows:_},`ipv4-${e.values.bareNetwork?.name}`),h.includes(X)&&s.jsx(es,{formik:e,filterRows:_},`ipv6-${e.values.bareNetwork?.name}`),h.includes(Q)&&s.jsx(fe,{formik:e,filterRows:_},`dns-${e.values.bareNetwork?.name}`),h.includes(Z)&&s.jsx(ss,{formik:e,filterRows:_},`ovn-${e.values.bareNetwork?.name}`)]}),n===V(B)&&s.jsx(Ce,{yaml:a(),setYaml:F=>{C(e),e.setFieldValue("yaml",F)},readOnly:!!e.values.editRestriction||A,readOnlyMessage:A?"Unmanaged networks are read only":e.values.editRestriction,children:s.jsx(Me,{entity:"network",docPath:"/explanation/networks/#managed-networks"})},`yaml-form-${c}`),P&&s.jsx("div",{children:"No configuration found matching this search."})]})]}),n!==V(B)&&h.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(Ie,{active:n,setActive:F=>{d(F,"click")},formik:e,availableSections:h})]})]})};export{Ns as N,ys as i,js as t};