@spinnaker/kubernetes 2026.2.3 → 2026.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/dist/index.d.ts +1 -2
  2. package/dist/index.js +1 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/instance/details/KubernetesInstanceDetails.d.ts +54 -0
  5. package/dist/instance/details/kubernetesInstanceDetails.utils.d.ts +13 -0
  6. package/dist/instance/index.d.ts +1 -1
  7. package/dist/kubernetes.module.d.ts +5 -1
  8. package/dist/loadBalancer/transformer.d.ts +1 -1
  9. package/dist/manifest/AnnotationCustomSections.d.ts +3 -2
  10. package/dist/manifest/ManifestKindSearch.d.ts +1 -1
  11. package/dist/manifest/delete/Delete.d.ts +0 -1
  12. package/dist/manifest/delete/DeleteModal.d.ts +1 -1
  13. package/dist/manifest/delete/delete.types.d.ts +4 -0
  14. package/dist/manifest/index.d.ts +3 -6
  15. package/dist/manifest/manifest.service.d.ts +5 -0
  16. package/dist/manifest/manifestCommandBuilder.service.d.ts +1 -1
  17. package/dist/manifest/rollout/PauseRollout.d.ts +0 -1
  18. package/dist/manifest/rollout/ResumeRollout.d.ts +0 -1
  19. package/dist/manifest/rollout/RollingRestart.d.ts +4 -4
  20. package/dist/manifest/rollout/UndoRollout.d.ts +0 -1
  21. package/dist/manifest/scale/Scale.d.ts +1 -2
  22. package/dist/manifest/scale/ScaleModal.d.ts +3 -3
  23. package/dist/manifest/scale/ScaleSettingsForm.d.ts +7 -1
  24. package/dist/manifest/selector/ManifestSelector.d.ts +1 -1
  25. package/dist/manifest/traffic/ManifestTrafficService.d.ts +2 -2
  26. package/dist/pipelines/stages/deleteManifest/DeleteManifestOptionsForm.d.ts +1 -1
  27. package/dist/pipelines/stages/deployManifest/manifestStatus/DeployStatus.d.ts +1 -0
  28. package/dist/pipelines/stages/deployManifest/manifestStatus/ManifestDetailsLink.d.ts +6 -3
  29. package/dist/pipelines/stages/traffic/disableManifest.stage.d.ts +2 -1
  30. package/dist/pipelines/stages/traffic/enableManifest.stage.d.ts +2 -1
  31. package/dist/rawResource/index.d.ts +3 -1
  32. package/dist/rawResource/rawResource.dataSource.d.ts +1 -1
  33. package/dist/rawResource/rawResource.states.d.ts +4 -1
  34. package/dist/resources/resources.state.d.ts +2 -1
  35. package/dist/securityGroup/details/KubernetesSecurityGroupDetails.d.ts +49 -0
  36. package/dist/securityGroup/index.d.ts +3 -1
  37. package/dist/securityGroup/transformer.d.ts +4 -1
  38. package/dist/serverGroup/serverGroupCommandBuilder.d.ts +1 -1
  39. package/dist/serverGroup/serverGroupTransformer.d.ts +1 -1
  40. package/dist/serverGroupManager/details/ServerGroupManagerDetails.d.ts +7 -3
  41. package/package.json +3 -12
  42. package/src/help/kubernetes.help.ts +2 -0
  43. package/src/index.ts +2 -2
  44. package/src/instance/details/KubernetesInstanceDetails.spec.tsx +451 -0
  45. package/src/instance/details/KubernetesInstanceDetails.tsx +342 -0
  46. package/src/instance/details/kubernetesInstanceDetails.utils.ts +77 -0
  47. package/src/instance/index.ts +1 -1
  48. package/src/kubernetes.module.spec.ts +25 -0
  49. package/src/kubernetes.module.ts +23 -87
  50. package/src/loadBalancer/details/KubernetesLoadBalancerActions.tsx +30 -35
  51. package/src/loadBalancer/details/sections/LoadBalancerAnnotationCustomSection.tsx +2 -3
  52. package/src/loadBalancer/transformer.ts +1 -1
  53. package/src/manifest/AnnotationCustomSections.spec.tsx +178 -0
  54. package/src/manifest/AnnotationCustomSections.tsx +179 -2
  55. package/src/manifest/ManifestKindSearch.tsx +1 -1
  56. package/src/manifest/delete/Delete.tsx +0 -9
  57. package/src/manifest/delete/DeleteModal.tsx +69 -72
  58. package/src/manifest/delete/delete.types.ts +4 -0
  59. package/src/manifest/index.ts +3 -6
  60. package/src/manifest/manifest.service.ts +18 -1
  61. package/src/manifest/manifestCommandBuilder.service.spec.ts +41 -0
  62. package/src/manifest/manifestCommandBuilder.service.ts +45 -59
  63. package/src/manifest/rollout/PauseRollout.tsx +1 -9
  64. package/src/manifest/rollout/ResumeRollout.tsx +2 -10
  65. package/src/manifest/rollout/RollingRestart.tsx +16 -22
  66. package/src/manifest/rollout/UndoRollout.tsx +1 -10
  67. package/src/manifest/rollout/UndoRolloutModal.tsx +5 -1
  68. package/src/manifest/scale/Scale.tsx +12 -11
  69. package/src/manifest/scale/ScaleModal.tsx +43 -31
  70. package/src/manifest/scale/ScaleSettingsForm.tsx +8 -1
  71. package/src/manifest/selector/ManifestSelector.spec.tsx +89 -46
  72. package/src/manifest/selector/ManifestSelector.tsx +4 -5
  73. package/src/manifest/traffic/ManifestTrafficService.ts +2 -2
  74. package/src/manifest/wizard/ManifestWizard.tsx +1 -1
  75. package/src/pipelines/stages/deleteManifest/DeleteManifestOptionsForm.tsx +1 -1
  76. package/src/pipelines/stages/deleteManifest/DeleteManifestStageConfig.tsx +1 -1
  77. package/src/pipelines/stages/deployManifest/DeployManifestStageForm.tsx +16 -0
  78. package/src/pipelines/stages/deployManifest/ManifestCopier.spec.ts +52 -77
  79. package/src/pipelines/stages/deployManifest/ManifestDeploymentOptions.spec.tsx +2 -0
  80. package/src/pipelines/stages/deployManifest/manifestStatus/DeployStatus.tsx +39 -4
  81. package/src/pipelines/stages/deployManifest/manifestStatus/ManifestDetailsLink.spec.tsx +35 -0
  82. package/src/pipelines/stages/deployManifest/manifestStatus/ManifestDetailsLink.tsx +10 -5
  83. package/src/pipelines/stages/traffic/ManifestTrafficStageRegistration.spec.ts +34 -0
  84. package/src/pipelines/stages/traffic/disableManifest.stage.ts +17 -19
  85. package/src/pipelines/stages/traffic/enableManifest.stage.ts +17 -19
  86. package/src/rawResource/index.ts +18 -1
  87. package/src/rawResource/rawResource.dataSource.ts +5 -8
  88. package/src/rawResource/rawResource.states.ts +50 -51
  89. package/src/resources/resources.state.spec.ts +138 -0
  90. package/src/resources/resources.state.ts +30 -35
  91. package/src/securityGroup/details/KubernetesSecurityGroupDetails.spec.tsx +292 -0
  92. package/src/securityGroup/details/KubernetesSecurityGroupDetails.tsx +304 -0
  93. package/src/securityGroup/index.ts +3 -1
  94. package/src/securityGroup/transformer.ts +2 -10
  95. package/src/serverGroup/details/KubernetesServerGroupActions.tsx +31 -61
  96. package/src/serverGroup/details/kubernetesServerGroupDetailsGetter.ts +1 -1
  97. package/src/serverGroup/details/sections/ServerGroupAnnotationCustomSection.tsx +2 -3
  98. package/src/serverGroup/serverGroupCommandBuilder.ts +1 -1
  99. package/src/serverGroup/serverGroupTransformer.ts +1 -1
  100. package/src/serverGroupManager/details/ServerGroupManagerActions.tsx +48 -128
  101. package/src/serverGroupManager/details/ServerGroupManagerDetails.spec.ts +12 -0
  102. package/src/serverGroupManager/details/ServerGroupManagerDetails.tsx +19 -8
  103. package/src/serverGroupManager/details/sections/ServerGroupManagerAnnotationCustomSection.tsx +2 -3
  104. package/src/serverGroupManager/details/useKubernetesServerGroupManagerDetails.spec.tsx +112 -0
  105. package/src/serverGroupManager/details/useKubernetesServerGroupManagerDetails.tsx +50 -29
  106. package/dist/instance/details/details.controller.d.ts +0 -1
  107. package/dist/manifest/annotationCustomSections.component.d.ts +0 -3
  108. package/dist/manifest/delete/delete.controller.d.ts +0 -12
  109. package/dist/manifest/delete/deleteOptionsForm.component.d.ts +0 -1
  110. package/dist/manifest/editor/json/jsonEditor.component.d.ts +0 -1
  111. package/dist/manifest/manifestEvents.component.d.ts +0 -1
  112. package/dist/manifest/manifestImageDetails.component.d.ts +0 -1
  113. package/dist/manifest/manifestLabels.component.d.ts +0 -1
  114. package/dist/manifest/manifestQos.component.d.ts +0 -1
  115. package/dist/manifest/manifestResources.component.d.ts +0 -1
  116. package/dist/manifest/rollout/pause.controller.d.ts +0 -1
  117. package/dist/manifest/rollout/resume.controller.d.ts +0 -1
  118. package/dist/manifest/rollout/undo.controller.d.ts +0 -5
  119. package/dist/manifest/scale/scale.controller.d.ts +0 -8
  120. package/dist/manifest/scale/scaleSettingsForm.component.d.ts +0 -1
  121. package/dist/manifest/selector/selector.component.d.ts +0 -1
  122. package/dist/manifest/status/condition.component.d.ts +0 -1
  123. package/dist/manifest/status/status.component.d.ts +0 -1
  124. package/dist/rawResource/rawResource.module.d.ts +0 -1
  125. package/dist/reactShims/index.d.ts +0 -1
  126. package/dist/reactShims/kubernetes.react.injector.d.ts +0 -11
  127. package/dist/reactShims/kubernetes.react.module.d.ts +0 -1
  128. package/dist/securityGroup/details/details.controller.d.ts +0 -1
  129. package/src/instance/details/details.controller.ts +0 -186
  130. package/src/instance/details/details.html +0 -80
  131. package/src/manifest/annotationCustomSections.component.ts +0 -114
  132. package/src/manifest/delete/delete.controller.ts +0 -80
  133. package/src/manifest/delete/delete.html +0 -42
  134. package/src/manifest/delete/deleteOptionsForm.component.ts +0 -52
  135. package/src/manifest/editor/json/jsonEditor.component.ts +0 -12
  136. package/src/manifest/manifestEvents.component.ts +0 -12
  137. package/src/manifest/manifestImageDetails.component.ts +0 -12
  138. package/src/manifest/manifestLabels.component.ts +0 -12
  139. package/src/manifest/manifestQos.component.ts +0 -12
  140. package/src/manifest/manifestResources.component.ts +0 -12
  141. package/src/manifest/rollout/pause.controller.ts +0 -66
  142. package/src/manifest/rollout/pause.html +0 -28
  143. package/src/manifest/rollout/resume.controller.ts +0 -66
  144. package/src/manifest/rollout/resume.html +0 -28
  145. package/src/manifest/rollout/undo.controller.ts +0 -74
  146. package/src/manifest/rollout/undo.html +0 -44
  147. package/src/manifest/scale/scale.controller.ts +0 -75
  148. package/src/manifest/scale/scale.html +0 -32
  149. package/src/manifest/scale/scaleSettingsForm.component.ts +0 -11
  150. package/src/manifest/selector/selector.component.ts +0 -17
  151. package/src/manifest/status/condition.component.ts +0 -12
  152. package/src/manifest/status/status.component.ts +0 -11
  153. package/src/rawResource/rawResource.module.ts +0 -8
  154. package/src/reactShims/index.ts +0 -1
  155. package/src/reactShims/kubernetes.react.injector.ts +0 -30
  156. package/src/reactShims/kubernetes.react.module.ts +0 -12
  157. package/src/securityGroup/details/details.controller.ts +0 -118
  158. package/src/securityGroup/details/details.html +0 -91
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{module as e,copy as t}from"angular";import{HelpContentsRegistry as n,AccountService as a,HelpField as s,AccountSelectInput as r,YamlEditor as i,TaskMonitor as o,ReactModal as l,WizardModal as c,WizardPage as d,noop as m,ManifestWriter as u,SETTINGS as p,ManifestReader as h,InstanceReader as C,RecentHistoryService as f,ReactInject as g,relativeTime as b,JobManifestPodLogs as v,JobEventBasedPodNameProvider as k,CollapsibleSection as E,timestamp as y,AccountTag as S,robotToHuman as A,HealthCounts as w,CopyToClipboard as M,StageConfigField as N,NumberInput as x,withErrorBoundary as D,Spinner as F,Tooltip as T,AddEntityTagLinks as R,ModalInjector as I,useDataSource as $,useData as P,useTaskMonitor as G,TaskMonitorWrapper as O,SpinFormik as B,ModalClose as L,TaskReason as z,ValidationMessage as K,UserVerification as U,SubmitButton as V,useModal as q,HoverablePopover as j,ConfirmationModalService as _,ReactSelectInput as H,NameUtils as W,SearchService as J,AppListExtractor as X,NgReact as Z,ScopeClusterSelector as Q,StageConstants as Y,ExecutionDetailsSection as ee,StageFailureMessage as te,Registry as ne,ExecutionDetailsTasks as ae,TetheredSelect as se,StageArtifactSelector as re,ArtifactTypePatterns as ie,Markdown as oe,yamlDocumentsToString as le,CheckboxInput as ce,RadioButtonInput as de,StageArtifactSelectorDelegate as me,FormikStageConfig as ue,ReactInjector as pe,ManifestYaml as he,CollapsibleElement as Ce,ExecutionArtifactTab as fe,ArtifactReferenceService as ge,ExpectedArtifactService as be,DefaultPodNameProvider as ve,JobStageExecutionLogs as ke,EXECUTION_ARTIFACT_TAB as Ee,PipelineConfigValidator as ye,ApplicationDataSourceRegistry as Se,INFRASTRUCTURE_KEY as Ae,REST as we,CloudProviderLogo as Me,FormField as Ne,FilterSection as xe,FilterCheckbox as De,Overridable as Fe,logger as Te,APPLICATION_STATE_PROVIDER as Re,SECURITY_GROUP_READER as Ie,TaskExecutor as $e,ClusterTargetBuilder as Pe,ServerGroupReader as Ge,IfFeatureEnabled as Oe,Details as Be,EntityNotifications as Le,ApplicationNameValidator as ze,YAML_EDITOR_COMPONENT as Ke,STAGE_ARTIFACT_SELECTOR_COMPONENT_REACT as Ue,CloudProviderRegistry as Ve}from"@spinnaker/core";import{cloneDeep as qe,has as je,flattenDeep as _e,chain as He,camelCase as We,get as Je,partition as Xe,trim as Ze,keys as Qe,isEmpty as Ye,orderBy as et,sortBy as tt,defaults as nt,flatten as at,groupBy as st,find as rt,map as it,split as ot,set as lt,capitalize as ct}from"lodash";import{load as dt,dump as mt}from"js-yaml";import{$q as ut}from"ngimport";import pt,{useState as ht,useMemo as Ct,useEffect as ft}from"react";import{angular2react as gt}from"angular2react";import bt from"dompurify";import{DateTime as vt}from"luxon";import{UISref as kt,UISrefActive as Et}from"@uirouter/react";import{Dropdown as yt,MenuItem as St,Modal as At,Button as wt}from"react-bootstrap";import{react2angular as Mt}from"react2angular";import{UIRouterContextComponent as Nt}from"@uirouter/react-hybrid";import{Form as xt}from"formik";import"brace/mode/json";import"brace/theme/textmate";import Dt from"react-ace";import Ft,{Creatable as Tt}from"react-select";import{Subject as Rt,from as It,Observable as $t}from"rxjs";import{tap as Pt,switchMap as Gt,takeUntil as Ot}from"rxjs/operators";const Bt={"kubernetes.serverGroup.stack":"(Optional) One of the core naming components of a cluster, used to create vertical stacks of dependent services for integration testing.","kubernetes.serverGroup.detail":"(Optional) A string of free-form alphanumeric characters and hyphens to describe any other variables.","kubernetes.serverGroup.containers":"\n (Required) Select at least one image to run in this server group (pod).\n If multiple images are selected, they will be colocated and replicated equally.","kubernetes.serverGroup.initContainers":"\n (Optional) Select at least one image to run in this server group as an init container (pod).","kubernetes.serverGroup.terminationGracePeriodSeconds":"(Required) Termination grace period in <b>seconds</b>. You can customize the termination grace period setting (terminationGracePeriodSeconds). Because server groups (pods) represent running processes on nodes in the cluster, it is important to allow those processes to gracefully terminate when they are no longer needed (vs. being violently killed and having no chance to clean up). Default is <b>30</b> seconds.","kubernetes.serverGroup.autoscaling.enabled":"If selected, a horizontal autoscaler will be attached to this replica set.","kubernetes.serverGroup.autoscaling.min":"The smallest number of pods to be deployed.","kubernetes.serverGroup.autoscaling.max":"The largest number of pods to be deployed.","kubernetes.serverGroup.autoscaling.desired":"The initial number of pods to be deployed.","kubernetes.serverGroup.autoscaling.cpuTarget":"The target CPU utilization to be achieved by the autoscaler.","kubernetes.serverGroup.useSourceCapacity.enabled":"Use same number of pods as current.","kubernetes.serverGroup.deployment.enabled":"Check this box if you want to spawn a deployment for this replica set.","kubernetes.serverGroup.deployment.strategy":"\n <p><b>RollingUpdate</b> Deploy new pods in groups while killing old ones off.</p>\n <p><b>Recreate</b> Recreate the entire replica set.</p>","kubernetes.serverGroup.deployment.minReadySeconds":"The minimum time the deployment object will wait after a pod becomes healthy.","kubernetes.serverGroup.deployment.revisionHistoryLimit":"(Optional) How many old replica sets to keep around. Leave empty if you don't want any to be deleted.","kubernetes.serverGroup.deployment.maxSurge":"(Optional) Either a number or a percentage (1 vs. 10%) representing the maximum number of new pods to deploy during a rollout.","kubernetes.serverGroup.deployment.maxUnavailable":"(Optional) Either a number or a percentage (1 vs. 10%) representing the maximum number of pods to destroy during a rollout.","kubernetes.serverGroup.tolerations.key":"Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.","kubernetes.serverGroup.tolerations.value":"Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.","kubernetes.serverGroup.tolerations.operator":"Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.","kubernetes.serverGroup.tolerations.effect":"Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.","kubernetes.serverGroup.tolerations.tolerationSeconds":"TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.","kubernetes.job.parallelism":"(Required) The number of concurrent pods to run.","kubernetes.job.completions":"(Required) The number of sucessful completions required for the job to be considered a success.","kubernetes.job.deadlineSeconds":"(Optional) The number of seconds until the job is considered a failure.","kubernetes.containers.image":"The image selected under Basic Settings whose container is to be configured.","kubernetes.containers.registry":"The registry the selected image will be pulled from.","kubernetes.containers.command":"The list of commands which to overwrite the docker ENTRYPOINT array.","kubernetes.containers.name":"(Required) The name of the container associated with the above image. Used for resource identification","kubernetes.containers.pullpolicy":"\n <p>Sets the policy used to determine when to pull (download) the selected container image.</p>\n <p><i><b>Warning</b> - This shouldn't be modified for most production pipelines as it encourages aliasing tags,\n preventing proper rollbacks and determining an image's source.</i></p>\n <p><b>IFNOTPRESENT</b>: (Default) Pulls the image only when it is not present on the host machine.</p>\n <p><b>ALWAYS</b>: Always pulls the image, regardless of if it is present or not.</p>\n <p><b>NEVER</b>: Never pulls the image, regardless of if it is present or not.</p>","kubernetes.containers.cpu":"\n (Optional) The relative CPU shares to allocate this container. If set, it is multiplied by 1024, then\n passed to Docker as the --cpu-shares flag. Otherwise the default of 1 (1024) is used","kubernetes.containers.lifecycle.postStart":"\n Called immediately after a container is created. If the handler fails, the container is terminated\n and restarted according to its restart policy.","kubernetes.containers.lifecycle.preStop":"\n Called immediately before a container is terminated. The container is terminated after the handler completes.\n The reason for termination is passed to the handler. Regardless of the outcome of the handler, the container is eventually terminated.","kubernetes.containers.execAction.command":"\n Command to execute inside the container. The working directory for the command is root within the container's filesystem.\n An exit status of 0 is treated as live/healthy; non-zero is unhealthy.","kubernetes.containers.httpGetAction.path":"Path to access on the HTTP server","kubernetes.containers.httpGetAction.port":"Number of the port to access on the container.","kubernetes.containers.httpGetAction.host":"Host name to connect to, defaults to the pod IP.","kubernetes.containers.httpGetAction.uriScheme":"Scheme to use for connecting to the host.","kubernetes.containers.httpGetAction.httpHeaders":"Custom headers to set in the request.","kubernetes.containers.memory":"\n (Optional) The relative memory in megabytes to allocate this container. If set, it is converted to an integer\n and passed to Docker as the --memory flag","kubernetes.containers.requests":"\n (Optional) This is used for scheduling. It assures that this container will always be scheduled on a machine ' +\n with at least this much of the resource available.","kubernetes.containers.ports.name":"(Optional) A name for this port. Can be found using DNS lookup if specified.","kubernetes.containers.ports.containerPort":"(Required) The port to expose on this container.","kubernetes.containers.ports.hostPort":"(Optional) The port to expose on <b>Host IP</b>. Most containers do not need this","kubernetes.containers.ports.hostIp":"(Optional) The IP to bind the external port to. Most containers do not need this.","kubernetes.containers.ports.protocol":"(Required) The protocol for this port.","kubernetes.containers.limits":"(Optional) This provides a hard limit on this resource for the given container.","kubernetes.containers.probes.type":"\n <p><b>HTTP</b> Hit the probe at the specified port and path.</p>\n <p><b>EXEC</b> Execute the specified commands on the container.</p>\n <p><b>TCP</b> Connect to the container at the specified port.</p>","kubernetes.containers.probes.initialDelay":"How long to wait after startup before running this probe.","kubernetes.containers.probes.timeout":"How long to wait on the result of this probe.","kubernetes.containers.probes.period":"How long between probe executions.","kubernetes.containers.probes.successThreshold":"How many executions need to succeed before the probe is declared healthy.","kubernetes.containers.probes.failureThreshold":"How many executions need to fail before the probe is declared unhealthy.","kubernetes.containers.volumemounts.name":"The <b>Volume Source</b> configured above to claim.","kubernetes.containers.volumemounts.mountPath":"The directory to mount the specified <b>Volume Source</b> to.","kubernetes.containers.volumemounts.subPath":"This will mount the sub path in the referenced volume rather than the root path.","kubernetes.namespace":"The namespace you have configured with the above selected account. This will often be referred to as <b>Region</b> in Spinnaker.","kubernetes.loadBalancer.detail":'(Optional) A string of free-form alphanumeric characters; by convention, we recommend using "frontend".',"kubernetes.loadBalancer.stack":"(Optional) One of the core naming components of a cluster, used to create vertical stacks of dependent services for integration testing.","kubernetes.service.ports.name":"(Optional) A name for this port. Can be found using DNS lookup if specified.","kubernetes.service.ports.port":"The port this service will expose to resources internal to the cluster.","kubernetes.service.ports.nodePort":"\n (Optional) A port to open on every node in the cluster. This allows you to receive external traffic without\n having to provision a cloud load balancer. <b>Type</b> in <b>Advanced Settings</b> cannot be set to <b>ClusterIP</b> for this to work.","kubernetes.service.ports.targetPort":"(Optional) The port to forward incoming traffic to for pods associated with this load balancer.","kubernetes.service.ports.protocol":"The protocol this port listens to.","kubernetes.service.type":"\n <b>ClusterIP</b> means this is an internal load balancer only. <b>LoadBalancer</b> provisions a cloud load balancer if possible\n at address <b>Load Balancer IP</b>. <b>NodePort</b> means this load balancer forwards traffic from ports with <b>Node Port</b> specified.","kubernetes.service.sessionAffinity":"\n <b>None</b> means incoming connections are not associated with the pods they are routed to. <b>ClientIP</b>\n associates connections with pods by incoming IP address.","kubernetes.service.clusterIp":"\n (Optional) If specified, and available, this internal IP address will be the internal endpoint for this load balancer.\n If not specified, one will be assigned.","kubernetes.service.loadBalancerIp":"\n If specified, and available, this external IP address will be the external endpoint for this load balancer\n when <b>Type</b> is set to <b>LoadBalancer</b>.","kubernetes.service.externalIps":"\n IP addresses for which nodes in the cluster also accept traffic. This is not managed by Kubernetes and the\n responsibility of the user to configure.","kubernetes.pod.dnsPolicy":"\n <p>Set DNS policy for containers within the pod.</p>\n <p>Defaults to <b>ClusterFirst</b>.</p>\n <p>To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to <b>ClusterFirstWithHostNet</b>.</p>","kubernetes.pod.volume":"\n <p>A storage volume to be mounted and shared by containers in this pod. The lifecycle depends on the volume type selected.</p>\n <p><b>CONFIGMAP</b>: Intended to act as a reference to multiple properties files. Similar to the /etc directory, and the files within, on a Linux computer.</p>\n <p><b>EMPTYDIR</b>: A transient volume tied to the lifecycle of this pod.</p>\n <p><b>HOSTPATH</b>: A directory on the host node. Most pods do not need this.</p>\n <p><b>PERSISTENTVOLUMECLAIM</b>: An already created persistent volume claim to be bound by this pod.</p>\n <p><b>SECRET</b>: An already created kubernetes secret to be mounted in this pod.</p>","kubernetes.pod.emptydir.medium":"\n The type of storage medium used by this volume type.\n <p><b>DEFAULT</b>: Depends on the storage mechanism backing this pod's Kubernetes installation.</p>\n <p><b>MEMORY</b>: A tmpfs (RAM-backed filesystem). Very fast, but usage counts against the memory resource limit, and contents are lost on reboot.</p>","kubernetes.pod.volume.persistentvolumeclaim.claim":"The name of the underlying persistent volume claim to request.","kubernetes.pod.volume.hostpath.path":"The path on the host node's filesystem to mount.","kubernetes.pod.volume.secret.secretName":"The name of the secret to mount.","kubernetes.pod.volume.awsElasticBlockStore.volumeId":"Unique ID of the persistent disk resource in AWS (Amazon EBS volume).","kubernetes.pod.volume.awsElasticBlockStore.fsType":'Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.',"kubernetes.pod.volume.awsElasticBlockStore.partition":'The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as "1". Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty).',"kubernetes.pod.volume.nfs.server":"NFS (Network File System) server to be mount","kubernetes.pod.volume.nfs.path":"The path in the NFS to mount","kubernetes.ingress.backend.port":"The port for the specified load balancer.","kubernetes.ingress.backend.service":"The load balancer (service) traffic not matching the below rules will be routed to.","kubernetes.ingress.rules.service":"The load balancer (service) traffic matching this rule will be routed to.","kubernetes.ingress.rules.host":"The fully qualified domain name of a network host. Any traffic routed to this host matches this rule. May not be an IP address, or contain port information.","kubernetes.ingress.rules.path":"POSIX regex (IEE Std 1003.1) matched against the path of an incoming request.","kubernetes.ingress.rules.port":"The port on the specifed load balancer to route traffic to.","kubernetes.ingress.tls.host":"The fully qualified domain name of a network host. Any traffic routed to this host can be secured with TLS. May not be an IP address, or contain port information.","kubernetes.ingress.tls.secret":"(Optional) Name of the Kubernetes secret that will be used to secure TLS connections to the {{firewall}}. Note that Spinnaker will not create any secrets, they are assumed to exist.","kubernetes.manifest.account":"\n <p>A Spinnaker account corresponds to a physical Kubernetes cluster. If you are unsure which account to use, talk to your Spinnaker admin.</p>\n ","kubernetes.manifest.cluster":"\n <p>A cluster is a grouping of resources (often across multiple versions of a resource) within an application.</p>\n ","kubernetes.manifest.stackdetail":"\n <p>\n <b>Stack:</b> <i>(Optional)</i> A naming component used to optionally group manifests within Spinnaker. Typically used to create vertical stacks of resources that can be aggregated/filtered later.\n </p>\n <p>\n <b>Detail:</b> <i>(Optional)</i> A naming component used to store free-form text about your manifest, and can be used to aggregate/filter resources later.\n </p>\n ","kubernetes.manifest.delete.gracePeriod":"\n <p><i>(Optional)</i>The number of seconds given to the resource to terminate gracefully. Overrides what's set on the manifest if applicable.</p>\n ","kubernetes.manifest.delete.cascading":"\n <p>When set, delete all resources managed by this resource as well (all pods owned by a replica set). When unset, this may orphan resources.</p>\n ","kubernetes.manifest.source":"\n <p>Where the manifest file content is read from.</p>\n <p>\n <b>text:</b> The manifest is supplied statically to the pipeline from the below text-box.\n </p>\n <p>\n <b>artifact:</b> The manifest is read from an artifact supplied/created upstream. The expected artifact must be referenced here, and will be bound at runtime.\n </p>\n ","kubernetes.manifest.rolloutStrategyOptions":"\n <p>Allow Spinnaker to associate each ReplicaSet deployed in this stage with one or more Services and manage traffic based on your selected rollout strategy options.</p>\n ","kubernetes.manifest.rolloutStrategy":"\n <p>The rollout strategy tells Spinnaker what to do with the previous version(s) of the ReplicaSet in the cluster.</p>\n ","kubernetes.manifest.expectedArtifact":"The artifact that is to be applied to the Kubernetes account for this stage. The artifact should represent a valid Kubernetes manifest.","kubernetes.manifest.requiredArtifactsToBind":'These artifacts must be present in the context for this stage to successfully complete. Artifacts specified will be <a href="https://www.spinnaker.io/reference/artifacts/in-kubernetes-v2/#binding-artifacts-in-manifests" target="_blank">bound to the deployed manifest.</a>',"kubernetes.manifest.skipExpressionEvaluation":'<p>Skip SpEL expression evaluation of the manifest artifact in this stage. Can be paired with the "Evaluate SpEL expressions in overrides at bake time" option in the Bake Manifest stage when baking a third-party manifest artifact with expressions not meant for Spinnaker to evaluate as SpEL.</p>',"kubernetes.manifest.skipSpecTemplateLabels":'\n <p>Skip applying the <a href="https://spinnaker.io/docs/reference/providers/kubernetes-v2/#reserved-labels" target="_blank">Reserved labels</a> to the manifest\'s <b><i>.spec.template.metadata.labels.</i></b></p>',"kubernetes.manifest.deployLabelSelectors":'\n <p>Via Label Selectors, Spinnaker can deploy a subset of manifests satisfying the Label Selectors. See <a href="https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors" target="_blank">Kubernetes Label Selectors</a> for more details. Multiple selectors combine with AND (All must be satisfied).</p>',"kubernetes.manifest.deployLabelSelectors.allowNothingSelected":"\n <p>When unchecked an error is thrown if none of the provided manifests satisfy the Label Selectors</p>","kubernetes.manifest.undoRollout.revisionsBack":'\n <p>How many revisions to rollback from the current active revision. This is not a hard-coded revision to rollout.</p>\n <p>For example: If you specify "1", and this stage executes, the prior revision will be active upon success.</p>\n ',"kubernetes.manifest.patch.record":"Record the applied patch in the <i>kubernetes.io/change-cause</i> annotation. If the annotation already exists, the contents are replaced.","kubernetes.manifest.patch.mergeStrategy":'\n <p>The merge strategy to use when patching Kubernetes objects:</p>\n <p><b>strategic</b>: <i>(Default)</i> <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/sig-api-machinery/strategic-merge-patch.md" target="_blank">Kubernetes Strategic merge patch.</a></p>\n <p><b>json</b>: <a href="https://tools.ietf.org/html/rfc6902" target="_blank">JSON Patch, RFC 6902</a></p>\n <p><b>merge</b>: <a href="https://tools.ietf.org/html/rfc7386" target="_blank">JSON Merge Patch, RFC 7386</a></p>\n ',"kubernetes.runJob.captureSource":"Source from which to capture Job output. Captured output will be available in the pipeline context for use in downstream stages.","kubernetes.runJob.captureSource.containerName":"Use logs from this container to capture output data."};Object.keys(Bt).forEach(e=>n.register(e,Bt[e]));var Lt=(e=>(e.TEXT="text",e.ARTIFACT="artifact",e))(Lt||{});const zt="kubectl.kubernetes.io/last-applied-configuration";class Kt{static manifestCommandIsValid(e){return!!e.moniker&&!!e.moniker.app}static copyAndCleanCommand(e){return qe(e)}static buildNewManifestCommand(e,t,n,s){null!=t&&je(t,["metadata","annotations",zt])&&(t=dt(t.metadata.annotations[zt]));const r={accounts:a.getAllAccountDetailsForProvider("kubernetes"),artifactAccounts:a.getArtifactAccounts()};return ut.all(r).then(a=>{const{accounts:r,artifactAccounts:i}=a,o=r.some(e=>e.name===s)?r.find(e=>e.name===s).name:r.length?r[0].name:null;let l=null;const[c]=i;c&&(l=c.name);const d=n||{app:e.name};return{command:{cloudProvider:"kubernetes",manifest:null,manifests:Array.isArray(t)?t:null!=t?[t]:null,relationships:{loadBalancers:[],securityGroups:[]},moniker:d,account:o,versioned:null,manifestArtifactAccount:l,source:Lt.TEXT},metadata:{backingData:a}}})}}function Ut({accounts:e,onAccountSelect:t,selectedAccount:n}){return pt.createElement("div",{className:"form-horizontal"},pt.createElement("div",{className:"form-group"},pt.createElement("div",{className:"col-md-3 sm-label-right"},"Account ",pt.createElement(s,{id:"kubernetes.manifest.account"})),pt.createElement("div",{className:"col-md-7"},pt.createElement(r,{value:n,onChange:e=>t(e.target.value),readOnly:!1,accounts:e,provider:"kubernetes"}))))}class Vt extends pt.Component{constructor(){super(...arguments),this.accountUpdated=e=>{const{formik:t}=this.props;t.values.command.account=e,t.setFieldValue("account",e)}}render(){const{formik:e}=this.props;return pt.createElement(Ut,{accounts:e.values.metadata.backingData.accounts,onAccountSelect:this.accountUpdated,selectedAccount:e.values.command.account})}}class qt extends pt.Component{constructor(e){super(e),this.handleChange=(e,t)=>{this.props.formik.setFieldValue("command.manifests",[].concat(t).filter(e=>!!e)),this.setState({rawManifest:e})};const{values:t}=this.props.formik,[n=null,...a]=t.command.manifests||[],s=a&&a.length?t.command.manifests:n;try{this.state={rawManifest:s?mt(s):null}}catch(e){this.state={rawManifest:null}}}render(){return pt.createElement(i,{value:this.state.rawManifest,onChange:this.handleChange})}}const jt=class e extends pt.Component{constructor(e){super(e),this.submit=e=>{const t=Kt.copyAndCleanCommand(e.command);this.state.taskMonitor.submit(()=>u.deployManifest(t,this.props.application))},e.command||Kt.buildNewManifestCommand(e.application).then(e=>{Object.assign(this.state.command,e),this.setState({loaded:!0})}),this.state={loaded:!!e.command,command:e.command||{},taskMonitor:new o({application:e.application,title:(this.props.isNew?"Deploying":"Updating")+" your manifest",modalInstance:o.modalInstanceEmulation(()=>this.props.dismissModal())})}}static show(t){return l.show(e,t,{dialogClassName:"wizard-modal modal-lg"})}render(){const{application:e,dismissModal:t,isNew:n}=this.props,{loaded:a,taskMonitor:s,command:r}=this.state;return pt.createElement(c,{heading:(n?"Deploy":"Update")+" Manifest",initialValues:r,loading:!a,taskMonitor:s,dismissModal:t,closeModal:this.submit,submitButtonLabel:n?"Create":"Edit",render:({formik:t,nextIdx:n,wizard:a})=>pt.createElement(pt.Fragment,null,pt.createElement(d,{label:"Basic Settings",wizard:a,order:n(),render:({innerRef:e})=>pt.createElement(Vt,{ref:e,formik:t})}),pt.createElement(d,{label:"Manifest",wizard:a,order:n(),render:({innerRef:n})=>pt.createElement(qt,{ref:n,formik:t,app:e})}))})}};jt.defaultProps={closeModal:m,dismissModal:m};let _t=jt;class Ht{constructor(e,t,n,a,s,r){this.$uibModal=t,this.$q=n,this.$scope=a,this.app=s,this.$state=r,this.state={loading:!0},this.app.ready().then(()=>{this.extractInstance(e),this.app.onRefresh(this.$scope,()=>this.extractInstance(e)),this.$scope.isDisabled=!p.kubernetesAdHocInfraWritesEnabled}).catch(()=>this.autoClose())}deleteInstance(){this.$uibModal.open({templateUrl:"kubernetes/src/manifest/delete/delete.html",controller:"kubernetesV2ManifestDeleteCtrl",controllerAs:"ctrl",resolve:{coordinates:{name:this.instance.name,namespace:this.instance.namespace,account:this.instance.account},application:this.app,manifestController:()=>null}})}editInstance(){Kt.buildNewManifestCommand(this.app,this.manifest.manifest,this.instance.moniker,this.instance.account).then(e=>{_t.show({title:"Edit Manifest",application:this.app,command:e})})}extractInstance(e){const t=this.retrieveInstance(e);if(!t)return this.autoClose();this.$q.all([this.fetchInstance(t).then(e=>{this.instance=e,this.consoleOutputInstance={account:e.account,region:e.zone,id:e.humanReadableName,provider:e.provider}}),h.getManifest(t.account,t.namespace,t.name).then(e=>{this.manifest=e})]).then(()=>{this.state.loading=!1})}fetchInstance(e){return C.getInstanceDetails(e.account,e.namespace,e.name).then(t=>(t.id=e.id,t.name=e.name,t.provider="kubernetes",t))}retrieveInstance(e){const t=_e([this.app.getDataSource("serverGroups").data,this.app.getDataSource("loadBalancers").data,this.app.getDataSource("loadBalancers").data.map(e=>e.serverGroups)]).find(t=>t.instances.some(t=>t.id===e.instanceId));if(!t)return null;const n={region:t.region,account:t.account};"serverGroup"===t.category&&(n.serverGroup=t.name);const a=t.instances.find(t=>t.id===e.instanceId);return a?(f.addExtraDataToLatest("instances",n),{id:a.id,name:a.name,namespace:t.region,account:t.account}):null}autoClose(){this.$scope.$$destroyed||(this.$state.params.allowModalToStayOpen=!0,this.$state.go("^",null,{location:"replace"}))}}Ht.$inject=["instance","$uibModal","$q","$scope","app","$state"];const Wt="spinnaker.kubernetes.instanceDetails.controller";e(Wt,[]).controller("kubernetesV2InstanceDetailsCtrl",Ht),window.angular.module("ng").run(["$templateCache",function(e){e.put("kubernetes/src/manifest/delete/delete.html",'<div modal-page class="confirmation-modal">\n <task-monitor monitor="ctrl.taskMonitor"></task-monitor>\n <form role="form" name="deleteForm">\n <modal-close dismiss="$dismiss()"></modal-close>\n <div class="modal-header">\n <h4 class="modal-title">Delete {{ctrl.command.manifestName | robotToHuman}} in {{ctrl.command.location}}</h4>\n </div>\n <div ng-if="ctrl.manifestController">\n <div class="alert alert-warning">\n Manifest is controlled by\n <a\n ui-sref="^.serverGroupManager({\n accountId: ctrl.command.account,\n region: ctrl.command.location,\n serverGroupManager: ctrl.manifestController,\n provider: \'kubernetes\'})"\n >\n {{ctrl.manifestController | robotToHuman }}\n </a>\n and may be recreated after deletion.\n </div>\n </div>\n <div class="modal-body confirmation-modal">\n <kubernetes-delete-manifest-options-form options="ctrl.command.options"></kubernetes-delete-manifest-options-form>\n <task-reason command="ctrl.command"></task-reason>\n </div>\n <div class="modal-footer">\n <user-verification account="ctrl.command.account" verification="ctrl.verification"></user-verification>\n <button type="submit" ng-click="ctrl.delete()" style="display: none"></button>\n \x3c!-- Allows form submission via enter keypress--\x3e\n <button class="btn btn-default" ng-click="ctrl.cancel()">Cancel</button>\n <button\n type="submit"\n class="btn btn-primary"\n ng-click="ctrl.delete()"\n ng-disabled="!ctrl.isValid() || !deleteForm.$valid"\n >\n Submit\n </button>\n </div>\n </form>\n</div>\n')}]);class Jt{normalizeLoadBalancer(e){return e.provider=e.type,e.instances=[],e.instanceCounts=this.buildInstanceCounts(e.serverGroups),(e.serverGroups||[]).forEach(t=>{t.cloudProvider=e.provider,(t.instances||[]).forEach(t=>{t.cloudProvider=e.provider})}),Promise.resolve(e)}buildInstanceCounts(e){const t=He(e).map(e=>e.instances).flatten().reduce((e,t)=>(e[We(t.health.state)]++,e),{up:0,down:0,outOfService:0,succeeded:0,failed:0,unknown:0,starting:0}).value();return t.outOfService+=He(e).map(e=>e.detachedInstances).flatten().value().length,t}}class Xt{constructor(e,t){this.$sce=e,this.$interpolate=t}$onInit(){const e=Je(this,["manifest","metadata","annotations"]);null!=e&&this.populateCustomSections(e)}populateCustomSections(e){const t=Object.keys(e).reduce((t,n)=>{const a=this.annotationToEntry(e[n],n);return null!=a&&a.title&&(t[a.title]=t[a.title]||[],t[a.title].push(a)),t},{});this.customSections=Object.keys(t).reduce((e,n)=>{const a=Xe(t[n],e=>e.isHtml);return e[n]=a[1].concat(a[0]),e},{})}annotationToEntry(e,t){const n=this.parseAnnotationKey(t);return null==n?null:(this.resource&&e.includes("{{")&&(e=this.$interpolate(e)({...this.resource,manifest:this.manifest})),{title:n.title.replace(/-/g," ").trim(),key:n.key.replace(/-/g," ").trim(),content:n.isHtml?this.sanitizeContent(e):e,isHtml:n.isHtml})}parseAnnotationKey(e){const t=/([^.]+)\.details\.(html\.)?spinnaker\.io(?:\/(.*))?/.exec(e);return null==t||4!==t.length?null:{title:t[1]||"",key:t[3]||"",isHtml:!!t[2]}}sanitizeContent(e){const t=bt.sanitize(e,{ADD_ATTR:["target"]});return this.$sce.trustAsHtml(t)}}Xt.$inject=["$sce","$interpolate"];const Zt={bindings:{manifest:"<",resource:"<"},controller:["$sce","$interpolate",Xt],controllerAs:"ctrl",template:'\n <collapsible-section expanded="true" ng-if="ctrl.manifest" ng-repeat="(section, entries) in ctrl.customSections" heading="{{ section }}">\n <div ng-repeat="entry in entries">\n <div ng-if="entry.isHtml" ng-bind-html="entry.content"></div>\n <div ng-if="!entry.isHtml">\n <span ng-if="entry.key" style="font-weight:bold">{{ entry.key }}</span>\n <span>{{ entry.content }}</span>\n </div>\n </div>\n </collapsible-section>\n '},Qt="spinnaker.kubernetes.v2.manifest.annotation.custom.sections";e(Qt,[]).component("kubernetesAnnotationCustomSections",Zt);class Yt extends g{constructor(){super(...arguments),this.$injectorProxy={},this.KubernetesAnnotationCustomSections=gt("kubernetesAnnotationCustomSections",Zt,this.$injectorProxy)}initialize(e){const t=e,n=this.$injectorProxy;Object.keys(e).filter(e=>"function"==typeof t[e]).forEach(e=>n[e]=t[e].bind(t))}}const en=new Yt;function tn({loadBalancer:e}){const{manifest:t}=e,{KubernetesAnnotationCustomSections:n}=en;return pt.createElement(n,{manifest:t.manifest,resource:e})}class nn extends pt.Component{pillStyle(e){return"Warning"===e.type?"alert":"Normal"===e.type?"success":""}render(){if(!this.props.manifest)return null;if(this.props.manifest&&(!this.props.manifest.events||0===this.props.manifest.events.length))return pt.createElement("div",null,"No recent events found - Kubernetes does not store events for long.");const{events:e}=this.props.manifest,t=Ze(Je(this.props.manifest,["manifest","metadata","annotations","artifact.spinnaker.io/location"],""));return e.map((n,a)=>{const s=Je(n,"firstTimestamp",""),r=Je(n,"lastTimestamp","");let i=0,o=0;return s&&(i=vt.fromISO(s).toMillis()),r&&(o=vt.fromISO(r).toMillis()),pt.createElement("div",{key:Je(n,["metadata","uid"],String(a)),className:"info"},pt.createElement("div",{className:"horizontal"},n.count&&pt.createElement("div",{className:`pill ${this.pillStyle(n)}`},n.count," × ",pt.createElement("b",null,n.reason))),(n.firstTimestamp||n.lastTimestamp)&&pt.createElement("div",null,n.firstTimestamp===n.lastTimestamp&&pt.createElement("div",null,pt.createElement("i",null,b(i))),n.firstTimestamp!==n.lastTimestamp&&pt.createElement("div",null,pt.createElement("div",null,"First Occurrence: ",pt.createElement("i",null,b(i))),pt.createElement("div",null,"Last Occurrence: ",pt.createElement("i",null,b(o))))),pt.createElement("div",null,n.message),pt.createElement("div",null,pt.createElement(v,{account:this.props.manifest.account,location:t,podNamesProviders:[new k(this.props.manifest,n)],linkName:"Console Output (Raw)"})),a!==e.length-1&&pt.createElement("br",null))})}}function an({loadBalancer:e}){const{manifest:t}=e;return pt.createElement(E,{heading:"Events",defaultExpanded:!0},pt.createElement(nn,{manifest:t}))}function sn({loadBalancer:e}){var t,n;const{manifest:a}=e,s=null!=(n=null==(t=null==a?void 0:a.manifest)?void 0:t.spec)?n:{};return pt.createElement(E,{heading:"Information",defaultExpanded:!0},pt.createElement("dl",{className:"dl-horizontal dl-narrow"},pt.createElement("dt",null,"Created"),pt.createElement("dd",null,y(e.createdTime)),pt.createElement("dt",null,"Account"),pt.createElement("dd",null,pt.createElement(S,{account:e.account})),pt.createElement("dt",null,"Namespace"),pt.createElement("dd",null,e.namespace),pt.createElement("dt",null,"Kind"),pt.createElement("dd",null,e.kind),pt.createElement("dt",null,"Service Type"),pt.createElement("dd",null,s.type||"-"),pt.createElement("dt",null,"Sess. Affinity"),pt.createElement("dd",null,s.sessionAffinity||"-")))}function rn(e,t){void 0===t&&(t={});var n=t.insertAt;if(e&&"undefined"!=typeof document){var a=document.head||document.getElementsByTagName("head")[0],s=document.createElement("style");s.type="text/css","top"===n&&a.firstChild?a.insertBefore(s,a.firstChild):a.appendChild(s),s.styleSheet?s.styleSheet.cssText=e:s.appendChild(document.createTextNode(e))}}rn(".manifest-label {\n margin: 2px;\n}\n");class on extends pt.Component{render(){const e=Je(this.props,["manifest","metadata","labels"],{});return pt.createElement("div",{className:"horizontal wrap"},Qe(e).map(t=>pt.createElement("div",{key:t,className:"manifest-label sp-badge info"},t,": ",e[t])))}}function ln({loadBalancer:e}){const{manifest:t}=e;return pt.createElement(E,{heading:"Labels",defaultExpanded:!0},pt.createElement(on,{manifest:t.manifest}))}function cn({loadBalancer:e}){const{manifest:t}=e;return pt.createElement(E,{heading:"Status",defaultExpanded:!0},pt.createElement("dl",{className:"dl-horizontal dl-narrow"},Ye(e.serverGroups)&&pt.createElement("div",null,"No workloads associated with this ",A(e.kind),"."),!Ye(e.serverGroups)&&pt.createElement(pt.Fragment,null,pt.createElement("dt",null,"Workloads"),pt.createElement("dd",null,pt.createElement("ul",null,et(e.serverGroups,["isDisabled","name"],["asc","desc"]).map(e=>pt.createElement("li",{key:e.name},pt.createElement(kt,{to:"^.serverGroup",params:{region:e.region,accountId:e.account,serverGroup:e.name,provider:"kubernetes"}},pt.createElement("a",null,A(e.name))))))),pt.createElement("div",null,pt.createElement("dt",null,"Pod status"),pt.createElement("dd",null,pt.createElement(w,{className:"pull-left",container:e.instanceCounts})))),t.manifest.spec.clusterIP&&pt.createElement("div",null,pt.createElement("dt",null,"Cluster IP"),pt.createElement("dd",null,pt.createElement("a",{target:"_blank",href:`//${t.manifest.spec.clusterIP}`},t.manifest.spec.clusterIP),pt.createElement(M,{className:"sp-margin-s-left copy-to-clipboard copy-to-clipboard-sm",text:t.manifest.spec.clusterIP,toolTip:"Copy Cluster IP to clipboard"}))),t.manifest.spec.loadBalancerIP&&pt.createElement("div",null,pt.createElement("dt",null,"Load Balancer IP"),pt.createElement("dd",null,pt.createElement("a",{target:"_blank",href:`//${t.manifest.spec.loadBalancerIP}`},t.manifest.spec.loadBalancerIP),pt.createElement(M,{className:"sp-margin-s-left copy-to-clipboard copy-to-clipboard-sm",text:t.manifest.spec.loadBalancerIP,toolTip:"Copy Load Balancer IP to clipboard"}))),!Ye(t.manifest.spec.rules)&&pt.createElement("div",null,pt.createElement("dt",null,"Host Rules"),t.manifest.spec.rules.filter(e=>{var t;return Boolean(null==(t=e.host)?void 0:t.trim())}).map(e=>pt.createElement("dd",null,pt.createElement("a",{target:"_blank",href:`//${e.host}`}," ",e.host," "),pt.createElement(M,{className:"sp-margin-s-left copy-to-clipboard copy-to-clipboard-sm",text:e.host,toolTip:"Copy ingress rule host to clipboard"})))),!Ye(t.manifest.status.loadBalancer.ingress)&&pt.createElement("div",null,pt.createElement("dt",null,"Ingress"),t.manifest.status.loadBalancer.ingress.map(e=>pt.createElement("dd",null,e.hostname&&pt.createElement(pt.Fragment,null,pt.createElement("a",{target:"_blank",href:`//${e.hostname}`}," ",e.hostname," "),pt.createElement(M,{className:"sp-margin-s-left copy-to-clipboard copy-to-clipboard-sm",text:e.hostname,toolTip:"Copy Ingress hostname to clipboard"})),e.ip&&pt.createElement(pt.Fragment,null,pt.createElement("a",{target:"_blank",href:`//${e.ip}`}," ",e.ip," "),pt.createElement(M,{className:"sp-margin-s-left copy-to-clipboard copy-to-clipboard-sm",text:e.ip,toolTip:"Copy Ingress IP to clipboard"})))))))}const dn=class e{static subscribe(t,n,a){return e.updateManifest(n,a),t.onRefresh(null,()=>e.updateManifest(n,a))}static updateManifest(e,t){h.getManifest(e.account,e.location,e.name).then(e=>t(e))}static manifestIdentifier(e){const t=e.kind.toLowerCase(),n=(e.metadata.namespace||"_").toLowerCase(),a=e.metadata.name.toLowerCase();return`${n} ${t} ${(e.apiVersion||"_").toLowerCase()} ${a}`}static stageManifestToManifestParams(t,n){return{account:n,name:e.scopedKind(t)+" "+t.metadata.name,location:null==t.metadata.namespace?"_":t.metadata.namespace}}static apiGroup(e){const t=(e.apiVersion||"_").split("/");return t.length<2?"":t[0]}static isCRDGroup(t){return!e.BUILT_IN_GROUPS.includes(e.apiGroup(t))}static scopedKind(t){return e.isCRDGroup(t)?t.kind+"."+e.apiGroup(t):t.kind}};dn.BUILT_IN_GROUPS=["","core","batch","apps","extensions","storage.k8s.io","apiextensions.k8s.io","apiregistration.k8s.io","policy","scheduling.k8s.io","settings.k8s.io","authorization.k8s.io","authentication.k8s.io","rbac.authorization.k8s.io","certifcates.k8s.io","networking.k8s.io"];let mn=dn;function un({artifact:e}){return pt.createElement("span",null,pt.createElement("b",null,e.type," "),pt.createElement("i",null,e.reference))}const pn={bindings:{options:"="},controller:class{},controllerAs:"ctrl",template:'\n <div class="form-horizontal">\n <div class="form-group form-inline">\n <div class="col-md-3 sm-label-right">\n Cascading\n <help-field key="kubernetes.manifest.delete.cascading"></help-field>\n </div>\n <div class="col-md-3">\n <div class="input-group">\n <input type="checkbox"\n ng-model="ctrl.options.cascading"/>\n </div>\n </div>\n </div>\n <div class="form-group form-inline">\n <div class="col-md-3 sm-label-right">\n Grace Period\n <help-field key="kubernetes.manifest.delete.gracePeriod"></help-field>\n </div>\n <div class="col-md-4">\n <div class="input-group">\n <input type="number"\n class="form-control input-sm highlight-pristine"\n ng-model="ctrl.options.gracePeriodSeconds"\n min="0"/>\n <span class="input-group-addon">second<span ng-if="ctrl.options.gracePeriodSeconds !== 1">s</span></span>\n </div>\n </div>\n </div>\n </div>\n '},hn="spinnaker.kubernetes.v2.kubernetes.manifest.delete.options.component";e(hn,[]).component("kubernetesDeleteManifestOptionsForm",pn);class Cn{constructor(e,t,n,a){this.$uibModalInstance=t,this.application=n,this.manifestController=a,this.verification={verified:!1},this.taskMonitor=new o({title:`Deleting ${e.name} in ${e.namespace}`,application:n,modalInstance:t}),this.command={manifestName:e.name,location:e.namespace,account:e.account,reason:null,options:{cascading:!0}}}isValid(){return this.verification.verified}cancel(){this.$uibModalInstance.dismiss()}delete(){this.taskMonitor.submit(()=>{const e=t(this.command);return e.cloudProvider="kubernetes",e.options.orphanDependants=!e.options.cascading,delete e.options.cascading,u.deleteManifest(e,this.application)})}}Cn.$inject=["coordinates","$uibModalInstance","application","manifestController"];const fn="spinnaker.kubernetes.v2.manifest.delete.controller";e(fn,[hn]).controller("kubernetesV2ManifestDeleteCtrl",Cn);class gn{constructor(e,t,n){this.$uibModalInstance=t,this.application=n,this.verification={verified:!1},this.taskMonitor=new o({title:`Pause rollout of ${e.name} in ${e.namespace}`,application:n,modalInstance:t}),this.command={manifestName:e.name,location:e.namespace,account:e.account,reason:null}}isValid(){return this.verification.verified}cancel(){this.$uibModalInstance.dismiss()}pauseRollout(){this.taskMonitor.submit(()=>{const e=t(this.command);return e.cloudProvider="kubernetes",u.pauseRolloutManifest(e,this.application)})}}gn.$inject=["coordinates","$uibModalInstance","application"];const bn="spinnaker.kubernetes.v2.manifest.pauseRollout.controller";e(bn,[]).controller("kubernetesV2ManifestPauseRolloutCtrl",gn);class vn{constructor(e,t,n,a){this.revisions=t,this.$uibModalInstance=n,this.application=a,this.verification={verified:!1},this.taskMonitor=new o({title:`Undo rollout of ${e.name} in ${e.namespace}`,application:a,modalInstance:n}),this.command={manifestName:e.name,location:e.namespace,account:e.account,reason:null,revision:null}}isValid(){return this.verification.verified}cancel(){this.$uibModalInstance.dismiss()}undoRollout(){this.taskMonitor.submit(()=>{const e=t(this.command);return e.cloudProvider="kubernetes",u.undoRolloutManifest(e,this.application)})}}vn.$inject=["coordinates","revisions","$uibModalInstance","application"];const kn="spinnaker.kubernetes.v2.manifest.undoRollout.controller";function En({options:e,onChange:t}){const[n,a]=ht({options:e});return pt.createElement("div",{className:"form-horizontal"},pt.createElement(N,{label:"Replicas",fieldColumns:4,groupClassName:"form-group form-inline"},pt.createElement("div",{className:"input-group"},pt.createElement(x,{inputClassName:"input-sm highlight-pristine",onChange:e=>{var s;s=e.target.valueAsNumber,n.options.replicas=s,t&&t(n.options),a({options:n.options})},value:e.replicas,min:0}))))}e(kn,[]).controller("kubernetesV2ManifestUndoRolloutCtrl",vn);const yn="spinnaker.kubernetes.v2.kubernetes.manifest.scale.settingsForm.component";e(yn,[]).component("kubernetesScaleManifestSettingsForm",Mt(D(En,"kubernetesScaleManifestSettingsForm"),["options","onChange"]));class Sn{constructor(e,t,n,a,s){this.$scope=e,this.$uibModalInstance=a,this.application=s,this.verification={verified:!1},this.taskMonitor=new o({title:`Scaling ${t.name} in ${t.namespace}`,application:s,modalInstance:a}),this.$scope.command={manifestName:t.name,location:t.namespace,account:t.account,reason:null,replicas:n},this.$scope.onChange=()=>{this.$scope.$applyAsync()}}isValid(){return this.verification.verified}cancel(){this.$uibModalInstance.dismiss()}scale(){this.taskMonitor.submit(()=>{const e=t(this.$scope.command);return e.cloudProvider="kubernetes",u.scaleManifest(e,this.application)})}}Sn.$inject=["$scope","coordinates","currentReplicas","$uibModalInstance","application"];const An="spinnaker.kubernetes.v2.manifest.scale.controller";e(An,[yn]).controller("kubernetesV2ManifestScaleCtrl",Sn);class wn extends pt.Component{render(){const{condition:e}=this.props,t=vt.fromISO(e.lastTransitionTime);return[pt.createElement("span",{key:"properties"},"True"===e.status&&pt.createElement("span",{style:{marginRight:"3px"},className:"glyphicon glyphicon-Normal"}),"False"===e.status&&pt.createElement("span",{style:{marginRight:"3px"},className:"glyphicon glyphicon-Warn"}),"Unknown"===e.status&&pt.createElement("span",{style:{marginRight:"3px"}},"?"),pt.createElement("b",{style:{marginRight:"3px"}},e.type),pt.createElement("i",null,t.isValid&&b(t.toMillis()))),pt.createElement("div",{key:"message"},e.message)]}}const Mn="spinnaker.kubernetes.v2.manifest.condition.component";function Nn({status:e}){return e?pt.createElement("div",null,!e.available.state&&pt.createElement(T,{value:e.available.message},pt.createElement("div",{className:"band band-warning"},"Not Fully Available")),!e.stable.state&&pt.createElement(T,{value:e.stable.message},pt.createElement("div",{className:"band band-active"},"Transitioning")),e.paused.state&&pt.createElement(T,{value:e.paused.message},pt.createElement("div",{className:"band band-info"},"Rollout Paused"))):pt.createElement("div",{className:"header"},pt.createElement("div",{className:"horizontal middle center spinner-section"},pt.createElement(F,{size:"small"})))}e(Mn,[]).component("kubernetesManifestCondition",Mt(D(wn,"kubernetesManifestCondition"),["condition"]));const xn="spinnaker.kubernetes.v2.kubernetes.manifest.status.component";function Dn({app:e,loadBalancer:t}){const n=p.feature&&p.feature.entityTags,a=p.kubernetesAdHocInfraWritesEnabled,{manifest:s}=t;return pt.createElement(yt,{className:"dropdown",id:"load-balancer-actions-dropdown"},a&&pt.createElement(yt.Toggle,{className:"btn btn-sm btn-primary dropdown-toggle"},A(t.kind)," Actions"),pt.createElement(yt.Menu,null,pt.createElement(St,{onClick:()=>{I.modalService.open({templateUrl:"kubernetes/src/manifest/delete/delete.html",controller:"kubernetesV2ManifestDeleteCtrl as ctrl",resolve:{coordinates:{name:t.name,namespace:t.namespace,account:t.account},application:e,manifestController:()=>null}})}},"Delete"),pt.createElement(St,{onClick:()=>{Kt.buildNewManifestCommand(e,s.manifest,t.moniker,t.account).then(t=>{_t.show({title:"Edit Manifest",application:e,command:t})})}},"Edit"),n&&pt.createElement(R,{component:t,application:e,entityType:"loadBalancer",onUpdate:()=>e.loadBalancers.refresh()})))}e(xn,[]).component("kubernetesManifestStatus",Mt(D(Nn,"kubernetesManifestStatus"),["status"])),window.angular.module("ng").run(["$templateCache",function(e){e.put("kubernetes/src/manifest/delete/delete.html",'<div modal-page class="confirmation-modal">\n <task-monitor monitor="ctrl.taskMonitor"></task-monitor>\n <form role="form" name="deleteForm">\n <modal-close dismiss="$dismiss()"></modal-close>\n <div class="modal-header">\n <h4 class="modal-title">Delete {{ctrl.command.manifestName | robotToHuman}} in {{ctrl.command.location}}</h4>\n </div>\n <div ng-if="ctrl.manifestController">\n <div class="alert alert-warning">\n Manifest is controlled by\n <a\n ui-sref="^.serverGroupManager({\n accountId: ctrl.command.account,\n region: ctrl.command.location,\n serverGroupManager: ctrl.manifestController,\n provider: \'kubernetes\'})"\n >\n {{ctrl.manifestController | robotToHuman }}\n </a>\n and may be recreated after deletion.\n </div>\n </div>\n <div class="modal-body confirmation-modal">\n <kubernetes-delete-manifest-options-form options="ctrl.command.options"></kubernetes-delete-manifest-options-form>\n <task-reason command="ctrl.command"></task-reason>\n </div>\n <div class="modal-footer">\n <user-verification account="ctrl.command.account" verification="ctrl.verification"></user-verification>\n <button type="submit" ng-click="ctrl.delete()" style="display: none"></button>\n \x3c!-- Allows form submission via enter keypress--\x3e\n <button class="btn btn-default" ng-click="ctrl.cancel()">Cancel</button>\n <button\n type="submit"\n class="btn btn-primary"\n ng-click="ctrl.delete()"\n ng-disabled="!ctrl.isValid() || !deleteForm.$valid"\n >\n Submit\n </button>\n </div>\n </form>\n</div>\n')}]);const Fn=e=>{const{loadBalancerParams:t,app:n,autoClose:a}=e,{name:s,accountId:r,region:i}=t,o=n.getDataSource("loadBalancers"),{data:l,loaded:c,refresh:d,error:m}=$(o),{result:u,status:p,refresh:C,error:f}=P(()=>h.getManifest(r,i,s),{},[]),g=!c||"RESOLVED"!==p,b=m||f||void 0;return{data:Ct(()=>{if(g||b)return;const e=l.find(e=>e.name===s&&e.account===r&&e.region===i);if(e)return{...e,manifest:u};a()},[c,l,p,u]),loading:g,error:b,refetch:async()=>{d(),C()}}};rn(".checkbox input[type='checkbox'].delete-manifest-options-input-cascading {\n margin-left: 0;\n}\n.delete-manifest-options-input-grace-period {\n display: inline-block;\n margin-right: 5px;\n max-width: 75px;\n}\n");class Tn extends pt.Component{constructor(e){super(e),this.setStateAndUpdateStage=e=>{this.props.onOptionsChange(e),this.setState({options:e})},this.onCascadingChange=e=>{this.setStateAndUpdateStage({...this.state.options,cascading:e.target.checked})},this.onGracePeriodChange=e=>{const t=parseInt(e.target.value,10),n=isNaN(t)?null:t;this.setStateAndUpdateStage({...this.state.options,gracePeriodSeconds:n})},this.state={options:e.options}}render(){const{options:{cascading:e,gracePeriodSeconds:t}}=this.state;return pt.createElement(pt.Fragment,null,pt.createElement(N,{helpKey:"kubernetes.manifest.delete.cascading",label:"Cascading"},pt.createElement("div",{className:"checkbox"},pt.createElement("input",{checked:e,className:"delete-manifest-options-input-cascading",onChange:this.onCascadingChange,type:"checkbox"}))),pt.createElement(N,{helpKey:"kubernetes.manifest.delete.gracePeriod",label:"Grace Period"},pt.createElement("input",{className:"form-control input-sm delete-manifest-options-input-grace-period",min:"0",onChange:this.onGracePeriodChange,type:"number",value:Number.isInteger(t)?t:""}),pt.createElement("span",{className:"form-control-static"},1===t?"second":"seconds")))}}function Rn({application:e,resource:t,manifestController:n,isOpen:a,dismissModal:s}){const[r,i]=ht(!1),o=G({application:e,title:`Deleting ${t.name}`,onTaskComplete:()=>e.serverGroups.refresh(!0)},s),l=n=>{const a={cloudProvider:"kubernetes",manifestName:t.name,location:t.namespace,account:t.account,reason:n.reason,options:{gracePeriodSeconds:n.gracePeriodSeconds,orphanDependants:!n.cascading}};return o.submit(()=>u.deleteManifest(a,e))};return pt.createElement(Nt,null,pt.createElement(At,{show:a,onHide:s},pt.createElement(O,{monitor:o}),pt.createElement(B,{initialValues:{cascading:!0},onSubmit:l,render:e=>{var a;return pt.createElement(pt.Fragment,null,pt.createElement(L,{dismiss:s}),pt.createElement(At.Header,null,pt.createElement(At.Title,null,"Delete ",A(t.name)," in ",t.namespace)),n&&pt.createElement("div",{className:"alert alert-warning"},"Manifest is controlled by"," ",pt.createElement(kt,{to:"^.serverGroupManager",params:{accountId:t.account,region:t.region,serverGroupManager:n,provider:"kubernetes"}},pt.createElement("a",null," ",A(n)," "))," ","and may be recreated after deletion."),pt.createElement(At.Body,null,pt.createElement(xt,{className:"form-horizontal"},pt.createElement(Tn,{onOptionsChange:t=>((e,t)=>{e.setFieldValue("gracePeriodSeconds",t.gracePeriodSeconds),e.setFieldValue("cascading",t.cascading)})(e,t),options:{gracePeriodSeconds:e.values.gracePeriodSeconds,cascading:e.values.cascading}}),pt.createElement(z,{reason:e.values.reason,onChange:t=>e.setFieldValue("reason",t)})),(null==(a=e.status)?void 0:a.error)&&pt.createElement("div",{className:"sp-margin-xl-top"},pt.createElement(K,{type:"error",message:pt.createElement("span",{className:"flex-container-v"},pt.createElement("span",{className:"text-bold"},"Something went wrong:"),e.status.error.message&&pt.createElement("span",null,e.status.error.message))}))),pt.createElement(At.Footer,null,pt.createElement(U,{account:t.account,onValidChange:i}),pt.createElement(wt,{onClick:s},"Cancel"),pt.createElement(V,{onClick:()=>l(e.values),isDisabled:!e.isValid||e.isSubmitting||!r,isFormSubmit:!0,submitting:e.isSubmitting,label:`Delete ${t.name}`})))}})))}Tn.defaultProps={onOptionsChange:m,options:{cascading:!0,gracePeriodSeconds:null}};const In="spinnaker.kubernetes.delete";e(In,[]).component("kubernetesDelete",Mt(D(function(e){const{open:t,show:n,close:a}=q();return pt.createElement(pt.Fragment,null,pt.createElement(St,{onClick:()=>n()},"Delete"),pt.createElement(Rn,{isOpen:t,dismissModal:a,...e}))},"kubernetesDelete"),["application","resource","manifestController"]));class $n extends pt.Component{constructor(){super(...arguments),this.handleChange=e=>{try{const t=JSON.parse(e);this.props.onChange?this.props.onChange(e,t):console.warn("No `onChange` handler provided for JSON editor.")}catch(t){this.props.onChange?this.props.onChange(e,null):console.warn("No `onChange` handler provided for JSON editor."),console.warn(`Error loading JSON from string ${e}: `,t)}},this.render=()=>pt.createElement(Dt,{mode:"json",theme:"textmate",name:"json-editor",style:{width:"inherit"},onChange:this.handleChange,fontSize:12,showGutter:!0,cursorStart:0,showPrintMargin:!1,minLines:50,maxLines:100,highlightActiveLine:!0,value:this.props.value||void 0,setOptions:{firstLineNumber:1,tabSize:2,showLineNumbers:!1,showFoldWidgets:!1},editorProps:{$blockScrolling:1/0},className:"ace-editor"})}}const Pn="spinnaker.kubernetes.jsonEditor.component";e(Pn,[]).component("jsonEditor",Mt(D($n,"jsonEditor"),["onChange","value"]));const Gn="spinnaker.kubernetes.v2.manifest.events";e(Gn,[]).component("kubernetesManifestEvents",Mt(D(nn,"kubernetesManifestEvents"),["manifest"]));const On=e=>e&&e.includes(":")?e:`${e}:latest`,Bn=({manifest:e})=>{if(!je(e,"spec.template.spec"))return null;const t=tt(e.spec.template.spec.containers||[],["image"]),n=tt(e.spec.template.spec.initContainers||[],["image"]),a=t.length>0&&n.length>0;return 0===t.length&&0===n.length?pt.createElement("span",null,"No images."):pt.createElement("ul",null,a&&pt.createElement("strong",null,"Containers"),t.map(e=>pt.createElement("li",{key:e.image,title:On(e.image),className:"break-word"},On(e.image)," ",pt.createElement(s,{content:`This is container <strong>${e.name}</strong>'s image.`}))),a&&pt.createElement("strong",null,"Init Containers"),n.map(e=>pt.createElement("li",{key:e.image,className:"break-word",title:On(e.image)},On(e.image)," ",pt.createElement(s,{content:`This is init container <strong>${e.name}</strong>'s image.`}))))},Ln="spinnaker.kubernetes.v2.manifestImageDetails.component";e(Ln,[]).component("kubernetesManifestImageDetails",Mt(D(Bn,"kubernetesManifestImageDetails"),["manifest"]));const zn="spinnaker.kubernetes.v2.manifest.labels";e(zn,[]).component("kubernetesManifestLabels",Mt(D(on,"kubernetesManifestLabels"),["manifest"]));class Kn extends pt.Component{constructor(){super(...arguments),this.description=()=>pt.createElement("div",null,pt.createElement("p",null,"There are three QOS (Quality of Service) classes:"),pt.createElement("p",null,pt.createElement("b",null,"Guaranteed"),": Pods are considered highest-priority, and will only be killed if they exceed their resource requests when other containers require their resources."),pt.createElement("p",null,pt.createElement("b",null,"Burstable"),": Pods have some minimum guaranteed resources and can exceed them, but are more likely to be killed than ",pt.createElement("b",null,"Guaranteed")," pods."),pt.createElement("p",null,pt.createElement("b",null,"BestEffort"),": These are the lowest-priority pods, and will be the first to be evicted when resources run out."),pt.createElement("p",null,"To understand how to set the QOS class of a pod, read"," ",pt.createElement("a",{href:"https://kubernetes.io/docs/tasks/configure-pod-container/quality-service-pod/"},"the Kubernetes documentation"),"."))}qosClass(){return Je(this.props,["manifest","status","qosClass"],"Unknown")}qosStyle(){const e=this.qosClass();return"Guaranteed"===e?"success":"BestEffort"===e?"alert":"warn"}render(){const e=`sp-badge ${this.qosStyle()}`;return pt.createElement(j,{Component:this.description,title:"QOS Class",className:"ephemeral-popover"},pt.createElement("div",{className:e},this.qosClass()))}}const Un="spinnaker.kubernetes.v2.manifest.qos";e(Un,[]).component("kubernetesManifestQos",Mt(D(Kn,"kubernetesManifestQos"),["manifest"]));class Vn extends pt.Component{render(){const e=Je(this.props,["manifest","spec","containers"],[]),t=Je(this.props,["metrics"],[]);if(!t)return pt.createElement("div",null,"No metrics reported.");const n=t.reduce((e,t)=>(e[t.containerName]={metrics:t.metrics},e),{});return pt.createElement("div",null,e.map((t,a)=>pt.createElement("div",{key:t.name},"Resource usage for ",pt.createElement("b",null,t.name),pt.createElement("dl",{className:"dl-horizontal dl-narrow"},pt.createElement("dt",null,"CPU"),pt.createElement("dd",null,Je(n,[t.name,"metrics","CPU(cores)"],"Unknown")),pt.createElement("dt",null,"MEMORY"),pt.createElement("dd",null,Je(n,[t.name,"metrics","MEMORY(bytes)"],"Unknown"))),a<e.length-1?pt.createElement("hr",null):"")))}}const qn="spinnaker.kubernetes.v2.manifest.resources";e(qn,[]).component("kubernetesManifestResources",Mt(D(Vn,"kubernetesManifestResources"),["manifest","metrics"]));const jn="spinnaker.kubernetes.pause.rollout";e(jn,[]).component("kubernetesPauseRollout",Mt(D(function({application:e,resource:t}){return pt.createElement(St,{onClick:()=>{_.confirm({account:t.account,askForReason:!0,header:`Pause rollout of ${A(t.name)} in ${t.namespace}`,submitMethod:n=>{const a={cloudProvider:"kubernetes",manifestName:t.name,location:t.namespace,account:t.account,reason:n.reason};return u.pauseRolloutManifest(a,e)},taskMonitorConfig:{application:e,title:`Pause rollout of ${t.name} in ${t.namespace}`,onTaskComplete:()=>e.serverGroups.refresh(!0)}})}},"Pause Rollout")},"kubernetesPauseRollout"),["application","resource"]));const _n="spinnaker.kubernetes.resume.rollout";e(_n,[]).component("kubernetesResumeRollout",Mt(D(function({application:e,resource:t}){return pt.createElement(St,{onClick:()=>{_.confirm({account:t.account,askForReason:!0,header:`Resume rollout of ${A(t.name)} in ${t.namespace}`,submitMethod:n=>{const a={cloudProvider:"kubernetes",manifestName:t.name,location:t.namespace,account:t.account,reason:n.reason};return u.pauseRolloutManifest(a,e)},taskMonitorConfig:{application:e,title:`Resume rollout of ${t.name} in ${t.namespace}`,onTaskComplete:()=>e.serverGroups.refresh(!0)}})}},"Resume Rollout")},"kubernetesResumeRollout"),["application","resource"]));function Hn({application:e,resource:t,isOpen:n,dismissModal:a}){const s=(e=>{const[,...t]=et(e.serverGroups,["moniker.sequence"],["desc"]);return t.map((e,t)=>({label:`${W.getSequence(e.moniker.sequence)}${t>0?"":" - previous revision"}`,revision:e.moniker.sequence}))})(t),[r,i]=ht(!1),o=G({application:e,title:`Undo rollout of ${t.name} in ${t.namespace}`,onTaskComplete:()=>e.serverGroups.refresh(!0)},a),l=n=>{const a={cloudProvider:"kubernetes",manifestName:t.name,location:t.namespace,account:t.account,reason:n.reason,revision:n.revision};return o.submit(()=>u.undoRolloutManifest(a,e))};return pt.createElement(At,{show:n,onHide:a},pt.createElement(O,{monitor:o}),pt.createElement(B,{initialValues:{},onSubmit:l,render:e=>pt.createElement(pt.Fragment,null,pt.createElement(L,{dismiss:a}),pt.createElement(At.Header,null,pt.createElement(At.Title,null,"Undo rollout of ",A(t.name)," in ",t.namespace)),pt.createElement(At.Body,null,pt.createElement(xt,{className:"form-horizontal"},pt.createElement("div",{className:"form-group form-inline"},pt.createElement("label",{className:"col-md-3 sm-label-right"},pt.createElement("span",{className:"label-text"},"Revision ")),pt.createElement("div",{className:"col-md-7"},pt.createElement(H,{clearable:!1,value:e.values.revision,options:s.map(e=>({label:e.label,value:e.revision})),onChange:t=>{e.setFieldValue("revision",t.target.value)}}))),pt.createElement(z,{reason:e.values.reason,onChange:t=>e.setFieldValue("reason",t)}))),pt.createElement(At.Footer,null,pt.createElement(U,{account:t.account,onValidChange:i}),pt.createElement(wt,{onClick:a},"Cancel"),pt.createElement(V,{onClick:()=>l(e.values),isDisabled:!e.isValid||e.isSubmitting||!r,isFormSubmit:!0,submitting:e.isSubmitting,label:`Undo rollout of ${t.name}`})))}))}const Wn="spinnaker.kubernetes.undo.rollout";e(Wn,[]).component("kubernetesUndoRollout",Mt(D(function(e){const{open:t,show:n,close:a}=q();return pt.createElement(pt.Fragment,null,pt.createElement(St,{onClick:()=>n()},"Undo Rolloutaaaa"),pt.createElement(Hn,{isOpen:t,dismissModal:a,...e}))},"kubernetesUndoRollout"),["application","resource"]));class Jn{constructor(e,t,n){this.$uibModalInstance=t,this.application=n,this.verification={verified:!1},this.taskMonitor=new o({title:`Resume rollout of ${e.name} in ${e.namespace}`,application:n,modalInstance:t}),this.command={manifestName:e.name,location:e.namespace,account:e.account,reason:null}}isValid(){return this.verification.verified}cancel(){this.$uibModalInstance.dismiss()}resumeRollout(){this.taskMonitor.submit(()=>{const e=t(this.command);return e.cloudProvider="kubernetes",u.resumeRolloutManifest(e,this.application)})}}Jn.$inject=["coordinates","$uibModalInstance","application"];const Xn="spinnaker.kubernetes.v2.manifest.resumeRollout.controller";function Zn({application:e,resource:t,currentReplicas:n,isOpen:a,dismissModal:s}){const r={replicas:n},[i,o]=ht(!1),l=G({application:e,title:`Scaling ${t.name} in ${t.namespace}`,onTaskComplete:()=>e.serverGroups.refresh(!0)},s),c=n=>{const a={cloudProvider:"kubernetes",manifestName:t.name,location:t.namespace,account:t.account,reason:n.reason,replicas:n.replicas};return l.submit(()=>u.scaleManifest(a,e))};return pt.createElement(At,{show:a,onHide:s},pt.createElement(O,{monitor:l}),pt.createElement(B,{initialValues:r,onSubmit:c,render:e=>pt.createElement(pt.Fragment,null,pt.createElement(L,{dismiss:s}),pt.createElement(At.Header,null,pt.createElement(At.Title,null,"Scale ",A(t.name)," in ",t.namespace)),pt.createElement(At.Body,null,pt.createElement(xt,{className:"form-horizontal"},pt.createElement(En,{onChange:t=>((e,t)=>{e.setFieldValue("replicas",t.replicas)})(e,t),options:{replicas:e.values.replicas}}),pt.createElement(z,{reason:e.values.reason,onChange:t=>e.setFieldValue("reason",t)}))),pt.createElement(At.Footer,null,pt.createElement(U,{account:t.account,onValidChange:o}),pt.createElement(wt,{onClick:s},"Cancel"),pt.createElement(V,{onClick:()=>c(e.values),isDisabled:!e.isValid||e.isSubmitting||!i,isFormSubmit:!0,submitting:e.isSubmitting,label:`Scale ${t.name}`})))}))}e(Xn,[]).controller("kubernetesV2ManifestResumeRolloutCtrl",Jn);const Qn="spinnaker.kubernetes.scale";e(Qn,[]).component("kubernetesScale",Mt(D(function(e){const{open:t,show:n,close:a}=q();return pt.createElement(pt.Fragment,null,pt.createElement(St,{onClick:()=>n()},"Scale"),pt.createElement(Zn,{isOpen:t,dismissModal:a,...e}))},"kubernetesScale"),["application","resource","currentReplicas"]));var Yn=(e=>(e.Static="static",e.Dynamic="dynamic",e.Label="label",e))(Yn||{});const ea={static:{label:"Choose a static target",selectorDefaults:{cluster:null,criteria:null,kind:null,kinds:null,labelSelectors:null}},dynamic:{label:"Choose a target dynamically",selectorDefaults:{kinds:null,labelSelectors:null,manifestName:null}},label:{label:"Match target(s) by label",selectorDefaults:{cluster:null,criteria:null,kind:null,kinds:[],labelSelectors:{selectors:[]},manifestName:null}}};class ta{static search(e,t,n){return J.search({q:t,type:e}).then(a=>He(a?a.results:[]).filter(a=>a.namespace===t&&a.account===n&&a.kubernetesKind===e).uniqBy("name").valueOf()).catch(()=>[])}}rn(".label-editor-kind-select {\n min-width: 125px;\n}\n");const na=["ANY","EQUALS","NOT_EQUALS","CONTAINS","NOT_CONTAINS","EXISTS","NOT_EXISTS"].map(e=>({label:e,value:e})),aa=class e extends pt.Component{constructor(){super(...arguments),this.handleChange=(e,t,n)=>{this.props.onLabelSelectorsChange(this.props.labelSelectors.map((a,s)=>e!==s?a:{...a,[t]:n}))},this.removeField=e=>{this.props.onLabelSelectorsChange(this.props.labelSelectors.filter((t,n)=>e!==n))},this.addField=()=>this.props.onLabelSelectorsChange(this.props.labelSelectors.concat([{key:"",kind:"EQUALS",values:[]}]))}render(){return pt.createElement("table",{className:"table table-condensed packed tags"},pt.createElement("thead",null,pt.createElement("tr",null,pt.createElement("th",null,"Key"),pt.createElement("th",null,"Kind"),pt.createElement("th",null,"Value(s)"),pt.createElement("th",null))),pt.createElement("tbody",null,this.props.labelSelectors.map((t,n)=>pt.createElement("tr",{className:"label-editor-selector-row",key:n},pt.createElement("td",null,pt.createElement("input",{className:"form-control input input-sm label-editor-key-input",type:"text",value:t.key,onChange:e=>this.handleChange(n,"key",e.target.value)})),pt.createElement("td",null,pt.createElement(Ft,{className:"label-editor-kind-select",clearable:!1,onChange:e=>this.handleChange(n,"kind",e.value),options:na,value:t.kind})),pt.createElement("td",null,pt.createElement("input",{className:"form-control input input-sm label-editor-values-input",onChange:t=>this.handleChange(n,"values",e.convertValueStringToArray(t.target.value)),placeholder:"Comma-separated values",value:t.values.join(", "),type:"text"})),pt.createElement("td",null,pt.createElement("button",{className:"link label-editor-remove",onClick:()=>this.removeField(n)},pt.createElement("span",{className:"glyphicon glyphicon-trash"}),pt.createElement("span",{className:"sr-only"},"Remove field")))))),pt.createElement("tfoot",null,pt.createElement("tr",null,pt.createElement("td",{colSpan:4},pt.createElement("button",{className:"btn btn-block btn-sm add-new",onClick:this.addField},pt.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add Label")))))}};aa.defaultProps={labelSelectors:[],onLabelSelectorsChange:m},aa.convertValueStringToArray=e=>e.split(",").map(e=>e.trim());let sa=aa;const ra=e=>{const[t,n]=(e||"").split(" ");return{kind:t,name:n}};class ia{constructor(e){this.component=e,this.handles=e=>e===Yn.Static,this.handleModeChange=()=>{const{selector:e}=this.component.state;this.handleKindChange(e.kind),Object.assign(e,ea.static.selectorDefaults),this.component.setStateAndUpdateStage({selector:e})},this.handleKindChange=e=>{const{selector:t}=this.component.state,{name:n}=ra(t.manifestName);t.manifestName=e?n?`${e} ${n}`:e:n},this.getKind=()=>ra(this.component.state.selector.manifestName).kind}}class oa{constructor(e){this.component=e,this.handles=e=>e===Yn.Dynamic,this.handleModeChange=()=>{const{selector:e}=this.component.state,{kind:t}=ra(e.manifestName);e.kind=t||null,Object.assign(e,ea.dynamic.selectorDefaults),this.component.setStateAndUpdateStage({selector:e})},this.handleKindChange=e=>{this.component.state.selector.kind=e},this.getKind=()=>this.component.state.selector.kind}}class la{constructor(e){this.component=e,this.handles=e=>e===Yn.Label,this.handleModeChange=()=>{const{selector:e}=this.component.state;Object.assign(e,ea.label.selectorDefaults),this.component.setStateAndUpdateStage({selector:e})},this.handleKindChange=()=>{},this.getKind=()=>null}}class ca extends pt.Component{constructor(e){super(e),this.search$=new Rt,this.destroy$=new Rt,this.setStateAndUpdateStage=(e,t)=>{e.selector&&this.props.onChange&&this.props.onChange(e.selector),this.setState(e,t||m)},this.componentDidMount=()=>{this.loadAccounts(),this.search$.pipe(Pt(()=>this.setStateAndUpdateStage({loading:!0})),Gt(({kind:e,namespace:t,account:n})=>It(this.search(e,t,n))),Ot(this.destroy$)).subscribe(e=>{null==this.state.selector.manifestName&&this.getSelectedMode()===Yn.Static&&this.handleNameChange(""),this.setStateAndUpdateStage({loading:!1,resources:e,selector:this.state.selector})})},this.componentWillUnmount=()=>this.destroy$.next(),this.loadAccounts=()=>a.getAllAccountDetailsForProvider("kubernetes").then(e=>{const t=this.state.selector,n=ra(t.manifestName).kind;this.setStateAndUpdateStage({accounts:e}),!t.account&&e.length>0&&(t.account=e.some(e=>e.name===p.providers.kubernetes.defaults.account)?p.providers.kubernetes.defaults.account:e[0].name),t.account&&this.handleAccountChange(t.account),n&&this.search$.next({kind:n,namespace:t.location,account:t.account})}),this.handleAccountChange=e=>{const t=(this.state.accounts||[]).find(t=>t.name===e);if(!t)return;const n=(t.namespaces||[]).sort(),a=Object.entries(t.spinnakerKindMap||{}).filter(([,e])=>!this.props.includeSpinnakerKinds||!this.props.includeSpinnakerKinds.length||this.props.includeSpinnakerKinds.includes(e)).map(([e])=>e).sort();!this.isExpression(this.state.selector.location)&&n.every(e=>e!==this.state.selector.location)&&(this.state.selector.location=null),this.state.selector.account=e,this.search$.next({kind:ra(this.state.selector.manifestName).kind||this.state.selector.kind,namespace:this.state.selector.location,account:this.state.selector.account}),this.setStateAndUpdateStage({namespaces:n,kinds:a,selector:this.state.selector})},this.handleNamespaceChange=e=>{this.state.selector.location=e&&e.value?e.value:null,this.search$.next({kind:ra(this.state.selector.manifestName).kind,namespace:this.state.selector.location,account:this.state.selector.account}),this.setStateAndUpdateStage({selector:this.state.selector})},this.handleKindChange=e=>{this.modeDelegate().handleKindChange(e),this.search$.next({kind:e,namespace:this.state.selector.location,account:this.state.selector.account})},this.handleNameChange=e=>{const{kind:t}=ra(this.state.selector.manifestName);this.state.selector.manifestName=t?`${t} ${e}`:` ${e}`,this.setStateAndUpdateStage({selector:this.state.selector})},this.isExpression=e=>"string"==typeof e&&e.includes("${"),this.search=(e,t,n)=>this.isExpression(n)?Promise.resolve([]):ta.search(e,t,n).then(e=>e.map(e=>e.name).sort()),this.handleModeSelect=e=>{this.state.selector.mode=e,this.setStateAndUpdateStage({selector:this.state.selector},()=>{this.modeDelegate().handleModeChange()})},this.handleClusterChange=({clusterName:e})=>{this.state.selector.cluster=e,this.setStateAndUpdateStage({selector:this.state.selector})},this.handleCriteriaChange=e=>{this.state.selector.criteria=e,this.setStateAndUpdateStage({selector:this.state.selector})},this.handleKindsChange=e=>{this.state.selector.kinds=e,this.setStateAndUpdateStage({selector:this.state.selector})},this.handleLabelSelectorsChange=e=>{this.state.selector.labelSelectors.selectors=e,this.setStateAndUpdateStage({selector:this.state.selector})},this.modeDelegate=()=>this.handlers.find(e=>e.handles(this.getSelectedMode())),this.promptTextCreator=e=>`Use custom expression: ${e}`,this.getSelectedMode=()=>this.state.selector.mode||Yn.Static,this.getFilteredClusters=()=>{const{application:e,includeSpinnakerKinds:t}=this.props,{selector:n}=this.state,a=e?[e]:[],s=Ye(t)||t.length>1||"serverGroups"!==t[0];return X.getClusters(a,e=>{const t=X.clusterFilterForCredentialsAndRegion(n.account,n.location)(e),a=Je(e,"serverGroupManagers.length",0)>0,r=s||!a,i=a?e.cluster:e.name,o=ra(i).kind===this.modeDelegate().getKind();return t&&r&&o})},this.props.selector.mode||(this.props.selector.mode=Yn.Static,this.props.onChange&&this.props.onChange(this.props.selector)),this.state={selector:e.selector,accounts:[],namespaces:[],kinds:[],resources:[],loading:!1},this.handlers=[new ia(this),new oa(this),new la(this)]}render(){const{TargetSelect:e}=Z,t=this.getSelectedMode(),n=this.props.modes||[t],{selector:a,accounts:s,kinds:i,namespaces:o,resources:l,loading:c}=this.state,d=this.modeDelegate().getKind(),m=ra(a.manifestName).name,u=l.map(e=>ra(e).name),p=a.kinds||[],h=pt.createElement(N,{label:"Kind"},pt.createElement(Tt,{clearable:!1,value:{value:d,label:d},options:i.map(e=>({value:e,label:e})),onChange:e=>this.handleKindChange(e&&e.value),promptTextCreator:this.promptTextCreator}));return pt.createElement(pt.Fragment,null,pt.createElement(N,{label:"Account"},pt.createElement(r,{value:a.account,onChange:e=>this.handleAccountChange(e.target.value),accounts:s,provider:"'kubernetes'"})),pt.createElement(N,{label:"Namespace"},pt.createElement(Tt,{clearable:!1,value:{value:a.location,label:a.location},options:o.map(e=>({value:e,label:e})),onChange:this.handleNamespaceChange,promptTextCreator:this.promptTextCreator})),!n.includes(Yn.Label)&&h,n.length>1&&pt.createElement(N,{label:"Selector"},n.map(e=>pt.createElement("div",{className:"radio",key:e},pt.createElement("label",{htmlFor:e},pt.createElement("input",{type:"radio",onChange:()=>this.handleModeSelect(e),checked:t===e,id:e})," ",Je(ea,[e,"label"],""))))),n.includes(Yn.Label)&&t!==Yn.Label&&h,n.includes(Yn.Static)&&t===Yn.Static&&pt.createElement(N,{label:"Name"},pt.createElement(Tt,{isLoading:c,clearable:!1,value:{value:m,label:m},options:u.map(e=>({value:e,label:e})),onChange:e=>this.handleNameChange(e?e.value:""),promptTextCreator:this.promptTextCreator})),n.includes(Yn.Dynamic)&&t===Yn.Dynamic&&pt.createElement(pt.Fragment,null,pt.createElement(N,{label:"Cluster"},pt.createElement(Q,{clusters:this.getFilteredClusters(),model:a.cluster,onChange:this.handleClusterChange})),pt.createElement(N,{label:"Target"},pt.createElement(e,{onChange:this.handleCriteriaChange,model:{target:a.criteria},options:Y.MANIFEST_CRITERIA_OPTIONS}))),n.includes(Yn.Label)&&t===Yn.Label&&pt.createElement(pt.Fragment,null,pt.createElement(N,{label:"Kinds"},pt.createElement(Ft,{clearable:!1,multi:!0,value:p,options:i.map(e=>({value:e,label:e})),onChange:e=>this.handleKindsChange(e.map(e=>e.value))})),pt.createElement(N,{label:"Labels"},pt.createElement(sa,{labelSelectors:Je(a,"labelSelectors.selectors",[]),onLabelSelectorsChange:this.handleLabelSelectorsChange}))))}}const da="spinnaker.kubernetes.v2.manifest.selector.component";e(da,[]).component("kubernetesManifestSelector",Mt(D(ca,"kubernetesManifestSelector"),["selector","modes","application","onChange"]));class ma extends pt.Component{constructor(){super(...arguments),this.componentDidMount=()=>{nt(this.props.stage,{app:this.props.application.name,cloudProvider:"kubernetes"}),this.props.stage.isNew&&(this.props.stage.options={gracePeriodSeconds:null,cascading:!0}),this.props.stageFieldUpdated()},this.onChange=e=>{Object.assign(this.props.stage,e),this.props.stageFieldUpdated()},this.onOptionsChange=e=>{this.props.stage.options=e,this.props.stageFieldUpdated()}}render(){const e={...this.props.stage};return pt.createElement("div",{className:"form-horizontal"},pt.createElement("h4",null,"Manifest"),pt.createElement("div",{className:"horizontal-rule"}),pt.createElement(ca,{application:this.props.application,selector:e,modes:[Yn.Static,Yn.Dynamic,Yn.Label],onChange:this.onChange,includeSpinnakerKinds:null}),pt.createElement("h4",null,"Settings"),pt.createElement("div",{className:"horizontal-rule"}),pt.createElement(Tn,{onOptionsChange:this.onOptionsChange,options:this.props.stage.options}))}}const ua=e=>Je(Y.MANIFEST_CRITERIA_OPTIONS.find(t=>t.val===e),"label"),pa=e=>(e.selectors||[]).map(e=>{const{key:t,kind:n,values:a=[]}=e;switch(n){case"ANY":default:return null;case"EQUALS":return`${t} = ${a[0]}`;case"NOT_EQUALS":return`${t} != ${a[0]}`;case"CONTAINS":return`${t} in (${a.join(", ")})`;case"NOT_CONTAINS":return`${t} notin (${a.join(", ")})`;case"EXISTS":return`${t}`;case"NOT_EXISTS":return`!${t}`}}).filter(e=>!!e).join(", "),ha=({account:e,manifestName:t,location:n,cluster:a,criteria:s,labelSelectors:r,manifestNamesByNamespace:i})=>pt.createElement(pt.Fragment,null,pt.createElement("dt",null,"Account"),pt.createElement("dd",null,e),((e,t)=>{if(e)return pt.createElement(pt.Fragment,null,pt.createElement("dt",null,"Manifest"),pt.createElement("dd",null,e));if(t){const e=at(Object.values(t));return pt.createElement(pt.Fragment,null,pt.createElement("dt",null,"Manifest",e.length>1?"s":""),pt.createElement("dd",null,e.join(", ")))}return null})(t,i),pt.createElement("dt",null,"Namespace"),pt.createElement("dd",null,n),null!=ua(s)&&null!=a&&pt.createElement(pt.Fragment,null,pt.createElement("dt",null,"Target"),pt.createElement("dd",null,`${ua(s)} in cluster ${a}`)),null!=r&&!!pa(r)&&pt.createElement(pt.Fragment,null,pt.createElement("dt",null,"Selector",(r.selectors||[]).length>1?"s":""),pt.createElement("dd",null,pa(r)))),Ca=e=>{var t;return(t=class extends pt.Component{render(){const{stage:e,current:t,name:n}=this.props,{account:a,manifestName:s,location:r,cluster:i,criteria:o,labelSelectors:l,manifestNamesByNamespace:c}=e.context;return pt.createElement(ee,{name:n,current:t},pt.createElement("div",{className:"row"},pt.createElement("div",{className:"col-md-9"},pt.createElement("dl",{className:"dl-narrow dl-horizontal"},pt.createElement(ha,{account:a,manifestName:s,location:r,cluster:i,criteria:o,labelSelectors:l,manifestNamesByNamespace:c})))),pt.createElement(te,{stage:e,message:e.failureMessage}))}}).title=e,t},fa=e=>{const t=t=>`<strong>${t}</strong> is a required field for ${e} stages.`;return[{type:"requiredField",fieldName:"location",fieldLabel:"Namespace"},{type:"requiredField",fieldName:"account",fieldLabel:"Account"},{type:"custom",validate:(e,n)=>{if(n.mode===Yn.Dynamic){if(!n.kind)return t("Kind");if(!n.cluster)return t("Cluster");if(!n.criteria)return t("Target")}else if(n.mode===Yn.Static){const[e]=(n.manifestName||"").split(" ");if(!e)return t("Kind");const[,a]=(n.manifestName||"").split(" ");if(!a)return t("Name")}else if(n.mode===Yn.Label&&!n.kinds)return t("Kinds");return null}}]},ga="Delete (Manifest)",ba="deleteManifest";ne.pipeline.registerStage({label:ga,description:"Destroy a Kubernetes object created from a manifest.",key:ba,cloudProvider:"kubernetes",component:ma,executionDetailsSections:[Ca(ba),ae],accountExtractor:e=>e.context.account?[e.context.account]:[],configAccountExtractor:e=>e.account?[e.account]:[],validators:fa(ga)});const va=class e extends pt.Component{constructor(t){super(t),this.destroy$=new Rt,this.useManifest=()=>{const{data:{account:e,region:t,name:n}}=this.state.selectedManifest;It(h.getManifest(e,t,n)).pipe(Ot(this.destroy$)).subscribe(e=>{this.props.onManifestSelected(JSON.parse(e.manifest.metadata.annotations["kubectl.kubernetes.io/last-applied-configuration"]))})},this.manifestChanged=e=>{this.setState({selectedManifest:e})},this.manifestValueRenderer=e=>{const t=A(e.kind).trim();return pt.createElement("span",null,pt.createElement(S,{account:e.account}),e.data&&pt.createElement("span",null," ",e.name)," (",t," in ",e.location,")")},this.manifestOptionRenderer=e=>{const t=A(e.kind).trim();return pt.createElement("h5",null,pt.createElement(S,{account:e.account})," ",e.name," (",t," in ",e.location,")")},this.state=e.getState(t)}componentWillUnmount(){this.destroy$.next()}render(){const{selectedManifest:e,manifests:t}=this.state;return pt.createElement(At,{show:this.props.show,onHide:m},pt.createElement(L,{dismiss:this.props.onDismiss}),pt.createElement("div",null,pt.createElement(At.Header,null,pt.createElement(At.Title,null,"Copy Manifest")),pt.createElement(At.Body,null,pt.createElement("form",{className:"form-horizontal"},pt.createElement("div",{className:"form-group"},pt.createElement("div",{className:"col-md-4 col-md-offset-1 sm-label-left"},pt.createElement("b",null,"Copy manifest from"))),pt.createElement("div",{className:"form-group"},pt.createElement("div",{className:"col-md-10 col-md-offset-1"},pt.createElement(se,{value:e?e.key:null,placeholder:"Select...",valueRenderer:this.manifestValueRenderer,optionRenderer:this.manifestOptionRenderer,options:t,valueKey:"key",onChange:this.manifestChanged,clearable:!1}))))),pt.createElement("div",{className:"modal-footer"},e&&pt.createElement("button",{className:"btn btn-primary",onClick:this.useManifest},pt.createElement("span",null,"Use this manifest"),pt.createElement("span",{className:"glyphicon glyphicon-chevron-right"})),!e&&pt.createElement("button",{className:"btn",onClick:this.props.onDismiss},pt.createElement("span",null,"Cancel")))))}};va.getState=e=>{let t=[];const n=e.application.getDataSource("serverGroups").data.filter(t=>t.cloudProvider===e.cloudProvider&&"serverGroup"===t.category&&!(t.serverGroupManagers||[]).length),a=st(n,e=>[e.cluster,e.account,e.region].join(":"));Object.keys(a).forEach(e=>{const n=tt(a[e],"name").pop(),[s,r]=n.name.split(" ");t.push({account:n.account,location:n.region,name:r,kind:s,data:n,key:[n.account,n.region,n.name].join(":")})});return[...e.application.getDataSource("serverGroupManagers").data,...e.application.getDataSource("loadBalancers").data,...e.application.getDataSource("securityGroups").data].filter(t=>t.cloudProvider===e.cloudProvider).forEach(e=>{const[n,a]=e.name.split(" ");t.push({account:e.account,location:e.region,name:a,kind:n,data:e,key:[e.account,e.region,e.name].join(":")})}),t=tt(t,e=>{const t=["deployment","replicaSet","statefulSet","daemonSet","jobs","cronJob","service","ingress","networkPolicy"];return t.includes(e.kind)?t.indexOf(e.kind):Number.MAX_SAFE_INTEGER},["kind","name","location"]),{selectedManifest:t.length?t[0]:null,manifests:t}};let ka=va;class Ea extends pt.Component{constructor(e){super(e),this.toggle=()=>this.setState({show:!this.state.show}),this.handleManifestSelected=e=>{this.props.handleCopy(e),this.toggle()},this.state={show:!1}}render(){return pt.createElement(pt.Fragment,null,pt.createElement(ka,{show:this.state.show,application:this.props.application,cloudProvider:"kubernetes",onDismiss:this.toggle,onManifestSelected:this.handleManifestSelected}),pt.createElement("button",{className:"link",onClick:this.toggle,style:{paddingLeft:0}},"Copy from running infrastructure"))}}class ya extends pt.Component{constructor(){super(...arguments),this.onChangeBinding=(e,t)=>{const n=(this.props.bindings||[]).slice(0);n[e]=t,this.props.onChangeBindings(n)},this.onRemoveBinding=e=>{const t=(this.props.bindings||[]).slice(0);t.splice(e,1),this.props.onChangeBindings(t)}}render(){const{stage:e,pipeline:t,bindings:n}=this.props,a=(a,s)=>{const r=(s?s.expectedArtifactId:"new")||s.artifact&&s.artifact.id;return pt.createElement("div",{className:"row",key:r},pt.createElement("div",{className:"col-md-10"},pt.createElement(re,{pipeline:t,stage:e,expectedArtifactId:s&&s.expectedArtifactId,artifact:!!s&&s.artifact,onArtifactEdited:e=>this.onChangeBinding(a,{artifact:e}),onExpectedArtifactSelected:e=>this.onChangeBinding(a,{expectedArtifactId:e.id}),excludedArtifactIds:n.map(e=>e.expectedArtifactId),excludedArtifactTypePatterns:[ie.FRONT50_PIPELINE_TEMPLATE]})),s&&pt.createElement("div",{className:"col-md-2"},pt.createElement("a",{className:"glyphicon glyphicon-trash",onClick:()=>this.onRemoveBinding(a)})))};return pt.createElement(pt.Fragment,null,n.map((e,t)=>a(t,e)),a(n.length))}}class Sa extends pt.Component{constructor(){super(...arguments),this.defaultProps={createable:!1}}getNamespaceOptions(){const{accounts:e,selectedAccount:t,selectedNamespace:n}=this.props,a=rt(e,e=>e.name===t),s=Je(a,"namespaces",[]),r=it(s,e=>({label:e,value:e}));return this.props.createable&&n.includes("${")&&r.push({label:n,value:n}),r}render(){const e={clearable:!1,options:this.getNamespaceOptions(),value:this.props.selectedNamespace,onChange:e=>this.props.onChange(e.value.toString())};return this.props.createable?pt.createElement(Tt,{...e}):pt.createElement(Ft,{...e})}}const Aa={label:"Red/Black (Deprecated)",description:"Disables <i>all</i> previous ReplicaSets in the cluster as soon as the new ReplicaSet is ready",key:"redblack"},wa=[{label:"None",description:"Creates the new ReplicaSet with no impact on existing ReplicaSets in the cluster",key:null,providerRestricted:!1},Aa,{label:"Highlander",description:"Destroys <i>all</i> previous ReplicaSets in the cluster as soon as the new ReplicaSet is ready",key:"highlander"},{label:"Blue/Green",description:"Disables <i>all</i> previous ReplicaSets in the cluster as soon as the new ReplicaSet is ready",key:"bluegreen"}],Ma={enabled:!1,options:{namespace:null,services:[],enableTraffic:!1,strategy:null}};class Na extends pt.Component{constructor(){super(...arguments),this.state={services:[],showRedBlackWarningMessage:!1},this.onConfigChange=(e,t)=>{this.setState({showRedBlackWarningMessage:!1}),"redblack"===t&&(t="bluegreen",this.setState({showRedBlackWarningMessage:!0})),this.updateProps(e,t)},this.fetchServices=()=>{const e=this.props.config.options.namespace,t=this.props.selectedAccount;e&&t||this.setState({services:[]}),ta.search("service",e,t).then(e=>{this.setState({services:it(e,"name")})})},this.getServiceOptions=()=>{const e=this.state.services.map(e=>({label:ot(e," ")[1],value:e}));return(this.props.config.options.services||[]).forEach(t=>{this.state.services.includes(t)||e.push({label:t,value:t})}),e},this.strategyOptionRenderer=e=>pt.createElement("div",{className:"body-regular"},pt.createElement("strong",null,pt.createElement(oe,{tag:"span",message:e.label})),pt.createElement("div",null,pt.createElement(oe,{tag:"span",message:e.description})))}updateProps(e,t){const n=qe(this.props.config);lt(n,e,t),this.props.onConfigChange(n)}componentDidMount(){this.fetchServices(),this.setState({showRedBlackWarningMessage:!1}),"redblack"===this.props.config.options.strategy&&(this.setState({showRedBlackWarningMessage:!0}),this.updateProps("options.strategy","bluegreen"))}componentDidUpdate(e){e.selectedAccount!==this.props.selectedAccount&&this.updateProps("options.namespace",null),e.config.options.namespace!==this.props.config.options.namespace&&(this.updateProps("options.services",null),this.fetchServices()),!this.props.config.options.enableTraffic&&this.props.config.options.strategy&&this.updateProps("options.enableTraffic",!0)}render(){const{config:e}=this.props,{showRedBlackWarningMessage:t}=this.state;return pt.createElement(pt.Fragment,null,pt.createElement("h4",null,"Rollout Strategy Options"),pt.createElement(N,{helpKey:"kubernetes.manifest.rolloutStrategyOptions",fieldColumns:8,label:"Enable"},pt.createElement("div",{className:"checkbox"},pt.createElement("label",null,pt.createElement("input",{checked:e.enabled,onChange:e=>this.onConfigChange("enabled",e.target.checked),type:"checkbox"}),"Spinnaker manages traffic based on your selected strategy"))),e.enabled&&pt.createElement(pt.Fragment,null,pt.createElement(N,{fieldColumns:8,label:"Service(s) Namespace"},pt.createElement(Sa,{createable:!0,onChange:e=>this.onConfigChange("options.namespace",e),accounts:this.props.accounts,selectedAccount:this.props.selectedAccount,selectedNamespace:e.options.namespace||""})),pt.createElement(N,{fieldColumns:8,label:"Service(s)"},pt.createElement(Tt,{clearable:!1,multi:!0,onChange:e=>this.onConfigChange("options.services",it(e,"value")),options:this.getServiceOptions(),value:e.options.services})),pt.createElement(N,{fieldColumns:8,label:"Traffic"},pt.createElement("div",{className:"checkbox"},pt.createElement("label",null,pt.createElement("input",{checked:e.options.enableTraffic,disabled:!!e.options.strategy,onChange:e=>this.onConfigChange("options.enableTraffic",e.target.checked),type:"checkbox"}),"Send client requests to new pods"))),pt.createElement(N,{fieldColumns:8,helpKey:"kubernetes.manifest.rolloutStrategy",label:"Strategy"},pt.createElement(Ft,{id:"strategyDropdown",clearable:!1,onChange:e=>this.onConfigChange("options.strategy",e.key),options:wa,optionRenderer:this.strategyOptionRenderer,placeholder:"None",value:e.options.strategy,valueKey:"key",valueRenderer:e=>pt.createElement(pt.Fragment,null,e.label)}),t&&pt.createElement("p",{id:"redBlackWarning",style:{color:"orange"}},"Warning: Red/black strategy is deprecated and will be removed soon. We automatically selected blue/green instead!"))))}}class xa extends pt.Component{constructor(e){super(e),this.excludedManifestArtifactTypes=[ie.DOCKER_IMAGE,ie.KUBERNETES,ie.FRONT50_PIPELINE_TEMPLATE,ie.MAVEN_FILE],this.getSourceOptions=()=>it([Lt.TEXT,Lt.ARTIFACT],e=>({label:ct(e),value:e})),this.handleCopy=e=>{this.props.formik.setFieldValue("manifests",[e]),this.setState({rawManifest:le([e])})},this.handleRawManifestChange=(e,t)=>{this.setState({rawManifest:e}),this.props.formik.setFieldValue("manifests",t)},this.onManifestArtifactSelected=e=>{this.props.formik.setFieldValue("manifestArtifactId",e),this.props.formik.setFieldValue("manifestArtifact",null)},this.onManifestArtifactEdited=e=>{this.props.formik.setFieldValue("manifestArtifactId",null),this.props.formik.setFieldValue("manifestArtifact",e)},this.getRequiredArtifacts=()=>{const{requiredArtifactIds:e,requiredArtifacts:t}=this.props.formik.values;return(e||[]).map(e=>({expectedArtifactId:e})).concat(t||[])},this.onRequiredArtifactsChanged=e=>{this.props.formik.setFieldValue("requiredArtifactIds",e.filter(e=>e.expectedArtifactId).map(e=>e.expectedArtifactId)),this.props.formik.setFieldValue("requiredArtifacts",e.filter(e=>e.artifact))},this.handleLabelSelectorsChange=e=>{this.setState({labelSelectors:e}),this.props.formik.setFieldValue("labelSelectors.selectors",e)};const t=this.props.formik.values,n=Je(e.formik.values,"manifests"),a=Je(e.formik.values,"source")===Lt.TEXT;this.state={rawManifest:!Ye(n)&&a?le(n):"",overrideNamespace:""!==Je(t,"namespaceOverride",""),selector:{account:"",location:"",mode:Yn.Label,labelSelectors:{selectors:[]}},labelSelectors:[]}}overrideNamespaceChange(e){e||this.props.formik.setFieldValue("namespaceOverride",""),this.setState({overrideNamespace:e})}render(){const e=this.props.formik.values;return pt.createElement("div",{className:"form-horizontal"},pt.createElement("h4",null,"Basic Settings"),pt.createElement(Ut,{accounts:this.props.accounts,onAccountSelect:e=>this.props.formik.setFieldValue("account",e),selectedAccount:e.account}),pt.createElement(N,{label:"Override Namespace"},pt.createElement(ce,{checked:this.state.overrideNamespace,onChange:e=>this.overrideNamespaceChange(e.target.checked)})),this.state.overrideNamespace&&pt.createElement(N,{label:"Namespace"},pt.createElement(Sa,{createable:!0,accounts:this.props.accounts,selectedAccount:e.account,selectedNamespace:e.namespaceOverride||"",onChange:e=>this.props.formik.setFieldValue("namespaceOverride",e)})),pt.createElement("hr",null),pt.createElement("h4",null,"Manifest Configuration"),pt.createElement(N,{label:"Manifest Source",helpKey:"kubernetes.manifest.source"},pt.createElement(de,{options:this.getSourceOptions(),onChange:e=>this.props.formik.setFieldValue("source",e.target.value),value:e.source})),e.source===Lt.TEXT&&pt.createElement(N,{label:"Manifest"},pt.createElement(Ea,{application:this.props.application,handleCopy:this.handleCopy}),pt.createElement(i,{onChange:this.handleRawManifestChange,value:this.state.rawManifest})),e.source===Lt.ARTIFACT&&pt.createElement(pt.Fragment,null,pt.createElement(me,{artifact:e.manifestArtifact,excludedArtifactTypePatterns:this.excludedManifestArtifactTypes,expectedArtifactId:e.manifestArtifactId,helpKey:"kubernetes.manifest.expectedArtifact",label:"Manifest Artifact",onArtifactEdited:this.onManifestArtifactEdited,onExpectedArtifactSelected:e=>this.onManifestArtifactSelected(e.id),pipeline:this.props.pipeline,stage:e}),pt.createElement(N,{label:"Expression Evaluation",helpKey:"kubernetes.manifest.skipExpressionEvaluation"},pt.createElement(ce,{checked:!0===e.skipExpressionEvaluation,onChange:e=>this.props.formik.setFieldValue("skipExpressionEvaluation",e.target.checked),text:"Skip SpEL expression evaluation"}))),pt.createElement(N,{label:"Required Artifacts to Bind",helpKey:"kubernetes.manifest.requiredArtifactsToBind"},pt.createElement(ya,{bindings:this.getRequiredArtifacts(),onChangeBindings:this.onRequiredArtifactsChanged,pipeline:this.props.pipeline,stage:e})),p.feature.deployManifestStageAdvancedConfiguration&&pt.createElement(pt.Fragment,null,pt.createElement("hr",null),pt.createElement("h4",null,"Deploy Configuration"),pt.createElement(N,{label:"Skip Spec Template Labels",helpKey:"kubernetes.manifest.skipSpecTemplateLabels"},pt.createElement(ce,{checked:!0===e.skipSpecTemplateLabels,onChange:e=>this.props.formik.setFieldValue("skipSpecTemplateLabels",e.target.checked)})),pt.createElement(N,{label:"Label Selectors",helpKey:"kubernetes.manifest.deployLabelSelectors"},pt.createElement(ce,{checked:null!=e.labelSelectors,onChange:e=>{e.target.checked?(this.props.formik.setFieldValue("labelSelectors",{selectors:[]}),this.props.formik.setFieldValue("allowNothingSelected",!1)):(this.props.formik.setFieldValue("labelSelectors",null),this.props.formik.setFieldValue("allowNothingSelected",null))}})),e.labelSelectors&&e.labelSelectors.selectors&&pt.createElement(pt.Fragment,null,pt.createElement(N,{label:"Labels"},pt.createElement(sa,{labelSelectors:this.props.formik.values.labelSelectors.selectors,onLabelSelectorsChange:this.handleLabelSelectorsChange})),pt.createElement(N,{label:"Allow nothing selected",helpKey:"kubernetes.manifest.deployLabelSelectors.allowNothingSelected"},pt.createElement(ce,{checked:!0===e.allowNothingSelected,onChange:e=>this.props.formik.setFieldValue("allowNothingSelected",e.target.checked)})))),pt.createElement("hr",null),pt.createElement(Na,{accounts:this.props.accounts,config:e.trafficManagement,onConfigChange:e=>this.props.formik.setFieldValue("trafficManagement",e),selectedAccount:e.account}))}}class Da extends pt.Component{constructor(e){super(e),this.destroy$=new Rt,this.fetchAccounts=()=>{It(a.getAllAccountDetailsForProvider("kubernetes")).pipe(Ot(this.destroy$)).subscribe(e=>{this.setState({accounts:e})})},this.state={accounts:[]};const{stage:t}=e,n=qe(t);n.source||(n.source=Lt.TEXT),n.skipExpressionEvaluation||(n.skipExpressionEvaluation=!1),n.trafficManagement||(n.trafficManagement=Ma),n.cloudProvider||(n.cloudProvider="kubernetes"),n.moniker||(n.moniker={}),n.moniker.app||(n.moniker.app=e.application.name),this.stage=n}componentDidMount(){this.fetchAccounts()}componentWillUnmount(){this.destroy$.next()}render(){return pt.createElement(ue,{...this.props,stage:this.stage,onChange:this.props.updateStage,render:e=>pt.createElement(xa,{...e,accounts:this.state.accounts})})}}const Fa="strategy.spinnaker.io/max-version-history",Ta={available:"success",stable:"success",paused:"warn",failed:"danger"};class Ra extends pt.Component{render(){const{manifest:e}=this.props;return null==e||null==e.status?null:Object.keys(e.status).map((t,n)=>{const a=e.status[t],s=Ta[t]||"",r=a.state,i=!r&&a.message;return pt.createElement("span",{key:n},r&&pt.createElement("span",{title:a.message,className:`pill ${s}`},t),i&&pt.createElement("span",{title:a.message,className:"pill warn"},t),(r||i)&&pt.createElement("span",null," "))})}}const Ia="kubernetesResource";class $a extends pt.Component{constructor(e){super(e),this.spinnakerKindStateMap={serverGroupManagers:"serverGroupManager",serverGroups:"serverGroup"},this.state={url:""},this.loadUrl()}canOpen(){return!!this.props.manifest.manifest&&!!this.state.url}spinnakerKindFromKubernetesKind(e,t){return t[Object.keys(t).find(t=>t.toLowerCase()===e.toLowerCase())]}resourceRegion(){return Ze(Je(this.props,["manifest","manifest","metadata","annotations","artifact.spinnaker.io/location"],""))}getStateParams(e){const t=this.props.manifest.manifest.kind.toLowerCase(),n=this.props.manifest.manifest.metadata.name,a=this.resourceRegion(),s={accountId:this.props.accountId,provider:"kubernetes",region:a,reg:a,[e]:`${t} ${n}`};return s.region||"namespace"!==t||e!==Ia||(s.region=n),s.region&&""!==s.region||(s.region="_"),s}loadUrl(){const e=Je(this.props,["manifest","manifest","kind"],""),{accountId:t}=this.props;a.getAccountDetails(t).then(t=>{const n=this.spinnakerKindFromKubernetesKind(e,t.spinnakerKindMap),a=this.spinnakerKindStateMap[n]||Ia,s=this.getStateParams(a),r=pe.$state.href(`home.applications.application.insight.clusters.${a}`,s);this.setState({url:r})})}render(){return this.canOpen()?pt.createElement("a",{href:this.state.url,className:"clickable"},this.props.linkName):null}}function Pa({account:e,manifest:t}){return pt.createElement(pt.Fragment,null,pt.createElement("dl",{className:"manifest-status",key:"manifest-status"},pt.createElement("dt",null,t.manifest.kind),pt.createElement("dd",null,pt.createElement(M,{displayText:!0,text:t.manifest.metadata.name,toolTip:`Copy ${t.manifest.metadata.name}`})," ",pt.createElement(Ra,{manifest:t}))),pt.createElement("div",{className:"manifest-support-links",key:"manifest-support-links"},pt.createElement(he,{linkName:"YAML",manifestText:mt(t.manifest),modalTitle:t.manifest.metadata.name}),pt.createElement($a,{linkName:"Details",manifest:t,accountId:e})),pt.createElement("div",{className:"manifest-events pad-left",key:"manifest-events"},pt.createElement(nn,{manifest:t})))}rn("dl.manifest-status {\n display: block;\n margin: 0;\n}\ndl.manifest-status dt,\ndl.manifest-status dd {\n display: inline-block;\n}\ndl.manifest-status dt {\n margin-right: 4px;\n}\n.manifest-support-links {\n margin: 0 0 1em;\n}\n.manifest-support-links a {\n margin-right: 2em;\n}\n.manifest-events {\n margin: 0 0 2em;\n}\n");rn(".deploy-status .collapsible-element {\n margin-bottom: 20px;\n}\n.deploy-status .collapsible-element .alert {\n margin-bottom: 0;\n}\n.deploy-status .collapsible-element .content {\n padding: 0;\n}\n");class Ga extends pt.Component{constructor(e){super(e),this.state={subscriptions:[],manifestIds:[]}}componentDidMount(){this.componentDidUpdate(this.props,this.state)}componentWillUnmount(){this.unsubscribeAll()}componentDidUpdate(e,t){const n=Je(this.props.stage,["context","outputs.manifests"],[]).filter(e=>!!e),a=n.map(e=>mn.manifestIdentifier(e)).sort();if(t.manifestIds.join("")!==a.join("")){this.unsubscribeAll();const e=n.map(e=>{const t=mn.manifestIdentifier(e);return{id:t,unsubscribe:this.subscribeToManifestUpdates(t,e),manifest:this.stageManifestToIManifest(e,this.props.stage.context.account)}});this.setState({subscriptions:e,manifestIds:a})}}subscribeToManifestUpdates(e,t){const n=mn.stageManifestToManifestParams(t,this.props.stage.context.account);return mn.subscribe(this.props.application,n,t=>{const n=this.state.subscriptions.findIndex(t=>t.id===e);if(-1!==n){const e={...this.state.subscriptions[n],manifest:t},a=[...this.state.subscriptions];a[n]=e,this.setState({subscriptions:a})}})}unsubscribeAll(){this.state.subscriptions.forEach(({unsubscribe:e})=>e())}stageManifestToIManifest(e,t){return{name:Je(e,"metadata.name",""),moniker:null,account:t,cloudProvider:"kubernetes",location:Je(e,"metadata.namespace",""),manifest:e,status:{},artifacts:[],events:[]}}render(){const{name:e,current:t,stage:n}=this.props,a=this.state.subscriptions.filter(e=>!!e.manifest).map(e=>e.manifest);return pt.createElement("div",{className:"deploy-status"},pt.createElement(ee,{name:e,current:t},p.feature.multiBlockFailureMessages?n.failureMessages.map(e=>pt.createElement(Ce,{key:e,maxHeight:150},pt.createElement(te,{stage:n,message:e}))):pt.createElement(te,{stage:n,message:n.failureMessage}),!!(null==a?void 0:a.length)&&pt.createElement("div",{className:"row"},pt.createElement("div",{className:"col-md-12"},pt.createElement("div",{className:"well alert alert-info"},a.map(e=>{const t=e.manifest.metadata.uid||mn.manifestIdentifier(e.manifest);return pt.createElement(Pa,{key:t,manifest:e,account:n.context.account})}))))))}}function Oa({application:e,formik:t,stageFieldUpdated:n}){const a=t.values;return pt.createElement("div",{className:"form-horizontal"},pt.createElement("h4",null,"Manifest"),pt.createElement("div",{className:"horizontal-rule"}),pt.createElement(ca,{application:e,selector:a,modes:[Yn.Static,Yn.Dynamic],onChange:()=>{n()},includeSpinnakerKinds:null}))}Ga.title="deployStatus",ne.pipeline.registerStage({label:"Deploy (Manifest)",description:"Deploy a Kubernetes manifest yaml/json file.",key:"deployManifest",cloudProvider:"kubernetes",component:Da,executionDetailsSections:[Ga,ae,fe],producesArtifacts:!0,supportsCustomTimeout:!0,validators:[{type:"requiredField",fieldName:"account",fieldLabel:"Account"},{type:"requiredField",fieldName:"source",fieldLabel:"Source"},{type:"custom",validate:(e,t)=>{const n=Je(t,"trafficManagement.enabled",!1),a=Je(t,"trafficManagement.options.services",[]);if(n&&Ye(a))return"Select at least one <strong>Service</strong> to enable Spinnaker-managed rollout strategy options.";if(n&&t.source===Lt.TEXT){const e=Je(t,"manifests",[]).filter(e=>"ReplicaSet"===e.kind),n=Je(t,"trafficManagement.options.strategy"),a=parseInt(Je(e,[0,"metadata","annotations",Fa]),10);if(n===Aa.key&&a<2)return`The max version history specified in your manifest conflicts with the behavior of the Red/Black rollout strategy. Please update your <strong>${Fa}</strong> annotation to a value greater than or equal to 2.`}return null}}],accountExtractor:e=>e.context.account?[e.context.account]:[],configAccountExtractor:e=>e.account?[e.account]:[],artifactExtractor:be.accumulateArtifacts(["manifestArtifactId","requiredArtifactIds"]),artifactRemover:ge.removeArtifactFromFields(["manifestArtifactId","requiredArtifactIds"])});const Ba="Find Artifacts From Resource (Manifest)";ne.pipeline.registerStage({label:Ba,description:"Finds artifacts from a Kubernetes resource.",key:"findArtifactsFromResource",cloudProvider:"kubernetes",component:function({application:e,pipeline:t,stage:n,updateStage:a,stageFieldUpdated:s}){return ft(()=>{nt(n,{app:e.name,cloudProvider:"kubernetes"})},[]),pt.createElement(ue,{application:e,pipeline:t,stage:n,onChange:a,render:e=>pt.createElement(Oa,{...e,stageFieldUpdated:s})})},executionDetailsSections:[ae,fe],producesArtifacts:!0,validators:fa(Ba),accountExtractor:e=>e.context.account?[e.context.account]:[],configAccountExtractor:e=>e.account?[e.account]:[]});const La=e=>pt.createElement("div",{className:"form-horizontal"},pt.createElement(N,{label:"Record Patch Annotation",helpKey:"kubernetes.manifest.patch.record"},pt.createElement(ce,{checked:e.record,onChange:t=>e.onRecordChange(t.target.checked)})),pt.createElement(N,{label:"Merge Strategy",helpKey:"kubernetes.manifest.patch.mergeStrategy",fieldColumns:3},pt.createElement(Ft,{clearable:!1,value:e.strategy,options:["strategic","json","merge"].map(e=>({value:e,label:e})),onChange:t=>e.onStrategyChange(t.value)})));class za extends pt.Component{constructor(e){super(e),this.excludedManifestArtifactTypes=[ie.DOCKER_IMAGE,ie.KUBERNETES,ie.FRONT50_PIPELINE_TEMPLATE,ie.EMBEDDED_BASE64,ie.MAVEN_FILE],this.onManifestArtifactSelected=e=>{this.props.formik.setFieldValue("manifestArtifactId",e),this.props.formik.setFieldValue("manifestArtifact",null)},this.onManifestArtifactEdited=e=>{this.props.formik.setFieldValue("manifestArtifactId",null),this.props.formik.setFieldValue("manifestArtifact",e)},this.getRequiredArtifacts=()=>{const{requiredArtifactIds:e,requiredArtifacts:t}=this.props.formik.values;return(e||[]).map(e=>({expectedArtifactId:e})).concat(t||[])},this.onRequiredArtifactsChanged=e=>{this.props.formik.setFieldValue("requiredArtifactIds",e.filter(e=>e.expectedArtifactId).map(e=>e.expectedArtifactId)),this.props.formik.setFieldValue("requiredArtifacts",e.filter(e=>e.artifact))},this.handleRawManifestChange=(e,t)=>{this.setState({rawManifest:e}),this.props.formik.setFieldValue("patchBody",t)},this.onManifestSelectorChange=()=>{this.props.stageFieldUpdated()},this.getSourceOptions=()=>it([Lt.TEXT,Lt.ARTIFACT],e=>({label:ct(e),value:e}));const t=Je(e.formik.values,"patchBody"),n=Je(e.formik.values,"source")===Lt.TEXT;this.state={rawManifest:!Ye(t)&&n?le(t):""}}render(){const e=this.props.formik.values;return pt.createElement("div",{className:"container-fluid form-horizontal"},pt.createElement("h4",null,"Resource to Patch"),pt.createElement(ca,{application:this.props.application,modes:[Yn.Static,Yn.Dynamic],onChange:this.onManifestSelectorChange,selector:e}),pt.createElement("hr",null),pt.createElement("h4",null,"Patch Content"),pt.createElement(N,{label:"Manifest Source",helpKey:"kubernetes.manifest.source"},pt.createElement(de,{options:this.getSourceOptions(),onChange:e=>this.props.formik.setFieldValue("source",e.target.value),value:e.source})),e.source===Lt.TEXT&&pt.createElement(N,{label:"Manifest"},pt.createElement(i,{onChange:this.handleRawManifestChange,value:this.state.rawManifest})),e.source===Lt.ARTIFACT&&pt.createElement(pt.Fragment,null,pt.createElement(me,{artifact:e.manifestArtifact,excludedArtifactTypePatterns:this.excludedManifestArtifactTypes,expectedArtifactId:e.manifestArtifactId,helpKey:"kubernetes.manifest.expectedArtifact",label:"Manifest Artifact",onArtifactEdited:this.onManifestArtifactEdited,onExpectedArtifactSelected:e=>this.onManifestArtifactSelected(e.id),pipeline:this.props.pipeline,stage:e})),pt.createElement(N,{label:"Required Artifacts to Bind",helpKey:"kubernetes.manifest.requiredArtifactsToBind"},pt.createElement(ya,{bindings:this.getRequiredArtifacts(),onChangeBindings:this.onRequiredArtifactsChanged,pipeline:this.props.pipeline,stage:e})),pt.createElement("hr",null),pt.createElement("h4",null,"Patch Options"),pt.createElement(La,{strategy:!!e.options&&e.options.mergeStrategy,onStrategyChange:e=>this.props.formik.setFieldValue("options.mergeStrategy",e),record:!!e.options&&e.options.record,onRecordChange:e=>this.props.formik.setFieldValue("options.record",e)}))}}class Ka extends pt.Component{constructor(e){super(e),nt(e.stage,{app:e.application.name,source:Lt.TEXT,options:{record:!0,mergeStrategy:"strategic"},cloudProvider:"kubernetes"}),nt(e.stage.options,{mergeStrategy:e.stage.options.strategy}),delete e.stage.options.strategy,e.stage.patchBody&&!Array.isArray(e.stage.patchBody)&&(e.stage.patchBody=[e.stage.patchBody]),this.stage=e.stage}render(){return pt.createElement(ue,{...this.props,stage:this.stage,onChange:this.props.updateStage,render:e=>pt.createElement(za,{...e,stageFieldUpdated:this.props.stageFieldUpdated})})}}class Ua extends Ga{}Ua.title="PatchStatus";const Va="Patch (Manifest)";ne.pipeline.registerStage({label:Va,description:"Patch a Kubernetes object in place.",key:"patchManifest",cloudProvider:"kubernetes",component:Ka,executionDetailsSections:[Ua,ae,fe],producesArtifacts:!0,supportsCustomTimeout:!0,validators:fa(Va),artifactExtractor:be.accumulateArtifacts(["manifestArtifactId","requiredArtifactIds"]),artifactRemover:ge.removeArtifactFromFields(["manifestArtifactId","requiredArtifactIds"])});class qa extends pt.Component{constructor(){super(...arguments),this.componentDidMount=()=>{nt(this.props.stage,{app:this.props.application.name,cloudProvider:"kubernetes"}),this.props.stageFieldUpdated()},this.onChange=e=>{Object.assign(this.props.stage,e),this.props.stageFieldUpdated()}}render(){const e={...this.props.stage};return pt.createElement("div",{className:"form-horizontal"},pt.createElement("h4",null,"Manifest"),pt.createElement("div",{className:"horizontal-rule"}),pt.createElement(ca,{application:this.props.application,selector:e,modes:[Yn.Static,Yn.Dynamic,Yn.Label],onChange:this.onChange,includeSpinnakerKinds:null}))}}class ja extends Ga{}ja.title="RolloutRestartStatus";const _a="Rollout Restart (Manifest)";ne.pipeline.registerStage({label:_a,description:"Perform a rolling restart of a manifest.",key:"rollingRestartManifest",cloudProvider:"kubernetes",component:qa,executionDetailsSections:[ja,ae],validators:fa(_a)});class Ha extends pt.Component{constructor(e){super(e),this.state={credentials:[]},this.excludedManifestArtifactTypes=[ie.DOCKER_IMAGE,ie.KUBERNETES,ie.FRONT50_PIPELINE_TEMPLATE,ie.MAVEN_FILE],this.outputOptions=[{label:"None",value:"none"},{label:"Logs",value:"propertyFile"},{label:"Artifact",value:"artifact"}],this.accountChanged=e=>{this.props.updateStageField({credentials:e,account:e})},this.handleRawManifestChange=(e,t)=>{t&&this.props.updateStageField({manifest:t[0]}),this.setState({rawManifest:e})},this.sourceChanged=e=>{this.props.updateStageField({consumeArtifactSource:e.value}),"none"===e.value&&this.props.updateStageField({propertyFile:null})},this.onArtifactSelected=e=>{this.props.updateStageField({consumeArtifactId:e.id})},this.onArtifactEdited=e=>{this.props.updateStageField({consumeArtifact:e,consumeArtifactId:e.id,consumeArtifactAccount:e.artifactAccount})},this.onManifestArtifactSelected=e=>{this.props.updateStageField({manifestArtifactId:e,manifestArtifact:null})},this.onManifestArtifactEdited=e=>{this.props.updateStageField({manifestArtifactId:null,manifestArtifact:e})},this.updatePropertyFile=e=>{this.props.updateStageField({propertyFile:e.target.value})},this.getSourceOptions=()=>it([Lt.TEXT,Lt.ARTIFACT],e=>({label:ct(e),value:e})),this.getRequiredArtifacts=()=>{const{requiredArtifactIds:e,requiredArtifacts:t}=this.props.stage;return(e||[]).map(e=>({expectedArtifactId:e})).concat(t||[])},this.onRequiredArtifactsChanged=e=>{this.props.updateStageField({requiredArtifactIds:e.filter(e=>e.expectedArtifactId).map(e=>e.expectedArtifactId)}),this.props.updateStageField({requiredArtifacts:e.filter(e=>e.artifact)})};const{stage:t,application:n}=this.props;t.application||(t.application=n.name),t.source||(t.source=Lt.TEXT)}initRawManifest(){const{stage:e}=this.props;e.manifest&&this.setState({rawManifest:le([e.manifest])})}componentDidMount(){this.props.updateStageField({cloudProvider:"kubernetes"}),a.getAllAccountDetailsForProvider("kubernetes").then(e=>{this.setState({credentials:e})}),this.initRawManifest()}logSourceForm(){const{stage:e}=this.props;return pt.createElement(N,{label:"Container Name",helpKey:"kubernetes.runJob.captureSource.containerName"},pt.createElement("input",{className:"form-control input-sm",type:"text",value:e.propertyFile,onChange:this.updatePropertyFile}))}artifactForm(){const{stage:e,pipeline:t}=this.props;return pt.createElement(N,{label:"Artifact"},pt.createElement(re,{pipeline:t,stage:e,artifact:e.consumeArtifact,excludedArtifactTypePatterns:[],expectedArtifactId:e.consumeArtifactId,onExpectedArtifactSelected:this.onArtifactSelected,onArtifactEdited:this.onArtifactEdited}))}render(){const{stage:e}=this.props;let t=pt.createElement("div",null);return"propertyFile"===e.consumeArtifactSource?t=this.logSourceForm():"artifact"===e.consumeArtifactSource&&(t=this.artifactForm()),pt.createElement("div",{className:"container-fluid form-horizontal"},pt.createElement("h4",null,"Basic Settings"),pt.createElement(Ut,{selectedAccount:e.account||"",accounts:this.state.credentials,onAccountSelect:e=>this.accountChanged(e)}),pt.createElement("h4",null,"Manifest Configuration"),pt.createElement(N,{label:"Manifest Source",helpKey:"kubernetes.manifest.source"},pt.createElement(de,{options:this.getSourceOptions(),onChange:e=>this.props.updateStageField({source:e.target.value}),value:e.source})),e.source===Lt.TEXT&&pt.createElement(i,{value:this.state.rawManifest,onChange:this.handleRawManifestChange}),e.source===Lt.ARTIFACT&&pt.createElement(pt.Fragment,null,pt.createElement(me,{artifact:e.manifestArtifact,excludedArtifactTypePatterns:this.excludedManifestArtifactTypes,expectedArtifactId:e.manifestArtifactId,helpKey:"kubernetes.manifest.expectedArtifact",label:"Manifest Artifact",onArtifactEdited:this.onManifestArtifactEdited,onExpectedArtifactSelected:e=>this.onManifestArtifactSelected(e.id),pipeline:this.props.pipeline,stage:e})),pt.createElement(N,{label:"Required Artifacts to Bind",helpKey:"kubernetes.manifest.requiredArtifactsToBind"},pt.createElement(ya,{bindings:this.getRequiredArtifacts(),onChangeBindings:this.onRequiredArtifactsChanged,pipeline:this.props.pipeline,stage:e})),pt.createElement("h4",null,"Output"),pt.createElement(N,{label:"Capture Output From",helpKey:"kubernetes.runJob.captureSource"},pt.createElement("div",null,pt.createElement(Ft,{clearable:!1,options:this.outputOptions,value:e.consumeArtifactSource,onChange:this.sourceChanged}))),t)}}class Wa extends pt.Component{createdPodNames(e){return tt(e,e=>e.status.startTime).map(e=>e.name)}render(){const{stage:e,name:t,current:n}=this.props,{context:a}=e,s=Je(e,["context","jobStatus","location"],""),r=s?Je(a,["deploy.jobs",s])[0]:"",i=Je(e,["context","execution","logs"]),o=Je(e.context,"jobStatus.pods",[]),l=(Ye(o)?[Je(e,["context","jobStatus","mostRecentPodName"],"")]:this.createdPodNames(o)).map(e=>new ve(e));return pt.createElement(ee,{name:t,current:n},pt.createElement(te,{stage:e,message:e.failureMessage}),pt.createElement("div",{className:"row"},pt.createElement("div",{className:"col-md-9"},pt.createElement("dl",{className:"dl-narrow dl-horizontal"},pt.createElement("dt",null,"Account"),pt.createElement("dd",null,pt.createElement(S,{account:a.account})),s&&pt.createElement(pt.Fragment,null,pt.createElement("dt",null,"Namespace"),pt.createElement("dd",null,e.context.jobStatus.location),pt.createElement("dt",null,"Logs"),pt.createElement("dd",null,pt.createElement(ke,{deployedName:r,account:this.props.stage.context.account,location:s,application:this.props.application,externalLink:i,podNamesProviders:l}))),!s&&pt.createElement("div",{className:"well"},"Collecting additional details...")))))}}function Ja({application:e,formik:t,stageFieldUpdated:n}){const a=t.values;return pt.createElement("div",{className:"form-horizontal"},pt.createElement("h4",null,"Manifest"),pt.createElement("div",{className:"horizontal-rule"}),pt.createElement(ca,{application:e,selector:a,modes:[Yn.Static,Yn.Dynamic],onChange:()=>{n()},includeSpinnakerKinds:null}),pt.createElement("h4",null,"Settings"),pt.createElement("div",{className:"horizontal-rule"}),pt.createElement(N,{label:"Revisions Back",helpKey:"kubernetes.manifest.undoRollout.revisionsBack",fieldColumns:4,groupClassName:"form-group form-inline"},pt.createElement("div",{className:"input-group"},pt.createElement(x,{inputClassName:"input-sm highlight-pristine",onChange:e=>{t.setFieldValue("numRevisionsBack",e.target.value)},value:a.numRevisionsBack,min:1}),pt.createElement("span",{className:"input-group-addon"},"1"===a.numRevisionsBack?"revision":"revisions"))))}Wa.title="runJobConfig",ne.pipeline.registerStage({label:"Run Job (Manifest)",description:"Run a Kubernetes Job manifest yaml/json file.",key:"runJobManifest",alias:"runJob",addAliasToConfig:!0,cloudProvider:"kubernetes",component:Ha,executionDetailsSections:[Wa,Ga,ae],supportsCustomTimeout:!0,producesArtifacts:!0,restartable:!0,validators:[{type:"custom",validate:(e,t,n,a)=>t.manifest&&t.manifest.kind&&"Job"!==t.manifest.kind?"Run Job (Manifest) only accepts manifest of kind Job.":""}]});const Xa="Undo Rollout (Manifest)",Za="undoRolloutManifest";function Qa({application:e,formik:t,stageFieldUpdated:n}){const a=t.values;return pt.createElement("div",{className:"form-horizontal"},pt.createElement("h4",null,"Manifest"),pt.createElement("div",{className:"horizontal-rule"}),pt.createElement(ca,{application:e,selector:a,modes:[Yn.Static,Yn.Dynamic],onChange:()=>{n()},includeSpinnakerKinds:null}),pt.createElement("h4",null,"Settings"),pt.createElement("div",{className:"horizontal-rule"}),pt.createElement(En,{options:a,onChange:()=>{n()}}))}ne.pipeline.registerStage({label:Xa,description:"Rollback a manifest a target number of revisions.",key:Za,cloudProvider:"kubernetes",component:function({application:e,pipeline:t,stage:n,updateStage:a,stageFieldUpdated:s}){return ft(()=>{nt(n,{cloudProvider:"kubernetes"}),n.isNew&&(n.numRevisionsBack=1)},[]),pt.createElement(ue,{application:e,pipeline:t,stage:n,onChange:a,render:e=>pt.createElement(Ja,{...e,stageFieldUpdated:s})})},executionDetailsSections:[Ca(Za),ae],validators:[...fa(Xa),{type:"requiredField",fieldName:"numRevisionsBack",fieldLabel:"Number of Revisions"}]});const Ya="Scale (Manifest)",es="scaleManifest";ne.pipeline.registerStage({label:Ya,description:"Scale a Kubernetes object created from a manifest.",key:es,cloudProvider:"kubernetes",component:function({application:e,pipeline:t,stage:n,updateStage:a,stageFieldUpdated:s}){return ft(()=>{nt(n,{app:e.name,cloudProvider:"kubernetes"}),n.isNew&&(n.replicas=0)},[]),pt.createElement(ue,{application:e,pipeline:t,stage:n,onChange:a,render:e=>pt.createElement(Qa,{...e,stageFieldUpdated:s})})},executionDetailsSections:[Ca(es),ae],accountExtractor:e=>e.context.account?[e.context.account]:[],configAccountExtractor:e=>e.account?[e.account]:[],validators:[...fa(Ya),{type:"requiredField",fieldName:"replicas",fieldLabel:"Replicas"}]});class ts extends pt.Component{constructor(){super(...arguments),this.componentDidMount=()=>{nt(this.props.stage,{app:this.props.application.name,cloudProvider:"kubernetes"}),this.props.stageFieldUpdated()},this.onChange=e=>{Object.assign(this.props.stage,e),this.props.stageFieldUpdated()}}render(){const e={...this.props.stage};return pt.createElement("div",{className:"form-horizontal"},pt.createElement("h4",null,"Manifest"),pt.createElement("div",{className:"horizontal-rule"}),pt.createElement(ca,{application:this.props.application,selector:e,modes:[Yn.Static,Yn.Dynamic],onChange:this.onChange,includeSpinnakerKinds:["serverGroups"]}))}}const ns="Disable (Manifest)",as="disableManifest",ss="spinnaker.kubernetes.v2.pipeline.stage.disableManifestStage";e(ss,[Ee]).config(()=>{ne.pipeline.registerStage({label:ns,description:"Disable a Kubernetes manifest.",key:as,cloudProvider:"kubernetes",component:ts,executionDetailsSections:[Ca(as),ae],supportsCustomTimeout:!0,accountExtractor:e=>e.account?[e.account]:[],configAccountExtractor:e=>e.account?[e.account]:[],validators:fa(ns)})});const rs="Enable (Manifest)",is="enableManifest",os="spinnaker.kubernetes.v2.pipeline.stage.enableManifestStage";e(os,[Ee]).config(()=>{ne.pipeline.registerStage({label:rs,description:"Enable a Kubernetes manifest.",key:is,cloudProvider:"kubernetes",component:ts,executionDetailsSections:[Ca(is),ae],supportsCustomTimeout:!0,accountExtractor:e=>e.account?[e.account]:[],configAccountExtractor:e=>e.account?[e.account]:[],validators:fa(rs)})});ye.registerValidator("manifestSelector",new class{validate(e,t,n,a){const[s,r]=(t.manifestName||"").split(" ");return r||s?r?s?null:"<strong>Kind</strong> is a required field.":"<strong>Name</strong> is a required field.":"<strong>Name</strong> and <strong>Kind</strong> are required fields."}});const ls="spinnaker.core.rawresource.dataSource",cs="k8s",ds=`.insight.${cs}`,ms=e=>we("applications").path(e.name,"rawResources").get(),us=(e,t)=>Promise.resolve(t);e(ls,[]).run(()=>{Se.registerDataSource({key:cs,label:"Kubernetes",category:Ae,sref:ds,primary:!0,icon:"fas fa-xs fa-fw fa-th-large",iconName:"spMenuK8s",loader:ms,onLoad:us,providerField:"cloudProvider",credentialsField:"account",regionField:"region",description:"Collections of kubernetes resources",defaultData:[]})});const ps=class e{static namespaceDisplayName(t){return null===t||""===t?e.GLOBAL_LABEL:t}static resourceKey(e){return null===e?"":""===e.namespace?e.account+"-"+e.kind+"-"+e.name:e.account+"-"+e.namespace+"-"+e.kind+"-"+e.name}};ps.GLOBAL_LABEL="(global)";let hs=ps;const Cs=class e{constructor(){this.subscribers=[]}static getInstance(t){let n=e.intances[t];return e.intances[t]||(e.intances[t]=new e,n=e.intances[t]),n}subscribe(e){return this.subscribers.push(e),()=>this.subscribers=this.subscribers.filter(t=>t!==e)}unsubscribe(e){const t=this.subscribers.indexOf(e);t>-1&&this.subscribers.splice(t,1)}publish(e){this.subscribers.forEach(t=>t(e))}};Cs.intances={};let fs=Cs;rn(".RawResource.card {\n background-color: white;\n padding: 1em;\n margin-top: 1em;\n margin-left: 3em;\n border: thin solid lightgrey;\n}\n.RawResource.clickable-row {\n background-color: var(--color-white);\n border: 1px solid var(--color-alto);\n margin: 5px 15px 3px;\n position: relative;\n z-index: 1;\n}\n.RawResource.clickable-row.active {\n border-color: var(--color-accent-g1);\n background-color: var(--color-accent-g3);\n}\n.RawResource.clickable-row:hover {\n border-color: var(--color-accent-g1);\n box-shadow: 0 0 4px 2px var(--color-accent-g1);\n z-index: 2;\n}\n.RawResource.clickable-row.managed {\n margin: 5px;\n border-style: dashed;\n}\n.RawResource .details {\n color: grey;\n display: flex;\n}\n.RawResource .details .column {\n margin-right: 5em;\n}\n.RawResource .details .column .title {\n margin-right: 1em;\n}\n.RawResource .title {\n margin: 0;\n}\n.RawResourceGroup {\n margin-top: 2em;\n}\n.RawResourceGroup .header {\n display: flex;\n height: 37px;\n padding: 0;\n color: var(--color-primary);\n}\n.RawResourceGroup .title {\n display: inline-block;\n padding-left: 1em;\n}\n.RawResourceGroup .pipeline-toggle {\n background-color: var(--color-alabaster);\n display: inline-block;\n padding: 10px 10px 10px 0;\n height: 36px;\n flex: 0 0 auto;\n}\n.RawResourceGroup .shadowed {\n position: relative;\n display: flex;\n}\n");class gs extends pt.Component{constructor(e){super(e)}render(){const{account:e,name:t,region:n}=this.props.resource,a={account:e,name:t,region:n};return pt.createElement(Et,{class:"active"},pt.createElement(kt,{to:".rawResourceDetails",params:a},pt.createElement("div",{className:"RawResource card clickable clickable-row"},pt.createElement("h4",{className:"title"},pt.createElement(Me,{provider:"kubernetes",height:"20px",width:"20px"}),this.props.resource.kind," ",this.props.resource.displayName),pt.createElement("div",{className:"details"},pt.createElement("div",{className:"column"},pt.createElement("div",{className:"title"},"account:"),pt.createElement("div",null,this.props.resource.account)),pt.createElement("div",{className:"column"},pt.createElement("div",{className:"title"},"namespace:"),pt.createElement("div",null,hs.namespaceDisplayName(this.props.resource.namespace))),pt.createElement("div",{className:"column"},pt.createElement("div",{className:"title"},"apiVersion:"),pt.createElement("div",null,this.props.resource.apiVersion))))))}}class bs extends pt.Component{constructor(e){super(e),this.state={open:!0}}render(){return pt.createElement("div",{className:"RawResourceGroup"},pt.createElement("div",{className:"clickable sticky-header header",onClick:this.onHeaderClick.bind(this)},pt.createElement("span",{className:"glyphicon pipeline-toggle glyphicon-chevron-"+(this.state.open?"down":"right")}),pt.createElement("div",{className:"shadowed"},pt.createElement("h4",{className:"group-title"},this.props.title))),pt.createElement("div",{className:"items"+(this.state.open?"":" hidden")},this.props.children))}onHeaderClick(){this.setState({open:!this.state.open})}}class vs extends pt.Component{constructor(e){super(e)}buildGroupByModel(e){const t=e.map(e=>String(e[this.props.groupBy]));return Object.assign({},...t.map(t=>({[t]:e.filter(e=>String(e[this.props.groupBy])===t)})))}groupTitle(e){return"namespace"==this.props.groupBy?hs.namespaceDisplayName(e):e}render(){const e=this.buildGroupByModel(this.props.resources);return pt.createElement("div",{className:"RawResourceGroups"},...Object.entries(e).map(([e,t])=>"undefined"!==e?pt.createElement(bs,{title:this.groupTitle(e),key:e},...t.map(e=>pt.createElement(gs,{resource:e,key:hs.resourceKey(e)}))):pt.createElement(pt.Fragment,null)))}}rn(".K8sResources {\n width: 100%;\n}\n.K8sResources .StandardFieldLayout {\n width: 25%;\n}\n.K8sResources .StandardFieldLayout .StandardFieldLayout_Label {\n min-width: 72px;\n}\n");class ks extends pt.Component{constructor(e){super(e),this.filterPubSub=fs.getInstance(this.props.app.name),this.sub=this.onFilterChange.bind(this),this.groupByChanged=e=>{this.setState({groupBy:e.target.value.toLowerCase()})},this.dataSource=this.props.app.getDataSource(cs),this.state={groupBy:"none",filters:null,rawResources:[]},this.filterPubSub.subscribe(this.sub)}componentWillUnmount(){this.filterPubSub.unsubscribe(this.sub)}onFilterChange(e){this.setState({...this.state,filters:e})}async componentDidMount(){await this.dataSource.ready(),this.setState({...this.state,groupBy:this.state.groupBy,rawResources:await this.dataSource.data.sort((e,t)=>e.name.localeCompare(t.name))})}render(){const e=["None","Account","Kind","Namespace"];return pt.createElement("div",{className:"K8sResources"},pt.createElement("div",{className:"header row"},pt.createElement(Ne,{onChange:this.groupByChanged,value:this.state.groupBy.charAt(0).toUpperCase()+this.state.groupBy.substr(1),name:"groupBy",label:"Group By",input:t=>pt.createElement(H,{...t,inputClassName:"groupby",stringOptions:e,clearable:!1})})),pt.createElement("div",{className:"content"},"none"===this.state.groupBy?pt.createElement(pt.Fragment,null,...this.state.rawResources.filter(e=>this.matchFilters(e)).map(e=>pt.createElement(gs,{key:hs.resourceKey(e),resource:e}))):pt.createElement(vs,{resources:this.state.rawResources.filter(e=>this.matchFilters(e)),groupBy:this.state.groupBy})))}matchFilters(e){if(null==this.state.filters)return!0;const t=Object.values(this.state.filters.accounts).every(e=>!e)||this.state.filters.accounts[e.account],n=Object.values(this.state.filters.kinds).every(e=>!e)||this.state.filters.kinds[e.kind],a=Object.values(this.state.filters.namespaces).every(e=>!e)||this.state.filters.namespaces[e.namespace];return t&&n&&a}}class Es extends pt.Component{constructor(e){super(e),this.filterPubSub=fs.getInstance(this.props.app.name),this.dataSource=this.props.app.getDataSource(cs),this.state={accounts:{},kinds:{},namespaces:{},displayNamespaces:{}}}async componentDidMount(){await this.dataSource.ready();const e=Object.assign({},...this.dataSource.data.map(e=>({[e.namespace]:!1}))),t={...e};""in t&&(delete t[""],t[hs.GLOBAL_LABEL]=!1),this.setState({accounts:Object.assign({},...this.dataSource.data.map(e=>({[e.account]:!1}))),kinds:Object.assign({},...this.dataSource.data.map(e=>({[e.kind]:!1}))),namespaces:e,displayNamespaces:t})}render(){return pt.createElement("div",{className:"content"},pt.createElement(xe,{heading:"Kind",expanded:!0},...Object.keys(this.state.kinds).sort((e,t)=>e.localeCompare(t)).map(e=>pt.createElement(De,{heading:e,key:e,sortFilterType:this.state.kinds,onChange:this.onCheckbox.bind(this)}))),pt.createElement(xe,{heading:"Account",expanded:!0},...Object.keys(this.state.accounts).sort((e,t)=>e.localeCompare(t)).map(e=>pt.createElement(De,{heading:e,key:e,sortFilterType:this.state.accounts,onChange:this.onCheckbox.bind(this)}))),pt.createElement(xe,{heading:"Namespace",expanded:!0},...Object.keys(this.state.displayNamespaces).sort((e,t)=>e.localeCompare(t)).map(e=>pt.createElement(De,{heading:e,key:e,sortFilterType:this.state.displayNamespaces,onChange:this.onNsCheckbox.bind(this)}))))}onNsCheckbox(){const{namespaces:e,displayNamespaces:t}={...this.state};for(const n in t)n==hs.GLOBAL_LABEL&&(e[""]=t[n]),e[n]=t[n];this.setState({namespaces:e}),this.filterPubSub.publish(this.state)}onCheckbox(){this.setState(this.state),this.filterPubSub.publish(this.state)}}Fe("k8s.rawResource.details");class ys extends pt.Component{constructor(e){super(e),this.destroy$=new Rt,this.props$=new Rt,this.deletedRawResource=()=>{var e,t,n,a;const{app:s}=this.props,{account:r,manifest:i}=this.state,o=null!=(n=null==(t=null==(e=null==i?void 0:i.manifest)?void 0:e.metadata)?void 0:t.name)?n:null,l=null==(a=null==i?void 0:i.manifest)?void 0:a.kind,c={application:s,title:"Deleting "+o};_.confirm({header:"Are you sure you want to delete the "+l+" "+o+"?",buttonText:"Delete",account:r,taskMonitorConfig:c,submitMethod:()=>{Te.log({category:"RawResource",action:"Delete clicked"});const e={manifestName:this.state.name,location:this.state.region,account:this.state.account,reason:null,cloudProvider:"kubernetes",options:{cascading:!1}};return u.deleteManifest(e,this.props.app)}})},this.handleEditClick=()=>{Te.log({category:"RawResource",action:"Edit clicked"}),this.editRawResource()},this.state={account:null,application:null,name:null,region:null,loading:!0,manifest:null}}componentDidMount(){this.setState({account:this.props.$stateParams.account,application:this.props.$stateParams.application,name:this.props.$stateParams.name,region:this.props.$stateParams.region});const e={account:this.props.$stateParams.account,location:""==this.props.$stateParams.region?"_":this.props.$stateParams.region,name:this.props.$stateParams.name};this.unsubscribeManifest=mn.subscribe(this.props.app,e,e=>{null!=this.unsubscribeManifest&&this.setState({manifest:e,loading:!1})})}componentWillReceiveProps(e){this.props$.next(e)}componentWillUnmount(){this.destroy$.next(),this.unsubscribeManifest&&(this.unsubscribeManifest(),this.unsubscribeManifest=null)}editRawResource(){const{app:e}=this.props,{account:t,application:n,manifest:a}=this.state;Kt.buildNewManifestCommand(e,a.manifest,{app:n},t).then(t=>{_t.show({title:"Edit Manifest",application:e,command:t})})}render(){var e,t,n,a,s,r;const{account:i,region:o,manifest:l}=this.state,c=null==(e=null==l?void 0:l.manifest)?void 0:e.kind,d=null==(t=null==l?void 0:l.manifest)?void 0:t.apiVersion,m=null==(n=null==l?void 0:l.manifest)?void 0:n.metadata,u=null==m?void 0:m.name,h=Je(m,"creationTimestamp")&&vt.fromISO(m.creationTimestamp).toMillis();return pt.createElement("div",{className:"details-panel"},pt.createElement("div",{className:"header"},pt.createElement("div",{className:"close-button"},pt.createElement(kt,{to:"^"},pt.createElement("span",{className:"glyphicon glyphicon-remove"}))),this.state.loading?pt.createElement("div",{className:"horizontal center middle"},pt.createElement(F,{size:"small"})):pt.createElement("div",{className:"header-text horizontal middle"},pt.createElement(Me,{provider:"kubernetes",height:"36px",width:"36px"}),pt.createElement("h3",{className:"horizontal middle space-between flex-1"},c," ",u)),!this.state.loading&&p.kubernetesAdHocInfraWritesEnabled&&pt.createElement("div",{className:"actions"},pt.createElement(yt,{className:"dropdown",id:"resource-actions-dropdown"},pt.createElement(yt.Toggle,{className:"btn btn-sm btn-primary dropdown-toggle"},pt.createElement("span",null,c," Actions")),pt.createElement(yt.Menu,null,pt.createElement("li",{key:"action-edit",id:"resource-action-edit"},pt.createElement("a",{onClick:this.handleEditClick},"Edit")),pt.createElement("li",{key:"action-delete",id:"resource-action-delete"},pt.createElement("a",{onClick:this.deletedRawResource},"Delete")))))),!this.state.loading&&pt.createElement("div",{className:"content"},pt.createElement(E,{heading:"Information",defaultExpanded:!0},pt.createElement("dl",{className:"dl-horizontal dl-narrow"},pt.createElement("dt",null,"Created"),pt.createElement("dd",null,y(h)),pt.createElement("dt",null,"Account"),pt.createElement("dd",null,pt.createElement(S,{account:i})),pt.createElement("dt",null,"API Version"),pt.createElement("dd",null,d),pt.createElement("dt",null,"Kind"),pt.createElement("dd",null,c),pt.createElement("dt",null,"Namespace"),pt.createElement("dd",null,hs.namespaceDisplayName(o)))),pt.createElement(E,{key:"status",heading:"status",defaultExpanded:!0},pt.createElement("ul",null,(null!=(r=null==(s=null==(a=null==l?void 0:l.manifest)?void 0:a.status)?void 0:s.conditions)?r:[]).map(e=>pt.createElement("li",{key:e.type+e.lastTransitionTime,style:{marginBottom:"10px"}},pt.createElement(wn,{condition:e}))))),pt.createElement(E,{key:"events",heading:"events",defaultExpanded:!0},pt.createElement(nn,{manifest:l})),pt.createElement(E,{key:"labels",heading:"labels",defaultExpanded:!0},pt.createElement(on,{manifest:Je(l,["manifest"],{})}))))}}const Ss="spinnaker.kubernetes.rawresource.states";e(Ss,[Re]).config(["applicationStateProvider",e=>{const t={name:"rawResourceDetails",url:"/rawResourceDetails/:account/:region/:name",views:{"detail@../insight":{component:ys,$type:"react"}},resolve:{account:["$stateParams",e=>e.account],name:["$stateParams",e=>e.name],region:["$stateParams",e=>e.region]},data:{pageTitleDetails:{title:"Raw Resource Details",nameParam:"name",accountParam:"account"},history:{type:"rawResources"}}},n={url:"/kubernetes",name:"k8s",views:{nav:{component:Es,$type:"react"},master:{component:ks,$type:"react"}},data:{pageTitleSection:{title:"Kubernetes"}},children:[]};e.addInsightState(n),e.addInsightDetailState(t)}]);const As="spinnaker.kubernetes.rawresource";e(As,[ls,Ss]);const ws="spinnaker.kubernetes.react";e(ws,[]).run(["$injector",function(e){en.initialize(e)}]);class Ms extends pt.Component{constructor(e){super(e),this.state={loading:!0,manifest:null}}componentDidMount(){const{kubernetesResource:e}=this.props,t={account:e.accountId,location:e.region,name:e.kubernetesResource};this.unsubscribeManifest=mn.subscribe(this.props.app,t,e=>{null!=this.unsubscribeManifest&&this.setState({manifest:e,loading:!1})})}componentWillUnmount(){this.unsubscribeManifest&&(this.unsubscribeManifest(),this.unsubscribeManifest=null)}render(){const{manifest:e}=this.state,t=Je(e,["manifest","metadata"],null),n=Je(t,"creationTimestamp")&&vt.fromISO(t.creationTimestamp).toMillis();return pt.createElement("div",{className:"details-panel"},pt.createElement("div",{className:"header"},pt.createElement("div",{className:"close-button"},pt.createElement("a",{className:"btn btn-link"},pt.createElement(kt,{to:"^"},pt.createElement("span",{className:"glyphicon glyphicon-remove"})))),this.state.loading?pt.createElement("div",{className:"horizontal center middle"},pt.createElement(F,{size:"small"})):pt.createElement("div",{className:"header-text horizontal middle"},pt.createElement(Me,{provider:"kubernetes",height:"36px",width:"36px"}),pt.createElement("h3",{className:"horizontal middle space-between flex-1"},Je(t,["name"],"")))),!this.state.loading&&pt.createElement("div",{className:"content"},pt.createElement(E,{heading:"Information"},pt.createElement("dl",{className:"dl-horizontal dl-narrow"},pt.createElement("dt",null,"Created"),pt.createElement("dd",null,y(n)),pt.createElement("dt",null,"Account"),pt.createElement("dd",null,pt.createElement(S,{account:Je(e,["account"],"")})),pt.createElement("dt",null,"Namespace"),pt.createElement("dd",null,Je(t,["namespace"],"")),pt.createElement("dt",null,"Kind"),pt.createElement("dd",null,Je(e,["manifest","kind"],"")))),pt.createElement(E,{key:"status",heading:"status",defaultExpanded:!0},pt.createElement("ul",null,Je(e,["manifest","status","conditions"],[]).map(e=>pt.createElement("li",{key:e.type+e.lastTransitionTime,style:{marginBottom:"10px"}},pt.createElement(wn,{condition:e}))))),pt.createElement(E,{key:"events",heading:"events",defaultExpanded:!0},pt.createElement(nn,{manifest:e})),pt.createElement(E,{key:"labels",heading:"labels",defaultExpanded:!0},pt.createElement(on,{manifest:Je(e,["manifest"],{})}))))}}const Ns="spinnaker.core.kubernetesResource.states";e(Ns,[Re]).config(["applicationStateProvider",e=>{const t={name:"kubernetesResource",url:"/manifest/:provider/:accountId/:region/:kubernetesResource",views:{"detail@../insight":{component:Ms,$type:"react"}},resolve:{accountId:["$stateParams",e=>e.accountId],kubernetesResource:["$stateParams",e=>e]},data:{pageTitleDetails:{title:"Generic Kubernetes Resource Details",nameParam:"kubernetesResource",accountParam:"accountId",regionParam:"region"},history:{type:"kubernetesResource"}}};e.addInsightDetailState(t)}]);class xs{constructor(e,t,n,a,s,r,i){this.$uibModal=e,this.$state=t,this.$scope=n,this.securityGroupReader=a,this.app=r,this.$q=i,this.state={loading:!0};const o=r.getDataSource("securityGroups");o.ready().then(()=>{this.extractSecurityGroup(s),this.$scope.isDisabled=!p.kubernetesAdHocInfraWritesEnabled,o.onRefresh(this.$scope,()=>this.extractSecurityGroup(s))}).catch(()=>this.autoClose())}deleteSecurityGroup(){this.$uibModal.open({templateUrl:"kubernetes/src/manifest/delete/delete.html",controller:"kubernetesV2ManifestDeleteCtrl",controllerAs:"ctrl",resolve:{coordinates:{name:this.securityGroup.name,namespace:this.securityGroup.region,account:this.securityGroup.account},application:this.app,manifestController:()=>null}})}editSecurityGroup(){Kt.buildNewManifestCommand(this.app,this.manifest.manifest,this.securityGroup.moniker,this.securityGroup.account).then(e=>{_t.show({title:"Edit Manifest",application:this.app,command:e})})}extractSecurityGroup({accountId:e,name:t,region:n}){this.$q.all([this.securityGroupReader.getSecurityGroupDetails(this.app,e,"kubernetes",n,"",t),h.getManifest(e,n,t)]).then(([e,t])=>{if(!e)return this.autoClose();this.securityGroup=e,this.manifest=t,this.state.loading=!1})}autoClose(){this.$scope.$$destroyed||(this.$state.params.allowModalToStayOpen=!0,this.$state.go("^",null,{location:"replace"}))}}xs.$inject=["$uibModal","$state","$scope","securityGroupReader","resolvedSecurityGroup","app","$q"];const Ds="spinnaker.kubernetes.securityGroupDetails.controller";e(Ds,[Ie]).controller("kubernetesV2SecurityGroupDetailsCtrl",xs),window.angular.module("ng").run(["$templateCache",function(e){e.put("kubernetes/src/manifest/delete/delete.html",'<div modal-page class="confirmation-modal">\n <task-monitor monitor="ctrl.taskMonitor"></task-monitor>\n <form role="form" name="deleteForm">\n <modal-close dismiss="$dismiss()"></modal-close>\n <div class="modal-header">\n <h4 class="modal-title">Delete {{ctrl.command.manifestName | robotToHuman}} in {{ctrl.command.location}}</h4>\n </div>\n <div ng-if="ctrl.manifestController">\n <div class="alert alert-warning">\n Manifest is controlled by\n <a\n ui-sref="^.serverGroupManager({\n accountId: ctrl.command.account,\n region: ctrl.command.location,\n serverGroupManager: ctrl.manifestController,\n provider: \'kubernetes\'})"\n >\n {{ctrl.manifestController | robotToHuman }}\n </a>\n and may be recreated after deletion.\n </div>\n </div>\n <div class="modal-body confirmation-modal">\n <kubernetes-delete-manifest-options-form options="ctrl.command.options"></kubernetes-delete-manifest-options-form>\n <task-reason command="ctrl.command"></task-reason>\n </div>\n <div class="modal-footer">\n <user-verification account="ctrl.command.account" verification="ctrl.verification"></user-verification>\n <button type="submit" ng-click="ctrl.delete()" style="display: none"></button>\n \x3c!-- Allows form submission via enter keypress--\x3e\n <button class="btn btn-default" ng-click="ctrl.cancel()">Cancel</button>\n <button\n type="submit"\n class="btn btn-primary"\n ng-click="ctrl.delete()"\n ng-disabled="!ctrl.isValid() || !deleteForm.$valid"\n >\n Submit\n </button>\n </div>\n </form>\n</div>\n')}]);class Fs{resolveIndexedSecurityGroup(e,t,n){return e[t.account][t.region][n]}}const Ts="spinnaker.kubernetes.securityGroupTransformer";e(Ts,[]).service("kubernetesV2SecurityGroupTransformer",class{normalizeSecurityGroup(e){return Promise.resolve(e)}});const Rs=class{};Rs.ENABLE_MANIFEST_OPERATION="enableManifest",Rs.DISABLE_MANIFEST_OPERATION="disableManifest",Rs.enable=(e,t,n)=>$e.executeTask({job:[{account:e.account,cloudProvider:"kubernetes",location:e.location,manifestName:e.name,type:Rs.ENABLE_MANIFEST_OPERATION,reason:n}],application:t,description:`Enable Manifest: ${e.name}`}),Rs.disable=(e,t,n)=>$e.executeTask({job:[{account:e.account,cloudProvider:"kubernetes",location:e.location,manifestName:e.name,type:Rs.DISABLE_MANIFEST_OPERATION,reason:n}],application:t,description:`Disable Manifest: ${e.name}`}),Rs.canDisableServerGroup=e=>Rs.hasLoadBalancers(e)&&!Rs.isManaged(e)&&!e.disabled,Rs.canEnableServerGroup=e=>Rs.hasLoadBalancers(e)&&!Rs.isManaged(e)&&e.disabled,Rs.hasLoadBalancers=e=>{var t;return(null==(t=e.loadBalancers)?void 0:t.length)>0},Rs.isManaged=e=>e.serverGroupManagers&&e.serverGroupManagers.length>0;let Is=Rs;function $s({manifest:e}){const t=e=>e.hasOwnProperty("controller")&&!0===e.controller;return{manifestController:(()=>{const n=(()=>{const t=e.manifest;return null!=t&&t.hasOwnProperty("metadata")&&t.metadata.hasOwnProperty("ownerReferences")&&Array.isArray(t.metadata.ownerReferences)?t.metadata.ownerReferences:[]})().find(t);return void 0===n?null:(a=n.kind).charAt(0).toLowerCase()+a.slice(1)+" "+n.name;var a})()}}function Ps({app:e,serverGroup:t}){const n=p.feature&&p.feature.entityTags,a=Pe.buildClusterTargets(t),{manifest:s}=t,{manifestController:r}=$s({manifest:s});return pt.createElement(yt,{className:"dropdown",id:"server-group-actions-dropdown"},pt.createElement(yt.Toggle,{className:"btn btn-sm btn-primary dropdown-toggle"},A(t.kind)," Actions"),pt.createElement(yt.Menu,null,null===r&&pt.createElement(St,{onClick:()=>{Kt.buildNewManifestCommand(e,s.manifest,t.moniker,t.account).then(t=>{_t.show({title:"Edit Manifest",application:e,command:t})})}},"Edit"),"daemonSet"!==t.kind&&null===r&&pt.createElement(St,{onClick:()=>{I.modalService.open({templateUrl:"kubernetes/src/manifest/scale/scale.html",controller:"kubernetesV2ManifestScaleCtrl as ctrl",resolve:{coordinates:{name:t.name,namespace:t.namespace,account:t.account},currentReplicas:s.manifest.spec.replicas,application:e}})}},"Scale"),Is.canEnableServerGroup(t)&&pt.createElement(St,{onClick:()=>{_.confirm({header:`Really enable ${s.name}?`,buttonText:"Enable",askForReason:!0,submitJustWithReason:!0,submitMethod:({reason:t})=>Is.enable(s,e,t),taskMonitorConfig:{application:e,title:`Enabling ${s.name}`,onTaskComplete:()=>e.getDataSource("serverGroups").refresh()}})}},"Enable"),Is.canDisableServerGroup(t)&&pt.createElement(St,{onClick:()=>{_.confirm({header:`Really disable ${s.name}?`,buttonText:"Disable",askForReason:!0,submitJustWithReason:!0,submitMethod:({reason:t})=>Is.disable(s,e,t),taskMonitorConfig:{application:e,title:`Disabling ${s.name}`,onTaskComplete:()=>e.getDataSource("serverGroups").refresh()}})}},"Disable"),pt.createElement(St,{onClick:()=>{I.modalService.open({templateUrl:"kubernetes/src/manifest/delete/delete.html",controller:"kubernetesV2ManifestDeleteCtrl as ctrl",resolve:{coordinates:{name:t.name,namespace:t.namespace,account:t.account},manifestController:()=>r,application:e}})}},"Delete"),n&&pt.createElement(R,{component:t,application:e,entityType:"serverGroup",ownerOptions:a,onUpdate:()=>e.serverGroups.refresh()})))}function Gs(e,t){const{app:n,serverGroup:a}=e;return new $t(s=>{(function(e){const{app:t,serverGroup:n}=e;return t.ready().then(()=>{let e=t.serverGroups.data.find(e=>e.name===n.name&&e.account===n.accountId&&e.region===n.region);return e||t.loadBalancers.data.some(t=>t.account===n.accountId&&t.region===n.region&&t.serverGroups.some(t=>t.name===n.name&&(e=t,!0))),e})})(e).then(e=>{Promise.all([Ge.getServerGroup(n.name,a.accountId,a.region,a.name),h.getManifest(a.accountId,a.region,a.name)]).then(([n,r])=>{Object.assign(n,e,{account:a.accountId}),n.manifest=r,Ye(n)?t():s.next(n)},t)},t)})}function Os({serverGroup:e}){const{manifest:t}=e,{KubernetesAnnotationCustomSections:n}=en;return pt.createElement(n,{manifest:t.manifest,resource:e})}function Bs({serverGroup:e}){const{manifest:t}=e;return pt.createElement(E,{heading:"Events",defaultExpanded:!0},pt.createElement(nn,{manifest:t}))}function Ls({serverGroup:e}){return pt.createElement(E,{heading:"Health",defaultExpanded:!0},e&&pt.createElement("dl",{className:"dl-horizontal dl-narrow"},pt.createElement("dt",null,"Instances"),pt.createElement("dd",null,pt.createElement(w,{container:e.instanceCounts,className:"pull-left"}))))}function zs({serverGroup:e}){const{manifest:t}=e;return pt.createElement(E,{heading:"Images",defaultExpanded:!0},pt.createElement(Bn,{manifest:t.manifest}))}function Ks({serverGroup:e}){const{manifest:t}=e,{manifestController:n}=$s({manifest:t});return pt.createElement(E,{heading:"Information",defaultExpanded:!0},pt.createElement("dl",{className:"dl-horizontal dl-narrow"},pt.createElement("dt",null,"Created"),pt.createElement("dd",null,y(e.createdTime)),pt.createElement("dt",null,"Account"),pt.createElement("dd",null,pt.createElement(S,{account:e.account})),pt.createElement("dt",null,"Namespace"),pt.createElement("dd",null,e.namespace),pt.createElement("dt",null,"Kind"),pt.createElement("dd",null,e.kind),n&&pt.createElement(pt.Fragment,null,pt.createElement("dt",null,"Controller"),pt.createElement(kt,{to:"^.serverGroupManager",params:{accountId:e.account,region:e.region,serverGroupManager:n,provider:"kubernetes"}},pt.createElement("a",null,pt.createElement("dd",null,A(n)))))))}function Us({serverGroup:e}){const{manifest:t}=e;return pt.createElement(E,{heading:"Labels",defaultExpanded:!0},pt.createElement(on,{manifest:t.manifest}))}function Vs({serverGroup:e}){const{manifest:t}=e;return pt.createElement(Nn,{status:t.status})}function qs({serverGroup:e}){return pt.createElement(E,{heading:"Size",defaultExpanded:!0},null==e.capacity.min&&pt.createElement("dl",{className:"dl-horizontal dl-narrow"},pt.createElement("dt",null,"Current"),pt.createElement("dd",null,e.instances.length)),null!=e.capacity.min&&e.capacity.min===e.capacity.max&&pt.createElement("dl",{className:"dl-horizontal dl-narrow"},pt.createElement("dt",null,"Min/Max"),pt.createElement("dd",null,e.capacity.min),pt.createElement("dt",null,"Current"),pt.createElement("dd",null,e.instances.length)),e.capacity.min!==e.capacity.max&&pt.createElement("dl",{className:"dl-horizontal dl-narrow"},pt.createElement("dt",null,"Min"),pt.createElement("dd",null,e.capacity.min),pt.createElement("dt",null,"Max"),pt.createElement("dd",null,e.capacity.max),pt.createElement("dt",null,"Current"),pt.createElement("dd",null,e.instances.length)))}window.angular.module("ng").run(["$templateCache",function(e){e.put("kubernetes/src/manifest/scale/scale.html",'<div modal-page class="confirmation-modal">\n <task-monitor monitor="ctrl.taskMonitor"></task-monitor>\n <form role="form" name="scaleForm">\n <modal-close dismiss="$dismiss()"></modal-close>\n <div class="modal-header">\n <h4 class="modal-title">\n Scale {{ctrl.$scope.command.manifestName | robotToHuman}} in {{ctrl.$scope.command.location}}\n </h4>\n </div>\n <div class="modal-body confirmation-modal">\n <kubernetes-scale-manifest-settings-form\n options="ctrl.$scope.command"\n on-change="ctrl.$scope.onChange"\n ></kubernetes-scale-manifest-settings-form>\n <task-reason command="ctrl.$scope.command"></task-reason>\n </div>\n <div class="modal-footer">\n <user-verification account="ctrl.$scope.command.account" verification="ctrl.verification"></user-verification>\n <button type="submit" ng-click="ctrl.scale()" style="display: none"></button>\n \x3c!-- Allows form submission via enter keypress--\x3e\n <button class="btn btn-default" ng-click="ctrl.cancel()">Cancel</button>\n <button\n type="submit"\n class="btn btn-primary"\n ng-click="ctrl.scale()"\n ng-disabled="!ctrl.isValid() || !scaleForm.$valid"\n >\n Submit\n </button>\n </div>\n </form>\n</div>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("kubernetes/src/manifest/delete/delete.html",'<div modal-page class="confirmation-modal">\n <task-monitor monitor="ctrl.taskMonitor"></task-monitor>\n <form role="form" name="deleteForm">\n <modal-close dismiss="$dismiss()"></modal-close>\n <div class="modal-header">\n <h4 class="modal-title">Delete {{ctrl.command.manifestName | robotToHuman}} in {{ctrl.command.location}}</h4>\n </div>\n <div ng-if="ctrl.manifestController">\n <div class="alert alert-warning">\n Manifest is controlled by\n <a\n ui-sref="^.serverGroupManager({\n accountId: ctrl.command.account,\n region: ctrl.command.location,\n serverGroupManager: ctrl.manifestController,\n provider: \'kubernetes\'})"\n >\n {{ctrl.manifestController | robotToHuman }}\n </a>\n and may be recreated after deletion.\n </div>\n </div>\n <div class="modal-body confirmation-modal">\n <kubernetes-delete-manifest-options-form options="ctrl.command.options"></kubernetes-delete-manifest-options-form>\n <task-reason command="ctrl.command"></task-reason>\n </div>\n <div class="modal-footer">\n <user-verification account="ctrl.command.account" verification="ctrl.verification"></user-verification>\n <button type="submit" ng-click="ctrl.delete()" style="display: none"></button>\n \x3c!-- Allows form submission via enter keypress--\x3e\n <button class="btn btn-default" ng-click="ctrl.cancel()">Cancel</button>\n <button\n type="submit"\n class="btn btn-primary"\n ng-click="ctrl.delete()"\n ng-disabled="!ctrl.isValid() || !deleteForm.$valid"\n >\n Submit\n </button>\n </div>\n </form>\n</div>\n')}]);class js{buildNewServerGroupCommand(e){return Kt.buildNewManifestCommand(e)}}class _s{normalizeServerGroup(e,t){return t.getDataSource("serverGroupManagers").ready().then(t=>((e.serverGroupManagers||[]).forEach(e=>{const n=t.find(t=>e.account==t.account&&e.location==t.region&&`${t.kind} ${e.name}`==t.name);n&&(e.name=n.name)}),e))}}function Hs({application:e,serverGroupManager:t}){return pt.createElement(St,{onClick:function(){_.confirm({account:t.account,askForReason:!0,header:`Initiate rolling restart of ${t.name}`,submitMethod:n=>{const a={account:t.account,cloudProvider:"kubernetes",location:t.namespace,manifestName:t.name,reason:n.reason};return u.rollingRestartManifest(a,e)},taskMonitorConfig:{application:e,title:`Rolling restart of ${t.name}`,onTaskComplete:()=>e.serverGroups.refresh(!0)}})}},"Rolling Restart")}function Ws({application:e,serverGroupManager:t,manifest:n}){const a=p.kubernetesAdHocInfraWritesEnabled,s=Pe.buildManagerClusterTargets(t);return pt.createElement(yt,{className:"dropdown",id:"server-group-manager-actions-dropdown"},a&&pt.createElement(yt.Toggle,{className:"btn btn-sm btn-primary dropdown-toggle"},A(t.kind)," Actions"),pt.createElement(yt.Menu,null,pt.createElement(St,{onClick:()=>{I.modalService.open({templateUrl:"kubernetes/src/manifest/scale/scale.html",controller:"kubernetesV2ManifestScaleCtrl as ctrl",resolve:{coordinates:{name:t.name,namespace:t.namespace,account:t.account},currentReplicas:n.manifest.spec.replicas,application:e}})}},"Scale"),t&&t.serverGroups&&t.serverGroups.length>0&&pt.createElement(St,{onClick:()=>{I.modalService.open({templateUrl:"kubernetes/src/manifest/rollout/undo.html",controller:"kubernetesV2ManifestUndoRolloutCtrl as ctrl",resolve:{coordinates:{name:t.name,namespace:t.namespace,account:t.account},revisions:()=>{const[,...e]=et(t.serverGroups,["moniker.sequence"],["desc"]);return e.map((e,t)=>({label:`${W.getSequence(e.moniker.sequence)}${t>0?"":" - previous revision"}`,revision:e.moniker.sequence}))},application:e}})}},"Undo Rollout"),n.status.paused.state&&pt.createElement(St,{onClick:()=>{I.modalService.open({templateUrl:"kubernetes/src/manifest/rollout/resume.html",controller:"kubernetesV2ManifestResumeRolloutCtrl as ctrl",resolve:{coordinates:{name:t.name,namespace:t.namespace,account:t.account},application:e}})}},"Resume Rollout"),!n.status.paused.state&&!n.status.stable.state&&pt.createElement(St,{onClick:()=>{I.modalService.open({templateUrl:"kubernetes/src/manifest/rollout/pause.html",controller:"kubernetesV2ManifestPauseRolloutCtrl as ctrl",resolve:{coordinates:{name:t.name,namespace:t.namespace,account:t.account},application:e}})}},"Pause Rollout"),!n.status.paused.state&&pt.createElement(Hs,{application:e,serverGroupManager:t}),pt.createElement(St,{className:"divider"}),pt.createElement(St,{onClick:()=>{Kt.buildNewManifestCommand(e,n.manifest,t.moniker,t.account).then(t=>{_t.show({title:"Edit Manifest",application:e,command:t})})}},"Edit"),pt.createElement(St,{onClick:()=>{I.modalService.open({templateUrl:"kubernetes/src/manifest/delete/delete.html",controller:"kubernetesV2ManifestDeleteCtrl as ctrl",resolve:{coordinates:{name:t.name,namespace:t.namespace,account:t.account},application:e,manifestController:()=>null}})}},"Delete"),pt.createElement(Oe,{feature:"entityTags",render:pt.createElement(R,{component:t,application:e,entityType:"serverGroupManager",ownerOptions:s,onUpdate:()=>e.serverGroupManagers.refresh()})})))}function Js({serverGroupManager:e,manifest:t}){const{KubernetesAnnotationCustomSections:n}=en;return pt.createElement(n,{manifest:t.manifest,resource:e})}function Xs({manifest:e}){return pt.createElement(E,{heading:"Artifacts",defaultExpanded:!0},e.artifacts.map(e=>pt.createElement("ul",{key:e.reference},pt.createElement(un,{artifact:e}))))}function Zs({manifest:e}){return pt.createElement(E,{heading:"Events",defaultExpanded:!0},pt.createElement(nn,{manifest:e}))}function Qs({serverGroupManager:e}){return pt.createElement(E,{heading:"Information",defaultExpanded:!0},pt.createElement("dl",{className:"dl-horizontal dl-narrow"},pt.createElement("dt",null,"Created"),pt.createElement("dd",null,y(e.createdTime)),pt.createElement("dt",null,"Account"),pt.createElement("dd",null,pt.createElement(S,{account:e.account})),pt.createElement("dt",null,"Namespace"),pt.createElement("dd",null,e.namespace),pt.createElement("dt",null,"Kind"),pt.createElement("dd",null,e.kind),e.serverGroups.length>0&&pt.createElement(pt.Fragment,null,pt.createElement("dt",null,"Managing"),pt.createElement("dd",null,et(e.serverGroups,["name"],["asc"]).map(e=>pt.createElement("ul",{key:e.name},pt.createElement(kt,{to:"^.serverGroup",params:{region:e.region,accountId:e.account,serverGroup:e.name,provider:"kubernetes"}},pt.createElement("a",null,A(e.name)))))))))}function Ys({manifest:e}){return pt.createElement(E,{heading:"Labels",defaultExpanded:!0},pt.createElement(on,{manifest:e.manifest}))}function er({manifest:e}){return pt.createElement(E,{heading:"Status",defaultExpanded:!0},e.manifest.status.conditions.map(e=>pt.createElement("ul",{key:e.lastTransitionTime},pt.createElement(wn,{condition:e}))))}function tr({manifest:e}){return pt.createElement(Nn,{status:e.status})}function nr(e){const[t,n,a]=function(e,t){const[n,a]=ht(),[s,r]=ht(),[i,o]=ht(!0);return ft(()=>{if(n)return;const{serverGroupManager:s,app:i}=e,{accountId:l,region:c,name:d}=s;o(!0);const m=i.getDataSource("serverGroupManagers").data.find(e=>e.name===d&&e.region===c&&e.account===l);m?h.getManifest(l,c,d).then(e=>{r(e),a(m)}).catch(e=>{console.error("Error fetching manifest:",e)}).finally(()=>{o(!1)}):t()},[t,e,n]),[n,s,i]}(e,()=>{pe.$state.params.allowModalToStayOpen=!0,pe.$state.go("^",null,{location:"replace"})});return a?pt.createElement(Be,{loading:a}):pt.createElement(Be,{loading:a},pt.createElement(Be.Header,{icon:pt.createElement(Me,{provider:e.serverGroupManager.provider,height:"36px",width:"36px"}),name:t.displayName,notifications:pt.createElement(Oe,{feature:"entityTags",render:pt.createElement(Le,{entity:t,application:e.app,placement:"bottom",hOffsetPercent:"90%",entityType:"serverGroupManager",pageLocation:"details",onUpdate:()=>e.app.serverGroupManagers.refresh()})}),actions:pt.createElement(Ws,{application:e.app,serverGroupManager:t,manifest:n})}),pt.createElement(Be.Content,{loading:a},pt.createElement(tr,{serverGroupManager:t,manifest:n}),pt.createElement(Qs,{serverGroupManager:t,manifest:n}),pt.createElement(er,{serverGroupManager:t,manifest:n}),pt.createElement(Js,{serverGroupManager:t,manifest:n}),pt.createElement(Zs,{serverGroupManager:t,manifest:n}),pt.createElement(Ys,{serverGroupManager:t,manifest:n}),pt.createElement(Xs,{serverGroupManager:t,manifest:n})))}e("spinnaker.kubernetes.v2.rolling.restart",[]).component("kubernetesRollingRestart",Mt(D(Hs,"kubernetesRollingRestart"),["application","serverGroupManager"])),window.angular.module("ng").run(["$templateCache",function(e){e.put("kubernetes/src/manifest/rollout/pause.html",'<div modal-page class="confirmation-modal">\n <task-monitor monitor="ctrl.taskMonitor"></task-monitor>\n <form role="form" name="pauseRolloutForm">\n <modal-close dismiss="$dismiss()"></modal-close>\n <div class="modal-header">\n <h4 class="modal-title">\n Pause rollout of {{ctrl.command.manifestName | robotToHuman}} in {{ctrl.command.location}}\n </h4>\n </div>\n <div class="modal-body confirmation-modal">\n <task-reason command="ctrl.command"></task-reason>\n </div>\n <div class="modal-footer">\n <user-verification account="ctrl.command.account" verification="ctrl.verification"></user-verification>\n <button type="submit" ng-click="ctrl.pauseRollout()" style="display: none"></button>\n \x3c!-- Allows form submission via enter keypress--\x3e\n <button class="btn btn-default" ng-click="ctrl.cancel()">Cancel</button>\n <button\n type="submit"\n class="btn btn-primary"\n ng-click="ctrl.pauseRollout()"\n ng-disabled="!ctrl.isValid() || !pauseRolloutForm.$valid"\n >\n Submit\n </button>\n </div>\n </form>\n</div>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("kubernetes/src/manifest/rollout/resume.html",'<div modal-page class="confirmation-modal">\n <task-monitor monitor="ctrl.taskMonitor"></task-monitor>\n <form role="form" name="resumeRolloutForm">\n <modal-close dismiss="$dismiss()"></modal-close>\n <div class="modal-header">\n <h4 class="modal-title">\n Resume rollout of {{ctrl.command.manifestName | robotToHuman}} in {{ctrl.command.location}}\n </h4>\n </div>\n <div class="modal-body confirmation-modal">\n <task-reason command="ctrl.command"></task-reason>\n </div>\n <div class="modal-footer">\n <user-verification account="ctrl.command.account" verification="ctrl.verification"></user-verification>\n <button type="submit" ng-click="ctrl.resumeRollout()" style="display: none"></button>\n \x3c!-- Allows form submission via enter keypress--\x3e\n <button class="btn btn-default" ng-click="ctrl.cancel()">Cancel</button>\n <button\n type="submit"\n class="btn btn-primary"\n ng-click="ctrl.resumeRollout()"\n ng-disabled="!ctrl.isValid() || !resumeRolloutForm.$valid"\n >\n Submit\n </button>\n </div>\n </form>\n</div>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("kubernetes/src/manifest/rollout/undo.html",'<div modal-page class="confirmation-modal">\n <task-monitor monitor="ctrl.taskMonitor"></task-monitor>\n <form role="form" name="undoRolloutForm">\n <modal-close dismiss="$dismiss()"></modal-close>\n <div class="modal-header">\n <h4 class="modal-title">\n Undo rollout of {{ctrl.command.manifestName | robotToHuman}} in {{ctrl.command.location}}\n </h4>\n </div>\n <div class="modal-body confirmation-modal">\n <div class="form-horizontal">\n <div class="form-group form-inline">\n <div class="col-md-3 sm-label-right">Revision</div>\n <div class="col-md-7">\n <select style="width: 100%" class="form-control input-sm" ng-model="ctrl.command.revision">\n <option\n ng-repeat="revision in ctrl.revisions"\n value="{{revision.revision}}"\n ng-selected="ctrl.command.revisions === revision.revision"\n >\n {{revision.label}}\n </option>\n </select>\n </div>\n </div>\n </div>\n <task-reason command="ctrl.command"></task-reason>\n </div>\n <div class="modal-footer">\n <user-verification account="ctrl.command.account" verification="ctrl.verification"></user-verification>\n <button type="submit" ng-click="ctrl.undoRollout()" style="display: none"></button>\n \x3c!-- Allows form submission via enter keypress--\x3e\n <button class="btn btn-default" ng-click="ctrl.cancel()">Cancel</button>\n <button\n type="submit"\n class="btn btn-primary"\n ng-click="ctrl.undoRollout()"\n ng-disabled="!ctrl.isValid() || !undoRolloutForm.$valid"\n >\n Submit\n </button>\n </div>\n </form>\n</div>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("kubernetes/src/manifest/scale/scale.html",'<div modal-page class="confirmation-modal">\n <task-monitor monitor="ctrl.taskMonitor"></task-monitor>\n <form role="form" name="scaleForm">\n <modal-close dismiss="$dismiss()"></modal-close>\n <div class="modal-header">\n <h4 class="modal-title">\n Scale {{ctrl.$scope.command.manifestName | robotToHuman}} in {{ctrl.$scope.command.location}}\n </h4>\n </div>\n <div class="modal-body confirmation-modal">\n <kubernetes-scale-manifest-settings-form\n options="ctrl.$scope.command"\n on-change="ctrl.$scope.onChange"\n ></kubernetes-scale-manifest-settings-form>\n <task-reason command="ctrl.$scope.command"></task-reason>\n </div>\n <div class="modal-footer">\n <user-verification account="ctrl.$scope.command.account" verification="ctrl.verification"></user-verification>\n <button type="submit" ng-click="ctrl.scale()" style="display: none"></button>\n \x3c!-- Allows form submission via enter keypress--\x3e\n <button class="btn btn-default" ng-click="ctrl.cancel()">Cancel</button>\n <button\n type="submit"\n class="btn btn-primary"\n ng-click="ctrl.scale()"\n ng-disabled="!ctrl.isValid() || !scaleForm.$valid"\n >\n Submit\n </button>\n </div>\n </form>\n</div>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("kubernetes/src/manifest/delete/delete.html",'<div modal-page class="confirmation-modal">\n <task-monitor monitor="ctrl.taskMonitor"></task-monitor>\n <form role="form" name="deleteForm">\n <modal-close dismiss="$dismiss()"></modal-close>\n <div class="modal-header">\n <h4 class="modal-title">Delete {{ctrl.command.manifestName | robotToHuman}} in {{ctrl.command.location}}</h4>\n </div>\n <div ng-if="ctrl.manifestController">\n <div class="alert alert-warning">\n Manifest is controlled by\n <a\n ui-sref="^.serverGroupManager({\n accountId: ctrl.command.account,\n region: ctrl.command.location,\n serverGroupManager: ctrl.manifestController,\n provider: \'kubernetes\'})"\n >\n {{ctrl.manifestController | robotToHuman }}\n </a>\n and may be recreated after deletion.\n </div>\n </div>\n <div class="modal-body confirmation-modal">\n <kubernetes-delete-manifest-options-form options="ctrl.command.options"></kubernetes-delete-manifest-options-form>\n <task-reason command="ctrl.command"></task-reason>\n </div>\n <div class="modal-footer">\n <user-verification account="ctrl.command.account" verification="ctrl.verification"></user-verification>\n <button type="submit" ng-click="ctrl.delete()" style="display: none"></button>\n \x3c!-- Allows form submission via enter keypress--\x3e\n <button class="btn btn-default" ng-click="ctrl.cancel()">Cancel</button>\n <button\n type="submit"\n class="btn btn-primary"\n ng-click="ctrl.delete()"\n ng-disabled="!ctrl.isValid() || !deleteForm.$valid"\n >\n Submit\n </button>\n </div>\n </form>\n</div>\n')}]);const ar=class e{static validateSpecialCharacters(e,t){/^([a-zA-Z][a-zA-Z0-9-]*)?$/.test(e)||t.push("The application name must begin with a letter and must contain only letters, digits, or dashes. No special characters are allowed.")}static validateLength(t,n){t.length>e.MAX_RESOURCE_NAME_LENGTH&&n.push(`The maximum length for an application in Kubernetes is ${e.MAX_RESOURCE_NAME_LENGTH} characters.`)}validate(t=""){const n=[];return t&&t.length&&(e.validateSpecialCharacters(t,n),e.validateLength(t,n)),{warnings:[],errors:n}}};ar.MAX_RESOURCE_NAME_LENGTH=63;let sr=ar;ze.registerValidator("kubernetes",new sr);rn('.cloud-provider-logo .icon-kubernetes {\n -webkit-mask-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22 standalone%3D%22no%22%3F%3E%3Csvg xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22 xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22 xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22 xmlns%3Asvg%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3Asodipodi%3D%22http%3A%2F%2Fsodipodi.sourceforge.net%2FDTD%2Fsodipodi-0.dtd%22 xmlns%3Ainkscape%3D%22http%3A%2F%2Fwww.inkscape.org%2Fnamespaces%2Finkscape%22 width%3D%228.14444in%22 height%3D%228.14444in%22 viewBox%3D%220 0 733 733%22 id%3D%22svg2%22 version%3D%221.1%22 inkscape%3Aversion%3D%220.48.4 r9939%22 sodipodi%3Adocname%3D%22kubernetes.svg%22%3E %3Cmetadata id%3D%22metadata9%22%3E %3Crdf%3ARDF%3E %3Ccc%3AWork rdf%3Aabout%3D%22%22%3E %3Cdc%3Aformat%3Eimage%2Fsvg%2Bxml%3C%2Fdc%3Aformat%3E %3Cdc%3Atype rdf%3Aresource%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Fdcmitype%2FStillImage%22 %2F%3E %3Cdc%3Atitle%3E%3C%2Fdc%3Atitle%3E %3C%2Fcc%3AWork%3E %3C%2Frdf%3ARDF%3E %3C%2Fmetadata%3E %3Cdefs id%3D%22defs7%22 %2F%3E %3Csodipodi%3Anamedview pagecolor%3D%22%23ffffff%22 bordercolor%3D%22%23666666%22 borderopacity%3D%221%22 objecttolerance%3D%2210%22 gridtolerance%3D%2210%22 guidetolerance%3D%2210%22 inkscape%3Apageopacity%3D%220%22 inkscape%3Apageshadow%3D%222%22 inkscape%3Awindow-width%3D%221916%22 inkscape%3Awindow-height%3D%221142%22 id%3D%22namedview5%22 showgrid%3D%22false%22 inkscape%3Azoom%3D%220.32196472%22 inkscape%3Acx%3D%22366.49979%22 inkscape%3Acy%3D%22366.49979%22 inkscape%3Awindow-x%3D%220%22 inkscape%3Awindow-y%3D%2256%22 inkscape%3Awindow-maximized%3D%220%22 inkscape%3Acurrent-layer%3D%22svg2%22 %2F%3E %3Cpath id%3D%22Selection%22 fill%3D%22none%22 stroke%3D%22black%22 stroke-width%3D%221%22 d%3D%22M 411.00%2C29.74 C 411.00%2C29.74 499.00%2C71.74 499.00%2C71.74 499.00%2C71.74 555.00%2C98.26 555.00%2C98.26 555.00%2C98.26 592.00%2C116.14 592.00%2C116.14 592.00%2C116.14 625.00%2C131.75 625.00%2C131.75 634.53%2C136.52 640.47%2C138.65 647.82%2C147.00 657.13%2C157.58 659.33%2C171.69 662.21%2C185.00 662.21%2C185.00 673.42%2C234.00 673.42%2C234.00 673.42%2C234.00 705.42%2C373.00 705.42%2C373.00 705.42%2C373.00 719.68%2C439.00 719.68%2C439.00 721.02%2C456.85 708.90%2C470.12 698.60%2C483.00 698.60%2C483.00 641.40%2C554.00 641.40%2C554.00 641.40%2C554.00 557.00%2C659.00 557.00%2C659.00 541.16%2C678.73 531.22%2C696.96 503.00%2C697.00 503.00%2C697.00 232.00%2C697.00 232.00%2C697.00 204.00%2C696.96 192.42%2C676.52 176.80%2C657.00 176.80%2C657.00 84.39%2C542.00 84.39%2C542.00 84.39%2C542.00 41.75%2C489.00 41.75%2C489.00 33.00%2C478.41 21.48%2C466.29 17.75%2C453.00 13.91%2C439.33 16.97%2C429.26 20.12%2C416.00 20.12%2C416.00 29.35%2C376.00 29.35%2C376.00 29.35%2C376.00 66.12%2C216.00 66.12%2C216.00 66.12%2C216.00 75.12%2C177.00 75.12%2C177.00 78.06%2C164.59 78.76%2C157.38 87.46%2C147.01 95.04%2C138.00 103.06%2C135.55 113.00%2C130.74 113.00%2C130.74 159.00%2C108.74 159.00%2C108.74 159.00%2C108.74 292.00%2C45.22 292.00%2C45.22 292.00%2C45.22 335.00%2C24.69 335.00%2C24.69 348.10%2C18.68 348.93%2C16.70 364.00%2C14.42 379.89%2C12.53 397.06%2C23.00 411.00%2C29.74 Z M 557.00%2C380.00 C 557.00%2C380.00 557.00%2C360.00 557.00%2C360.00 556.98%2C344.89 552.44%2C322.39 547.65%2C308.00 544.05%2C297.20 539.23%2C285.88 533.57%2C276.00 532.16%2C273.53 526.21%2C264.94 526.62%2C262.61 526.62%2C262.61 530.18%2C256.83 530.18%2C256.83 531.15%2C254.78 531.21%2C253.28 532.72%2C251.04 538.54%2C242.42 559.13%2C233.05 567.91%2C226.64 574.90%2C221.54 579.79%2C212.09 574.28%2C204.04 568.42%2C195.49 557.02%2C197.87 550.00%2C203.39 538.15%2C212.70 529.02%2C231.46 513.00%2C234.06 510.10%2C234.53 506.59%2C236.28 504.00%2C235.13 502.10%2C234.29 498.71%2C230.71 497.00%2C229.17 497.00%2C229.17 482.00%2C216.65 482.00%2C216.65 468.70%2C206.50 454.37%2C198.79 439.00%2C192.28 427.89%2C187.58 414.82%2C184.10 403.00%2C181.66 399.01%2C180.84 387.91%2C180.19 385.31%2C178.15 383.20%2C176.49 382.80%2C173.40 381.62%2C171.00 380.31%2C168.36 379.10%2C167.10 378.39%2C164.00 376.45%2C155.45 381.77%2C133.42 381.99%2C124.00 382.11%2C118.31 381.90%2C113.53 377.78%2C109.11 370.81%2C101.64 359.24%2C103.73 354.92%2C113.00 351.98%2C119.91 353.59%2C127.86 354.92%2C135.00 356.18%2C143.75 357.05%2C150.08 357.00%2C159.00 356.93%2C172.46 352.16%2C166.31 352.00%2C179.00 322.16%2C180.37 288.94%2C192.63 264.00%2C208.69 256.14%2C213.75 247.93%2C219.91 241.00%2C226.17 238.50%2C228.43 232.87%2C234.79 230.00%2C235.49 228.05%2C235.96 225.13%2C234.59 223.00%2C234.22 220.80%2C233.84 219.25%2C234.06 217.00%2C233.15 211.66%2C230.99 198.37%2C217.65 194.17%2C213.00 188.30%2C206.51 183.61%2C199.54 174.00%2C199.04 159.75%2C198.31 155.84%2C211.34 161.01%2C220.00 165.34%2C227.27 173.09%2C230.35 180.00%2C234.45 186.12%2C238.08 199.61%2C246.30 203.15%2C252.01 203.15%2C252.01 205.47%2C257.70 205.47%2C257.70 206.35%2C259.49 208.10%2C261.07 208.33%2C262.46 208.75%2C265.03 202.92%2C273.39 201.43%2C276.00 196.26%2C285.03 191.30%2C297.10 188.00%2C307.00 181.22%2C327.31 177.97%2C348.62 178.00%2C370.00 178.00%2C370.00 180.00%2C395.00 180.00%2C395.00 169.67%2C396.74 174.11%2C401.22 161.00%2C404.35 149.33%2C407.12 126.34%2C406.63 118.02%2C411.53 108.10%2C417.37 108.11%2C431.51 119.00%2C436.15 130.21%2C440.92 149.36%2C429.76 161.00%2C426.43 164.16%2C425.52 169.83%2C423.96 173.00%2C424.14 179.08%2C424.49 175.02%2C426.24 188.00%2C426.00 189.16%2C433.52 194.32%2C445.03 197.76%2C452.00 208.97%2C474.74 222.76%2C491.52 241.00%2C508.96 245.93%2C513.68 254.31%2C520.05 260.00%2C523.98 262.17%2C525.47 268.82%2C529.32 269.79%2C531.38 270.77%2C533.42 269.51%2C535.68 269.79%2C538.96 269.73%2C541.38 270.44%2C542.43 269.79%2C545.16 268.86%2C550.82 259.44%2C565.91 255.86%2C571.00 250.64%2C578.39 245.61%2C584.45 246.05%2C594.00 246.65%2C607.20 261.18%2C611.20 270.37%2C601.67 275.18%2C596.69 276.41%2C590.39 278.29%2C584.00 278.29%2C584.00 286.31%2C562.00 286.31%2C562.00 292.40%2C548.86 294.88%2C556.11 300.00%2C545.00 328.12%2C554.73 356.26%2C559.67 386.00%2C556.83 397.21%2C555.76 408.11%2C553.38 419.00%2C550.63 421.96%2C549.88 431.78%2C546.48 433.90%2C546.92 436.03%2C547.36 438.27%2C550.16 440.21%2C551.58 442.59%2C553.31 443.53%2C553.58 445.61%2C556.05 452.20%2C563.86 456.12%2C582.09 459.70%2C592.00 462.49%2C599.73 468.72%2C607.85 478.00%2C606.63 484.69%2C605.75 488.98%2C600.52 489.66%2C594.00 490.43%2C586.66 485.91%2C579.74 481.98%2C574.00 477.29%2C567.17 470.65%2C557.44 467.31%2C550.00 462.43%2C539.12 468.92%2C542.96 464.00%2C531.00 473.63%2C527.44 487.29%2C516.07 495.00%2C509.07 521.56%2C484.98 537.34%2C458.61 549.00%2C425.00 558.47%2C427.60 556.97%2C422.09 568.00%2C424.43 568.00%2C424.43 607.00%2C436.96 607.00%2C436.96 614.22%2C437.30 621.24%2C435.52 624.11%2C428.00 627.22%2C419.86 621.25%2C412.42 614.00%2C409.36 609.08%2C407.29 600.39%2C407.20 595.00%2C406.96 590.64%2C406.77 576.10%2C404.68 572.00%2C403.51 562.95%2C400.92 565.61%2C396.62 556.00%2C395.00 556.00%2C395.00 557.00%2C380.00 557.00%2C380.00 Z M 350.00%2C217.00 C 350.00%2C217.00 348.00%2C250.00 348.00%2C250.00 348.00%2C250.00 347.00%2C264.00 347.00%2C264.00 347.00%2C264.00 346.00%2C287.00 346.00%2C287.00 345.87%2C297.63 341.31%2C310.19 328.00%2C306.36 322.74%2C304.85 310.11%2C295.07 305.00%2C291.42 305.00%2C291.42 276.00%2C270.86 276.00%2C270.86 270.80%2C267.14 265.12%2C263.95 261.00%2C259.00 283.51%2C236.99 318.35%2C219.57 350.00%2C217.00 Z M 458.00%2C245.65 C 463.37%2C249.75 469.98%2C254.64 474.00%2C260.00 474.00%2C260.00 424.00%2C295.71 424.00%2C295.71 418.45%2C299.67 409.10%2C307.56 402.00%2C306.63 390.37%2C305.12 390.66%2C295.62 389.83%2C287.00 389.83%2C287.00 389.00%2C277.00 389.00%2C277.00 389.00%2C277.00 388.00%2C259.00 388.00%2C259.00 388.00%2C259.00 387.00%2C243.00 387.00%2C243.00 387.00%2C243.00 386.00%2C217.00 386.00%2C217.00 413.03%2C221.86 435.69%2C228.62 458.00%2C245.65 Z M 258.00%2C304.93 C 258.00%2C304.93 289.00%2C332.72 289.00%2C332.72 295.42%2C338.37 303.69%2C345.37 299.35%2C355.00 295.79%2C362.89 284.60%2C364.71 277.00%2C366.86 277.00%2C366.86 217.00%2C384.00 217.00%2C384.00 215.40%2C377.43 215.92%2C366.09 216.00%2C359.00 216.29%2C334.69 226.02%2C308.80 238.00%2C288.00 244.56%2C292.17 252.07%2C299.54 258.00%2C304.93 Z M 508.60%2C311.00 C 515.69%2C328.71 520.21%2C350.91 520.00%2C370.00 520.00%2C370.00 519.00%2C384.00 519.00%2C384.00 519.00%2C384.00 454.00%2C365.29 454.00%2C365.29 444.54%2C362.57 433.95%2C360.52 435.11%2C348.00 435.86%2C339.96 446.16%2C332.48 452.00%2C327.42 452.00%2C327.42 496.00%2C288.00 496.00%2C288.00 501.50%2C293.39 505.72%2C303.80 508.60%2C311.00 Z M 373.00%2C343.00 C 375.23%2C343.02 377.71%2C342.87 379.71%2C344.02 382.83%2C345.81 392.75%2C358.50 393.53%2C362.00 394.23%2C365.13 392.43%2C371.75 391.63%2C375.00 390.21%2C380.76 390.53%2C383.98 384.98%2C387.20 381.81%2C389.05 371.25%2C394.58 368.00%2C394.58 364.26%2C394.58 348.22%2C386.97 346.30%2C383.79 344.90%2C381.46 343.82%2C374.96 343.12%2C372.00 342.45%2C369.17 340.95%2C364.77 341.65%2C362.00 342.74%2C357.66 352.32%2C346.69 356.04%2C344.02 361.19%2C342.27 367.56%2C342.96 373.00%2C343.00 Z M 274.00%2C410.75 C 274.00%2C410.75 301.42%2C406.28 301.42%2C406.28 314.90%2C405.57 318.21%2C415.88 314.80%2C427.00 314.80%2C427.00 287.00%2C495.00 287.00%2C495.00 279.03%2C493.05 268.83%2C483.76 263.00%2C478.00 248.36%2C463.53 229.79%2C439.38 225.00%2C419.00 225.00%2C419.00 274.00%2C410.75 274.00%2C410.75 Z M 440.42%2C475.00 C 440.42%2C475.00 425.20%2C438.00 425.20%2C438.00 422.29%2C430.75 416.48%2C420.73 420.45%2C413.02 425.26%2C403.68 435.62%2C405.91 444.00%2C407.42 444.00%2C407.42 511.00%2C419.00 511.00%2C419.00 502.92%2C442.30 491.41%2C459.62 474.00%2C477.00 467.89%2C483.10 456.99%2C492.94 449.00%2C496.00 449.00%2C496.00 440.42%2C475.00 440.42%2C475.00 Z M 329.23%2C492.00 C 329.23%2C492.00 351.86%2C451.00 351.86%2C451.00 355.72%2C444.13 360.59%2C435.49 370.00%2C437.41 378.47%2C439.13 382.61%2C449.24 386.42%2C456.00 386.42%2C456.00 417.00%2C512.00 417.00%2C512.00 382.18%2C523.39 353.77%2C522.16 319.00%2C512.00 320.74%2C506.03 326.10%2C497.76 329.23%2C492.00 Z%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22M 211.64776%2C688.72752 C 199.18399%2C681.12883 204.11492%2C686.90132 106.38132%2C565.49488 63.249477%2C511.91572 25.861839%2C464.02125 23.297683%2C459.06272 c -2.564155%2C-4.95855 -4.662101%2C-13.19299 -4.662101%2C-18.2988 0%2C-13.66622 60.851497%2C-274.62895 66.655226%2C-285.85213 5.745934%2C-11.11141 10.493927%2C-13.62254 165.090372%2C-87.313529 100.50103%2C-47.905502 105.94827%2C-50.104506 120.7775%2C-48.756997 21.60054%2C1.962804 259.4388%2C115.387256 273.4144%2C130.390606 8.74397%2C9.387 11.42228%2C18.89968 37.82349%2C134.33957 37.09879%2C162.21523 36.24332%2C157.97694 33.82846%2C167.59859 -1.82843%2C7.28502 -151.28754%2C197.23748 -176.95311%2C224.89548 -17.91576%2C19.30659 -15.51217%2C19.04286 -173.44885%2C19.0301 -139.36163%2C-0.0124 -144.06727%2C-0.20562 -154.17531%2C-6.36809 l 0%2C0 z m 59.63042%2C-85.19822 c 2.53653%2C-2.53652 7.58811%2C-13.55546 11.22574%2C-24.48653 3.63762%2C-10.93108 9.25693%2C-22.26664 12.48735%2C-25.19013 5.47954%2C-4.95889 7.33455%2C-4.98309 27.65689%2C-0.36087 26.55799%2C6.04047 63.37339%2C6.21062 90.40095%2C0.41774 26.82521%2C-5.74948 28.96243%2C-4.22176 42.20742%2C30.17064 6.44828%2C16.74379 9.68553%2C21.37849 16.04797%2C22.97534 20.00337%2C5.02052 24.99029%2C-14.63592 9.92491%2C-39.12025 -5.4188%2C-8.80668 -10.89191%2C-20.62123 -12.16242%2C-26.25452 -2.13235%2C-9.45464 -1.48249%2C-10.688 8.45015%2C-16.03707 18.10297%2C-9.74911 48.14816%2C-45.08972 61.53407%2C-72.37945 8.3579%2C-17.03916 14.35139%2C-25.50497 18.85918%2C-26.63857 3.63428%2C-0.91392 14.81563%2C1.24554 24.84744%2C4.79882 28.12743%2C9.96267 44.64011%2C7.40531 44.64011%2C-6.91346 0%2C-10.67446 -10.44158%2C-17.22869 -31.18615%2C-19.57566 -10.81693%2C-1.2238 -23.59951%2C-4.2586 -28.40572%2C-6.74397 -8.34834%2C-4.31711 -8.74102%2C-5.52097 -8.79252%2C-26.95714 -0.0705%2C-29.36558 -6.754%2C-59.98059 -18.79864%2C-86.11178 -6.56128%2C-14.23485 -9.02292%2C-23.30388 -7.56894%2C-27.88497 1.18513%2C-3.73401 10.71049%2C-12.31892 21.16745%2C-19.07758 21.48536%2C-13.88666 23.7753%2C-16.56209 23.84208%2C-27.85574 0.0593%2C-10.02002 -10.4658%2C-15.69188 -21.52608%2C-11.60021 -4.17832%2C1.54575 -14.92658%2C9.74252 -23.88504%2C18.21505 -8.95844%2C8.47253 -18.62586%2C15.4046 -21.48313%2C15.4046 -2.85727%2C0 -13.77288%2C-6.48513 -24.25689%2C-14.4114 -24.55542%2C-18.56473 -50.43239%2C-30.78657 -78.31991%2C-36.99096 -27.47994%2C-6.11371 -30.17834%2C-10.24779 -25.99058%2C-39.81876 3.25597%2C-22.99146 0.43604%2C-34.52706 -9.18697%2C-37.58128 -7.49461%2C-2.37869 -17.4184%2C2.3558 -20.21529%2C9.64438 -1.10842%2C2.88848 -1.10174%2C13.32674 0.0155%2C23.19615 3.03455%2C26.82207 -0.19816%2C39.63 -10.5137%2C41.65535 -42.81015%2C8.40521 -65.79704%2C18.24725 -94.59966%2C40.50336 -9.8248%2C7.59174 -20.4974%2C13.80316 -23.71689%2C13.80316 -3.21949%2C0 -14.04955%2C-7.72918 -24.06679%2C-17.17596 -15.83344%2C-14.93174 -19.63355%2C-17.06231 -29.08393%2C-16.30613 -10.45342%2C0.83643 -10.87075%2C1.3435 -10.87075%2C13.20817 0%2C11.57756 1.09949%2C13.06593 17.83144%2C24.13804 9.8073%2C6.48983 20.13467%2C15.31485 22.94973%2C19.61116 4.87705%2C7.44333 4.72878%2C8.52708 -3.14615%2C22.99594 -12.08927%2C22.21197 -20.55241%2C58.88284 -20.55241%2C89.05382 0%2C25.04796 -0.25661%2C25.9543 -8.54131%2C30.16681 -4.69772%2C2.38865 -16.92732%2C5.33251 -27.17689%2C6.54193 -23.88502%2C2.81842 -33.30936%2C8.62455 -32.02332%2C19.72897 0.62557%2C5.40152 3.86937%2C9.70972 9.23947%2C12.27128 7.11466%2C3.39372 11.4251%2C2.92476 30.73008%2C-3.34326 30.68433%2C-9.96273 34.14229%2C-8.80994 44.43347%2C14.81281 10.18607%2C23.38144 36.58457%2C56.29859 57.92933%2C72.23394 18.99536%2C14.18136 19.62788%2C20.41105 4.60241%2C45.32906 -11.16257%2C18.51181 -13.69099%2C32.26854 -7.13565%2C38.82388 5.13265%2C5.13265 16.62346%2C4.67434 22.18256%2C-0.88475 z%22 id%3D%22path2986%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22m 295.55767%2C281.76003 -31.75731%2C-21.99996 11.54199%2C-9.17242 c 14.41086%2C-11.45232 45.45892%2C-26.18898 60.93903%2C-28.92412 l 11.71165%2C-2.0693 -2.06514%2C35.09453 c -2.33966%2C39.75975 -4.79135%2C49.07123 -12.92032%2C49.07123 -3.13093%2C0 -19.98338%2C-9.89998 -37.4499%2C-21.99996 z%22 id%3D%22path2988%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22m 394.75802%2C296.77165 c -1.45603%2C-3.84359 -3.68331%2C-22.90514 -4.94951%2C-42.359 l -2.30218%2C-35.37066 8.90879%2C2.07076 c 19.89331%2C4.62399 43.91797%2C15.20006 58.19539%2C25.61862 17.69226%2C12.91046 18.79741%2C10.773 -19.7698%2C38.23649 -28.61516%2C20.37669 -36.01014%2C22.55441 -40.08269%2C11.80379 z%22 id%3D%22path2990%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22m 476.76032%2C369.50784 c -51.75745%2C-15.82263 -51.74616%2C-14.91999 -0.75267%2C-60.21158 l 20.98885%2C-18.64195 6.36541%2C14.39007 c 10.72838%2C24.25328 19.70972%2C76.84004 12.99902%2C76.1107 -1.2812%2C-0.13924 -19.10147%2C-5.3805 -39.60061%2C-11.64724 z%22 id%3D%22path2992%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22m 435.48897%2C456.7043 c -14.46935%2C-36.25055 -15.71568%2C-43.42123 -8.05778%2C-46.35984 7.32986%2C-2.81274 78.84102%2C8.75347 78.80632%2C12.74612 -0.11228%2C12.91882 -43.26201%2C67.05973 -53.40025%2C67.00247 -2.21801%2C-0.0124 -10.019%2C-15.0264 -17.34829%2C-33.38875 l 0%2C0 z%22 id%3D%22path2994%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22m 338.54641%2C514.3208 c -7.68717%2C-1.69573 -14.4868%2C-3.5703 -15.11027%2C-4.16572 -0.62347%2C-0.59542 4.09998%2C-10.58909 10.49655%2C-22.20816 27.03082%2C-49.1002 32.08856%2C-54.10343 42.54932%2C-42.09061 4.06983%2C4.67366 36.60673%2C62.08283 36.60673%2C64.5901 0%2C0.4929 -7.05713%2C2.40966 -15.68253%2C4.25948 -18.62111%2C3.99351 -39.63369%2C3.85604 -58.8598%2C-0.38509 z%22 id%3D%22path2996%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22m 262.97346%2C473.7049 c -16.77296%2C-17.17992 -33.13461%2C-41.67919 -33.13461%2C-49.61442 0%2C-3.17228 10.01376%2C-5.8894 36.9054%2C-10.01386 20.29798%2C-3.11317 39.1665%2C-4.79264 41.93006%2C-3.73216 2.76356%2C1.06047 4.92594%2C5.11676 4.80529%2C9.01396 -0.30476%2C9.84389 -25.6065%2C68.49526 -30.21033%2C70.02988 -2.06811%2C0.68936 -11.20122%2C-6.36817 -20.29581%2C-15.6834 l 0%2C0 z%22 id%3D%22path2998%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22m 217.41513%2C369.61776 c 0%2C-28.25915 15.19645%2C-76.45934 23.50125%2C-74.54137 6.0423%2C1.39545 57.25975%2C49.00646 57.20538%2C53.17729 -0.10849%2C8.32162 -6.5906%2C11.97505 -36.32712%2C20.47461 -17.20033%2C4.91635 -34.22222%2C9.87476 -37.82642%2C11.01869 -5.90819%2C1.87519 -6.55309%2C0.87836 -6.55309%2C-10.12922 z%22 id%3D%22path3000%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22m 355.12214%2C387.05557 c -12.30722%2C-5.95336 -13.73186%2C-24.30319 -2.74022%2C-35.29483 10.083%2C-10.083 21.74685%2C-9.76596 31.59351%2C0.85877 18.12886%2C19.56137 -4.29002%2C46.31803 -28.85329%2C34.43606 z%22 id%3D%22path3002%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E%3C%2Fsvg%3E");\n mask-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22 standalone%3D%22no%22%3F%3E%3Csvg xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22 xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22 xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22 xmlns%3Asvg%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3Asodipodi%3D%22http%3A%2F%2Fsodipodi.sourceforge.net%2FDTD%2Fsodipodi-0.dtd%22 xmlns%3Ainkscape%3D%22http%3A%2F%2Fwww.inkscape.org%2Fnamespaces%2Finkscape%22 width%3D%228.14444in%22 height%3D%228.14444in%22 viewBox%3D%220 0 733 733%22 id%3D%22svg2%22 version%3D%221.1%22 inkscape%3Aversion%3D%220.48.4 r9939%22 sodipodi%3Adocname%3D%22kubernetes.svg%22%3E %3Cmetadata id%3D%22metadata9%22%3E %3Crdf%3ARDF%3E %3Ccc%3AWork rdf%3Aabout%3D%22%22%3E %3Cdc%3Aformat%3Eimage%2Fsvg%2Bxml%3C%2Fdc%3Aformat%3E %3Cdc%3Atype rdf%3Aresource%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Fdcmitype%2FStillImage%22 %2F%3E %3Cdc%3Atitle%3E%3C%2Fdc%3Atitle%3E %3C%2Fcc%3AWork%3E %3C%2Frdf%3ARDF%3E %3C%2Fmetadata%3E %3Cdefs id%3D%22defs7%22 %2F%3E %3Csodipodi%3Anamedview pagecolor%3D%22%23ffffff%22 bordercolor%3D%22%23666666%22 borderopacity%3D%221%22 objecttolerance%3D%2210%22 gridtolerance%3D%2210%22 guidetolerance%3D%2210%22 inkscape%3Apageopacity%3D%220%22 inkscape%3Apageshadow%3D%222%22 inkscape%3Awindow-width%3D%221916%22 inkscape%3Awindow-height%3D%221142%22 id%3D%22namedview5%22 showgrid%3D%22false%22 inkscape%3Azoom%3D%220.32196472%22 inkscape%3Acx%3D%22366.49979%22 inkscape%3Acy%3D%22366.49979%22 inkscape%3Awindow-x%3D%220%22 inkscape%3Awindow-y%3D%2256%22 inkscape%3Awindow-maximized%3D%220%22 inkscape%3Acurrent-layer%3D%22svg2%22 %2F%3E %3Cpath id%3D%22Selection%22 fill%3D%22none%22 stroke%3D%22black%22 stroke-width%3D%221%22 d%3D%22M 411.00%2C29.74 C 411.00%2C29.74 499.00%2C71.74 499.00%2C71.74 499.00%2C71.74 555.00%2C98.26 555.00%2C98.26 555.00%2C98.26 592.00%2C116.14 592.00%2C116.14 592.00%2C116.14 625.00%2C131.75 625.00%2C131.75 634.53%2C136.52 640.47%2C138.65 647.82%2C147.00 657.13%2C157.58 659.33%2C171.69 662.21%2C185.00 662.21%2C185.00 673.42%2C234.00 673.42%2C234.00 673.42%2C234.00 705.42%2C373.00 705.42%2C373.00 705.42%2C373.00 719.68%2C439.00 719.68%2C439.00 721.02%2C456.85 708.90%2C470.12 698.60%2C483.00 698.60%2C483.00 641.40%2C554.00 641.40%2C554.00 641.40%2C554.00 557.00%2C659.00 557.00%2C659.00 541.16%2C678.73 531.22%2C696.96 503.00%2C697.00 503.00%2C697.00 232.00%2C697.00 232.00%2C697.00 204.00%2C696.96 192.42%2C676.52 176.80%2C657.00 176.80%2C657.00 84.39%2C542.00 84.39%2C542.00 84.39%2C542.00 41.75%2C489.00 41.75%2C489.00 33.00%2C478.41 21.48%2C466.29 17.75%2C453.00 13.91%2C439.33 16.97%2C429.26 20.12%2C416.00 20.12%2C416.00 29.35%2C376.00 29.35%2C376.00 29.35%2C376.00 66.12%2C216.00 66.12%2C216.00 66.12%2C216.00 75.12%2C177.00 75.12%2C177.00 78.06%2C164.59 78.76%2C157.38 87.46%2C147.01 95.04%2C138.00 103.06%2C135.55 113.00%2C130.74 113.00%2C130.74 159.00%2C108.74 159.00%2C108.74 159.00%2C108.74 292.00%2C45.22 292.00%2C45.22 292.00%2C45.22 335.00%2C24.69 335.00%2C24.69 348.10%2C18.68 348.93%2C16.70 364.00%2C14.42 379.89%2C12.53 397.06%2C23.00 411.00%2C29.74 Z M 557.00%2C380.00 C 557.00%2C380.00 557.00%2C360.00 557.00%2C360.00 556.98%2C344.89 552.44%2C322.39 547.65%2C308.00 544.05%2C297.20 539.23%2C285.88 533.57%2C276.00 532.16%2C273.53 526.21%2C264.94 526.62%2C262.61 526.62%2C262.61 530.18%2C256.83 530.18%2C256.83 531.15%2C254.78 531.21%2C253.28 532.72%2C251.04 538.54%2C242.42 559.13%2C233.05 567.91%2C226.64 574.90%2C221.54 579.79%2C212.09 574.28%2C204.04 568.42%2C195.49 557.02%2C197.87 550.00%2C203.39 538.15%2C212.70 529.02%2C231.46 513.00%2C234.06 510.10%2C234.53 506.59%2C236.28 504.00%2C235.13 502.10%2C234.29 498.71%2C230.71 497.00%2C229.17 497.00%2C229.17 482.00%2C216.65 482.00%2C216.65 468.70%2C206.50 454.37%2C198.79 439.00%2C192.28 427.89%2C187.58 414.82%2C184.10 403.00%2C181.66 399.01%2C180.84 387.91%2C180.19 385.31%2C178.15 383.20%2C176.49 382.80%2C173.40 381.62%2C171.00 380.31%2C168.36 379.10%2C167.10 378.39%2C164.00 376.45%2C155.45 381.77%2C133.42 381.99%2C124.00 382.11%2C118.31 381.90%2C113.53 377.78%2C109.11 370.81%2C101.64 359.24%2C103.73 354.92%2C113.00 351.98%2C119.91 353.59%2C127.86 354.92%2C135.00 356.18%2C143.75 357.05%2C150.08 357.00%2C159.00 356.93%2C172.46 352.16%2C166.31 352.00%2C179.00 322.16%2C180.37 288.94%2C192.63 264.00%2C208.69 256.14%2C213.75 247.93%2C219.91 241.00%2C226.17 238.50%2C228.43 232.87%2C234.79 230.00%2C235.49 228.05%2C235.96 225.13%2C234.59 223.00%2C234.22 220.80%2C233.84 219.25%2C234.06 217.00%2C233.15 211.66%2C230.99 198.37%2C217.65 194.17%2C213.00 188.30%2C206.51 183.61%2C199.54 174.00%2C199.04 159.75%2C198.31 155.84%2C211.34 161.01%2C220.00 165.34%2C227.27 173.09%2C230.35 180.00%2C234.45 186.12%2C238.08 199.61%2C246.30 203.15%2C252.01 203.15%2C252.01 205.47%2C257.70 205.47%2C257.70 206.35%2C259.49 208.10%2C261.07 208.33%2C262.46 208.75%2C265.03 202.92%2C273.39 201.43%2C276.00 196.26%2C285.03 191.30%2C297.10 188.00%2C307.00 181.22%2C327.31 177.97%2C348.62 178.00%2C370.00 178.00%2C370.00 180.00%2C395.00 180.00%2C395.00 169.67%2C396.74 174.11%2C401.22 161.00%2C404.35 149.33%2C407.12 126.34%2C406.63 118.02%2C411.53 108.10%2C417.37 108.11%2C431.51 119.00%2C436.15 130.21%2C440.92 149.36%2C429.76 161.00%2C426.43 164.16%2C425.52 169.83%2C423.96 173.00%2C424.14 179.08%2C424.49 175.02%2C426.24 188.00%2C426.00 189.16%2C433.52 194.32%2C445.03 197.76%2C452.00 208.97%2C474.74 222.76%2C491.52 241.00%2C508.96 245.93%2C513.68 254.31%2C520.05 260.00%2C523.98 262.17%2C525.47 268.82%2C529.32 269.79%2C531.38 270.77%2C533.42 269.51%2C535.68 269.79%2C538.96 269.73%2C541.38 270.44%2C542.43 269.79%2C545.16 268.86%2C550.82 259.44%2C565.91 255.86%2C571.00 250.64%2C578.39 245.61%2C584.45 246.05%2C594.00 246.65%2C607.20 261.18%2C611.20 270.37%2C601.67 275.18%2C596.69 276.41%2C590.39 278.29%2C584.00 278.29%2C584.00 286.31%2C562.00 286.31%2C562.00 292.40%2C548.86 294.88%2C556.11 300.00%2C545.00 328.12%2C554.73 356.26%2C559.67 386.00%2C556.83 397.21%2C555.76 408.11%2C553.38 419.00%2C550.63 421.96%2C549.88 431.78%2C546.48 433.90%2C546.92 436.03%2C547.36 438.27%2C550.16 440.21%2C551.58 442.59%2C553.31 443.53%2C553.58 445.61%2C556.05 452.20%2C563.86 456.12%2C582.09 459.70%2C592.00 462.49%2C599.73 468.72%2C607.85 478.00%2C606.63 484.69%2C605.75 488.98%2C600.52 489.66%2C594.00 490.43%2C586.66 485.91%2C579.74 481.98%2C574.00 477.29%2C567.17 470.65%2C557.44 467.31%2C550.00 462.43%2C539.12 468.92%2C542.96 464.00%2C531.00 473.63%2C527.44 487.29%2C516.07 495.00%2C509.07 521.56%2C484.98 537.34%2C458.61 549.00%2C425.00 558.47%2C427.60 556.97%2C422.09 568.00%2C424.43 568.00%2C424.43 607.00%2C436.96 607.00%2C436.96 614.22%2C437.30 621.24%2C435.52 624.11%2C428.00 627.22%2C419.86 621.25%2C412.42 614.00%2C409.36 609.08%2C407.29 600.39%2C407.20 595.00%2C406.96 590.64%2C406.77 576.10%2C404.68 572.00%2C403.51 562.95%2C400.92 565.61%2C396.62 556.00%2C395.00 556.00%2C395.00 557.00%2C380.00 557.00%2C380.00 Z M 350.00%2C217.00 C 350.00%2C217.00 348.00%2C250.00 348.00%2C250.00 348.00%2C250.00 347.00%2C264.00 347.00%2C264.00 347.00%2C264.00 346.00%2C287.00 346.00%2C287.00 345.87%2C297.63 341.31%2C310.19 328.00%2C306.36 322.74%2C304.85 310.11%2C295.07 305.00%2C291.42 305.00%2C291.42 276.00%2C270.86 276.00%2C270.86 270.80%2C267.14 265.12%2C263.95 261.00%2C259.00 283.51%2C236.99 318.35%2C219.57 350.00%2C217.00 Z M 458.00%2C245.65 C 463.37%2C249.75 469.98%2C254.64 474.00%2C260.00 474.00%2C260.00 424.00%2C295.71 424.00%2C295.71 418.45%2C299.67 409.10%2C307.56 402.00%2C306.63 390.37%2C305.12 390.66%2C295.62 389.83%2C287.00 389.83%2C287.00 389.00%2C277.00 389.00%2C277.00 389.00%2C277.00 388.00%2C259.00 388.00%2C259.00 388.00%2C259.00 387.00%2C243.00 387.00%2C243.00 387.00%2C243.00 386.00%2C217.00 386.00%2C217.00 413.03%2C221.86 435.69%2C228.62 458.00%2C245.65 Z M 258.00%2C304.93 C 258.00%2C304.93 289.00%2C332.72 289.00%2C332.72 295.42%2C338.37 303.69%2C345.37 299.35%2C355.00 295.79%2C362.89 284.60%2C364.71 277.00%2C366.86 277.00%2C366.86 217.00%2C384.00 217.00%2C384.00 215.40%2C377.43 215.92%2C366.09 216.00%2C359.00 216.29%2C334.69 226.02%2C308.80 238.00%2C288.00 244.56%2C292.17 252.07%2C299.54 258.00%2C304.93 Z M 508.60%2C311.00 C 515.69%2C328.71 520.21%2C350.91 520.00%2C370.00 520.00%2C370.00 519.00%2C384.00 519.00%2C384.00 519.00%2C384.00 454.00%2C365.29 454.00%2C365.29 444.54%2C362.57 433.95%2C360.52 435.11%2C348.00 435.86%2C339.96 446.16%2C332.48 452.00%2C327.42 452.00%2C327.42 496.00%2C288.00 496.00%2C288.00 501.50%2C293.39 505.72%2C303.80 508.60%2C311.00 Z M 373.00%2C343.00 C 375.23%2C343.02 377.71%2C342.87 379.71%2C344.02 382.83%2C345.81 392.75%2C358.50 393.53%2C362.00 394.23%2C365.13 392.43%2C371.75 391.63%2C375.00 390.21%2C380.76 390.53%2C383.98 384.98%2C387.20 381.81%2C389.05 371.25%2C394.58 368.00%2C394.58 364.26%2C394.58 348.22%2C386.97 346.30%2C383.79 344.90%2C381.46 343.82%2C374.96 343.12%2C372.00 342.45%2C369.17 340.95%2C364.77 341.65%2C362.00 342.74%2C357.66 352.32%2C346.69 356.04%2C344.02 361.19%2C342.27 367.56%2C342.96 373.00%2C343.00 Z M 274.00%2C410.75 C 274.00%2C410.75 301.42%2C406.28 301.42%2C406.28 314.90%2C405.57 318.21%2C415.88 314.80%2C427.00 314.80%2C427.00 287.00%2C495.00 287.00%2C495.00 279.03%2C493.05 268.83%2C483.76 263.00%2C478.00 248.36%2C463.53 229.79%2C439.38 225.00%2C419.00 225.00%2C419.00 274.00%2C410.75 274.00%2C410.75 Z M 440.42%2C475.00 C 440.42%2C475.00 425.20%2C438.00 425.20%2C438.00 422.29%2C430.75 416.48%2C420.73 420.45%2C413.02 425.26%2C403.68 435.62%2C405.91 444.00%2C407.42 444.00%2C407.42 511.00%2C419.00 511.00%2C419.00 502.92%2C442.30 491.41%2C459.62 474.00%2C477.00 467.89%2C483.10 456.99%2C492.94 449.00%2C496.00 449.00%2C496.00 440.42%2C475.00 440.42%2C475.00 Z M 329.23%2C492.00 C 329.23%2C492.00 351.86%2C451.00 351.86%2C451.00 355.72%2C444.13 360.59%2C435.49 370.00%2C437.41 378.47%2C439.13 382.61%2C449.24 386.42%2C456.00 386.42%2C456.00 417.00%2C512.00 417.00%2C512.00 382.18%2C523.39 353.77%2C522.16 319.00%2C512.00 320.74%2C506.03 326.10%2C497.76 329.23%2C492.00 Z%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22M 211.64776%2C688.72752 C 199.18399%2C681.12883 204.11492%2C686.90132 106.38132%2C565.49488 63.249477%2C511.91572 25.861839%2C464.02125 23.297683%2C459.06272 c -2.564155%2C-4.95855 -4.662101%2C-13.19299 -4.662101%2C-18.2988 0%2C-13.66622 60.851497%2C-274.62895 66.655226%2C-285.85213 5.745934%2C-11.11141 10.493927%2C-13.62254 165.090372%2C-87.313529 100.50103%2C-47.905502 105.94827%2C-50.104506 120.7775%2C-48.756997 21.60054%2C1.962804 259.4388%2C115.387256 273.4144%2C130.390606 8.74397%2C9.387 11.42228%2C18.89968 37.82349%2C134.33957 37.09879%2C162.21523 36.24332%2C157.97694 33.82846%2C167.59859 -1.82843%2C7.28502 -151.28754%2C197.23748 -176.95311%2C224.89548 -17.91576%2C19.30659 -15.51217%2C19.04286 -173.44885%2C19.0301 -139.36163%2C-0.0124 -144.06727%2C-0.20562 -154.17531%2C-6.36809 l 0%2C0 z m 59.63042%2C-85.19822 c 2.53653%2C-2.53652 7.58811%2C-13.55546 11.22574%2C-24.48653 3.63762%2C-10.93108 9.25693%2C-22.26664 12.48735%2C-25.19013 5.47954%2C-4.95889 7.33455%2C-4.98309 27.65689%2C-0.36087 26.55799%2C6.04047 63.37339%2C6.21062 90.40095%2C0.41774 26.82521%2C-5.74948 28.96243%2C-4.22176 42.20742%2C30.17064 6.44828%2C16.74379 9.68553%2C21.37849 16.04797%2C22.97534 20.00337%2C5.02052 24.99029%2C-14.63592 9.92491%2C-39.12025 -5.4188%2C-8.80668 -10.89191%2C-20.62123 -12.16242%2C-26.25452 -2.13235%2C-9.45464 -1.48249%2C-10.688 8.45015%2C-16.03707 18.10297%2C-9.74911 48.14816%2C-45.08972 61.53407%2C-72.37945 8.3579%2C-17.03916 14.35139%2C-25.50497 18.85918%2C-26.63857 3.63428%2C-0.91392 14.81563%2C1.24554 24.84744%2C4.79882 28.12743%2C9.96267 44.64011%2C7.40531 44.64011%2C-6.91346 0%2C-10.67446 -10.44158%2C-17.22869 -31.18615%2C-19.57566 -10.81693%2C-1.2238 -23.59951%2C-4.2586 -28.40572%2C-6.74397 -8.34834%2C-4.31711 -8.74102%2C-5.52097 -8.79252%2C-26.95714 -0.0705%2C-29.36558 -6.754%2C-59.98059 -18.79864%2C-86.11178 -6.56128%2C-14.23485 -9.02292%2C-23.30388 -7.56894%2C-27.88497 1.18513%2C-3.73401 10.71049%2C-12.31892 21.16745%2C-19.07758 21.48536%2C-13.88666 23.7753%2C-16.56209 23.84208%2C-27.85574 0.0593%2C-10.02002 -10.4658%2C-15.69188 -21.52608%2C-11.60021 -4.17832%2C1.54575 -14.92658%2C9.74252 -23.88504%2C18.21505 -8.95844%2C8.47253 -18.62586%2C15.4046 -21.48313%2C15.4046 -2.85727%2C0 -13.77288%2C-6.48513 -24.25689%2C-14.4114 -24.55542%2C-18.56473 -50.43239%2C-30.78657 -78.31991%2C-36.99096 -27.47994%2C-6.11371 -30.17834%2C-10.24779 -25.99058%2C-39.81876 3.25597%2C-22.99146 0.43604%2C-34.52706 -9.18697%2C-37.58128 -7.49461%2C-2.37869 -17.4184%2C2.3558 -20.21529%2C9.64438 -1.10842%2C2.88848 -1.10174%2C13.32674 0.0155%2C23.19615 3.03455%2C26.82207 -0.19816%2C39.63 -10.5137%2C41.65535 -42.81015%2C8.40521 -65.79704%2C18.24725 -94.59966%2C40.50336 -9.8248%2C7.59174 -20.4974%2C13.80316 -23.71689%2C13.80316 -3.21949%2C0 -14.04955%2C-7.72918 -24.06679%2C-17.17596 -15.83344%2C-14.93174 -19.63355%2C-17.06231 -29.08393%2C-16.30613 -10.45342%2C0.83643 -10.87075%2C1.3435 -10.87075%2C13.20817 0%2C11.57756 1.09949%2C13.06593 17.83144%2C24.13804 9.8073%2C6.48983 20.13467%2C15.31485 22.94973%2C19.61116 4.87705%2C7.44333 4.72878%2C8.52708 -3.14615%2C22.99594 -12.08927%2C22.21197 -20.55241%2C58.88284 -20.55241%2C89.05382 0%2C25.04796 -0.25661%2C25.9543 -8.54131%2C30.16681 -4.69772%2C2.38865 -16.92732%2C5.33251 -27.17689%2C6.54193 -23.88502%2C2.81842 -33.30936%2C8.62455 -32.02332%2C19.72897 0.62557%2C5.40152 3.86937%2C9.70972 9.23947%2C12.27128 7.11466%2C3.39372 11.4251%2C2.92476 30.73008%2C-3.34326 30.68433%2C-9.96273 34.14229%2C-8.80994 44.43347%2C14.81281 10.18607%2C23.38144 36.58457%2C56.29859 57.92933%2C72.23394 18.99536%2C14.18136 19.62788%2C20.41105 4.60241%2C45.32906 -11.16257%2C18.51181 -13.69099%2C32.26854 -7.13565%2C38.82388 5.13265%2C5.13265 16.62346%2C4.67434 22.18256%2C-0.88475 z%22 id%3D%22path2986%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22m 295.55767%2C281.76003 -31.75731%2C-21.99996 11.54199%2C-9.17242 c 14.41086%2C-11.45232 45.45892%2C-26.18898 60.93903%2C-28.92412 l 11.71165%2C-2.0693 -2.06514%2C35.09453 c -2.33966%2C39.75975 -4.79135%2C49.07123 -12.92032%2C49.07123 -3.13093%2C0 -19.98338%2C-9.89998 -37.4499%2C-21.99996 z%22 id%3D%22path2988%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22m 394.75802%2C296.77165 c -1.45603%2C-3.84359 -3.68331%2C-22.90514 -4.94951%2C-42.359 l -2.30218%2C-35.37066 8.90879%2C2.07076 c 19.89331%2C4.62399 43.91797%2C15.20006 58.19539%2C25.61862 17.69226%2C12.91046 18.79741%2C10.773 -19.7698%2C38.23649 -28.61516%2C20.37669 -36.01014%2C22.55441 -40.08269%2C11.80379 z%22 id%3D%22path2990%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22m 476.76032%2C369.50784 c -51.75745%2C-15.82263 -51.74616%2C-14.91999 -0.75267%2C-60.21158 l 20.98885%2C-18.64195 6.36541%2C14.39007 c 10.72838%2C24.25328 19.70972%2C76.84004 12.99902%2C76.1107 -1.2812%2C-0.13924 -19.10147%2C-5.3805 -39.60061%2C-11.64724 z%22 id%3D%22path2992%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22m 435.48897%2C456.7043 c -14.46935%2C-36.25055 -15.71568%2C-43.42123 -8.05778%2C-46.35984 7.32986%2C-2.81274 78.84102%2C8.75347 78.80632%2C12.74612 -0.11228%2C12.91882 -43.26201%2C67.05973 -53.40025%2C67.00247 -2.21801%2C-0.0124 -10.019%2C-15.0264 -17.34829%2C-33.38875 l 0%2C0 z%22 id%3D%22path2994%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22m 338.54641%2C514.3208 c -7.68717%2C-1.69573 -14.4868%2C-3.5703 -15.11027%2C-4.16572 -0.62347%2C-0.59542 4.09998%2C-10.58909 10.49655%2C-22.20816 27.03082%2C-49.1002 32.08856%2C-54.10343 42.54932%2C-42.09061 4.06983%2C4.67366 36.60673%2C62.08283 36.60673%2C64.5901 0%2C0.4929 -7.05713%2C2.40966 -15.68253%2C4.25948 -18.62111%2C3.99351 -39.63369%2C3.85604 -58.8598%2C-0.38509 z%22 id%3D%22path2996%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22m 262.97346%2C473.7049 c -16.77296%2C-17.17992 -33.13461%2C-41.67919 -33.13461%2C-49.61442 0%2C-3.17228 10.01376%2C-5.8894 36.9054%2C-10.01386 20.29798%2C-3.11317 39.1665%2C-4.79264 41.93006%2C-3.73216 2.76356%2C1.06047 4.92594%2C5.11676 4.80529%2C9.01396 -0.30476%2C9.84389 -25.6065%2C68.49526 -30.21033%2C70.02988 -2.06811%2C0.68936 -11.20122%2C-6.36817 -20.29581%2C-15.6834 l 0%2C0 z%22 id%3D%22path2998%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22m 217.41513%2C369.61776 c 0%2C-28.25915 15.19645%2C-76.45934 23.50125%2C-74.54137 6.0423%2C1.39545 57.25975%2C49.00646 57.20538%2C53.17729 -0.10849%2C8.32162 -6.5906%2C11.97505 -36.32712%2C20.47461 -17.20033%2C4.91635 -34.22222%2C9.87476 -37.82642%2C11.01869 -5.90819%2C1.87519 -6.55309%2C0.87836 -6.55309%2C-10.12922 z%22 id%3D%22path3000%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22m 355.12214%2C387.05557 c -12.30722%2C-5.95336 -13.73186%2C-24.30319 -2.74022%2C-35.29483 10.083%2C-10.083 21.74685%2C-9.76596 31.59351%2C0.85877 18.12886%2C19.56137 -4.29002%2C46.31803 -28.85329%2C34.43606 z%22 id%3D%22path3002%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E%3C%2Fsvg%3E");\n background-color: #326ce5;\n}\n');const rr="spinnaker.kubernetes",ir=[In,jn,_n,Wn,Qn,ws,Wt,Ds,fn,An,kn,bn,Xn,xn,Mn,Ts,da,zn,Gn,qn,Un,Qt,Ln,Ns,Ke,Pn,os,ss,Ue];p.feature.kubernetesRawResources&&ir.push(As),e(rr,ir).config(()=>{Ve.registerProvider("kubernetes",{name:"Kubernetes",adHocInfrastructureWritesEnabled:p.kubernetesAdHocInfraWritesEnabled,logo:{path:"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20role%3D%22img%22%20viewBox%3D%220.03%20-8.96%20362.18%20282.43%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%23fff%7D.cls-2%7Bfill%3A%23326ce5%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Cg%20id%3D%22its-pronounced%22%3E%3Cg%20id%3D%22kyoob-cuttle%22%3E%3Cpath%20id%3D%22kkkkkkk%22%20d%3D%22M16.841%20243.586c.952-1.07%201.904-2.141%202.974-3.212q1.493-1.66%202.975-3.33c.951-1.191%201.903-2.262%202.737-3.214s1.665-1.903%202.26-2.617h11.54c-2.26%202.617-4.522%205.235-6.781%207.614q-3.213%203.57-7.138%207.495a48.052%2048.052%200%200%201%204.045%204.284c1.427%201.665%202.736%203.33%204.045%204.995a50.807%2050.807%200%200%201%203.568%205.236c1.07%201.784%202.024%203.33%202.737%204.759H28.62c-.715-1.19-1.547-2.38-2.38-3.69a43.32%2043.32%200%200%200-2.856-4.162%2034.21%2034.21%200%200%200-3.211-4.045%2020.442%2020.442%200%200%200-3.213-3.213v14.99H7.205v-49.134l9.755-1.547v28.791%22%2F%3E%3Cpath%20id%3D%22uuuuuuu%22%20d%3D%22M73.709%20264.406a46.294%2046.294%200%200%201-6.424%201.309%2045.986%2045.986%200%200%201-8.21.594%2019.17%2019.17%200%200%201-7.375-1.189%2010.928%2010.928%200%200%201-6.9-8.328%2027.977%2027.977%200%200%201-.715-6.425v-19.154h9.757v17.965c0%203.093.357%205.354%201.19%206.782s2.378%202.141%204.639%202.141a15.169%2015.169%200%200%200%202.26-.119c.833-.119%201.429-.119%202.142-.238v-26.53h9.755l-.119%2033.192%22%2F%3E%3Cpath%20id%3D%22bbbbbbb%22%20d%3D%22M105%20248.107c0-6.305-2.262-9.398-6.902-9.398a12.706%2012.706%200%200%200-2.974.356%208.99%208.99%200%200%200-2.379.952v17.727c.475.119%201.07.119%201.784.238.714%200%201.546.12%202.38.12a7.366%207.366%200%200%200%206.068-2.738%2012.2%2012.2%200%200%200%202.022-7.257m9.874.238a21.543%2021.543%200%200%201-1.19%207.496%2015.313%2015.313%200%200%201-3.45%205.71%2018.297%2018.297%200%200%201-5.591%203.688%2021.774%2021.774%200%200%201-7.615%201.19c-1.189%200-2.379-.12-3.688-.238s-2.497-.238-3.806-.358c-1.19-.118-2.38-.356-3.57-.595a15.037%2015.037%200%200%201-2.974-.832V216.34l9.756-1.546v17.132a16.617%2016.617%200%200%201%203.45-1.07%2019.691%2019.691%200%200%201%203.807-.357%2015.074%2015.074%200%200%201%206.424%201.308%2012.884%2012.884%200%200%201%204.76%203.57%2014.348%2014.348%200%200%201%202.855%205.71%2033.785%2033.785%200%200%201%20.832%207.257%22%2F%3E%3Cpath%20id%3D%22eeeeeee0%22%20d%3D%22M120.704%20248.702a20.303%2020.303%200%200%201%201.427-7.97%2018.206%2018.206%200%200%201%203.689-5.712%2013.866%2013.866%200%200%201%205.233-3.45%2015.9%2015.9%200%200%201%206.187-1.19%2015.227%2015.227%200%200%201%2011.54%204.521c2.855%202.974%204.282%207.378%204.282%2013.087a10.887%2010.887%200%200%201-.118%201.904c0%20.595-.119%201.189-.119%201.784h-22.13a6.522%206.522%200%200%200%202.856%204.759%2011.32%2011.32%200%200%200%206.662%201.784%2025.212%2025.212%200%200%200%205.235-.475%2021.342%2021.342%200%200%200%204.283-1.19l1.308%207.97c-.476.239-1.19.477-2.14.833a11.994%2011.994%200%200%201-2.976.596%2026.855%2026.855%200%200%201-3.45.475c-1.19.12-2.497.238-3.688.238a20.92%2020.92%200%200%201-8.09-1.427%2017.517%2017.517%200%200%201-5.71-3.688%2017.172%2017.172%200%200%201-3.33-5.71%2027.944%2027.944%200%200%201-.954-7.139m22.962-3.807a7.692%207.692%200%200%200-.476-2.38%207.232%207.232%200%200%200-1.07-2.141%205.684%205.684%200%200%200-4.76-2.142%207.188%207.188%200%200%200-2.855.595%204.732%204.732%200%200%200-1.903%201.428%206.24%206.24%200%200%200-1.19%202.142%2017.396%2017.396%200%200%200-.595%202.38h12.85%22%2F%3E%3Cpath%20id%3D%22rrrrrrr%22%20d%3D%22M181.26%20239.78a17.875%2017.875%200%200%200-3.094-.596%2019.688%2019.688%200%200%200-3.807-.357%2020.977%2020.977%200%200%200-2.26.238%2018.687%2018.687%200%200%200-1.904.357v26.293h-9.756v-32.717a50.606%2050.606%200%200%201%206.186-1.666%2033.468%2033.468%200%200%201%207.971-.832%2011.58%2011.58%200%200%201%201.904.118%2016.256%2016.256%200%200%201%202.26.238c.715.12%201.428.238%202.261.357.713.12%201.428.358%201.903.476l-1.665%208.09%22%2F%3E%3Cpath%20id%3D%22nnnnnnn%22%20d%3D%22M188.16%20232.403a57.524%2057.524%200%200%201%2014.633-1.903%2018.147%2018.147%200%200%201%207.257%201.189%2010.191%2010.191%200%200%201%204.64%203.212%2013.897%2013.897%200%200%201%202.38%204.997%2026.54%2026.54%200%200%201%20.713%206.424v19.393h-9.756v-18.201c0-3.094-.356-5.354-1.19-6.663s-2.379-1.904-4.64-1.904a15.17%2015.17%200%200%200-2.26.12%2011.787%2011.787%200%200%200-2.14.237v26.531h-9.638v-33.43%22%2F%3E%3Cpath%20id%3D%22eeeeeee1%22%20d%3D%22M225.04%20248.702a20.301%2020.301%200%200%201%201.427-7.97%2018.206%2018.206%200%200%201%203.69-5.712%2013.866%2013.866%200%200%201%205.234-3.45%2015.9%2015.9%200%200%201%206.187-1.19%2015.227%2015.227%200%200%201%2011.54%204.521c2.854%202.974%204.282%207.378%204.282%2013.087a10.884%2010.884%200%200%201-.119%201.904c0%20.595-.12%201.189-.12%201.784h-22.127a6.522%206.522%200%200%200%202.856%204.759%2011.32%2011.32%200%200%200%206.66%201.784%2025.213%2025.213%200%200%200%205.237-.475%2021.34%2021.34%200%200%200%204.282-1.19l1.309%207.97c-.476.239-1.19.477-2.142.833a11.992%2011.992%200%200%201-2.974.596%2026.86%2026.86%200%200%201-3.45.475c-1.19.12-2.499.238-3.688.238a20.92%2020.92%200%200%201-8.09-1.427%2017.516%2017.516%200%200%201-5.71-3.688%2017.172%2017.172%200%200%201-3.332-5.71%2027.938%2027.938%200%200%201-.952-7.139m22.961-3.807a7.693%207.693%200%200%200-.475-2.38%207.233%207.233%200%200%200-1.071-2.141%205.684%205.684%200%200%200-4.76-2.142%207.188%207.188%200%200%200-2.855.595%204.732%204.732%200%200%200-1.903%201.428%206.24%206.24%200%200%200-1.19%202.142%2017.388%2017.388%200%200%200-.594%202.38h12.848%22%2F%3E%3Cpath%20id%3D%22ttttttt%22%20d%3D%22M264.657%20222.647l9.756-1.546v10.112h11.66v8.09h-11.66v12.135a9.566%209.566%200%200%200%201.07%204.878c.715%201.19%202.261%201.785%204.403%201.785a29.167%2029.167%200%200%200%203.212-.238%2019.344%2019.344%200%200%200%203.093-.833l1.427%207.614a18.948%2018.948%200%200%201-3.926%201.19%2022.872%2022.872%200%200%201-5.354.475%2018.18%2018.18%200%200%201-6.66-1.07%2011.01%2011.01%200%200%201-4.165-2.975%2011.804%2011.804%200%200%201-2.261-4.758%2030.834%2030.834%200%200%201-.594-6.068v-28.791%22%2F%3E%3Cpath%20id%3D%22eeeeeee2%22%20d%3D%22M291.069%20248.702a20.3%2020.3%200%200%201%201.428-7.97%2018.206%2018.206%200%200%201%203.688-5.712%2013.866%2013.866%200%200%201%205.234-3.45%2015.9%2015.9%200%200%201%206.187-1.19%2015.227%2015.227%200%200%201%2011.54%204.521c2.856%202.974%204.283%207.378%204.283%2013.087a10.885%2010.885%200%200%201-.12%201.904c0%20.595-.119%201.189-.119%201.784h-22.128a6.522%206.522%200%200%200%202.856%204.759%2011.32%2011.32%200%200%200%206.661%201.784%2025.213%2025.213%200%200%200%205.236-.475%2021.34%2021.34%200%200%200%204.282-1.19l1.31%207.97c-.476.239-1.19.477-2.143.833a11.992%2011.992%200%200%201-2.974.596%2026.856%2026.856%200%200%201-3.45.475c-1.19.12-2.497.238-3.688.238a20.92%2020.92%200%200%201-8.09-1.427%2017.516%2017.516%200%200%201-5.71-3.688%2017.172%2017.172%200%200%201-3.33-5.71%2023.525%2023.525%200%200%201-.953-7.139m22.843-3.807a7.692%207.692%200%200%200-.477-2.38%207.232%207.232%200%200%200-1.07-2.141%205.684%205.684%200%200%200-4.759-2.142%207.188%207.188%200%200%200-2.856.595%204.732%204.732%200%200%200-1.904%201.428%206.24%206.24%200%200%200-1.188%202.142%2017.391%2017.391%200%200%200-.596%202.38h12.85%22%2F%3E%3Cpath%20id%3D%22sssssss%22%20d%3D%22M340.68%20258.576a9.776%209.776%200%200%200%203.807-.475%202.084%202.084%200%200%200%201.07-2.023c0-.833-.475-1.427-1.427-2.022a22.567%2022.567%200%200%200-4.403-2.023c-1.546-.595-2.974-1.19-4.162-1.785a11.894%2011.894%200%200%201-3.095-2.141%209.304%209.304%200%200%201-2.022-3.094%2011.526%2011.526%200%200%201-.714-4.282%209.052%209.052%200%200%201%203.569-7.614c2.38-1.904%205.711-2.856%209.875-2.856a33.842%2033.842%200%200%201%206.068.595%2021.997%2021.997%200%200%201%204.52%201.191l-1.665%207.614c-1.19-.358-2.38-.715-3.69-1.071a16.645%2016.645%200%200%200-4.4-.477c-3.094%200-4.522.833-4.522%202.498a3.474%203.474%200%200%200%20.238%201.072%201.998%201.998%200%200%200%20.833.952c.357.238.952.594%201.547.951.714.357%201.546.595%202.617%201.071a39.243%2039.243%200%200%201%205.354%202.379%208.882%208.882%200%200%201%203.213%202.499%206.214%206.214%200%200%201%201.665%202.974%2012.346%2012.346%200%200%201%20.476%203.807%208.868%208.868%200%200%201-3.808%207.734c-2.498%201.784-6.067%202.616-10.826%202.616a27.502%2027.502%200%200%201-7.613-.832%2021.717%2021.717%200%200%201-4.164-1.31l1.665-7.97a36.36%2036.36%200%200%200%205.116%201.546%2021.894%2021.894%200%200%200%204.877.476%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cpath%20d%3D%22M76.523%20126.992h10.619v8.432h-10.62z%22%20class%3D%22cls-1%22%2F%3E%3Cpath%20d%3D%22M200.688%20120.047a3.59%203.59%200%200%200-.855-.065%203.685%203.685%200%200%200-1.425.37%203.725%203.725%200%200%200-1.803%204.825l-.026.037%208.528%2020.603a43.53%2043.53%200%200%200%2017.595-22.102l-21.976-3.714zm-34.194%202.92a3.72%203.72%200%200%200-3.568-2.894%203.656%203.656%200%200%200-.733.065l-.037-.045-21.785%203.698a43.695%2043.695%200%200%200%2017.54%2021.946l8.442-20.399-.066-.08a3.683%203.683%200%200%200%20.207-2.291zm18.245%208a3.718%203.718%200%200%200-6.557.008h-.018l-10.713%2019.372a43.637%2043.637%200%200%200%2023.815%201.225q2.197-.5%204.292-1.199l-10.738-19.407zm33.914-45L202.17%20100.72l.009.047a3.725%203.725%200%200%200%201.46%206.395l.02.089%2021.35%206.15a44.278%2044.278%200%200%200-6.356-27.432zM188.03%2087.62a3.725%203.725%200%200%200%205.913%202.84l.065.028%2018.036-12.789a43.85%2043.85%200%200%200-25.287-12.19l1.253%2022.105zm-19.1%202.922a3.72%203.72%200%200%200%205.904-2.85l.092-.044%201.253-22.139a44.68%2044.68%200%200%200-4.501.775%2043.467%2043.467%200%200%200-20.937%2011.409l18.154%2012.869zm-9.678%2016.728a3.72%203.72%200%200%200%201.462-6.396l.018-.087-16.574-14.825a43.454%2043.454%200%200%200-6.168%2027.511l21.245-6.13zm16.098%206.512l6.114%202.94%206.096-2.933%201.514-6.582-4.219-5.276h-6.79l-4.231%205.268z%22%20class%3D%22cls-2%22%2F%3E%3Cpath%20d%3D%22M282.538%20126.748l-17.422-75.675A13.602%2013.602%200%200%200%20257.823%2042L187.302%208.33a13.589%2013.589%200%200%200-11.705%200L105.09%2042.018a13.598%2013.598%200%200%200-7.295%209.072l-17.394%2075.673a13.315%2013.315%200%200%200-.004%205.81%2013.505%2013.505%200%200%200%20.491%201.718%2013.101%2013.101%200%200%200%201.343%202.726c.239.365.491.72.765%201.064l48.804%2060.678c.213.264.448.505.681.75a13.423%2013.423%200%200%200%202.574%202.133%2013.924%2013.924%200%200%200%203.857%201.677%2013.298%2013.298%200%200%200%203.43.473h.759l77.504-.018a12.996%2012.996%200%200%200%201.41-.083%2013.47%2013.47%200%200%200%201.989-.378%2013.87%2013.87%200%200%200%201.381-.442c.353-.135.705-.27%201.045-.433a13.941%2013.941%200%200%200%201.479-.822%2013.304%2013.304%200%200%200%203.237-2.865l1.488-1.85%2047.299-58.84a13.185%2013.185%200%200%200%202.108-3.785%2013.67%2013.67%200%200%200%20.5-1.724%2013.282%2013.282%200%200%200-.004-5.809zm-73.147%2029.432a14.515%2014.515%200%200%200%20.703%201.703%203.314%203.314%200%200%200-.327%202.49%2039.373%2039.373%200%200%200%203.742%206.7%2035.065%2035.065%200%200%201%202.263%203.364c.17.315.392.803.553%201.136a4.24%204.24%200%201%201-7.63%203.607c-.161-.33-.385-.77-.522-1.082a35.275%2035.275%200%200%201-1.225-3.868%2039.305%2039.305%200%200%200-2.896-7.097%203.335%203.335%200%200%200-2.154-1.307c-.135-.233-.635-1.149-.903-1.623a54.617%2054.617%200%200%201-38.948-.1l-.955%201.731a3.429%203.429%200%200%200-1.819.886%2029.518%2029.518%200%200%200-3.268%207.582%2034.898%2034.898%200%200%201-1.218%203.868c-.135.31-.361.744-.522%201.073v.009l-.007.008a4.238%204.238%200%201%201-7.619-3.616c.159-.335.372-.82.54-1.135a35.178%2035.178%200%200%201%202.262-3.373%2041.227%2041.227%200%200%200%203.82-6.866%204.188%204.188%200%200%200-.376-2.387l.768-1.84a54.922%2054.922%200%200%201-24.338-30.387l-1.839.313a4.68%204.68%200%200%200-2.428-.855%2039.525%2039.525%200%200%200-7.356%202.165%2035.585%2035.585%200%200%201-3.787%201.45c-.305.084-.745.168-1.093.244-.028.01-.052.022-.08.029a.603.603%200%200%201-.065.006%204.236%204.236%200%201%201-1.874-8.224l.061-.015.037-.01c.353-.083.805-.2%201.127-.262a35.268%2035.268%200%200%201%204.05-.326%2039.39%2039.39%200%200%200%207.564-1.242%205.835%205.835%200%200%200%201.814-1.83l1.767-.516a54.613%2054.613%200%200%201%208.613-38.073l-1.353-1.206a4.688%204.688%200%200%200-.848-2.436%2039.366%2039.366%200%200%200-6.277-4.41%2035.251%2035.251%200%200%201-3.499-2.046c-.256-.191-.596-.478-.874-.704l-.063-.044a4.473%204.473%200%200%201-1.038-6.222%204.066%204.066%200%200%201%203.363-1.488%205.03%205.03%200%200%201%202.942%201.11c.287.225.68.526.935.745a35.253%2035.253%200%200%201%202.78%202.95%2039.384%2039.384%200%200%200%205.69%205.142%203.333%203.333%200%200%200%202.507.243q.754.55%201.522%201.082a54.289%2054.289%200%200%201%2027.577-15.754%2055.052%2055.052%200%200%201%207.63-1.173l.1-1.784a4.601%204.601%200%200%200%201.37-2.184%2039.476%2039.476%200%200%200-.47-7.654%2035.468%2035.468%200%200%201-.576-4.014c-.011-.307.006-.731.01-1.081%200-.04-.01-.079-.01-.118a4.242%204.242%200%201%201%208.441-.004c0%20.37.022.861.009%201.2a35.111%2035.111%200%200%201-.579%204.013%2039.533%2039.533%200%200%200-.478%207.656%203.344%203.344%200%200%200%201.379%202.11c.015.305.065%201.323.102%201.884A55.309%2055.309%200%200%201%20221.15%2071.25l1.606-1.147a4.69%204.69%200%200%200%202.56-.278%2039.53%2039.53%200%200%200%205.69-5.148%2035.004%2035.004%200%200%201%202.787-2.95c.259-.222.65-.52.936-.746a4.242%204.242%200%201%201%205.258%206.598c-.283.229-.657.548-.929.75a35.096%2035.096%200%200%201-3.507%202.046%2039.495%2039.495%200%200%200-6.277%204.41%203.337%203.337%200%200%200-.792%202.39c-.235.216-1.06.947-1.497%201.343a54.837%2054.837%200%200%201%208.792%2037.983l1.704.496a4.745%204.745%200%200%200%201.82%201.831%2039.464%2039.464%200%200%200%207.568%201.245%2035.64%2035.64%200%200%201%204.046.324c.355.065.868.207%201.23.29a4.236%204.236%200%201%201-1.878%208.223l-.061-.008c-.028-.007-.054-.022-.083-.029-.348-.076-.785-.152-1.09-.232a35.14%2035.14%200%200%201-3.785-1.462%2039.477%2039.477%200%200%200-7.363-2.165%203.337%203.337%200%200%200-2.362.877q-.9-.171-1.804-.316a54.92%2054.92%200%200%201-24.328%2030.605z%22%20class%3D%22cls-2%22%2F%3E%3Cpath%20d%3D%22M291.737%20128.689L272.73%2046.128a14.838%2014.838%200%200%200-7.958-9.9L187.837-.502a14.825%2014.825%200%200%200-12.771%200L98.138%2036.25a14.838%2014.838%200%200%200-7.961%209.895L71.203%20128.71a14.668%2014.668%200%200%200%201.995%2011.185c.261.4.538.788.838%201.162l53.246%2066.205a14.98%2014.98%200%200%200%2011.499%205.487l85.387-.02a14.986%2014.986%200%200%200%2011.5-5.48l53.227-66.211a14.72%2014.72%200%200%200%202.842-12.347zm-9.197%203.866a13.677%2013.677%200%200%201-.498%201.723%2013.184%2013.184%200%200%201-2.11%203.785l-47.299%2058.838-1.486%201.852a13.305%2013.305%200%200%201-3.24%202.865%2013.943%2013.943%200%200%201-1.474.822q-.513.237-1.045.431a13.865%2013.865%200%200%201-1.383.444%2013.472%2013.472%200%200%201-1.989.379%2012.988%2012.988%200%200%201-1.41.082l-77.504.018h-.76a13.298%2013.298%200%200%201-3.429-.472%2013.924%2013.924%200%200%201-3.855-1.678%2013.423%2013.423%200%200%201-2.576-2.132c-.233-.246-.468-.487-.68-.75l-48.805-60.679q-.408-.514-.765-1.066a13.102%2013.102%200%200%201-1.343-2.726%2013.506%2013.506%200%200%201-.491-1.719%2013.315%2013.315%200%200%201%20.004-5.809l17.394-75.675a13.598%2013.598%200%200%201%207.295-9.07l70.508-33.686a13.59%2013.59%200%200%201%2011.705%200l70.519%2033.67a13.602%2013.602%200%200%201%207.293%209.073l17.422%2075.675a13.282%2013.282%200%200%201%20.002%205.807z%22%20class%3D%22cls-1%22%2F%3E%3Cpath%20d%3D%22M252.144%20120.687c-.36-.083-.874-.225-1.227-.29a35.635%2035.635%200%200%200-4.046-.326%2039.464%2039.464%200%200%201-7.57-1.242%204.745%204.745%200%200%201-1.82-1.832l-1.704-.496a54.837%2054.837%200%200%200-8.79-37.983c.436-.396%201.262-1.127%201.495-1.342a3.338%203.338%200%200%201%20.792-2.39%2039.495%2039.495%200%200%201%206.277-4.41%2035.097%2035.097%200%200%200%203.507-2.046c.272-.202.644-.522.929-.75a4.242%204.242%200%201%200-5.256-6.6c-.288.227-.68.525-.936.747a35.007%2035.007%200%200%200-2.789%202.95%2039.532%2039.532%200%200%201-5.69%205.148%204.69%204.69%200%200%201-2.56.278l-1.606%201.147a55.309%2055.309%200%200%200-35.032-16.927c-.039-.561-.087-1.577-.102-1.884a3.344%203.344%200%200%201-1.377-2.11%2039.534%2039.534%200%200%201%20.478-7.656%2035.111%2035.111%200%200%200%20.575-4.012c.013-.34-.007-.834-.007-1.201a4.242%204.242%200%201%200-8.441.004c0%20.04.009.078.01.118-.004.35-.021.774-.01%201.08a35.475%2035.475%200%200%200%20.576%204.015%2039.475%2039.475%200%200%201%20.47%207.654%204.601%204.601%200%200%201-1.37%202.182l-.1%201.786a55.055%2055.055%200%200%200-7.63%201.173%2054.289%2054.289%200%200%200-27.574%2015.754q-.77-.531-1.526-1.082a3.333%203.333%200%200%201-2.506-.243%2039.383%2039.383%200%200%201-5.69-5.141%2035.255%2035.255%200%200%200-2.777-2.95c-.257-.22-.65-.52-.938-.749a5.03%205.03%200%200%200-2.942-1.11%204.066%204.066%200%200%200-3.363%201.489%204.473%204.473%200%200%200%201.038%206.222l.065.046c.276.226.616.515.872.702a35.257%2035.257%200%200%200%203.499%202.048%2039.367%2039.367%200%200%201%206.276%204.412%204.69%204.69%200%200%201%20.849%202.434l1.351%201.208a54.613%2054.613%200%200%200-8.611%2038.073l-1.767.514a5.835%205.835%200%200%201-1.814%201.827%2039.39%2039.39%200%200%201-7.565%201.247%2035.264%2035.264%200%200%200-4.049.326c-.324.06-.774.174-1.127.262l-.037.008-.06.018a4.236%204.236%200%201%200%201.875%208.224l.063-.01c.028-.006.052-.02.08-.025.348-.079.786-.163%201.092-.246a35.585%2035.585%200%200%200%203.786-1.451%2039.527%2039.527%200%200%201%207.358-2.165%204.68%204.68%200%200%201%202.426.857l1.84-.315a54.922%2054.922%200%200%200%2024.34%2030.387l-.769%201.84a4.188%204.188%200%200%201%20.377%202.387%2041.227%2041.227%200%200%201-3.82%206.864%2035.183%2035.183%200%200%200-2.263%203.372c-.168.318-.381.805-.542%201.138a4.238%204.238%200%201%200%207.621%203.616l.007-.008v-.01c.16-.33.387-.763.522-1.072a34.9%2034.9%200%200%200%201.218-3.868%2029.517%2029.517%200%200%201%203.268-7.582%203.43%203.43%200%200%201%201.819-.888l.957-1.73a54.617%2054.617%200%200%200%2038.946.099c.268.478.768%201.392.9%201.623a3.335%203.335%200%200%201%202.155%201.31%2039.306%2039.306%200%200%201%202.898%207.096%2035.274%2035.274%200%200%200%201.225%203.868c.137.312.36.751.522%201.082a4.24%204.24%200%201%200%207.63-3.607c-.161-.333-.383-.82-.55-1.136a35.062%2035.062%200%200%200-2.263-3.364%2039.373%2039.373%200%200%201-3.742-6.7%203.314%203.314%200%200%201%20.324-2.49%2014.515%2014.515%200%200%201-.703-1.703%2054.92%2054.92%200%200%200%2024.328-30.605c.546.087%201.497.253%201.806.316a3.337%203.337%200%200%201%202.36-.877%2039.477%2039.477%200%200%201%207.36%202.165%2035.135%2035.135%200%200%200%203.788%201.462c.305.08.74.156%201.09.233.029.008.055.021.083.028l.06.009a4.236%204.236%200%201%200%201.878-8.224zm-40.1-42.987l-18.037%2012.787-.063-.029a3.723%203.723%200%200%201-5.913-2.839l-.02-.009-1.253-22.104A43.85%2043.85%200%200%201%20212.043%2077.7zm-33.978%2024.228h6.788l4.22%205.276-1.513%206.581-6.096%202.933-6.114-2.94-1.516-6.583zM171.68%2066.28a44.676%2044.676%200%200%201%204.503-.774l-1.255%2022.137-.092.044a3.72%203.72%200%200%201-5.904%202.852l-.035.02-18.154-12.872A43.467%2043.467%200%200%201%20171.68%2066.28zm-27.52%2019.681l16.574%2014.823-.018.091a3.72%203.72%200%200%201-1.462%206.394l-.017.072-21.245%206.131a43.454%2043.454%200%200%201%206.168-27.51zm22.191%2039.38l-8.441%2020.396a43.696%2043.696%200%200%201-17.536-21.948l21.783-3.699.037.048a3.655%203.655%200%200%201%20.73-.065%203.72%203.72%200%200%201%203.364%205.185zm24.916%2026.23a43.637%2043.637%200%200%201-23.815-1.224l10.713-19.372h.018a3.725%203.725%200%200%201%206.557-.006h.08l10.74%2019.404q-2.091.698-4.293%201.199zm13.841-5.752l-8.528-20.605.026-.037a3.725%203.725%200%200%201%201.803-4.823%203.685%203.685%200%200%201%201.425-.37%203.59%203.59%200%200%201%20.855.063l.037-.046%2021.977%203.714a43.53%2043.53%200%200%201-17.595%2022.105zm19.903-32.419l-21.352-6.15-.02-.09a3.725%203.725%200%200%201-1.46-6.396l-.008-.043%2016.482-14.751a44.279%2044.279%200%200%201%206.357%2027.43z%22%20class%3D%22cls-1%22%2F%3E%3C%2Fsvg%3E"},serverGroup:{CloneServerGroupModal:_t,detailsActions:Ps,detailsGetter:Gs,detailsSections:[Vs,Ks,Os,zs,Bs,Us,qs,Ls],commandBuilder:js,transformer:_s},serverGroupManager:{details:nr},loadBalancer:{CreateLoadBalancerModal:_t,useDetailsHook:Fn,detailsActions:Dn,detailsSections:[sn,cn,tn,an,ln],transformer:Jt},securityGroup:{reader:Fs,CreateSecurityGroupModal:_t,detailsController:"kubernetesV2SecurityGroupDetailsCtrl",detailsTemplateUrl:"kubernetes/src/securityGroup/details/details.html",transformer:"kubernetesV2SecurityGroupTransformer"},instance:{detailsController:"kubernetesV2InstanceDetailsCtrl",detailsTemplateUrl:"kubernetes/src/instance/details/details.html"},unsupportedStageTypes:["deploy","destroyServerGroup","disableCluster","disableServerGroup","enableServerGroup","findImage","resizeServerGroup","rollbackCluster","runJob","scaleDown","scaleDownCluster","shrinkCluster","upsertLoadBalancers"]})}),window.angular.module("ng").run(["$templateCache",function(e){e.put("kubernetes/src/securityGroup/details/details.html",'<div class="details-panel">\n <div ng-if="ctrl.state.loading" class="header">\n <div class="close-button">\n <a class="btn btn-link" ui-sref="^">\n <span class="glyphicon glyphicon-remove"></span>\n </a>\n </div>\n <h4 class="text-center">\n <span us-spinner="{radius:20, width:6, length: 12}"></span>\n </h4>\n </div>\n\n <div class="header" ng-if="!ctrl.state.loading">\n <div class="close-button">\n <a class="btn btn-link" ui-sref="^">\n <span class="glyphicon glyphicon-remove"></span>\n </a>\n </div>\n <div class="header-text horizontal middle">\n <cloud-provider-logo\n provider="ctrl.securityGroup.cloudProvider"\n height="\'36px\'"\n width="\'36px\'"\n ></cloud-provider-logo>\n <h3 class="horizontal middle space-between flex-1" select-on-dbl-click>\n {{ctrl.securityGroup.displayName}}\n\n <render-if-feature feature="entityTags">\n <entity-notifications\n ng-if="!state.loading"\n entity="ctrl.securityGroup"\n application="ctrl.app"\n placement="bottom"\n h-offset-percent="90%"\n entity-type="securityGroup"\n page-location="details"\n on-update="ctrl.app.securityGroups.refresh()"\n ></entity-notifications>\n </render-if-feature>\n </h3>\n </div>\n <div class="actions">\n <div class="dropdown" uib-dropdown dropdown-append-to-body>\n <button type="button" class="btn btn-sm btn-primary dropdown-toggle" uib-dropdown-toggle ng-hide="isDisabled">\n <firewall-label label="{{ctrl.securityGroup.kind | robotToHuman}}"></firewall-label> Actions\n <span class="caret"></span>\n </button>\n <ul class="dropdown-menu" uib-dropdown-menu role="menu">\n <li>\n <a href ng-click="ctrl.deleteSecurityGroup()">Delete <firewall-label label="Firewall"></firewall-label></a>\n </li>\n <li>\n <a href ng-click="ctrl.editSecurityGroup()">Edit <firewall-label label="Firewall"></firewall-label></a>\n </li>\n <render-if-feature feature="entityTags">\n <add-entity-tag-links\n component="ctrl.securityGroup"\n application="ctrl.app"\n entity-type="securityGroup"\n on-update="ctrl.app.securityGroups.refresh"\n ></add-entity-tag-links>\n </render-if-feature>\n </ul>\n </div>\n </div>\n </div>\n\n <div ng-if="!ctrl.state.loading" class="content">\n <collapsible-section heading="Information" expanded="true">\n <dl class="dl-horizontal dl-narrow">\n <dt>Created</dt>\n <dd>{{ctrl.securityGroup.createdTime | timestamp}}</dd>\n <dt>Account</dt>\n <dd><account-tag account="ctrl.securityGroup.account" pad="right"></account-tag></dd>\n <dt>Namespace</dt>\n <dd>{{ctrl.securityGroup.namespace}}</dd>\n <dt>Kind</dt>\n <dd>{{ctrl.securityGroup.kind}}</dd>\n </dl>\n </collapsible-section>\n\n <kubernetes-annotation-custom-sections\n manifest="ctrl.manifest.manifest"\n resource="ctrl.securityGroup"\n ></kubernetes-annotation-custom-sections>\n\n <collapsible-section heading="Labels" expanded="true">\n <kubernetes-manifest-labels manifest="ctrl.manifest.manifest"></kubernetes-manifest-labels>\n </collapsible-section>\n </div>\n</div>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("kubernetes/src/instance/details/details.html",'<div class="details-panel">\n <div class="header">\n <instance-details-header\n cloud-provider="ctrl.instance.cloudProvider"\n health-state="instance.healthState"\n instance-id="ctrl.instance.displayName"\n loading="ctrl.state.loading"\n standalone="false"\n ></instance-details-header>\n <div class="actions" ng-if="!ctrl.state.loading">\n <div class="dropdown" uib-dropdown dropdown-append-to-body>\n <button type="button" class="btn btn-sm btn-primary dropdown-toggle" uib-dropdown-toggle ng-hide="isDisabled">\n {{ctrl.instance.kind | robotToHuman}} Actions <span class="caret"></span>\n </button>\n <ul class="dropdown-menu" uib-dropdown-menu role="menu">\n <li>\n <a href ng-click="ctrl.deleteInstance()">Delete</a>\n </li>\n <li>\n <a href ng-click="ctrl.editInstance()">Edit</a>\n </li>\n </ul>\n </div>\n </div>\n </div>\n\n <div ng-if="!ctrl.state.loading" class="content">\n <collapsible-section heading="Information" expanded="true">\n <dl class="dl-horizontal dl-narrow">\n <dt>Created</dt>\n <dd>{{ctrl.instance.createdTime | timestamp}}</dd>\n <dt>Account</dt>\n <dd><account-tag account="ctrl.instance.account" pad="right"></account-tag></dd>\n <dt>Namespace</dt>\n <dd>{{ctrl.instance.namespace}}</dd>\n <dt>Kind</dt>\n <dd>{{ctrl.instance.kind}}</dd>\n <dt>QOS Class</dt>\n <dd><kubernetes-manifest-qos manifest="ctrl.manifest.manifest"></kubernetes-manifest-qos></dd>\n <dt>Logs</dt>\n <dd>\n <console-output-link instance="ctrl.consoleOutputInstance" uses-multi-output="true"></console-output-link>\n </dd>\n </dl>\n </collapsible-section>\n <collapsible-section heading="Status" expanded="true">\n <ul ng-repeat="condition in ctrl.manifest.manifest.status.conditions">\n <kubernetes-manifest-condition condition="condition"></kubernetes-manifest-condition>\n </ul>\n </collapsible-section>\n\n <kubernetes-annotation-custom-sections\n manifest="ctrl.manifest.manifest"\n resource="ctrl.instance"\n ></kubernetes-annotation-custom-sections>\n\n <collapsible-section heading="Events" expanded="true">\n <kubernetes-manifest-events manifest="ctrl.manifest"></kubernetes-manifest-events>\n </collapsible-section>\n\n <collapsible-section heading="Resources" expanded="true">\n <kubernetes-manifest-resources\n manifest="ctrl.manifest.manifest"\n metrics="ctrl.manifest.metrics"\n ></kubernetes-manifest-resources>\n </collapsible-section>\n\n <collapsible-section heading="Labels" expanded="true">\n <kubernetes-manifest-labels manifest="ctrl.manifest.manifest"></kubernetes-manifest-labels>\n </collapsible-section>\n\n <instance-links\n address="ctrl.instance.publicDnsName"\n application="ctrl.app"\n instance="ctrl.instance"\n moniker="ctrl.instance.moniker"\n environment="ctrl.environment"\n ></instance-links>\n </div>\n</div>\n')}]);export{Mn as KUBERNETES_MANIFEST_CONDITION,fn as KUBERNETES_MANIFEST_DELETE_CTRL,bn as KUBERNETES_MANIFEST_PAUSE_ROLLOUT_CTRL,An as KUBERNETES_MANIFEST_SCALE_CTRL,xn as KUBERNETES_MANIFEST_STATUS,kn as KUBERNETES_MANIFEST_UNDO_ROLLOUT_CTRL,rr as KUBERNETES_MODULE,Ds as KUBERNETES_SECURITY_GROUP_DETAILS_CTRL,As as KUBERNETS_RAW_RESOURCE_MODULE,Dn as KubernetesLoadBalancerActions,Jt as KubernetesLoadBalancerTransformer,Kt as KubernetesManifestCommandBuilder,mn as KubernetesManifestService,Yt as KubernetesReactInject,en as KubernetesReactInjector,js as KubernetesV2ServerGroupCommandBuilder,_s as KubernetesV2ServerGroupTransformer,tn as LoadBalancerAnnotationCustomSection,an as LoadBalancerEventsSection,sn as LoadBalancerInformationSection,ln as LoadBalancerLabelsSection,cn as LoadBalancerStatusSection,un as ManifestArtifact,Os as ServerGroupAnnotationCustomSection,Bs as ServerGroupEventsSection,Ls as ServerGroupHealthSection,zs as ServerGroupImagesSection,Ks as ServerGroupInformationSection,Us as ServerGroupLabelsSection,Js as ServerGroupManagerAnnotationCustomSection,Xs as ServerGroupManagerArtifactsSection,Zs as ServerGroupManagerEventsSection,Qs as ServerGroupManagerInformationSection,Ys as ServerGroupManagerLabelsSection,er as ServerGroupManagerManifestConditionSection,tr as ServerGroupManagerManifestStatusSection,Vs as ServerGroupManifestStatusSection,qs as ServerGroupSizeSection,Fn as useKubernetesLoadBalancerDetails};
1
+ import{HelpContentsRegistry as e,CollapsibleSection as t,HoverablePopover as a,StageConfigField as n,noop as s,useTaskMonitor as r,TaskMonitorWrapper as i,SpinFormik as o,ModalClose as l,robotToHuman as c,TaskReason as d,ValidationMessage as u,UserVerification as m,SubmitButton as p,ManifestWriter as C,AccountService as h,relativeTime as f,HelpField as g,AccountSelectInput as b,YamlEditor as E,TaskMonitor as v,ReactModal as k,WizardModal as y,WizardPage as S,JobManifestPodLogs as A,JobEventBasedPodNameProvider as w,InstanceReader as N,ManifestReader as M,InstanceDetailsHeader as x,InstanceLinks as D,timestamp as F,AccountTag as T,ConsoleOutputLink as R,withRouter as I,useModal as P,SETTINGS as G,RecentHistoryService as O,HealthCounts as B,CopyToClipboard as L,NumberInput as $,AddEntityTagLinks as z,useDataSource as K,useData as U,SearchService as q,AppListExtractor as _,ScopeClusterSelector as V,TargetSelect as j,StageConstants as H,ExecutionDetailsSection as W,StageFailureMessage as Z,Registry as X,ExecutionDetailsTasks as J,TetheredSelect as Q,StageArtifactSelector as Y,ArtifactTypePatterns as ee,Markdown as te,yamlDocumentsToString as ae,CheckboxInput as ne,RadioButtonInput as se,StageArtifactSelectorDelegate as re,FormikStageConfig as ie,ManifestYaml as oe,CollapsibleElement as le,ExecutionArtifactTab as ce,ArtifactReferenceService as de,ExpectedArtifactService as ue,DefaultPodNameProvider as me,JobStageExecutionLogs as pe,PipelineConfigValidator as Ce,ApplicationDataSourceRegistry as he,INFRASTRUCTURE_KEY as fe,REST as ge,CloudProviderLogo as be,FormField as Ee,ReactSelectInput as ve,FilterSection as ke,FilterCheckbox as ye,Overridable as Se,ConfirmationModalService as Ae,logger as we,Spinner as Ne,registerApplicationState as Me,EntityNotifications as xe,DeckRuntimeContext as De,FirewallLabels as Fe,Tooltip as Te,TaskExecutor as Re,ClusterTargetBuilder as Ie,ServerGroupReader as Pe,NameUtils as Ge,IfFeatureEnabled as Oe,Details as Be,ApplicationNameValidator as Le,CloudProviderRegistry as $e}from"@spinnaker/core";import ze,{useState as Ke,useMemo as Ue,useEffect as qe}from"react";import{Modal as _e,Button as Ve,Dropdown as je,MenuItem as He}from"react-bootstrap";import{flattenDeep as We,partition as Ze,get as Xe,keys as Je,cloneDeep as Qe,has as Ye,trim as et,chain as tt,camelCase as at,isEmpty as nt,orderBy as st,defaults as rt,flatten as it,groupBy as ot,sortBy as lt,find as ct,map as dt,split as ut,set as mt,capitalize as pt}from"lodash";import Ct from"dompurify";import{UISref as ht,UISrefActive as ft}from"@uirouter/react";import{Form as gt}from"formik";import{load as bt,dump as Et}from"js-yaml";import{DateTime as vt}from"luxon";import kt,{Creatable as yt}from"react-select";import{Subject as St,from as At,Observable as wt}from"rxjs";import{tap as Nt,switchMap as Mt,takeUntil as xt}from"rxjs/operators";const Dt={"kubernetes.serverGroup.stack":"(Optional) One of the core naming components of a cluster, used to create vertical stacks of dependent services for integration testing.","kubernetes.serverGroup.detail":"(Optional) A string of free-form alphanumeric characters and hyphens to describe any other variables.","kubernetes.serverGroup.containers":"\n (Required) Select at least one image to run in this server group (pod).\n If multiple images are selected, they will be colocated and replicated equally.","kubernetes.serverGroup.initContainers":"\n (Optional) Select at least one image to run in this server group as an init container (pod).","kubernetes.serverGroup.terminationGracePeriodSeconds":"(Required) Termination grace period in <b>seconds</b>. You can customize the termination grace period setting (terminationGracePeriodSeconds). Because server groups (pods) represent running processes on nodes in the cluster, it is important to allow those processes to gracefully terminate when they are no longer needed (vs. being violently killed and having no chance to clean up). Default is <b>30</b> seconds.","kubernetes.serverGroup.autoscaling.enabled":"If selected, a horizontal autoscaler will be attached to this replica set.","kubernetes.serverGroup.autoscaling.min":"The smallest number of pods to be deployed.","kubernetes.serverGroup.autoscaling.max":"The largest number of pods to be deployed.","kubernetes.serverGroup.autoscaling.desired":"The initial number of pods to be deployed.","kubernetes.serverGroup.autoscaling.cpuTarget":"The target CPU utilization to be achieved by the autoscaler.","kubernetes.serverGroup.useSourceCapacity.enabled":"Use same number of pods as current.","kubernetes.serverGroup.deployment.enabled":"Check this box if you want to spawn a deployment for this replica set.","kubernetes.serverGroup.deployment.strategy":"\n <p><b>RollingUpdate</b> Deploy new pods in groups while killing old ones off.</p>\n <p><b>Recreate</b> Recreate the entire replica set.</p>","kubernetes.serverGroup.deployment.minReadySeconds":"The minimum time the deployment object will wait after a pod becomes healthy.","kubernetes.serverGroup.deployment.revisionHistoryLimit":"(Optional) How many old replica sets to keep around. Leave empty if you don't want any to be deleted.","kubernetes.serverGroup.deployment.maxSurge":"(Optional) Either a number or a percentage (1 vs. 10%) representing the maximum number of new pods to deploy during a rollout.","kubernetes.serverGroup.deployment.maxUnavailable":"(Optional) Either a number or a percentage (1 vs. 10%) representing the maximum number of pods to destroy during a rollout.","kubernetes.serverGroup.tolerations.key":"Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.","kubernetes.serverGroup.tolerations.value":"Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.","kubernetes.serverGroup.tolerations.operator":"Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.","kubernetes.serverGroup.tolerations.effect":"Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.","kubernetes.serverGroup.tolerations.tolerationSeconds":"TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.","kubernetes.job.parallelism":"(Required) The number of concurrent pods to run.","kubernetes.job.completions":"(Required) The number of sucessful completions required for the job to be considered a success.","kubernetes.job.deadlineSeconds":"(Optional) The number of seconds until the job is considered a failure.","kubernetes.containers.image":"The image selected under Basic Settings whose container is to be configured.","kubernetes.containers.registry":"The registry the selected image will be pulled from.","kubernetes.containers.command":"The list of commands which to overwrite the docker ENTRYPOINT array.","kubernetes.containers.name":"(Required) The name of the container associated with the above image. Used for resource identification","kubernetes.containers.pullpolicy":"\n <p>Sets the policy used to determine when to pull (download) the selected container image.</p>\n <p><i><b>Warning</b> - This shouldn't be modified for most production pipelines as it encourages aliasing tags,\n preventing proper rollbacks and determining an image's source.</i></p>\n <p><b>IFNOTPRESENT</b>: (Default) Pulls the image only when it is not present on the host machine.</p>\n <p><b>ALWAYS</b>: Always pulls the image, regardless of if it is present or not.</p>\n <p><b>NEVER</b>: Never pulls the image, regardless of if it is present or not.</p>","kubernetes.containers.cpu":"\n (Optional) The relative CPU shares to allocate this container. If set, it is multiplied by 1024, then\n passed to Docker as the --cpu-shares flag. Otherwise the default of 1 (1024) is used","kubernetes.containers.lifecycle.postStart":"\n Called immediately after a container is created. If the handler fails, the container is terminated\n and restarted according to its restart policy.","kubernetes.containers.lifecycle.preStop":"\n Called immediately before a container is terminated. The container is terminated after the handler completes.\n The reason for termination is passed to the handler. Regardless of the outcome of the handler, the container is eventually terminated.","kubernetes.containers.execAction.command":"\n Command to execute inside the container. The working directory for the command is root within the container's filesystem.\n An exit status of 0 is treated as live/healthy; non-zero is unhealthy.","kubernetes.containers.httpGetAction.path":"Path to access on the HTTP server","kubernetes.containers.httpGetAction.port":"Number of the port to access on the container.","kubernetes.containers.httpGetAction.host":"Host name to connect to, defaults to the pod IP.","kubernetes.containers.httpGetAction.uriScheme":"Scheme to use for connecting to the host.","kubernetes.containers.httpGetAction.httpHeaders":"Custom headers to set in the request.","kubernetes.containers.memory":"\n (Optional) The relative memory in megabytes to allocate this container. If set, it is converted to an integer\n and passed to Docker as the --memory flag","kubernetes.containers.requests":"\n (Optional) This is used for scheduling. It assures that this container will always be scheduled on a machine ' +\n with at least this much of the resource available.","kubernetes.containers.ports.name":"(Optional) A name for this port. Can be found using DNS lookup if specified.","kubernetes.containers.ports.containerPort":"(Required) The port to expose on this container.","kubernetes.containers.ports.hostPort":"(Optional) The port to expose on <b>Host IP</b>. Most containers do not need this","kubernetes.containers.ports.hostIp":"(Optional) The IP to bind the external port to. Most containers do not need this.","kubernetes.containers.ports.protocol":"(Required) The protocol for this port.","kubernetes.containers.limits":"(Optional) This provides a hard limit on this resource for the given container.","kubernetes.containers.probes.type":"\n <p><b>HTTP</b> Hit the probe at the specified port and path.</p>\n <p><b>EXEC</b> Execute the specified commands on the container.</p>\n <p><b>TCP</b> Connect to the container at the specified port.</p>","kubernetes.containers.probes.initialDelay":"How long to wait after startup before running this probe.","kubernetes.containers.probes.timeout":"How long to wait on the result of this probe.","kubernetes.containers.probes.period":"How long between probe executions.","kubernetes.containers.probes.successThreshold":"How many executions need to succeed before the probe is declared healthy.","kubernetes.containers.probes.failureThreshold":"How many executions need to fail before the probe is declared unhealthy.","kubernetes.containers.volumemounts.name":"The <b>Volume Source</b> configured above to claim.","kubernetes.containers.volumemounts.mountPath":"The directory to mount the specified <b>Volume Source</b> to.","kubernetes.containers.volumemounts.subPath":"This will mount the sub path in the referenced volume rather than the root path.","kubernetes.namespace":"The namespace you have configured with the above selected account. This will often be referred to as <b>Region</b> in Spinnaker.","kubernetes.loadBalancer.detail":'(Optional) A string of free-form alphanumeric characters; by convention, we recommend using "frontend".',"kubernetes.loadBalancer.stack":"(Optional) One of the core naming components of a cluster, used to create vertical stacks of dependent services for integration testing.","kubernetes.service.ports.name":"(Optional) A name for this port. Can be found using DNS lookup if specified.","kubernetes.service.ports.port":"The port this service will expose to resources internal to the cluster.","kubernetes.service.ports.nodePort":"\n (Optional) A port to open on every node in the cluster. This allows you to receive external traffic without\n having to provision a cloud load balancer. <b>Type</b> in <b>Advanced Settings</b> cannot be set to <b>ClusterIP</b> for this to work.","kubernetes.service.ports.targetPort":"(Optional) The port to forward incoming traffic to for pods associated with this load balancer.","kubernetes.service.ports.protocol":"The protocol this port listens to.","kubernetes.service.type":"\n <b>ClusterIP</b> means this is an internal load balancer only. <b>LoadBalancer</b> provisions a cloud load balancer if possible\n at address <b>Load Balancer IP</b>. <b>NodePort</b> means this load balancer forwards traffic from ports with <b>Node Port</b> specified.","kubernetes.service.sessionAffinity":"\n <b>None</b> means incoming connections are not associated with the pods they are routed to. <b>ClientIP</b>\n associates connections with pods by incoming IP address.","kubernetes.service.clusterIp":"\n (Optional) If specified, and available, this internal IP address will be the internal endpoint for this load balancer.\n If not specified, one will be assigned.","kubernetes.service.loadBalancerIp":"\n If specified, and available, this external IP address will be the external endpoint for this load balancer\n when <b>Type</b> is set to <b>LoadBalancer</b>.","kubernetes.service.externalIps":"\n IP addresses for which nodes in the cluster also accept traffic. This is not managed by Kubernetes and the\n responsibility of the user to configure.","kubernetes.pod.dnsPolicy":"\n <p>Set DNS policy for containers within the pod.</p>\n <p>Defaults to <b>ClusterFirst</b>.</p>\n <p>To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to <b>ClusterFirstWithHostNet</b>.</p>","kubernetes.pod.volume":"\n <p>A storage volume to be mounted and shared by containers in this pod. The lifecycle depends on the volume type selected.</p>\n <p><b>CONFIGMAP</b>: Intended to act as a reference to multiple properties files. Similar to the /etc directory, and the files within, on a Linux computer.</p>\n <p><b>EMPTYDIR</b>: A transient volume tied to the lifecycle of this pod.</p>\n <p><b>HOSTPATH</b>: A directory on the host node. Most pods do not need this.</p>\n <p><b>PERSISTENTVOLUMECLAIM</b>: An already created persistent volume claim to be bound by this pod.</p>\n <p><b>SECRET</b>: An already created kubernetes secret to be mounted in this pod.</p>","kubernetes.pod.emptydir.medium":"\n The type of storage medium used by this volume type.\n <p><b>DEFAULT</b>: Depends on the storage mechanism backing this pod's Kubernetes installation.</p>\n <p><b>MEMORY</b>: A tmpfs (RAM-backed filesystem). Very fast, but usage counts against the memory resource limit, and contents are lost on reboot.</p>","kubernetes.pod.volume.persistentvolumeclaim.claim":"The name of the underlying persistent volume claim to request.","kubernetes.pod.volume.hostpath.path":"The path on the host node's filesystem to mount.","kubernetes.pod.volume.secret.secretName":"The name of the secret to mount.","kubernetes.pod.volume.awsElasticBlockStore.volumeId":"Unique ID of the persistent disk resource in AWS (Amazon EBS volume).","kubernetes.pod.volume.awsElasticBlockStore.fsType":'Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.',"kubernetes.pod.volume.awsElasticBlockStore.partition":'The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as "1". Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty).',"kubernetes.pod.volume.nfs.server":"NFS (Network File System) server to be mount","kubernetes.pod.volume.nfs.path":"The path in the NFS to mount","kubernetes.ingress.backend.port":"The port for the specified load balancer.","kubernetes.ingress.backend.service":"The load balancer (service) traffic not matching the below rules will be routed to.","kubernetes.ingress.rules.service":"The load balancer (service) traffic matching this rule will be routed to.","kubernetes.ingress.rules.host":"The fully qualified domain name of a network host. Any traffic routed to this host matches this rule. May not be an IP address, or contain port information.","kubernetes.ingress.rules.path":"POSIX regex (IEE Std 1003.1) matched against the path of an incoming request.","kubernetes.ingress.rules.port":"The port on the specifed load balancer to route traffic to.","kubernetes.ingress.tls.host":"The fully qualified domain name of a network host. Any traffic routed to this host can be secured with TLS. May not be an IP address, or contain port information.","kubernetes.ingress.tls.secret":"(Optional) Name of the Kubernetes secret that will be used to secure TLS connections to the {{firewall}}. Note that Spinnaker will not create any secrets, they are assumed to exist.","kubernetes.manifest.account":"\n <p>A Spinnaker account corresponds to a physical Kubernetes cluster. If you are unsure which account to use, talk to your Spinnaker admin.</p>\n ","kubernetes.manifest.cluster":"\n <p>A cluster is a grouping of resources (often across multiple versions of a resource) within an application.</p>\n ","kubernetes.manifest.stackdetail":"\n <p>\n <b>Stack:</b> <i>(Optional)</i> A naming component used to optionally group manifests within Spinnaker. Typically used to create vertical stacks of resources that can be aggregated/filtered later.\n </p>\n <p>\n <b>Detail:</b> <i>(Optional)</i> A naming component used to store free-form text about your manifest, and can be used to aggregate/filter resources later.\n </p>\n ","kubernetes.manifest.delete.gracePeriod":"\n <p><i>(Optional)</i>The number of seconds given to the resource to terminate gracefully. Overrides what's set on the manifest if applicable.</p>\n ","kubernetes.manifest.delete.cascading":"\n <p>When set, delete all resources managed by this resource as well (all pods owned by a replica set). When unset, this may orphan resources.</p>\n ","kubernetes.manifest.source":"\n <p>Where the manifest file content is read from.</p>\n <p>\n <b>text:</b> The manifest is supplied statically to the pipeline from the below text-box.\n </p>\n <p>\n <b>artifact:</b> The manifest is read from an artifact supplied/created upstream. The expected artifact must be referenced here, and will be bound at runtime.\n </p>\n ","kubernetes.manifest.rolloutStrategyOptions":"\n <p>Allow Spinnaker to associate each ReplicaSet deployed in this stage with one or more Services and manage traffic based on your selected rollout strategy options.</p>\n ","kubernetes.manifest.rolloutStrategy":"\n <p>The rollout strategy tells Spinnaker what to do with the previous version(s) of the ReplicaSet in the cluster.</p>\n ","kubernetes.manifest.expectedArtifact":"The artifact that is to be applied to the Kubernetes account for this stage. The artifact should represent a valid Kubernetes manifest.","kubernetes.manifest.requiredArtifactsToBind":'These artifacts must be present in the context for this stage to successfully complete. Artifacts specified will be <a href="https://www.spinnaker.io/reference/artifacts/in-kubernetes-v2/#binding-artifacts-in-manifests" target="_blank">bound to the deployed manifest.</a>',"kubernetes.manifest.skipExpressionEvaluation":'<p>Skip SpEL expression evaluation of the manifest artifact in this stage. Can be paired with the "Evaluate SpEL expressions in overrides at bake time" option in the Bake Manifest stage when baking a third-party manifest artifact with expressions not meant for Spinnaker to evaluate as SpEL.</p>',"kubernetes.manifest.skipSpecTemplateLabels":'\n <p>Skip applying the <a href="https://spinnaker.io/docs/reference/providers/kubernetes-v2/#reserved-labels" target="_blank">Reserved labels</a> to the manifest\'s <b><i>.spec.template.metadata.labels.</i></b></p>',"kubernetes.manifest.deployLabelSelectors":'\n <p>Via Label Selectors, Spinnaker can deploy a subset of manifests satisfying the Label Selectors. See <a href="https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors" target="_blank">Kubernetes Label Selectors</a> for more details. Multiple selectors combine with AND (All must be satisfied).</p>',"kubernetes.manifest.deployLabelSelectors.allowNothingSelected":"\n <p>When unchecked an error is thrown if none of the provided manifests satisfy the Label Selectors</p>","kubernetes.manifest.undoRollout.revisionsBack":'\n <p>How many revisions to rollback from the current active revision. This is not a hard-coded revision to rollout.</p>\n <p>For example: If you specify "1", and this stage executes, the prior revision will be active upon success.</p>\n ',"kubernetes.manifest.patch.record":"Record the applied patch in the <i>kubernetes.io/change-cause</i> annotation. If the annotation already exists, the contents are replaced.","kubernetes.manifest.patch.mergeStrategy":'\n <p>The merge strategy to use when patching Kubernetes objects:</p>\n <p><b>strategic</b>: <i>(Default)</i> <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/sig-api-machinery/strategic-merge-patch.md" target="_blank">Kubernetes Strategic merge patch.</a></p>\n <p><b>json</b>: <a href="https://tools.ietf.org/html/rfc6902" target="_blank">JSON Patch, RFC 6902</a></p>\n <p><b>merge</b>: <a href="https://tools.ietf.org/html/rfc7386" target="_blank">JSON Merge Patch, RFC 7386</a></p>\n ',"kubernetes.manifest.stableManifestTimeout":"(Optional) How long to wait for the manifest to stabilize before considering this stage failed. Defaults to 30 minutes if not specified.","kubernetes.runJob.captureSource":"Source from which to capture Job output. Captured output will be available in the pipeline context for use in downstream stages.","kubernetes.runJob.captureSource.containerName":"Use logs from this container to capture output data."};function Ft(e,t,a=()=>null){const n=function(e){const t=Tt(e,"loadBalancers");return We([Tt(e,"serverGroups"),t,t.map(e=>e.serverGroups||[])]).filter(Boolean)}(e).find(e=>(e.instances||[]).some(e=>e.id===t));if(!n)return null;const s=(n.instances||[]).find(e=>e.id===t);if(!s)return null;const r={region:n.region,account:n.account};return"serverGroup"===n.category&&(r.serverGroup=n.name),a(r),{id:s.id,name:s.name,namespace:n.region,account:n.account}}function Tt(e,t){var a;return(null==(a=e.getDataSource(t))?void 0:a.data)||[]}Object.keys(Dt).forEach(t=>e.register(t,Dt[t]));const Rt=/^[A-Za-z_$][\w$]*(?:(?:\.[A-Za-z_$][\w$]*)|\[(?:\d+|'[^']+'|"[^"]+")\])*$/,It=/(?:^|\.)(?:constructor|__proto__|prototype)(?=\.|\[|$)|\[(?:"(?:constructor|__proto__|prototype)"|'(?:constructor|__proto__|prototype)')\]/;function Pt({manifest:e,resource:a}){var n;const s=function(e,t,a){if(null==e)return{};const n=Object.keys(e).reduce((n,s)=>{const r=function(e,t,a,n){const s=function(e){const t=/([^.]+)\.details\.(html\.)?spinnaker\.io(?:\/(.*))?/.exec(e);if(null==t||4!==t.length)return null;return{title:t[1]||"",key:t[3]||"",isHtml:!!t[2]}}(t);if(null==s)return null;const r=a&&e.includes("{{")?function(e,t,a,n=!1){const s={...t,resource:t,manifest:a};return e.replace(/{{\s*([^}]+?)\s*}}/g,(e,t)=>{const a=t.trim();if(!function(e){return Rt.test(e)&&!It.test(e)}(a))return e;const r=Xe(s,a);if(null==r||"function"==typeof r)return"";const i=String(r);return n?function(e){return e.replace(/[&<>"']/g,e=>{switch(e){case"&":return"&amp;";case"<":return"&lt;";case">":return"&gt;";case'"':return"&quot;";case"'":return"&#39;";default:return e}})}(i):i})}(e,a,n,s.isHtml):e;return{title:s.title.replace(/-/g," ").trim(),key:s.key.replace(/-/g," ").trim(),content:s.isHtml?Gt(r):r,isHtml:s.isHtml}}(e[s],s,t,a);return null!=r&&r.title&&(n[r.title]=n[r.title]||[],n[r.title].push(r)),n},{});return Object.keys(n).reduce((e,t)=>{const[a,s]=Ze(n[t],e=>e.isHtml);return e[t]=s.concat(a),e},{})}(null==(n=null==e?void 0:e.metadata)?void 0:n.annotations,a,e);return ze.createElement(ze.Fragment,null,Object.entries(s).map(([e,a])=>ze.createElement(t,{key:e,heading:e,defaultExpanded:!0},a.map((e,t)=>e.isHtml?ze.createElement("div",{key:`${e.key}-${t}`,dangerouslySetInnerHTML:{__html:e.content}}):ze.createElement("div",{key:`${e.key}-${t}`},e.key&&ze.createElement("span",{style:{fontWeight:"bold"}},e.key)," ",ze.createElement("span",null,e.content))))))}function Gt(e){const t=Ct.sanitize(e,{ADD_ATTR:["target"]}),a=document.createElement("div");return a.innerHTML=t,a.querySelectorAll("[target]").forEach(e=>{if("A"!==e.tagName)return void e.removeAttribute("target");const t=new Set((e.getAttribute("rel")||"").split(/\s+/).filter(Boolean));t.add("noopener"),t.add("noreferrer"),e.setAttribute("rel",Array.from(t).join(" "))}),a.innerHTML}function Ot(e,t){void 0===t&&(t={});var a=t.insertAt;if(e&&"undefined"!=typeof document){var n=document.head||document.getElementsByTagName("head")[0],s=document.createElement("style");s.type="text/css","top"===a&&n.firstChild?n.insertBefore(s,n.firstChild):n.appendChild(s),s.styleSheet?s.styleSheet.cssText=e:s.appendChild(document.createTextNode(e))}}Ot(".manifest-label {\n margin: 2px;\n}\n");class Bt extends ze.Component{render(){const e=Xe(this.props,["manifest","metadata","labels"],{});return ze.createElement("div",{className:"horizontal wrap"},Je(e).map(t=>ze.createElement("div",{key:t,className:"manifest-label sp-badge info"},t,": ",e[t])))}}class Lt extends ze.Component{constructor(){super(...arguments),this.description=()=>ze.createElement("div",null,ze.createElement("p",null,"There are three QOS (Quality of Service) classes:"),ze.createElement("p",null,ze.createElement("b",null,"Guaranteed"),": Pods are considered highest-priority, and will only be killed if they exceed their resource requests when other containers require their resources."),ze.createElement("p",null,ze.createElement("b",null,"Burstable"),": Pods have some minimum guaranteed resources and can exceed them, but are more likely to be killed than ",ze.createElement("b",null,"Guaranteed")," pods."),ze.createElement("p",null,ze.createElement("b",null,"BestEffort"),": These are the lowest-priority pods, and will be the first to be evicted when resources run out."),ze.createElement("p",null,"To understand how to set the QOS class of a pod, read"," ",ze.createElement("a",{href:"https://kubernetes.io/docs/tasks/configure-pod-container/quality-service-pod/"},"the Kubernetes documentation"),"."))}qosClass(){return Xe(this.props,["manifest","status","qosClass"],"Unknown")}qosStyle(){const e=this.qosClass();return"Guaranteed"===e?"success":"BestEffort"===e?"alert":"warn"}render(){const e=`sp-badge ${this.qosStyle()}`;return ze.createElement(a,{Component:this.description,title:"QOS Class",className:"ephemeral-popover"},ze.createElement("div",{className:e},this.qosClass()))}}class $t extends ze.Component{render(){const e=Xe(this.props,["manifest","spec","containers"],[]),t=Xe(this.props,["metrics"],[]);if(!t)return ze.createElement("div",null,"No metrics reported.");const a=t.reduce((e,t)=>(e[t.containerName]={metrics:t.metrics},e),{});return ze.createElement("div",null,e.map((t,n)=>ze.createElement("div",{key:t.name},"Resource usage for ",ze.createElement("b",null,t.name),ze.createElement("dl",{className:"dl-horizontal dl-narrow"},ze.createElement("dt",null,"CPU"),ze.createElement("dd",null,Xe(a,[t.name,"metrics","CPU(cores)"],"Unknown")),ze.createElement("dt",null,"MEMORY"),ze.createElement("dd",null,Xe(a,[t.name,"metrics","MEMORY(bytes)"],"Unknown"))),n<e.length-1?ze.createElement("hr",null):"")))}}Ot(".checkbox input[type='checkbox'].delete-manifest-options-input-cascading {\n margin-left: 0;\n}\n.delete-manifest-options-input-grace-period {\n display: inline-block;\n margin-right: 5px;\n max-width: 75px;\n}\n");class zt extends ze.Component{constructor(e){super(e),this.setStateAndUpdateStage=e=>{this.props.onOptionsChange(e),this.setState({options:e})},this.onCascadingChange=e=>{this.setStateAndUpdateStage({...this.state.options,cascading:e.target.checked})},this.onGracePeriodChange=e=>{const t=parseInt(e.target.value,10),a=isNaN(t)?null:t;this.setStateAndUpdateStage({...this.state.options,gracePeriodSeconds:a})},this.state={options:e.options}}render(){const{options:{cascading:e,gracePeriodSeconds:t}}=this.state;return ze.createElement(ze.Fragment,null,ze.createElement(n,{helpKey:"kubernetes.manifest.delete.cascading",label:"Cascading"},ze.createElement("div",{className:"checkbox"},ze.createElement("input",{checked:e,className:"delete-manifest-options-input-cascading",onChange:this.onCascadingChange,type:"checkbox"}))),ze.createElement(n,{helpKey:"kubernetes.manifest.delete.gracePeriod",label:"Grace Period"},ze.createElement("input",{className:"form-control input-sm delete-manifest-options-input-grace-period",min:"0",onChange:this.onGracePeriodChange,type:"number",value:Number.isInteger(t)?t:""}),ze.createElement("span",{className:"form-control-static"},1===t?"second":"seconds")))}}function Kt({application:e,resource:t,manifestController:a,isOpen:n,dismissModal:s}){const[h,f]=Ke(!1),g=r({application:e,title:`Deleting ${t.name}`,onTaskComplete:()=>e.serverGroups.refresh(!0)},s),b=a=>{const n={cloudProvider:"kubernetes",manifestName:t.name,location:t.namespace,account:t.account,reason:a.reason,options:{gracePeriodSeconds:a.gracePeriodSeconds,orphanDependants:!a.cascading}};return g.submit(()=>C.deleteManifest(n,e))};return ze.createElement(_e,{show:n,onHide:s},ze.createElement(i,{monitor:g}),ze.createElement(o,{initialValues:{cascading:!0},onSubmit:b,render:e=>{var n;return ze.createElement(ze.Fragment,null,ze.createElement(l,{dismiss:s}),ze.createElement(_e.Header,null,ze.createElement(_e.Title,null,"Delete ",c(t.name)," in ",t.namespace)),a&&ze.createElement("div",{className:"alert alert-warning"},"Manifest is controlled by"," ",ze.createElement(ht,{to:"^.serverGroupManager",params:{accountId:t.account,region:t.region,serverGroupManager:a,provider:"kubernetes"}},ze.createElement("a",null," ",c(a)," "))," ","and may be recreated after deletion."),ze.createElement(_e.Body,null,ze.createElement(gt,{className:"form-horizontal"},ze.createElement(zt,{onOptionsChange:t=>((e,t)=>{e.setFieldValue("gracePeriodSeconds",t.gracePeriodSeconds),e.setFieldValue("cascading",t.cascading)})(e,t),options:{gracePeriodSeconds:e.values.gracePeriodSeconds,cascading:e.values.cascading}}),ze.createElement(d,{reason:e.values.reason,onChange:t=>e.setFieldValue("reason",t)})),(null==(n=e.status)?void 0:n.error)&&ze.createElement("div",{className:"sp-margin-xl-top"},ze.createElement(u,{type:"error",message:ze.createElement("span",{className:"flex-container-v"},ze.createElement("span",{className:"text-bold"},"Something went wrong:"),e.status.error.message&&ze.createElement("span",null,e.status.error.message))}))),ze.createElement(_e.Footer,null,ze.createElement(m,{account:t.account,onValidChange:f}),ze.createElement(Ve,{onClick:s},"Cancel"),ze.createElement(p,{onClick:()=>b(e.values),isDisabled:!e.isValid||e.isSubmitting||!h,isFormSubmit:!0,submitting:e.isSubmitting,label:`Delete ${t.name}`})))}}))}zt.defaultProps={onOptionsChange:s,options:{cascading:!0,gracePeriodSeconds:null}};var Ut=(e=>(e.TEXT="text",e.ARTIFACT="artifact",e))(Ut||{});const qt="kubectl.kubernetes.io/last-applied-configuration";class _t{static manifestCommandIsValid(e){return!!e.moniker&&!!e.moniker.app}static copyAndCleanCommand(e){return Qe(e)}static buildNewManifestCommand(e,t,a,n){return null!=t&&Ye(t,["metadata","annotations",qt])&&(t=bt(t.metadata.annotations[qt])),Promise.all([h.getAllAccountDetailsForProvider("kubernetes"),h.getArtifactAccounts()]).then(([s,r])=>{const i={accounts:s,artifactAccounts:r},o=s.find(e=>e.name===n),l=o?o.name:s.length?s[0].name:null;let c=null;const[d]=r;d&&(c=d.name);const u=a||{app:e.name};return{command:{cloudProvider:"kubernetes",manifest:null,manifests:Array.isArray(t)?t:null!=t?[t]:null,relationships:{loadBalancers:[],securityGroups:[]},moniker:u,account:l,versioned:null,manifestArtifactAccount:c,source:Ut.TEXT},metadata:{backingData:i}}})}}class Vt extends ze.Component{render(){const{condition:e}=this.props,t=vt.fromISO(e.lastTransitionTime);return[ze.createElement("span",{key:"properties"},"True"===e.status&&ze.createElement("span",{style:{marginRight:"3px"},className:"glyphicon glyphicon-Normal"}),"False"===e.status&&ze.createElement("span",{style:{marginRight:"3px"},className:"glyphicon glyphicon-Warn"}),"Unknown"===e.status&&ze.createElement("span",{style:{marginRight:"3px"}},"?"),ze.createElement("b",{style:{marginRight:"3px"}},e.type),ze.createElement("i",null,t.isValid&&f(t.toMillis()))),ze.createElement("div",{key:"message"},e.message)]}}function jt({accounts:e,onAccountSelect:t,selectedAccount:a}){return ze.createElement("div",{className:"form-horizontal"},ze.createElement("div",{className:"form-group"},ze.createElement("div",{className:"col-md-3 sm-label-right"},"Account ",ze.createElement(g,{id:"kubernetes.manifest.account"})),ze.createElement("div",{className:"col-md-7"},ze.createElement(b,{value:a,onChange:e=>t(e.target.value),readOnly:!1,accounts:e,provider:"kubernetes"}))))}class Ht extends ze.Component{constructor(){super(...arguments),this.accountUpdated=e=>{const{formik:t}=this.props;t.values.command.account=e,t.setFieldValue("account",e)}}render(){const{formik:e}=this.props;return ze.createElement(jt,{accounts:e.values.metadata.backingData.accounts,onAccountSelect:this.accountUpdated,selectedAccount:e.values.command.account})}}class Wt extends ze.Component{constructor(e){super(e),this.handleChange=(e,t)=>{this.props.formik.setFieldValue("command.manifests",[].concat(t).filter(e=>!!e)),this.setState({rawManifest:e})};const{values:t}=this.props.formik,[a=null,...n]=t.command.manifests||[],s=n&&n.length?t.command.manifests:a;try{this.state={rawManifest:s?Et(s):null}}catch(e){this.state={rawManifest:null}}}render(){return ze.createElement(E,{value:this.state.rawManifest,onChange:this.handleChange})}}const Zt=class e extends ze.Component{constructor(e){super(e),this.submit=e=>{const t=_t.copyAndCleanCommand(e.command);this.state.taskMonitor.submit(()=>C.deployManifest(t,this.props.application))},e.command||_t.buildNewManifestCommand(e.application).then(e=>{Object.assign(this.state.command,e),this.setState({loaded:!0})}),this.state={loaded:!!e.command,command:e.command||{},taskMonitor:new v({application:e.application,title:(this.props.isNew?"Deploying":"Updating")+" your manifest",onDismiss:()=>this.props.dismissModal()})}}static show(t){return k.show(e,t,{dialogClassName:"wizard-modal modal-lg"})}render(){const{application:e,dismissModal:t,isNew:a}=this.props,{loaded:n,taskMonitor:s,command:r}=this.state;return ze.createElement(y,{heading:(a?"Deploy":"Update")+" Manifest",initialValues:r,loading:!n,taskMonitor:s,dismissModal:t,closeModal:this.submit,submitButtonLabel:a?"Create":"Edit",render:({formik:t,nextIdx:a,wizard:n})=>ze.createElement(ze.Fragment,null,ze.createElement(S,{label:"Basic Settings",wizard:n,order:a(),render:({innerRef:e})=>ze.createElement(Ht,{ref:e,formik:t})}),ze.createElement(S,{label:"Manifest",wizard:n,order:a(),render:({innerRef:a})=>ze.createElement(Wt,{ref:a,formik:t,app:e})}))})}};Zt.defaultProps={closeModal:s,dismissModal:s};let Xt=Zt;class Jt extends ze.Component{pillStyle(e){return"Warning"===e.type?"alert":"Normal"===e.type?"success":""}render(){if(!this.props.manifest)return null;if(this.props.manifest&&(!this.props.manifest.events||0===this.props.manifest.events.length))return ze.createElement("div",null,"No recent events found - Kubernetes does not store events for long.");const{events:e}=this.props.manifest,t=et(Xe(this.props.manifest,["manifest","metadata","annotations","artifact.spinnaker.io/location"],""));return e.map((a,n)=>{const s=Xe(a,"firstTimestamp",""),r=Xe(a,"lastTimestamp","");let i=0,o=0;return s&&(i=vt.fromISO(s).toMillis()),r&&(o=vt.fromISO(r).toMillis()),ze.createElement("div",{key:Xe(a,["metadata","uid"],String(n)),className:"info"},ze.createElement("div",{className:"horizontal"},a.count&&ze.createElement("div",{className:`pill ${this.pillStyle(a)}`},a.count," × ",ze.createElement("b",null,a.reason))),(a.firstTimestamp||a.lastTimestamp)&&ze.createElement("div",null,a.firstTimestamp===a.lastTimestamp&&ze.createElement("div",null,ze.createElement("i",null,f(i))),a.firstTimestamp!==a.lastTimestamp&&ze.createElement("div",null,ze.createElement("div",null,"First Occurrence: ",ze.createElement("i",null,f(i))),ze.createElement("div",null,"Last Occurrence: ",ze.createElement("i",null,f(o))))),ze.createElement("div",null,a.message),ze.createElement("div",null,ze.createElement(A,{account:this.props.manifest.account,location:t,podNamesProviders:[new w(this.props.manifest,a)],linkName:"Console Output (Raw)"})),n!==e.length-1&&ze.createElement("br",null))})}}class Qt extends ze.Component{constructor(){super(...arguments),this.renderActions=!0,this.instanceLinksPlacement="afterSections",this.state={loading:!0},this.isUnmounted=!1,this.appReady=!1,this.loadRequestId=0,this.getInstanceId=e=>{var t,a;return(null==(t=e.instance)?void 0:t.instanceId)||(null==(a=e.$stateParams)?void 0:a.instanceId)},this.loadInstance=()=>{const{app:e}=this.props,t=this.getInstanceId(this.props),a=++this.loadRequestId,n=Ft(e,t,e=>O.addExtraDataToLatest("instances",e));n?(this.setState({loading:!0}),Promise.all([N.getInstanceDetails(n.account,n.namespace,n.name).then(e=>({...e,id:n.id,name:n.name,provider:"kubernetes"})),M.getManifest(n.account,n.namespace,n.name).then(e=>e)]).then(([e,t])=>{this.isCurrentLoad(a)&&this.setState({instance:e,manifest:t,loading:!1})}).catch(()=>{this.isCurrentLoad(a)&&this.autoClose()})):this.autoClose()},this.autoClose=()=>{this.isUnmounted||(this.props.autoClose?this.props.autoClose():(this.props.stateService.params.allowModalToStayOpen=!0,this.props.stateService.go("^",null,{location:"replace"})))}}componentDidMount(){this.props.app.ready().then(()=>{this.isUnmounted||(this.appReady=!0,this.loadInstance(),this.unsubscribeFromRefresh=this.props.app.onRefresh(this.loadInstance))}).catch(this.autoClose)}componentDidUpdate(e){this.appReady&&this.getInstanceId(e)!==this.getInstanceId(this.props)&&this.loadInstance()}componentWillUnmount(){this.isUnmounted=!0,this.unsubscribeFromRefresh&&this.unsubscribeFromRefresh()}isCurrentLoad(e){return!this.isUnmounted&&e===this.loadRequestId}buildConsoleOutputInstance(e){return{account:e.account,region:e.zone||e.namespace,id:e.humanReadableName||e.name,provider:e.provider||e.cloudProvider||"kubernetes"}}render(){var e;const{app:a}=this.props,{instance:n,loading:s,manifest:r}=this.state;if(s||!n||!r)return ze.createElement("div",{className:"details-panel"},ze.createElement("div",{className:"header"},ze.createElement(x,{cloudProvider:"kubernetes",healthState:"",instanceId:this.getInstanceId(this.props),loading:!0,standalone:a.isStandalone})));const i=r.manifest,o=(null==(e=null==i?void 0:i.status)?void 0:e.conditions)||[];return ze.createElement("div",{className:"details-panel"},ze.createElement("div",{className:"header"},ze.createElement(x,{cloudProvider:n.cloudProvider||n.provider||"kubernetes",healthState:n.healthState,instanceId:n.displayName||n.humanReadableName||n.name,loading:!1,standalone:a.isStandalone}),this.renderActions&&ze.createElement("div",{className:"actions"},ze.createElement(ea,{app:a,instance:n,manifest:r}))),ze.createElement("div",{className:"content"},this.renderInformationSection(n,r),this.renderInstanceLinks("afterInformation",n),ze.createElement(t,{heading:"Status",defaultExpanded:!0},o.map((e,t)=>ze.createElement("ul",{key:`${e.type||"condition"}-${t}`},ze.createElement(Vt,{condition:e})))),ze.createElement(Pt,{manifest:i,resource:n}),ze.createElement(t,{heading:"Events",defaultExpanded:!0},ze.createElement(Jt,{manifest:r})),ze.createElement(t,{heading:"Resources",defaultExpanded:!0},ze.createElement($t,{manifest:i,metrics:r.metrics})),ze.createElement(t,{heading:"Labels",defaultExpanded:!0},ze.createElement(Bt,{manifest:i})),this.renderInstanceLinks("afterSections",n)))}renderInstanceLinks(e,t){const{app:a,environment:n}=this.props;return this.instanceLinksPlacement!==e?null:ze.createElement(D,{address:t.publicDnsName,application:a,instance:t,moniker:t.moniker,environment:n})}renderInformationSection(e,a){const n=a.manifest;return ze.createElement(t,{heading:"Information",defaultExpanded:!0},ze.createElement("dl",{className:"dl-horizontal dl-narrow"},ze.createElement("dt",null,"Created"),ze.createElement("dd",null,F(e.createdTime)),ze.createElement("dt",null,"Account"),ze.createElement("dd",null,ze.createElement(T,{account:e.account})),ze.createElement("dt",null,"Namespace"),ze.createElement("dd",null,e.namespace),ze.createElement("dt",null,"Kind"),ze.createElement("dd",null,e.kind),ze.createElement("dt",null,"QOS Class"),ze.createElement("dd",null,ze.createElement(Lt,{manifest:n})),ze.createElement("dt",null,"Logs"),ze.createElement("dd",null,ze.createElement(R,{instance:this.buildConsoleOutputInstance(e),usesMultiOutput:!0}))))}}const Yt=I(Qt);function ea({app:e,instance:t,manifest:a}){const n=P();if(!G.kubernetesAdHocInfraWritesEnabled)return null;return ze.createElement(ze.Fragment,null,ze.createElement(je,{className:"dropdown",id:"instance-actions-dropdown"},ze.createElement(je.Toggle,{className:"btn btn-sm btn-primary dropdown-toggle"},c(t.kind)," Actions"),ze.createElement(je.Menu,null,ze.createElement(He,{onClick:n.show},"Delete"),ze.createElement(He,{onClick:()=>{_t.buildNewManifestCommand(e,a.manifest,t.moniker,t.account).then(t=>{Xt.show({title:"Edit Manifest",application:e,command:t})})}},"Edit"))),ze.createElement(Kt,{application:e,resource:t,manifestController:void 0,isOpen:n.open,dismissModal:n.close}))}class ta{normalizeLoadBalancer(e){return e.provider=e.type,e.instances=[],e.instanceCounts=this.buildInstanceCounts(e.serverGroups),(e.serverGroups||[]).forEach(t=>{t.cloudProvider=e.provider,(t.instances||[]).forEach(t=>{t.cloudProvider=e.provider})}),Promise.resolve(e)}buildInstanceCounts(e){const t=tt(e).map(e=>e.instances).flatten().reduce((e,t)=>(e[at(t.health.state)]++,e),{up:0,down:0,outOfService:0,succeeded:0,failed:0,unknown:0,starting:0}).value();return t.outOfService+=tt(e).map(e=>e.detachedInstances).flatten().value().length,t}}function aa({loadBalancer:e}){const{manifest:t}=e;return ze.createElement(Pt,{manifest:t.manifest,resource:e})}function na({loadBalancer:e}){const{manifest:a}=e;return ze.createElement(t,{heading:"Events",defaultExpanded:!0},ze.createElement(Jt,{manifest:a}))}function sa({loadBalancer:e}){var a,n;const{manifest:s}=e,r=null!=(n=null==(a=null==s?void 0:s.manifest)?void 0:a.spec)?n:{};return ze.createElement(t,{heading:"Information",defaultExpanded:!0},ze.createElement("dl",{className:"dl-horizontal dl-narrow"},ze.createElement("dt",null,"Created"),ze.createElement("dd",null,F(e.createdTime)),ze.createElement("dt",null,"Account"),ze.createElement("dd",null,ze.createElement(T,{account:e.account})),ze.createElement("dt",null,"Namespace"),ze.createElement("dd",null,e.namespace),ze.createElement("dt",null,"Kind"),ze.createElement("dd",null,e.kind),ze.createElement("dt",null,"Service Type"),ze.createElement("dd",null,r.type||"-"),ze.createElement("dt",null,"Sess. Affinity"),ze.createElement("dd",null,r.sessionAffinity||"-")))}function ra({loadBalancer:e}){const{manifest:a}=e;return ze.createElement(t,{heading:"Labels",defaultExpanded:!0},ze.createElement(Bt,{manifest:a.manifest}))}function ia({loadBalancer:e}){const{manifest:a}=e;return ze.createElement(t,{heading:"Status",defaultExpanded:!0},ze.createElement("dl",{className:"dl-horizontal dl-narrow"},nt(e.serverGroups)&&ze.createElement("div",null,"No workloads associated with this ",c(e.kind),"."),!nt(e.serverGroups)&&ze.createElement(ze.Fragment,null,ze.createElement("dt",null,"Workloads"),ze.createElement("dd",null,ze.createElement("ul",null,st(e.serverGroups,["isDisabled","name"],["asc","desc"]).map(e=>ze.createElement("li",{key:e.name},ze.createElement(ht,{to:"^.serverGroup",params:{region:e.region,accountId:e.account,serverGroup:e.name,provider:"kubernetes"}},ze.createElement("a",null,c(e.name))))))),ze.createElement("div",null,ze.createElement("dt",null,"Pod status"),ze.createElement("dd",null,ze.createElement(B,{className:"pull-left",container:e.instanceCounts})))),a.manifest.spec.clusterIP&&ze.createElement("div",null,ze.createElement("dt",null,"Cluster IP"),ze.createElement("dd",null,ze.createElement("a",{target:"_blank",href:`//${a.manifest.spec.clusterIP}`},a.manifest.spec.clusterIP),ze.createElement(L,{className:"sp-margin-s-left copy-to-clipboard copy-to-clipboard-sm",text:a.manifest.spec.clusterIP,toolTip:"Copy Cluster IP to clipboard"}))),a.manifest.spec.loadBalancerIP&&ze.createElement("div",null,ze.createElement("dt",null,"Load Balancer IP"),ze.createElement("dd",null,ze.createElement("a",{target:"_blank",href:`//${a.manifest.spec.loadBalancerIP}`},a.manifest.spec.loadBalancerIP),ze.createElement(L,{className:"sp-margin-s-left copy-to-clipboard copy-to-clipboard-sm",text:a.manifest.spec.loadBalancerIP,toolTip:"Copy Load Balancer IP to clipboard"}))),!nt(a.manifest.spec.rules)&&ze.createElement("div",null,ze.createElement("dt",null,"Host Rules"),a.manifest.spec.rules.filter(e=>{var t;return Boolean(null==(t=e.host)?void 0:t.trim())}).map(e=>ze.createElement("dd",null,ze.createElement("a",{target:"_blank",href:`//${e.host}`}," ",e.host," "),ze.createElement(L,{className:"sp-margin-s-left copy-to-clipboard copy-to-clipboard-sm",text:e.host,toolTip:"Copy ingress rule host to clipboard"})))),!nt(a.manifest.status.loadBalancer.ingress)&&ze.createElement("div",null,ze.createElement("dt",null,"Ingress"),a.manifest.status.loadBalancer.ingress.map(e=>ze.createElement("dd",null,e.hostname&&ze.createElement(ze.Fragment,null,ze.createElement("a",{target:"_blank",href:`//${e.hostname}`}," ",e.hostname," "),ze.createElement(L,{className:"sp-margin-s-left copy-to-clipboard copy-to-clipboard-sm",text:e.hostname,toolTip:"Copy Ingress hostname to clipboard"})),e.ip&&ze.createElement(ze.Fragment,null,ze.createElement("a",{target:"_blank",href:`//${e.ip}`}," ",e.ip," "),ze.createElement(L,{className:"sp-margin-s-left copy-to-clipboard copy-to-clipboard-sm",text:e.ip,toolTip:"Copy Ingress IP to clipboard"})))))))}function oa(e){return!!e&&"object"==typeof e&&"remote/map/base64"===e.type&&"string"==typeof e.reference}const la=class e{static subscribe(t,a,n){return e.updateManifest(a,n),t.onRefresh(()=>e.updateManifest(a,n))}static updateManifest(e,t){M.getManifest(e.account,e.location,e.name).then(e=>t(e))}static manifestIdentifier(e){const t=e.kind.toLowerCase(),a=(e.metadata.namespace||"_").toLowerCase(),n=e.metadata.name.toLowerCase();return`${a} ${t} ${(e.apiVersion||"_").toLowerCase()} ${n}`}static stageManifestToManifestParams(t,a){return{account:a,name:e.scopedKind(t)+" "+t.metadata.name,location:null==t.metadata.namespace?"_":t.metadata.namespace}}static apiGroup(e){const t=(e.apiVersion||"_").split("/");return t.length<2?"":t[0]}static isCRDGroup(t){return!e.BUILT_IN_GROUPS.includes(e.apiGroup(t))}static scopedKind(t){return e.isCRDGroup(t)?t.kind+"."+e.apiGroup(t):t.kind}};la.BUILT_IN_GROUPS=["","core","batch","apps","extensions","storage.k8s.io","apiextensions.k8s.io","apiregistration.k8s.io","policy","scheduling.k8s.io","settings.k8s.io","authorization.k8s.io","authentication.k8s.io","rbac.authorization.k8s.io","certifcates.k8s.io","networking.k8s.io"];let ca=la;function da({artifact:e}){return ze.createElement("span",null,ze.createElement("b",null,e.type," "),ze.createElement("i",null,e.reference))}function ua({options:e,onChange:t}){const[a,s]=Ke({options:e});return ze.createElement("div",{className:"form-horizontal"},ze.createElement(n,{label:"Replicas",fieldColumns:4,groupClassName:"form-group form-inline"},ze.createElement("div",{className:"input-group"},ze.createElement($,{inputClassName:"input-sm highlight-pristine",onChange:e=>{var n;n=e.target.valueAsNumber,a.options.replicas=n,t&&t(a.options),s({options:a.options})},value:e.replicas,min:0}))))}function ma({app:e,loadBalancer:t}){const a=G.feature&&G.feature.entityTags,n=G.kubernetesAdHocInfraWritesEnabled,{manifest:s}=t,r=P();return ze.createElement(ze.Fragment,null,ze.createElement(je,{className:"dropdown",id:"load-balancer-actions-dropdown"},n&&ze.createElement(je.Toggle,{className:"btn btn-sm btn-primary dropdown-toggle"},c(t.kind)," Actions"),ze.createElement(je.Menu,null,ze.createElement(He,{onClick:r.show},"Delete"),ze.createElement(He,{onClick:()=>{_t.buildNewManifestCommand(e,s.manifest,t.moniker,t.account).then(t=>{Xt.show({title:"Edit Manifest",application:e,command:t})})}},"Edit"),a&&ze.createElement(z,{component:t,application:e,entityType:"loadBalancer",onUpdate:()=>e.loadBalancers.refresh()}))),ze.createElement(Kt,{application:e,resource:t,manifestController:null,isOpen:r.open,dismissModal:r.close}))}const pa=e=>{const{loadBalancerParams:t,app:a,autoClose:n}=e,{name:s,accountId:r,region:i}=t,o=a.getDataSource("loadBalancers"),{data:l,loaded:c,refresh:d,error:u}=K(o),{result:m,status:p,refresh:C,error:h}=U(()=>M.getManifest(r,i,s),{},[]),f=!c||"RESOLVED"!==p,g=u||h||void 0;return{data:Ue(()=>{if(f||g)return;const e=l.find(e=>e.name===s&&e.account===r&&e.region===i);if(e)return{...e,manifest:m};n()},[c,l,p,m]),loading:f,error:g,refetch:async()=>{d(),C()}}};var Ca=(e=>(e.Static="static",e.Dynamic="dynamic",e.Label="label",e))(Ca||{});const ha={static:{label:"Choose a static target",selectorDefaults:{cluster:null,criteria:null,kind:null,kinds:null,labelSelectors:null}},dynamic:{label:"Choose a target dynamically",selectorDefaults:{kinds:null,labelSelectors:null,manifestName:null}},label:{label:"Match target(s) by label",selectorDefaults:{cluster:null,criteria:null,kind:null,kinds:[],labelSelectors:{selectors:[]},manifestName:null}}};class fa{static search(e,t,a){return q.search({q:t,type:e}).then(n=>tt(n?n.results:[]).filter(n=>n.namespace===t&&n.account===a&&n.kubernetesKind===e).uniqBy("name").valueOf()).catch(()=>[])}}Ot(".label-editor-kind-select {\n min-width: 125px;\n}\n");const ga=["ANY","EQUALS","NOT_EQUALS","CONTAINS","NOT_CONTAINS","EXISTS","NOT_EXISTS"].map(e=>({label:e,value:e})),ba=class e extends ze.Component{constructor(){super(...arguments),this.handleChange=(e,t,a)=>{this.props.onLabelSelectorsChange(this.props.labelSelectors.map((n,s)=>e!==s?n:{...n,[t]:a}))},this.removeField=e=>{this.props.onLabelSelectorsChange(this.props.labelSelectors.filter((t,a)=>e!==a))},this.addField=()=>this.props.onLabelSelectorsChange(this.props.labelSelectors.concat([{key:"",kind:"EQUALS",values:[]}]))}render(){return ze.createElement("table",{className:"table table-condensed packed tags"},ze.createElement("thead",null,ze.createElement("tr",null,ze.createElement("th",null,"Key"),ze.createElement("th",null,"Kind"),ze.createElement("th",null,"Value(s)"),ze.createElement("th",null))),ze.createElement("tbody",null,this.props.labelSelectors.map((t,a)=>ze.createElement("tr",{className:"label-editor-selector-row",key:a},ze.createElement("td",null,ze.createElement("input",{className:"form-control input input-sm label-editor-key-input",type:"text",value:t.key,onChange:e=>this.handleChange(a,"key",e.target.value)})),ze.createElement("td",null,ze.createElement(kt,{className:"label-editor-kind-select",clearable:!1,onChange:e=>this.handleChange(a,"kind",e.value),options:ga,value:t.kind})),ze.createElement("td",null,ze.createElement("input",{className:"form-control input input-sm label-editor-values-input",onChange:t=>this.handleChange(a,"values",e.convertValueStringToArray(t.target.value)),placeholder:"Comma-separated values",value:t.values.join(", "),type:"text"})),ze.createElement("td",null,ze.createElement("button",{className:"link label-editor-remove",onClick:()=>this.removeField(a)},ze.createElement("span",{className:"glyphicon glyphicon-trash"}),ze.createElement("span",{className:"sr-only"},"Remove field")))))),ze.createElement("tfoot",null,ze.createElement("tr",null,ze.createElement("td",{colSpan:4},ze.createElement("button",{className:"btn btn-block btn-sm add-new",onClick:this.addField},ze.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add Label")))))}};ba.defaultProps={labelSelectors:[],onLabelSelectorsChange:s},ba.convertValueStringToArray=e=>e.split(",").map(e=>e.trim());let Ea=ba;const va=e=>{const[t,a]=(e||"").split(" ");return{kind:t,name:a}};class ka{constructor(e){this.component=e,this.handles=e=>e===Ca.Static,this.handleModeChange=()=>{const{selector:e}=this.component.state;this.handleKindChange(e.kind),Object.assign(e,ha.static.selectorDefaults),this.component.setStateAndUpdateStage({selector:e})},this.handleKindChange=e=>{const{selector:t}=this.component.state,{name:a}=va(t.manifestName);t.manifestName=e?a?`${e} ${a}`:e:a},this.getKind=()=>va(this.component.state.selector.manifestName).kind}}class ya{constructor(e){this.component=e,this.handles=e=>e===Ca.Dynamic,this.handleModeChange=()=>{const{selector:e}=this.component.state,{kind:t}=va(e.manifestName);e.kind=t||null,Object.assign(e,ha.dynamic.selectorDefaults),this.component.setStateAndUpdateStage({selector:e})},this.handleKindChange=e=>{this.component.state.selector.kind=e},this.getKind=()=>this.component.state.selector.kind}}class Sa{constructor(e){this.component=e,this.handles=e=>e===Ca.Label,this.handleModeChange=()=>{const{selector:e}=this.component.state;Object.assign(e,ha.label.selectorDefaults),this.component.setStateAndUpdateStage({selector:e})},this.handleKindChange=()=>{},this.getKind=()=>null}}class Aa extends ze.Component{constructor(e){super(e),this.search$=new St,this.destroy$=new St,this.setStateAndUpdateStage=(e,t)=>{e.selector&&this.props.onChange&&this.props.onChange(e.selector),this.setState(e,t||s)},this.componentDidMount=()=>{this.loadAccounts(),this.search$.pipe(Nt(()=>this.setStateAndUpdateStage({loading:!0})),Mt(({kind:e,namespace:t,account:a})=>At(this.search(e,t,a))),xt(this.destroy$)).subscribe(e=>{null==this.state.selector.manifestName&&this.getSelectedMode()===Ca.Static&&this.handleNameChange(""),this.setStateAndUpdateStage({loading:!1,resources:e,selector:this.state.selector})})},this.componentWillUnmount=()=>this.destroy$.next(),this.loadAccounts=()=>h.getAllAccountDetailsForProvider("kubernetes").then(e=>{const t=this.state.selector,a=va(t.manifestName).kind;this.setStateAndUpdateStage({accounts:e}),!t.account&&e.length>0&&(t.account=e.some(e=>e.name===G.providers.kubernetes.defaults.account)?G.providers.kubernetes.defaults.account:e[0].name),t.account&&this.handleAccountChange(t.account),a&&this.search$.next({kind:a,namespace:t.location,account:t.account})}),this.handleAccountChange=e=>{const t=(this.state.accounts||[]).find(t=>t.name===e);if(!t)return;const a=(t.namespaces||[]).sort(),n=Object.entries(t.spinnakerKindMap||{}).filter(([,e])=>!this.props.includeSpinnakerKinds||!this.props.includeSpinnakerKinds.length||this.props.includeSpinnakerKinds.includes(e)).map(([e])=>e).sort();!this.isExpression(this.state.selector.location)&&a.every(e=>e!==this.state.selector.location)&&(this.state.selector.location=null),this.state.selector.account=e,this.search$.next({kind:va(this.state.selector.manifestName).kind||this.state.selector.kind,namespace:this.state.selector.location,account:this.state.selector.account}),this.setStateAndUpdateStage({namespaces:a,kinds:n,selector:this.state.selector})},this.handleNamespaceChange=e=>{this.state.selector.location=e&&e.value?e.value:null,this.search$.next({kind:va(this.state.selector.manifestName).kind,namespace:this.state.selector.location,account:this.state.selector.account}),this.setStateAndUpdateStage({selector:this.state.selector})},this.handleKindChange=e=>{this.modeDelegate().handleKindChange(e),this.search$.next({kind:e,namespace:this.state.selector.location,account:this.state.selector.account})},this.handleNameChange=e=>{const{kind:t}=va(this.state.selector.manifestName);this.state.selector.manifestName=t?`${t} ${e}`:` ${e}`,this.setStateAndUpdateStage({selector:this.state.selector})},this.isExpression=e=>"string"==typeof e&&e.includes("${"),this.search=(e,t,a)=>e&&t&&a&&!this.isExpression(a)?fa.search(e,t,a).then(e=>e.map(e=>e.name).sort()):Promise.resolve([]),this.handleModeSelect=e=>{this.state.selector.mode=e,this.setStateAndUpdateStage({selector:this.state.selector},()=>{this.modeDelegate().handleModeChange()})},this.handleClusterChange=({clusterName:e})=>{this.state.selector.cluster=e,this.setStateAndUpdateStage({selector:this.state.selector})},this.handleCriteriaChange=e=>{this.state.selector.criteria=e,this.setStateAndUpdateStage({selector:this.state.selector})},this.handleKindsChange=e=>{this.state.selector.kinds=e,this.setStateAndUpdateStage({selector:this.state.selector})},this.handleLabelSelectorsChange=e=>{this.state.selector.labelSelectors.selectors=e,this.setStateAndUpdateStage({selector:this.state.selector})},this.modeDelegate=()=>this.handlers.find(e=>e.handles(this.getSelectedMode())),this.promptTextCreator=e=>`Use custom expression: ${e}`,this.getSelectedMode=()=>this.state.selector.mode||Ca.Static,this.getFilteredClusters=()=>{const{application:e,includeSpinnakerKinds:t}=this.props,{selector:a}=this.state,n=e?[e]:[],s=nt(t)||t.length>1||"serverGroups"!==t[0];return _.getClusters(n,e=>{const t=_.clusterFilterForCredentialsAndRegion(a.account,a.location)(e),n=Xe(e,"serverGroupManagers.length",0)>0,r=s||!n,i=n?e.cluster:e.name,o=va(i).kind===this.modeDelegate().getKind();return t&&r&&o})},this.props.selector.mode||(this.props.selector.mode=Ca.Static,this.props.onChange&&this.props.onChange(this.props.selector)),this.state={selector:e.selector,accounts:[],namespaces:[],kinds:[],resources:[],loading:!1},this.handlers=[new ka(this),new ya(this),new Sa(this)]}render(){const e=this.getSelectedMode(),t=this.props.modes||[e],{selector:a,accounts:s,kinds:r,namespaces:i,resources:o,loading:l}=this.state,c=this.modeDelegate().getKind(),d=va(a.manifestName).name,u=o.map(e=>va(e).name),m=a.kinds||[],p=ze.createElement(n,{label:"Kind"},ze.createElement(yt,{clearable:!1,value:{value:c,label:c},options:r.map(e=>({value:e,label:e})),onChange:e=>this.handleKindChange(e&&e.value),promptTextCreator:this.promptTextCreator}));return ze.createElement(ze.Fragment,null,ze.createElement(n,{label:"Account"},ze.createElement(b,{value:a.account,onChange:e=>this.handleAccountChange(e.target.value),accounts:s,provider:"'kubernetes'"})),ze.createElement(n,{label:"Namespace"},ze.createElement(yt,{clearable:!1,value:{value:a.location,label:a.location},options:i.map(e=>({value:e,label:e})),onChange:this.handleNamespaceChange,promptTextCreator:this.promptTextCreator})),!t.includes(Ca.Label)&&p,t.length>1&&ze.createElement(n,{label:"Selector"},t.map(t=>ze.createElement("div",{className:"radio",key:t},ze.createElement("label",{htmlFor:t},ze.createElement("input",{type:"radio",onChange:()=>this.handleModeSelect(t),checked:e===t,id:t})," ",Xe(ha,[t,"label"],""))))),t.includes(Ca.Label)&&e!==Ca.Label&&p,t.includes(Ca.Static)&&e===Ca.Static&&ze.createElement(n,{label:"Name"},ze.createElement(yt,{isLoading:l,clearable:!1,value:{value:d,label:d},options:u.map(e=>({value:e,label:e})),onChange:e=>this.handleNameChange(e?e.value:""),promptTextCreator:this.promptTextCreator})),t.includes(Ca.Dynamic)&&e===Ca.Dynamic&&ze.createElement(ze.Fragment,null,ze.createElement(n,{label:"Cluster"},ze.createElement(V,{clusters:this.getFilteredClusters(),model:a.cluster,onChange:this.handleClusterChange})),ze.createElement(n,{label:"Target"},ze.createElement(j,{onChange:this.handleCriteriaChange,model:{target:a.criteria},options:H.MANIFEST_CRITERIA_OPTIONS}))),t.includes(Ca.Label)&&e===Ca.Label&&ze.createElement(ze.Fragment,null,ze.createElement(n,{label:"Kinds"},ze.createElement(kt,{clearable:!1,multi:!0,value:m,options:r.map(e=>({value:e,label:e})),onChange:e=>this.handleKindsChange(e.map(e=>e.value))})),ze.createElement(n,{label:"Labels"},ze.createElement(Ea,{labelSelectors:Xe(a,"labelSelectors.selectors",[]),onLabelSelectorsChange:this.handleLabelSelectorsChange}))))}}class wa extends ze.Component{constructor(){super(...arguments),this.componentDidMount=()=>{rt(this.props.stage,{app:this.props.application.name,cloudProvider:"kubernetes"}),this.props.stage.isNew&&(this.props.stage.options={gracePeriodSeconds:null,cascading:!0}),this.props.stageFieldUpdated()},this.onChange=e=>{Object.assign(this.props.stage,e),this.props.stageFieldUpdated()},this.onOptionsChange=e=>{this.props.stage.options=e,this.props.stageFieldUpdated()}}render(){const e={...this.props.stage};return ze.createElement("div",{className:"form-horizontal"},ze.createElement("h4",null,"Manifest"),ze.createElement("div",{className:"horizontal-rule"}),ze.createElement(Aa,{application:this.props.application,selector:e,modes:[Ca.Static,Ca.Dynamic,Ca.Label],onChange:this.onChange,includeSpinnakerKinds:null}),ze.createElement("h4",null,"Settings"),ze.createElement("div",{className:"horizontal-rule"}),ze.createElement(zt,{onOptionsChange:this.onOptionsChange,options:this.props.stage.options}))}}const Na=e=>Xe(H.MANIFEST_CRITERIA_OPTIONS.find(t=>t.val===e),"label"),Ma=e=>(e.selectors||[]).map(e=>{const{key:t,kind:a,values:n=[]}=e;switch(a){case"ANY":default:return null;case"EQUALS":return`${t} = ${n[0]}`;case"NOT_EQUALS":return`${t} != ${n[0]}`;case"CONTAINS":return`${t} in (${n.join(", ")})`;case"NOT_CONTAINS":return`${t} notin (${n.join(", ")})`;case"EXISTS":return`${t}`;case"NOT_EXISTS":return`!${t}`}}).filter(e=>!!e).join(", "),xa=({account:e,manifestName:t,location:a,cluster:n,criteria:s,labelSelectors:r,manifestNamesByNamespace:i})=>ze.createElement(ze.Fragment,null,ze.createElement("dt",null,"Account"),ze.createElement("dd",null,e),((e,t)=>{if(e)return ze.createElement(ze.Fragment,null,ze.createElement("dt",null,"Manifest"),ze.createElement("dd",null,e));if(t){const e=it(Object.values(t));return ze.createElement(ze.Fragment,null,ze.createElement("dt",null,"Manifest",e.length>1?"s":""),ze.createElement("dd",null,e.join(", ")))}return null})(t,i),ze.createElement("dt",null,"Namespace"),ze.createElement("dd",null,a),null!=Na(s)&&null!=n&&ze.createElement(ze.Fragment,null,ze.createElement("dt",null,"Target"),ze.createElement("dd",null,`${Na(s)} in cluster ${n}`)),null!=r&&!!Ma(r)&&ze.createElement(ze.Fragment,null,ze.createElement("dt",null,"Selector",(r.selectors||[]).length>1?"s":""),ze.createElement("dd",null,Ma(r)))),Da=e=>{var t;return(t=class extends ze.Component{render(){const{stage:e,current:t,name:a}=this.props,{account:n,manifestName:s,location:r,cluster:i,criteria:o,labelSelectors:l,manifestNamesByNamespace:c}=e.context;return ze.createElement(W,{name:a,current:t},ze.createElement("div",{className:"row"},ze.createElement("div",{className:"col-md-9"},ze.createElement("dl",{className:"dl-narrow dl-horizontal"},ze.createElement(xa,{account:n,manifestName:s,location:r,cluster:i,criteria:o,labelSelectors:l,manifestNamesByNamespace:c})))),ze.createElement(Z,{stage:e,message:e.failureMessage}))}}).title=e,t},Fa=e=>{const t=t=>`<strong>${t}</strong> is a required field for ${e} stages.`;return[{type:"requiredField",fieldName:"location",fieldLabel:"Namespace"},{type:"requiredField",fieldName:"account",fieldLabel:"Account"},{type:"custom",validate:(e,a)=>{if(a.mode===Ca.Dynamic){if(!a.kind)return t("Kind");if(!a.cluster)return t("Cluster");if(!a.criteria)return t("Target")}else if(a.mode===Ca.Static){const[e]=(a.manifestName||"").split(" ");if(!e)return t("Kind");const[,n]=(a.manifestName||"").split(" ");if(!n)return t("Name")}else if(a.mode===Ca.Label&&!a.kinds)return t("Kinds");return null}}]},Ta="Delete (Manifest)",Ra="deleteManifest";X.pipeline.registerStage({label:Ta,description:"Destroy a Kubernetes object created from a manifest.",key:Ra,cloudProvider:"kubernetes",component:wa,executionDetailsSections:[Da(Ra),J],accountExtractor:e=>e.context.account?[e.context.account]:[],configAccountExtractor:e=>e.account?[e.account]:[],validators:Fa(Ta)});const Ia=class e extends ze.Component{constructor(t){super(t),this.destroy$=new St,this.useManifest=()=>{const{data:{account:e,region:t,name:a}}=this.state.selectedManifest;At(M.getManifest(e,t,a)).pipe(xt(this.destroy$)).subscribe(e=>{this.props.onManifestSelected(JSON.parse(e.manifest.metadata.annotations["kubectl.kubernetes.io/last-applied-configuration"]))})},this.manifestChanged=e=>{this.setState({selectedManifest:e})},this.manifestValueRenderer=e=>{const t=c(e.kind).trim();return ze.createElement("span",null,ze.createElement(T,{account:e.account}),e.data&&ze.createElement("span",null," ",e.name)," (",t," in ",e.location,")")},this.manifestOptionRenderer=e=>{const t=c(e.kind).trim();return ze.createElement("h5",null,ze.createElement(T,{account:e.account})," ",e.name," (",t," in ",e.location,")")},this.state=e.getState(t)}componentWillUnmount(){this.destroy$.next()}render(){const{selectedManifest:e,manifests:t}=this.state;return ze.createElement(_e,{show:this.props.show,onHide:s},ze.createElement(l,{dismiss:this.props.onDismiss}),ze.createElement("div",null,ze.createElement(_e.Header,null,ze.createElement(_e.Title,null,"Copy Manifest")),ze.createElement(_e.Body,null,ze.createElement("form",{className:"form-horizontal"},ze.createElement("div",{className:"form-group"},ze.createElement("div",{className:"col-md-4 col-md-offset-1 sm-label-left"},ze.createElement("b",null,"Copy manifest from"))),ze.createElement("div",{className:"form-group"},ze.createElement("div",{className:"col-md-10 col-md-offset-1"},ze.createElement(Q,{value:e?e.key:null,placeholder:"Select...",valueRenderer:this.manifestValueRenderer,optionRenderer:this.manifestOptionRenderer,options:t,valueKey:"key",onChange:this.manifestChanged,clearable:!1}))))),ze.createElement("div",{className:"modal-footer"},e&&ze.createElement("button",{className:"btn btn-primary",onClick:this.useManifest},ze.createElement("span",null,"Use this manifest"),ze.createElement("span",{className:"glyphicon glyphicon-chevron-right"})),!e&&ze.createElement("button",{className:"btn",onClick:this.props.onDismiss},ze.createElement("span",null,"Cancel")))))}};Ia.getState=e=>{let t=[];const a=e.application.getDataSource("serverGroups").data.filter(t=>t.cloudProvider===e.cloudProvider&&"serverGroup"===t.category&&!(t.serverGroupManagers||[]).length),n=ot(a,e=>[e.cluster,e.account,e.region].join(":"));Object.keys(n).forEach(e=>{const a=lt(n[e],"name").pop(),[s,r]=a.name.split(" ");t.push({account:a.account,location:a.region,name:r,kind:s,data:a,key:[a.account,a.region,a.name].join(":")})});return[...e.application.getDataSource("serverGroupManagers").data,...e.application.getDataSource("loadBalancers").data,...e.application.getDataSource("securityGroups").data].filter(t=>t.cloudProvider===e.cloudProvider).forEach(e=>{const[a,n]=e.name.split(" ");t.push({account:e.account,location:e.region,name:n,kind:a,data:e,key:[e.account,e.region,e.name].join(":")})}),t=lt(t,e=>{const t=["deployment","replicaSet","statefulSet","daemonSet","jobs","cronJob","service","ingress","networkPolicy"];return t.includes(e.kind)?t.indexOf(e.kind):Number.MAX_SAFE_INTEGER},["kind","name","location"]),{selectedManifest:t.length?t[0]:null,manifests:t}};let Pa=Ia;class Ga extends ze.Component{constructor(e){super(e),this.toggle=()=>this.setState({show:!this.state.show}),this.handleManifestSelected=e=>{this.props.handleCopy(e),this.toggle()},this.state={show:!1}}render(){return ze.createElement(ze.Fragment,null,ze.createElement(Pa,{show:this.state.show,application:this.props.application,cloudProvider:"kubernetes",onDismiss:this.toggle,onManifestSelected:this.handleManifestSelected}),ze.createElement("button",{className:"link",onClick:this.toggle,style:{paddingLeft:0}},"Copy from running infrastructure"))}}class Oa extends ze.Component{constructor(){super(...arguments),this.onChangeBinding=(e,t)=>{const a=(this.props.bindings||[]).slice(0);a[e]=t,this.props.onChangeBindings(a)},this.onRemoveBinding=e=>{const t=(this.props.bindings||[]).slice(0);t.splice(e,1),this.props.onChangeBindings(t)}}render(){const{stage:e,pipeline:t,bindings:a}=this.props,n=(n,s)=>{const r=(s?s.expectedArtifactId:"new")||s.artifact&&s.artifact.id;return ze.createElement("div",{className:"row",key:r},ze.createElement("div",{className:"col-md-10"},ze.createElement(Y,{pipeline:t,stage:e,expectedArtifactId:s&&s.expectedArtifactId,artifact:!!s&&s.artifact,onArtifactEdited:e=>this.onChangeBinding(n,{artifact:e}),onExpectedArtifactSelected:e=>this.onChangeBinding(n,{expectedArtifactId:e.id}),excludedArtifactIds:a.map(e=>e.expectedArtifactId),excludedArtifactTypePatterns:[ee.FRONT50_PIPELINE_TEMPLATE]})),s&&ze.createElement("div",{className:"col-md-2"},ze.createElement("a",{className:"glyphicon glyphicon-trash",onClick:()=>this.onRemoveBinding(n)})))};return ze.createElement(ze.Fragment,null,a.map((e,t)=>n(t,e)),n(a.length))}}class Ba extends ze.Component{constructor(){super(...arguments),this.defaultProps={createable:!1}}getNamespaceOptions(){const{accounts:e,selectedAccount:t,selectedNamespace:a}=this.props,n=ct(e,e=>e.name===t),s=Xe(n,"namespaces",[]),r=dt(s,e=>({label:e,value:e}));return this.props.createable&&a.includes("${")&&r.push({label:a,value:a}),r}render(){const e={clearable:!1,options:this.getNamespaceOptions(),value:this.props.selectedNamespace,onChange:e=>this.props.onChange(e.value.toString())};return this.props.createable?ze.createElement(yt,{...e}):ze.createElement(kt,{...e})}}const La={label:"Red/Black (Deprecated)",description:"Disables <i>all</i> previous ReplicaSets in the cluster as soon as the new ReplicaSet is ready",key:"redblack"},$a=[{label:"None",description:"Creates the new ReplicaSet with no impact on existing ReplicaSets in the cluster",key:null,providerRestricted:!1},La,{label:"Highlander",description:"Destroys <i>all</i> previous ReplicaSets in the cluster as soon as the new ReplicaSet is ready",key:"highlander"},{label:"Blue/Green",description:"Disables <i>all</i> previous ReplicaSets in the cluster as soon as the new ReplicaSet is ready",key:"bluegreen"}],za={enabled:!1,options:{namespace:null,services:[],enableTraffic:!1,strategy:null}};class Ka extends ze.Component{constructor(){super(...arguments),this.state={services:[],showRedBlackWarningMessage:!1},this.onConfigChange=(e,t)=>{this.setState({showRedBlackWarningMessage:!1}),"redblack"===t&&(t="bluegreen",this.setState({showRedBlackWarningMessage:!0})),this.updateProps(e,t)},this.fetchServices=()=>{const e=this.props.config.options.namespace,t=this.props.selectedAccount;e&&t||this.setState({services:[]}),fa.search("service",e,t).then(e=>{this.setState({services:dt(e,"name")})})},this.getServiceOptions=()=>{const e=this.state.services.map(e=>({label:ut(e," ")[1],value:e}));return(this.props.config.options.services||[]).forEach(t=>{this.state.services.includes(t)||e.push({label:t,value:t})}),e},this.strategyOptionRenderer=e=>ze.createElement("div",{className:"body-regular"},ze.createElement("strong",null,ze.createElement(te,{tag:"span",message:e.label})),ze.createElement("div",null,ze.createElement(te,{tag:"span",message:e.description})))}updateProps(e,t){const a=Qe(this.props.config);mt(a,e,t),this.props.onConfigChange(a)}componentDidMount(){this.fetchServices(),this.setState({showRedBlackWarningMessage:!1}),"redblack"===this.props.config.options.strategy&&(this.setState({showRedBlackWarningMessage:!0}),this.updateProps("options.strategy","bluegreen"))}componentDidUpdate(e){e.selectedAccount!==this.props.selectedAccount&&this.updateProps("options.namespace",null),e.config.options.namespace!==this.props.config.options.namespace&&(this.updateProps("options.services",null),this.fetchServices()),!this.props.config.options.enableTraffic&&this.props.config.options.strategy&&this.updateProps("options.enableTraffic",!0)}render(){const{config:e}=this.props,{showRedBlackWarningMessage:t}=this.state;return ze.createElement(ze.Fragment,null,ze.createElement("h4",null,"Rollout Strategy Options"),ze.createElement(n,{helpKey:"kubernetes.manifest.rolloutStrategyOptions",fieldColumns:8,label:"Enable"},ze.createElement("div",{className:"checkbox"},ze.createElement("label",null,ze.createElement("input",{checked:e.enabled,onChange:e=>this.onConfigChange("enabled",e.target.checked),type:"checkbox"}),"Spinnaker manages traffic based on your selected strategy"))),e.enabled&&ze.createElement(ze.Fragment,null,ze.createElement(n,{fieldColumns:8,label:"Service(s) Namespace"},ze.createElement(Ba,{createable:!0,onChange:e=>this.onConfigChange("options.namespace",e),accounts:this.props.accounts,selectedAccount:this.props.selectedAccount,selectedNamespace:e.options.namespace||""})),ze.createElement(n,{fieldColumns:8,label:"Service(s)"},ze.createElement(yt,{clearable:!1,multi:!0,onChange:e=>this.onConfigChange("options.services",dt(e,"value")),options:this.getServiceOptions(),value:e.options.services})),ze.createElement(n,{fieldColumns:8,label:"Traffic"},ze.createElement("div",{className:"checkbox"},ze.createElement("label",null,ze.createElement("input",{checked:e.options.enableTraffic,disabled:!!e.options.strategy,onChange:e=>this.onConfigChange("options.enableTraffic",e.target.checked),type:"checkbox"}),"Send client requests to new pods"))),ze.createElement(n,{fieldColumns:8,helpKey:"kubernetes.manifest.rolloutStrategy",label:"Strategy"},ze.createElement(kt,{id:"strategyDropdown",clearable:!1,onChange:e=>this.onConfigChange("options.strategy",e.key),options:$a,optionRenderer:this.strategyOptionRenderer,placeholder:"None",value:e.options.strategy,valueKey:"key",valueRenderer:e=>ze.createElement(ze.Fragment,null,e.label)}),t&&ze.createElement("p",{id:"redBlackWarning",style:{color:"orange"}},"Warning: Red/black strategy is deprecated and will be removed soon. We automatically selected blue/green instead!"))))}}class Ua extends ze.Component{constructor(e){super(e),this.excludedManifestArtifactTypes=[ee.DOCKER_IMAGE,ee.KUBERNETES,ee.FRONT50_PIPELINE_TEMPLATE,ee.MAVEN_FILE],this.getSourceOptions=()=>dt([Ut.TEXT,Ut.ARTIFACT],e=>({label:pt(e),value:e})),this.handleCopy=e=>{this.props.formik.setFieldValue("manifests",[e]),this.setState({rawManifest:ae([e])})},this.handleRawManifestChange=(e,t)=>{this.setState({rawManifest:e}),this.props.formik.setFieldValue("manifests",t)},this.onManifestArtifactSelected=e=>{this.props.formik.setFieldValue("manifestArtifactId",e),this.props.formik.setFieldValue("manifestArtifact",null)},this.onManifestArtifactEdited=e=>{this.props.formik.setFieldValue("manifestArtifactId",null),this.props.formik.setFieldValue("manifestArtifact",e)},this.getRequiredArtifacts=()=>{const{requiredArtifactIds:e,requiredArtifacts:t}=this.props.formik.values;return(e||[]).map(e=>({expectedArtifactId:e})).concat(t||[])},this.onRequiredArtifactsChanged=e=>{this.props.formik.setFieldValue("requiredArtifactIds",e.filter(e=>e.expectedArtifactId).map(e=>e.expectedArtifactId)),this.props.formik.setFieldValue("requiredArtifacts",e.filter(e=>e.artifact))},this.handleLabelSelectorsChange=e=>{this.setState({labelSelectors:e}),this.props.formik.setFieldValue("labelSelectors.selectors",e)};const t=this.props.formik.values,a=Xe(e.formik.values,"manifests"),n=Xe(e.formik.values,"source")===Ut.TEXT;this.state={rawManifest:!nt(a)&&n?ae(a):"",overrideNamespace:""!==Xe(t,"namespaceOverride",""),selector:{account:"",location:"",mode:Ca.Label,labelSelectors:{selectors:[]}},labelSelectors:[]}}overrideNamespaceChange(e){e||this.props.formik.setFieldValue("namespaceOverride",""),this.setState({overrideNamespace:e})}render(){var e;const t=this.props.formik.values;return ze.createElement("div",{className:"form-horizontal"},ze.createElement("h4",null,"Basic Settings"),ze.createElement(jt,{accounts:this.props.accounts,onAccountSelect:e=>this.props.formik.setFieldValue("account",e),selectedAccount:t.account}),ze.createElement(n,{label:"Override Namespace"},ze.createElement(ne,{checked:this.state.overrideNamespace,onChange:e=>this.overrideNamespaceChange(e.target.checked)})),this.state.overrideNamespace&&ze.createElement(n,{label:"Namespace"},ze.createElement(Ba,{createable:!0,accounts:this.props.accounts,selectedAccount:t.account,selectedNamespace:t.namespaceOverride||"",onChange:e=>this.props.formik.setFieldValue("namespaceOverride",e)})),ze.createElement("hr",null),ze.createElement("h4",null,"Manifest Configuration"),ze.createElement(n,{label:"Manifest Source",helpKey:"kubernetes.manifest.source"},ze.createElement(se,{options:this.getSourceOptions(),onChange:e=>this.props.formik.setFieldValue("source",e.target.value),value:t.source})),t.source===Ut.TEXT&&ze.createElement(n,{label:"Manifest"},ze.createElement(Ga,{application:this.props.application,handleCopy:this.handleCopy}),ze.createElement(E,{onChange:this.handleRawManifestChange,value:this.state.rawManifest})),t.source===Ut.ARTIFACT&&ze.createElement(ze.Fragment,null,ze.createElement(re,{artifact:t.manifestArtifact,excludedArtifactTypePatterns:this.excludedManifestArtifactTypes,expectedArtifactId:t.manifestArtifactId,helpKey:"kubernetes.manifest.expectedArtifact",label:"Manifest Artifact",onArtifactEdited:this.onManifestArtifactEdited,onExpectedArtifactSelected:e=>this.onManifestArtifactSelected(e.id),pipeline:this.props.pipeline,stage:t}),ze.createElement(n,{label:"Expression Evaluation",helpKey:"kubernetes.manifest.skipExpressionEvaluation"},ze.createElement(ne,{checked:!0===t.skipExpressionEvaluation,onChange:e=>this.props.formik.setFieldValue("skipExpressionEvaluation",e.target.checked),text:"Skip SpEL expression evaluation"}))),ze.createElement(n,{label:"Required Artifacts to Bind",helpKey:"kubernetes.manifest.requiredArtifactsToBind"},ze.createElement(Oa,{bindings:this.getRequiredArtifacts(),onChangeBindings:this.onRequiredArtifactsChanged,pipeline:this.props.pipeline,stage:t})),G.feature.deployManifestStageAdvancedConfiguration&&ze.createElement(ze.Fragment,null,ze.createElement("hr",null),ze.createElement("h4",null,"Deploy Configuration"),ze.createElement(n,{label:"Skip Spec Template Labels",helpKey:"kubernetes.manifest.skipSpecTemplateLabels"},ze.createElement(ne,{checked:!0===t.skipSpecTemplateLabels,onChange:e=>this.props.formik.setFieldValue("skipSpecTemplateLabels",e.target.checked)})),ze.createElement(n,{label:"Label Selectors",helpKey:"kubernetes.manifest.deployLabelSelectors"},ze.createElement(ne,{checked:null!=t.labelSelectors,onChange:e=>{e.target.checked?(this.props.formik.setFieldValue("labelSelectors",{selectors:[]}),this.props.formik.setFieldValue("allowNothingSelected",!1)):(this.props.formik.setFieldValue("labelSelectors",null),this.props.formik.setFieldValue("allowNothingSelected",null))}})),t.labelSelectors&&t.labelSelectors.selectors&&ze.createElement(ze.Fragment,null,ze.createElement(n,{label:"Labels"},ze.createElement(Ea,{labelSelectors:this.props.formik.values.labelSelectors.selectors,onLabelSelectorsChange:this.handleLabelSelectorsChange})),ze.createElement(n,{label:"Allow nothing selected",helpKey:"kubernetes.manifest.deployLabelSelectors.allowNothingSelected"},ze.createElement(ne,{checked:!0===t.allowNothingSelected,onChange:e=>this.props.formik.setFieldValue("allowNothingSelected",e.target.checked)})))),ze.createElement("hr",null),ze.createElement(Ka,{accounts:this.props.accounts,config:t.trafficManagement,onConfigChange:e=>this.props.formik.setFieldValue("trafficManagement",e),selectedAccount:t.account}),ze.createElement("hr",null),ze.createElement("h4",null,"Stability Timeout"),ze.createElement(n,{label:"Timeout (minutes)",helpKey:"kubernetes.manifest.stableManifestTimeout"},ze.createElement($,{value:null!=(e=t.stableManifestTimeoutMinutes)?e:"",min:1,onChange:e=>{const t=e.target.value;this.props.formik.setFieldValue("stableManifestTimeoutMinutes",""===t?void 0:Number(t))}}),ze.createElement("div",{className:"form-inline"},ze.createElement("span",{className:"input-label sp-padding-xs-left"},"Leave blank to use the default (30 minutes)."))))}}class qa extends ze.Component{constructor(e){super(e),this.destroy$=new St,this.fetchAccounts=()=>{At(h.getAllAccountDetailsForProvider("kubernetes")).pipe(xt(this.destroy$)).subscribe(e=>{this.setState({accounts:e})})},this.state={accounts:[]};const{stage:t}=e,a=Qe(t);a.source||(a.source=Ut.TEXT),a.skipExpressionEvaluation||(a.skipExpressionEvaluation=!1),a.trafficManagement||(a.trafficManagement=za),a.cloudProvider||(a.cloudProvider="kubernetes"),a.moniker||(a.moniker={}),a.moniker.app||(a.moniker.app=e.application.name),this.stage=a}componentDidMount(){this.fetchAccounts()}componentWillUnmount(){this.destroy$.next()}render(){return ze.createElement(ie,{...this.props,stage:this.stage,onChange:this.props.updateStage,render:e=>ze.createElement(Ua,{...e,accounts:this.state.accounts})})}}const _a="strategy.spinnaker.io/max-version-history",Va={available:"success",stable:"success",paused:"warn",failed:"danger"};class ja extends ze.Component{render(){const{manifest:e}=this.props;return null==e||null==e.status?null:Object.keys(e.status).map((t,a)=>{const n=e.status[t],s=Va[t]||"",r=n.state,i=!r&&n.message;return ze.createElement("span",{key:a},r&&ze.createElement("span",{title:n.message,className:`pill ${s}`},t),i&&ze.createElement("span",{title:n.message,className:"pill warn"},t),(r||i)&&ze.createElement("span",null," "))})}}const Ha="kubernetesResource";class Wa extends ze.Component{constructor(e){super(e),this.spinnakerKindStateMap={serverGroupManagers:"serverGroupManager",serverGroups:"serverGroup"},this.state={url:""},this.loadUrl()}canOpen(){return!!this.props.manifest.manifest&&!!this.state.url}spinnakerKindFromKubernetesKind(e,t){return t[Object.keys(t).find(t=>t.toLowerCase()===e.toLowerCase())]}resourceRegion(){return et(Xe(this.props,["manifest","manifest","metadata","annotations","artifact.spinnaker.io/location"],""))}getStateParams(e){const t=this.props.manifest.manifest.kind.toLowerCase(),a=this.props.manifest.manifest.metadata.name,n=this.resourceRegion(),s={accountId:this.props.accountId,provider:"kubernetes",region:n,reg:n,[e]:`${t} ${a}`};return s.region||"namespace"!==t||e!==Ha||(s.region=a),s.region&&""!==s.region||(s.region="_"),s}loadUrl(){const e=Xe(this.props,["manifest","manifest","kind"],""),{accountId:t}=this.props;h.getAccountDetails(t).then(t=>{const a=this.spinnakerKindFromKubernetesKind(e,t.spinnakerKindMap),n=this.spinnakerKindStateMap[a]||Ha,s=this.getStateParams(n),r=this.props.stateService.href(`home.applications.application.insight.clusters.${n}`,s);this.setState({url:r})})}render(){return this.canOpen()?ze.createElement("a",{href:this.state.url,className:"clickable"},this.props.linkName):null}}const Za=I(Wa);function Xa({account:e,manifest:t}){return ze.createElement(ze.Fragment,null,ze.createElement("dl",{className:"manifest-status",key:"manifest-status"},ze.createElement("dt",null,t.manifest.kind),ze.createElement("dd",null,ze.createElement(L,{displayText:!0,text:t.manifest.metadata.name,toolTip:`Copy ${t.manifest.metadata.name}`})," ",ze.createElement(ja,{manifest:t}))),ze.createElement("div",{className:"manifest-support-links",key:"manifest-support-links"},ze.createElement(oe,{linkName:"YAML",manifestText:Et(t.manifest),modalTitle:t.manifest.metadata.name}),ze.createElement(Za,{linkName:"Details",manifest:t,accountId:e})),ze.createElement("div",{className:"manifest-events pad-left",key:"manifest-events"},ze.createElement(Jt,{manifest:t})))}Ot("dl.manifest-status {\n display: block;\n margin: 0;\n}\ndl.manifest-status dt,\ndl.manifest-status dd {\n display: inline-block;\n}\ndl.manifest-status dt {\n margin-right: 4px;\n}\n.manifest-support-links {\n margin: 0 0 1em;\n}\n.manifest-support-links a {\n margin-right: 2em;\n}\n.manifest-events {\n margin: 0 0 2em;\n}\n");Ot(".deploy-status .collapsible-element {\n margin-bottom: 20px;\n}\n.deploy-status .collapsible-element .alert {\n margin-bottom: 0;\n}\n.deploy-status .collapsible-element .content {\n padding: 0;\n}\n");class Ja extends ze.Component{constructor(e){super(e),this.state={subscriptions:[],manifestIds:[]}}componentDidMount(){this.componentDidUpdate(this.props,this.state)}componentWillUnmount(){this.unsubscribeAll()}componentDidUpdate(e,t){const a=Xe(this.props.stage,["context","outputs.manifests"],[]).filter(e=>!!e).filter(e=>!oa(e)),n=a.map(e=>ca.manifestIdentifier(e)).sort();if(t.manifestIds.join("")!==n.join("")){this.unsubscribeAll();const e=a.map(e=>{const t=ca.manifestIdentifier(e);return{id:t,unsubscribe:this.subscribeToManifestUpdates(t,e),manifest:this.stageManifestToIManifest(e,this.props.stage.context.account)}});this.setState({subscriptions:e,manifestIds:n})}}subscribeToManifestUpdates(e,t){const a=ca.stageManifestToManifestParams(t,this.props.stage.context.account);return ca.subscribe(this.props.application,a,t=>{const a=this.state.subscriptions.findIndex(t=>t.id===e);if(-1!==a){const e={...this.state.subscriptions[a],manifest:t},n=[...this.state.subscriptions];n[a]=e,this.setState({subscriptions:n})}})}unsubscribeAll(){this.state.subscriptions.forEach(({unsubscribe:e})=>e())}get storedManifestRefs(){return Xe(this.props.stage,["context","outputs.manifests"],[]).filter(e=>!!e).filter(oa)}stageManifestToIManifest(e,t){return{name:Xe(e,"metadata.name",""),moniker:null,account:t,cloudProvider:"kubernetes",location:Xe(e,"metadata.namespace",""),manifest:e,status:{},artifacts:[],events:[]}}render(){const{name:e,current:t,stage:a}=this.props,n=this.state.subscriptions.filter(e=>!!e.manifest).map(e=>e.manifest);return ze.createElement("div",{className:"deploy-status"},ze.createElement(W,{name:e,current:t},G.feature.multiBlockFailureMessages?a.failureMessages.map(e=>ze.createElement(le,{key:e,maxHeight:150},ze.createElement(Z,{stage:a,message:e}))):ze.createElement(Z,{stage:a,message:a.failureMessage}),!!(null==n?void 0:n.length)&&ze.createElement("div",{className:"row"},ze.createElement("div",{className:"col-md-12"},ze.createElement("div",{className:"well alert alert-info"},n.map(e=>{const t=e.manifest.metadata.uid||ca.manifestIdentifier(e.manifest);return ze.createElement(Xa,{key:t,manifest:e,account:a.context.account})})))),!!this.storedManifestRefs.length&&ze.createElement("div",{className:"row"},ze.createElement("div",{className:"col-md-12"},ze.createElement("div",{className:"well alert alert-info"},this.storedManifestRefs.map((e,t)=>ze.createElement("div",{key:t},ze.createElement(oe,{linkName:"Load Manifest Details",modalTitle:"Manifest",manifestUri:e.reference.replace(/^ref?:\/\//,"")}))))))))}}function Qa({application:e,formik:t,stageFieldUpdated:a}){const n=t.values;return ze.createElement("div",{className:"form-horizontal"},ze.createElement("h4",null,"Manifest"),ze.createElement("div",{className:"horizontal-rule"}),ze.createElement(Aa,{application:e,selector:n,modes:[Ca.Static,Ca.Dynamic],onChange:()=>{a()},includeSpinnakerKinds:null}))}Ja.title="deployStatus",X.pipeline.registerStage({label:"Deploy (Manifest)",description:"Deploy a Kubernetes manifest yaml/json file.",key:"deployManifest",cloudProvider:"kubernetes",component:qa,executionDetailsSections:[Ja,J,ce],producesArtifacts:!0,supportsCustomTimeout:!0,validators:[{type:"requiredField",fieldName:"account",fieldLabel:"Account"},{type:"requiredField",fieldName:"source",fieldLabel:"Source"},{type:"custom",validate:(e,t)=>{const a=Xe(t,"trafficManagement.enabled",!1),n=Xe(t,"trafficManagement.options.services",[]);if(a&&nt(n))return"Select at least one <strong>Service</strong> to enable Spinnaker-managed rollout strategy options.";if(a&&t.source===Ut.TEXT){const e=Xe(t,"manifests",[]).filter(e=>"ReplicaSet"===e.kind),a=Xe(t,"trafficManagement.options.strategy"),n=parseInt(Xe(e,[0,"metadata","annotations",_a]),10);if(a===La.key&&n<2)return`The max version history specified in your manifest conflicts with the behavior of the Red/Black rollout strategy. Please update your <strong>${_a}</strong> annotation to a value greater than or equal to 2.`}return null}}],accountExtractor:e=>e.context.account?[e.context.account]:[],configAccountExtractor:e=>e.account?[e.account]:[],artifactExtractor:ue.accumulateArtifacts(["manifestArtifactId","requiredArtifactIds"]),artifactRemover:de.removeArtifactFromFields(["manifestArtifactId","requiredArtifactIds"])});const Ya="Find Artifacts From Resource (Manifest)";X.pipeline.registerStage({label:Ya,description:"Finds artifacts from a Kubernetes resource.",key:"findArtifactsFromResource",cloudProvider:"kubernetes",component:function({application:e,pipeline:t,stage:a,updateStage:n,stageFieldUpdated:s}){return qe(()=>{rt(a,{app:e.name,cloudProvider:"kubernetes"})},[]),ze.createElement(ie,{application:e,pipeline:t,stage:a,onChange:n,render:e=>ze.createElement(Qa,{...e,stageFieldUpdated:s})})},executionDetailsSections:[J,ce],producesArtifacts:!0,validators:Fa(Ya),accountExtractor:e=>e.context.account?[e.context.account]:[],configAccountExtractor:e=>e.account?[e.account]:[]});const en=e=>ze.createElement("div",{className:"form-horizontal"},ze.createElement(n,{label:"Record Patch Annotation",helpKey:"kubernetes.manifest.patch.record"},ze.createElement(ne,{checked:e.record,onChange:t=>e.onRecordChange(t.target.checked)})),ze.createElement(n,{label:"Merge Strategy",helpKey:"kubernetes.manifest.patch.mergeStrategy",fieldColumns:3},ze.createElement(kt,{clearable:!1,value:e.strategy,options:["strategic","json","merge"].map(e=>({value:e,label:e})),onChange:t=>e.onStrategyChange(t.value)})));class tn extends ze.Component{constructor(e){super(e),this.excludedManifestArtifactTypes=[ee.DOCKER_IMAGE,ee.KUBERNETES,ee.FRONT50_PIPELINE_TEMPLATE,ee.EMBEDDED_BASE64,ee.MAVEN_FILE],this.onManifestArtifactSelected=e=>{this.props.formik.setFieldValue("manifestArtifactId",e),this.props.formik.setFieldValue("manifestArtifact",null)},this.onManifestArtifactEdited=e=>{this.props.formik.setFieldValue("manifestArtifactId",null),this.props.formik.setFieldValue("manifestArtifact",e)},this.getRequiredArtifacts=()=>{const{requiredArtifactIds:e,requiredArtifacts:t}=this.props.formik.values;return(e||[]).map(e=>({expectedArtifactId:e})).concat(t||[])},this.onRequiredArtifactsChanged=e=>{this.props.formik.setFieldValue("requiredArtifactIds",e.filter(e=>e.expectedArtifactId).map(e=>e.expectedArtifactId)),this.props.formik.setFieldValue("requiredArtifacts",e.filter(e=>e.artifact))},this.handleRawManifestChange=(e,t)=>{this.setState({rawManifest:e}),this.props.formik.setFieldValue("patchBody",t)},this.onManifestSelectorChange=()=>{this.props.stageFieldUpdated()},this.getSourceOptions=()=>dt([Ut.TEXT,Ut.ARTIFACT],e=>({label:pt(e),value:e}));const t=Xe(e.formik.values,"patchBody"),a=Xe(e.formik.values,"source")===Ut.TEXT;this.state={rawManifest:!nt(t)&&a?ae(t):""}}render(){const e=this.props.formik.values;return ze.createElement("div",{className:"container-fluid form-horizontal"},ze.createElement("h4",null,"Resource to Patch"),ze.createElement(Aa,{application:this.props.application,modes:[Ca.Static,Ca.Dynamic],onChange:this.onManifestSelectorChange,selector:e}),ze.createElement("hr",null),ze.createElement("h4",null,"Patch Content"),ze.createElement(n,{label:"Manifest Source",helpKey:"kubernetes.manifest.source"},ze.createElement(se,{options:this.getSourceOptions(),onChange:e=>this.props.formik.setFieldValue("source",e.target.value),value:e.source})),e.source===Ut.TEXT&&ze.createElement(n,{label:"Manifest"},ze.createElement(E,{onChange:this.handleRawManifestChange,value:this.state.rawManifest})),e.source===Ut.ARTIFACT&&ze.createElement(ze.Fragment,null,ze.createElement(re,{artifact:e.manifestArtifact,excludedArtifactTypePatterns:this.excludedManifestArtifactTypes,expectedArtifactId:e.manifestArtifactId,helpKey:"kubernetes.manifest.expectedArtifact",label:"Manifest Artifact",onArtifactEdited:this.onManifestArtifactEdited,onExpectedArtifactSelected:e=>this.onManifestArtifactSelected(e.id),pipeline:this.props.pipeline,stage:e})),ze.createElement(n,{label:"Required Artifacts to Bind",helpKey:"kubernetes.manifest.requiredArtifactsToBind"},ze.createElement(Oa,{bindings:this.getRequiredArtifacts(),onChangeBindings:this.onRequiredArtifactsChanged,pipeline:this.props.pipeline,stage:e})),ze.createElement("hr",null),ze.createElement("h4",null,"Patch Options"),ze.createElement(en,{strategy:!!e.options&&e.options.mergeStrategy,onStrategyChange:e=>this.props.formik.setFieldValue("options.mergeStrategy",e),record:!!e.options&&e.options.record,onRecordChange:e=>this.props.formik.setFieldValue("options.record",e)}))}}class an extends ze.Component{constructor(e){super(e),rt(e.stage,{app:e.application.name,source:Ut.TEXT,options:{record:!0,mergeStrategy:"strategic"},cloudProvider:"kubernetes"}),rt(e.stage.options,{mergeStrategy:e.stage.options.strategy}),delete e.stage.options.strategy,e.stage.patchBody&&!Array.isArray(e.stage.patchBody)&&(e.stage.patchBody=[e.stage.patchBody]),this.stage=e.stage}render(){return ze.createElement(ie,{...this.props,stage:this.stage,onChange:this.props.updateStage,render:e=>ze.createElement(tn,{...e,stageFieldUpdated:this.props.stageFieldUpdated})})}}class nn extends Ja{}nn.title="PatchStatus";const sn="Patch (Manifest)";X.pipeline.registerStage({label:sn,description:"Patch a Kubernetes object in place.",key:"patchManifest",cloudProvider:"kubernetes",component:an,executionDetailsSections:[nn,J,ce],producesArtifacts:!0,supportsCustomTimeout:!0,validators:Fa(sn),artifactExtractor:ue.accumulateArtifacts(["manifestArtifactId","requiredArtifactIds"]),artifactRemover:de.removeArtifactFromFields(["manifestArtifactId","requiredArtifactIds"])});class rn extends ze.Component{constructor(){super(...arguments),this.componentDidMount=()=>{rt(this.props.stage,{app:this.props.application.name,cloudProvider:"kubernetes"}),this.props.stageFieldUpdated()},this.onChange=e=>{Object.assign(this.props.stage,e),this.props.stageFieldUpdated()}}render(){const e={...this.props.stage};return ze.createElement("div",{className:"form-horizontal"},ze.createElement("h4",null,"Manifest"),ze.createElement("div",{className:"horizontal-rule"}),ze.createElement(Aa,{application:this.props.application,selector:e,modes:[Ca.Static,Ca.Dynamic,Ca.Label],onChange:this.onChange,includeSpinnakerKinds:null}))}}class on extends Ja{}on.title="RolloutRestartStatus";const ln="Rollout Restart (Manifest)";X.pipeline.registerStage({label:ln,description:"Perform a rolling restart of a manifest.",key:"rollingRestartManifest",cloudProvider:"kubernetes",component:rn,executionDetailsSections:[on,J],validators:Fa(ln)});class cn extends ze.Component{constructor(e){super(e),this.state={credentials:[]},this.excludedManifestArtifactTypes=[ee.DOCKER_IMAGE,ee.KUBERNETES,ee.FRONT50_PIPELINE_TEMPLATE,ee.MAVEN_FILE],this.outputOptions=[{label:"None",value:"none"},{label:"Logs",value:"propertyFile"},{label:"Artifact",value:"artifact"}],this.accountChanged=e=>{this.props.updateStageField({credentials:e,account:e})},this.handleRawManifestChange=(e,t)=>{t&&this.props.updateStageField({manifest:t[0]}),this.setState({rawManifest:e})},this.sourceChanged=e=>{this.props.updateStageField({consumeArtifactSource:e.value}),"none"===e.value&&this.props.updateStageField({propertyFile:null})},this.onArtifactSelected=e=>{this.props.updateStageField({consumeArtifactId:e.id})},this.onArtifactEdited=e=>{this.props.updateStageField({consumeArtifact:e,consumeArtifactId:e.id,consumeArtifactAccount:e.artifactAccount})},this.onManifestArtifactSelected=e=>{this.props.updateStageField({manifestArtifactId:e,manifestArtifact:null})},this.onManifestArtifactEdited=e=>{this.props.updateStageField({manifestArtifactId:null,manifestArtifact:e})},this.updatePropertyFile=e=>{this.props.updateStageField({propertyFile:e.target.value})},this.getSourceOptions=()=>dt([Ut.TEXT,Ut.ARTIFACT],e=>({label:pt(e),value:e})),this.getRequiredArtifacts=()=>{const{requiredArtifactIds:e,requiredArtifacts:t}=this.props.stage;return(e||[]).map(e=>({expectedArtifactId:e})).concat(t||[])},this.onRequiredArtifactsChanged=e=>{this.props.updateStageField({requiredArtifactIds:e.filter(e=>e.expectedArtifactId).map(e=>e.expectedArtifactId)}),this.props.updateStageField({requiredArtifacts:e.filter(e=>e.artifact)})};const{stage:t,application:a}=this.props;t.application||(t.application=a.name),t.source||(t.source=Ut.TEXT)}initRawManifest(){const{stage:e}=this.props;e.manifest&&this.setState({rawManifest:ae([e.manifest])})}componentDidMount(){this.props.updateStageField({cloudProvider:"kubernetes"}),h.getAllAccountDetailsForProvider("kubernetes").then(e=>{this.setState({credentials:e})}),this.initRawManifest()}logSourceForm(){const{stage:e}=this.props;return ze.createElement(n,{label:"Container Name",helpKey:"kubernetes.runJob.captureSource.containerName"},ze.createElement("input",{className:"form-control input-sm",type:"text",value:e.propertyFile,onChange:this.updatePropertyFile}))}artifactForm(){const{stage:e,pipeline:t}=this.props;return ze.createElement(n,{label:"Artifact"},ze.createElement(Y,{pipeline:t,stage:e,artifact:e.consumeArtifact,excludedArtifactTypePatterns:[],expectedArtifactId:e.consumeArtifactId,onExpectedArtifactSelected:this.onArtifactSelected,onArtifactEdited:this.onArtifactEdited}))}render(){const{stage:e}=this.props;let t=ze.createElement("div",null);return"propertyFile"===e.consumeArtifactSource?t=this.logSourceForm():"artifact"===e.consumeArtifactSource&&(t=this.artifactForm()),ze.createElement("div",{className:"container-fluid form-horizontal"},ze.createElement("h4",null,"Basic Settings"),ze.createElement(jt,{selectedAccount:e.account||"",accounts:this.state.credentials,onAccountSelect:e=>this.accountChanged(e)}),ze.createElement("h4",null,"Manifest Configuration"),ze.createElement(n,{label:"Manifest Source",helpKey:"kubernetes.manifest.source"},ze.createElement(se,{options:this.getSourceOptions(),onChange:e=>this.props.updateStageField({source:e.target.value}),value:e.source})),e.source===Ut.TEXT&&ze.createElement(E,{value:this.state.rawManifest,onChange:this.handleRawManifestChange}),e.source===Ut.ARTIFACT&&ze.createElement(ze.Fragment,null,ze.createElement(re,{artifact:e.manifestArtifact,excludedArtifactTypePatterns:this.excludedManifestArtifactTypes,expectedArtifactId:e.manifestArtifactId,helpKey:"kubernetes.manifest.expectedArtifact",label:"Manifest Artifact",onArtifactEdited:this.onManifestArtifactEdited,onExpectedArtifactSelected:e=>this.onManifestArtifactSelected(e.id),pipeline:this.props.pipeline,stage:e})),ze.createElement(n,{label:"Required Artifacts to Bind",helpKey:"kubernetes.manifest.requiredArtifactsToBind"},ze.createElement(Oa,{bindings:this.getRequiredArtifacts(),onChangeBindings:this.onRequiredArtifactsChanged,pipeline:this.props.pipeline,stage:e})),ze.createElement("h4",null,"Output"),ze.createElement(n,{label:"Capture Output From",helpKey:"kubernetes.runJob.captureSource"},ze.createElement("div",null,ze.createElement(kt,{clearable:!1,options:this.outputOptions,value:e.consumeArtifactSource,onChange:this.sourceChanged}))),t)}}class dn extends ze.Component{createdPodNames(e){return lt(e,e=>e.status.startTime).map(e=>e.name)}render(){const{stage:e,name:t,current:a}=this.props,{context:n}=e,s=Xe(e,["context","jobStatus","location"],""),r=s?Xe(n,["deploy.jobs",s])[0]:"",i=Xe(e,["context","execution","logs"]),o=Xe(e.context,"jobStatus.pods",[]),l=(nt(o)?[Xe(e,["context","jobStatus","mostRecentPodName"],"")]:this.createdPodNames(o)).map(e=>new me(e));return ze.createElement(W,{name:t,current:a},ze.createElement(Z,{stage:e,message:e.failureMessage}),ze.createElement("div",{className:"row"},ze.createElement("div",{className:"col-md-9"},ze.createElement("dl",{className:"dl-narrow dl-horizontal"},ze.createElement("dt",null,"Account"),ze.createElement("dd",null,ze.createElement(T,{account:n.account})),s&&ze.createElement(ze.Fragment,null,ze.createElement("dt",null,"Namespace"),ze.createElement("dd",null,e.context.jobStatus.location),ze.createElement("dt",null,"Logs"),ze.createElement("dd",null,ze.createElement(pe,{deployedName:r,account:this.props.stage.context.account,location:s,application:this.props.application,externalLink:i,podNamesProviders:l}))),!s&&ze.createElement("div",{className:"well"},"Collecting additional details...")))))}}function un({application:e,formik:t,stageFieldUpdated:a}){const s=t.values;return ze.createElement("div",{className:"form-horizontal"},ze.createElement("h4",null,"Manifest"),ze.createElement("div",{className:"horizontal-rule"}),ze.createElement(Aa,{application:e,selector:s,modes:[Ca.Static,Ca.Dynamic],onChange:()=>{a()},includeSpinnakerKinds:null}),ze.createElement("h4",null,"Settings"),ze.createElement("div",{className:"horizontal-rule"}),ze.createElement(n,{label:"Revisions Back",helpKey:"kubernetes.manifest.undoRollout.revisionsBack",fieldColumns:4,groupClassName:"form-group form-inline"},ze.createElement("div",{className:"input-group"},ze.createElement($,{inputClassName:"input-sm highlight-pristine",onChange:e=>{t.setFieldValue("numRevisionsBack",e.target.value)},value:s.numRevisionsBack,min:1}),ze.createElement("span",{className:"input-group-addon"},"1"===s.numRevisionsBack?"revision":"revisions"))))}dn.title="runJobConfig",X.pipeline.registerStage({label:"Run Job (Manifest)",description:"Run a Kubernetes Job manifest yaml/json file.",key:"runJobManifest",alias:"runJob",addAliasToConfig:!0,cloudProvider:"kubernetes",component:cn,executionDetailsSections:[dn,Ja,J],supportsCustomTimeout:!0,producesArtifacts:!0,restartable:!0,validators:[{type:"custom",validate:(e,t,a,n)=>t.manifest&&t.manifest.kind&&"Job"!==t.manifest.kind?"Run Job (Manifest) only accepts manifest of kind Job.":""}]});const mn="Undo Rollout (Manifest)",pn="undoRolloutManifest";function Cn({application:e,formik:t,stageFieldUpdated:a}){const n=t.values;return ze.createElement("div",{className:"form-horizontal"},ze.createElement("h4",null,"Manifest"),ze.createElement("div",{className:"horizontal-rule"}),ze.createElement(Aa,{application:e,selector:n,modes:[Ca.Static,Ca.Dynamic],onChange:()=>{a()},includeSpinnakerKinds:null}),ze.createElement("h4",null,"Settings"),ze.createElement("div",{className:"horizontal-rule"}),ze.createElement(ua,{options:n,onChange:()=>{a()}}))}X.pipeline.registerStage({label:mn,description:"Rollback a manifest a target number of revisions.",key:pn,cloudProvider:"kubernetes",component:function({application:e,pipeline:t,stage:a,updateStage:n,stageFieldUpdated:s}){return qe(()=>{rt(a,{cloudProvider:"kubernetes"}),a.isNew&&(a.numRevisionsBack=1)},[]),ze.createElement(ie,{application:e,pipeline:t,stage:a,onChange:n,render:e=>ze.createElement(un,{...e,stageFieldUpdated:s})})},executionDetailsSections:[Da(pn),J],validators:[...Fa(mn),{type:"requiredField",fieldName:"numRevisionsBack",fieldLabel:"Number of Revisions"}]});const hn="Scale (Manifest)",fn="scaleManifest";X.pipeline.registerStage({label:hn,description:"Scale a Kubernetes object created from a manifest.",key:fn,cloudProvider:"kubernetes",component:function({application:e,pipeline:t,stage:a,updateStage:n,stageFieldUpdated:s}){return qe(()=>{rt(a,{app:e.name,cloudProvider:"kubernetes"}),a.isNew&&(a.replicas=0)},[]),ze.createElement(ie,{application:e,pipeline:t,stage:a,onChange:n,render:e=>ze.createElement(Cn,{...e,stageFieldUpdated:s})})},executionDetailsSections:[Da(fn),J],accountExtractor:e=>e.context.account?[e.context.account]:[],configAccountExtractor:e=>e.account?[e.account]:[],validators:[...Fa(hn),{type:"requiredField",fieldName:"replicas",fieldLabel:"Replicas"}]});class gn extends ze.Component{constructor(){super(...arguments),this.componentDidMount=()=>{rt(this.props.stage,{app:this.props.application.name,cloudProvider:"kubernetes"}),this.props.stageFieldUpdated()},this.onChange=e=>{Object.assign(this.props.stage,e),this.props.stageFieldUpdated()}}render(){const e={...this.props.stage};return ze.createElement("div",{className:"form-horizontal"},ze.createElement("h4",null,"Manifest"),ze.createElement("div",{className:"horizontal-rule"}),ze.createElement(Aa,{application:this.props.application,selector:e,modes:[Ca.Static,Ca.Dynamic],onChange:this.onChange,includeSpinnakerKinds:["serverGroups"]}))}}const bn="Disable (Manifest)",En="disableManifest",vn={label:bn,description:"Disable a Kubernetes manifest.",key:En,cloudProvider:"kubernetes",component:gn,executionDetailsSections:[Da(En),J],supportsCustomTimeout:!0,accountExtractor:e=>e.account?[e.account]:[],configAccountExtractor:e=>e.account?[e.account]:[],validators:Fa(bn)};X.pipeline.registerStage(vn);const kn="Enable (Manifest)",yn="enableManifest",Sn={label:kn,description:"Enable a Kubernetes manifest.",key:yn,cloudProvider:"kubernetes",component:gn,executionDetailsSections:[Da(yn),J],supportsCustomTimeout:!0,accountExtractor:e=>e.account?[e.account]:[],configAccountExtractor:e=>e.account?[e.account]:[],validators:Fa(kn)};X.pipeline.registerStage(Sn);Ce.registerValidator("manifestSelector",new class{validate(e,t,a,n){const[s,r]=(t.manifestName||"").split(" ");return r||s?r?s?null:"<strong>Kind</strong> is a required field.":"<strong>Name</strong> is a required field.":"<strong>Name</strong> and <strong>Kind</strong> are required fields."}});const An="k8s",wn=`.insight.${An}`,Nn=e=>ge("applications").path(e.name,"rawResources").get(),Mn=(e,t)=>Promise.resolve(t);function xn(){he.removeDataSource(An),he.registerDataSource({key:An,label:"Kubernetes",category:fe,sref:wn,primary:!0,icon:"fas fa-xs fa-fw fa-th-large",iconName:"spMenuK8s",loader:Nn,onLoad:Mn,providerField:"cloudProvider",credentialsField:"account",regionField:"region",description:"Collections of kubernetes resources",defaultData:[]})}const Dn=class e{static namespaceDisplayName(t){return null===t||""===t?e.GLOBAL_LABEL:t}static resourceKey(e){return null===e?"":""===e.namespace?e.account+"-"+e.kind+"-"+e.name:e.account+"-"+e.namespace+"-"+e.kind+"-"+e.name}};Dn.GLOBAL_LABEL="(global)";let Fn=Dn;const Tn=class e{constructor(){this.subscribers=[]}static getInstance(t){let a=e.intances[t];return e.intances[t]||(e.intances[t]=new e,a=e.intances[t]),a}subscribe(e){return this.subscribers.push(e),()=>this.subscribers=this.subscribers.filter(t=>t!==e)}unsubscribe(e){const t=this.subscribers.indexOf(e);t>-1&&this.subscribers.splice(t,1)}publish(e){this.subscribers.forEach(t=>t(e))}};Tn.intances={};let Rn=Tn;Ot(".RawResource.card {\n background-color: white;\n padding: 1em;\n margin-top: 1em;\n margin-left: 3em;\n border: thin solid lightgrey;\n}\n.RawResource.clickable-row {\n background-color: var(--color-white);\n border: 1px solid var(--color-alto);\n margin: 5px 15px 3px;\n position: relative;\n z-index: 1;\n}\n.RawResource.clickable-row.active {\n border-color: var(--color-accent-g1);\n background-color: var(--color-accent-g3);\n}\n.RawResource.clickable-row:hover {\n border-color: var(--color-accent-g1);\n box-shadow: 0 0 4px 2px var(--color-accent-g1);\n z-index: 2;\n}\n.RawResource.clickable-row.managed {\n margin: 5px;\n border-style: dashed;\n}\n.RawResource .details {\n color: grey;\n display: flex;\n}\n.RawResource .details .column {\n margin-right: 5em;\n}\n.RawResource .details .column .title {\n margin-right: 1em;\n}\n.RawResource .title {\n margin: 0;\n}\n.RawResourceGroup {\n margin-top: 2em;\n}\n.RawResourceGroup .header {\n display: flex;\n height: 37px;\n padding: 0;\n color: var(--color-primary);\n}\n.RawResourceGroup .title {\n display: inline-block;\n padding-left: 1em;\n}\n.RawResourceGroup .pipeline-toggle {\n background-color: var(--color-alabaster);\n display: inline-block;\n padding: 10px 10px 10px 0;\n height: 36px;\n flex: 0 0 auto;\n}\n.RawResourceGroup .shadowed {\n position: relative;\n display: flex;\n}\n");class In extends ze.Component{constructor(e){super(e)}render(){const{account:e,name:t,region:a}=this.props.resource,n={account:e,name:t,region:a};return ze.createElement(ft,{class:"active"},ze.createElement(ht,{to:".rawResourceDetails",params:n},ze.createElement("div",{className:"RawResource card clickable clickable-row"},ze.createElement("h4",{className:"title"},ze.createElement(be,{provider:"kubernetes",height:"20px",width:"20px"}),this.props.resource.kind," ",this.props.resource.displayName),ze.createElement("div",{className:"details"},ze.createElement("div",{className:"column"},ze.createElement("div",{className:"title"},"account:"),ze.createElement("div",null,this.props.resource.account)),ze.createElement("div",{className:"column"},ze.createElement("div",{className:"title"},"namespace:"),ze.createElement("div",null,Fn.namespaceDisplayName(this.props.resource.namespace))),ze.createElement("div",{className:"column"},ze.createElement("div",{className:"title"},"apiVersion:"),ze.createElement("div",null,this.props.resource.apiVersion))))))}}class Pn extends ze.Component{constructor(e){super(e),this.state={open:!0}}render(){return ze.createElement("div",{className:"RawResourceGroup"},ze.createElement("div",{className:"clickable sticky-header header",onClick:this.onHeaderClick.bind(this)},ze.createElement("span",{className:"glyphicon pipeline-toggle glyphicon-chevron-"+(this.state.open?"down":"right")}),ze.createElement("div",{className:"shadowed"},ze.createElement("h4",{className:"group-title"},this.props.title))),ze.createElement("div",{className:"items"+(this.state.open?"":" hidden")},this.props.children))}onHeaderClick(){this.setState({open:!this.state.open})}}class Gn extends ze.Component{constructor(e){super(e)}buildGroupByModel(e){const t=e.map(e=>String(e[this.props.groupBy]));return Object.assign({},...t.map(t=>({[t]:e.filter(e=>String(e[this.props.groupBy])===t)})))}groupTitle(e){return"namespace"==this.props.groupBy?Fn.namespaceDisplayName(e):e}render(){const e=this.buildGroupByModel(this.props.resources);return ze.createElement("div",{className:"RawResourceGroups"},...Object.entries(e).map(([e,t])=>"undefined"!==e?ze.createElement(Pn,{title:this.groupTitle(e),key:e},...t.map(e=>ze.createElement(In,{resource:e,key:Fn.resourceKey(e)}))):ze.createElement(ze.Fragment,null)))}}Ot(".K8sResources {\n width: 100%;\n}\n.K8sResources .StandardFieldLayout {\n width: 25%;\n}\n.K8sResources .StandardFieldLayout .StandardFieldLayout_Label {\n min-width: 72px;\n}\n");class On extends ze.Component{constructor(e){super(e),this.filterPubSub=Rn.getInstance(this.props.app.name),this.sub=this.onFilterChange.bind(this),this.groupByChanged=e=>{this.setState({groupBy:e.target.value.toLowerCase()})},this.dataSource=this.props.app.getDataSource(An),this.state={groupBy:"none",filters:null,rawResources:[]},this.filterPubSub.subscribe(this.sub)}componentWillUnmount(){this.filterPubSub.unsubscribe(this.sub)}onFilterChange(e){this.setState({...this.state,filters:e})}async componentDidMount(){await this.dataSource.ready(),this.setState({...this.state,groupBy:this.state.groupBy,rawResources:await this.dataSource.data.sort((e,t)=>e.name.localeCompare(t.name))})}render(){const e=["None","Account","Kind","Namespace"];return ze.createElement("div",{className:"K8sResources"},ze.createElement("div",{className:"header row"},ze.createElement(Ee,{onChange:this.groupByChanged,value:this.state.groupBy.charAt(0).toUpperCase()+this.state.groupBy.substr(1),name:"groupBy",label:"Group By",input:t=>ze.createElement(ve,{...t,inputClassName:"groupby",stringOptions:e,clearable:!1})})),ze.createElement("div",{className:"content"},"none"===this.state.groupBy?ze.createElement(ze.Fragment,null,...this.state.rawResources.filter(e=>this.matchFilters(e)).map(e=>ze.createElement(In,{key:Fn.resourceKey(e),resource:e}))):ze.createElement(Gn,{resources:this.state.rawResources.filter(e=>this.matchFilters(e)),groupBy:this.state.groupBy})))}matchFilters(e){if(null==this.state.filters)return!0;const t=Object.values(this.state.filters.accounts).every(e=>!e)||this.state.filters.accounts[e.account],a=Object.values(this.state.filters.kinds).every(e=>!e)||this.state.filters.kinds[e.kind],n=Object.values(this.state.filters.namespaces).every(e=>!e)||this.state.filters.namespaces[e.namespace];return t&&a&&n}}class Bn extends ze.Component{constructor(e){super(e),this.filterPubSub=Rn.getInstance(this.props.app.name),this.dataSource=this.props.app.getDataSource(An),this.state={accounts:{},kinds:{},namespaces:{},displayNamespaces:{}}}async componentDidMount(){await this.dataSource.ready();const e=Object.assign({},...this.dataSource.data.map(e=>({[e.namespace]:!1}))),t={...e};""in t&&(delete t[""],t[Fn.GLOBAL_LABEL]=!1),this.setState({accounts:Object.assign({},...this.dataSource.data.map(e=>({[e.account]:!1}))),kinds:Object.assign({},...this.dataSource.data.map(e=>({[e.kind]:!1}))),namespaces:e,displayNamespaces:t})}render(){return ze.createElement("div",{className:"content"},ze.createElement(ke,{heading:"Kind",expanded:!0},...Object.keys(this.state.kinds).sort((e,t)=>e.localeCompare(t)).map(e=>ze.createElement(ye,{heading:e,key:e,sortFilterType:this.state.kinds,onChange:this.onCheckbox.bind(this)}))),ze.createElement(ke,{heading:"Account",expanded:!0},...Object.keys(this.state.accounts).sort((e,t)=>e.localeCompare(t)).map(e=>ze.createElement(ye,{heading:e,key:e,sortFilterType:this.state.accounts,onChange:this.onCheckbox.bind(this)}))),ze.createElement(ke,{heading:"Namespace",expanded:!0},...Object.keys(this.state.displayNamespaces).sort((e,t)=>e.localeCompare(t)).map(e=>ze.createElement(ye,{heading:e,key:e,sortFilterType:this.state.displayNamespaces,onChange:this.onNsCheckbox.bind(this)}))))}onNsCheckbox(){const{namespaces:e,displayNamespaces:t}={...this.state};for(const a in t)a==Fn.GLOBAL_LABEL&&(e[""]=t[a]),e[a]=t[a];this.setState({namespaces:e}),this.filterPubSub.publish(this.state)}onCheckbox(){this.setState(this.state),this.filterPubSub.publish(this.state)}}Se("k8s.rawResource.details");class Ln extends ze.Component{constructor(e){super(e),this.destroy$=new St,this.props$=new St,this.deletedRawResource=()=>{var e,t,a,n;const{app:s}=this.props,{account:r,manifest:i}=this.state,o=null!=(a=null==(t=null==(e=null==i?void 0:i.manifest)?void 0:e.metadata)?void 0:t.name)?a:null,l=null==(n=null==i?void 0:i.manifest)?void 0:n.kind,c={application:s,title:"Deleting "+o};Ae.confirm({header:"Are you sure you want to delete the "+l+" "+o+"?",buttonText:"Delete",account:r,taskMonitorConfig:c,submitMethod:()=>{we.log({category:"RawResource",action:"Delete clicked"});const e={manifestName:this.state.name,location:this.state.region,account:this.state.account,reason:null,cloudProvider:"kubernetes",options:{cascading:!1}};return C.deleteManifest(e,this.props.app)}})},this.handleEditClick=()=>{we.log({category:"RawResource",action:"Edit clicked"}),this.editRawResource()},this.state={account:null,application:null,name:null,region:null,loading:!0,manifest:null}}componentDidMount(){this.setState({account:this.props.$stateParams.account,application:this.props.$stateParams.application,name:this.props.$stateParams.name,region:this.props.$stateParams.region});const e={account:this.props.$stateParams.account,location:""==this.props.$stateParams.region?"_":this.props.$stateParams.region,name:this.props.$stateParams.name};this.unsubscribeManifest=ca.subscribe(this.props.app,e,e=>{null!=this.unsubscribeManifest&&this.setState({manifest:e,loading:!1})})}componentWillReceiveProps(e){this.props$.next(e)}componentWillUnmount(){this.destroy$.next(),this.unsubscribeManifest&&(this.unsubscribeManifest(),this.unsubscribeManifest=null)}editRawResource(){const{app:e}=this.props,{account:t,application:a,manifest:n}=this.state;_t.buildNewManifestCommand(e,n.manifest,{app:a},t).then(t=>{Xt.show({title:"Edit Manifest",application:e,command:t})})}render(){var e,a,n,s,r,i;const{account:o,region:l,manifest:c}=this.state,d=null==(e=null==c?void 0:c.manifest)?void 0:e.kind,u=null==(a=null==c?void 0:c.manifest)?void 0:a.apiVersion,m=null==(n=null==c?void 0:c.manifest)?void 0:n.metadata,p=null==m?void 0:m.name,C=Xe(m,"creationTimestamp")&&vt.fromISO(m.creationTimestamp).toMillis();return ze.createElement("div",{className:"details-panel"},ze.createElement("div",{className:"header"},ze.createElement("div",{className:"close-button"},ze.createElement(ht,{to:"^"},ze.createElement("span",{className:"glyphicon glyphicon-remove"}))),this.state.loading?ze.createElement("div",{className:"horizontal center middle"},ze.createElement(Ne,{size:"small"})):ze.createElement("div",{className:"header-text horizontal middle"},ze.createElement(be,{provider:"kubernetes",height:"36px",width:"36px"}),ze.createElement("h3",{className:"horizontal middle space-between flex-1"},d," ",p)),!this.state.loading&&G.kubernetesAdHocInfraWritesEnabled&&ze.createElement("div",{className:"actions"},ze.createElement(je,{className:"dropdown",id:"resource-actions-dropdown"},ze.createElement(je.Toggle,{className:"btn btn-sm btn-primary dropdown-toggle"},ze.createElement("span",null,d," Actions")),ze.createElement(je.Menu,null,ze.createElement("li",{key:"action-edit",id:"resource-action-edit"},ze.createElement("a",{onClick:this.handleEditClick},"Edit")),ze.createElement("li",{key:"action-delete",id:"resource-action-delete"},ze.createElement("a",{onClick:this.deletedRawResource},"Delete")))))),!this.state.loading&&ze.createElement("div",{className:"content"},ze.createElement(t,{heading:"Information",defaultExpanded:!0},ze.createElement("dl",{className:"dl-horizontal dl-narrow"},ze.createElement("dt",null,"Created"),ze.createElement("dd",null,F(C)),ze.createElement("dt",null,"Account"),ze.createElement("dd",null,ze.createElement(T,{account:o})),ze.createElement("dt",null,"API Version"),ze.createElement("dd",null,u),ze.createElement("dt",null,"Kind"),ze.createElement("dd",null,d),ze.createElement("dt",null,"Namespace"),ze.createElement("dd",null,Fn.namespaceDisplayName(l)))),ze.createElement(t,{key:"status",heading:"status",defaultExpanded:!0},ze.createElement("ul",null,(null!=(i=null==(r=null==(s=null==c?void 0:c.manifest)?void 0:s.status)?void 0:r.conditions)?i:[]).map(e=>ze.createElement("li",{key:e.type+e.lastTransitionTime,style:{marginBottom:"10px"}},ze.createElement(Vt,{condition:e}))))),ze.createElement(t,{key:"events",heading:"events",defaultExpanded:!0},ze.createElement(Jt,{manifest:c})),ze.createElement(t,{key:"labels",heading:"labels",defaultExpanded:!0},ze.createElement(Bt,{manifest:Xe(c,["manifest"],{})}))))}}const $n={name:"rawResourceDetails",url:"/rawResourceDetails/:account/:region/:name",views:{"detail@../insight":{component:Ln,$type:"react"}},resolve:{account:["$stateParams",e=>e.account],name:["$stateParams",e=>e.name],region:["$stateParams",e=>e.region]},data:{pageTitleDetails:{title:"Raw Resource Details",nameParam:"name",accountParam:"account"},history:{type:"rawResources"}}},zn={url:"/kubernetes",name:"k8s",views:{nav:{component:Bn,$type:"react"},master:{component:On,$type:"react"}},data:{pageTitleSection:{title:"Kubernetes"}},children:[]};function Kn(){Me(e=>{e.addInsightState({...zn,children:[]}),e.addInsightDetailState($n)})}function Un(){G.feature.kubernetesRawResources&&(xn(),Kn())}Un();class qn extends ze.Component{constructor(e){super(e),this.state={loading:!0,manifest:null}}componentDidMount(){const{kubernetesResource:e}=this.props,t={account:e.accountId,location:e.region,name:e.kubernetesResource};this.unsubscribeManifest=ca.subscribe(this.props.app,t,e=>{null!=this.unsubscribeManifest&&this.setState({manifest:e,loading:!1})})}componentWillUnmount(){this.unsubscribeManifest&&(this.unsubscribeManifest(),this.unsubscribeManifest=null)}render(){const{manifest:e}=this.state,a=Xe(e,["manifest","metadata"],null),n=Xe(a,"creationTimestamp")&&vt.fromISO(a.creationTimestamp).toMillis();return ze.createElement("div",{className:"details-panel"},ze.createElement("div",{className:"header"},ze.createElement("div",{className:"close-button"},ze.createElement("a",{className:"btn btn-link"},ze.createElement(ht,{to:"^"},ze.createElement("span",{className:"glyphicon glyphicon-remove"})))),this.state.loading?ze.createElement("div",{className:"horizontal center middle"},ze.createElement(Ne,{size:"small"})):ze.createElement("div",{className:"header-text horizontal middle"},ze.createElement(be,{provider:"kubernetes",height:"36px",width:"36px"}),ze.createElement("h3",{className:"horizontal middle space-between flex-1"},Xe(a,["name"],"")))),!this.state.loading&&ze.createElement("div",{className:"content"},ze.createElement(t,{heading:"Information"},ze.createElement("dl",{className:"dl-horizontal dl-narrow"},ze.createElement("dt",null,"Created"),ze.createElement("dd",null,F(n)),ze.createElement("dt",null,"Account"),ze.createElement("dd",null,ze.createElement(T,{account:Xe(e,["account"],"")})),ze.createElement("dt",null,"Namespace"),ze.createElement("dd",null,Xe(a,["namespace"],"")),ze.createElement("dt",null,"Kind"),ze.createElement("dd",null,Xe(e,["manifest","kind"],"")))),ze.createElement(t,{key:"status",heading:"status",defaultExpanded:!0},ze.createElement("ul",null,Xe(e,["manifest","status","conditions"],[]).map(e=>ze.createElement("li",{key:e.type+e.lastTransitionTime,style:{marginBottom:"10px"}},ze.createElement(Vt,{condition:e}))))),ze.createElement(t,{key:"events",heading:"events",defaultExpanded:!0},ze.createElement(Jt,{manifest:e})),ze.createElement(t,{key:"labels",heading:"labels",defaultExpanded:!0},ze.createElement(Bt,{manifest:Xe(e,["manifest"],{})}))))}}const _n={name:"kubernetesResource",url:"/manifest/:provider/:accountId/:region/:kubernetesResource",views:{"detail@../insight":{component:qn,$type:"react"}},resolve:{accountId:["$stateParams",e=>e.accountId],kubernetesResource:["$stateParams",e=>e]},data:{pageTitleDetails:{title:"Generic Kubernetes Resource Details",nameParam:"kubernetesResource",accountParam:"accountId",regionParam:"region"},history:{type:"kubernetesResource"}}};Me(e=>{e.addInsightDetailState(_n)});class Vn extends ze.Component{constructor(){super(...arguments),this.state={loading:!0},this.isUnmounted=!1,this.dataSourceReady=!1,this.loadRequestId=0,this.loadSecurityGroup=()=>{const{app:e,resolvedSecurityGroup:t}=this.props,{accountId:a,name:n,region:s}=t,r=++this.loadRequestId;this.setState({loading:!0}),Promise.all([this.getSecurityGroupReader().getSecurityGroupDetails(e,a,"kubernetes",s,"",n),M.getManifest(a,s,n)]).then(([e,t])=>{this.isCurrentLoad(r)&&(e?this.setState({loading:!1,manifest:t,securityGroup:e}):this.autoClose())}).catch(()=>{this.isCurrentLoad(r)&&this.autoClose()})},this.autoClose=()=>{this.isUnmounted||(this.props.autoClose?this.props.autoClose():(this.props.stateService.params.allowModalToStayOpen=!0,this.props.stateService.go("^",null,{location:"replace"})))},this.closeDetails=()=>{this.props.stateService.go("^")}}componentDidMount(){const e=this.props.app.getDataSource("securityGroups");if(!e)return this.dataSourceReady=!0,void this.loadSecurityGroup();e.ready().then(()=>{this.isUnmounted||(this.dataSourceReady=!0,this.loadSecurityGroup(),this.unsubscribeFromRefresh=e.onRefresh(this.loadSecurityGroup))}).catch(this.autoClose)}componentDidUpdate(e){this.dataSourceReady&&this.getCoordinatesKey(e)!==this.getCoordinatesKey(this.props)&&this.loadSecurityGroup()}componentWillUnmount(){this.isUnmounted=!0,this.unsubscribeFromRefresh&&this.unsubscribeFromRefresh()}getSecurityGroupReader(){return this.props.securityGroupReader||this.context.services.securityGroupReader}getCoordinatesKey(e){const{accountId:t,name:a,region:n}=e.resolvedSecurityGroup;return[t,n,a].join(":")}isCurrentLoad(e){return!this.isUnmounted&&e===this.loadRequestId}render(){const{app:e}=this.props,{loading:a,manifest:n,securityGroup:s}=this.state;if(a||!n||!s)return ze.createElement("div",{className:"details-panel"},ze.createElement("div",{className:"header"},ze.createElement("div",{className:"close-button"},ze.createElement("a",{className:"btn btn-link",onClick:this.closeDetails},ze.createElement("span",{className:"glyphicon glyphicon-remove"}))),ze.createElement("h4",{className:"text-center"},"Loading...")));const r=n.manifest;return ze.createElement("div",{className:"details-panel"},ze.createElement("div",{className:"header"},ze.createElement("div",{className:"close-button"},ze.createElement("a",{className:"btn btn-link",onClick:this.closeDetails},ze.createElement("span",{className:"glyphicon glyphicon-remove"}))),ze.createElement("div",{className:"header-text horizontal middle"},ze.createElement(be,{provider:"kubernetes",height:"36px",width:"36px"}),ze.createElement("h3",{className:"horizontal middle space-between flex-1"},s.displayName,G.feature.entityTags&&ze.createElement(xe,{entity:s,application:e,placement:"bottom",hOffsetPercent:"90%",entityType:"securityGroup",pageLocation:"details",onUpdate:()=>e.securityGroups.refresh()}))),ze.createElement("div",{className:"actions"},ze.createElement(Hn,{app:e,manifest:n,securityGroup:s}))),ze.createElement("div",{className:"content"},ze.createElement(t,{heading:"Information",defaultExpanded:!0},ze.createElement("dl",{className:"dl-horizontal dl-narrow"},ze.createElement("dt",null,"Created"),ze.createElement("dd",null,F(s.createdTime)),ze.createElement("dt",null,"Account"),ze.createElement("dd",null,ze.createElement(T,{account:s.account})),ze.createElement("dt",null,"Namespace"),ze.createElement("dd",null,s.namespace),ze.createElement("dt",null,"Kind"),ze.createElement("dd",null,s.kind))),ze.createElement(Pt,{manifest:r,resource:s}),ze.createElement(t,{heading:"Labels",defaultExpanded:!0},ze.createElement(Bt,{manifest:r}))))}}Vn.contextType=De;const jn=I(Vn);function Hn({app:e,manifest:t,securityGroup:a}){const n=P(),s=G.feature&&G.feature.entityTags;if(!G.kubernetesAdHocInfraWritesEnabled)return null;return ze.createElement(ze.Fragment,null,ze.createElement(je,{className:"dropdown",id:"security-group-actions-dropdown"},ze.createElement(je.Toggle,{className:"btn btn-sm btn-primary dropdown-toggle"},c(a.kind)," Actions"),ze.createElement(je.Menu,null,ze.createElement(He,{onClick:n.show},"Delete ",Fe.get("Firewall")),ze.createElement(He,{onClick:()=>{_t.buildNewManifestCommand(e,t.manifest,a.moniker,a.account).then(t=>{Xt.show({title:"Edit Manifest",application:e,command:t})})}},"Edit ",Fe.get("Firewall")),s&&ze.createElement(z,{component:a,application:e,entityType:"securityGroup",onUpdate:()=>e.securityGroups.refresh()}))),ze.createElement(Kt,{application:e,resource:a,manifestController:void 0,isOpen:n.open,dismissModal:n.close}))}class Wn{resolveIndexedSecurityGroup(e,t,a){return e[t.account][t.region][a]}}class Zn{normalizeSecurityGroup(e){return Promise.resolve(e)}}function Xn({serverGroup:e}){const{manifest:t}=e;return ze.createElement(Pt,{manifest:t.manifest,resource:e})}function Jn({serverGroup:e}){const{manifest:a}=e;return ze.createElement(t,{heading:"Events",defaultExpanded:!0},ze.createElement(Jt,{manifest:a}))}function Qn({serverGroup:e}){return ze.createElement(t,{heading:"Health",defaultExpanded:!0},e&&ze.createElement("dl",{className:"dl-horizontal dl-narrow"},ze.createElement("dt",null,"Instances"),ze.createElement("dd",null,ze.createElement(B,{container:e.instanceCounts,className:"pull-left"}))))}const Yn=e=>e&&e.includes(":")?e:`${e}:latest`,es=({manifest:e})=>{if(!Ye(e,"spec.template.spec"))return null;const t=lt(e.spec.template.spec.containers||[],["image"]),a=lt(e.spec.template.spec.initContainers||[],["image"]),n=t.length>0&&a.length>0;return 0===t.length&&0===a.length?ze.createElement("span",null,"No images."):ze.createElement("ul",null,n&&ze.createElement("strong",null,"Containers"),t.map(e=>ze.createElement("li",{key:e.image,title:Yn(e.image),className:"break-word"},Yn(e.image)," ",ze.createElement(g,{content:`This is container <strong>${e.name}</strong>'s image.`}))),n&&ze.createElement("strong",null,"Init Containers"),a.map(e=>ze.createElement("li",{key:e.image,className:"break-word",title:Yn(e.image)},Yn(e.image)," ",ze.createElement(g,{content:`This is init container <strong>${e.name}</strong>'s image.`}))))};function ts({serverGroup:e}){const{manifest:a}=e;return ze.createElement(t,{heading:"Images",defaultExpanded:!0},ze.createElement(es,{manifest:a.manifest}))}function as({manifest:e}){const t=e=>e.hasOwnProperty("controller")&&!0===e.controller;return{manifestController:(()=>{const a=(()=>{const t=e.manifest;return null!=t&&t.hasOwnProperty("metadata")&&t.metadata.hasOwnProperty("ownerReferences")&&Array.isArray(t.metadata.ownerReferences)?t.metadata.ownerReferences:[]})().find(t);return void 0===a?null:(n=a.kind).charAt(0).toLowerCase()+n.slice(1)+" "+a.name;var n})()}}function ns({serverGroup:e}){const{manifest:a}=e,{manifestController:n}=as({manifest:a});return ze.createElement(t,{heading:"Information",defaultExpanded:!0},ze.createElement("dl",{className:"dl-horizontal dl-narrow"},ze.createElement("dt",null,"Created"),ze.createElement("dd",null,F(e.createdTime)),ze.createElement("dt",null,"Account"),ze.createElement("dd",null,ze.createElement(T,{account:e.account})),ze.createElement("dt",null,"Namespace"),ze.createElement("dd",null,e.namespace),ze.createElement("dt",null,"Kind"),ze.createElement("dd",null,e.kind),n&&ze.createElement(ze.Fragment,null,ze.createElement("dt",null,"Controller"),ze.createElement(ht,{to:"^.serverGroupManager",params:{accountId:e.account,region:e.region,serverGroupManager:n,provider:"kubernetes"}},ze.createElement("a",null,ze.createElement("dd",null,c(n)))))))}function ss({serverGroup:e}){const{manifest:a}=e;return ze.createElement(t,{heading:"Labels",defaultExpanded:!0},ze.createElement(Bt,{manifest:a.manifest}))}function rs({status:e}){return e?ze.createElement("div",null,!e.available.state&&ze.createElement(Te,{value:e.available.message},ze.createElement("div",{className:"band band-warning"},"Not Fully Available")),!e.stable.state&&ze.createElement(Te,{value:e.stable.message},ze.createElement("div",{className:"band band-active"},"Transitioning")),e.paused.state&&ze.createElement(Te,{value:e.paused.message},ze.createElement("div",{className:"band band-info"},"Rollout Paused"))):ze.createElement("div",{className:"header"},ze.createElement("div",{className:"horizontal middle center spinner-section"},ze.createElement(Ne,{size:"small"})))}function is({serverGroup:e}){const{manifest:t}=e;return ze.createElement(rs,{status:t.status})}function os({serverGroup:e}){return ze.createElement(t,{heading:"Size",defaultExpanded:!0},null==e.capacity.min&&ze.createElement("dl",{className:"dl-horizontal dl-narrow"},ze.createElement("dt",null,"Current"),ze.createElement("dd",null,e.instances.length)),null!=e.capacity.min&&e.capacity.min===e.capacity.max&&ze.createElement("dl",{className:"dl-horizontal dl-narrow"},ze.createElement("dt",null,"Min/Max"),ze.createElement("dd",null,e.capacity.min),ze.createElement("dt",null,"Current"),ze.createElement("dd",null,e.instances.length)),e.capacity.min!==e.capacity.max&&ze.createElement("dl",{className:"dl-horizontal dl-narrow"},ze.createElement("dt",null,"Min"),ze.createElement("dd",null,e.capacity.min),ze.createElement("dt",null,"Max"),ze.createElement("dd",null,e.capacity.max),ze.createElement("dt",null,"Current"),ze.createElement("dd",null,e.instances.length)))}class ls{buildNewServerGroupCommand(e){return _t.buildNewManifestCommand(e)}}class cs{normalizeServerGroup(e,t){return t.getDataSource("serverGroupManagers").ready().then(t=>((e.serverGroupManagers||[]).forEach(e=>{const a=t.find(t=>e.account==t.account&&e.location==t.region&&`${t.kind} ${e.name}`==t.name);a&&(e.name=a.name)}),e))}}function ds(e){const{open:t,show:a,close:n}=P();return ze.createElement(ze.Fragment,null,ze.createElement(He,{onClick:()=>a()},"Delete"),ze.createElement(Kt,{isOpen:t,dismissModal:n,...e}))}function us({application:e,serverGroupManager:t,serverGroup:a}){return ze.createElement(He,{onClick:function(){const n={account:(null==t?void 0:t.account)||(null==a?void 0:a.account),cloudProvider:"kubernetes",location:(null==t?void 0:t.namespace)||(null==a?void 0:a.namespace),manifestName:(null==t?void 0:t.name)||(null==a?void 0:a.name)};Ae.confirm({account:n.account,askForReason:!0,header:`Initiate rolling restart of ${n.manifestName}`,submitMethod:t=>(n.reason=t.reason,C.rollingRestartManifest(n,e)),taskMonitorConfig:{application:e,title:`Rolling restart of ${n.manifestName} in ${n.account}`,onTaskComplete:()=>e.serverGroups.refresh(!0)}})}},"Rolling Restart")}function ms({application:e,coordinates:t,currentReplicas:a,isOpen:n,dismissModal:s}){const r={replicas:a},i=n=>{s();let r=`Are you <i>really</i> sure you want to scale ${t.name} in ${t.account} to ${n.replicas} replicas?`;0===n.replicas?r+=' <br><br><span style="color:red"><b>If this service does not have replicas in another cluster, this WILL cause an outage.</b></span>':a>0&&n.replicas>=5*a&&(r+=' <br><br><span style="color:red"><b>This will create more than 5 times the current number of replicas.</b></span>'),Ae.confirm({header:`Really scale ${t.name} in ${t.account}?`,body:r,taskMonitorConfig:{application:e,title:`Scaling ${t.name} in ${t.account}`,onTaskComplete:()=>e.serverGroups.refresh(!0)},verificationLabel:"Enter the name of the service to confirm",textToVerify:e.name,submitMethod:()=>{const a={cloudProvider:"kubernetes",manifestName:t.name,location:t.namespace,account:t.account,reason:n.reason,replicas:n.replicas};return C.scaleManifest(a,e)}})};return ze.createElement(_e,{show:n,onHide:s},ze.createElement(o,{initialValues:r,onSubmit:i,render:e=>ze.createElement(ze.Fragment,null,ze.createElement(l,{dismiss:s}),ze.createElement(_e.Header,null,ze.createElement(_e.Title,null,"Scale ",c(t.name)," in ",t.namespace)),ze.createElement(_e.Body,null,ze.createElement(gt,{className:"form-horizontal"},ze.createElement(ua,{onChange:t=>((e,t)=>{e.setFieldValue("replicas",t.replicas)})(e,t),options:{replicas:e.values.replicas}}),ze.createElement(d,{reason:e.values.reason,onChange:t=>e.setFieldValue("reason",t)}))),ze.createElement(_e.Footer,null,ze.createElement(Ve,{onClick:s},"Cancel"),ze.createElement(p,{onClick:()=>i(e.values),isDisabled:e.isSubmitting,isFormSubmit:!0,submitting:e.isSubmitting,label:"Submit"})))}))}function ps({application:e,resource:t,currentReplicas:a}){const{open:n,show:s,close:r}=P();return ze.createElement(ze.Fragment,null,ze.createElement(He,{onClick:()=>s()},"Scale"),ze.createElement(ms,{isOpen:n,dismissModal:r,application:e,coordinates:{name:t.name,namespace:t.namespace,account:t.account},currentReplicas:a}))}const Cs=class{};Cs.ENABLE_MANIFEST_OPERATION="enableManifest",Cs.DISABLE_MANIFEST_OPERATION="disableManifest",Cs.enable=(e,t,a)=>Re.executeTask({job:[{account:e.account,cloudProvider:"kubernetes",location:e.location,manifestName:e.name,type:Cs.ENABLE_MANIFEST_OPERATION,reason:a}],application:t,description:`Enable Manifest: ${e.name}`}),Cs.disable=(e,t,a)=>Re.executeTask({job:[{account:e.account,cloudProvider:"kubernetes",location:e.location,manifestName:e.name,type:Cs.DISABLE_MANIFEST_OPERATION,reason:a}],application:t,description:`Disable Manifest: ${e.name}`}),Cs.canDisableServerGroup=e=>Cs.hasLoadBalancers(e)&&!Cs.isManaged(e)&&!e.disabled,Cs.canEnableServerGroup=e=>Cs.hasLoadBalancers(e)&&!Cs.isManaged(e)&&e.disabled,Cs.hasLoadBalancers=e=>{var t;return(null==(t=e.loadBalancers)?void 0:t.length)>0},Cs.isManaged=e=>e.serverGroupManagers&&e.serverGroupManagers.length>0;let hs=Cs;function fs({app:e,serverGroup:t}){const a=G.feature&&G.feature.entityTags,n=Ie.buildClusterTargets(t),{manifest:s}=t,{manifestController:r}=as({manifest:s});return ze.createElement(ze.Fragment,null,ze.createElement(je,{className:"dropdown",id:"server-group-actions-dropdown"},ze.createElement(je.Toggle,{className:"btn btn-sm btn-primary dropdown-toggle"},c(t.kind)," Actions"),ze.createElement(je.Menu,null,null===r&&ze.createElement(He,{onClick:()=>{_t.buildNewManifestCommand(e,s.manifest,t.moniker,t.account).then(t=>{Xt.show({title:"Edit Manifest",application:e,command:t})})}},"Edit"),"daemonSet"!==t.kind&&null===r&&ze.createElement(ps,{application:e,resource:t,currentReplicas:s.manifest.spec.replicas}),hs.canEnableServerGroup(t)&&ze.createElement(He,{onClick:()=>{Ae.confirm({header:`Really enable ${s.name}?`,buttonText:"Enable",askForReason:!0,submitJustWithReason:!0,submitMethod:({reason:t})=>hs.enable(s,e,t),taskMonitorConfig:{application:e,title:`Enabling ${s.name}`,onTaskComplete:()=>e.getDataSource("serverGroups").refresh()}})}},"Enable"),hs.canDisableServerGroup(t)&&ze.createElement(He,{onClick:()=>{Ae.confirm({header:`Really disable ${s.name}?`,buttonText:"Disable",askForReason:!0,submitJustWithReason:!0,submitMethod:({reason:t})=>hs.disable(s,e,t),taskMonitorConfig:{application:e,title:`Disabling ${s.name}`,onTaskComplete:()=>e.getDataSource("serverGroups").refresh()}})}},"Disable"),ze.createElement(ds,{application:e,resource:t,manifestController:r}),!s.status.paused.state&&ze.createElement(us,{application:e,serverGroup:t}),a&&ze.createElement(z,{component:t,application:e,entityType:"serverGroup",ownerOptions:n,onUpdate:()=>e.serverGroups.refresh()}))))}function gs(e,t){const{app:a,serverGroup:n}=e;return new wt(s=>{(function(e){const{app:t,serverGroup:a}=e;return t.ready().then(()=>{let e=t.serverGroups.data.find(e=>e.name===a.name&&e.account===a.accountId&&e.region===a.region);return e||t.loadBalancers.data.some(t=>t.account===a.accountId&&t.region===a.region&&t.serverGroups.some(t=>t.name===a.name&&(e=t,!0))),e})})(e).then(e=>{Promise.all([Pe.getServerGroup(a.name,n.accountId,n.region,n.name),M.getManifest(n.accountId,n.region,n.name)]).then(([a,r])=>{Object.assign(a,e,{account:n.accountId}),a.manifest=r,nt(a)?t():s.next(a)},t)},t)})}function bs({application:e,resource:t}){return ze.createElement(He,{onClick:()=>{Ae.confirm({account:t.account,askForReason:!0,header:`Pause rollout of ${c(t.name)} in ${t.namespace}`,submitMethod:a=>{const n={cloudProvider:"kubernetes",manifestName:t.name,location:t.namespace,account:t.account,reason:a.reason};return C.pauseRolloutManifest(n,e)},taskMonitorConfig:{application:e,title:`Pause rollout of ${t.name} in ${t.namespace}`,onTaskComplete:()=>e.serverGroups.refresh(!0)}})}},"Pause Rollout")}function Es({application:e,resource:t}){return ze.createElement(He,{onClick:()=>{Ae.confirm({account:t.account,askForReason:!0,header:`Resume rollout of ${c(t.name)} in ${t.namespace}`,submitMethod:a=>{const n={cloudProvider:"kubernetes",manifestName:t.name,location:t.namespace,account:t.account,reason:a.reason};return C.resumeRolloutManifest(n,e)},taskMonitorConfig:{application:e,title:`Resume rollout of ${t.name} in ${t.namespace}`,onTaskComplete:()=>e.serverGroups.refresh(!0)}})}},"Resume Rollout")}function vs({application:e,resource:t,isOpen:a,dismissModal:n}){const s=(e=>{const[,...t]=st(e.serverGroups,["moniker.sequence"],["desc"]);return t.map((e,t)=>({label:`${Ge.getSequence(e.moniker.sequence)}${t>0?"":" - previous revision"}`,revision:e.moniker.sequence}))})(t),[u,h]=Ke(!1),f=r({application:e,title:`Undo rollout of ${t.name} in ${t.namespace}`,onTaskComplete:()=>e.serverGroups.refresh(!0)},n),g=a=>{const n={cloudProvider:"kubernetes",manifestName:t.name,location:t.namespace,account:t.account,reason:a.reason,revision:a.revision};return f.submit(()=>C.undoRolloutManifest(n,e))};return ze.createElement(_e,{show:a,onHide:n},ze.createElement(i,{monitor:f}),ze.createElement(o,{initialValues:{},onSubmit:g,render:e=>ze.createElement(ze.Fragment,null,ze.createElement(l,{dismiss:n}),ze.createElement(_e.Header,null,ze.createElement(_e.Title,null,"Undo rollout of ",c(t.name)," in ",t.namespace)),ze.createElement(_e.Body,null,ze.createElement(gt,{className:"form-horizontal"},ze.createElement("div",{className:"form-group form-inline"},ze.createElement("label",{className:"col-md-3 sm-label-right"},ze.createElement("span",{className:"label-text"},"Revision ")),ze.createElement("div",{className:"col-md-7"},ze.createElement(ve,{clearable:!1,value:e.values.revision,options:s.map(e=>({label:e.label,value:e.revision})),onChange:t=>{e.setFieldValue("revision",t.target.value)}}))),ze.createElement(d,{reason:e.values.reason,onChange:t=>e.setFieldValue("reason",t)}))),ze.createElement(_e.Footer,null,ze.createElement(m,{account:t.account,onValidChange:h}),ze.createElement(Ve,{onClick:n},"Cancel"),ze.createElement(p,{onClick:()=>g(e.values),isDisabled:!e.isValid||e.isSubmitting||!u,isFormSubmit:!0,submitting:e.isSubmitting,label:`Undo rollout of ${t.name}`})))}))}function ks(e){const{open:t,show:a,close:n}=P();return ze.createElement(ze.Fragment,null,ze.createElement(He,{onClick:()=>a()},"Undo Rollout"),ze.createElement(vs,{isOpen:t,dismissModal:n,...e}))}function ys({application:e,serverGroupManager:t,manifest:a}){const n=G.kubernetesAdHocInfraWritesEnabled,s=Ie.buildManagerClusterTargets(t),{manifestController:r}=as({manifest:a});return ze.createElement(ze.Fragment,null,ze.createElement(je,{className:"dropdown",id:"server-group-manager-actions-dropdown"},n&&ze.createElement(je.Toggle,{className:"btn btn-sm btn-primary dropdown-toggle"},c(t.kind)," Actions"),ze.createElement(je.Menu,null,ze.createElement(ps,{application:e,resource:t,currentReplicas:a.manifest.spec.replicas}),t&&t.serverGroups&&t.serverGroups.length>0&&ze.createElement(ks,{application:e,resource:t}),a.status.paused.state&&ze.createElement(Es,{application:e,resource:t}),!a.status.paused.state&&!a.status.stable.state&&ze.createElement(bs,{application:e,resource:t}),!a.status.paused.state&&ze.createElement(us,{application:e,serverGroupManager:t}),ze.createElement(He,{className:"divider"}),ze.createElement(He,{onClick:()=>{_t.buildNewManifestCommand(e,a.manifest,t.moniker,t.account).then(t=>{Xt.show({title:"Edit Manifest",application:e,command:t})})}},"Edit"),ze.createElement(ds,{application:e,resource:t,manifestController:r}),ze.createElement(Oe,{feature:"entityTags",render:ze.createElement(z,{component:t,application:e,entityType:"serverGroupManager",ownerOptions:s,onUpdate:()=>e.serverGroupManagers.refresh()})}))))}function Ss({serverGroupManager:e,manifest:t}){return ze.createElement(Pt,{manifest:t.manifest,resource:e})}function As({manifest:e}){return ze.createElement(t,{heading:"Artifacts",defaultExpanded:!0},e.artifacts.map(e=>ze.createElement("ul",{key:e.reference},ze.createElement(da,{artifact:e}))))}function ws({manifest:e}){return ze.createElement(t,{heading:"Events",defaultExpanded:!0},ze.createElement(Jt,{manifest:e}))}function Ns({serverGroupManager:e}){return ze.createElement(t,{heading:"Information",defaultExpanded:!0},ze.createElement("dl",{className:"dl-horizontal dl-narrow"},ze.createElement("dt",null,"Created"),ze.createElement("dd",null,F(e.createdTime)),ze.createElement("dt",null,"Account"),ze.createElement("dd",null,ze.createElement(T,{account:e.account})),ze.createElement("dt",null,"Namespace"),ze.createElement("dd",null,e.namespace),ze.createElement("dt",null,"Kind"),ze.createElement("dd",null,e.kind),e.serverGroups.length>0&&ze.createElement(ze.Fragment,null,ze.createElement("dt",null,"Managing"),ze.createElement("dd",null,st(e.serverGroups,["name"],["asc"]).map(e=>ze.createElement("ul",{key:e.name},ze.createElement(ht,{to:"^.serverGroup",params:{region:e.region,accountId:e.account,serverGroup:e.name,provider:"kubernetes"}},ze.createElement("a",null,c(e.name)))))))))}function Ms({manifest:e}){return ze.createElement(t,{heading:"Labels",defaultExpanded:!0},ze.createElement(Bt,{manifest:e.manifest}))}function xs({manifest:e}){return ze.createElement(t,{heading:"Status",defaultExpanded:!0},e.manifest.status.conditions.map(e=>ze.createElement("ul",{key:e.lastTransitionTime},ze.createElement(Vt,{condition:e}))))}function Ds({manifest:e}){return ze.createElement(rs,{status:e.status})}const Fs=I(function(e){const[t,a,n]=function(e,t){var a,n,s;const[r,i]=Ke({loading:!0}),{serverGroupManager:o,app:l}=e,{accountId:c,region:d,name:u}=o,m=(null==(a=r.serverGroupManager)?void 0:a.name)===u&&(null==(n=r.serverGroupManager)?void 0:n.region)===d&&(null==(s=r.serverGroupManager)?void 0:s.account)===c;return qe(()=>{if(m)return;let e=!1;const a=l.getDataSource("serverGroupManagers");return i(e=>!e.loading||e.serverGroupManager||e.manifest?{loading:!0}:e),a.ready().then(()=>{if(e)return;const n=a.data.find(e=>e.name===u&&e.region===d&&e.account===c);n?M.getManifest(c,d,u).then(t=>{e||i({manifest:t,serverGroupManager:n,loading:!1})}).catch(a=>{e||(console.error("Error fetching manifest:",a),t())}):t()}),()=>{e=!0}},[c,l,t,m,u,d]),[r.serverGroupManager,r.manifest,r.loading]}(e,()=>{return(t=e.stateService).params.allowModalToStayOpen=!0,void t.go("^",null,{location:"replace"});var t});return!n&&t&&a?ze.createElement(Be,{loading:n},ze.createElement(Be.Header,{icon:ze.createElement(be,{provider:e.serverGroupManager.provider,height:"36px",width:"36px"}),name:t.displayName,notifications:ze.createElement(Oe,{feature:"entityTags",render:ze.createElement(xe,{entity:t,application:e.app,placement:"bottom",hOffsetPercent:"90%",entityType:"serverGroupManager",pageLocation:"details",onUpdate:()=>e.app.serverGroupManagers.refresh()})}),actions:ze.createElement(ys,{application:e.app,serverGroupManager:t,manifest:a})}),ze.createElement(Be.Content,{loading:n},ze.createElement(Ds,{serverGroupManager:t,manifest:a}),ze.createElement(Ns,{serverGroupManager:t,manifest:a}),ze.createElement(xs,{serverGroupManager:t,manifest:a}),ze.createElement(Ss,{serverGroupManager:t,manifest:a}),ze.createElement(ws,{serverGroupManager:t,manifest:a}),ze.createElement(Ms,{serverGroupManager:t,manifest:a}),ze.createElement(As,{serverGroupManager:t,manifest:a}))):ze.createElement(Be,{loading:!0})}),Ts=class e{static validateSpecialCharacters(e,t){/^([a-zA-Z][a-zA-Z0-9-]*)?$/.test(e)||t.push("The application name must begin with a letter and must contain only letters, digits, or dashes. No special characters are allowed.")}static validateLength(t,a){t.length>e.MAX_RESOURCE_NAME_LENGTH&&a.push(`The maximum length for an application in Kubernetes is ${e.MAX_RESOURCE_NAME_LENGTH} characters.`)}validate(t=""){const a=[];return t&&t.length&&(e.validateSpecialCharacters(t,a),e.validateLength(t,a)),{warnings:[],errors:a}}};Ts.MAX_RESOURCE_NAME_LENGTH=63;let Rs=Ts;Le.registerValidator("kubernetes",new Rs);Ot('.cloud-provider-logo .icon-kubernetes {\n -webkit-mask-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22 standalone%3D%22no%22%3F%3E%3Csvg xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22 xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22 xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22 xmlns%3Asvg%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3Asodipodi%3D%22http%3A%2F%2Fsodipodi.sourceforge.net%2FDTD%2Fsodipodi-0.dtd%22 xmlns%3Ainkscape%3D%22http%3A%2F%2Fwww.inkscape.org%2Fnamespaces%2Finkscape%22 width%3D%228.14444in%22 height%3D%228.14444in%22 viewBox%3D%220 0 733 733%22 id%3D%22svg2%22 version%3D%221.1%22 inkscape%3Aversion%3D%220.48.4 r9939%22 sodipodi%3Adocname%3D%22kubernetes.svg%22%3E %3Cmetadata id%3D%22metadata9%22%3E %3Crdf%3ARDF%3E %3Ccc%3AWork rdf%3Aabout%3D%22%22%3E %3Cdc%3Aformat%3Eimage%2Fsvg%2Bxml%3C%2Fdc%3Aformat%3E %3Cdc%3Atype rdf%3Aresource%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Fdcmitype%2FStillImage%22 %2F%3E %3Cdc%3Atitle%3E%3C%2Fdc%3Atitle%3E %3C%2Fcc%3AWork%3E %3C%2Frdf%3ARDF%3E %3C%2Fmetadata%3E %3Cdefs id%3D%22defs7%22 %2F%3E %3Csodipodi%3Anamedview pagecolor%3D%22%23ffffff%22 bordercolor%3D%22%23666666%22 borderopacity%3D%221%22 objecttolerance%3D%2210%22 gridtolerance%3D%2210%22 guidetolerance%3D%2210%22 inkscape%3Apageopacity%3D%220%22 inkscape%3Apageshadow%3D%222%22 inkscape%3Awindow-width%3D%221916%22 inkscape%3Awindow-height%3D%221142%22 id%3D%22namedview5%22 showgrid%3D%22false%22 inkscape%3Azoom%3D%220.32196472%22 inkscape%3Acx%3D%22366.49979%22 inkscape%3Acy%3D%22366.49979%22 inkscape%3Awindow-x%3D%220%22 inkscape%3Awindow-y%3D%2256%22 inkscape%3Awindow-maximized%3D%220%22 inkscape%3Acurrent-layer%3D%22svg2%22 %2F%3E %3Cpath id%3D%22Selection%22 fill%3D%22none%22 stroke%3D%22black%22 stroke-width%3D%221%22 d%3D%22M 411.00%2C29.74 C 411.00%2C29.74 499.00%2C71.74 499.00%2C71.74 499.00%2C71.74 555.00%2C98.26 555.00%2C98.26 555.00%2C98.26 592.00%2C116.14 592.00%2C116.14 592.00%2C116.14 625.00%2C131.75 625.00%2C131.75 634.53%2C136.52 640.47%2C138.65 647.82%2C147.00 657.13%2C157.58 659.33%2C171.69 662.21%2C185.00 662.21%2C185.00 673.42%2C234.00 673.42%2C234.00 673.42%2C234.00 705.42%2C373.00 705.42%2C373.00 705.42%2C373.00 719.68%2C439.00 719.68%2C439.00 721.02%2C456.85 708.90%2C470.12 698.60%2C483.00 698.60%2C483.00 641.40%2C554.00 641.40%2C554.00 641.40%2C554.00 557.00%2C659.00 557.00%2C659.00 541.16%2C678.73 531.22%2C696.96 503.00%2C697.00 503.00%2C697.00 232.00%2C697.00 232.00%2C697.00 204.00%2C696.96 192.42%2C676.52 176.80%2C657.00 176.80%2C657.00 84.39%2C542.00 84.39%2C542.00 84.39%2C542.00 41.75%2C489.00 41.75%2C489.00 33.00%2C478.41 21.48%2C466.29 17.75%2C453.00 13.91%2C439.33 16.97%2C429.26 20.12%2C416.00 20.12%2C416.00 29.35%2C376.00 29.35%2C376.00 29.35%2C376.00 66.12%2C216.00 66.12%2C216.00 66.12%2C216.00 75.12%2C177.00 75.12%2C177.00 78.06%2C164.59 78.76%2C157.38 87.46%2C147.01 95.04%2C138.00 103.06%2C135.55 113.00%2C130.74 113.00%2C130.74 159.00%2C108.74 159.00%2C108.74 159.00%2C108.74 292.00%2C45.22 292.00%2C45.22 292.00%2C45.22 335.00%2C24.69 335.00%2C24.69 348.10%2C18.68 348.93%2C16.70 364.00%2C14.42 379.89%2C12.53 397.06%2C23.00 411.00%2C29.74 Z M 557.00%2C380.00 C 557.00%2C380.00 557.00%2C360.00 557.00%2C360.00 556.98%2C344.89 552.44%2C322.39 547.65%2C308.00 544.05%2C297.20 539.23%2C285.88 533.57%2C276.00 532.16%2C273.53 526.21%2C264.94 526.62%2C262.61 526.62%2C262.61 530.18%2C256.83 530.18%2C256.83 531.15%2C254.78 531.21%2C253.28 532.72%2C251.04 538.54%2C242.42 559.13%2C233.05 567.91%2C226.64 574.90%2C221.54 579.79%2C212.09 574.28%2C204.04 568.42%2C195.49 557.02%2C197.87 550.00%2C203.39 538.15%2C212.70 529.02%2C231.46 513.00%2C234.06 510.10%2C234.53 506.59%2C236.28 504.00%2C235.13 502.10%2C234.29 498.71%2C230.71 497.00%2C229.17 497.00%2C229.17 482.00%2C216.65 482.00%2C216.65 468.70%2C206.50 454.37%2C198.79 439.00%2C192.28 427.89%2C187.58 414.82%2C184.10 403.00%2C181.66 399.01%2C180.84 387.91%2C180.19 385.31%2C178.15 383.20%2C176.49 382.80%2C173.40 381.62%2C171.00 380.31%2C168.36 379.10%2C167.10 378.39%2C164.00 376.45%2C155.45 381.77%2C133.42 381.99%2C124.00 382.11%2C118.31 381.90%2C113.53 377.78%2C109.11 370.81%2C101.64 359.24%2C103.73 354.92%2C113.00 351.98%2C119.91 353.59%2C127.86 354.92%2C135.00 356.18%2C143.75 357.05%2C150.08 357.00%2C159.00 356.93%2C172.46 352.16%2C166.31 352.00%2C179.00 322.16%2C180.37 288.94%2C192.63 264.00%2C208.69 256.14%2C213.75 247.93%2C219.91 241.00%2C226.17 238.50%2C228.43 232.87%2C234.79 230.00%2C235.49 228.05%2C235.96 225.13%2C234.59 223.00%2C234.22 220.80%2C233.84 219.25%2C234.06 217.00%2C233.15 211.66%2C230.99 198.37%2C217.65 194.17%2C213.00 188.30%2C206.51 183.61%2C199.54 174.00%2C199.04 159.75%2C198.31 155.84%2C211.34 161.01%2C220.00 165.34%2C227.27 173.09%2C230.35 180.00%2C234.45 186.12%2C238.08 199.61%2C246.30 203.15%2C252.01 203.15%2C252.01 205.47%2C257.70 205.47%2C257.70 206.35%2C259.49 208.10%2C261.07 208.33%2C262.46 208.75%2C265.03 202.92%2C273.39 201.43%2C276.00 196.26%2C285.03 191.30%2C297.10 188.00%2C307.00 181.22%2C327.31 177.97%2C348.62 178.00%2C370.00 178.00%2C370.00 180.00%2C395.00 180.00%2C395.00 169.67%2C396.74 174.11%2C401.22 161.00%2C404.35 149.33%2C407.12 126.34%2C406.63 118.02%2C411.53 108.10%2C417.37 108.11%2C431.51 119.00%2C436.15 130.21%2C440.92 149.36%2C429.76 161.00%2C426.43 164.16%2C425.52 169.83%2C423.96 173.00%2C424.14 179.08%2C424.49 175.02%2C426.24 188.00%2C426.00 189.16%2C433.52 194.32%2C445.03 197.76%2C452.00 208.97%2C474.74 222.76%2C491.52 241.00%2C508.96 245.93%2C513.68 254.31%2C520.05 260.00%2C523.98 262.17%2C525.47 268.82%2C529.32 269.79%2C531.38 270.77%2C533.42 269.51%2C535.68 269.79%2C538.96 269.73%2C541.38 270.44%2C542.43 269.79%2C545.16 268.86%2C550.82 259.44%2C565.91 255.86%2C571.00 250.64%2C578.39 245.61%2C584.45 246.05%2C594.00 246.65%2C607.20 261.18%2C611.20 270.37%2C601.67 275.18%2C596.69 276.41%2C590.39 278.29%2C584.00 278.29%2C584.00 286.31%2C562.00 286.31%2C562.00 292.40%2C548.86 294.88%2C556.11 300.00%2C545.00 328.12%2C554.73 356.26%2C559.67 386.00%2C556.83 397.21%2C555.76 408.11%2C553.38 419.00%2C550.63 421.96%2C549.88 431.78%2C546.48 433.90%2C546.92 436.03%2C547.36 438.27%2C550.16 440.21%2C551.58 442.59%2C553.31 443.53%2C553.58 445.61%2C556.05 452.20%2C563.86 456.12%2C582.09 459.70%2C592.00 462.49%2C599.73 468.72%2C607.85 478.00%2C606.63 484.69%2C605.75 488.98%2C600.52 489.66%2C594.00 490.43%2C586.66 485.91%2C579.74 481.98%2C574.00 477.29%2C567.17 470.65%2C557.44 467.31%2C550.00 462.43%2C539.12 468.92%2C542.96 464.00%2C531.00 473.63%2C527.44 487.29%2C516.07 495.00%2C509.07 521.56%2C484.98 537.34%2C458.61 549.00%2C425.00 558.47%2C427.60 556.97%2C422.09 568.00%2C424.43 568.00%2C424.43 607.00%2C436.96 607.00%2C436.96 614.22%2C437.30 621.24%2C435.52 624.11%2C428.00 627.22%2C419.86 621.25%2C412.42 614.00%2C409.36 609.08%2C407.29 600.39%2C407.20 595.00%2C406.96 590.64%2C406.77 576.10%2C404.68 572.00%2C403.51 562.95%2C400.92 565.61%2C396.62 556.00%2C395.00 556.00%2C395.00 557.00%2C380.00 557.00%2C380.00 Z M 350.00%2C217.00 C 350.00%2C217.00 348.00%2C250.00 348.00%2C250.00 348.00%2C250.00 347.00%2C264.00 347.00%2C264.00 347.00%2C264.00 346.00%2C287.00 346.00%2C287.00 345.87%2C297.63 341.31%2C310.19 328.00%2C306.36 322.74%2C304.85 310.11%2C295.07 305.00%2C291.42 305.00%2C291.42 276.00%2C270.86 276.00%2C270.86 270.80%2C267.14 265.12%2C263.95 261.00%2C259.00 283.51%2C236.99 318.35%2C219.57 350.00%2C217.00 Z M 458.00%2C245.65 C 463.37%2C249.75 469.98%2C254.64 474.00%2C260.00 474.00%2C260.00 424.00%2C295.71 424.00%2C295.71 418.45%2C299.67 409.10%2C307.56 402.00%2C306.63 390.37%2C305.12 390.66%2C295.62 389.83%2C287.00 389.83%2C287.00 389.00%2C277.00 389.00%2C277.00 389.00%2C277.00 388.00%2C259.00 388.00%2C259.00 388.00%2C259.00 387.00%2C243.00 387.00%2C243.00 387.00%2C243.00 386.00%2C217.00 386.00%2C217.00 413.03%2C221.86 435.69%2C228.62 458.00%2C245.65 Z M 258.00%2C304.93 C 258.00%2C304.93 289.00%2C332.72 289.00%2C332.72 295.42%2C338.37 303.69%2C345.37 299.35%2C355.00 295.79%2C362.89 284.60%2C364.71 277.00%2C366.86 277.00%2C366.86 217.00%2C384.00 217.00%2C384.00 215.40%2C377.43 215.92%2C366.09 216.00%2C359.00 216.29%2C334.69 226.02%2C308.80 238.00%2C288.00 244.56%2C292.17 252.07%2C299.54 258.00%2C304.93 Z M 508.60%2C311.00 C 515.69%2C328.71 520.21%2C350.91 520.00%2C370.00 520.00%2C370.00 519.00%2C384.00 519.00%2C384.00 519.00%2C384.00 454.00%2C365.29 454.00%2C365.29 444.54%2C362.57 433.95%2C360.52 435.11%2C348.00 435.86%2C339.96 446.16%2C332.48 452.00%2C327.42 452.00%2C327.42 496.00%2C288.00 496.00%2C288.00 501.50%2C293.39 505.72%2C303.80 508.60%2C311.00 Z M 373.00%2C343.00 C 375.23%2C343.02 377.71%2C342.87 379.71%2C344.02 382.83%2C345.81 392.75%2C358.50 393.53%2C362.00 394.23%2C365.13 392.43%2C371.75 391.63%2C375.00 390.21%2C380.76 390.53%2C383.98 384.98%2C387.20 381.81%2C389.05 371.25%2C394.58 368.00%2C394.58 364.26%2C394.58 348.22%2C386.97 346.30%2C383.79 344.90%2C381.46 343.82%2C374.96 343.12%2C372.00 342.45%2C369.17 340.95%2C364.77 341.65%2C362.00 342.74%2C357.66 352.32%2C346.69 356.04%2C344.02 361.19%2C342.27 367.56%2C342.96 373.00%2C343.00 Z M 274.00%2C410.75 C 274.00%2C410.75 301.42%2C406.28 301.42%2C406.28 314.90%2C405.57 318.21%2C415.88 314.80%2C427.00 314.80%2C427.00 287.00%2C495.00 287.00%2C495.00 279.03%2C493.05 268.83%2C483.76 263.00%2C478.00 248.36%2C463.53 229.79%2C439.38 225.00%2C419.00 225.00%2C419.00 274.00%2C410.75 274.00%2C410.75 Z M 440.42%2C475.00 C 440.42%2C475.00 425.20%2C438.00 425.20%2C438.00 422.29%2C430.75 416.48%2C420.73 420.45%2C413.02 425.26%2C403.68 435.62%2C405.91 444.00%2C407.42 444.00%2C407.42 511.00%2C419.00 511.00%2C419.00 502.92%2C442.30 491.41%2C459.62 474.00%2C477.00 467.89%2C483.10 456.99%2C492.94 449.00%2C496.00 449.00%2C496.00 440.42%2C475.00 440.42%2C475.00 Z M 329.23%2C492.00 C 329.23%2C492.00 351.86%2C451.00 351.86%2C451.00 355.72%2C444.13 360.59%2C435.49 370.00%2C437.41 378.47%2C439.13 382.61%2C449.24 386.42%2C456.00 386.42%2C456.00 417.00%2C512.00 417.00%2C512.00 382.18%2C523.39 353.77%2C522.16 319.00%2C512.00 320.74%2C506.03 326.10%2C497.76 329.23%2C492.00 Z%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22M 211.64776%2C688.72752 C 199.18399%2C681.12883 204.11492%2C686.90132 106.38132%2C565.49488 63.249477%2C511.91572 25.861839%2C464.02125 23.297683%2C459.06272 c -2.564155%2C-4.95855 -4.662101%2C-13.19299 -4.662101%2C-18.2988 0%2C-13.66622 60.851497%2C-274.62895 66.655226%2C-285.85213 5.745934%2C-11.11141 10.493927%2C-13.62254 165.090372%2C-87.313529 100.50103%2C-47.905502 105.94827%2C-50.104506 120.7775%2C-48.756997 21.60054%2C1.962804 259.4388%2C115.387256 273.4144%2C130.390606 8.74397%2C9.387 11.42228%2C18.89968 37.82349%2C134.33957 37.09879%2C162.21523 36.24332%2C157.97694 33.82846%2C167.59859 -1.82843%2C7.28502 -151.28754%2C197.23748 -176.95311%2C224.89548 -17.91576%2C19.30659 -15.51217%2C19.04286 -173.44885%2C19.0301 -139.36163%2C-0.0124 -144.06727%2C-0.20562 -154.17531%2C-6.36809 l 0%2C0 z m 59.63042%2C-85.19822 c 2.53653%2C-2.53652 7.58811%2C-13.55546 11.22574%2C-24.48653 3.63762%2C-10.93108 9.25693%2C-22.26664 12.48735%2C-25.19013 5.47954%2C-4.95889 7.33455%2C-4.98309 27.65689%2C-0.36087 26.55799%2C6.04047 63.37339%2C6.21062 90.40095%2C0.41774 26.82521%2C-5.74948 28.96243%2C-4.22176 42.20742%2C30.17064 6.44828%2C16.74379 9.68553%2C21.37849 16.04797%2C22.97534 20.00337%2C5.02052 24.99029%2C-14.63592 9.92491%2C-39.12025 -5.4188%2C-8.80668 -10.89191%2C-20.62123 -12.16242%2C-26.25452 -2.13235%2C-9.45464 -1.48249%2C-10.688 8.45015%2C-16.03707 18.10297%2C-9.74911 48.14816%2C-45.08972 61.53407%2C-72.37945 8.3579%2C-17.03916 14.35139%2C-25.50497 18.85918%2C-26.63857 3.63428%2C-0.91392 14.81563%2C1.24554 24.84744%2C4.79882 28.12743%2C9.96267 44.64011%2C7.40531 44.64011%2C-6.91346 0%2C-10.67446 -10.44158%2C-17.22869 -31.18615%2C-19.57566 -10.81693%2C-1.2238 -23.59951%2C-4.2586 -28.40572%2C-6.74397 -8.34834%2C-4.31711 -8.74102%2C-5.52097 -8.79252%2C-26.95714 -0.0705%2C-29.36558 -6.754%2C-59.98059 -18.79864%2C-86.11178 -6.56128%2C-14.23485 -9.02292%2C-23.30388 -7.56894%2C-27.88497 1.18513%2C-3.73401 10.71049%2C-12.31892 21.16745%2C-19.07758 21.48536%2C-13.88666 23.7753%2C-16.56209 23.84208%2C-27.85574 0.0593%2C-10.02002 -10.4658%2C-15.69188 -21.52608%2C-11.60021 -4.17832%2C1.54575 -14.92658%2C9.74252 -23.88504%2C18.21505 -8.95844%2C8.47253 -18.62586%2C15.4046 -21.48313%2C15.4046 -2.85727%2C0 -13.77288%2C-6.48513 -24.25689%2C-14.4114 -24.55542%2C-18.56473 -50.43239%2C-30.78657 -78.31991%2C-36.99096 -27.47994%2C-6.11371 -30.17834%2C-10.24779 -25.99058%2C-39.81876 3.25597%2C-22.99146 0.43604%2C-34.52706 -9.18697%2C-37.58128 -7.49461%2C-2.37869 -17.4184%2C2.3558 -20.21529%2C9.64438 -1.10842%2C2.88848 -1.10174%2C13.32674 0.0155%2C23.19615 3.03455%2C26.82207 -0.19816%2C39.63 -10.5137%2C41.65535 -42.81015%2C8.40521 -65.79704%2C18.24725 -94.59966%2C40.50336 -9.8248%2C7.59174 -20.4974%2C13.80316 -23.71689%2C13.80316 -3.21949%2C0 -14.04955%2C-7.72918 -24.06679%2C-17.17596 -15.83344%2C-14.93174 -19.63355%2C-17.06231 -29.08393%2C-16.30613 -10.45342%2C0.83643 -10.87075%2C1.3435 -10.87075%2C13.20817 0%2C11.57756 1.09949%2C13.06593 17.83144%2C24.13804 9.8073%2C6.48983 20.13467%2C15.31485 22.94973%2C19.61116 4.87705%2C7.44333 4.72878%2C8.52708 -3.14615%2C22.99594 -12.08927%2C22.21197 -20.55241%2C58.88284 -20.55241%2C89.05382 0%2C25.04796 -0.25661%2C25.9543 -8.54131%2C30.16681 -4.69772%2C2.38865 -16.92732%2C5.33251 -27.17689%2C6.54193 -23.88502%2C2.81842 -33.30936%2C8.62455 -32.02332%2C19.72897 0.62557%2C5.40152 3.86937%2C9.70972 9.23947%2C12.27128 7.11466%2C3.39372 11.4251%2C2.92476 30.73008%2C-3.34326 30.68433%2C-9.96273 34.14229%2C-8.80994 44.43347%2C14.81281 10.18607%2C23.38144 36.58457%2C56.29859 57.92933%2C72.23394 18.99536%2C14.18136 19.62788%2C20.41105 4.60241%2C45.32906 -11.16257%2C18.51181 -13.69099%2C32.26854 -7.13565%2C38.82388 5.13265%2C5.13265 16.62346%2C4.67434 22.18256%2C-0.88475 z%22 id%3D%22path2986%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22m 295.55767%2C281.76003 -31.75731%2C-21.99996 11.54199%2C-9.17242 c 14.41086%2C-11.45232 45.45892%2C-26.18898 60.93903%2C-28.92412 l 11.71165%2C-2.0693 -2.06514%2C35.09453 c -2.33966%2C39.75975 -4.79135%2C49.07123 -12.92032%2C49.07123 -3.13093%2C0 -19.98338%2C-9.89998 -37.4499%2C-21.99996 z%22 id%3D%22path2988%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22m 394.75802%2C296.77165 c -1.45603%2C-3.84359 -3.68331%2C-22.90514 -4.94951%2C-42.359 l -2.30218%2C-35.37066 8.90879%2C2.07076 c 19.89331%2C4.62399 43.91797%2C15.20006 58.19539%2C25.61862 17.69226%2C12.91046 18.79741%2C10.773 -19.7698%2C38.23649 -28.61516%2C20.37669 -36.01014%2C22.55441 -40.08269%2C11.80379 z%22 id%3D%22path2990%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22m 476.76032%2C369.50784 c -51.75745%2C-15.82263 -51.74616%2C-14.91999 -0.75267%2C-60.21158 l 20.98885%2C-18.64195 6.36541%2C14.39007 c 10.72838%2C24.25328 19.70972%2C76.84004 12.99902%2C76.1107 -1.2812%2C-0.13924 -19.10147%2C-5.3805 -39.60061%2C-11.64724 z%22 id%3D%22path2992%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22m 435.48897%2C456.7043 c -14.46935%2C-36.25055 -15.71568%2C-43.42123 -8.05778%2C-46.35984 7.32986%2C-2.81274 78.84102%2C8.75347 78.80632%2C12.74612 -0.11228%2C12.91882 -43.26201%2C67.05973 -53.40025%2C67.00247 -2.21801%2C-0.0124 -10.019%2C-15.0264 -17.34829%2C-33.38875 l 0%2C0 z%22 id%3D%22path2994%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22m 338.54641%2C514.3208 c -7.68717%2C-1.69573 -14.4868%2C-3.5703 -15.11027%2C-4.16572 -0.62347%2C-0.59542 4.09998%2C-10.58909 10.49655%2C-22.20816 27.03082%2C-49.1002 32.08856%2C-54.10343 42.54932%2C-42.09061 4.06983%2C4.67366 36.60673%2C62.08283 36.60673%2C64.5901 0%2C0.4929 -7.05713%2C2.40966 -15.68253%2C4.25948 -18.62111%2C3.99351 -39.63369%2C3.85604 -58.8598%2C-0.38509 z%22 id%3D%22path2996%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22m 262.97346%2C473.7049 c -16.77296%2C-17.17992 -33.13461%2C-41.67919 -33.13461%2C-49.61442 0%2C-3.17228 10.01376%2C-5.8894 36.9054%2C-10.01386 20.29798%2C-3.11317 39.1665%2C-4.79264 41.93006%2C-3.73216 2.76356%2C1.06047 4.92594%2C5.11676 4.80529%2C9.01396 -0.30476%2C9.84389 -25.6065%2C68.49526 -30.21033%2C70.02988 -2.06811%2C0.68936 -11.20122%2C-6.36817 -20.29581%2C-15.6834 l 0%2C0 z%22 id%3D%22path2998%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22m 217.41513%2C369.61776 c 0%2C-28.25915 15.19645%2C-76.45934 23.50125%2C-74.54137 6.0423%2C1.39545 57.25975%2C49.00646 57.20538%2C53.17729 -0.10849%2C8.32162 -6.5906%2C11.97505 -36.32712%2C20.47461 -17.20033%2C4.91635 -34.22222%2C9.87476 -37.82642%2C11.01869 -5.90819%2C1.87519 -6.55309%2C0.87836 -6.55309%2C-10.12922 z%22 id%3D%22path3000%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22m 355.12214%2C387.05557 c -12.30722%2C-5.95336 -13.73186%2C-24.30319 -2.74022%2C-35.29483 10.083%2C-10.083 21.74685%2C-9.76596 31.59351%2C0.85877 18.12886%2C19.56137 -4.29002%2C46.31803 -28.85329%2C34.43606 z%22 id%3D%22path3002%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E%3C%2Fsvg%3E");\n mask-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22 standalone%3D%22no%22%3F%3E%3Csvg xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22 xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22 xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22 xmlns%3Asvg%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3Asodipodi%3D%22http%3A%2F%2Fsodipodi.sourceforge.net%2FDTD%2Fsodipodi-0.dtd%22 xmlns%3Ainkscape%3D%22http%3A%2F%2Fwww.inkscape.org%2Fnamespaces%2Finkscape%22 width%3D%228.14444in%22 height%3D%228.14444in%22 viewBox%3D%220 0 733 733%22 id%3D%22svg2%22 version%3D%221.1%22 inkscape%3Aversion%3D%220.48.4 r9939%22 sodipodi%3Adocname%3D%22kubernetes.svg%22%3E %3Cmetadata id%3D%22metadata9%22%3E %3Crdf%3ARDF%3E %3Ccc%3AWork rdf%3Aabout%3D%22%22%3E %3Cdc%3Aformat%3Eimage%2Fsvg%2Bxml%3C%2Fdc%3Aformat%3E %3Cdc%3Atype rdf%3Aresource%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Fdcmitype%2FStillImage%22 %2F%3E %3Cdc%3Atitle%3E%3C%2Fdc%3Atitle%3E %3C%2Fcc%3AWork%3E %3C%2Frdf%3ARDF%3E %3C%2Fmetadata%3E %3Cdefs id%3D%22defs7%22 %2F%3E %3Csodipodi%3Anamedview pagecolor%3D%22%23ffffff%22 bordercolor%3D%22%23666666%22 borderopacity%3D%221%22 objecttolerance%3D%2210%22 gridtolerance%3D%2210%22 guidetolerance%3D%2210%22 inkscape%3Apageopacity%3D%220%22 inkscape%3Apageshadow%3D%222%22 inkscape%3Awindow-width%3D%221916%22 inkscape%3Awindow-height%3D%221142%22 id%3D%22namedview5%22 showgrid%3D%22false%22 inkscape%3Azoom%3D%220.32196472%22 inkscape%3Acx%3D%22366.49979%22 inkscape%3Acy%3D%22366.49979%22 inkscape%3Awindow-x%3D%220%22 inkscape%3Awindow-y%3D%2256%22 inkscape%3Awindow-maximized%3D%220%22 inkscape%3Acurrent-layer%3D%22svg2%22 %2F%3E %3Cpath id%3D%22Selection%22 fill%3D%22none%22 stroke%3D%22black%22 stroke-width%3D%221%22 d%3D%22M 411.00%2C29.74 C 411.00%2C29.74 499.00%2C71.74 499.00%2C71.74 499.00%2C71.74 555.00%2C98.26 555.00%2C98.26 555.00%2C98.26 592.00%2C116.14 592.00%2C116.14 592.00%2C116.14 625.00%2C131.75 625.00%2C131.75 634.53%2C136.52 640.47%2C138.65 647.82%2C147.00 657.13%2C157.58 659.33%2C171.69 662.21%2C185.00 662.21%2C185.00 673.42%2C234.00 673.42%2C234.00 673.42%2C234.00 705.42%2C373.00 705.42%2C373.00 705.42%2C373.00 719.68%2C439.00 719.68%2C439.00 721.02%2C456.85 708.90%2C470.12 698.60%2C483.00 698.60%2C483.00 641.40%2C554.00 641.40%2C554.00 641.40%2C554.00 557.00%2C659.00 557.00%2C659.00 541.16%2C678.73 531.22%2C696.96 503.00%2C697.00 503.00%2C697.00 232.00%2C697.00 232.00%2C697.00 204.00%2C696.96 192.42%2C676.52 176.80%2C657.00 176.80%2C657.00 84.39%2C542.00 84.39%2C542.00 84.39%2C542.00 41.75%2C489.00 41.75%2C489.00 33.00%2C478.41 21.48%2C466.29 17.75%2C453.00 13.91%2C439.33 16.97%2C429.26 20.12%2C416.00 20.12%2C416.00 29.35%2C376.00 29.35%2C376.00 29.35%2C376.00 66.12%2C216.00 66.12%2C216.00 66.12%2C216.00 75.12%2C177.00 75.12%2C177.00 78.06%2C164.59 78.76%2C157.38 87.46%2C147.01 95.04%2C138.00 103.06%2C135.55 113.00%2C130.74 113.00%2C130.74 159.00%2C108.74 159.00%2C108.74 159.00%2C108.74 292.00%2C45.22 292.00%2C45.22 292.00%2C45.22 335.00%2C24.69 335.00%2C24.69 348.10%2C18.68 348.93%2C16.70 364.00%2C14.42 379.89%2C12.53 397.06%2C23.00 411.00%2C29.74 Z M 557.00%2C380.00 C 557.00%2C380.00 557.00%2C360.00 557.00%2C360.00 556.98%2C344.89 552.44%2C322.39 547.65%2C308.00 544.05%2C297.20 539.23%2C285.88 533.57%2C276.00 532.16%2C273.53 526.21%2C264.94 526.62%2C262.61 526.62%2C262.61 530.18%2C256.83 530.18%2C256.83 531.15%2C254.78 531.21%2C253.28 532.72%2C251.04 538.54%2C242.42 559.13%2C233.05 567.91%2C226.64 574.90%2C221.54 579.79%2C212.09 574.28%2C204.04 568.42%2C195.49 557.02%2C197.87 550.00%2C203.39 538.15%2C212.70 529.02%2C231.46 513.00%2C234.06 510.10%2C234.53 506.59%2C236.28 504.00%2C235.13 502.10%2C234.29 498.71%2C230.71 497.00%2C229.17 497.00%2C229.17 482.00%2C216.65 482.00%2C216.65 468.70%2C206.50 454.37%2C198.79 439.00%2C192.28 427.89%2C187.58 414.82%2C184.10 403.00%2C181.66 399.01%2C180.84 387.91%2C180.19 385.31%2C178.15 383.20%2C176.49 382.80%2C173.40 381.62%2C171.00 380.31%2C168.36 379.10%2C167.10 378.39%2C164.00 376.45%2C155.45 381.77%2C133.42 381.99%2C124.00 382.11%2C118.31 381.90%2C113.53 377.78%2C109.11 370.81%2C101.64 359.24%2C103.73 354.92%2C113.00 351.98%2C119.91 353.59%2C127.86 354.92%2C135.00 356.18%2C143.75 357.05%2C150.08 357.00%2C159.00 356.93%2C172.46 352.16%2C166.31 352.00%2C179.00 322.16%2C180.37 288.94%2C192.63 264.00%2C208.69 256.14%2C213.75 247.93%2C219.91 241.00%2C226.17 238.50%2C228.43 232.87%2C234.79 230.00%2C235.49 228.05%2C235.96 225.13%2C234.59 223.00%2C234.22 220.80%2C233.84 219.25%2C234.06 217.00%2C233.15 211.66%2C230.99 198.37%2C217.65 194.17%2C213.00 188.30%2C206.51 183.61%2C199.54 174.00%2C199.04 159.75%2C198.31 155.84%2C211.34 161.01%2C220.00 165.34%2C227.27 173.09%2C230.35 180.00%2C234.45 186.12%2C238.08 199.61%2C246.30 203.15%2C252.01 203.15%2C252.01 205.47%2C257.70 205.47%2C257.70 206.35%2C259.49 208.10%2C261.07 208.33%2C262.46 208.75%2C265.03 202.92%2C273.39 201.43%2C276.00 196.26%2C285.03 191.30%2C297.10 188.00%2C307.00 181.22%2C327.31 177.97%2C348.62 178.00%2C370.00 178.00%2C370.00 180.00%2C395.00 180.00%2C395.00 169.67%2C396.74 174.11%2C401.22 161.00%2C404.35 149.33%2C407.12 126.34%2C406.63 118.02%2C411.53 108.10%2C417.37 108.11%2C431.51 119.00%2C436.15 130.21%2C440.92 149.36%2C429.76 161.00%2C426.43 164.16%2C425.52 169.83%2C423.96 173.00%2C424.14 179.08%2C424.49 175.02%2C426.24 188.00%2C426.00 189.16%2C433.52 194.32%2C445.03 197.76%2C452.00 208.97%2C474.74 222.76%2C491.52 241.00%2C508.96 245.93%2C513.68 254.31%2C520.05 260.00%2C523.98 262.17%2C525.47 268.82%2C529.32 269.79%2C531.38 270.77%2C533.42 269.51%2C535.68 269.79%2C538.96 269.73%2C541.38 270.44%2C542.43 269.79%2C545.16 268.86%2C550.82 259.44%2C565.91 255.86%2C571.00 250.64%2C578.39 245.61%2C584.45 246.05%2C594.00 246.65%2C607.20 261.18%2C611.20 270.37%2C601.67 275.18%2C596.69 276.41%2C590.39 278.29%2C584.00 278.29%2C584.00 286.31%2C562.00 286.31%2C562.00 292.40%2C548.86 294.88%2C556.11 300.00%2C545.00 328.12%2C554.73 356.26%2C559.67 386.00%2C556.83 397.21%2C555.76 408.11%2C553.38 419.00%2C550.63 421.96%2C549.88 431.78%2C546.48 433.90%2C546.92 436.03%2C547.36 438.27%2C550.16 440.21%2C551.58 442.59%2C553.31 443.53%2C553.58 445.61%2C556.05 452.20%2C563.86 456.12%2C582.09 459.70%2C592.00 462.49%2C599.73 468.72%2C607.85 478.00%2C606.63 484.69%2C605.75 488.98%2C600.52 489.66%2C594.00 490.43%2C586.66 485.91%2C579.74 481.98%2C574.00 477.29%2C567.17 470.65%2C557.44 467.31%2C550.00 462.43%2C539.12 468.92%2C542.96 464.00%2C531.00 473.63%2C527.44 487.29%2C516.07 495.00%2C509.07 521.56%2C484.98 537.34%2C458.61 549.00%2C425.00 558.47%2C427.60 556.97%2C422.09 568.00%2C424.43 568.00%2C424.43 607.00%2C436.96 607.00%2C436.96 614.22%2C437.30 621.24%2C435.52 624.11%2C428.00 627.22%2C419.86 621.25%2C412.42 614.00%2C409.36 609.08%2C407.29 600.39%2C407.20 595.00%2C406.96 590.64%2C406.77 576.10%2C404.68 572.00%2C403.51 562.95%2C400.92 565.61%2C396.62 556.00%2C395.00 556.00%2C395.00 557.00%2C380.00 557.00%2C380.00 Z M 350.00%2C217.00 C 350.00%2C217.00 348.00%2C250.00 348.00%2C250.00 348.00%2C250.00 347.00%2C264.00 347.00%2C264.00 347.00%2C264.00 346.00%2C287.00 346.00%2C287.00 345.87%2C297.63 341.31%2C310.19 328.00%2C306.36 322.74%2C304.85 310.11%2C295.07 305.00%2C291.42 305.00%2C291.42 276.00%2C270.86 276.00%2C270.86 270.80%2C267.14 265.12%2C263.95 261.00%2C259.00 283.51%2C236.99 318.35%2C219.57 350.00%2C217.00 Z M 458.00%2C245.65 C 463.37%2C249.75 469.98%2C254.64 474.00%2C260.00 474.00%2C260.00 424.00%2C295.71 424.00%2C295.71 418.45%2C299.67 409.10%2C307.56 402.00%2C306.63 390.37%2C305.12 390.66%2C295.62 389.83%2C287.00 389.83%2C287.00 389.00%2C277.00 389.00%2C277.00 389.00%2C277.00 388.00%2C259.00 388.00%2C259.00 388.00%2C259.00 387.00%2C243.00 387.00%2C243.00 387.00%2C243.00 386.00%2C217.00 386.00%2C217.00 413.03%2C221.86 435.69%2C228.62 458.00%2C245.65 Z M 258.00%2C304.93 C 258.00%2C304.93 289.00%2C332.72 289.00%2C332.72 295.42%2C338.37 303.69%2C345.37 299.35%2C355.00 295.79%2C362.89 284.60%2C364.71 277.00%2C366.86 277.00%2C366.86 217.00%2C384.00 217.00%2C384.00 215.40%2C377.43 215.92%2C366.09 216.00%2C359.00 216.29%2C334.69 226.02%2C308.80 238.00%2C288.00 244.56%2C292.17 252.07%2C299.54 258.00%2C304.93 Z M 508.60%2C311.00 C 515.69%2C328.71 520.21%2C350.91 520.00%2C370.00 520.00%2C370.00 519.00%2C384.00 519.00%2C384.00 519.00%2C384.00 454.00%2C365.29 454.00%2C365.29 444.54%2C362.57 433.95%2C360.52 435.11%2C348.00 435.86%2C339.96 446.16%2C332.48 452.00%2C327.42 452.00%2C327.42 496.00%2C288.00 496.00%2C288.00 501.50%2C293.39 505.72%2C303.80 508.60%2C311.00 Z M 373.00%2C343.00 C 375.23%2C343.02 377.71%2C342.87 379.71%2C344.02 382.83%2C345.81 392.75%2C358.50 393.53%2C362.00 394.23%2C365.13 392.43%2C371.75 391.63%2C375.00 390.21%2C380.76 390.53%2C383.98 384.98%2C387.20 381.81%2C389.05 371.25%2C394.58 368.00%2C394.58 364.26%2C394.58 348.22%2C386.97 346.30%2C383.79 344.90%2C381.46 343.82%2C374.96 343.12%2C372.00 342.45%2C369.17 340.95%2C364.77 341.65%2C362.00 342.74%2C357.66 352.32%2C346.69 356.04%2C344.02 361.19%2C342.27 367.56%2C342.96 373.00%2C343.00 Z M 274.00%2C410.75 C 274.00%2C410.75 301.42%2C406.28 301.42%2C406.28 314.90%2C405.57 318.21%2C415.88 314.80%2C427.00 314.80%2C427.00 287.00%2C495.00 287.00%2C495.00 279.03%2C493.05 268.83%2C483.76 263.00%2C478.00 248.36%2C463.53 229.79%2C439.38 225.00%2C419.00 225.00%2C419.00 274.00%2C410.75 274.00%2C410.75 Z M 440.42%2C475.00 C 440.42%2C475.00 425.20%2C438.00 425.20%2C438.00 422.29%2C430.75 416.48%2C420.73 420.45%2C413.02 425.26%2C403.68 435.62%2C405.91 444.00%2C407.42 444.00%2C407.42 511.00%2C419.00 511.00%2C419.00 502.92%2C442.30 491.41%2C459.62 474.00%2C477.00 467.89%2C483.10 456.99%2C492.94 449.00%2C496.00 449.00%2C496.00 440.42%2C475.00 440.42%2C475.00 Z M 329.23%2C492.00 C 329.23%2C492.00 351.86%2C451.00 351.86%2C451.00 355.72%2C444.13 360.59%2C435.49 370.00%2C437.41 378.47%2C439.13 382.61%2C449.24 386.42%2C456.00 386.42%2C456.00 417.00%2C512.00 417.00%2C512.00 382.18%2C523.39 353.77%2C522.16 319.00%2C512.00 320.74%2C506.03 326.10%2C497.76 329.23%2C492.00 Z%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22M 211.64776%2C688.72752 C 199.18399%2C681.12883 204.11492%2C686.90132 106.38132%2C565.49488 63.249477%2C511.91572 25.861839%2C464.02125 23.297683%2C459.06272 c -2.564155%2C-4.95855 -4.662101%2C-13.19299 -4.662101%2C-18.2988 0%2C-13.66622 60.851497%2C-274.62895 66.655226%2C-285.85213 5.745934%2C-11.11141 10.493927%2C-13.62254 165.090372%2C-87.313529 100.50103%2C-47.905502 105.94827%2C-50.104506 120.7775%2C-48.756997 21.60054%2C1.962804 259.4388%2C115.387256 273.4144%2C130.390606 8.74397%2C9.387 11.42228%2C18.89968 37.82349%2C134.33957 37.09879%2C162.21523 36.24332%2C157.97694 33.82846%2C167.59859 -1.82843%2C7.28502 -151.28754%2C197.23748 -176.95311%2C224.89548 -17.91576%2C19.30659 -15.51217%2C19.04286 -173.44885%2C19.0301 -139.36163%2C-0.0124 -144.06727%2C-0.20562 -154.17531%2C-6.36809 l 0%2C0 z m 59.63042%2C-85.19822 c 2.53653%2C-2.53652 7.58811%2C-13.55546 11.22574%2C-24.48653 3.63762%2C-10.93108 9.25693%2C-22.26664 12.48735%2C-25.19013 5.47954%2C-4.95889 7.33455%2C-4.98309 27.65689%2C-0.36087 26.55799%2C6.04047 63.37339%2C6.21062 90.40095%2C0.41774 26.82521%2C-5.74948 28.96243%2C-4.22176 42.20742%2C30.17064 6.44828%2C16.74379 9.68553%2C21.37849 16.04797%2C22.97534 20.00337%2C5.02052 24.99029%2C-14.63592 9.92491%2C-39.12025 -5.4188%2C-8.80668 -10.89191%2C-20.62123 -12.16242%2C-26.25452 -2.13235%2C-9.45464 -1.48249%2C-10.688 8.45015%2C-16.03707 18.10297%2C-9.74911 48.14816%2C-45.08972 61.53407%2C-72.37945 8.3579%2C-17.03916 14.35139%2C-25.50497 18.85918%2C-26.63857 3.63428%2C-0.91392 14.81563%2C1.24554 24.84744%2C4.79882 28.12743%2C9.96267 44.64011%2C7.40531 44.64011%2C-6.91346 0%2C-10.67446 -10.44158%2C-17.22869 -31.18615%2C-19.57566 -10.81693%2C-1.2238 -23.59951%2C-4.2586 -28.40572%2C-6.74397 -8.34834%2C-4.31711 -8.74102%2C-5.52097 -8.79252%2C-26.95714 -0.0705%2C-29.36558 -6.754%2C-59.98059 -18.79864%2C-86.11178 -6.56128%2C-14.23485 -9.02292%2C-23.30388 -7.56894%2C-27.88497 1.18513%2C-3.73401 10.71049%2C-12.31892 21.16745%2C-19.07758 21.48536%2C-13.88666 23.7753%2C-16.56209 23.84208%2C-27.85574 0.0593%2C-10.02002 -10.4658%2C-15.69188 -21.52608%2C-11.60021 -4.17832%2C1.54575 -14.92658%2C9.74252 -23.88504%2C18.21505 -8.95844%2C8.47253 -18.62586%2C15.4046 -21.48313%2C15.4046 -2.85727%2C0 -13.77288%2C-6.48513 -24.25689%2C-14.4114 -24.55542%2C-18.56473 -50.43239%2C-30.78657 -78.31991%2C-36.99096 -27.47994%2C-6.11371 -30.17834%2C-10.24779 -25.99058%2C-39.81876 3.25597%2C-22.99146 0.43604%2C-34.52706 -9.18697%2C-37.58128 -7.49461%2C-2.37869 -17.4184%2C2.3558 -20.21529%2C9.64438 -1.10842%2C2.88848 -1.10174%2C13.32674 0.0155%2C23.19615 3.03455%2C26.82207 -0.19816%2C39.63 -10.5137%2C41.65535 -42.81015%2C8.40521 -65.79704%2C18.24725 -94.59966%2C40.50336 -9.8248%2C7.59174 -20.4974%2C13.80316 -23.71689%2C13.80316 -3.21949%2C0 -14.04955%2C-7.72918 -24.06679%2C-17.17596 -15.83344%2C-14.93174 -19.63355%2C-17.06231 -29.08393%2C-16.30613 -10.45342%2C0.83643 -10.87075%2C1.3435 -10.87075%2C13.20817 0%2C11.57756 1.09949%2C13.06593 17.83144%2C24.13804 9.8073%2C6.48983 20.13467%2C15.31485 22.94973%2C19.61116 4.87705%2C7.44333 4.72878%2C8.52708 -3.14615%2C22.99594 -12.08927%2C22.21197 -20.55241%2C58.88284 -20.55241%2C89.05382 0%2C25.04796 -0.25661%2C25.9543 -8.54131%2C30.16681 -4.69772%2C2.38865 -16.92732%2C5.33251 -27.17689%2C6.54193 -23.88502%2C2.81842 -33.30936%2C8.62455 -32.02332%2C19.72897 0.62557%2C5.40152 3.86937%2C9.70972 9.23947%2C12.27128 7.11466%2C3.39372 11.4251%2C2.92476 30.73008%2C-3.34326 30.68433%2C-9.96273 34.14229%2C-8.80994 44.43347%2C14.81281 10.18607%2C23.38144 36.58457%2C56.29859 57.92933%2C72.23394 18.99536%2C14.18136 19.62788%2C20.41105 4.60241%2C45.32906 -11.16257%2C18.51181 -13.69099%2C32.26854 -7.13565%2C38.82388 5.13265%2C5.13265 16.62346%2C4.67434 22.18256%2C-0.88475 z%22 id%3D%22path2986%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22m 295.55767%2C281.76003 -31.75731%2C-21.99996 11.54199%2C-9.17242 c 14.41086%2C-11.45232 45.45892%2C-26.18898 60.93903%2C-28.92412 l 11.71165%2C-2.0693 -2.06514%2C35.09453 c -2.33966%2C39.75975 -4.79135%2C49.07123 -12.92032%2C49.07123 -3.13093%2C0 -19.98338%2C-9.89998 -37.4499%2C-21.99996 z%22 id%3D%22path2988%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22m 394.75802%2C296.77165 c -1.45603%2C-3.84359 -3.68331%2C-22.90514 -4.94951%2C-42.359 l -2.30218%2C-35.37066 8.90879%2C2.07076 c 19.89331%2C4.62399 43.91797%2C15.20006 58.19539%2C25.61862 17.69226%2C12.91046 18.79741%2C10.773 -19.7698%2C38.23649 -28.61516%2C20.37669 -36.01014%2C22.55441 -40.08269%2C11.80379 z%22 id%3D%22path2990%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22m 476.76032%2C369.50784 c -51.75745%2C-15.82263 -51.74616%2C-14.91999 -0.75267%2C-60.21158 l 20.98885%2C-18.64195 6.36541%2C14.39007 c 10.72838%2C24.25328 19.70972%2C76.84004 12.99902%2C76.1107 -1.2812%2C-0.13924 -19.10147%2C-5.3805 -39.60061%2C-11.64724 z%22 id%3D%22path2992%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22m 435.48897%2C456.7043 c -14.46935%2C-36.25055 -15.71568%2C-43.42123 -8.05778%2C-46.35984 7.32986%2C-2.81274 78.84102%2C8.75347 78.80632%2C12.74612 -0.11228%2C12.91882 -43.26201%2C67.05973 -53.40025%2C67.00247 -2.21801%2C-0.0124 -10.019%2C-15.0264 -17.34829%2C-33.38875 l 0%2C0 z%22 id%3D%22path2994%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22m 338.54641%2C514.3208 c -7.68717%2C-1.69573 -14.4868%2C-3.5703 -15.11027%2C-4.16572 -0.62347%2C-0.59542 4.09998%2C-10.58909 10.49655%2C-22.20816 27.03082%2C-49.1002 32.08856%2C-54.10343 42.54932%2C-42.09061 4.06983%2C4.67366 36.60673%2C62.08283 36.60673%2C64.5901 0%2C0.4929 -7.05713%2C2.40966 -15.68253%2C4.25948 -18.62111%2C3.99351 -39.63369%2C3.85604 -58.8598%2C-0.38509 z%22 id%3D%22path2996%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22m 262.97346%2C473.7049 c -16.77296%2C-17.17992 -33.13461%2C-41.67919 -33.13461%2C-49.61442 0%2C-3.17228 10.01376%2C-5.8894 36.9054%2C-10.01386 20.29798%2C-3.11317 39.1665%2C-4.79264 41.93006%2C-3.73216 2.76356%2C1.06047 4.92594%2C5.11676 4.80529%2C9.01396 -0.30476%2C9.84389 -25.6065%2C68.49526 -30.21033%2C70.02988 -2.06811%2C0.68936 -11.20122%2C-6.36817 -20.29581%2C-15.6834 l 0%2C0 z%22 id%3D%22path2998%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22m 217.41513%2C369.61776 c 0%2C-28.25915 15.19645%2C-76.45934 23.50125%2C-74.54137 6.0423%2C1.39545 57.25975%2C49.00646 57.20538%2C53.17729 -0.10849%2C8.32162 -6.5906%2C11.97505 -36.32712%2C20.47461 -17.20033%2C4.91635 -34.22222%2C9.87476 -37.82642%2C11.01869 -5.90819%2C1.87519 -6.55309%2C0.87836 -6.55309%2C-10.12922 z%22 id%3D%22path3000%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E %3Cpath style%3D%22fill%3A%23a0a0a0%3Bstroke%3Anone%22 d%3D%22m 355.12214%2C387.05557 c -12.30722%2C-5.95336 -13.73186%2C-24.30319 -2.74022%2C-35.29483 10.083%2C-10.083 21.74685%2C-9.76596 31.59351%2C0.85877 18.12886%2C19.56137 -4.29002%2C46.31803 -28.85329%2C34.43606 z%22 id%3D%22path3002%22 inkscape%3Aconnector-curvature%3D%220%22 %2F%3E%3C%2Fsvg%3E");\n background-color: #326ce5;\n}\n'),$e.registerProvider("kubernetes",{name:"Kubernetes",adHocInfrastructureWritesEnabled:G.kubernetesAdHocInfraWritesEnabled,logo:{path:"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20role%3D%22img%22%20viewBox%3D%220.03%20-8.96%20362.18%20282.43%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%23fff%7D.cls-2%7Bfill%3A%23326ce5%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Cg%20id%3D%22its-pronounced%22%3E%3Cg%20id%3D%22kyoob-cuttle%22%3E%3Cpath%20id%3D%22kkkkkkk%22%20d%3D%22M16.841%20243.586c.952-1.07%201.904-2.141%202.974-3.212q1.493-1.66%202.975-3.33c.951-1.191%201.903-2.262%202.737-3.214s1.665-1.903%202.26-2.617h11.54c-2.26%202.617-4.522%205.235-6.781%207.614q-3.213%203.57-7.138%207.495a48.052%2048.052%200%200%201%204.045%204.284c1.427%201.665%202.736%203.33%204.045%204.995a50.807%2050.807%200%200%201%203.568%205.236c1.07%201.784%202.024%203.33%202.737%204.759H28.62c-.715-1.19-1.547-2.38-2.38-3.69a43.32%2043.32%200%200%200-2.856-4.162%2034.21%2034.21%200%200%200-3.211-4.045%2020.442%2020.442%200%200%200-3.213-3.213v14.99H7.205v-49.134l9.755-1.547v28.791%22%2F%3E%3Cpath%20id%3D%22uuuuuuu%22%20d%3D%22M73.709%20264.406a46.294%2046.294%200%200%201-6.424%201.309%2045.986%2045.986%200%200%201-8.21.594%2019.17%2019.17%200%200%201-7.375-1.189%2010.928%2010.928%200%200%201-6.9-8.328%2027.977%2027.977%200%200%201-.715-6.425v-19.154h9.757v17.965c0%203.093.357%205.354%201.19%206.782s2.378%202.141%204.639%202.141a15.169%2015.169%200%200%200%202.26-.119c.833-.119%201.429-.119%202.142-.238v-26.53h9.755l-.119%2033.192%22%2F%3E%3Cpath%20id%3D%22bbbbbbb%22%20d%3D%22M105%20248.107c0-6.305-2.262-9.398-6.902-9.398a12.706%2012.706%200%200%200-2.974.356%208.99%208.99%200%200%200-2.379.952v17.727c.475.119%201.07.119%201.784.238.714%200%201.546.12%202.38.12a7.366%207.366%200%200%200%206.068-2.738%2012.2%2012.2%200%200%200%202.022-7.257m9.874.238a21.543%2021.543%200%200%201-1.19%207.496%2015.313%2015.313%200%200%201-3.45%205.71%2018.297%2018.297%200%200%201-5.591%203.688%2021.774%2021.774%200%200%201-7.615%201.19c-1.189%200-2.379-.12-3.688-.238s-2.497-.238-3.806-.358c-1.19-.118-2.38-.356-3.57-.595a15.037%2015.037%200%200%201-2.974-.832V216.34l9.756-1.546v17.132a16.617%2016.617%200%200%201%203.45-1.07%2019.691%2019.691%200%200%201%203.807-.357%2015.074%2015.074%200%200%201%206.424%201.308%2012.884%2012.884%200%200%201%204.76%203.57%2014.348%2014.348%200%200%201%202.855%205.71%2033.785%2033.785%200%200%201%20.832%207.257%22%2F%3E%3Cpath%20id%3D%22eeeeeee0%22%20d%3D%22M120.704%20248.702a20.303%2020.303%200%200%201%201.427-7.97%2018.206%2018.206%200%200%201%203.689-5.712%2013.866%2013.866%200%200%201%205.233-3.45%2015.9%2015.9%200%200%201%206.187-1.19%2015.227%2015.227%200%200%201%2011.54%204.521c2.855%202.974%204.282%207.378%204.282%2013.087a10.887%2010.887%200%200%201-.118%201.904c0%20.595-.119%201.189-.119%201.784h-22.13a6.522%206.522%200%200%200%202.856%204.759%2011.32%2011.32%200%200%200%206.662%201.784%2025.212%2025.212%200%200%200%205.235-.475%2021.342%2021.342%200%200%200%204.283-1.19l1.308%207.97c-.476.239-1.19.477-2.14.833a11.994%2011.994%200%200%201-2.976.596%2026.855%2026.855%200%200%201-3.45.475c-1.19.12-2.497.238-3.688.238a20.92%2020.92%200%200%201-8.09-1.427%2017.517%2017.517%200%200%201-5.71-3.688%2017.172%2017.172%200%200%201-3.33-5.71%2027.944%2027.944%200%200%201-.954-7.139m22.962-3.807a7.692%207.692%200%200%200-.476-2.38%207.232%207.232%200%200%200-1.07-2.141%205.684%205.684%200%200%200-4.76-2.142%207.188%207.188%200%200%200-2.855.595%204.732%204.732%200%200%200-1.903%201.428%206.24%206.24%200%200%200-1.19%202.142%2017.396%2017.396%200%200%200-.595%202.38h12.85%22%2F%3E%3Cpath%20id%3D%22rrrrrrr%22%20d%3D%22M181.26%20239.78a17.875%2017.875%200%200%200-3.094-.596%2019.688%2019.688%200%200%200-3.807-.357%2020.977%2020.977%200%200%200-2.26.238%2018.687%2018.687%200%200%200-1.904.357v26.293h-9.756v-32.717a50.606%2050.606%200%200%201%206.186-1.666%2033.468%2033.468%200%200%201%207.971-.832%2011.58%2011.58%200%200%201%201.904.118%2016.256%2016.256%200%200%201%202.26.238c.715.12%201.428.238%202.261.357.713.12%201.428.358%201.903.476l-1.665%208.09%22%2F%3E%3Cpath%20id%3D%22nnnnnnn%22%20d%3D%22M188.16%20232.403a57.524%2057.524%200%200%201%2014.633-1.903%2018.147%2018.147%200%200%201%207.257%201.189%2010.191%2010.191%200%200%201%204.64%203.212%2013.897%2013.897%200%200%201%202.38%204.997%2026.54%2026.54%200%200%201%20.713%206.424v19.393h-9.756v-18.201c0-3.094-.356-5.354-1.19-6.663s-2.379-1.904-4.64-1.904a15.17%2015.17%200%200%200-2.26.12%2011.787%2011.787%200%200%200-2.14.237v26.531h-9.638v-33.43%22%2F%3E%3Cpath%20id%3D%22eeeeeee1%22%20d%3D%22M225.04%20248.702a20.301%2020.301%200%200%201%201.427-7.97%2018.206%2018.206%200%200%201%203.69-5.712%2013.866%2013.866%200%200%201%205.234-3.45%2015.9%2015.9%200%200%201%206.187-1.19%2015.227%2015.227%200%200%201%2011.54%204.521c2.854%202.974%204.282%207.378%204.282%2013.087a10.884%2010.884%200%200%201-.119%201.904c0%20.595-.12%201.189-.12%201.784h-22.127a6.522%206.522%200%200%200%202.856%204.759%2011.32%2011.32%200%200%200%206.66%201.784%2025.213%2025.213%200%200%200%205.237-.475%2021.34%2021.34%200%200%200%204.282-1.19l1.309%207.97c-.476.239-1.19.477-2.142.833a11.992%2011.992%200%200%201-2.974.596%2026.86%2026.86%200%200%201-3.45.475c-1.19.12-2.499.238-3.688.238a20.92%2020.92%200%200%201-8.09-1.427%2017.516%2017.516%200%200%201-5.71-3.688%2017.172%2017.172%200%200%201-3.332-5.71%2027.938%2027.938%200%200%201-.952-7.139m22.961-3.807a7.693%207.693%200%200%200-.475-2.38%207.233%207.233%200%200%200-1.071-2.141%205.684%205.684%200%200%200-4.76-2.142%207.188%207.188%200%200%200-2.855.595%204.732%204.732%200%200%200-1.903%201.428%206.24%206.24%200%200%200-1.19%202.142%2017.388%2017.388%200%200%200-.594%202.38h12.848%22%2F%3E%3Cpath%20id%3D%22ttttttt%22%20d%3D%22M264.657%20222.647l9.756-1.546v10.112h11.66v8.09h-11.66v12.135a9.566%209.566%200%200%200%201.07%204.878c.715%201.19%202.261%201.785%204.403%201.785a29.167%2029.167%200%200%200%203.212-.238%2019.344%2019.344%200%200%200%203.093-.833l1.427%207.614a18.948%2018.948%200%200%201-3.926%201.19%2022.872%2022.872%200%200%201-5.354.475%2018.18%2018.18%200%200%201-6.66-1.07%2011.01%2011.01%200%200%201-4.165-2.975%2011.804%2011.804%200%200%201-2.261-4.758%2030.834%2030.834%200%200%201-.594-6.068v-28.791%22%2F%3E%3Cpath%20id%3D%22eeeeeee2%22%20d%3D%22M291.069%20248.702a20.3%2020.3%200%200%201%201.428-7.97%2018.206%2018.206%200%200%201%203.688-5.712%2013.866%2013.866%200%200%201%205.234-3.45%2015.9%2015.9%200%200%201%206.187-1.19%2015.227%2015.227%200%200%201%2011.54%204.521c2.856%202.974%204.283%207.378%204.283%2013.087a10.885%2010.885%200%200%201-.12%201.904c0%20.595-.119%201.189-.119%201.784h-22.128a6.522%206.522%200%200%200%202.856%204.759%2011.32%2011.32%200%200%200%206.661%201.784%2025.213%2025.213%200%200%200%205.236-.475%2021.34%2021.34%200%200%200%204.282-1.19l1.31%207.97c-.476.239-1.19.477-2.143.833a11.992%2011.992%200%200%201-2.974.596%2026.856%2026.856%200%200%201-3.45.475c-1.19.12-2.497.238-3.688.238a20.92%2020.92%200%200%201-8.09-1.427%2017.516%2017.516%200%200%201-5.71-3.688%2017.172%2017.172%200%200%201-3.33-5.71%2023.525%2023.525%200%200%201-.953-7.139m22.843-3.807a7.692%207.692%200%200%200-.477-2.38%207.232%207.232%200%200%200-1.07-2.141%205.684%205.684%200%200%200-4.759-2.142%207.188%207.188%200%200%200-2.856.595%204.732%204.732%200%200%200-1.904%201.428%206.24%206.24%200%200%200-1.188%202.142%2017.391%2017.391%200%200%200-.596%202.38h12.85%22%2F%3E%3Cpath%20id%3D%22sssssss%22%20d%3D%22M340.68%20258.576a9.776%209.776%200%200%200%203.807-.475%202.084%202.084%200%200%200%201.07-2.023c0-.833-.475-1.427-1.427-2.022a22.567%2022.567%200%200%200-4.403-2.023c-1.546-.595-2.974-1.19-4.162-1.785a11.894%2011.894%200%200%201-3.095-2.141%209.304%209.304%200%200%201-2.022-3.094%2011.526%2011.526%200%200%201-.714-4.282%209.052%209.052%200%200%201%203.569-7.614c2.38-1.904%205.711-2.856%209.875-2.856a33.842%2033.842%200%200%201%206.068.595%2021.997%2021.997%200%200%201%204.52%201.191l-1.665%207.614c-1.19-.358-2.38-.715-3.69-1.071a16.645%2016.645%200%200%200-4.4-.477c-3.094%200-4.522.833-4.522%202.498a3.474%203.474%200%200%200%20.238%201.072%201.998%201.998%200%200%200%20.833.952c.357.238.952.594%201.547.951.714.357%201.546.595%202.617%201.071a39.243%2039.243%200%200%201%205.354%202.379%208.882%208.882%200%200%201%203.213%202.499%206.214%206.214%200%200%201%201.665%202.974%2012.346%2012.346%200%200%201%20.476%203.807%208.868%208.868%200%200%201-3.808%207.734c-2.498%201.784-6.067%202.616-10.826%202.616a27.502%2027.502%200%200%201-7.613-.832%2021.717%2021.717%200%200%201-4.164-1.31l1.665-7.97a36.36%2036.36%200%200%200%205.116%201.546%2021.894%2021.894%200%200%200%204.877.476%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cpath%20d%3D%22M76.523%20126.992h10.619v8.432h-10.62z%22%20class%3D%22cls-1%22%2F%3E%3Cpath%20d%3D%22M200.688%20120.047a3.59%203.59%200%200%200-.855-.065%203.685%203.685%200%200%200-1.425.37%203.725%203.725%200%200%200-1.803%204.825l-.026.037%208.528%2020.603a43.53%2043.53%200%200%200%2017.595-22.102l-21.976-3.714zm-34.194%202.92a3.72%203.72%200%200%200-3.568-2.894%203.656%203.656%200%200%200-.733.065l-.037-.045-21.785%203.698a43.695%2043.695%200%200%200%2017.54%2021.946l8.442-20.399-.066-.08a3.683%203.683%200%200%200%20.207-2.291zm18.245%208a3.718%203.718%200%200%200-6.557.008h-.018l-10.713%2019.372a43.637%2043.637%200%200%200%2023.815%201.225q2.197-.5%204.292-1.199l-10.738-19.407zm33.914-45L202.17%20100.72l.009.047a3.725%203.725%200%200%200%201.46%206.395l.02.089%2021.35%206.15a44.278%2044.278%200%200%200-6.356-27.432zM188.03%2087.62a3.725%203.725%200%200%200%205.913%202.84l.065.028%2018.036-12.789a43.85%2043.85%200%200%200-25.287-12.19l1.253%2022.105zm-19.1%202.922a3.72%203.72%200%200%200%205.904-2.85l.092-.044%201.253-22.139a44.68%2044.68%200%200%200-4.501.775%2043.467%2043.467%200%200%200-20.937%2011.409l18.154%2012.869zm-9.678%2016.728a3.72%203.72%200%200%200%201.462-6.396l.018-.087-16.574-14.825a43.454%2043.454%200%200%200-6.168%2027.511l21.245-6.13zm16.098%206.512l6.114%202.94%206.096-2.933%201.514-6.582-4.219-5.276h-6.79l-4.231%205.268z%22%20class%3D%22cls-2%22%2F%3E%3Cpath%20d%3D%22M282.538%20126.748l-17.422-75.675A13.602%2013.602%200%200%200%20257.823%2042L187.302%208.33a13.589%2013.589%200%200%200-11.705%200L105.09%2042.018a13.598%2013.598%200%200%200-7.295%209.072l-17.394%2075.673a13.315%2013.315%200%200%200-.004%205.81%2013.505%2013.505%200%200%200%20.491%201.718%2013.101%2013.101%200%200%200%201.343%202.726c.239.365.491.72.765%201.064l48.804%2060.678c.213.264.448.505.681.75a13.423%2013.423%200%200%200%202.574%202.133%2013.924%2013.924%200%200%200%203.857%201.677%2013.298%2013.298%200%200%200%203.43.473h.759l77.504-.018a12.996%2012.996%200%200%200%201.41-.083%2013.47%2013.47%200%200%200%201.989-.378%2013.87%2013.87%200%200%200%201.381-.442c.353-.135.705-.27%201.045-.433a13.941%2013.941%200%200%200%201.479-.822%2013.304%2013.304%200%200%200%203.237-2.865l1.488-1.85%2047.299-58.84a13.185%2013.185%200%200%200%202.108-3.785%2013.67%2013.67%200%200%200%20.5-1.724%2013.282%2013.282%200%200%200-.004-5.809zm-73.147%2029.432a14.515%2014.515%200%200%200%20.703%201.703%203.314%203.314%200%200%200-.327%202.49%2039.373%2039.373%200%200%200%203.742%206.7%2035.065%2035.065%200%200%201%202.263%203.364c.17.315.392.803.553%201.136a4.24%204.24%200%201%201-7.63%203.607c-.161-.33-.385-.77-.522-1.082a35.275%2035.275%200%200%201-1.225-3.868%2039.305%2039.305%200%200%200-2.896-7.097%203.335%203.335%200%200%200-2.154-1.307c-.135-.233-.635-1.149-.903-1.623a54.617%2054.617%200%200%201-38.948-.1l-.955%201.731a3.429%203.429%200%200%200-1.819.886%2029.518%2029.518%200%200%200-3.268%207.582%2034.898%2034.898%200%200%201-1.218%203.868c-.135.31-.361.744-.522%201.073v.009l-.007.008a4.238%204.238%200%201%201-7.619-3.616c.159-.335.372-.82.54-1.135a35.178%2035.178%200%200%201%202.262-3.373%2041.227%2041.227%200%200%200%203.82-6.866%204.188%204.188%200%200%200-.376-2.387l.768-1.84a54.922%2054.922%200%200%201-24.338-30.387l-1.839.313a4.68%204.68%200%200%200-2.428-.855%2039.525%2039.525%200%200%200-7.356%202.165%2035.585%2035.585%200%200%201-3.787%201.45c-.305.084-.745.168-1.093.244-.028.01-.052.022-.08.029a.603.603%200%200%201-.065.006%204.236%204.236%200%201%201-1.874-8.224l.061-.015.037-.01c.353-.083.805-.2%201.127-.262a35.268%2035.268%200%200%201%204.05-.326%2039.39%2039.39%200%200%200%207.564-1.242%205.835%205.835%200%200%200%201.814-1.83l1.767-.516a54.613%2054.613%200%200%201%208.613-38.073l-1.353-1.206a4.688%204.688%200%200%200-.848-2.436%2039.366%2039.366%200%200%200-6.277-4.41%2035.251%2035.251%200%200%201-3.499-2.046c-.256-.191-.596-.478-.874-.704l-.063-.044a4.473%204.473%200%200%201-1.038-6.222%204.066%204.066%200%200%201%203.363-1.488%205.03%205.03%200%200%201%202.942%201.11c.287.225.68.526.935.745a35.253%2035.253%200%200%201%202.78%202.95%2039.384%2039.384%200%200%200%205.69%205.142%203.333%203.333%200%200%200%202.507.243q.754.55%201.522%201.082a54.289%2054.289%200%200%201%2027.577-15.754%2055.052%2055.052%200%200%201%207.63-1.173l.1-1.784a4.601%204.601%200%200%200%201.37-2.184%2039.476%2039.476%200%200%200-.47-7.654%2035.468%2035.468%200%200%201-.576-4.014c-.011-.307.006-.731.01-1.081%200-.04-.01-.079-.01-.118a4.242%204.242%200%201%201%208.441-.004c0%20.37.022.861.009%201.2a35.111%2035.111%200%200%201-.579%204.013%2039.533%2039.533%200%200%200-.478%207.656%203.344%203.344%200%200%200%201.379%202.11c.015.305.065%201.323.102%201.884A55.309%2055.309%200%200%201%20221.15%2071.25l1.606-1.147a4.69%204.69%200%200%200%202.56-.278%2039.53%2039.53%200%200%200%205.69-5.148%2035.004%2035.004%200%200%201%202.787-2.95c.259-.222.65-.52.936-.746a4.242%204.242%200%201%201%205.258%206.598c-.283.229-.657.548-.929.75a35.096%2035.096%200%200%201-3.507%202.046%2039.495%2039.495%200%200%200-6.277%204.41%203.337%203.337%200%200%200-.792%202.39c-.235.216-1.06.947-1.497%201.343a54.837%2054.837%200%200%201%208.792%2037.983l1.704.496a4.745%204.745%200%200%200%201.82%201.831%2039.464%2039.464%200%200%200%207.568%201.245%2035.64%2035.64%200%200%201%204.046.324c.355.065.868.207%201.23.29a4.236%204.236%200%201%201-1.878%208.223l-.061-.008c-.028-.007-.054-.022-.083-.029-.348-.076-.785-.152-1.09-.232a35.14%2035.14%200%200%201-3.785-1.462%2039.477%2039.477%200%200%200-7.363-2.165%203.337%203.337%200%200%200-2.362.877q-.9-.171-1.804-.316a54.92%2054.92%200%200%201-24.328%2030.605z%22%20class%3D%22cls-2%22%2F%3E%3Cpath%20d%3D%22M291.737%20128.689L272.73%2046.128a14.838%2014.838%200%200%200-7.958-9.9L187.837-.502a14.825%2014.825%200%200%200-12.771%200L98.138%2036.25a14.838%2014.838%200%200%200-7.961%209.895L71.203%20128.71a14.668%2014.668%200%200%200%201.995%2011.185c.261.4.538.788.838%201.162l53.246%2066.205a14.98%2014.98%200%200%200%2011.499%205.487l85.387-.02a14.986%2014.986%200%200%200%2011.5-5.48l53.227-66.211a14.72%2014.72%200%200%200%202.842-12.347zm-9.197%203.866a13.677%2013.677%200%200%201-.498%201.723%2013.184%2013.184%200%200%201-2.11%203.785l-47.299%2058.838-1.486%201.852a13.305%2013.305%200%200%201-3.24%202.865%2013.943%2013.943%200%200%201-1.474.822q-.513.237-1.045.431a13.865%2013.865%200%200%201-1.383.444%2013.472%2013.472%200%200%201-1.989.379%2012.988%2012.988%200%200%201-1.41.082l-77.504.018h-.76a13.298%2013.298%200%200%201-3.429-.472%2013.924%2013.924%200%200%201-3.855-1.678%2013.423%2013.423%200%200%201-2.576-2.132c-.233-.246-.468-.487-.68-.75l-48.805-60.679q-.408-.514-.765-1.066a13.102%2013.102%200%200%201-1.343-2.726%2013.506%2013.506%200%200%201-.491-1.719%2013.315%2013.315%200%200%201%20.004-5.809l17.394-75.675a13.598%2013.598%200%200%201%207.295-9.07l70.508-33.686a13.59%2013.59%200%200%201%2011.705%200l70.519%2033.67a13.602%2013.602%200%200%201%207.293%209.073l17.422%2075.675a13.282%2013.282%200%200%201%20.002%205.807z%22%20class%3D%22cls-1%22%2F%3E%3Cpath%20d%3D%22M252.144%20120.687c-.36-.083-.874-.225-1.227-.29a35.635%2035.635%200%200%200-4.046-.326%2039.464%2039.464%200%200%201-7.57-1.242%204.745%204.745%200%200%201-1.82-1.832l-1.704-.496a54.837%2054.837%200%200%200-8.79-37.983c.436-.396%201.262-1.127%201.495-1.342a3.338%203.338%200%200%201%20.792-2.39%2039.495%2039.495%200%200%201%206.277-4.41%2035.097%2035.097%200%200%200%203.507-2.046c.272-.202.644-.522.929-.75a4.242%204.242%200%201%200-5.256-6.6c-.288.227-.68.525-.936.747a35.007%2035.007%200%200%200-2.789%202.95%2039.532%2039.532%200%200%201-5.69%205.148%204.69%204.69%200%200%201-2.56.278l-1.606%201.147a55.309%2055.309%200%200%200-35.032-16.927c-.039-.561-.087-1.577-.102-1.884a3.344%203.344%200%200%201-1.377-2.11%2039.534%2039.534%200%200%201%20.478-7.656%2035.111%2035.111%200%200%200%20.575-4.012c.013-.34-.007-.834-.007-1.201a4.242%204.242%200%201%200-8.441.004c0%20.04.009.078.01.118-.004.35-.021.774-.01%201.08a35.475%2035.475%200%200%200%20.576%204.015%2039.475%2039.475%200%200%201%20.47%207.654%204.601%204.601%200%200%201-1.37%202.182l-.1%201.786a55.055%2055.055%200%200%200-7.63%201.173%2054.289%2054.289%200%200%200-27.574%2015.754q-.77-.531-1.526-1.082a3.333%203.333%200%200%201-2.506-.243%2039.383%2039.383%200%200%201-5.69-5.141%2035.255%2035.255%200%200%200-2.777-2.95c-.257-.22-.65-.52-.938-.749a5.03%205.03%200%200%200-2.942-1.11%204.066%204.066%200%200%200-3.363%201.489%204.473%204.473%200%200%200%201.038%206.222l.065.046c.276.226.616.515.872.702a35.257%2035.257%200%200%200%203.499%202.048%2039.367%2039.367%200%200%201%206.276%204.412%204.69%204.69%200%200%201%20.849%202.434l1.351%201.208a54.613%2054.613%200%200%200-8.611%2038.073l-1.767.514a5.835%205.835%200%200%201-1.814%201.827%2039.39%2039.39%200%200%201-7.565%201.247%2035.264%2035.264%200%200%200-4.049.326c-.324.06-.774.174-1.127.262l-.037.008-.06.018a4.236%204.236%200%201%200%201.875%208.224l.063-.01c.028-.006.052-.02.08-.025.348-.079.786-.163%201.092-.246a35.585%2035.585%200%200%200%203.786-1.451%2039.527%2039.527%200%200%201%207.358-2.165%204.68%204.68%200%200%201%202.426.857l1.84-.315a54.922%2054.922%200%200%200%2024.34%2030.387l-.769%201.84a4.188%204.188%200%200%201%20.377%202.387%2041.227%2041.227%200%200%201-3.82%206.864%2035.183%2035.183%200%200%200-2.263%203.372c-.168.318-.381.805-.542%201.138a4.238%204.238%200%201%200%207.621%203.616l.007-.008v-.01c.16-.33.387-.763.522-1.072a34.9%2034.9%200%200%200%201.218-3.868%2029.517%2029.517%200%200%201%203.268-7.582%203.43%203.43%200%200%201%201.819-.888l.957-1.73a54.617%2054.617%200%200%200%2038.946.099c.268.478.768%201.392.9%201.623a3.335%203.335%200%200%201%202.155%201.31%2039.306%2039.306%200%200%201%202.898%207.096%2035.274%2035.274%200%200%200%201.225%203.868c.137.312.36.751.522%201.082a4.24%204.24%200%201%200%207.63-3.607c-.161-.333-.383-.82-.55-1.136a35.062%2035.062%200%200%200-2.263-3.364%2039.373%2039.373%200%200%201-3.742-6.7%203.314%203.314%200%200%201%20.324-2.49%2014.515%2014.515%200%200%201-.703-1.703%2054.92%2054.92%200%200%200%2024.328-30.605c.546.087%201.497.253%201.806.316a3.337%203.337%200%200%201%202.36-.877%2039.477%2039.477%200%200%201%207.36%202.165%2035.135%2035.135%200%200%200%203.788%201.462c.305.08.74.156%201.09.233.029.008.055.021.083.028l.06.009a4.236%204.236%200%201%200%201.878-8.224zm-40.1-42.987l-18.037%2012.787-.063-.029a3.723%203.723%200%200%201-5.913-2.839l-.02-.009-1.253-22.104A43.85%2043.85%200%200%201%20212.043%2077.7zm-33.978%2024.228h6.788l4.22%205.276-1.513%206.581-6.096%202.933-6.114-2.94-1.516-6.583zM171.68%2066.28a44.676%2044.676%200%200%201%204.503-.774l-1.255%2022.137-.092.044a3.72%203.72%200%200%201-5.904%202.852l-.035.02-18.154-12.872A43.467%2043.467%200%200%201%20171.68%2066.28zm-27.52%2019.681l16.574%2014.823-.018.091a3.72%203.72%200%200%201-1.462%206.394l-.017.072-21.245%206.131a43.454%2043.454%200%200%201%206.168-27.51zm22.191%2039.38l-8.441%2020.396a43.696%2043.696%200%200%201-17.536-21.948l21.783-3.699.037.048a3.655%203.655%200%200%201%20.73-.065%203.72%203.72%200%200%201%203.364%205.185zm24.916%2026.23a43.637%2043.637%200%200%201-23.815-1.224l10.713-19.372h.018a3.725%203.725%200%200%201%206.557-.006h.08l10.74%2019.404q-2.091.698-4.293%201.199zm13.841-5.752l-8.528-20.605.026-.037a3.725%203.725%200%200%201%201.803-4.823%203.685%203.685%200%200%201%201.425-.37%203.59%203.59%200%200%201%20.855.063l.037-.046%2021.977%203.714a43.53%2043.53%200%200%201-17.595%2022.105zm19.903-32.419l-21.352-6.15-.02-.09a3.725%203.725%200%200%201-1.46-6.396l-.008-.043%2016.482-14.751a44.279%2044.279%200%200%201%206.357%2027.43z%22%20class%3D%22cls-1%22%2F%3E%3C%2Fsvg%3E"},serverGroup:{CloneServerGroupModal:Xt,detailsActions:fs,detailsGetter:gs,detailsSections:[is,ns,Xn,ts,Jn,ss,os,Qn],commandBuilder:ls,transformer:cs},serverGroupManager:{details:Fs},loadBalancer:{CreateLoadBalancerModal:Xt,useDetailsHook:pa,detailsActions:ma,detailsSections:[sa,ia,aa,na,ra],transformer:ta},securityGroup:{reader:Wn,CreateSecurityGroupModal:Xt,details:jn,transformer:Zn},instance:{details:Yt},unsupportedStageTypes:["deploy","destroyServerGroup","disableCluster","disableServerGroup","enableServerGroup","findImage","resizeServerGroup","rollbackCluster","runJob","scaleDown","scaleDownCluster","shrinkCluster","upsertLoadBalancers"]});export{$n as KUBERNETES_RAW_RESOURCE_DETAILS_STATE,zn as KUBERNETES_RAW_RESOURCE_INSIGHT_STATE,An as KUBERNETS_RAW_RESOURCE_DATA_SOURCE_KEY,ma as KubernetesLoadBalancerActions,ta as KubernetesLoadBalancerTransformer,_t as KubernetesManifestCommandBuilder,ca as KubernetesManifestService,Hn as KubernetesSecurityGroupActions,jn as KubernetesSecurityGroupDetails,Vn as KubernetesSecurityGroupDetailsComponent,Wn as KubernetesSecurityGroupReader,Zn as KubernetesV2SecurityGroupTransformer,ls as KubernetesV2ServerGroupCommandBuilder,cs as KubernetesV2ServerGroupTransformer,aa as LoadBalancerAnnotationCustomSection,na as LoadBalancerEventsSection,sa as LoadBalancerInformationSection,ra as LoadBalancerLabelsSection,ia as LoadBalancerStatusSection,da as ManifestArtifact,Vt as ManifestCondition,ua as ScaleSettingsForm,Xn as ServerGroupAnnotationCustomSection,Jn as ServerGroupEventsSection,Qn as ServerGroupHealthSection,ts as ServerGroupImagesSection,ns as ServerGroupInformationSection,ss as ServerGroupLabelsSection,Ss as ServerGroupManagerAnnotationCustomSection,As as ServerGroupManagerArtifactsSection,ws as ServerGroupManagerEventsSection,Ns as ServerGroupManagerInformationSection,Ms as ServerGroupManagerLabelsSection,xs as ServerGroupManagerManifestConditionSection,Ds as ServerGroupManagerManifestStatusSection,is as ServerGroupManifestStatusSection,os as ServerGroupSizeSection,oa as isStoredManifestReference,xn as registerKubernetesRawResourceDataSource,Kn as registerKubernetesRawResourceStates,Un as registerKubernetesRawResources,pa as useKubernetesLoadBalancerDetails};
2
2
  //# sourceMappingURL=index.js.map