Your IP : 216.73.216.189


Current Path : /proc/thread-self/root/snap/lxd/current/share/lxd-ui/assets/
Upload File :
Current File : //proc/thread-self/root/snap/lxd/current/share/lxd-ui/assets/ClusterMemberActions-DbmJKAbr.js

import{d as t,r as y,t as R,J as _,z as P,x as w,j as e,s as L,y as k,w as h,K as G,k as T,p as q,M as K,O as Q,P as A}from"./index-BFGypnt-.js";import{p as B,u as O}from"./cluster-members-CG6XHzn4.js";import{a as g,c as V}from"./ClusterMemberRichChip-h3WaiYeI.js";import{u as I,p as D}from"./usePanelParams-CV5ZHNeu.js";import{a as H}from"./useClusterMembers-B29_ixY7.js";import{G as Y}from"./GroupSelection-sYtH6Ve5.js";import{b as z}from"./useClusterGroups-BlRzika4.js";const $=({member:s,hasLabel:i=!1,className:u,onClose:d})=>{const a=t.useNotify(),n=t.useToastNotification(),[m,b]=y.useState(!1),[r,p]=y.useState(""),f=R(),v=_(),l=P().getType(s.server_name),{canEditServerConfiguration:x}=w(),j=()=>{f.invalidateQueries({queryKey:[h.cluster],predicate:c=>c.queryKey[0]===h.cluster||c.queryKey[0]===h.operations})},S=()=>{n.success(e.jsxs(e.Fragment,{children:["Member ",e.jsx(g,{clusterMember:s.server_name})," ","evacuation completed."]}))},M=c=>{n.failure("Member evacuation failed",new Error(c),e.jsx(g,{clusterMember:s.server_name}))},E=()=>{b(!0),B(s,"evacuate",r).then(c=>{n.info(e.jsxs(e.Fragment,{children:["Member ",e.jsx(g,{clusterMember:s.server_name})," ","evacuation started."]})),v.set(c.metadata.id,S,M,j),d?.()}).catch(c=>{a.failure("Member evacuation failed",c)}).finally(()=>{b(!1),j()})},C=x(),N=m||s.status!=="Online"||!!l||!C,F=()=>C?m||l==="Evacuating"?"Evacuating cluster member...":s.status!=="Online"?"Member must be online to evacuate":l?`Cluster member is currently ${l.toLowerCase()}...`:"Evacuate cluster member":"You do not have permission to evacuate cluster members";return e.jsxs(t.ConfirmationButton,{appearance:i?"":"base",loading:m||l==="Evacuating",disabled:N,confirmationModalProps:{title:"Confirm evacuation",children:e.jsxs(e.Fragment,{children:[e.jsx(t.Select,{label:"Evacuation action",options:[{label:"Auto",value:""},{label:"Stop all instances",value:"stop"},{label:"Migrate instances to other members",value:"migrate"},{label:"Live migrate instances to other members",value:"live-migrate"}],help:"Chose what to do with instances on this member.",onChange:c=>{p(c.target.value)},value:r}),e.jsxs("p",{children:["This will evacuate cluster member"," ",e.jsx(k,{type:"cluster-member",value:s.server_name,bold:!0}),"."]})]}),confirmButtonLabel:F(),onConfirm:E},shiftClickEnabled:!0,title:"Evacuate cluster member",className:L(u,"has-icon u-no-margin--bottom"),children:[e.jsx(t.Icon,{name:"stop"}),i&&e.jsx("span",{children:"Evacuate"})]})},J=({member:s,hasLabel:i=!1,className:u,onClose:d})=>{const a=t.useNotify(),n=t.useToastNotification(),[m,b]=y.useState(!1),[r,p]=y.useState(""),f=R(),v=_(),l=P().getType(s.server_name),{canEditServerConfiguration:x}=w(),j=()=>{f.invalidateQueries({queryKey:[h.cluster],predicate:c=>c.queryKey[0]===h.cluster||c.queryKey[0]===h.operations})},S=()=>{n.success(e.jsxs(e.Fragment,{children:["Member ",e.jsx(g,{clusterMember:s.server_name})," ","restore completed."]}))},M=c=>{n.failure("Member restore failed",new Error(c),e.jsx(g,{clusterMember:s.server_name}))},E=()=>{b(!0),B(s,"restore",r).then(c=>{n.info(e.jsxs(e.Fragment,{children:["Member ",e.jsx(g,{clusterMember:s.server_name})," ","restore started."]})),v.set(c.metadata.id,S,M,j),d?.()}).catch(c=>{a.failure("Member restore failed",c)}).finally(()=>{b(!1),j()})},C=x(),N=m||s.status!=="Evacuated"||!!l||!C,F=()=>C?m||l==="Restoring"?"Restoring cluster member...":s.status!=="Evacuated"?"Member must be evacuated to restore":l?`Cluster member is currently ${l.toLowerCase()}...`:"Restore cluster member":"You do not have permission to restore cluster members";return e.jsxs(t.ConfirmationButton,{appearance:i?"":"base",loading:m||l==="Restoring",disabled:N,confirmationModalProps:{title:"Confirm restore",children:e.jsxs(e.Fragment,{children:[e.jsx(t.CheckboxInput,{label:"Restore instances",onChange:()=>{p(r===""?"skip":"")},checked:r===""}),e.jsx("p",{className:"p-form-help-text",children:"Chose whether to restore instances that were stopped or migrated"}),e.jsxs("p",{children:["This will restore cluster member"," ",e.jsx(k,{type:"cluster-member",value:s.server_name,bold:!0}),"."]})]}),confirmButtonLabel:F(),onConfirm:E,confirmButtonAppearance:"positive"},shiftClickEnabled:!0,title:"Restore cluster member",className:L(u,"has-icon u-no-margin--bottom"),children:[e.jsx(t.Icon,{name:"play"}),i&&e.jsx("span",{children:"Restore"})]})},U=({setSelectedRoles:s,selectedRoles:i,id:u="cluster-member-roles-selector",help:d,label:a="Custom roles"})=>{const{hasClusteringControlPlane:n}=G(),m=[n?"control-plane":"event-hub","ovn-chassis"],{automaticRoles:b,customRoles:r}=V(i);return e.jsxs(e.Fragment,{children:[a&&e.jsx("label",{htmlFor:u,children:a}),e.jsx(t.MultiSelect,{label:a,items:m.map(p=>({label:p,value:p})),selectedItems:r.map(p=>({label:p,value:p})),variant:"condensed",placeholder:"Select custom roles",onItemsUpdate:p=>{s([...b,...p.map(f=>f.value)])},showDropdownFooter:!1,id:u,help:d,isSortedAlphabetically:!1})]})},W=({onClose:s})=>{const i=I(),u=t.useNotify(),d=t.useToastNotification(),a=R(),{data:n}=H(i.member??""),{data:m=[]}=z(),b=()=>{i.clear(),u.clear(),s?.()},r=T({initialValues:{name:n?.server_name??"",description:n?.description??"",failureDomain:n?.failure_domain??"",groups:n?.groups??[],roles:n?.roles??[]},enableReinitialize:!0,onSubmit:o=>{const l={server_name:o.name,description:o.description,failure_domain:o.failureDomain,groups:o.groups,roles:o?.roles};O(l).then(()=>{d.success(e.jsxs(e.Fragment,{children:["Cluster member"," ",e.jsx(g,{clusterMember:o.name})," saved."]})),b()}).catch(x=>{u.failure("Cluster member update failed",x)}).finally(()=>{r.setSubmitting(!1),a.invalidateQueries({queryKey:[h.cluster,h.members]}),a.invalidateQueries({queryKey:[h.cluster,h.members,o.name]})})}}),p=r.values.groups.filter(o=>!n?.groups?.includes(o)||!1),f=n?.groups?.filter(o=>!r.values.groups.includes(o))??[],v=new Set([...p,...f]);return e.jsxs(t.SidePanel,{children:[e.jsx(t.SidePanel.Header,{children:e.jsxs(t.SidePanel.HeaderTitle,{children:["Edit cluster member ",i.member]})}),e.jsx(q,{className:"u-no-padding"}),e.jsx(t.SidePanel.Content,{className:"u-no-padding",children:e.jsx(t.ScrollableContainer,{dependencies:[u.notification],belowIds:["panel-footer"],children:e.jsxs(t.Form,{onSubmit:r.handleSubmit,children:[e.jsx(t.Input,{type:"submit",hidden:!0,value:"Hidden input"}),e.jsx(t.Input,{...r.getFieldProps("description"),type:"text",label:"Description",placeholder:"Enter description"}),e.jsx(t.Input,{...r.getFieldProps("failureDomain"),type:"text",label:"Failure domain",placeholder:"Enter failure domain"}),e.jsx(U,{selectedRoles:r.values.roles,setSelectedRoles:o=>{r.setFieldValue("roles",o)},help:e.jsx(K,{docPath:"/explanation/clusters/#member-roles",children:"Learn more about cluster member roles"})}),e.jsx("p",{className:"u-sv-1",children:"Cluster groups"}),e.jsx(Y,{groups:m,modifiedGroups:v,parentItemName:"member",parentItems:[{name:r.values.name}],selectedGroups:new Set(r.values.groups),setSelectedGroups:(o,l)=>{l?r.setFieldValue("groups",[]):r.setFieldValue("groups",o)},preselectedGroups:new Set(n?.groups??[]),indeterminateGroups:new Set,toggleGroup:o=>{const l=new Set([...r.values.groups]);l.has(o)?l.delete(o):l.add(o),r.setFieldValue("groups",[...l])},scrollDependencies:[u.notification]})]})})}),e.jsxs(t.SidePanel.Footer,{className:"u-align--right",children:[e.jsx(t.Button,{appearance:"base",onClick:b,className:"u-no-margin--bottom",children:"Cancel"}),e.jsx(t.ActionButton,{appearance:"positive",loading:r.isSubmitting,onClick:()=>{r.submitForm()},className:"u-no-margin--bottom",disabled:!r.isValid||r.isSubmitting||!r.values.name,children:"Save changes"})]})]})},X=({member:s,hasLabel:i=!1,className:u,onClose:d})=>{const a=I(),{canEditServerConfiguration:n}=w(),m=n();return e.jsxs(e.Fragment,{children:[e.jsxs(t.Button,{appearance:i?"":"base",className:L(u,"u-no-margin--bottom"),disabled:!m,onClick:()=>{a.openEditMember(s)},title:m?"Edit cluster member":"You do not have permission to edit cluster members",hasIcon:!0,children:[e.jsx(t.Icon,{name:"edit"}),i&&e.jsx("span",{children:"Edit"})]}),a.panel===D.editClusterMember&&a.member===s&&e.jsx(W,{onClose:d})]})},oe=({member:s,isDetailPage:i=!1})=>{const u=Q(A);if(!s)return null;const d=i?u?"p-contextual-menu__link":"p-segmented-control__button":"",a=[];return a.push(e.jsx(J,{member:s,hasLabel:i,className:d},"restore")),a.push(e.jsx($,{member:s,hasLabel:i,className:d},"evacuate")),a.push(e.jsx(X,{member:s.server_name,hasLabel:i,className:d},"edit")),i?u?e.jsx(t.ContextualMenu,{closeOnOutsideClick:!1,toggleLabel:"Actions",position:"left",hasToggleIcon:!0,title:"actions",children:n=>e.jsx("span",{children:[...a].map(m=>y.cloneElement(m,{onClose:n}))})}):e.jsx("div",{className:"p-segmented-control",children:e.jsxs("div",{className:"p-segmented-control__list",children:[...a]})}):e.jsx(t.List,{inline:!0,className:"actions-list",items:a})};export{oe as C};