@spinnaker/kubernetes 0.4.0 → 0.6.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.
- package/CHANGELOG.md +75 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/pipelines/stages/deployManifest/ManifestDeploymentOptions.d.ts +0 -2
- package/dist/pipelines/stages/deployManifest/manifestStatus/DeployStatus.d.ts +1 -0
- package/dist/pipelines/stages/index.d.ts +1 -0
- package/dist/pipelines/stages/rolloutRestartManifest/RolloutRestartManifestStageConfig.d.ts +13 -0
- package/dist/pipelines/stages/rolloutRestartManifest/rolloutRestartManifestStage.d.ts +4 -0
- package/package.json +8 -5
- package/src/pipelines/stages/deployManifest/DeployManifestStageForm.tsx +0 -1
- package/src/pipelines/stages/deployManifest/ManifestDeploymentOptions.spec.tsx +0 -15
- package/src/pipelines/stages/deployManifest/ManifestDeploymentOptions.tsx +1 -20
- package/src/pipelines/stages/deployManifest/manifestStatus/DeployStatus.less +11 -0
- package/src/pipelines/stages/deployManifest/manifestStatus/DeployStatus.tsx +27 -15
- package/src/pipelines/stages/index.ts +1 -0
- package/src/pipelines/stages/rolloutRestartManifest/RolloutRestartManifestStageConfig.tsx +46 -0
- package/src/pipelines/stages/rolloutRestartManifest/rolloutRestartManifestStage.ts +20 -0
- package/src/pipelines/stages/traffic/ManifestTrafficStageConfig.tsx +1 -1
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{module as e,copy as t,equals as n}from"angular";import{HelpContentsRegistry as a,AccountService as s,HelpField as r,AccountSelectInput as i,YamlEditor as o,TaskMonitor as l,ReactModal as c,WizardModal as d,WizardPage as u,noop as p,ManifestWriter as m,SETTINGS as h,ManifestReader as C,InstanceReader as f,RecentHistoryService as g,withErrorBoundary as b,relativeTime as v,JobManifestPodLogs as k,JobEventBasedPodNameProvider as y,HoverablePopover as E,ConfirmationModalService as S,SearchService as A,AppListExtractor as w,StageConfigField as M,ScopeClusterSelector as D,StageConstants as x,NgReact as N,ExecutionDetailsSection as T,StageFailureMessage as G,Registry as F,ExecutionDetailsTasks as R,robotToHuman as $,AccountTag as I,ModalClose as P,TetheredSelect as B,StageArtifactSelector as O,ArtifactTypePatterns as L,Markdown as z,yamlDocumentsToString as K,CheckboxInput as q,RadioButtonInput as U,StageArtifactSelectorDelegate as V,FormikStageConfig as j,ReactInjector as _,CopyToClipboard as H,ManifestYaml as W,ExecutionArtifactTab as X,ExpectedArtifactService as J,ArtifactReferenceService as Z,DefaultPodNameProvider as Q,JobStageExecutionLogs as Y,EXECUTION_ARTIFACT_TAB as ee,PipelineConfigValidator as te,ApplicationDataSourceRegistry as ne,INFRASTRUCTURE_KEY as ae,REST as se,CloudProviderLogo as re,FormField as ie,ReactSelectInput as oe,FilterSection as le,FilterCheckbox as ce,Overridable as de,logger as ue,Spinner as pe,CollapsibleSection as me,timestamp as he,APPLICATION_STATE_PROVIDER as Ce,SECURITY_GROUP_READER as fe,TaskExecutor as ge,SERVER_GROUP_WRITER as be,ServerGroupReader as ve,ClusterTargetBuilder as ke,NameUtils as ye,ApplicationNameValidator as Ee,CloudProviderRegistry as Se,YAML_EDITOR_COMPONENT as Ae,STAGE_ARTIFACT_SELECTOR_COMPONENT_REACT as we}from"@spinnaker/core";import{cloneDeep as Me,has as De,flattenDeep as xe,chain as Ne,camelCase as Te,get as Ge,partition as Fe,trim as Re,sortBy as $e,keys as Ie,isEmpty as Pe,defaults as Be,flatten as Oe,groupBy as Le,find as ze,map as Ke,split as qe,set as Ue,capitalize as Ve,orderBy as je}from"lodash";import{load as _e,dump as He}from"js-yaml";import{$q as We,$log as Xe}from"ngimport";import Je from"react";import Ze from"dompurify";import{react2angular as Qe}from"react2angular";import"brace/mode/json";import"brace/theme/textmate";import Ye from"react-ace";import{DateTime as et}from"luxon";import tt,{Creatable as nt}from"react-select";import{Subject as at,from as st}from"rxjs";import{tap as rt,switchMap as it,takeUntil as ot}from"rxjs/operators";import{Modal as lt,Dropdown as ct}from"react-bootstrap";import{UISrefActive as dt,UISref as ut}from"@uirouter/react";const pt={"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.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."};var mt,ht;Object.keys(pt).forEach((e=>a.register(e,pt[e]))),(ht=mt||(mt={})).TEXT="text",ht.ARTIFACT="artifact";class Ct{static manifestCommandIsValid(e){return!!e.moniker&&!!e.moniker.app}static copyAndCleanCommand(e){return Me(e)}static buildNewManifestCommand(e,t,n,a){null!=t&&De(t,["metadata","annotations","kubectl.kubernetes.io/last-applied-configuration"])&&(t=_e(t.metadata.annotations["kubectl.kubernetes.io/last-applied-configuration"]));const r={accounts:s.getAllAccountDetailsForProvider("kubernetes"),artifactAccounts:s.getArtifactAccounts()};return We.all(r).then((s=>{const{accounts:r,artifactAccounts:i}=s,o=r.some((e=>e.name===a))?r.find((e=>e.name===a)).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:mt.TEXT},metadata:{backingData:s}}}))}}function ft({accounts:e,onAccountSelect:t,selectedAccount:n}){return Je.createElement("div",{className:"form-horizontal"},Je.createElement("div",{className:"form-group"},Je.createElement("div",{className:"col-md-3 sm-label-right"},"Account ",Je.createElement(r,{id:"kubernetes.manifest.account"})),Je.createElement("div",{className:"col-md-7"},Je.createElement(i,{value:n,onChange:e=>t(e.target.value),readOnly:!1,accounts:e,provider:"kubernetes"}))))}class gt extends Je.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 Je.createElement(ft,{accounts:e.values.metadata.backingData.accounts,onAccountSelect:this.accountUpdated,selectedAccount:e.values.command.account})}}class bt extends Je.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?He(s):null}}catch(e){this.state={rawManifest:null}}}render(){return Je.createElement(o,{value:this.state.rawManifest,onChange:this.handleChange})}}const vt=class extends Je.Component{constructor(e){super(e),this.submit=e=>{const t=Ct.copyAndCleanCommand(e.command);this.state.taskMonitor.submit((()=>m.deployManifest(t,this.props.application)))},e.command||Ct.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 l({application:e.application,title:(this.props.isNew?"Deploying":"Updating")+" your manifest",modalInstance:l.modalInstanceEmulation((()=>this.props.dismissModal()))})}}static show(e){return c.show(vt,e,{dialogClassName:"wizard-modal modal-lg"})}render(){const{application:e,dismissModal:t,isNew:n}=this.props,{loaded:a,taskMonitor:s,command:r}=this.state;return Je.createElement(d,{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})=>Je.createElement(Je.Fragment,null,Je.createElement(u,{label:"Basic Settings",wizard:a,order:n(),render:({innerRef:e})=>Je.createElement(gt,{ref:e,formik:t})}),Je.createElement(u,{label:"Manifest",wizard:a,order:n(),render:({innerRef:n})=>Je.createElement(bt,{ref:n,formik:t,app:e})}))})}};let kt=vt;kt.defaultProps={closeModal:p,dismissModal:p};class yt{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=!h.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(){Ct.buildNewManifestCommand(this.app,this.manifest.manifest,this.instance.moniker,this.instance.account).then((e=>{kt.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}})),C.getManifest(t.account,t.namespace,t.name).then((e=>{this.manifest=e}))]).then((()=>{this.state.loading=!1}))}fetchInstance(e){return f.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=xe([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?(g.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"}))}}yt.$inject=["instance","$uibModal","$q","$scope","app","$state"];e("spinnaker.kubernetes.instanceDetails.controller",[]).controller("kubernetesV2InstanceDetailsCtrl",yt),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 Et{constructor(e,t,n,a,s){this.$uibModal=e,this.$state=t,this.$scope=n,this.app=s,this.state={loading:!0};const r=this.app.getDataSource("loadBalancers");r.ready().then((()=>{this.extractLoadBalancer(a),this.$scope.isDisabled=!h.kubernetesAdHocInfraWritesEnabled,r.onRefresh(this.$scope,(()=>this.extractLoadBalancer(a)))})).catch((()=>this.autoClose()))}deleteLoadBalancer(){this.$uibModal.open({templateUrl:"kubernetes/src/manifest/delete/delete.html",controller:"kubernetesV2ManifestDeleteCtrl",controllerAs:"ctrl",resolve:{coordinates:{name:this.loadBalancer.name,namespace:this.loadBalancer.namespace,account:this.loadBalancer.account},application:this.app,manifestController:()=>null}})}editLoadBalancer(){Ct.buildNewManifestCommand(this.app,this.manifest.manifest,this.loadBalancer.moniker,this.loadBalancer.account).then((e=>{kt.show({title:"Edit Manifest",application:this.app,command:e})}))}extractLoadBalancer({accountId:e,name:t,region:n}){const a=this.app.getDataSource("loadBalancers").data.find((a=>a.name===t&&a.account===e&&a.region===n));if(!a)return this.autoClose();C.getManifest(e,n,t).then((e=>{this.manifest=e,this.loadBalancer=a,this.state.loading=!1}))}autoClose(){this.$scope.$$destroyed||(this.$state.params.allowModalToStayOpen=!0,this.$state.go("^",null,{location:"replace"}))}}Et.$inject=["$uibModal","$state","$scope","loadBalancer","app"];const St="spinnaker.kubernetes.loadBalancerDetails.controller";e("spinnaker.kubernetes.loadBalancerDetails.controller",[]).controller("kubernetesV2LoadBalancerDetailsCtrl",Et),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 At{constructor(e){this.$q=e}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}))})),this.$q.resolve(e)}buildInstanceCounts(e){const t=Ne(e).map((e=>e.instances)).flatten().reduce(((e,t)=>(e[Te(t.health.state)]++,e)),{up:0,down:0,outOfService:0,succeeded:0,failed:0,unknown:0,starting:0}).value();return t.outOfService+=Ne(e).map((e=>e.detachedInstances)).flatten().value().length,t}}At.$inject=["$q"];e("spinnaker.kubernetes.loadBalancerTransformer",[]).service("kubernetesV2LoadBalancerTransformer",At);class wt{constructor(e,t){this.$sce=e,this.$interpolate=t}$onInit(){const e=Ge(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=Fe(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=Ze.sanitize(e,{ADD_ATTR:["target"]});return this.$sce.trustAsHtml(t)}}wt.$inject=["$sce","$interpolate"];const Mt={bindings:{manifest:"<",resource:"<"},controller:["$sce","$interpolate",wt],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 '};e("spinnaker.kubernetes.v2.manifest.annotation.custom.sections",[]).component("kubernetesAnnotationCustomSections",Mt);const Dt={bindings:{artifact:"<"},controller:class{},controllerAs:"ctrl",template:"\n <span>\n <b>{{ctrl.artifact.type}}</b>\n <i>{{ctrl.artifact.reference}}</i>\n </span>\n "},xt="spinnaker.kubernetes.v2.manifest.artifact.component";e("spinnaker.kubernetes.v2.manifest.artifact.component",[]).component("kubernetesManifestArtifact",Dt);const Nt={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 '};e("spinnaker.kubernetes.v2.kubernetes.manifest.delete.options.component",[]).component("kubernetesDeleteManifestOptionsForm",Nt);class Tt{constructor(e,t,n,a){this.$uibModalInstance=t,this.application=n,this.manifestController=a,this.verification={verified:!1},this.taskMonitor=new l({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,m.deleteManifest(e,this.application)}))}}Tt.$inject=["coordinates","$uibModalInstance","application","manifestController"];const Gt="spinnaker.kubernetes.v2.manifest.delete.controller";e("spinnaker.kubernetes.v2.manifest.delete.controller",["spinnaker.kubernetes.v2.kubernetes.manifest.delete.options.component"]).controller("kubernetesV2ManifestDeleteCtrl",Tt);class Ft extends Je.Component{constructor(){super(...arguments),this.handleChange=e=>{try{const t=JSON.parse(e);this.props.onChange?this.props.onChange(e,t):Xe.warn("No `onChange` handler provided for JSON editor.")}catch(t){this.props.onChange?this.props.onChange(e,null):Xe.warn("No `onChange` handler provided for JSON editor."),Xe.warn(`Error loading JSON from string ${e}: `,t)}},this.render=()=>Je.createElement(Ye,{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"})}}e("spinnaker.kubernetes.jsonEditor.component",[]).component("jsonEditor",Qe(b(Ft,"jsonEditor"),["onChange","value"]));class Rt extends Je.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 Je.createElement("div",null,"No recent events found - Kubernetes does not store events for long.");const{events:e}=this.props.manifest,t=Re(Ge(this.props.manifest,["manifest","metadata","annotations","artifact.spinnaker.io/location"],""));return e.map(((n,a)=>{const s=Ge(n,"firstTimestamp",""),r=Ge(n,"lastTimestamp","");let i=0,o=0;return s&&(i=et.fromISO(s).toMillis()),r&&(o=et.fromISO(r).toMillis()),Je.createElement("div",{key:Ge(n,["metadata","uid"],String(a)),className:"info"},Je.createElement("div",{className:"horizontal"},n.count&&Je.createElement("div",{className:`pill ${this.pillStyle(n)}`},n.count," × ",Je.createElement("b",null,n.reason))),(n.firstTimestamp||n.lastTimestamp)&&Je.createElement("div",null,n.firstTimestamp===n.lastTimestamp&&Je.createElement("div",null,Je.createElement("i",null,v(i))),n.firstTimestamp!==n.lastTimestamp&&Je.createElement("div",null,Je.createElement("div",null,"First Occurrence: ",Je.createElement("i",null,v(i))),Je.createElement("div",null,"Last Occurrence: ",Je.createElement("i",null,v(o))))),Je.createElement("div",null,n.message),Je.createElement("div",null,Je.createElement(k,{account:this.props.manifest.account,location:t,podNamesProviders:[new y(this.props.manifest,n)],linkName:"Console Output (Raw)"})),a!==e.length-1&&Je.createElement("br",null))}))}}e("spinnaker.kubernetes.v2.manifest.events",[]).component("kubernetesManifestEvents",Qe(b(Rt,"kubernetesManifestEvents"),["manifest"]));const $t=e=>e&&e.includes(":")?e:`${e}:latest`;function It(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))}}e("spinnaker.kubernetes.v2.manifestImageDetails.component",[]).component("kubernetesManifestImageDetails",Qe(b((({manifest:e})=>{if(!De(e,"spec.template.spec"))return null;const t=$e(e.spec.template.spec.containers||[],["image"]),n=$e(e.spec.template.spec.initContainers||[],["image"]),a=t.length>0&&n.length>0;return 0===t.length&&0===n.length?Je.createElement("span",null,"No images."):Je.createElement("ul",null,a&&Je.createElement("strong",null,"Containers"),t.map((e=>Je.createElement("li",{key:e.image,title:$t(e.image),className:"break-word"},$t(e.image)," ",Je.createElement(r,{content:`This is container <strong>${e.name}</strong>'s image.`})))),a&&Je.createElement("strong",null,"Init Containers"),n.map((e=>Je.createElement("li",{key:e.image,className:"break-word",title:$t(e.image)},$t(e.image)," ",Je.createElement(r,{content:`This is init container <strong>${e.name}</strong>'s image.`})))))}),"kubernetesManifestImageDetails"),["manifest"]));It(".manifest-label {\n margin: 2px;\n}\n");class Pt extends Je.Component{render(){const e=Ge(this.props,["manifest","metadata","labels"],{});return Je.createElement("div",{className:"horizontal wrap"},Ie(e).map((t=>Je.createElement("div",{key:t,className:"manifest-label sp-badge info"},t,": ",e[t]))))}}e("spinnaker.kubernetes.v2.manifest.labels",[]).component("kubernetesManifestLabels",Qe(b(Pt,"kubernetesManifestLabels"),["manifest"]));class Bt extends Je.Component{constructor(){super(...arguments),this.description=()=>Je.createElement("div",null,Je.createElement("p",null,"There are three QOS (Quality of Service) classes:"),Je.createElement("p",null,Je.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."),Je.createElement("p",null,Je.createElement("b",null,"Burstable"),": Pods have some minimum guaranteed resources and can exceed them, but are more likely to be killed than ",Je.createElement("b",null,"Guaranteed")," pods."),Je.createElement("p",null,Je.createElement("b",null,"BestEffort"),": These are the lowest-priority pods, and will be the first to be evicted when resources run out."),Je.createElement("p",null,"To understand how to set the QOS class of a pod, read"," ",Je.createElement("a",{href:"https://kubernetes.io/docs/tasks/configure-pod-container/quality-service-pod/"},"the Kubernetes documentation"),"."))}qosClass(){return Ge(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 Je.createElement(E,{Component:this.description,title:"QOS Class",className:"ephemeral-popover"},Je.createElement("div",{className:e},this.qosClass()))}}e("spinnaker.kubernetes.v2.manifest.qos",[]).component("kubernetesManifestQos",Qe(b(Bt,"kubernetesManifestQos"),["manifest"]));class Ot extends Je.Component{render(){const e=Ge(this.props,["manifest","spec","containers"],[]),t=Ge(this.props,["metrics"],[]);if(!t)return Je.createElement("div",null,"No metrics reported.");const n=t.reduce(((e,t)=>(e[t.containerName]={metrics:t.metrics},e)),{});return Je.createElement("div",null,e.map(((t,a)=>Je.createElement("div",{key:t.name},"Resource usage for ",Je.createElement("b",null,t.name),Je.createElement("dl",{className:"dl-horizontal dl-narrow"},Je.createElement("dt",null,"CPU"),Je.createElement("dd",null,Ge(n,[t.name,"metrics","CPU(cores)"],"Unknown")),Je.createElement("dt",null,"MEMORY"),Je.createElement("dd",null,Ge(n,[t.name,"metrics","MEMORY(bytes)"],"Unknown"))),a<e.length-1?Je.createElement("hr",null):""))))}}e("spinnaker.kubernetes.v2.manifest.resources",[]).component("kubernetesManifestResources",Qe(b(Ot,"kubernetesManifestResources"),["manifest","metrics"]));e("spinnaker.kubernetes.v2.rolling.restart",[]).component("kubernetesRollingRestart",Qe(b((function({application:e,serverGroupManager:t}){return Je.createElement("li",null,Je.createElement("a",{onClick:function(){const n={account:t.account,cloudProvider:"kubernetes",location:t.namespace,manifestName:t.name};S.confirm({account:t.account,askForReason:!0,header:`Initiate rolling restart of ${t.name}`,submitMethod:()=>m.rollingRestartManifest(n,e),taskMonitorConfig:{application:e,title:`Rolling restart of ${t.name}`}})}},"Rolling Restart"))}),"kubernetesRollingRestart"),["application","serverGroupManager"]));class Lt{constructor(e,t,n){this.$uibModalInstance=t,this.application=n,this.verification={verified:!1},this.taskMonitor=new l({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",m.pauseRolloutManifest(e,this.application)}))}}Lt.$inject=["coordinates","$uibModalInstance","application"];const zt="spinnaker.kubernetes.v2.manifest.pauseRollout.controller";e("spinnaker.kubernetes.v2.manifest.pauseRollout.controller",[]).controller("kubernetesV2ManifestPauseRolloutCtrl",Lt);class Kt{constructor(e,t,n){this.$uibModalInstance=t,this.application=n,this.verification={verified:!1},this.taskMonitor=new l({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",m.resumeRolloutManifest(e,this.application)}))}}Kt.$inject=["coordinates","$uibModalInstance","application"];e("spinnaker.kubernetes.v2.manifest.resumeRollout.controller",[]).controller("kubernetesV2ManifestResumeRolloutCtrl",Kt);class qt{constructor(e,t,n,a){this.revisions=t,this.$uibModalInstance=n,this.application=a,this.verification={verified:!1},this.taskMonitor=new l({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",m.undoRolloutManifest(e,this.application)}))}}qt.$inject=["coordinates","revisions","$uibModalInstance","application"];const Ut="spinnaker.kubernetes.v2.manifest.undoRollout.controller";e("spinnaker.kubernetes.v2.manifest.undoRollout.controller",[]).controller("kubernetesV2ManifestUndoRolloutCtrl",qt);const Vt={bindings:{settings:"="},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 Replicas\n </div>\n <div class="col-md-4">\n <input type="text"\n class="form-control input-sm highlight-pristine"\n ng-model="ctrl.settings.replicas"\n min="0"/>\n </div>\n </div>\n </div>\n '};e("spinnaker.kubernetes.v2.kubernetes.manifest.scale.settingsForm.component",[]).component("kubernetesScaleManifestSettingsForm",Vt);class jt{constructor(e,t,n,a){this.$uibModalInstance=n,this.application=a,this.verification={verified:!1},this.taskMonitor=new l({title:`Scaling ${e.name} in ${e.namespace}`,application:a,modalInstance:n}),this.command={manifestName:e.name,location:e.namespace,account:e.account,reason:null,replicas:t}}isValid(){return this.verification.verified}cancel(){this.$uibModalInstance.dismiss()}scale(){this.taskMonitor.submit((()=>{const e=t(this.command);return e.cloudProvider="kubernetes",m.scaleManifest(e,this.application)}))}}jt.$inject=["coordinates","currentReplicas","$uibModalInstance","application"];const _t="spinnaker.kubernetes.v2.manifest.scale.controller";var Ht,Wt;e("spinnaker.kubernetes.v2.manifest.scale.controller",["spinnaker.kubernetes.v2.kubernetes.manifest.scale.settingsForm.component"]).controller("kubernetesV2ManifestScaleCtrl",jt),(Wt=Ht||(Ht={})).Static="static",Wt.Dynamic="dynamic",Wt.Label="label";const Xt={[Ht.Static]:{label:"Choose a static target",selectorDefaults:{cluster:null,criteria:null,kind:null,kinds:null,labelSelectors:null}},[Ht.Dynamic]:{label:"Choose a target dynamically",selectorDefaults:{kinds:null,labelSelectors:null,manifestName:null}},[Ht.Label]:{label:"Match target(s) by label",selectorDefaults:{cluster:null,criteria:null,kind:null,kinds:[],labelSelectors:{selectors:[]},manifestName:null}}};class Jt{static search(e,t,n){return A.search({q:t,type:e}).then((a=>Ne(a?a.results:[]).filter((a=>a.namespace===t&&a.account===n&&a.kubernetesKind===e)).uniqBy("name").valueOf())).catch((()=>[]))}}It(".label-editor-kind-select {\n min-width: 125px;\n}\n");const Zt=["ANY","EQUALS","NOT_EQUALS","CONTAINS","NOT_CONTAINS","EXISTS","NOT_EXISTS"].map((e=>({label:e,value:e}))),Qt=class extends Je.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 Je.createElement("table",{className:"table table-condensed packed tags"},Je.createElement("thead",null,Je.createElement("tr",null,Je.createElement("th",null,"Key"),Je.createElement("th",null,"Kind"),Je.createElement("th",null,"Value(s)"),Je.createElement("th",null))),Je.createElement("tbody",null,this.props.labelSelectors.map(((e,t)=>Je.createElement("tr",{className:"label-editor-selector-row",key:t},Je.createElement("td",null,Je.createElement("input",{className:"form-control input input-sm label-editor-key-input",type:"text",value:e.key,onChange:e=>this.handleChange(t,"key",e.target.value)})),Je.createElement("td",null,Je.createElement(tt,{className:"label-editor-kind-select",clearable:!1,onChange:e=>this.handleChange(t,"kind",e.value),options:Zt,value:e.kind})),Je.createElement("td",null,Je.createElement("input",{className:"form-control input input-sm label-editor-values-input",onChange:e=>this.handleChange(t,"values",Qt.convertValueStringToArray(e.target.value)),placeholder:"Comma-separated values",value:e.values.join(", "),type:"text"})),Je.createElement("td",null,Je.createElement("button",{className:"link label-editor-remove",onClick:()=>this.removeField(t)},Je.createElement("span",{className:"glyphicon glyphicon-trash"}),Je.createElement("span",{className:"sr-only"},"Remove field"))))))),Je.createElement("tfoot",null,Je.createElement("tr",null,Je.createElement("td",{colSpan:4},Je.createElement("button",{className:"btn btn-block btn-sm add-new",onClick:this.addField},Je.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add Label")))))}};let Yt=Qt;Yt.defaultProps={labelSelectors:[],onLabelSelectorsChange:p},Yt.convertValueStringToArray=e=>e.split(",").map((e=>e.trim()));const en=e=>{const[t,n]=(e||"").split(" ");return{kind:t,name:n}};class tn{constructor(e){this.component=e,this.handles=e=>e===Ht.Static,this.handleModeChange=()=>{const{selector:e}=this.component.state;this.handleKindChange(e.kind),Object.assign(e,Xt.static.selectorDefaults),this.component.setStateAndUpdateStage({selector:e})},this.handleKindChange=e=>{const{selector:t}=this.component.state,{name:n}=en(t.manifestName);t.manifestName=e?n?`${e} ${n}`:e:n},this.getKind=()=>en(this.component.state.selector.manifestName).kind}}class nn{constructor(e){this.component=e,this.handles=e=>e===Ht.Dynamic,this.handleModeChange=()=>{const{selector:e}=this.component.state,{kind:t}=en(e.manifestName);e.kind=t||null,Object.assign(e,Xt.dynamic.selectorDefaults),this.component.setStateAndUpdateStage({selector:e})},this.handleKindChange=e=>{this.component.state.selector.kind=e},this.getKind=()=>this.component.state.selector.kind}}class an{constructor(e){this.component=e,this.handles=e=>e===Ht.Label,this.handleModeChange=()=>{const{selector:e}=this.component.state;Object.assign(e,Xt.label.selectorDefaults),this.component.setStateAndUpdateStage({selector:e})},this.handleKindChange=()=>{},this.getKind=()=>null}}class sn extends Je.Component{constructor(e){super(e),this.search$=new at,this.destroy$=new at,this.setStateAndUpdateStage=(e,t)=>{e.selector&&this.props.onChange&&this.props.onChange(e.selector),this.setState(e,t||p)},this.componentDidMount=()=>{this.loadAccounts(),this.search$.pipe(rt((()=>this.setStateAndUpdateStage({loading:!0}))),it((({kind:e,namespace:t,account:n})=>st(this.search(e,t,n)))),ot(this.destroy$)).subscribe((e=>{null==this.state.selector.manifestName&&this.getSelectedMode()===Ht.Static&&this.handleNameChange(""),this.setStateAndUpdateStage({loading:!1,resources:e,selector:this.state.selector})}))},this.componentWillUnmount=()=>this.destroy$.next(),this.loadAccounts=()=>s.getAllAccountDetailsForProvider("kubernetes").then((e=>{const t=this.state.selector,n=en(t.manifestName).kind;this.setStateAndUpdateStage({accounts:e}),!t.account&&e.length>0&&(t.account=e.some((e=>e.name===h.providers.kubernetes.defaults.account))?h.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:en(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:en(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}=en(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)?We.resolve([]):Jt.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||Ht.Static,this.getFilteredClusters=()=>{const{application:e,includeSpinnakerKinds:t}=this.props,{selector:n}=this.state,a=e?[e]:[],s=Pe(t)||t.length>1||"serverGroups"!==t[0];return w.getClusters(a,(e=>{const t=w.clusterFilterForCredentialsAndRegion(n.account,n.location)(e),a=Ge(e,"serverGroupManagers.length",0)>0,r=s||!a,i=a?e.cluster:e.name,o=en(i).kind===this.modeDelegate().getKind();return t&&r&&o}))},this.props.selector.mode||(this.props.selector.mode=Ht.Static,this.props.onChange&&this.props.onChange(this.props.selector)),this.state={selector:e.selector,accounts:[],namespaces:[],kinds:[],resources:[],loading:!1},this.handlers=[new tn(this),new nn(this),new an(this)]}render(){const{TargetSelect:e}=N,t=this.getSelectedMode(),n=this.props.modes||[t],{selector:a,accounts:s,kinds:r,namespaces:o,resources:l,loading:c}=this.state,d=this.modeDelegate().getKind(),u=en(a.manifestName).name,p=l.map((e=>en(e).name)),m=a.kinds||[],h=Je.createElement(M,{label:"Kind"},Je.createElement(nt,{clearable:!1,value:{value:d,label:d},options:r.map((e=>({value:e,label:e}))),onChange:e=>this.handleKindChange(e&&e.value),promptTextCreator:this.promptTextCreator}));return Je.createElement(Je.Fragment,null,Je.createElement(M,{label:"Account"},Je.createElement(i,{value:a.account,onChange:e=>this.handleAccountChange(e.target.value),accounts:s,provider:"'kubernetes'"})),Je.createElement(M,{label:"Namespace"},Je.createElement(nt,{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(Ht.Label)&&h,n.length>1&&Je.createElement(M,{label:"Selector"},n.map((e=>Je.createElement("div",{className:"radio",key:e},Je.createElement("label",{htmlFor:e},Je.createElement("input",{type:"radio",onChange:()=>this.handleModeSelect(e),checked:t===e,id:e})," ",Ge(Xt,[e,"label"],"")))))),n.includes(Ht.Label)&&t!==Ht.Label&&h,n.includes(Ht.Static)&&t===Ht.Static&&Je.createElement(M,{label:"Name"},Je.createElement(nt,{isLoading:c,clearable:!1,value:{value:u,label:u},options:p.map((e=>({value:e,label:e}))),onChange:e=>this.handleNameChange(e?e.value:""),promptTextCreator:this.promptTextCreator})),n.includes(Ht.Dynamic)&&t===Ht.Dynamic&&Je.createElement(Je.Fragment,null,Je.createElement(M,{label:"Cluster"},Je.createElement(D,{clusters:this.getFilteredClusters(),model:a.cluster,onChange:this.handleClusterChange})),Je.createElement(M,{label:"Target"},Je.createElement(e,{onChange:this.handleCriteriaChange,model:{target:a.criteria},options:x.MANIFEST_CRITERIA_OPTIONS}))),n.includes(Ht.Label)&&t===Ht.Label&&Je.createElement(Je.Fragment,null,Je.createElement(M,{label:"Kinds"},Je.createElement(tt,{clearable:!1,multi:!0,value:m,options:r.map((e=>({value:e,label:e}))),onChange:e=>this.handleKindsChange(e.map((e=>e.value)))})),Je.createElement(M,{label:"Labels"},Je.createElement(Yt,{labelSelectors:Ge(a,"labelSelectors.selectors",[]),onLabelSelectorsChange:this.handleLabelSelectorsChange}))))}}e("spinnaker.kubernetes.v2.manifest.selector.component",[]).component("kubernetesManifestSelector",Qe(b(sn,"kubernetesManifestSelector"),["selector","modes","application","onChange"]));class rn extends Je.Component{render(){const{condition:e}=this.props,t=et.fromISO(e.lastTransitionTime);return[Je.createElement("span",{key:"properties"},"True"===e.status&&Je.createElement("span",{style:{marginRight:"3px"},className:"glyphicon glyphicon-Normal"}),"False"===e.status&&Je.createElement("span",{style:{marginRight:"3px"},className:"glyphicon glyphicon-Warn"}),"Unknown"===e.status&&Je.createElement("span",{style:{marginRight:"3px"}},"?"),Je.createElement("b",{style:{marginRight:"3px"}},e.type),Je.createElement("i",null,t.isValid&&v(t.toMillis()))),Je.createElement("div",{key:"message"},e.message)]}}const on="spinnaker.kubernetes.v2.manifest.condition.component";e("spinnaker.kubernetes.v2.manifest.condition.component",[]).component("kubernetesManifestCondition",Qe(b(rn,"kubernetesManifestCondition"),["condition"]));const ln={bindings:{status:"<"},controller:class{},controllerAs:"ctrl",template:'\n <div ng-if="!ctrl.status" class="horizontal middle center spinner-section">\n <loading-spinner size="\'small\'"></loading-spinner>\n </div>\n <div ng-if="ctrl.status">\n <div class="band band-warning" ng-if="!ctrl.status.available.state"\n uib-tooltip="{{ctrl.status.available.message}}">\n Not Fully Available\n </div>\n <div class="band band-active" ng-if="!ctrl.status.stable.state"\n uib-tooltip="{{ctrl.status.stable.message}}">\n Transitioning\n </div>\n <div class="band band-info" ng-if="ctrl.status.paused.state"\n uib-tooltip="{{ctrl.status.paused.message}}">\n Rollout Paused\n </div>\n </div>\n '},cn="spinnaker.kubernetes.v2.kubernetes.manifest.status.component";e(cn,[]).component("kubernetesManifestStatus",ln);var dn,un;It(".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 pn extends Je.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 Je.createElement(Je.Fragment,null,Je.createElement(M,{helpKey:"kubernetes.manifest.delete.cascading",label:"Cascading"},Je.createElement("div",{className:"checkbox"},Je.createElement("input",{checked:e,className:"delete-manifest-options-input-cascading",onChange:this.onCascadingChange,type:"checkbox"}))),Je.createElement(M,{helpKey:"kubernetes.manifest.delete.gracePeriod",label:"Grace Period"},Je.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:""}),Je.createElement("span",{className:"form-control-static"},1===t?"second":"seconds")))}}pn.defaultProps={onOptionsChange:p,options:{cascading:!0,gracePeriodSeconds:null}};class mn extends Je.Component{constructor(){super(...arguments),this.componentDidMount=()=>{Be(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 Je.createElement("div",{className:"form-horizontal"},Je.createElement("h4",null,"Manifest"),Je.createElement("div",{className:"horizontal-rule"}),Je.createElement(sn,{application:this.props.application,selector:e,modes:[Ht.Static,Ht.Dynamic,Ht.Label],onChange:this.onChange,includeSpinnakerKinds:null}),Je.createElement("h4",null,"Settings"),Je.createElement("div",{className:"horizontal-rule"}),Je.createElement(pn,{onOptionsChange:this.onOptionsChange,options:this.props.stage.options}))}}(un=dn||(dn={})).ANY="ANY",un.EQUALS="EQUALS",un.NOT_EQUALS="NOT_EQUALS",un.CONTAINS="CONTAINS",un.NOT_CONTAINS="NOT_CONTAINS",un.EXISTS="EXISTS",un.NOT_EXISTS="NOT_EXISTS";const hn=e=>Ge(x.MANIFEST_CRITERIA_OPTIONS.find((t=>t.val===e)),"label"),Cn=e=>(e.selectors||[]).map((e=>{const{key:t,kind:n,values:a=[]}=e;switch(n){case dn.ANY:return null;case dn.EQUALS:return`${t} = ${a[0]}`;case dn.NOT_EQUALS:return`${t} != ${a[0]}`;case dn.CONTAINS:return`${t} in (${a.join(", ")})`;case dn.NOT_CONTAINS:return`${t} notin (${a.join(", ")})`;case dn.EXISTS:return`${t}`;case dn.NOT_EXISTS:return`!${t}`;default:return null}})).filter((e=>!!e)).join(", "),fn=({account:e,manifestName:t,location:n,cluster:a,criteria:s,labelSelectors:r,manifestNamesByNamespace:i})=>Je.createElement(Je.Fragment,null,Je.createElement("dt",null,"Account"),Je.createElement("dd",null,e),((e,t)=>{if(e)return Je.createElement(Je.Fragment,null,Je.createElement("dt",null,"Manifest"),Je.createElement("dd",null,e));if(t){const e=Oe(Object.values(t));return Je.createElement(Je.Fragment,null,Je.createElement("dt",null,"Manifest",e.length>1?"s":""),Je.createElement("dd",null,e.join(", ")))}return null})(t,i),Je.createElement("dt",null,"Namespace"),Je.createElement("dd",null,n),null!=hn(s)&&null!=a&&Je.createElement(Je.Fragment,null,Je.createElement("dt",null,"Target"),Je.createElement("dd",null,`${hn(s)} in cluster ${a}`)),null!=r&&!!Cn(r)&&Je.createElement(Je.Fragment,null,Je.createElement("dt",null,"Selector",(r.selectors||[]).length>1?"s":""),Je.createElement("dd",null,Cn(r)))),gn=e=>{var t;return(t=class extends Je.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 Je.createElement(T,{name:n,current:t},Je.createElement("div",{className:"row"},Je.createElement("div",{className:"col-md-9"},Je.createElement("dl",{className:"dl-narrow dl-horizontal"},Je.createElement(fn,{account:a,manifestName:s,location:r,cluster:i,criteria:o,labelSelectors:l,manifestNamesByNamespace:c})))),Je.createElement(G,{stage:e,message:e.failureMessage}))}}).title=e,t},bn=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===Ht.Dynamic){if(!n.kind)return t("Kind");if(!n.cluster)return t("Cluster");if(!n.criteria)return t("Target")}else if(n.mode===Ht.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===Ht.Label&&!n.kinds)return t("Kinds");return null}}]};F.pipeline.registerStage({label:"Delete (Manifest)",description:"Destroy a Kubernetes object created from a manifest.",key:"deleteManifest",cloudProvider:"kubernetes",component:mn,executionDetailsSections:[gn("deleteManifest"),R],accountExtractor:e=>e.account?[e.account]:[],configAccountExtractor:e=>e.account?[e.account]:[],validators:bn("Delete (Manifest)")});const vn=class extends Je.Component{constructor(e){super(e),this.destroy$=new at,this.useManifest=()=>{const{data:{account:e,region:t,name:n}}=this.state.selectedManifest;st(C.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=$(e.kind).trim();return Je.createElement("span",null,Je.createElement(I,{account:e.account}),e.data&&Je.createElement("span",null," ",e.name)," (",t," in ",e.location,")")},this.manifestOptionRenderer=e=>{const t=$(e.kind).trim();return Je.createElement("h5",null,Je.createElement(I,{account:e.account})," ",e.name," (",t," in ",e.location,")")},this.state=vn.getState(e)}componentWillUnmount(){this.destroy$.next()}render(){const{selectedManifest:e,manifests:t}=this.state;return Je.createElement(lt,{show:this.props.show,onHide:p},Je.createElement(P,{dismiss:this.props.onDismiss}),Je.createElement("div",null,Je.createElement(lt.Header,null,Je.createElement(lt.Title,null,"Copy Manifest")),Je.createElement(lt.Body,null,Je.createElement("form",{className:"form-horizontal"},Je.createElement("div",{className:"form-group"},Je.createElement("div",{className:"col-md-4 col-md-offset-1 sm-label-left"},Je.createElement("b",null,"Copy manifest from"))),Je.createElement("div",{className:"form-group"},Je.createElement("div",{className:"col-md-10 col-md-offset-1"},Je.createElement(B,{value:e?e.key:null,placeholder:"Select...",valueRenderer:this.manifestValueRenderer,optionRenderer:this.manifestOptionRenderer,options:t,valueKey:"key",onChange:this.manifestChanged,clearable:!1}))))),Je.createElement("div",{className:"modal-footer"},e&&Je.createElement("button",{className:"btn btn-primary",onClick:this.useManifest},Je.createElement("span",null,"Use this manifest"),Je.createElement("span",{className:"glyphicon glyphicon-chevron-right"})),!e&&Je.createElement("button",{className:"btn",onClick:this.props.onDismiss},Je.createElement("span",null,"Cancel")))))}};let kn=vn;kn.getState=e=>{let t=[];const n=e.application.getDataSource("serverGroups").data.filter((t=>t.cloudProvider===e.cloudProvider&&"serverGroup"===t.category&&!(t.serverGroupManagers||[]).length)),a=Le(n,(e=>[e.cluster,e.account,e.region].join(":")));Object.keys(a).forEach((e=>{const n=$e(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=$e(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}};class yn extends Je.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 Je.createElement(Je.Fragment,null,Je.createElement(kn,{show:this.state.show,application:this.props.application,cloudProvider:"kubernetes",onDismiss:this.toggle,onManifestSelected:this.handleManifestSelected}),Je.createElement("button",{className:"link",onClick:this.toggle,style:{paddingLeft:0}},"Copy from running infrastructure"))}}class En extends Je.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 Je.createElement("div",{className:"row",key:r},Je.createElement("div",{className:"col-md-10"},Je.createElement(O,{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:[L.FRONT50_PIPELINE_TEMPLATE]})),s&&Je.createElement("div",{className:"col-md-2"},Je.createElement("a",{className:"glyphicon glyphicon-trash",onClick:()=>this.onRemoveBinding(a)})))};return Je.createElement(Je.Fragment,null,n.map(((e,t)=>a(t,e))),a(n.length))}}class Sn extends Je.Component{constructor(){super(...arguments),this.defaultProps={createable:!1}}getNamespaceOptions(){const{accounts:e,selectedAccount:t,selectedNamespace:n}=this.props,a=ze(e,(e=>e.name===t)),s=Ge(a,"namespaces",[]),r=Ke(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?Je.createElement(nt,{...e}):Je.createElement(tt,{...e})}}const An={label:"Red/Black (Deprecated)",description:"Disables <i>all</i> previous ReplicaSets in the cluster as soon as the new ReplicaSet is ready",key:"redblack"},wn=[{label:"None",description:"Creates the new ReplicaSet with no impact on existing ReplicaSets in the cluster",key:null,providerRestricted:!1},An,{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"}],Mn={enabled:!1,options:{namespace:null,services:[],enableTraffic:!1,strategy:null}};class Dn extends Je.Component{constructor(){super(...arguments),this.state={services:[],showRedBlackWarningMessage:!1,showBlueGreenDeploymentWarningMessage:!1},this.onConfigChange=(e,t)=>{this.setState({showRedBlackWarningMessage:!1}),"redblack"===t&&(t="bluegreen",this.setState({showRedBlackWarningMessage:!0})),"bluegreen"===t&&this.props.isDeploymentKind&&this.setState({showBlueGreenDeploymentWarningMessage:!0}),this.updateProps(e,t)},this.fetchServices=()=>{const e=this.props.config.options.namespace,t=this.props.selectedAccount;e&&t||this.setState({services:[]}),Jt.search("service",e,t).then((e=>{this.setState({services:Ke(e,"name")})}))},this.getServiceOptions=()=>{const e=this.state.services.map((e=>({label:qe(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=>Je.createElement("div",{className:"body-regular"},Je.createElement("strong",null,Je.createElement(z,{tag:"span",message:e.label})),Je.createElement("div",null,Je.createElement(z,{tag:"span",message:e.description})))}updateProps(e,t){const n=Me(this.props.config);Ue(n,e,t),this.props.onConfigChange(n)}componentDidMount(){this.fetchServices(),this.setState({showRedBlackWarningMessage:!1}),this.setState({showBlueGreenDeploymentWarningMessage:!1}),"redblack"===this.props.config.options.strategy&&(this.setState({showRedBlackWarningMessage:!0}),this.updateProps("options.strategy","bluegreen")),"bluegreen"===this.props.config.options.strategy&&this.props.isDeploymentKind&&this.setState({showBlueGreenDeploymentWarningMessage:!0})}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,{showBlueGreenDeploymentWarningMessage:n}=this.state;return Je.createElement(Je.Fragment,null,Je.createElement("h4",null,"Rollout Strategy Options"),Je.createElement(M,{helpKey:"kubernetes.manifest.rolloutStrategyOptions",fieldColumns:8,label:"Enable"},Je.createElement("div",{className:"checkbox"},Je.createElement("label",null,Je.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&&Je.createElement(Je.Fragment,null,Je.createElement(M,{fieldColumns:8,label:"Service(s) Namespace"},Je.createElement(Sn,{createable:!0,onChange:e=>this.onConfigChange("options.namespace",e),accounts:this.props.accounts,selectedAccount:this.props.selectedAccount,selectedNamespace:e.options.namespace||""})),Je.createElement(M,{fieldColumns:8,label:"Service(s)"},Je.createElement(nt,{clearable:!1,multi:!0,onChange:e=>this.onConfigChange("options.services",Ke(e,"value")),options:this.getServiceOptions(),value:e.options.services})),Je.createElement(M,{fieldColumns:8,label:"Traffic"},Je.createElement("div",{className:"checkbox"},Je.createElement("label",null,Je.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"))),Je.createElement(M,{fieldColumns:8,helpKey:"kubernetes.manifest.rolloutStrategy",label:"Strategy"},Je.createElement(tt,{id:"strategyDropdown",clearable:!1,onChange:e=>this.onConfigChange("options.strategy",e.key),options:wn,optionRenderer:this.strategyOptionRenderer,placeholder:"None",value:e.options.strategy,valueKey:"key",valueRenderer:e=>Je.createElement(Je.Fragment,null,e.label)}),t&&Je.createElement("p",{id:"redBlackWarning",style:{color:"orange"}},"Warning: Red/black strategy is deprecated and will be removed soon. We automatically selected blue/green instead!"),n&&Je.createElement("p",{id:"blueGreenWarning",style:{color:"orange"}},"Warning: Blue/Green strategy may cause downtime for Deployment kind!"))))}}class xn extends Je.Component{constructor(e){super(e),this.excludedManifestArtifactTypes=[L.DOCKER_IMAGE,L.KUBERNETES,L.FRONT50_PIPELINE_TEMPLATE,L.MAVEN_FILE],this.getSourceOptions=()=>Ke([mt.TEXT,mt.ARTIFACT],(e=>({label:Ve(e),value:e}))),this.handleCopy=e=>{this.props.formik.setFieldValue("manifests",[e]),this.setState({rawManifest:K([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)))};const t=this.props.formik.values,n=Ge(e.formik.values,"manifests"),a=Ge(e.formik.values,"source")===mt.TEXT;this.state={rawManifest:!Pe(n)&&a?K(n):"",overrideNamespace:""!==Ge(t,"namespaceOverride","")}}overrideNamespaceChange(e){e||this.props.formik.setFieldValue("namespaceOverride",""),this.setState({overrideNamespace:e})}render(){const e=this.props.formik.values;return Je.createElement("div",{className:"form-horizontal"},Je.createElement("h4",null,"Basic Settings"),Je.createElement(ft,{accounts:this.props.accounts,onAccountSelect:e=>this.props.formik.setFieldValue("account",e),selectedAccount:e.account}),Je.createElement(M,{label:"Override Namespace"},Je.createElement(q,{checked:this.state.overrideNamespace,onChange:e=>this.overrideNamespaceChange(e.target.checked)})),this.state.overrideNamespace&&Je.createElement(M,{label:"Namespace"},Je.createElement(Sn,{createable:!0,accounts:this.props.accounts,selectedAccount:e.account,selectedNamespace:e.namespaceOverride||"",onChange:e=>this.props.formik.setFieldValue("namespaceOverride",e)})),Je.createElement("hr",null),Je.createElement("h4",null,"Manifest Configuration"),Je.createElement(M,{label:"Manifest Source",helpKey:"kubernetes.manifest.source"},Je.createElement(U,{options:this.getSourceOptions(),onChange:e=>this.props.formik.setFieldValue("source",e.target.value),value:e.source})),e.source===mt.TEXT&&Je.createElement(M,{label:"Manifest"},Je.createElement(yn,{application:this.props.application,handleCopy:this.handleCopy}),Je.createElement(o,{onChange:this.handleRawManifestChange,value:this.state.rawManifest})),e.source===mt.ARTIFACT&&Je.createElement(Je.Fragment,null,Je.createElement(V,{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}),Je.createElement(M,{label:"Expression Evaluation",helpKey:"kubernetes.manifest.skipExpressionEvaluation"},Je.createElement(q,{checked:!0===e.skipExpressionEvaluation,onChange:e=>this.props.formik.setFieldValue("skipExpressionEvaluation",e.target.checked),text:"Skip SpEL expression evaluation"}))),Je.createElement(M,{label:"Required Artifacts to Bind",helpKey:"kubernetes.manifest.requiredArtifactsToBind"},Je.createElement(En,{bindings:this.getRequiredArtifacts(),onChangeBindings:this.onRequiredArtifactsChanged,pipeline:this.props.pipeline,stage:e})),Je.createElement("hr",null),Je.createElement(Dn,{accounts:this.props.accounts,config:e.trafficManagement,onConfigChange:e=>this.props.formik.setFieldValue("trafficManagement",e),selectedAccount:e.account,isDeploymentKind:this.state.rawManifest.includes("kind: Deployment")}))}}class Nn extends Je.Component{constructor(e){super(e),this.destroy$=new at,this.fetchAccounts=()=>{st(s.getAllAccountDetailsForProvider("kubernetes")).pipe(ot(this.destroy$)).subscribe((e=>{this.setState({accounts:e})}))},this.state={accounts:[]};const{stage:t}=e,n=Me(t);n.source||(n.source=mt.TEXT),n.skipExpressionEvaluation||(n.skipExpressionEvaluation=!1),n.trafficManagement||(n.trafficManagement=Mn),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 Je.createElement(j,{...this.props,stage:this.stage,onChange:this.props.updateStage,render:e=>Je.createElement(xn,{...e,accounts:this.state.accounts})})}}const Tn={available:"success",stable:"success",paused:"warn",failed:"danger"};class Gn extends Je.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=Tn[t]||"",r=a.state,i=!r&&a.message;return Je.createElement("span",{key:n},r&&Je.createElement("span",{title:a.message,className:`pill ${s}`},t),i&&Je.createElement("span",{title:a.message,className:"pill warn"},t),(r||i)&&Je.createElement("span",null," "))}))}}class Fn extends Je.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 Re(Ge(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||"kubernetesResource"!==e||(s.region=n),s.region&&""!==s.region||(s.region="_"),s}loadUrl(){const e=Ge(this.props,["manifest","manifest","kind"],""),{accountId:t}=this.props;s.getAccountDetails(t).then((t=>{const n=this.spinnakerKindFromKubernetesKind(e,t.spinnakerKindMap),a=this.spinnakerKindStateMap[n]||"kubernetesResource",s=this.getStateParams(a),r=_.$state.href(`home.applications.application.insight.clusters.${a}`,s);this.setState({url:r})}))}render(){return this.canOpen()?Je.createElement("a",{href:this.state.url,className:"clickable"},this.props.linkName):null}}function Rn({account:e,manifest:t}){return Je.createElement(Je.Fragment,null,Je.createElement("dl",{className:"manifest-status",key:"manifest-status"},Je.createElement("dt",null,t.manifest.kind),Je.createElement("dd",null,Je.createElement(H,{displayText:!0,text:t.manifest.metadata.name,toolTip:`Copy ${t.manifest.metadata.name}`})," ",Je.createElement(Gn,{manifest:t}))),Je.createElement("div",{className:"manifest-support-links",key:"manifest-support-links"},Je.createElement(W,{linkName:"YAML",manifestText:He(t.manifest),modalTitle:t.manifest.metadata.name}),Je.createElement(Fn,{linkName:"Details",manifest:t,accountId:e})),Je.createElement("div",{className:"manifest-events pad-left",key:"manifest-events"},Je.createElement(Rt,{manifest:t})))}It("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");const $n=class{static subscribe(e,t,n){return $n.updateManifest(t,n),e.onRefresh(null,(()=>$n.updateManifest(t,n)))}static updateManifest(e,t){C.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(e,t){return{account:t,name:$n.scopedKind(e)+" "+e.metadata.name,location:null==e.metadata.namespace?"_":e.metadata.namespace}}static apiGroup(e){const t=(e.apiVersion||"_").split("/");return t.length<2?"":t[0]}static isCRDGroup(e){return!$n.BUILT_IN_GROUPS.includes($n.apiGroup(e))}static scopedKind(e){return $n.isCRDGroup(e)?e.kind+"."+$n.apiGroup(e):e.kind}};let In=$n;In.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"];class Pn extends Je.Component{constructor(e){super(e),this.state={subscriptions:[],manifestIds:[]}}componentDidMount(){this.componentDidUpdate(this.props,this.state)}componentWillUnmount(){this.unsubscribeAll()}componentDidUpdate(e,t){const n=Ge(this.props.stage,["context","outputs.manifests"],[]).filter((e=>!!e)),a=n.map((e=>In.manifestIdentifier(e))).sort();if(t.manifestIds.join("")!==a.join("")){this.unsubscribeAll();const e=n.map((e=>{const t=In.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=In.stageManifestToManifestParams(t,this.props.stage.context.account);return In.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:Ge(e,"metadata.name",""),moniker:null,account:t,cloudProvider:"kubernetes",location:Ge(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 Je.createElement(T,{name:e,current:t},Je.createElement(G,{stage:n,message:n.failureMessage}),a&&Je.createElement("div",{className:"row"},Je.createElement("div",{className:"col-md-12"},Je.createElement("div",{className:"well alert alert-info"},a.map((e=>{const t=e.manifest.metadata.uid||In.manifestIdentifier(e.manifest);return Je.createElement(Rn,{key:t,manifest:e,account:n.context.account})}))))))}}Pn.title="deployStatus",F.pipeline.registerStage({label:"Deploy (Manifest)",description:"Deploy a Kubernetes manifest yaml/json file.",key:"deployManifest",cloudProvider:"kubernetes",component:Nn,executionDetailsSections:[Pn,R,X],producesArtifacts:!0,supportsCustomTimeout:!0,validators:[{type:"requiredField",fieldName:"account",fieldLabel:"Account"},{type:"requiredField",fieldName:"source",fieldLabel:"Source"},{type:"custom",validate:(e,t)=>{const n=Ge(t,"trafficManagement.enabled",!1),a=Ge(t,"trafficManagement.options.services",[]);if(n&&Pe(a))return"Select at least one <strong>Service</strong> to enable Spinnaker-managed rollout strategy options.";if(n&&t.source===mt.TEXT){const e=Ge(t,"manifests",[]).filter((e=>"ReplicaSet"===e.kind)),n=Ge(t,"trafficManagement.options.strategy"),a=parseInt(Ge(e,[0,"metadata","annotations","strategy.spinnaker.io/max-version-history"]),10);if(n===An.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>strategy.spinnaker.io/max-version-history</strong> annotation to a value greater than or equal to 2."}return null}}],accountExtractor:e=>e.account?[e.account]:[],configAccountExtractor:e=>e.account?[e.account]:[],artifactExtractor:J.accumulateArtifacts(["manifestArtifactId","requiredArtifactIds"]),artifactRemover:Z.removeArtifactFromFields(["manifestArtifactId","requiredArtifactIds"])});const Bn=e=>Je.createElement("div",{className:"form-horizontal"},Je.createElement(M,{label:"Record Patch Annotation",helpKey:"kubernetes.manifest.patch.record"},Je.createElement(q,{checked:e.record,onChange:t=>e.onRecordChange(t.target.checked)})),Je.createElement(M,{label:"Merge Strategy",helpKey:"kubernetes.manifest.patch.mergeStrategy",fieldColumns:3},Je.createElement(tt,{clearable:!1,value:e.strategy,options:["strategic","json","merge"].map((e=>({value:e,label:e}))),onChange:t=>e.onStrategyChange(t.value)})));class On extends Je.Component{constructor(e){super(e),this.excludedManifestArtifactTypes=[L.DOCKER_IMAGE,L.KUBERNETES,L.FRONT50_PIPELINE_TEMPLATE,L.EMBEDDED_BASE64,L.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=()=>Ke([mt.TEXT,mt.ARTIFACT],(e=>({label:Ve(e),value:e})));const t=Ge(e.formik.values,"patchBody"),n=Ge(e.formik.values,"source")===mt.TEXT;this.state={rawManifest:!Pe(t)&&n?K(t):""}}render(){const e=this.props.formik.values;return Je.createElement("div",{className:"container-fluid form-horizontal"},Je.createElement("h4",null,"Resource to Patch"),Je.createElement(sn,{application:this.props.application,modes:[Ht.Static,Ht.Dynamic],onChange:this.onManifestSelectorChange,selector:e}),Je.createElement("hr",null),Je.createElement("h4",null,"Patch Content"),Je.createElement(M,{label:"Manifest Source",helpKey:"kubernetes.manifest.source"},Je.createElement(U,{options:this.getSourceOptions(),onChange:e=>this.props.formik.setFieldValue("source",e.target.value),value:e.source})),e.source===mt.TEXT&&Je.createElement(M,{label:"Manifest"},Je.createElement(o,{onChange:this.handleRawManifestChange,value:this.state.rawManifest})),e.source===mt.ARTIFACT&&Je.createElement(Je.Fragment,null,Je.createElement(V,{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})),Je.createElement(M,{label:"Required Artifacts to Bind",helpKey:"kubernetes.manifest.requiredArtifactsToBind"},Je.createElement(En,{bindings:this.getRequiredArtifacts(),onChangeBindings:this.onRequiredArtifactsChanged,pipeline:this.props.pipeline,stage:e})),Je.createElement("hr",null),Je.createElement("h4",null,"Patch Options"),Je.createElement(Bn,{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 Ln extends Je.Component{constructor(e){super(e),Be(e.stage,{app:e.application.name,source:mt.TEXT,options:{record:!0,mergeStrategy:"strategic"},cloudProvider:"kubernetes"}),Be(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 Je.createElement(j,{...this.props,stage:this.stage,onChange:this.props.updateStage,render:e=>Je.createElement(On,{...e,stageFieldUpdated:this.props.stageFieldUpdated})})}}class zn extends Pn{}zn.title="PatchStatus";F.pipeline.registerStage({label:"Patch (Manifest)",description:"Patch a Kubernetes object in place.",key:"patchManifest",cloudProvider:"kubernetes",component:Ln,executionDetailsSections:[zn,R,X],producesArtifacts:!0,supportsCustomTimeout:!0,validators:bn("Patch (Manifest)"),artifactExtractor:J.accumulateArtifacts(["manifestArtifactId","requiredArtifactIds"]),artifactRemover:Z.removeArtifactFromFields(["manifestArtifactId","requiredArtifactIds"])});class Kn extends Je.Component{constructor(e){super(e),this.state={credentials:[]},this.excludedManifestArtifactTypes=[L.DOCKER_IMAGE,L.KUBERNETES,L.FRONT50_PIPELINE_TEMPLATE,L.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=()=>Ke([mt.TEXT,mt.ARTIFACT],(e=>({label:Ve(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=mt.TEXT)}initRawManifest(){const{stage:e}=this.props;e.manifest&&this.setState({rawManifest:K([e.manifest])})}componentDidMount(){this.props.updateStageField({cloudProvider:"kubernetes"}),s.getAllAccountDetailsForProvider("kubernetes").then((e=>{this.setState({credentials:e})})),this.initRawManifest()}logSourceForm(){const{stage:e}=this.props;return Je.createElement(M,{label:"Container Name",helpKey:"kubernetes.runJob.captureSource.containerName"},Je.createElement("input",{className:"form-control input-sm",type:"text",value:e.propertyFile,onChange:this.updatePropertyFile}))}artifactForm(){const{stage:e,pipeline:t}=this.props;return Je.createElement(M,{label:"Artifact"},Je.createElement(O,{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=Je.createElement("div",null);return"propertyFile"===e.consumeArtifactSource?t=this.logSourceForm():"artifact"===e.consumeArtifactSource&&(t=this.artifactForm()),Je.createElement("div",{className:"container-fluid form-horizontal"},Je.createElement("h4",null,"Basic Settings"),Je.createElement(ft,{selectedAccount:e.account||"",accounts:this.state.credentials,onAccountSelect:e=>this.accountChanged(e)}),Je.createElement("h4",null,"Manifest Configuration"),Je.createElement(M,{label:"Manifest Source",helpKey:"kubernetes.manifest.source"},Je.createElement(U,{options:this.getSourceOptions(),onChange:e=>this.props.updateStageField({source:e.target.value}),value:e.source})),e.source===mt.TEXT&&Je.createElement(o,{value:this.state.rawManifest,onChange:this.handleRawManifestChange}),e.source===mt.ARTIFACT&&Je.createElement(Je.Fragment,null,Je.createElement(V,{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})),Je.createElement(M,{label:"Required Artifacts to Bind",helpKey:"kubernetes.manifest.requiredArtifactsToBind"},Je.createElement(En,{bindings:this.getRequiredArtifacts(),onChangeBindings:this.onRequiredArtifactsChanged,pipeline:this.props.pipeline,stage:e})),Je.createElement("h4",null,"Output"),Je.createElement(M,{label:"Capture Output From",helpKey:"kubernetes.runJob.captureSource"},Je.createElement("div",null,Je.createElement(tt,{clearable:!1,options:this.outputOptions,value:e.consumeArtifactSource,onChange:this.sourceChanged}))),t)}}class qn extends Je.Component{createdPodNames(e){return $e(e,(e=>e.status.startTime)).map((e=>e.name))}render(){const{stage:e,name:t,current:n}=this.props,{context:a}=e,s=Ge(e,["context","jobStatus","location"],""),r=s?Ge(a,["deploy.jobs",s])[0]:"",i=Ge(e,["context","execution","logs"]),o=Ge(e.context,"jobStatus.pods",[]),l=(Pe(o)?[Ge(e,["context","jobStatus","mostRecentPodName"],"")]:this.createdPodNames(o)).map((e=>new Q(e)));return Je.createElement(T,{name:t,current:n},Je.createElement(G,{stage:e,message:e.failureMessage}),Je.createElement("div",{className:"row"},Je.createElement("div",{className:"col-md-9"},Je.createElement("dl",{className:"dl-narrow dl-horizontal"},Je.createElement("dt",null,"Account"),Je.createElement("dd",null,Je.createElement(I,{account:a.account})),s&&Je.createElement(Je.Fragment,null,Je.createElement("dt",null,"Namespace"),Je.createElement("dd",null,e.context.jobStatus.location),Je.createElement("dt",null,"Logs"),Je.createElement("dd",null,Je.createElement(Y,{deployedName:r,account:this.props.stage.context.account,location:s,application:this.props.application,externalLink:i,podNamesProviders:l}))),!s&&Je.createElement("div",{className:"well"},"Collecting additional details...")))))}}qn.title="runJobConfig",F.pipeline.registerStage({label:"Run Job (Manifest)",description:"Run a Kubernetes Job manifest yaml/json file.",key:"runJobManifest",alias:"runJob",addAliasToConfig:!0,cloudProvider:"kubernetes",component:Kn,executionDetailsSections:[qn,Pn,R],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.":""}]});class Un{constructor(e){if(this.$scope=e,this.handleManifestSelectorChange=()=>{this.$scope.$applyAsync()},this.application=this.$scope.$parent.application,this.$scope.stage.isNew){const e={location:"",account:"",manifestName:"",app:this.application.name};Object.assign(this.$scope.stage,e),this.$scope.stage.cloudProvider="kubernetes"}}}Un.$inject=["$scope"];const Vn="Find Artifacts From Resource (Manifest)";e("spinnaker.kubernetes.v2.pipeline.stage.findArtifactsFromResource",["spinnaker.kubernetes.v2.manifest.selector.component"]).config((()=>{F.pipeline.registerStage({label:Vn,description:"Finds artifacts from a Kubernetes resource.",key:"findArtifactsFromResource",cloudProvider:"kubernetes",templateUrl:"kubernetes/src/pipelines/stages/findArtifactsFromResource/findArtifactsFromResourceConfig.html",controller:"KubernetesV2FindArtifactsFromResourceConfigCtrl",controllerAs:"ctrl",executionDetailsSections:[R,X],producesArtifacts:!0,validators:bn(Vn)})})).controller("KubernetesV2FindArtifactsFromResourceConfigCtrl",Un),window.angular.module("ng").run(["$templateCache",function(e){e.put("kubernetes/src/pipelines/stages/findArtifactsFromResource/findArtifactsFromResourceConfig.html",'<div class="form-horizontal">\n <h4>Manifest</h4>\n <div class="horizontal-rule"></div>\n <kubernetes-manifest-selector\n modes="[\'static\', \'dynamic\']"\n application="ctrl.application"\n on-change="ctrl.handleManifestSelectorChange"\n selector="ctrl.$scope.stage"\n ></kubernetes-manifest-selector>\n</div>\n')}]);class jn{constructor(e){if(this.$scope=e,this.handleManifestSelectorChange=()=>{this.$scope.$applyAsync()},this.$scope.stage.isNew){this.application=this.$scope.$parent.application;const e={location:"",account:""};Be(this.$scope.stage,e);const t={replicas:null,app:this.application.name};Be(this.$scope.stage,t),this.$scope.stage.cloudProvider="kubernetes"}}}jn.$inject=["$scope"];e("spinnaker.kubernetes.v2.pipeline.stage.scaleManifestStage",["spinnaker.kubernetes.v2.kubernetes.manifest.scale.settingsForm.component"]).config((()=>{F.pipeline.registerStage({label:"Scale (Manifest)",description:"Scale a Kubernetes object created from a manifest.",key:"scaleManifest",cloudProvider:"kubernetes",templateUrl:"kubernetes/src/pipelines/stages/scaleManifest/scaleManifestConfig.html",controller:"KubernetesV2ScaleManifestConfigCtrl",controllerAs:"ctrl",executionDetailsSections:[gn("scaleManifest"),R],accountExtractor:e=>e.account?[e.account]:[],configAccountExtractor:e=>e.account?[e.account]:[],validators:[{type:"requiredField",fieldName:"location",fieldLabel:"Namespace"},{type:"requiredField",fieldName:"account",fieldLabel:"Account"},{type:"requiredField",fieldName:"replicas",fieldLabel:"Replicas"}]})})).controller("KubernetesV2ScaleManifestConfigCtrl",jn),window.angular.module("ng").run(["$templateCache",function(e){e.put("kubernetes/src/pipelines/stages/scaleManifest/scaleManifestConfig.html",'<div class="form-horizontal">\n <h4>Manifest</h4>\n <div class="horizontal-rule"></div>\n <kubernetes-manifest-selector\n modes=\'["static", "dynamic"]\'\n application="ctrl.application"\n on-change="ctrl.handleManifestSelectorChange"\n selector="ctrl.$scope.stage"\n ></kubernetes-manifest-selector>\n <h4>Settings</h4>\n <div class="horizontal-rule"></div>\n <kubernetes-scale-manifest-settings-form settings="ctrl.$scope.stage"></kubernetes-scale-manifest-settings-form>\n</div>\n')}]);class _n extends Je.Component{constructor(){super(...arguments),this.componentDidMount=()=>{Be(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 Je.createElement("div",{className:"form-horizontal"},Je.createElement("h4",null,"Manifest"),Je.createElement("div",{className:"horizontal-rule"}),Je.createElement(sn,{application:this.props.application,selector:e,modes:[Ht.Static,Ht.Dynamic],onChange:this.onChange,includeSpinnakerKinds:["serverGroups","serverGroupManagers"]}))}}e("spinnaker.kubernetes.v2.pipeline.stage.disableManifestStage",[ee]).config((()=>{F.pipeline.registerStage({label:"Disable (Manifest)",description:"Disable a Kubernetes manifest.",key:"disableManifest",cloudProvider:"kubernetes",component:_n,executionDetailsSections:[gn("disableManifest"),R],supportsCustomTimeout:!0,accountExtractor:e=>e.account?[e.account]:[],configAccountExtractor:e=>e.account?[e.account]:[],validators:bn("Disable (Manifest)")})}));e("spinnaker.kubernetes.v2.pipeline.stage.enableManifestStage",[ee]).config((()=>{F.pipeline.registerStage({label:"Enable (Manifest)",description:"Enable a Kubernetes manifest.",key:"enableManifest",cloudProvider:"kubernetes",component:_n,executionDetailsSections:[gn("enableManifest"),R],supportsCustomTimeout:!0,accountExtractor:e=>e.account?[e.account]:[],configAccountExtractor:e=>e.account?[e.account]:[],validators:bn("Enable (Manifest)")})}));class Hn{constructor(e){this.$scope=e,this.handleManifestSelectorChange=()=>{this.$scope.$applyAsync()},this.$scope.stage.isNew&&Object.assign(this.$scope.stage,{location:"",account:"",cloudProvider:"kubernetes",numRevisionsBack:1})}}Hn.$inject=["$scope"];e("spinnaker.kubernetes.v2.pipeline.stage.undoRolloutManifestStage",[]).config((()=>{F.pipeline.registerStage({label:"Undo Rollout (Manifest)",description:"Rollback a manifest a target number of revisions.",key:"undoRolloutManifest",cloudProvider:"kubernetes",templateUrl:"kubernetes/src/pipelines/stages/undoRolloutManifest/undoRolloutManifestConfig.html",controller:"KubernetesV2UndoRolloutManifestConfigCtrl",controllerAs:"ctrl",accountExtractor:e=>e.account?[e.account]:[],configAccountExtractor:e=>e.account?[e.account]:[],validators:[{type:"requiredField",fieldName:"location",fieldLabel:"Namespace"},{type:"requiredField",fieldName:"account",fieldLabel:"Account"},{type:"requiredField",fieldName:"numRevisionsBack",fieldLabel:"Number of Revisions"},{type:"manifestSelector"}]})})).controller("KubernetesV2UndoRolloutManifestConfigCtrl",Hn),window.angular.module("ng").run(["$templateCache",function(e){e.put("kubernetes/src/pipelines/stages/undoRolloutManifest/undoRolloutManifestConfig.html",'<div class="form-horizontal">\n <h4>Manifest</h4>\n <div class="horizontal-rule"></div>\n <kubernetes-manifest-selector\n on-change="ctrl.handleManifestSelectorChange"\n selector="stage"\n ></kubernetes-manifest-selector>\n <h4>Settings</h4>\n <div class="form-horizontal">\n <div class="form-group form-inline">\n <div class="col-md-3 sm-label-right">\n Revisions Back\n <help-field key="kubernetes.manifest.undoRollout.revisionsBack"></help-field>\n </div>\n <div class="col-md-4">\n <div class="input-group">\n <input\n type="number"\n class="form-control input-sm highlight-pristine"\n ng-model="stage.numRevisionsBack"\n min="1"\n />\n <span class="input-group-addon">revision<span ng-if="ctrl.$scope.stage.numRevisionsBack !== 1">s</span></span>\n </div>\n </div>\n </div>\n </div>\n</div>\n')}]);te.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 Wn=e=>se("applications").path(e.name,"rawResources").get(),Xn=e=>(t,n)=>e.resolve(n);e("spinnaker.core.rawresource.dataSource",[]).run(["$q",e=>{ne.registerDataSource({key:"k8s",label:"Kubernetes",category:ae,sref:".insight.k8s",primary:!0,icon:"fas fa-xs fa-fw fa-th-large",iconName:"spMenuK8s",loader:Wn,onLoad:Xn(e),providerField:"cloudProvider",credentialsField:"account",regionField:"region",description:"Collections of kubernetes resources",defaultData:[]})}]);const Jn=class{static namespaceDisplayName(e){return null===e||""===e?Jn.GLOBAL_LABEL:e}static resourceKey(e){return null===e?"":""===e.namespace?e.account+"-"+e.kind+"-"+e.name:e.account+"-"+e.namespace+"-"+e.kind+"-"+e.name}};let Zn=Jn;Zn.GLOBAL_LABEL="(global)";const Qn=class{constructor(){this.subscribers=[]}static getInstance(e){let t=Qn.intances[e];return Qn.intances[e]||(Qn.intances[e]=new Qn,t=Qn.intances[e]),t}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)))}};let Yn=Qn;Yn.intances={};It(".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 ea extends Je.Component{constructor(e){super(e)}render(){const{account:e,name:t,region:n}=this.props.resource,a={account:e,name:t,region:n};return Je.createElement(dt,{class:"active"},Je.createElement(ut,{to:".rawResourceDetails",params:a},Je.createElement("div",{className:"RawResource card clickable clickable-row"},Je.createElement("h4",{className:"title"},Je.createElement(re,{provider:"kubernetes",height:"20px",width:"20px"}),this.props.resource.kind," ",this.props.resource.displayName),Je.createElement("div",{className:"details"},Je.createElement("div",{className:"column"},Je.createElement("div",{className:"title"},"account:"),Je.createElement("div",null,this.props.resource.account)),Je.createElement("div",{className:"column"},Je.createElement("div",{className:"title"},"namespace:"),Je.createElement("div",null,Zn.namespaceDisplayName(this.props.resource.namespace))),Je.createElement("div",{className:"column"},Je.createElement("div",{className:"title"},"apiVersion:"),Je.createElement("div",null,this.props.resource.apiVersion))))))}}class ta extends Je.Component{constructor(e){super(e),this.state={open:!0}}render(){return Je.createElement("div",{className:"RawResourceGroup"},Je.createElement("div",{className:"clickable sticky-header header",onClick:this.onHeaderClick.bind(this)},Je.createElement("span",{className:"glyphicon pipeline-toggle glyphicon-chevron-"+(this.state.open?"down":"right")}),Je.createElement("div",{className:"shadowed"},Je.createElement("h4",{className:"group-title"},this.props.title))),Je.createElement("div",{className:"items"+(this.state.open?"":" hidden")},this.props.children))}onHeaderClick(){this.setState({open:!this.state.open})}}class na extends Je.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?Zn.namespaceDisplayName(e):e}render(){const e=this.buildGroupByModel(this.props.resources);return Je.createElement("div",{className:"RawResourceGroups"},Object.entries(e).map((([e,t])=>"undefined"!==e?Je.createElement(ta,{title:this.groupTitle(e),key:e},t.map((e=>Je.createElement(ea,{resource:e,key:Zn.resourceKey(e)})))):Je.createElement(Je.Fragment,null))))}}It(".K8sResources {\n width: 100%;\n}\n.K8sResources .StandardFieldLayout {\n width: 25%;\n}\n.K8sResources .StandardFieldLayout .StandardFieldLayout_Label {\n min-width: 72px;\n}\n");class aa extends Je.Component{constructor(e){super(e),this.filterPubSub=Yn.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("k8s"),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 Je.createElement("div",{className:"K8sResources"},Je.createElement("div",{className:"header row"},Je.createElement(ie,{onChange:this.groupByChanged,value:this.state.groupBy.charAt(0).toUpperCase()+this.state.groupBy.substr(1),name:"groupBy",label:"Group By",input:t=>Je.createElement(oe,{...t,inputClassName:"groupby",stringOptions:e,clearable:!1})})),Je.createElement("div",{className:"content"},"none"===this.state.groupBy?Je.createElement(Je.Fragment,null,this.state.rawResources.filter((e=>this.matchFilters(e))).map((e=>Je.createElement(ea,{key:Zn.resourceKey(e),resource:e})))):Je.createElement(na,{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 sa extends Je.Component{constructor(e){super(e),this.filterPubSub=Yn.getInstance(this.props.app.name),this.dataSource=this.props.app.getDataSource("k8s"),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[Zn.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 Je.createElement("div",{className:"content"},Je.createElement(le,{heading:"Kind",expanded:!0},Object.keys(this.state.kinds).sort(((e,t)=>e.localeCompare(t))).map((e=>Je.createElement(ce,{heading:e,key:e,sortFilterType:this.state.kinds,onChange:this.onCheckbox.bind(this)})))),Je.createElement(le,{heading:"Account",expanded:!0},Object.keys(this.state.accounts).sort(((e,t)=>e.localeCompare(t))).map((e=>Je.createElement(ce,{heading:e,key:e,sortFilterType:this.state.accounts,onChange:this.onCheckbox.bind(this)})))),Je.createElement(le,{heading:"Namespace",expanded:!0},Object.keys(this.state.displayNamespaces).sort(((e,t)=>e.localeCompare(t))).map((e=>Je.createElement(ce,{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==Zn.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)}}de("k8s.rawResource.details");class ra extends Je.Component{constructor(e){super(e),this.destroy$=new at,this.props$=new at,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};S.confirm({header:"Are you sure you want to delete the "+l+" "+o+"?",buttonText:"Delete",account:r,taskMonitorConfig:c,submitMethod:()=>{ue.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 m.deleteManifest(e,this.props.app)}})},this.handleEditClick=()=>{ue.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=In.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;Ct.buildNewManifestCommand(e,a.manifest,{app:n},t).then((t=>{kt.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,u=null==(n=null==l?void 0:l.manifest)?void 0:n.metadata,p=null==u?void 0:u.name,m=Ge(u,"creationTimestamp")&&et.fromISO(u.creationTimestamp).toMillis();return Je.createElement("div",{className:"details-panel"},Je.createElement("div",{className:"header"},Je.createElement("div",{className:"close-button"},Je.createElement(ut,{to:"^"},Je.createElement("span",{className:"glyphicon glyphicon-remove"}))),this.state.loading?Je.createElement("div",{className:"horizontal center middle"},Je.createElement(pe,{size:"small"})):Je.createElement("div",{className:"header-text horizontal middle"},Je.createElement(re,{provider:"kubernetes",height:"36px",width:"36px"}),Je.createElement("h3",{className:"horizontal middle space-between flex-1"},c," ",p)),!this.state.loading&&h.kubernetesAdHocInfraWritesEnabled&&Je.createElement("div",{className:"actions"},Je.createElement(ct,{className:"dropdown",id:"resource-actions-dropdown"},Je.createElement(ct.Toggle,{className:"btn btn-sm btn-primary dropdown-toggle"},Je.createElement("span",null,c," Actions")),Je.createElement(ct.Menu,null,Je.createElement("li",{key:"action-edit",id:"resource-action-edit"},Je.createElement("a",{onClick:this.handleEditClick},"Edit")),Je.createElement("li",{key:"action-delete",id:"resource-action-delete"},Je.createElement("a",{onClick:this.deletedRawResource},"Delete")))))),!this.state.loading&&Je.createElement("div",{className:"content"},Je.createElement(me,{heading:"Information",defaultExpanded:!0},Je.createElement("dl",{className:"dl-horizontal dl-narrow"},Je.createElement("dt",null,"Created"),Je.createElement("dd",null,he(m)),Je.createElement("dt",null,"Account"),Je.createElement("dd",null,Je.createElement(I,{account:i})),Je.createElement("dt",null,"API Version"),Je.createElement("dd",null,d),Je.createElement("dt",null,"Kind"),Je.createElement("dd",null,c),Je.createElement("dt",null,"Namespace"),Je.createElement("dd",null,Zn.namespaceDisplayName(o)))),Je.createElement(me,{key:"status",heading:"status",defaultExpanded:!0},Je.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=>Je.createElement("li",{key:e.type+e.lastTransitionTime,style:{marginBottom:"10px"}},Je.createElement(rn,{condition:e})))))),Je.createElement(me,{key:"events",heading:"events",defaultExpanded:!0},Je.createElement(Rt,{manifest:l})),Je.createElement(me,{key:"labels",heading:"labels",defaultExpanded:!0},Je.createElement(Pt,{manifest:Ge(l,["manifest"],{})}))))}}e("spinnaker.kubernetes.rawresource.states",[Ce]).config(["applicationStateProvider",e=>{const t={name:"rawResourceDetails",url:"/rawResourceDetails/:account/:region/:name",views:{"detail@../insight":{component:ra,$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:sa,$type:"react"},master:{component:aa,$type:"react"}},data:{pageTitleSection:{title:"Kubernetes"}},children:[]};e.addInsightState(n),e.addInsightDetailState(t)}]);const ia="spinnaker.kubernetes.rawresource";e("spinnaker.kubernetes.rawresource",["spinnaker.core.rawresource.dataSource","spinnaker.kubernetes.rawresource.states"]);class oa extends Je.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=In.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=Ge(e,["manifest","metadata"],null),n=Ge(t,"creationTimestamp")&&et.fromISO(t.creationTimestamp).toMillis();return Je.createElement("div",{className:"details-panel"},Je.createElement("div",{className:"header"},Je.createElement("div",{className:"close-button"},Je.createElement("a",{className:"btn btn-link"},Je.createElement(ut,{to:"^"},Je.createElement("span",{className:"glyphicon glyphicon-remove"})))),this.state.loading?Je.createElement("div",{className:"horizontal center middle"},Je.createElement(pe,{size:"small"})):Je.createElement("div",{className:"header-text horizontal middle"},Je.createElement(re,{provider:"kubernetes",height:"36px",width:"36px"}),Je.createElement("h3",{className:"horizontal middle space-between flex-1"},Ge(t,["name"],"")))),!this.state.loading&&Je.createElement("div",{className:"content"},Je.createElement(me,{heading:"Information"},Je.createElement("dl",{className:"dl-horizontal dl-narrow"},Je.createElement("dt",null,"Created"),Je.createElement("dd",null,he(n)),Je.createElement("dt",null,"Account"),Je.createElement("dd",null,Je.createElement(I,{account:Ge(e,["account"],"")})),Je.createElement("dt",null,"Namespace"),Je.createElement("dd",null,Ge(t,["namespace"],"")),Je.createElement("dt",null,"Kind"),Je.createElement("dd",null,Ge(e,["manifest","kind"],"")))),Je.createElement(me,{key:"status",heading:"status",defaultExpanded:!0},Je.createElement("ul",null,Ge(e,["manifest","status","conditions"],[]).map((e=>Je.createElement("li",{key:e.type+e.lastTransitionTime,style:{marginBottom:"10px"}},Je.createElement(rn,{condition:e})))))),Je.createElement(me,{key:"events",heading:"events",defaultExpanded:!0},Je.createElement(Rt,{manifest:e})),Je.createElement(me,{key:"labels",heading:"labels",defaultExpanded:!0},Je.createElement(Pt,{manifest:Ge(e,["manifest"],{})}))))}}e("spinnaker.core.kubernetesResource.states",[Ce]).config(["applicationStateProvider",e=>{const t={name:"kubernetesResource",url:"/manifest/:provider/:accountId/:region/:kubernetesResource",views:{"detail@../insight":{component:oa,$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 la{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=!h.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(){Ct.buildNewManifestCommand(this.app,this.manifest.manifest,this.securityGroup.moniker,this.securityGroup.account).then((e=>{kt.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),C.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"}))}}la.$inject=["$uibModal","$state","$scope","securityGroupReader","resolvedSecurityGroup","app","$q"];const ca="spinnaker.kubernetes.securityGroupDetails.controller";e("spinnaker.kubernetes.securityGroupDetails.controller",[fe]).controller("kubernetesV2SecurityGroupDetailsCtrl",la),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 da{resolveIndexedSecurityGroup(e,t,n){return e[t.account][t.region][n]}}class ua{constructor(e){this.$q=e}normalizeSecurityGroup(e){return this.$q.resolve(e)}}ua.$inject=["$q"];e("spinnaker.kubernetes.securityGroupTransformer",[]).service("kubernetesV2SecurityGroupTransformer",ua);const pa=class{};let ma=pa;ma.ENABLE_MANIFEST_OPERATION="enableManifest",ma.DISABLE_MANIFEST_OPERATION="disableManifest",ma.enable=(e,t,n)=>ge.executeTask({job:[{account:e.account,cloudProvider:"kubernetes",location:e.location,manifestName:e.name,type:pa.ENABLE_MANIFEST_OPERATION,reason:n}],application:t,description:`Enable Manifest: ${e.name}`}),ma.disable=(e,t,n)=>ge.executeTask({job:[{account:e.account,cloudProvider:"kubernetes",location:e.location,manifestName:e.name,type:pa.DISABLE_MANIFEST_OPERATION,reason:n}],application:t,description:`Disable Manifest: ${e.name}`}),ma.canDisableServerGroup=e=>pa.hasLoadBalancers(e)&&!pa.isManaged(e)&&!e.disabled,ma.canEnableServerGroup=e=>pa.hasLoadBalancers(e)&&!pa.isManaged(e)&&e.disabled,ma.hasLoadBalancers=e=>{var t;return(null==(t=e.loadBalancers)?void 0:t.length)>0},ma.isManaged=e=>e.serverGroupManagers&&e.serverGroupManagers.length>0;class ha{constructor(e,t,n,a,s,r){this.app=t,this.$uibModal=n,this.$scope=a,this.$state=s,this.$q=r,this.state={loading:!0},this.canDisable=()=>ma.canDisableServerGroup(this.serverGroup),this.disableServerGroup=()=>{S.confirm({header:`Really disable ${this.manifest.name}?`,buttonText:"Disable",askForReason:!0,submitJustWithReason:!0,submitMethod:({reason:e})=>ma.disable(this.manifest,this.app,e),taskMonitorConfig:{application:this.app,title:`Disabling ${this.manifest.name}`,onTaskComplete:()=>this.app.getDataSource("serverGroups").refresh()}})},this.canEnable=()=>ma.canEnableServerGroup(this.serverGroup),this.enableServerGroup=()=>{S.confirm({header:`Really enable ${this.manifest.name}?`,buttonText:"Enable",askForReason:!0,submitJustWithReason:!0,submitMethod:({reason:e})=>ma.enable(this.manifest,this.app,e),taskMonitorConfig:{application:this.app,title:`Enabling ${this.manifest.name}`,onTaskComplete:()=>this.app.getDataSource("serverGroups").refresh()}})};const i=this.app.getDataSource("serverGroups");i.ready().then((()=>{this.extractServerGroup(e),this.$scope.isDisabled=!h.kubernetesAdHocInfraWritesEnabled,i.onRefresh(this.$scope,(()=>this.extractServerGroup(e)))})).catch((()=>this.autoClose()))}ownerReferences(){const e=this.manifest.manifest;return null!=e&&e.hasOwnProperty("metadata")&&e.metadata.hasOwnProperty("ownerReferences")&&Array.isArray(e.metadata.ownerReferences)?e.metadata.ownerReferences:[]}ownerIsController(e){return e.hasOwnProperty("controller")&&!0===e.controller}lowerCaseFirstLetter(e){return e.charAt(0).toLowerCase()+e.slice(1)}manifestController(){const e=this.ownerReferences().find(this.ownerIsController);return void 0===e?null:this.lowerCaseFirstLetter(e.kind)+" "+e.name}canScaleServerGroup(){return"DaemonSet"!==this.serverGroup.kind&&null===this.manifestController()}scaleServerGroup(){this.$uibModal.open({templateUrl:"kubernetes/src/manifest/scale/scale.html",controller:"kubernetesV2ManifestScaleCtrl",controllerAs:"ctrl",resolve:{coordinates:{name:this.serverGroup.name,namespace:this.serverGroup.namespace,account:this.serverGroup.account},currentReplicas:this.manifest.manifest.spec.replicas,application:this.app}})}canEditServerGroup(){return null===this.manifestController()}editServerGroup(){Ct.buildNewManifestCommand(this.app,this.manifest.manifest,this.serverGroup.moniker,this.serverGroup.account).then((e=>{kt.show({title:"Edit Manifest",application:this.app,command:e})}))}deleteServerGroup(){this.$uibModal.open({templateUrl:"kubernetes/src/manifest/delete/delete.html",controller:"kubernetesV2ManifestDeleteCtrl",controllerAs:"ctrl",resolve:{coordinates:{name:this.serverGroup.name,namespace:this.serverGroup.namespace,account:this.serverGroup.account},manifestController:()=>this.manifestController(),application:this.app}})}autoClose(){this.$scope.$$destroyed||(this.$state.params.allowModalToStayOpen=!0,this.$state.go("^",null,{location:"replace"}))}extractServerGroup({accountId:e,name:t,region:n}){this.$q.all([ve.getServerGroup(this.app.name,e,n,t),C.getManifest(e,n,t)]).then((([e,t])=>{if(!e)return this.autoClose();this.serverGroup=e,this.entityTagTargets=this.configureEntityTagTargets(),this.manifest=t,this.state.loading=!1}))}configureEntityTagTargets(){return ke.buildClusterTargets(this.serverGroup)}}ha.$inject=["serverGroup","app","$uibModal","$scope","$state","$q"];const Ca="spinnaker.kubernetes.serverGroup.details.controller";e("spinnaker.kubernetes.serverGroup.details.controller",[be]).controller("kubernetesV2ServerGroupDetailsCtrl",ha),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">Scale {{ctrl.command.manifestName | robotToHuman}} in {{ctrl.command.location}}</h4>\n </div>\n <div class="modal-body confirmation-modal">\n <kubernetes-scale-manifest-settings-form settings="ctrl.command"></kubernetes-scale-manifest-settings-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.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 fa{constructor(e,n,a,s){this.serverGroup=e,this.$uibModalInstance=n,this.serverGroupWriter=a,this.application=s,this.verification={verified:!1},this.taskMonitor=new l({title:`Resizing ${this.serverGroup.name}`,application:s,modalInstance:n}),this.current=this.serverGroup.capacity,this.command={capacity:t(this.current),reason:null}}isValid(){return this.verification.verified&&this.command.capacity.desired>=0&&!n(this.command.capacity,this.current)}cancel(){this.$uibModalInstance.dismiss()}resize(){this.taskMonitor.submit((()=>{const e={capacity:this.command.capacity,serverGroupName:this.serverGroup.name,account:this.serverGroup.account,region:this.serverGroup.region,interestingHealthProviderNames:["KubernetesPod"],reason:this.command.reason};return this.serverGroupWriter.resizeServerGroup(this.serverGroup,this.application,e)}))}}fa.$inject=["serverGroup","$uibModalInstance","serverGroupWriter","application"];const ga="spinnaker.kubernetes.serverGroup.details.resize.controller";e("spinnaker.kubernetes.serverGroup.details.resize.controller",[be]).controller("kubernetesV2ServerGroupResizeCtrl",fa);class ba{buildNewServerGroupCommand(e){return Ct.buildNewManifestCommand(e)}}const va="spinnaker.kubernetes.serverGroup.commandBuilder.service";e("spinnaker.kubernetes.serverGroup.commandBuilder.service",[]).service("kubernetesV2ServerGroupCommandBuilder",ba);class ka{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)))}}const ya="spinnaker.kubernetes.serverGroup.transformer.service";e("spinnaker.kubernetes.serverGroup.transformer.service",[]).service("kubernetesV2ServerGroupTransformer",ka);class Ea{constructor(e,t,n,a,s){this.$scope=t,this.$uibModal=n,this.app=a,this.$state=s,this.state={loading:!0};const r=this.app.getDataSource("serverGroupManagers");r.ready().then((()=>{this.extractServerGroupManager(e),this.$scope.isDisabled=!h.kubernetesAdHocInfraWritesEnabled,r.onRefresh(this.$scope,(()=>this.extractServerGroupManager(e)))})).catch((()=>this.autoClose())),this.$scope.isDisabled=!h.kubernetesAdHocInfraWritesEnabled}pauseRolloutServerGroupManager(){this.$uibModal.open({templateUrl:"kubernetes/src/manifest/rollout/pause.html",controller:"kubernetesV2ManifestPauseRolloutCtrl",controllerAs:"ctrl",resolve:{coordinates:{name:this.serverGroupManager.name,namespace:this.serverGroupManager.namespace,account:this.serverGroupManager.account},application:this.app}})}resumeRolloutServerGroupManager(){this.$uibModal.open({templateUrl:"kubernetes/src/manifest/rollout/resume.html",controller:"kubernetesV2ManifestResumeRolloutCtrl",controllerAs:"ctrl",resolve:{coordinates:{name:this.serverGroupManager.name,namespace:this.serverGroupManager.namespace,account:this.serverGroupManager.account},application:this.app}})}canUndoRolloutServerGroupManager(){return this.serverGroupManager&&this.serverGroupManager.serverGroups&&this.serverGroupManager.serverGroups.length>0}undoRolloutServerGroupManager(){this.$uibModal.open({templateUrl:"kubernetes/src/manifest/rollout/undo.html",controller:"kubernetesV2ManifestUndoRolloutCtrl",controllerAs:"ctrl",resolve:{coordinates:{name:this.serverGroupManager.name,namespace:this.serverGroupManager.namespace,account:this.serverGroupManager.account},revisions:()=>{const[,...e]=je(this.serverGroupManager.serverGroups,["moniker.sequence"],["desc"]);return e.map(((e,t)=>({label:`${ye.getSequence(e.moniker.sequence)}${t>0?"":" - previous revision"}`,revision:e.moniker.sequence})))},application:this.app}})}scaleServerGroupManager(){this.$uibModal.open({templateUrl:"kubernetes/src/manifest/scale/scale.html",controller:"kubernetesV2ManifestScaleCtrl",controllerAs:"ctrl",resolve:{coordinates:{name:this.serverGroupManager.name,namespace:this.serverGroupManager.namespace,account:this.serverGroupManager.account},currentReplicas:this.manifest.manifest.spec.replicas,application:this.app}})}editServerGroupManager(){Ct.buildNewManifestCommand(this.app,this.manifest.manifest,this.serverGroupManager.moniker,this.serverGroupManager.account).then((e=>{kt.show({title:"Edit Manifest",application:this.app,command:e})}))}deleteServerGroupManager(){this.$uibModal.open({templateUrl:"kubernetes/src/manifest/delete/delete.html",controller:"kubernetesV2ManifestDeleteCtrl",controllerAs:"ctrl",resolve:{coordinates:{name:this.serverGroupManager.name,namespace:this.serverGroupManager.namespace,account:this.serverGroupManager.account},application:this.app,manifestController:()=>null}})}extractServerGroupManager({accountId:e,region:t,serverGroupManager:n}){const a=this.app.getDataSource("serverGroupManagers").data.find((a=>a.name===n&&a.region===t&&a.account===e));if(!a)return this.autoClose();C.getManifest(e,t,n).then((e=>{this.manifest=e,this.serverGroupManager=a,this.entityTagTargets=this.configureEntityTagTargets(),this.state.loading=!1}))}configureEntityTagTargets(){return ke.buildManagerClusterTargets(this.serverGroupManager)}autoClose(){this.$scope.$$destroyed||(this.$state.params.allowModalToStayOpen=!0,this.$state.go("^",null,{location:"replace"}))}}Ea.$inject=["serverGroupManager","$scope","$uibModal","app","$state"];const Sa="spinnaker.kubernetes.serverGroupManager.details.controller";e("spinnaker.kubernetes.serverGroupManager.details.controller",[]).controller("kubernetesV2ServerGroupManagerDetailsCtrl",Ea),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">Scale {{ctrl.command.manifestName | robotToHuman}} in {{ctrl.command.location}}</h4>\n </div>\n <div class="modal-body confirmation-modal">\n <kubernetes-scale-manifest-settings-form settings="ctrl.command"></kubernetes-scale-manifest-settings-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.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 Aa=class{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(e,t){e.length>Aa.MAX_RESOURCE_NAME_LENGTH&&t.push(`The maximum length for an application in Kubernetes is ${Aa.MAX_RESOURCE_NAME_LENGTH} characters.`)}validate(e=""){const t=[];return e&&e.length&&(Aa.validateSpecialCharacters(e,t),Aa.validateLength(e,t)),{warnings:[],errors:t}}};let wa=Aa;wa.MAX_RESOURCE_NAME_LENGTH=63,Ee.registerValidator("kubernetes",new wa);It('.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 Ma="spinnaker.kubernetes",Da=["spinnaker.kubernetes.instanceDetails.controller","spinnaker.kubernetes.loadBalancerDetails.controller","spinnaker.kubernetes.securityGroupDetails.controller","spinnaker.kubernetes.serverGroup.commandBuilder.service","spinnaker.kubernetes.serverGroup.details.controller","spinnaker.kubernetes.serverGroup.transformer.service","spinnaker.kubernetes.serverGroupManager.details.controller","spinnaker.kubernetes.serverGroup.details.resize.controller","spinnaker.kubernetes.serverGroupManager.details.controller","spinnaker.kubernetes.v2.manifest.delete.controller","spinnaker.kubernetes.v2.manifest.scale.controller","spinnaker.kubernetes.v2.manifest.undoRollout.controller","spinnaker.kubernetes.v2.manifest.pauseRollout.controller","spinnaker.kubernetes.v2.manifest.resumeRollout.controller",cn,"spinnaker.kubernetes.v2.manifest.condition.component","spinnaker.kubernetes.v2.manifest.artifact.component","spinnaker.kubernetes.loadBalancerTransformer","spinnaker.kubernetes.securityGroupTransformer","spinnaker.kubernetes.v2.pipeline.stage.scaleManifestStage","spinnaker.kubernetes.v2.pipeline.stage.undoRolloutManifestStage","spinnaker.kubernetes.v2.pipeline.stage.findArtifactsFromResource","spinnaker.kubernetes.v2.manifest.selector.component","spinnaker.kubernetes.v2.manifest.labels","spinnaker.kubernetes.v2.manifest.events","spinnaker.kubernetes.v2.manifest.resources","spinnaker.kubernetes.v2.manifest.qos","spinnaker.kubernetes.v2.manifest.annotation.custom.sections","spinnaker.kubernetes.v2.manifestImageDetails.component","spinnaker.core.kubernetesResource.states",Ae,"spinnaker.kubernetes.jsonEditor.component","spinnaker.kubernetes.v2.pipeline.stage.enableManifestStage","spinnaker.kubernetes.v2.pipeline.stage.disableManifestStage",we,"spinnaker.kubernetes.v2.rolling.restart"];h.feature.kubernetesRawResources&&Da.push("spinnaker.kubernetes.rawresource"),e("spinnaker.kubernetes",Da).config((()=>{Se.registerProvider("kubernetes",{name:"Kubernetes",adHocInfrastructureWritesEnabled:h.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:kt,commandBuilder:"kubernetesV2ServerGroupCommandBuilder",detailsController:"kubernetesV2ServerGroupDetailsCtrl",detailsTemplateUrl:"kubernetes/src/serverGroup/details/details.html",transformer:"kubernetesV2ServerGroupTransformer"},serverGroupManager:{detailsTemplateUrl:"kubernetes/src/serverGroupManager/details/details.html",detailsController:"kubernetesV2ServerGroupManagerDetailsCtrl"},loadBalancer:{CreateLoadBalancerModal:kt,detailsController:"kubernetesV2LoadBalancerDetailsCtrl",detailsTemplateUrl:"kubernetes/src/loadBalancer/details/details.html",transformer:"kubernetesV2LoadBalancerTransformer"},securityGroup:{reader:da,CreateSecurityGroupModal:kt,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/serverGroup/details/details.html",'<div class="details-panel" ng-class="{disabled: ctrl.serverGroup.isDisabled || ctrl.serverGroup.disabled}">\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 <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.serverGroup.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.serverGroup.displayName}}\n <render-if-feature feature="entityTags">\n <entity-notifications\n entity="ctrl.serverGroup"\n application="ctrl.app"\n placement="bottom"\n h-offset-percent="90%"\n entity-type="serverGroup"\n page-location="details"\n on-update="ctrl.app.serverGroups.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 {{ctrl.serverGroup.kind | robotToHuman}} Actions <span class="caret"></span>\n </button>\n <ul class="dropdown-menu" uib-dropdown-menu role="menu">\n <li ng-if="ctrl.canEditServerGroup()">\n <a href ng-click="ctrl.editServerGroup()"> Edit </a>\n </li>\n <li ng-if="ctrl.canScaleServerGroup()">\n <a href ng-click="ctrl.scaleServerGroup()"> Scale </a>\n </li>\n <li ng-if="ctrl.canEnable()">\n <a href ng-click="ctrl.enableServerGroup()"> Enable </a>\n </li>\n <li ng-if="ctrl.canDisable()">\n <a href ng-click="ctrl.disableServerGroup()"> Disable </a>\n </li>\n <li>\n <a href ng-click="ctrl.deleteServerGroup()"> Delete </a>\n </li>\n <render-if-feature feature="entityTags">\n <add-entity-tag-links\n component="ctrl.serverGroup"\n application="ctrl.app"\n entity-type="serverGroup"\n owner-options="ctrl.entityTagTargets"\n on-update="ctrl.app.serverGroups.refresh"\n ></add-entity-tag-links>\n </render-if-feature>\n </ul>\n </div>\n </div>\n </div>\n <div class="content" ng-if="!ctrl.state.loading">\n <kubernetes-manifest-status status="ctrl.manifest.status"></kubernetes-manifest-status>\n <div class="band band-info" ng-if="ctrl.serverGroup.isDisabled || ctrl.serverGroup.disabled">Disabled</div>\n <server-group-running-tasks-details\n server-group="ctrl.serverGroup"\n application="ctrl.app"\n ></server-group-running-tasks-details>\n <collapsible-section heading="Information" expanded="true">\n <dl class="dl-horizontal dl-narrow">\n <dt>Created</dt>\n <dd>{{ctrl.serverGroup.createdTime | timestamp}}</dd>\n <dt>Account</dt>\n <dd><account-tag account="ctrl.serverGroup.account"></account-tag></dd>\n <dt>Namespace</dt>\n <dd>{{ctrl.serverGroup.namespace}}</dd>\n <dt>Kind</dt>\n <dd>{{ctrl.serverGroup.kind}}</dd>\n <dt ng-if="ctrl.manifestController()">Controller</dt>\n <dd>\n <a\n ui-sref="^.serverGroupManager({\n accountId: ctrl.serverGroup.account,\n region: ctrl.serverGroup.region,\n serverGroupManager: ctrl.manifestController(),\n provider: \'kubernetes\'})"\n >\n {{ctrl.manifestController() | robotToHuman }}\n </a>\n </dd>\n </dl>\n </collapsible-section>\n\n <kubernetes-annotation-custom-sections\n manifest="ctrl.manifest.manifest"\n resource="ctrl.serverGroup"\n ></kubernetes-annotation-custom-sections>\n\n <collapsible-section heading="Images" expanded="true">\n <kubernetes-manifest-image-details manifest="ctrl.manifest.manifest"></kubernetes-manifest-image-details>\n </collapsible-section>\n\n <collapsible-section heading="Events" expanded="true">\n <kubernetes-manifest-events manifest="ctrl.manifest"></kubernetes-manifest-events>\n </collapsible-section>\n <collapsible-section heading="Labels" expanded="true">\n <kubernetes-manifest-labels manifest="ctrl.manifest.manifest"></kubernetes-manifest-labels>\n </collapsible-section>\n <collapsible-section heading="Size" expanded="true">\n <dl class="dl-horizontal dl-narrow" ng-if="ctrl.serverGroup.capacity.min == null">\n <dt>Current</dt>\n <dd>{{ctrl.serverGroup.instances.length}}</dd>\n </dl>\n <dl\n class="dl-horizontal dl-narrow"\n ng-if="ctrl.serverGroup.capacity.min != null && ctrl.serverGroup.capacity.min === ctrl.serverGroup.capacity.max"\n >\n <dt>Min/Max</dt>\n <dd>{{ctrl.serverGroup.capacity.min}}</dd>\n <dt>Current</dt>\n <dd>{{ctrl.serverGroup.instances.length}}</dd>\n </dl>\n <dl class="dl-horizontal dl-narrow" ng-if="ctrl.serverGroup.capacity.min !== ctrl.serverGroup.capacity.max">\n <dt>Min</dt>\n <dd>{{ctrl.serverGroup.capacity.min}}</dd>\n <dt>Max</dt>\n <dd>{{ctrl.serverGroup.capacity.max}}</dd>\n <dt>Current</dt>\n <dd>{{ctrl.serverGroup.instances.length}}</dd>\n </dl>\n </collapsible-section>\n <collapsible-section heading="Health" expanded="true">\n <dl class="dl-horizontal dl-narrow" ng-if="ctrl.serverGroup">\n <dt>Instances</dt>\n <dd>\n <health-counts container="ctrl.serverGroup.instanceCounts" class="pull-left"></health-counts>\n </dd>\n </dl>\n </collapsible-section>\n </div>\n</div>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("kubernetes/src/serverGroupManager/details/details.html",'<div class="details-panel">\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 <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.serverGroupManager.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.serverGroupManager.displayName}}\n <render-if-feature feature="entityTags">\n <entity-notifications\n entity="ctrl.serverGroupManager"\n application="ctrl.app"\n placement="bottom"\n h-offset-percent="90%"\n entity-type="serverGroupManager"\n page-location="details"\n on-update="ctrl.app.serverGroupManagers.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 {{ctrl.serverGroupManager.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.scaleServerGroupManager()"> Scale </a>\n </li>\n <li ng-if="ctrl.canUndoRolloutServerGroupManager()">\n <a href ng-click="ctrl.undoRolloutServerGroupManager()"> Undo Rollout </a>\n </li>\n <li ng-if="ctrl.manifest.status.paused.state">\n <a href ng-click="ctrl.resumeRolloutServerGroupManager()"> Resume Rollout </a>\n </li>\n <li ng-if="!ctrl.manifest.status.paused.state && !ctrl.manifest.status.stable.state">\n <a href ng-click="ctrl.pauseRolloutServerGroupManager()"> Pause Rollout </a>\n </li>\n <kubernetes-rolling-restart\n ng-if="!ctrl.manifest.status.paused.state"\n application="ctrl.app"\n server-group-manager="ctrl.serverGroupManager"\n ></kubernetes-rolling-restart>\n <li role="presentation" class="divider"></li>\n <li>\n <a href ng-click="ctrl.editServerGroupManager()"> Edit </a>\n </li>\n <li>\n <a href ng-click="ctrl.deleteServerGroupManager()"> Delete </a>\n </li>\n <render-if-feature feature="entityTags">\n <add-entity-tag-links\n component="ctrl.serverGroupManager"\n application="ctrl.app"\n entity-type="serverGroupManager"\n owner-options="ctrl.entityTagTargets"\n on-update="ctrl.app.serverGroupManagers.refresh"\n ></add-entity-tag-links>\n </render-if-feature>\n </ul>\n </div>\n </div>\n </div>\n <div class="content" ng-if="!ctrl.state.loading">\n <kubernetes-manifest-status status="ctrl.manifest.status"></kubernetes-manifest-status>\n <collapsible-section heading="Information" expanded="true">\n <dl class="dl-horizontal dl-narrow">\n <dt>Created</dt>\n <dd>{{ctrl.serverGroupManager.createdTime | timestamp}}</dd>\n <dt>Account</dt>\n <dd><account-tag account="ctrl.serverGroupManager.account"></account-tag></dd>\n <dt>Namespace</dt>\n <dd>{{ctrl.serverGroupManager.namespace}}</dd>\n <dt>Kind</dt>\n <dd>{{ctrl.serverGroupManager.kind}}</dd>\n <dt ng-if="ctrl.serverGroupManager.serverGroups.length">Managing</dt>\n <dd>\n <ul ng-repeat="serverGroup in ctrl.serverGroupManager.serverGroups | orderBy: [\'-name\']">\n <a\n ui-sref="^.serverGroup({region: serverGroup.region,\n accountId: serverGroup.account,\n serverGroup: serverGroup.name,\n provider: \'kubernetes\'})"\n >\n {{serverGroup.name}}\n </a>\n </ul>\n </dd>\n </dl>\n </collapsible-section>\n\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.serverGroupManager"\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="Labels" expanded="true">\n <kubernetes-manifest-labels manifest="ctrl.manifest.manifest"></kubernetes-manifest-labels>\n </collapsible-section>\n\n <collapsible-section heading="Artifacts" expanded="true">\n <ul ng-repeat="artifact in ctrl.manifest.artifacts">\n <kubernetes-manifest-artifact artifact="artifact"></kubernetes-manifest-artifact>\n </ul>\n </collapsible-section>\n </div>\n</div>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("kubernetes/src/loadBalancer/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.loadBalancer.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.loadBalancer.displayName}}\n <render-if-feature feature="entityTags">\n <entity-notifications\n ng-if="!state.loading"\n entity="ctrl.loadBalancer"\n application="ctrl.app"\n placement="bottom"\n h-offset-percent="90%"\n entity-type="loadBalancer"\n page-location="details"\n on-update="ctrl.app.loadBalancers.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 {{ctrl.loadBalancer.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.deleteLoadBalancer()">Delete</a>\n </li>\n <li>\n <a href ng-click="ctrl.editLoadBalancer()">Edit</a>\n </li>\n <render-if-feature feature="entityTags">\n <add-entity-tag-links\n component="ctrl.loadBalancer"\n application="ctrl.app"\n entity-type="loadBalancer"\n on-update="ctrl.app.loadBalancers.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.loadBalancer.createdTime | timestamp}}</dd>\n <dt>Account</dt>\n <dd><account-tag account="ctrl.loadBalancer.account" pad="right"></account-tag></dd>\n <dt>Namespace</dt>\n <dd>{{ctrl.loadBalancer.namespace}}</dd>\n <dt>Kind</dt>\n <dd>{{ctrl.loadBalancer.kind}}</dd>\n <dt>Service Type</dt>\n <dd>{{ctrl.manifest.manifest.spec.type}}</dd>\n <dt>Sess. Affinity</dt>\n <dd>{{ctrl.manifest.manifest.spec.sessionAffinity}}</dd>\n </dl>\n </collapsible-section>\n <collapsible-section heading="Status" expanded="true">\n <dl class="dl-horizontal dl-narrow">\n <div ng-if="!ctrl.loadBalancer.serverGroups.length">\n No workloads associated with this {{ctrl.loadBalancer.kind | robotToHuman}}.\n </div>\n <dt ng-if="ctrl.loadBalancer.serverGroups.length">Workloads</dt>\n <dd ng-if="ctrl.loadBalancer.serverGroups.length">\n <ul>\n <li ng-repeat="serverGroup in ctrl.loadBalancer.serverGroups | orderBy: [\'isDisabled\', \'-name\']">\n <a\n ui-sref="^.serverGroup({region: serverGroup.region,\n accountId: serverGroup.account,\n serverGroup: serverGroup.name,\n provider: \'kubernetes\'})"\n >\n {{serverGroup.name}}\n </a>\n </li>\n </ul>\n </dd>\n <div ng-if="ctrl.loadBalancer.serverGroups.length">\n <dt>Pod status</dt>\n <dd>\n <health-counts class="pull-left" container="ctrl.loadBalancer.instanceCounts"></health-counts>\n </dd>\n </div>\n <div ng-if="ctrl.manifest.manifest.spec.clusterIP">\n <dt>Cluster IP</dt>\n <dd>\n <a target="_blank" href="//{{ctrl.manifest.manifest.spec.clusterIP}}">\n {{ctrl.manifest.manifest.spec.clusterIP}}\n </a>\n <copy-to-clipboard\n class="copy-to-clipboard copy-to-clipboard-sm"\n text="ctrl.manifest.manifest.spec.clusterIP"\n tool-tip="\'Copy Cluster IP to clipboard\'"\n >\n </copy-to-clipboard>\n </dd>\n </div>\n <div ng-if="ctrl.manifest.manifest.spec.loadBalancerIP">\n <dt>Load Balancer IP</dt>\n <dd>\n <a target="_blank" href="//{{ctrl.manifest.manifest.spec.loadBalancerIP}}">\n {{ctrl.manifest.manifest.spec.loadBalancerIP}}\n </a>\n <copy-to-clipboard\n class="copy-to-clipboard copy-to-clipboard-sm"\n text="ctrl.manifest.manifest.spec.loadBalancerIP"\n tool-tip="\'Copy Load Balancer IP to clipboard\'"\n >\n </copy-to-clipboard>\n </dd>\n </div>\n <div ng-if="ctrl.manifest.manifest.spec.rules.length">\n <dt>Host Rules</dt>\n <dd ng-repeat="ingressRule in ctrl.manifest.manifest.spec.rules">\n <a ng-if="ingressRule.host" target="_blank" href="//{{ingressRule.host}}"> {{ingressRule.host}} </a>\n <copy-to-clipboard\n ng-if="ingressRule.host"\n class="copy-to-clipboard copy-to-clipboard-sm"\n text="ingressRule.host"\n tool-tip="\'Copy ingress rule host to clipboard\'"\n >\n </copy-to-clipboard>\n </dd>\n </div>\n <div ng-if="ctrl.manifest.manifest.status.loadBalancer.ingress.length">\n <dt>Ingress</dt>\n <dd ng-repeat="ingress in ctrl.manifest.manifest.status.loadBalancer.ingress">\n <a ng-if="ingress.hostname" target="_blank" href="//{{ingress.hostname}}"> {{ingress.hostname}} </a>\n <copy-to-clipboard\n ng-if="ingress.hostname"\n class="copy-to-clipboard copy-to-clipboard-sm"\n text="ingress.hostname"\n tool-tip="\'Copy Ingress hostname to clipboard\'"\n >\n </copy-to-clipboard>\n <a ng-if="ingress.ip" target="_blank" href="//{{ingress.ip}}"> {{ingress.ip}} </a>\n <copy-to-clipboard\n ng-if="ingress.ip"\n class="copy-to-clipboard copy-to-clipboard-sm"\n text="ingress.ip"\n tool-tip="\'Copy Ingress IP to clipboard\'"\n >\n </copy-to-clipboard>\n </dd>\n </div>\n </dl>\n </collapsible-section>\n\n <kubernetes-annotation-custom-sections\n manifest="ctrl.manifest.manifest"\n resource="ctrl.loadBalancer"\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="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/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{St as KUBERNETES_LOAD_BALANCER_DETAILS_CTRL,xt as KUBERNETES_MANIFEST_ARTIFACT,on as KUBERNETES_MANIFEST_CONDITION,Gt as KUBERNETES_MANIFEST_DELETE_CTRL,zt as KUBERNETES_MANIFEST_PAUSE_ROLLOUT_CTRL,_t as KUBERNETES_MANIFEST_SCALE_CTRL,cn as KUBERNETES_MANIFEST_STATUS,Ut as KUBERNETES_MANIFEST_UNDO_ROLLOUT_CTRL,Ma as KUBERNETES_MODULE,ca as KUBERNETES_SECURITY_GROUP_DETAILS_CTRL,va as KUBERNETES_SERVER_GROUP_COMMAND_BUILDER,Ca as KUBERNETES_SERVER_GROUP_DETAILS_CTRL,Sa as KUBERNETES_SERVER_GROUP_MANAGER_DETAILS_CTRL,ga as KUBERNETES_SERVER_GROUP_RESIZE_CTRL,ya as KUBERNETES_SERVER_GROUP_TRANSFORMER,ia as KUBERNETS_RAW_RESOURCE_MODULE,Ct as KubernetesManifestCommandBuilder,In as KubernetesManifestService,ba as KubernetesV2ServerGroupCommandBuilder,ka as KubernetesV2ServerGroupTransformer};
|
|
1
|
+
import{module as e,copy as t,equals as n}from"angular";import{HelpContentsRegistry as a,AccountService as s,HelpField as r,AccountSelectInput as i,YamlEditor as o,TaskMonitor as l,ReactModal as c,WizardModal as d,WizardPage as u,noop as p,ManifestWriter as m,SETTINGS as h,ManifestReader as C,InstanceReader as f,RecentHistoryService as g,withErrorBoundary as b,relativeTime as v,JobManifestPodLogs as k,JobEventBasedPodNameProvider as y,HoverablePopover as E,ConfirmationModalService as S,SearchService as A,AppListExtractor as M,StageConfigField as w,ScopeClusterSelector as x,StageConstants as D,NgReact as N,ExecutionDetailsSection as T,StageFailureMessage as G,Registry as R,ExecutionDetailsTasks as F,robotToHuman as $,AccountTag as I,ModalClose as P,TetheredSelect as B,StageArtifactSelector as O,ArtifactTypePatterns as L,Markdown as z,yamlDocumentsToString as K,CheckboxInput as q,RadioButtonInput as U,StageArtifactSelectorDelegate as V,FormikStageConfig as j,ReactInjector as _,CopyToClipboard as H,ManifestYaml as W,CollapsibleElement as X,ExecutionArtifactTab as J,ExpectedArtifactService as Z,ArtifactReferenceService as Q,DefaultPodNameProvider as Y,JobStageExecutionLogs as ee,EXECUTION_ARTIFACT_TAB as te,PipelineConfigValidator as ne,ApplicationDataSourceRegistry as ae,INFRASTRUCTURE_KEY as se,REST as re,CloudProviderLogo as ie,FormField as oe,ReactSelectInput as le,FilterSection as ce,FilterCheckbox as de,Overridable as ue,logger as pe,Spinner as me,CollapsibleSection as he,timestamp as Ce,APPLICATION_STATE_PROVIDER as fe,SECURITY_GROUP_READER as ge,TaskExecutor as be,SERVER_GROUP_WRITER as ve,ServerGroupReader as ke,ClusterTargetBuilder as ye,NameUtils as Ee,ApplicationNameValidator as Se,CloudProviderRegistry as Ae,YAML_EDITOR_COMPONENT as Me,STAGE_ARTIFACT_SELECTOR_COMPONENT_REACT as we}from"@spinnaker/core";import{cloneDeep as xe,has as De,flattenDeep as Ne,chain as Te,camelCase as Ge,get as Re,partition as Fe,trim as $e,sortBy as Ie,keys as Pe,isEmpty as Be,defaults as Oe,flatten as Le,groupBy as ze,find as Ke,map as qe,split as Ue,set as Ve,capitalize as je,orderBy as _e}from"lodash";import{load as He,dump as We}from"js-yaml";import{$q as Xe,$log as Je}from"ngimport";import Ze from"react";import Qe from"dompurify";import{react2angular as Ye}from"react2angular";import"brace/mode/json";import"brace/theme/textmate";import et from"react-ace";import{DateTime as tt}from"luxon";import nt,{Creatable as at}from"react-select";import{Subject as st,from as rt}from"rxjs";import{tap as it,switchMap as ot,takeUntil as lt}from"rxjs/operators";import{Modal as ct,Dropdown as dt}from"react-bootstrap";import{UISrefActive as ut,UISref as pt}from"@uirouter/react";const mt={"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.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."};var ht,Ct;Object.keys(mt).forEach((e=>a.register(e,mt[e]))),(Ct=ht||(ht={})).TEXT="text",Ct.ARTIFACT="artifact";class ft{static manifestCommandIsValid(e){return!!e.moniker&&!!e.moniker.app}static copyAndCleanCommand(e){return xe(e)}static buildNewManifestCommand(e,t,n,a){null!=t&&De(t,["metadata","annotations","kubectl.kubernetes.io/last-applied-configuration"])&&(t=He(t.metadata.annotations["kubectl.kubernetes.io/last-applied-configuration"]));const r={accounts:s.getAllAccountDetailsForProvider("kubernetes"),artifactAccounts:s.getArtifactAccounts()};return Xe.all(r).then((s=>{const{accounts:r,artifactAccounts:i}=s,o=r.some((e=>e.name===a))?r.find((e=>e.name===a)).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:ht.TEXT},metadata:{backingData:s}}}))}}function gt({accounts:e,onAccountSelect:t,selectedAccount:n}){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(r,{id:"kubernetes.manifest.account"})),Ze.createElement("div",{className:"col-md-7"},Ze.createElement(i,{value:n,onChange:e=>t(e.target.value),readOnly:!1,accounts:e,provider:"kubernetes"}))))}class bt 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(gt,{accounts:e.values.metadata.backingData.accounts,onAccountSelect:this.accountUpdated,selectedAccount:e.values.command.account})}}class vt 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,[n=null,...a]=t.command.manifests||[],s=a&&a.length?t.command.manifests:n;try{this.state={rawManifest:s?We(s):null}}catch(e){this.state={rawManifest:null}}}render(){return Ze.createElement(o,{value:this.state.rawManifest,onChange:this.handleChange})}}const kt=class extends Ze.Component{constructor(e){super(e),this.submit=e=>{const t=ft.copyAndCleanCommand(e.command);this.state.taskMonitor.submit((()=>m.deployManifest(t,this.props.application)))},e.command||ft.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 l({application:e.application,title:(this.props.isNew?"Deploying":"Updating")+" your manifest",modalInstance:l.modalInstanceEmulation((()=>this.props.dismissModal()))})}}static show(e){return c.show(kt,e,{dialogClassName:"wizard-modal modal-lg"})}render(){const{application:e,dismissModal:t,isNew:n}=this.props,{loaded:a,taskMonitor:s,command:r}=this.state;return Ze.createElement(d,{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})=>Ze.createElement(Ze.Fragment,null,Ze.createElement(u,{label:"Basic Settings",wizard:a,order:n(),render:({innerRef:e})=>Ze.createElement(bt,{ref:e,formik:t})}),Ze.createElement(u,{label:"Manifest",wizard:a,order:n(),render:({innerRef:n})=>Ze.createElement(vt,{ref:n,formik:t,app:e})}))})}};let yt=kt;yt.defaultProps={closeModal:p,dismissModal:p};class Et{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=!h.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(){ft.buildNewManifestCommand(this.app,this.manifest.manifest,this.instance.moniker,this.instance.account).then((e=>{yt.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}})),C.getManifest(t.account,t.namespace,t.name).then((e=>{this.manifest=e}))]).then((()=>{this.state.loading=!1}))}fetchInstance(e){return f.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=Ne([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?(g.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"}))}}Et.$inject=["instance","$uibModal","$q","$scope","app","$state"];e("spinnaker.kubernetes.instanceDetails.controller",[]).controller("kubernetesV2InstanceDetailsCtrl",Et),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 St{constructor(e,t,n,a,s){this.$uibModal=e,this.$state=t,this.$scope=n,this.app=s,this.state={loading:!0};const r=this.app.getDataSource("loadBalancers");r.ready().then((()=>{this.extractLoadBalancer(a),this.$scope.isDisabled=!h.kubernetesAdHocInfraWritesEnabled,r.onRefresh(this.$scope,(()=>this.extractLoadBalancer(a)))})).catch((()=>this.autoClose()))}deleteLoadBalancer(){this.$uibModal.open({templateUrl:"kubernetes/src/manifest/delete/delete.html",controller:"kubernetesV2ManifestDeleteCtrl",controllerAs:"ctrl",resolve:{coordinates:{name:this.loadBalancer.name,namespace:this.loadBalancer.namespace,account:this.loadBalancer.account},application:this.app,manifestController:()=>null}})}editLoadBalancer(){ft.buildNewManifestCommand(this.app,this.manifest.manifest,this.loadBalancer.moniker,this.loadBalancer.account).then((e=>{yt.show({title:"Edit Manifest",application:this.app,command:e})}))}extractLoadBalancer({accountId:e,name:t,region:n}){const a=this.app.getDataSource("loadBalancers").data.find((a=>a.name===t&&a.account===e&&a.region===n));if(!a)return this.autoClose();C.getManifest(e,n,t).then((e=>{this.manifest=e,this.loadBalancer=a,this.state.loading=!1}))}autoClose(){this.$scope.$$destroyed||(this.$state.params.allowModalToStayOpen=!0,this.$state.go("^",null,{location:"replace"}))}}St.$inject=["$uibModal","$state","$scope","loadBalancer","app"];const At="spinnaker.kubernetes.loadBalancerDetails.controller";e("spinnaker.kubernetes.loadBalancerDetails.controller",[]).controller("kubernetesV2LoadBalancerDetailsCtrl",St),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 Mt{constructor(e){this.$q=e}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}))})),this.$q.resolve(e)}buildInstanceCounts(e){const t=Te(e).map((e=>e.instances)).flatten().reduce(((e,t)=>(e[Ge(t.health.state)]++,e)),{up:0,down:0,outOfService:0,succeeded:0,failed:0,unknown:0,starting:0}).value();return t.outOfService+=Te(e).map((e=>e.detachedInstances)).flatten().value().length,t}}Mt.$inject=["$q"];e("spinnaker.kubernetes.loadBalancerTransformer",[]).service("kubernetesV2LoadBalancerTransformer",Mt);class wt{constructor(e,t){this.$sce=e,this.$interpolate=t}$onInit(){const e=Re(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=Fe(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=Qe.sanitize(e,{ADD_ATTR:["target"]});return this.$sce.trustAsHtml(t)}}wt.$inject=["$sce","$interpolate"];const xt={bindings:{manifest:"<",resource:"<"},controller:["$sce","$interpolate",wt],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 '};e("spinnaker.kubernetes.v2.manifest.annotation.custom.sections",[]).component("kubernetesAnnotationCustomSections",xt);const Dt={bindings:{artifact:"<"},controller:class{},controllerAs:"ctrl",template:"\n <span>\n <b>{{ctrl.artifact.type}}</b>\n <i>{{ctrl.artifact.reference}}</i>\n </span>\n "},Nt="spinnaker.kubernetes.v2.manifest.artifact.component";e("spinnaker.kubernetes.v2.manifest.artifact.component",[]).component("kubernetesManifestArtifact",Dt);const Tt={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 '};e("spinnaker.kubernetes.v2.kubernetes.manifest.delete.options.component",[]).component("kubernetesDeleteManifestOptionsForm",Tt);class Gt{constructor(e,t,n,a){this.$uibModalInstance=t,this.application=n,this.manifestController=a,this.verification={verified:!1},this.taskMonitor=new l({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,m.deleteManifest(e,this.application)}))}}Gt.$inject=["coordinates","$uibModalInstance","application","manifestController"];const Rt="spinnaker.kubernetes.v2.manifest.delete.controller";e("spinnaker.kubernetes.v2.manifest.delete.controller",["spinnaker.kubernetes.v2.kubernetes.manifest.delete.options.component"]).controller("kubernetesV2ManifestDeleteCtrl",Gt);class Ft extends Ze.Component{constructor(){super(...arguments),this.handleChange=e=>{try{const t=JSON.parse(e);this.props.onChange?this.props.onChange(e,t):Je.warn("No `onChange` handler provided for JSON editor.")}catch(t){this.props.onChange?this.props.onChange(e,null):Je.warn("No `onChange` handler provided for JSON editor."),Je.warn(`Error loading JSON from string ${e}: `,t)}},this.render=()=>Ze.createElement(et,{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"})}}e("spinnaker.kubernetes.jsonEditor.component",[]).component("jsonEditor",Ye(b(Ft,"jsonEditor"),["onChange","value"]));class $t 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=$e(Re(this.props.manifest,["manifest","metadata","annotations","artifact.spinnaker.io/location"],""));return e.map(((n,a)=>{const s=Re(n,"firstTimestamp",""),r=Re(n,"lastTimestamp","");let i=0,o=0;return s&&(i=tt.fromISO(s).toMillis()),r&&(o=tt.fromISO(r).toMillis()),Ze.createElement("div",{key:Re(n,["metadata","uid"],String(a)),className:"info"},Ze.createElement("div",{className:"horizontal"},n.count&&Ze.createElement("div",{className:`pill ${this.pillStyle(n)}`},n.count," × ",Ze.createElement("b",null,n.reason))),(n.firstTimestamp||n.lastTimestamp)&&Ze.createElement("div",null,n.firstTimestamp===n.lastTimestamp&&Ze.createElement("div",null,Ze.createElement("i",null,v(i))),n.firstTimestamp!==n.lastTimestamp&&Ze.createElement("div",null,Ze.createElement("div",null,"First Occurrence: ",Ze.createElement("i",null,v(i))),Ze.createElement("div",null,"Last Occurrence: ",Ze.createElement("i",null,v(o))))),Ze.createElement("div",null,n.message),Ze.createElement("div",null,Ze.createElement(k,{account:this.props.manifest.account,location:t,podNamesProviders:[new y(this.props.manifest,n)],linkName:"Console Output (Raw)"})),a!==e.length-1&&Ze.createElement("br",null))}))}}e("spinnaker.kubernetes.v2.manifest.events",[]).component("kubernetesManifestEvents",Ye(b($t,"kubernetesManifestEvents"),["manifest"]));const It=e=>e&&e.includes(":")?e:`${e}:latest`;function Pt(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))}}e("spinnaker.kubernetes.v2.manifestImageDetails.component",[]).component("kubernetesManifestImageDetails",Ye(b((({manifest:e})=>{if(!De(e,"spec.template.spec"))return null;const t=Ie(e.spec.template.spec.containers||[],["image"]),n=Ie(e.spec.template.spec.initContainers||[],["image"]),a=t.length>0&&n.length>0;return 0===t.length&&0===n.length?Ze.createElement("span",null,"No images."):Ze.createElement("ul",null,a&&Ze.createElement("strong",null,"Containers"),t.map((e=>Ze.createElement("li",{key:e.image,title:It(e.image),className:"break-word"},It(e.image)," ",Ze.createElement(r,{content:`This is container <strong>${e.name}</strong>'s image.`})))),a&&Ze.createElement("strong",null,"Init Containers"),n.map((e=>Ze.createElement("li",{key:e.image,className:"break-word",title:It(e.image)},It(e.image)," ",Ze.createElement(r,{content:`This is init container <strong>${e.name}</strong>'s image.`})))))}),"kubernetesManifestImageDetails"),["manifest"]));Pt(".manifest-label {\n margin: 2px;\n}\n");class Bt extends Ze.Component{render(){const e=Re(this.props,["manifest","metadata","labels"],{});return Ze.createElement("div",{className:"horizontal wrap"},Pe(e).map((t=>Ze.createElement("div",{key:t,className:"manifest-label sp-badge info"},t,": ",e[t]))))}}e("spinnaker.kubernetes.v2.manifest.labels",[]).component("kubernetesManifestLabels",Ye(b(Bt,"kubernetesManifestLabels"),["manifest"]));class Ot 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 Re(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(E,{Component:this.description,title:"QOS Class",className:"ephemeral-popover"},Ze.createElement("div",{className:e},this.qosClass()))}}e("spinnaker.kubernetes.v2.manifest.qos",[]).component("kubernetesManifestQos",Ye(b(Ot,"kubernetesManifestQos"),["manifest"]));class Lt extends Ze.Component{render(){const e=Re(this.props,["manifest","spec","containers"],[]),t=Re(this.props,["metrics"],[]);if(!t)return Ze.createElement("div",null,"No metrics reported.");const n=t.reduce(((e,t)=>(e[t.containerName]={metrics:t.metrics},e)),{});return Ze.createElement("div",null,e.map(((t,a)=>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,Re(n,[t.name,"metrics","CPU(cores)"],"Unknown")),Ze.createElement("dt",null,"MEMORY"),Ze.createElement("dd",null,Re(n,[t.name,"metrics","MEMORY(bytes)"],"Unknown"))),a<e.length-1?Ze.createElement("hr",null):""))))}}e("spinnaker.kubernetes.v2.manifest.resources",[]).component("kubernetesManifestResources",Ye(b(Lt,"kubernetesManifestResources"),["manifest","metrics"]));e("spinnaker.kubernetes.v2.rolling.restart",[]).component("kubernetesRollingRestart",Ye(b((function({application:e,serverGroupManager:t}){return Ze.createElement("li",null,Ze.createElement("a",{onClick:function(){const n={account:t.account,cloudProvider:"kubernetes",location:t.namespace,manifestName:t.name};S.confirm({account:t.account,askForReason:!0,header:`Initiate rolling restart of ${t.name}`,submitMethod:()=>m.rollingRestartManifest(n,e),taskMonitorConfig:{application:e,title:`Rolling restart of ${t.name}`}})}},"Rolling Restart"))}),"kubernetesRollingRestart"),["application","serverGroupManager"]));class zt{constructor(e,t,n){this.$uibModalInstance=t,this.application=n,this.verification={verified:!1},this.taskMonitor=new l({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",m.pauseRolloutManifest(e,this.application)}))}}zt.$inject=["coordinates","$uibModalInstance","application"];const Kt="spinnaker.kubernetes.v2.manifest.pauseRollout.controller";e("spinnaker.kubernetes.v2.manifest.pauseRollout.controller",[]).controller("kubernetesV2ManifestPauseRolloutCtrl",zt);class qt{constructor(e,t,n){this.$uibModalInstance=t,this.application=n,this.verification={verified:!1},this.taskMonitor=new l({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",m.resumeRolloutManifest(e,this.application)}))}}qt.$inject=["coordinates","$uibModalInstance","application"];e("spinnaker.kubernetes.v2.manifest.resumeRollout.controller",[]).controller("kubernetesV2ManifestResumeRolloutCtrl",qt);class Ut{constructor(e,t,n,a){this.revisions=t,this.$uibModalInstance=n,this.application=a,this.verification={verified:!1},this.taskMonitor=new l({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",m.undoRolloutManifest(e,this.application)}))}}Ut.$inject=["coordinates","revisions","$uibModalInstance","application"];const Vt="spinnaker.kubernetes.v2.manifest.undoRollout.controller";e("spinnaker.kubernetes.v2.manifest.undoRollout.controller",[]).controller("kubernetesV2ManifestUndoRolloutCtrl",Ut);const jt={bindings:{settings:"="},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 Replicas\n </div>\n <div class="col-md-4">\n <input type="text"\n class="form-control input-sm highlight-pristine"\n ng-model="ctrl.settings.replicas"\n min="0"/>\n </div>\n </div>\n </div>\n '};e("spinnaker.kubernetes.v2.kubernetes.manifest.scale.settingsForm.component",[]).component("kubernetesScaleManifestSettingsForm",jt);class _t{constructor(e,t,n,a){this.$uibModalInstance=n,this.application=a,this.verification={verified:!1},this.taskMonitor=new l({title:`Scaling ${e.name} in ${e.namespace}`,application:a,modalInstance:n}),this.command={manifestName:e.name,location:e.namespace,account:e.account,reason:null,replicas:t}}isValid(){return this.verification.verified}cancel(){this.$uibModalInstance.dismiss()}scale(){this.taskMonitor.submit((()=>{const e=t(this.command);return e.cloudProvider="kubernetes",m.scaleManifest(e,this.application)}))}}_t.$inject=["coordinates","currentReplicas","$uibModalInstance","application"];const Ht="spinnaker.kubernetes.v2.manifest.scale.controller";var Wt,Xt;e("spinnaker.kubernetes.v2.manifest.scale.controller",["spinnaker.kubernetes.v2.kubernetes.manifest.scale.settingsForm.component"]).controller("kubernetesV2ManifestScaleCtrl",_t),(Xt=Wt||(Wt={})).Static="static",Xt.Dynamic="dynamic",Xt.Label="label";const Jt={[Wt.Static]:{label:"Choose a static target",selectorDefaults:{cluster:null,criteria:null,kind:null,kinds:null,labelSelectors:null}},[Wt.Dynamic]:{label:"Choose a target dynamically",selectorDefaults:{kinds:null,labelSelectors:null,manifestName:null}},[Wt.Label]:{label:"Match target(s) by label",selectorDefaults:{cluster:null,criteria:null,kind:null,kinds:[],labelSelectors:{selectors:[]},manifestName:null}}};class Zt{static search(e,t,n){return A.search({q:t,type:e}).then((a=>Te(a?a.results:[]).filter((a=>a.namespace===t&&a.account===n&&a.kubernetesKind===e)).uniqBy("name").valueOf())).catch((()=>[]))}}Pt(".label-editor-kind-select {\n min-width: 125px;\n}\n");const Qt=["ANY","EQUALS","NOT_EQUALS","CONTAINS","NOT_CONTAINS","EXISTS","NOT_EXISTS"].map((e=>({label:e,value:e}))),Yt=class extends Ze.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 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(((e,t)=>Ze.createElement("tr",{className:"label-editor-selector-row",key:t},Ze.createElement("td",null,Ze.createElement("input",{className:"form-control input input-sm label-editor-key-input",type:"text",value:e.key,onChange:e=>this.handleChange(t,"key",e.target.value)})),Ze.createElement("td",null,Ze.createElement(nt,{className:"label-editor-kind-select",clearable:!1,onChange:e=>this.handleChange(t,"kind",e.value),options:Qt,value:e.kind})),Ze.createElement("td",null,Ze.createElement("input",{className:"form-control input input-sm label-editor-values-input",onChange:e=>this.handleChange(t,"values",Yt.convertValueStringToArray(e.target.value)),placeholder:"Comma-separated values",value:e.values.join(", "),type:"text"})),Ze.createElement("td",null,Ze.createElement("button",{className:"link label-editor-remove",onClick:()=>this.removeField(t)},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")))))}};let en=Yt;en.defaultProps={labelSelectors:[],onLabelSelectorsChange:p},en.convertValueStringToArray=e=>e.split(",").map((e=>e.trim()));const tn=e=>{const[t,n]=(e||"").split(" ");return{kind:t,name:n}};class nn{constructor(e){this.component=e,this.handles=e=>e===Wt.Static,this.handleModeChange=()=>{const{selector:e}=this.component.state;this.handleKindChange(e.kind),Object.assign(e,Jt.static.selectorDefaults),this.component.setStateAndUpdateStage({selector:e})},this.handleKindChange=e=>{const{selector:t}=this.component.state,{name:n}=tn(t.manifestName);t.manifestName=e?n?`${e} ${n}`:e:n},this.getKind=()=>tn(this.component.state.selector.manifestName).kind}}class an{constructor(e){this.component=e,this.handles=e=>e===Wt.Dynamic,this.handleModeChange=()=>{const{selector:e}=this.component.state,{kind:t}=tn(e.manifestName);e.kind=t||null,Object.assign(e,Jt.dynamic.selectorDefaults),this.component.setStateAndUpdateStage({selector:e})},this.handleKindChange=e=>{this.component.state.selector.kind=e},this.getKind=()=>this.component.state.selector.kind}}class sn{constructor(e){this.component=e,this.handles=e=>e===Wt.Label,this.handleModeChange=()=>{const{selector:e}=this.component.state;Object.assign(e,Jt.label.selectorDefaults),this.component.setStateAndUpdateStage({selector:e})},this.handleKindChange=()=>{},this.getKind=()=>null}}class rn 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||p)},this.componentDidMount=()=>{this.loadAccounts(),this.search$.pipe(it((()=>this.setStateAndUpdateStage({loading:!0}))),ot((({kind:e,namespace:t,account:n})=>rt(this.search(e,t,n)))),lt(this.destroy$)).subscribe((e=>{null==this.state.selector.manifestName&&this.getSelectedMode()===Wt.Static&&this.handleNameChange(""),this.setStateAndUpdateStage({loading:!1,resources:e,selector:this.state.selector})}))},this.componentWillUnmount=()=>this.destroy$.next(),this.loadAccounts=()=>s.getAllAccountDetailsForProvider("kubernetes").then((e=>{const t=this.state.selector,n=tn(t.manifestName).kind;this.setStateAndUpdateStage({accounts:e}),!t.account&&e.length>0&&(t.account=e.some((e=>e.name===h.providers.kubernetes.defaults.account))?h.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:tn(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:tn(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}=tn(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)?Xe.resolve([]):Zt.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||Wt.Static,this.getFilteredClusters=()=>{const{application:e,includeSpinnakerKinds:t}=this.props,{selector:n}=this.state,a=e?[e]:[],s=Be(t)||t.length>1||"serverGroups"!==t[0];return M.getClusters(a,(e=>{const t=M.clusterFilterForCredentialsAndRegion(n.account,n.location)(e),a=Re(e,"serverGroupManagers.length",0)>0,r=s||!a,i=a?e.cluster:e.name,o=tn(i).kind===this.modeDelegate().getKind();return t&&r&&o}))},this.props.selector.mode||(this.props.selector.mode=Wt.Static,this.props.onChange&&this.props.onChange(this.props.selector)),this.state={selector:e.selector,accounts:[],namespaces:[],kinds:[],resources:[],loading:!1},this.handlers=[new nn(this),new an(this),new sn(this)]}render(){const{TargetSelect:e}=N,t=this.getSelectedMode(),n=this.props.modes||[t],{selector:a,accounts:s,kinds:r,namespaces:o,resources:l,loading:c}=this.state,d=this.modeDelegate().getKind(),u=tn(a.manifestName).name,p=l.map((e=>tn(e).name)),m=a.kinds||[],h=Ze.createElement(w,{label:"Kind"},Ze.createElement(at,{clearable:!1,value:{value:d,label:d},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(w,{label:"Account"},Ze.createElement(i,{value:a.account,onChange:e=>this.handleAccountChange(e.target.value),accounts:s,provider:"'kubernetes'"})),Ze.createElement(w,{label:"Namespace"},Ze.createElement(at,{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(Wt.Label)&&h,n.length>1&&Ze.createElement(w,{label:"Selector"},n.map((e=>Ze.createElement("div",{className:"radio",key:e},Ze.createElement("label",{htmlFor:e},Ze.createElement("input",{type:"radio",onChange:()=>this.handleModeSelect(e),checked:t===e,id:e})," ",Re(Jt,[e,"label"],"")))))),n.includes(Wt.Label)&&t!==Wt.Label&&h,n.includes(Wt.Static)&&t===Wt.Static&&Ze.createElement(w,{label:"Name"},Ze.createElement(at,{isLoading:c,clearable:!1,value:{value:u,label:u},options:p.map((e=>({value:e,label:e}))),onChange:e=>this.handleNameChange(e?e.value:""),promptTextCreator:this.promptTextCreator})),n.includes(Wt.Dynamic)&&t===Wt.Dynamic&&Ze.createElement(Ze.Fragment,null,Ze.createElement(w,{label:"Cluster"},Ze.createElement(x,{clusters:this.getFilteredClusters(),model:a.cluster,onChange:this.handleClusterChange})),Ze.createElement(w,{label:"Target"},Ze.createElement(e,{onChange:this.handleCriteriaChange,model:{target:a.criteria},options:D.MANIFEST_CRITERIA_OPTIONS}))),n.includes(Wt.Label)&&t===Wt.Label&&Ze.createElement(Ze.Fragment,null,Ze.createElement(w,{label:"Kinds"},Ze.createElement(nt,{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(w,{label:"Labels"},Ze.createElement(en,{labelSelectors:Re(a,"labelSelectors.selectors",[]),onLabelSelectorsChange:this.handleLabelSelectorsChange}))))}}e("spinnaker.kubernetes.v2.manifest.selector.component",[]).component("kubernetesManifestSelector",Ye(b(rn,"kubernetesManifestSelector"),["selector","modes","application","onChange"]));class on extends Ze.Component{render(){const{condition:e}=this.props,t=tt.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&&v(t.toMillis()))),Ze.createElement("div",{key:"message"},e.message)]}}const ln="spinnaker.kubernetes.v2.manifest.condition.component";e("spinnaker.kubernetes.v2.manifest.condition.component",[]).component("kubernetesManifestCondition",Ye(b(on,"kubernetesManifestCondition"),["condition"]));const cn={bindings:{status:"<"},controller:class{},controllerAs:"ctrl",template:'\n <div ng-if="!ctrl.status" class="horizontal middle center spinner-section">\n <loading-spinner size="\'small\'"></loading-spinner>\n </div>\n <div ng-if="ctrl.status">\n <div class="band band-warning" ng-if="!ctrl.status.available.state"\n uib-tooltip="{{ctrl.status.available.message}}">\n Not Fully Available\n </div>\n <div class="band band-active" ng-if="!ctrl.status.stable.state"\n uib-tooltip="{{ctrl.status.stable.message}}">\n Transitioning\n </div>\n <div class="band band-info" ng-if="ctrl.status.paused.state"\n uib-tooltip="{{ctrl.status.paused.message}}">\n Rollout Paused\n </div>\n </div>\n '},dn="spinnaker.kubernetes.v2.kubernetes.manifest.status.component";e(dn,[]).component("kubernetesManifestStatus",cn);var un,pn;Pt(".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 mn 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),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 Ze.createElement(Ze.Fragment,null,Ze.createElement(w,{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(w,{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")))}}mn.defaultProps={onOptionsChange:p,options:{cascading:!0,gracePeriodSeconds:null}};class hn extends Ze.Component{constructor(){super(...arguments),this.componentDidMount=()=>{Oe(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(rn,{application:this.props.application,selector:e,modes:[Wt.Static,Wt.Dynamic,Wt.Label],onChange:this.onChange,includeSpinnakerKinds:null}),Ze.createElement("h4",null,"Settings"),Ze.createElement("div",{className:"horizontal-rule"}),Ze.createElement(mn,{onOptionsChange:this.onOptionsChange,options:this.props.stage.options}))}}(pn=un||(un={})).ANY="ANY",pn.EQUALS="EQUALS",pn.NOT_EQUALS="NOT_EQUALS",pn.CONTAINS="CONTAINS",pn.NOT_CONTAINS="NOT_CONTAINS",pn.EXISTS="EXISTS",pn.NOT_EXISTS="NOT_EXISTS";const Cn=e=>Re(D.MANIFEST_CRITERIA_OPTIONS.find((t=>t.val===e)),"label"),fn=e=>(e.selectors||[]).map((e=>{const{key:t,kind:n,values:a=[]}=e;switch(n){case un.ANY:return null;case un.EQUALS:return`${t} = ${a[0]}`;case un.NOT_EQUALS:return`${t} != ${a[0]}`;case un.CONTAINS:return`${t} in (${a.join(", ")})`;case un.NOT_CONTAINS:return`${t} notin (${a.join(", ")})`;case un.EXISTS:return`${t}`;case un.NOT_EXISTS:return`!${t}`;default:return null}})).filter((e=>!!e)).join(", "),gn=({account:e,manifestName:t,location:n,cluster:a,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=Le(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,n),null!=Cn(s)&&null!=a&&Ze.createElement(Ze.Fragment,null,Ze.createElement("dt",null,"Target"),Ze.createElement("dd",null,`${Cn(s)} in cluster ${a}`)),null!=r&&!!fn(r)&&Ze.createElement(Ze.Fragment,null,Ze.createElement("dt",null,"Selector",(r.selectors||[]).length>1?"s":""),Ze.createElement("dd",null,fn(r)))),bn=e=>{var t;return(t=class extends Ze.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 Ze.createElement(T,{name:n,current:t},Ze.createElement("div",{className:"row"},Ze.createElement("div",{className:"col-md-9"},Ze.createElement("dl",{className:"dl-narrow dl-horizontal"},Ze.createElement(gn,{account:a,manifestName:s,location:r,cluster:i,criteria:o,labelSelectors:l,manifestNamesByNamespace:c})))),Ze.createElement(G,{stage:e,message:e.failureMessage}))}}).title=e,t},vn=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===Wt.Dynamic){if(!n.kind)return t("Kind");if(!n.cluster)return t("Cluster");if(!n.criteria)return t("Target")}else if(n.mode===Wt.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===Wt.Label&&!n.kinds)return t("Kinds");return null}}]};R.pipeline.registerStage({label:"Delete (Manifest)",description:"Destroy a Kubernetes object created from a manifest.",key:"deleteManifest",cloudProvider:"kubernetes",component:hn,executionDetailsSections:[bn("deleteManifest"),F],accountExtractor:e=>e.account?[e.account]:[],configAccountExtractor:e=>e.account?[e.account]:[],validators:vn("Delete (Manifest)")});const kn=class extends Ze.Component{constructor(e){super(e),this.destroy$=new st,this.useManifest=()=>{const{data:{account:e,region:t,name:n}}=this.state.selectedManifest;rt(C.getManifest(e,t,n)).pipe(lt(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=$(e.kind).trim();return Ze.createElement("span",null,Ze.createElement(I,{account:e.account}),e.data&&Ze.createElement("span",null," ",e.name)," (",t," in ",e.location,")")},this.manifestOptionRenderer=e=>{const t=$(e.kind).trim();return Ze.createElement("h5",null,Ze.createElement(I,{account:e.account})," ",e.name," (",t," in ",e.location,")")},this.state=kn.getState(e)}componentWillUnmount(){this.destroy$.next()}render(){const{selectedManifest:e,manifests:t}=this.state;return Ze.createElement(ct,{show:this.props.show,onHide:p},Ze.createElement(P,{dismiss:this.props.onDismiss}),Ze.createElement("div",null,Ze.createElement(ct.Header,null,Ze.createElement(ct.Title,null,"Copy Manifest")),Ze.createElement(ct.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(B,{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")))))}};let yn=kn;yn.getState=e=>{let t=[];const n=e.application.getDataSource("serverGroups").data.filter((t=>t.cloudProvider===e.cloudProvider&&"serverGroup"===t.category&&!(t.serverGroupManagers||[]).length)),a=ze(n,(e=>[e.cluster,e.account,e.region].join(":")));Object.keys(a).forEach((e=>{const n=Ie(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=Ie(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}};class En 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(yn,{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 Sn extends Ze.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 Ze.createElement("div",{className:"row",key:r},Ze.createElement("div",{className:"col-md-10"},Ze.createElement(O,{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:[L.FRONT50_PIPELINE_TEMPLATE]})),s&&Ze.createElement("div",{className:"col-md-2"},Ze.createElement("a",{className:"glyphicon glyphicon-trash",onClick:()=>this.onRemoveBinding(a)})))};return Ze.createElement(Ze.Fragment,null,n.map(((e,t)=>a(t,e))),a(n.length))}}class An extends Ze.Component{constructor(){super(...arguments),this.defaultProps={createable:!1}}getNamespaceOptions(){const{accounts:e,selectedAccount:t,selectedNamespace:n}=this.props,a=Ke(e,(e=>e.name===t)),s=Re(a,"namespaces",[]),r=qe(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?Ze.createElement(at,{...e}):Ze.createElement(nt,{...e})}}const Mn={label:"Red/Black (Deprecated)",description:"Disables <i>all</i> previous ReplicaSets in the cluster as soon as the new ReplicaSet is ready",key:"redblack"},wn=[{label:"None",description:"Creates the new ReplicaSet with no impact on existing ReplicaSets in the cluster",key:null,providerRestricted:!1},Mn,{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"}],xn={enabled:!1,options:{namespace:null,services:[],enableTraffic:!1,strategy:null}};class Dn 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:[]}),Zt.search("service",e,t).then((e=>{this.setState({services:qe(e,"name")})}))},this.getServiceOptions=()=>{const e=this.state.services.map((e=>({label:Ue(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(z,{tag:"span",message:e.label})),Ze.createElement("div",null,Ze.createElement(z,{tag:"span",message:e.description})))}updateProps(e,t){const n=xe(this.props.config);Ve(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 Ze.createElement(Ze.Fragment,null,Ze.createElement("h4",null,"Rollout Strategy Options"),Ze.createElement(w,{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(w,{fieldColumns:8,label:"Service(s) Namespace"},Ze.createElement(An,{createable:!0,onChange:e=>this.onConfigChange("options.namespace",e),accounts:this.props.accounts,selectedAccount:this.props.selectedAccount,selectedNamespace:e.options.namespace||""})),Ze.createElement(w,{fieldColumns:8,label:"Service(s)"},Ze.createElement(at,{clearable:!1,multi:!0,onChange:e=>this.onConfigChange("options.services",qe(e,"value")),options:this.getServiceOptions(),value:e.options.services})),Ze.createElement(w,{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(w,{fieldColumns:8,helpKey:"kubernetes.manifest.rolloutStrategy",label:"Strategy"},Ze.createElement(nt,{id:"strategyDropdown",clearable:!1,onChange:e=>this.onConfigChange("options.strategy",e.key),options:wn,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 Nn extends Ze.Component{constructor(e){super(e),this.excludedManifestArtifactTypes=[L.DOCKER_IMAGE,L.KUBERNETES,L.FRONT50_PIPELINE_TEMPLATE,L.MAVEN_FILE],this.getSourceOptions=()=>qe([ht.TEXT,ht.ARTIFACT],(e=>({label:je(e),value:e}))),this.handleCopy=e=>{this.props.formik.setFieldValue("manifests",[e]),this.setState({rawManifest:K([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)))};const t=this.props.formik.values,n=Re(e.formik.values,"manifests"),a=Re(e.formik.values,"source")===ht.TEXT;this.state={rawManifest:!Be(n)&&a?K(n):"",overrideNamespace:""!==Re(t,"namespaceOverride","")}}overrideNamespaceChange(e){e||this.props.formik.setFieldValue("namespaceOverride",""),this.setState({overrideNamespace:e})}render(){const e=this.props.formik.values;return Ze.createElement("div",{className:"form-horizontal"},Ze.createElement("h4",null,"Basic Settings"),Ze.createElement(gt,{accounts:this.props.accounts,onAccountSelect:e=>this.props.formik.setFieldValue("account",e),selectedAccount:e.account}),Ze.createElement(w,{label:"Override Namespace"},Ze.createElement(q,{checked:this.state.overrideNamespace,onChange:e=>this.overrideNamespaceChange(e.target.checked)})),this.state.overrideNamespace&&Ze.createElement(w,{label:"Namespace"},Ze.createElement(An,{createable:!0,accounts:this.props.accounts,selectedAccount:e.account,selectedNamespace:e.namespaceOverride||"",onChange:e=>this.props.formik.setFieldValue("namespaceOverride",e)})),Ze.createElement("hr",null),Ze.createElement("h4",null,"Manifest Configuration"),Ze.createElement(w,{label:"Manifest Source",helpKey:"kubernetes.manifest.source"},Ze.createElement(U,{options:this.getSourceOptions(),onChange:e=>this.props.formik.setFieldValue("source",e.target.value),value:e.source})),e.source===ht.TEXT&&Ze.createElement(w,{label:"Manifest"},Ze.createElement(En,{application:this.props.application,handleCopy:this.handleCopy}),Ze.createElement(o,{onChange:this.handleRawManifestChange,value:this.state.rawManifest})),e.source===ht.ARTIFACT&&Ze.createElement(Ze.Fragment,null,Ze.createElement(V,{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(w,{label:"Expression Evaluation",helpKey:"kubernetes.manifest.skipExpressionEvaluation"},Ze.createElement(q,{checked:!0===e.skipExpressionEvaluation,onChange:e=>this.props.formik.setFieldValue("skipExpressionEvaluation",e.target.checked),text:"Skip SpEL expression evaluation"}))),Ze.createElement(w,{label:"Required Artifacts to Bind",helpKey:"kubernetes.manifest.requiredArtifactsToBind"},Ze.createElement(Sn,{bindings:this.getRequiredArtifacts(),onChangeBindings:this.onRequiredArtifactsChanged,pipeline:this.props.pipeline,stage:e})),Ze.createElement("hr",null),Ze.createElement(Dn,{accounts:this.props.accounts,config:e.trafficManagement,onConfigChange:e=>this.props.formik.setFieldValue("trafficManagement",e),selectedAccount:e.account}))}}class Tn extends Ze.Component{constructor(e){super(e),this.destroy$=new st,this.fetchAccounts=()=>{rt(s.getAllAccountDetailsForProvider("kubernetes")).pipe(lt(this.destroy$)).subscribe((e=>{this.setState({accounts:e})}))},this.state={accounts:[]};const{stage:t}=e,n=xe(t);n.source||(n.source=ht.TEXT),n.skipExpressionEvaluation||(n.skipExpressionEvaluation=!1),n.trafficManagement||(n.trafficManagement=xn),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 Ze.createElement(j,{...this.props,stage:this.stage,onChange:this.props.updateStage,render:e=>Ze.createElement(Nn,{...e,accounts:this.state.accounts})})}}const Gn={available:"success",stable:"success",paused:"warn",failed:"danger"};class Rn extends Ze.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=Gn[t]||"",r=a.state,i=!r&&a.message;return Ze.createElement("span",{key:n},r&&Ze.createElement("span",{title:a.message,className:`pill ${s}`},t),i&&Ze.createElement("span",{title:a.message,className:"pill warn"},t),(r||i)&&Ze.createElement("span",null," "))}))}}class Fn 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 $e(Re(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||"kubernetesResource"!==e||(s.region=n),s.region&&""!==s.region||(s.region="_"),s}loadUrl(){const e=Re(this.props,["manifest","manifest","kind"],""),{accountId:t}=this.props;s.getAccountDetails(t).then((t=>{const n=this.spinnakerKindFromKubernetesKind(e,t.spinnakerKindMap),a=this.spinnakerKindStateMap[n]||"kubernetesResource",s=this.getStateParams(a),r=_.$state.href(`home.applications.application.insight.clusters.${a}`,s);this.setState({url:r})}))}render(){return this.canOpen()?Ze.createElement("a",{href:this.state.url,className:"clickable"},this.props.linkName):null}}function $n({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(H,{displayText:!0,text:t.manifest.metadata.name,toolTip:`Copy ${t.manifest.metadata.name}`})," ",Ze.createElement(Rn,{manifest:t}))),Ze.createElement("div",{className:"manifest-support-links",key:"manifest-support-links"},Ze.createElement(W,{linkName:"YAML",manifestText:We(t.manifest),modalTitle:t.manifest.metadata.name}),Ze.createElement(Fn,{linkName:"Details",manifest:t,accountId:e})),Ze.createElement("div",{className:"manifest-events pad-left",key:"manifest-events"},Ze.createElement($t,{manifest:t})))}Pt("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");const In=class{static subscribe(e,t,n){return In.updateManifest(t,n),e.onRefresh(null,(()=>In.updateManifest(t,n)))}static updateManifest(e,t){C.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(e,t){return{account:t,name:In.scopedKind(e)+" "+e.metadata.name,location:null==e.metadata.namespace?"_":e.metadata.namespace}}static apiGroup(e){const t=(e.apiVersion||"_").split("/");return t.length<2?"":t[0]}static isCRDGroup(e){return!In.BUILT_IN_GROUPS.includes(In.apiGroup(e))}static scopedKind(e){return In.isCRDGroup(e)?e.kind+"."+In.apiGroup(e):e.kind}};let Pn=In;Pn.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"];Pt(".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 Bn 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 n=Re(this.props.stage,["context","outputs.manifests"],[]).filter((e=>!!e)),a=n.map((e=>Pn.manifestIdentifier(e))).sort();if(t.manifestIds.join("")!==a.join("")){this.unsubscribeAll();const e=n.map((e=>{const t=Pn.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=Pn.stageManifestToManifestParams(t,this.props.stage.context.account);return Pn.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:Re(e,"metadata.name",""),moniker:null,account:t,cloudProvider:"kubernetes",location:Re(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 Ze.createElement("div",{className:"deploy-status"},Ze.createElement(T,{name:e,current:t},h.feature.multiBlockFailureMessages?n.failureMessages.map((e=>Ze.createElement(X,{key:e,maxHeight:150},Ze.createElement(G,{stage:n,message:e})))):Ze.createElement(G,{stage:n,message:n.failureMessage}),!!(null==a?void 0:a.length)&&Ze.createElement("div",{className:"row"},Ze.createElement("div",{className:"col-md-12"},Ze.createElement("div",{className:"well alert alert-info"},a.map((e=>{const t=e.manifest.metadata.uid||Pn.manifestIdentifier(e.manifest);return Ze.createElement($n,{key:t,manifest:e,account:n.context.account})})))))))}}Bn.title="deployStatus",R.pipeline.registerStage({label:"Deploy (Manifest)",description:"Deploy a Kubernetes manifest yaml/json file.",key:"deployManifest",cloudProvider:"kubernetes",component:Tn,executionDetailsSections:[Bn,F,J],producesArtifacts:!0,supportsCustomTimeout:!0,validators:[{type:"requiredField",fieldName:"account",fieldLabel:"Account"},{type:"requiredField",fieldName:"source",fieldLabel:"Source"},{type:"custom",validate:(e,t)=>{const n=Re(t,"trafficManagement.enabled",!1),a=Re(t,"trafficManagement.options.services",[]);if(n&&Be(a))return"Select at least one <strong>Service</strong> to enable Spinnaker-managed rollout strategy options.";if(n&&t.source===ht.TEXT){const e=Re(t,"manifests",[]).filter((e=>"ReplicaSet"===e.kind)),n=Re(t,"trafficManagement.options.strategy"),a=parseInt(Re(e,[0,"metadata","annotations","strategy.spinnaker.io/max-version-history"]),10);if(n===Mn.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>strategy.spinnaker.io/max-version-history</strong> annotation to a value greater than or equal to 2."}return null}}],accountExtractor:e=>e.account?[e.account]:[],configAccountExtractor:e=>e.account?[e.account]:[],artifactExtractor:Z.accumulateArtifacts(["manifestArtifactId","requiredArtifactIds"]),artifactRemover:Q.removeArtifactFromFields(["manifestArtifactId","requiredArtifactIds"])});const On=e=>Ze.createElement("div",{className:"form-horizontal"},Ze.createElement(w,{label:"Record Patch Annotation",helpKey:"kubernetes.manifest.patch.record"},Ze.createElement(q,{checked:e.record,onChange:t=>e.onRecordChange(t.target.checked)})),Ze.createElement(w,{label:"Merge Strategy",helpKey:"kubernetes.manifest.patch.mergeStrategy",fieldColumns:3},Ze.createElement(nt,{clearable:!1,value:e.strategy,options:["strategic","json","merge"].map((e=>({value:e,label:e}))),onChange:t=>e.onStrategyChange(t.value)})));class Ln extends Ze.Component{constructor(e){super(e),this.excludedManifestArtifactTypes=[L.DOCKER_IMAGE,L.KUBERNETES,L.FRONT50_PIPELINE_TEMPLATE,L.EMBEDDED_BASE64,L.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=()=>qe([ht.TEXT,ht.ARTIFACT],(e=>({label:je(e),value:e})));const t=Re(e.formik.values,"patchBody"),n=Re(e.formik.values,"source")===ht.TEXT;this.state={rawManifest:!Be(t)&&n?K(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(rn,{application:this.props.application,modes:[Wt.Static,Wt.Dynamic],onChange:this.onManifestSelectorChange,selector:e}),Ze.createElement("hr",null),Ze.createElement("h4",null,"Patch Content"),Ze.createElement(w,{label:"Manifest Source",helpKey:"kubernetes.manifest.source"},Ze.createElement(U,{options:this.getSourceOptions(),onChange:e=>this.props.formik.setFieldValue("source",e.target.value),value:e.source})),e.source===ht.TEXT&&Ze.createElement(w,{label:"Manifest"},Ze.createElement(o,{onChange:this.handleRawManifestChange,value:this.state.rawManifest})),e.source===ht.ARTIFACT&&Ze.createElement(Ze.Fragment,null,Ze.createElement(V,{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(w,{label:"Required Artifacts to Bind",helpKey:"kubernetes.manifest.requiredArtifactsToBind"},Ze.createElement(Sn,{bindings:this.getRequiredArtifacts(),onChangeBindings:this.onRequiredArtifactsChanged,pipeline:this.props.pipeline,stage:e})),Ze.createElement("hr",null),Ze.createElement("h4",null,"Patch Options"),Ze.createElement(On,{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 zn extends Ze.Component{constructor(e){super(e),Oe(e.stage,{app:e.application.name,source:ht.TEXT,options:{record:!0,mergeStrategy:"strategic"},cloudProvider:"kubernetes"}),Oe(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(j,{...this.props,stage:this.stage,onChange:this.props.updateStage,render:e=>Ze.createElement(Ln,{...e,stageFieldUpdated:this.props.stageFieldUpdated})})}}class Kn extends Bn{}Kn.title="PatchStatus";R.pipeline.registerStage({label:"Patch (Manifest)",description:"Patch a Kubernetes object in place.",key:"patchManifest",cloudProvider:"kubernetes",component:zn,executionDetailsSections:[Kn,F,J],producesArtifacts:!0,supportsCustomTimeout:!0,validators:vn("Patch (Manifest)"),artifactExtractor:Z.accumulateArtifacts(["manifestArtifactId","requiredArtifactIds"]),artifactRemover:Q.removeArtifactFromFields(["manifestArtifactId","requiredArtifactIds"])});class qn extends Ze.Component{constructor(){super(...arguments),this.componentDidMount=()=>{Oe(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(rn,{application:this.props.application,selector:e,modes:[Wt.Static,Wt.Dynamic,Wt.Label],onChange:this.onChange,includeSpinnakerKinds:null}))}}class Un extends Bn{}Un.title="RolloutRestartStatus";R.pipeline.registerStage({label:"Rollout Restart (Manifest)",description:"Perform a rolling restart of a manifest.",key:"rollingRestartManifest",cloudProvider:"kubernetes",component:qn,executionDetailsSections:[Un,F],validators:vn("Rollout Restart (Manifest)")});class Vn extends Ze.Component{constructor(e){super(e),this.state={credentials:[]},this.excludedManifestArtifactTypes=[L.DOCKER_IMAGE,L.KUBERNETES,L.FRONT50_PIPELINE_TEMPLATE,L.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=()=>qe([ht.TEXT,ht.ARTIFACT],(e=>({label:je(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=ht.TEXT)}initRawManifest(){const{stage:e}=this.props;e.manifest&&this.setState({rawManifest:K([e.manifest])})}componentDidMount(){this.props.updateStageField({cloudProvider:"kubernetes"}),s.getAllAccountDetailsForProvider("kubernetes").then((e=>{this.setState({credentials:e})})),this.initRawManifest()}logSourceForm(){const{stage:e}=this.props;return Ze.createElement(w,{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(w,{label:"Artifact"},Ze.createElement(O,{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(gt,{selectedAccount:e.account||"",accounts:this.state.credentials,onAccountSelect:e=>this.accountChanged(e)}),Ze.createElement("h4",null,"Manifest Configuration"),Ze.createElement(w,{label:"Manifest Source",helpKey:"kubernetes.manifest.source"},Ze.createElement(U,{options:this.getSourceOptions(),onChange:e=>this.props.updateStageField({source:e.target.value}),value:e.source})),e.source===ht.TEXT&&Ze.createElement(o,{value:this.state.rawManifest,onChange:this.handleRawManifestChange}),e.source===ht.ARTIFACT&&Ze.createElement(Ze.Fragment,null,Ze.createElement(V,{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(w,{label:"Required Artifacts to Bind",helpKey:"kubernetes.manifest.requiredArtifactsToBind"},Ze.createElement(Sn,{bindings:this.getRequiredArtifacts(),onChangeBindings:this.onRequiredArtifactsChanged,pipeline:this.props.pipeline,stage:e})),Ze.createElement("h4",null,"Output"),Ze.createElement(w,{label:"Capture Output From",helpKey:"kubernetes.runJob.captureSource"},Ze.createElement("div",null,Ze.createElement(nt,{clearable:!1,options:this.outputOptions,value:e.consumeArtifactSource,onChange:this.sourceChanged}))),t)}}class jn extends Ze.Component{createdPodNames(e){return Ie(e,(e=>e.status.startTime)).map((e=>e.name))}render(){const{stage:e,name:t,current:n}=this.props,{context:a}=e,s=Re(e,["context","jobStatus","location"],""),r=s?Re(a,["deploy.jobs",s])[0]:"",i=Re(e,["context","execution","logs"]),o=Re(e.context,"jobStatus.pods",[]),l=(Be(o)?[Re(e,["context","jobStatus","mostRecentPodName"],"")]:this.createdPodNames(o)).map((e=>new Y(e)));return Ze.createElement(T,{name:t,current:n},Ze.createElement(G,{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(I,{account:a.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(ee,{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...")))))}}jn.title="runJobConfig",R.pipeline.registerStage({label:"Run Job (Manifest)",description:"Run a Kubernetes Job manifest yaml/json file.",key:"runJobManifest",alias:"runJob",addAliasToConfig:!0,cloudProvider:"kubernetes",component:Vn,executionDetailsSections:[jn,Bn,F],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.":""}]});class _n{constructor(e){if(this.$scope=e,this.handleManifestSelectorChange=()=>{this.$scope.$applyAsync()},this.application=this.$scope.$parent.application,this.$scope.stage.isNew){const e={location:"",account:"",manifestName:"",app:this.application.name};Object.assign(this.$scope.stage,e),this.$scope.stage.cloudProvider="kubernetes"}}}_n.$inject=["$scope"];const Hn="Find Artifacts From Resource (Manifest)";e("spinnaker.kubernetes.v2.pipeline.stage.findArtifactsFromResource",["spinnaker.kubernetes.v2.manifest.selector.component"]).config((()=>{R.pipeline.registerStage({label:Hn,description:"Finds artifacts from a Kubernetes resource.",key:"findArtifactsFromResource",cloudProvider:"kubernetes",templateUrl:"kubernetes/src/pipelines/stages/findArtifactsFromResource/findArtifactsFromResourceConfig.html",controller:"KubernetesV2FindArtifactsFromResourceConfigCtrl",controllerAs:"ctrl",executionDetailsSections:[F,J],producesArtifacts:!0,validators:vn(Hn)})})).controller("KubernetesV2FindArtifactsFromResourceConfigCtrl",_n),window.angular.module("ng").run(["$templateCache",function(e){e.put("kubernetes/src/pipelines/stages/findArtifactsFromResource/findArtifactsFromResourceConfig.html",'<div class="form-horizontal">\n <h4>Manifest</h4>\n <div class="horizontal-rule"></div>\n <kubernetes-manifest-selector\n modes="[\'static\', \'dynamic\']"\n application="ctrl.application"\n on-change="ctrl.handleManifestSelectorChange"\n selector="ctrl.$scope.stage"\n ></kubernetes-manifest-selector>\n</div>\n')}]);class Wn{constructor(e){if(this.$scope=e,this.handleManifestSelectorChange=()=>{this.$scope.$applyAsync()},this.$scope.stage.isNew){this.application=this.$scope.$parent.application;const e={location:"",account:""};Oe(this.$scope.stage,e);const t={replicas:null,app:this.application.name};Oe(this.$scope.stage,t),this.$scope.stage.cloudProvider="kubernetes"}}}Wn.$inject=["$scope"];e("spinnaker.kubernetes.v2.pipeline.stage.scaleManifestStage",["spinnaker.kubernetes.v2.kubernetes.manifest.scale.settingsForm.component"]).config((()=>{R.pipeline.registerStage({label:"Scale (Manifest)",description:"Scale a Kubernetes object created from a manifest.",key:"scaleManifest",cloudProvider:"kubernetes",templateUrl:"kubernetes/src/pipelines/stages/scaleManifest/scaleManifestConfig.html",controller:"KubernetesV2ScaleManifestConfigCtrl",controllerAs:"ctrl",executionDetailsSections:[bn("scaleManifest"),F],accountExtractor:e=>e.account?[e.account]:[],configAccountExtractor:e=>e.account?[e.account]:[],validators:[{type:"requiredField",fieldName:"location",fieldLabel:"Namespace"},{type:"requiredField",fieldName:"account",fieldLabel:"Account"},{type:"requiredField",fieldName:"replicas",fieldLabel:"Replicas"}]})})).controller("KubernetesV2ScaleManifestConfigCtrl",Wn),window.angular.module("ng").run(["$templateCache",function(e){e.put("kubernetes/src/pipelines/stages/scaleManifest/scaleManifestConfig.html",'<div class="form-horizontal">\n <h4>Manifest</h4>\n <div class="horizontal-rule"></div>\n <kubernetes-manifest-selector\n modes=\'["static", "dynamic"]\'\n application="ctrl.application"\n on-change="ctrl.handleManifestSelectorChange"\n selector="ctrl.$scope.stage"\n ></kubernetes-manifest-selector>\n <h4>Settings</h4>\n <div class="horizontal-rule"></div>\n <kubernetes-scale-manifest-settings-form settings="ctrl.$scope.stage"></kubernetes-scale-manifest-settings-form>\n</div>\n')}]);class Xn extends Ze.Component{constructor(){super(...arguments),this.componentDidMount=()=>{Oe(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(rn,{application:this.props.application,selector:e,modes:[Wt.Static,Wt.Dynamic],onChange:this.onChange,includeSpinnakerKinds:["serverGroups"]}))}}e("spinnaker.kubernetes.v2.pipeline.stage.disableManifestStage",[te]).config((()=>{R.pipeline.registerStage({label:"Disable (Manifest)",description:"Disable a Kubernetes manifest.",key:"disableManifest",cloudProvider:"kubernetes",component:Xn,executionDetailsSections:[bn("disableManifest"),F],supportsCustomTimeout:!0,accountExtractor:e=>e.account?[e.account]:[],configAccountExtractor:e=>e.account?[e.account]:[],validators:vn("Disable (Manifest)")})}));e("spinnaker.kubernetes.v2.pipeline.stage.enableManifestStage",[te]).config((()=>{R.pipeline.registerStage({label:"Enable (Manifest)",description:"Enable a Kubernetes manifest.",key:"enableManifest",cloudProvider:"kubernetes",component:Xn,executionDetailsSections:[bn("enableManifest"),F],supportsCustomTimeout:!0,accountExtractor:e=>e.account?[e.account]:[],configAccountExtractor:e=>e.account?[e.account]:[],validators:vn("Enable (Manifest)")})}));class Jn{constructor(e){this.$scope=e,this.handleManifestSelectorChange=()=>{this.$scope.$applyAsync()},this.$scope.stage.isNew&&Object.assign(this.$scope.stage,{location:"",account:"",cloudProvider:"kubernetes",numRevisionsBack:1})}}Jn.$inject=["$scope"];e("spinnaker.kubernetes.v2.pipeline.stage.undoRolloutManifestStage",[]).config((()=>{R.pipeline.registerStage({label:"Undo Rollout (Manifest)",description:"Rollback a manifest a target number of revisions.",key:"undoRolloutManifest",cloudProvider:"kubernetes",templateUrl:"kubernetes/src/pipelines/stages/undoRolloutManifest/undoRolloutManifestConfig.html",controller:"KubernetesV2UndoRolloutManifestConfigCtrl",controllerAs:"ctrl",accountExtractor:e=>e.account?[e.account]:[],configAccountExtractor:e=>e.account?[e.account]:[],validators:[{type:"requiredField",fieldName:"location",fieldLabel:"Namespace"},{type:"requiredField",fieldName:"account",fieldLabel:"Account"},{type:"requiredField",fieldName:"numRevisionsBack",fieldLabel:"Number of Revisions"},{type:"manifestSelector"}]})})).controller("KubernetesV2UndoRolloutManifestConfigCtrl",Jn),window.angular.module("ng").run(["$templateCache",function(e){e.put("kubernetes/src/pipelines/stages/undoRolloutManifest/undoRolloutManifestConfig.html",'<div class="form-horizontal">\n <h4>Manifest</h4>\n <div class="horizontal-rule"></div>\n <kubernetes-manifest-selector\n on-change="ctrl.handleManifestSelectorChange"\n selector="stage"\n ></kubernetes-manifest-selector>\n <h4>Settings</h4>\n <div class="form-horizontal">\n <div class="form-group form-inline">\n <div class="col-md-3 sm-label-right">\n Revisions Back\n <help-field key="kubernetes.manifest.undoRollout.revisionsBack"></help-field>\n </div>\n <div class="col-md-4">\n <div class="input-group">\n <input\n type="number"\n class="form-control input-sm highlight-pristine"\n ng-model="stage.numRevisionsBack"\n min="1"\n />\n <span class="input-group-addon">revision<span ng-if="ctrl.$scope.stage.numRevisionsBack !== 1">s</span></span>\n </div>\n </div>\n </div>\n </div>\n</div>\n')}]);ne.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 Zn=e=>re("applications").path(e.name,"rawResources").get(),Qn=e=>(t,n)=>e.resolve(n);e("spinnaker.core.rawresource.dataSource",[]).run(["$q",e=>{ae.registerDataSource({key:"k8s",label:"Kubernetes",category:se,sref:".insight.k8s",primary:!0,icon:"fas fa-xs fa-fw fa-th-large",iconName:"spMenuK8s",loader:Zn,onLoad:Qn(e),providerField:"cloudProvider",credentialsField:"account",regionField:"region",description:"Collections of kubernetes resources",defaultData:[]})}]);const Yn=class{static namespaceDisplayName(e){return null===e||""===e?Yn.GLOBAL_LABEL:e}static resourceKey(e){return null===e?"":""===e.namespace?e.account+"-"+e.kind+"-"+e.name:e.account+"-"+e.namespace+"-"+e.kind+"-"+e.name}};let ea=Yn;ea.GLOBAL_LABEL="(global)";const ta=class{constructor(){this.subscribers=[]}static getInstance(e){let t=ta.intances[e];return ta.intances[e]||(ta.intances[e]=new ta,t=ta.intances[e]),t}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)))}};let na=ta;na.intances={};Pt(".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 aa extends Ze.Component{constructor(e){super(e)}render(){const{account:e,name:t,region:n}=this.props.resource,a={account:e,name:t,region:n};return Ze.createElement(ut,{class:"active"},Ze.createElement(pt,{to:".rawResourceDetails",params:a},Ze.createElement("div",{className:"RawResource card clickable clickable-row"},Ze.createElement("h4",{className:"title"},Ze.createElement(ie,{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,ea.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 sa 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 ra 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?ea.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(sa,{title:this.groupTitle(e),key:e},t.map((e=>Ze.createElement(aa,{resource:e,key:ea.resourceKey(e)})))):Ze.createElement(Ze.Fragment,null))))}}Pt(".K8sResources {\n width: 100%;\n}\n.K8sResources .StandardFieldLayout {\n width: 25%;\n}\n.K8sResources .StandardFieldLayout .StandardFieldLayout_Label {\n min-width: 72px;\n}\n");class ia extends Ze.Component{constructor(e){super(e),this.filterPubSub=na.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("k8s"),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(oe,{onChange:this.groupByChanged,value:this.state.groupBy.charAt(0).toUpperCase()+this.state.groupBy.substr(1),name:"groupBy",label:"Group By",input:t=>Ze.createElement(le,{...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(aa,{key:ea.resourceKey(e),resource:e})))):Ze.createElement(ra,{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 oa extends Ze.Component{constructor(e){super(e),this.filterPubSub=na.getInstance(this.props.app.name),this.dataSource=this.props.app.getDataSource("k8s"),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[ea.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(ce,{heading:"Kind",expanded:!0},Object.keys(this.state.kinds).sort(((e,t)=>e.localeCompare(t))).map((e=>Ze.createElement(de,{heading:e,key:e,sortFilterType:this.state.kinds,onChange:this.onCheckbox.bind(this)})))),Ze.createElement(ce,{heading:"Account",expanded:!0},Object.keys(this.state.accounts).sort(((e,t)=>e.localeCompare(t))).map((e=>Ze.createElement(de,{heading:e,key:e,sortFilterType:this.state.accounts,onChange:this.onCheckbox.bind(this)})))),Ze.createElement(ce,{heading:"Namespace",expanded:!0},Object.keys(this.state.displayNamespaces).sort(((e,t)=>e.localeCompare(t))).map((e=>Ze.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==ea.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)}}ue("k8s.rawResource.details");class la extends Ze.Component{constructor(e){super(e),this.destroy$=new st,this.props$=new st,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};S.confirm({header:"Are you sure you want to delete the "+l+" "+o+"?",buttonText:"Delete",account:r,taskMonitorConfig:c,submitMethod:()=>{pe.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 m.deleteManifest(e,this.props.app)}})},this.handleEditClick=()=>{pe.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=Pn.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;ft.buildNewManifestCommand(e,a.manifest,{app:n},t).then((t=>{yt.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,u=null==(n=null==l?void 0:l.manifest)?void 0:n.metadata,p=null==u?void 0:u.name,m=Re(u,"creationTimestamp")&&tt.fromISO(u.creationTimestamp).toMillis();return Ze.createElement("div",{className:"details-panel"},Ze.createElement("div",{className:"header"},Ze.createElement("div",{className:"close-button"},Ze.createElement(pt,{to:"^"},Ze.createElement("span",{className:"glyphicon glyphicon-remove"}))),this.state.loading?Ze.createElement("div",{className:"horizontal center middle"},Ze.createElement(me,{size:"small"})):Ze.createElement("div",{className:"header-text horizontal middle"},Ze.createElement(ie,{provider:"kubernetes",height:"36px",width:"36px"}),Ze.createElement("h3",{className:"horizontal middle space-between flex-1"},c," ",p)),!this.state.loading&&h.kubernetesAdHocInfraWritesEnabled&&Ze.createElement("div",{className:"actions"},Ze.createElement(dt,{className:"dropdown",id:"resource-actions-dropdown"},Ze.createElement(dt.Toggle,{className:"btn btn-sm btn-primary dropdown-toggle"},Ze.createElement("span",null,c," Actions")),Ze.createElement(dt.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(he,{heading:"Information",defaultExpanded:!0},Ze.createElement("dl",{className:"dl-horizontal dl-narrow"},Ze.createElement("dt",null,"Created"),Ze.createElement("dd",null,Ce(m)),Ze.createElement("dt",null,"Account"),Ze.createElement("dd",null,Ze.createElement(I,{account:i})),Ze.createElement("dt",null,"API Version"),Ze.createElement("dd",null,d),Ze.createElement("dt",null,"Kind"),Ze.createElement("dd",null,c),Ze.createElement("dt",null,"Namespace"),Ze.createElement("dd",null,ea.namespaceDisplayName(o)))),Ze.createElement(he,{key:"status",heading:"status",defaultExpanded:!0},Ze.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=>Ze.createElement("li",{key:e.type+e.lastTransitionTime,style:{marginBottom:"10px"}},Ze.createElement(on,{condition:e})))))),Ze.createElement(he,{key:"events",heading:"events",defaultExpanded:!0},Ze.createElement($t,{manifest:l})),Ze.createElement(he,{key:"labels",heading:"labels",defaultExpanded:!0},Ze.createElement(Bt,{manifest:Re(l,["manifest"],{})}))))}}e("spinnaker.kubernetes.rawresource.states",[fe]).config(["applicationStateProvider",e=>{const t={name:"rawResourceDetails",url:"/rawResourceDetails/:account/:region/:name",views:{"detail@../insight":{component:la,$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:oa,$type:"react"},master:{component:ia,$type:"react"}},data:{pageTitleSection:{title:"Kubernetes"}},children:[]};e.addInsightState(n),e.addInsightDetailState(t)}]);const ca="spinnaker.kubernetes.rawresource";e("spinnaker.kubernetes.rawresource",["spinnaker.core.rawresource.dataSource","spinnaker.kubernetes.rawresource.states"]);class da 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=Pn.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=Re(e,["manifest","metadata"],null),n=Re(t,"creationTimestamp")&&tt.fromISO(t.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(pt,{to:"^"},Ze.createElement("span",{className:"glyphicon glyphicon-remove"})))),this.state.loading?Ze.createElement("div",{className:"horizontal center middle"},Ze.createElement(me,{size:"small"})):Ze.createElement("div",{className:"header-text horizontal middle"},Ze.createElement(ie,{provider:"kubernetes",height:"36px",width:"36px"}),Ze.createElement("h3",{className:"horizontal middle space-between flex-1"},Re(t,["name"],"")))),!this.state.loading&&Ze.createElement("div",{className:"content"},Ze.createElement(he,{heading:"Information"},Ze.createElement("dl",{className:"dl-horizontal dl-narrow"},Ze.createElement("dt",null,"Created"),Ze.createElement("dd",null,Ce(n)),Ze.createElement("dt",null,"Account"),Ze.createElement("dd",null,Ze.createElement(I,{account:Re(e,["account"],"")})),Ze.createElement("dt",null,"Namespace"),Ze.createElement("dd",null,Re(t,["namespace"],"")),Ze.createElement("dt",null,"Kind"),Ze.createElement("dd",null,Re(e,["manifest","kind"],"")))),Ze.createElement(he,{key:"status",heading:"status",defaultExpanded:!0},Ze.createElement("ul",null,Re(e,["manifest","status","conditions"],[]).map((e=>Ze.createElement("li",{key:e.type+e.lastTransitionTime,style:{marginBottom:"10px"}},Ze.createElement(on,{condition:e})))))),Ze.createElement(he,{key:"events",heading:"events",defaultExpanded:!0},Ze.createElement($t,{manifest:e})),Ze.createElement(he,{key:"labels",heading:"labels",defaultExpanded:!0},Ze.createElement(Bt,{manifest:Re(e,["manifest"],{})}))))}}e("spinnaker.core.kubernetesResource.states",[fe]).config(["applicationStateProvider",e=>{const t={name:"kubernetesResource",url:"/manifest/:provider/:accountId/:region/:kubernetesResource",views:{"detail@../insight":{component:da,$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 ua{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=!h.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(){ft.buildNewManifestCommand(this.app,this.manifest.manifest,this.securityGroup.moniker,this.securityGroup.account).then((e=>{yt.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),C.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"}))}}ua.$inject=["$uibModal","$state","$scope","securityGroupReader","resolvedSecurityGroup","app","$q"];const pa="spinnaker.kubernetes.securityGroupDetails.controller";e("spinnaker.kubernetes.securityGroupDetails.controller",[ge]).controller("kubernetesV2SecurityGroupDetailsCtrl",ua),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 ma{resolveIndexedSecurityGroup(e,t,n){return e[t.account][t.region][n]}}class ha{constructor(e){this.$q=e}normalizeSecurityGroup(e){return this.$q.resolve(e)}}ha.$inject=["$q"];e("spinnaker.kubernetes.securityGroupTransformer",[]).service("kubernetesV2SecurityGroupTransformer",ha);const Ca=class{};let fa=Ca;fa.ENABLE_MANIFEST_OPERATION="enableManifest",fa.DISABLE_MANIFEST_OPERATION="disableManifest",fa.enable=(e,t,n)=>be.executeTask({job:[{account:e.account,cloudProvider:"kubernetes",location:e.location,manifestName:e.name,type:Ca.ENABLE_MANIFEST_OPERATION,reason:n}],application:t,description:`Enable Manifest: ${e.name}`}),fa.disable=(e,t,n)=>be.executeTask({job:[{account:e.account,cloudProvider:"kubernetes",location:e.location,manifestName:e.name,type:Ca.DISABLE_MANIFEST_OPERATION,reason:n}],application:t,description:`Disable Manifest: ${e.name}`}),fa.canDisableServerGroup=e=>Ca.hasLoadBalancers(e)&&!Ca.isManaged(e)&&!e.disabled,fa.canEnableServerGroup=e=>Ca.hasLoadBalancers(e)&&!Ca.isManaged(e)&&e.disabled,fa.hasLoadBalancers=e=>{var t;return(null==(t=e.loadBalancers)?void 0:t.length)>0},fa.isManaged=e=>e.serverGroupManagers&&e.serverGroupManagers.length>0;class ga{constructor(e,t,n,a,s,r){this.app=t,this.$uibModal=n,this.$scope=a,this.$state=s,this.$q=r,this.state={loading:!0},this.canDisable=()=>fa.canDisableServerGroup(this.serverGroup),this.disableServerGroup=()=>{S.confirm({header:`Really disable ${this.manifest.name}?`,buttonText:"Disable",askForReason:!0,submitJustWithReason:!0,submitMethod:({reason:e})=>fa.disable(this.manifest,this.app,e),taskMonitorConfig:{application:this.app,title:`Disabling ${this.manifest.name}`,onTaskComplete:()=>this.app.getDataSource("serverGroups").refresh()}})},this.canEnable=()=>fa.canEnableServerGroup(this.serverGroup),this.enableServerGroup=()=>{S.confirm({header:`Really enable ${this.manifest.name}?`,buttonText:"Enable",askForReason:!0,submitJustWithReason:!0,submitMethod:({reason:e})=>fa.enable(this.manifest,this.app,e),taskMonitorConfig:{application:this.app,title:`Enabling ${this.manifest.name}`,onTaskComplete:()=>this.app.getDataSource("serverGroups").refresh()}})};const i=this.app.getDataSource("serverGroups");i.ready().then((()=>{this.extractServerGroup(e),this.$scope.isDisabled=!h.kubernetesAdHocInfraWritesEnabled,i.onRefresh(this.$scope,(()=>this.extractServerGroup(e)))})).catch((()=>this.autoClose()))}ownerReferences(){const e=this.manifest.manifest;return null!=e&&e.hasOwnProperty("metadata")&&e.metadata.hasOwnProperty("ownerReferences")&&Array.isArray(e.metadata.ownerReferences)?e.metadata.ownerReferences:[]}ownerIsController(e){return e.hasOwnProperty("controller")&&!0===e.controller}lowerCaseFirstLetter(e){return e.charAt(0).toLowerCase()+e.slice(1)}manifestController(){const e=this.ownerReferences().find(this.ownerIsController);return void 0===e?null:this.lowerCaseFirstLetter(e.kind)+" "+e.name}canScaleServerGroup(){return"DaemonSet"!==this.serverGroup.kind&&null===this.manifestController()}scaleServerGroup(){this.$uibModal.open({templateUrl:"kubernetes/src/manifest/scale/scale.html",controller:"kubernetesV2ManifestScaleCtrl",controllerAs:"ctrl",resolve:{coordinates:{name:this.serverGroup.name,namespace:this.serverGroup.namespace,account:this.serverGroup.account},currentReplicas:this.manifest.manifest.spec.replicas,application:this.app}})}canEditServerGroup(){return null===this.manifestController()}editServerGroup(){ft.buildNewManifestCommand(this.app,this.manifest.manifest,this.serverGroup.moniker,this.serverGroup.account).then((e=>{yt.show({title:"Edit Manifest",application:this.app,command:e})}))}deleteServerGroup(){this.$uibModal.open({templateUrl:"kubernetes/src/manifest/delete/delete.html",controller:"kubernetesV2ManifestDeleteCtrl",controllerAs:"ctrl",resolve:{coordinates:{name:this.serverGroup.name,namespace:this.serverGroup.namespace,account:this.serverGroup.account},manifestController:()=>this.manifestController(),application:this.app}})}autoClose(){this.$scope.$$destroyed||(this.$state.params.allowModalToStayOpen=!0,this.$state.go("^",null,{location:"replace"}))}extractServerGroup({accountId:e,name:t,region:n}){this.$q.all([ke.getServerGroup(this.app.name,e,n,t),C.getManifest(e,n,t)]).then((([e,t])=>{if(!e)return this.autoClose();this.serverGroup=e,this.entityTagTargets=this.configureEntityTagTargets(),this.manifest=t,this.state.loading=!1}))}configureEntityTagTargets(){return ye.buildClusterTargets(this.serverGroup)}}ga.$inject=["serverGroup","app","$uibModal","$scope","$state","$q"];const ba="spinnaker.kubernetes.serverGroup.details.controller";e("spinnaker.kubernetes.serverGroup.details.controller",[ve]).controller("kubernetesV2ServerGroupDetailsCtrl",ga),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">Scale {{ctrl.command.manifestName | robotToHuman}} in {{ctrl.command.location}}</h4>\n </div>\n <div class="modal-body confirmation-modal">\n <kubernetes-scale-manifest-settings-form settings="ctrl.command"></kubernetes-scale-manifest-settings-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.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 va{constructor(e,n,a,s){this.serverGroup=e,this.$uibModalInstance=n,this.serverGroupWriter=a,this.application=s,this.verification={verified:!1},this.taskMonitor=new l({title:`Resizing ${this.serverGroup.name}`,application:s,modalInstance:n}),this.current=this.serverGroup.capacity,this.command={capacity:t(this.current),reason:null}}isValid(){return this.verification.verified&&this.command.capacity.desired>=0&&!n(this.command.capacity,this.current)}cancel(){this.$uibModalInstance.dismiss()}resize(){this.taskMonitor.submit((()=>{const e={capacity:this.command.capacity,serverGroupName:this.serverGroup.name,account:this.serverGroup.account,region:this.serverGroup.region,interestingHealthProviderNames:["KubernetesPod"],reason:this.command.reason};return this.serverGroupWriter.resizeServerGroup(this.serverGroup,this.application,e)}))}}va.$inject=["serverGroup","$uibModalInstance","serverGroupWriter","application"];const ka="spinnaker.kubernetes.serverGroup.details.resize.controller";e("spinnaker.kubernetes.serverGroup.details.resize.controller",[ve]).controller("kubernetesV2ServerGroupResizeCtrl",va);class ya{buildNewServerGroupCommand(e){return ft.buildNewManifestCommand(e)}}const Ea="spinnaker.kubernetes.serverGroup.commandBuilder.service";e("spinnaker.kubernetes.serverGroup.commandBuilder.service",[]).service("kubernetesV2ServerGroupCommandBuilder",ya);class Sa{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)))}}const Aa="spinnaker.kubernetes.serverGroup.transformer.service";e("spinnaker.kubernetes.serverGroup.transformer.service",[]).service("kubernetesV2ServerGroupTransformer",Sa);class Ma{constructor(e,t,n,a,s){this.$scope=t,this.$uibModal=n,this.app=a,this.$state=s,this.state={loading:!0};const r=this.app.getDataSource("serverGroupManagers");r.ready().then((()=>{this.extractServerGroupManager(e),this.$scope.isDisabled=!h.kubernetesAdHocInfraWritesEnabled,r.onRefresh(this.$scope,(()=>this.extractServerGroupManager(e)))})).catch((()=>this.autoClose())),this.$scope.isDisabled=!h.kubernetesAdHocInfraWritesEnabled}pauseRolloutServerGroupManager(){this.$uibModal.open({templateUrl:"kubernetes/src/manifest/rollout/pause.html",controller:"kubernetesV2ManifestPauseRolloutCtrl",controllerAs:"ctrl",resolve:{coordinates:{name:this.serverGroupManager.name,namespace:this.serverGroupManager.namespace,account:this.serverGroupManager.account},application:this.app}})}resumeRolloutServerGroupManager(){this.$uibModal.open({templateUrl:"kubernetes/src/manifest/rollout/resume.html",controller:"kubernetesV2ManifestResumeRolloutCtrl",controllerAs:"ctrl",resolve:{coordinates:{name:this.serverGroupManager.name,namespace:this.serverGroupManager.namespace,account:this.serverGroupManager.account},application:this.app}})}canUndoRolloutServerGroupManager(){return this.serverGroupManager&&this.serverGroupManager.serverGroups&&this.serverGroupManager.serverGroups.length>0}undoRolloutServerGroupManager(){this.$uibModal.open({templateUrl:"kubernetes/src/manifest/rollout/undo.html",controller:"kubernetesV2ManifestUndoRolloutCtrl",controllerAs:"ctrl",resolve:{coordinates:{name:this.serverGroupManager.name,namespace:this.serverGroupManager.namespace,account:this.serverGroupManager.account},revisions:()=>{const[,...e]=_e(this.serverGroupManager.serverGroups,["moniker.sequence"],["desc"]);return e.map(((e,t)=>({label:`${Ee.getSequence(e.moniker.sequence)}${t>0?"":" - previous revision"}`,revision:e.moniker.sequence})))},application:this.app}})}scaleServerGroupManager(){this.$uibModal.open({templateUrl:"kubernetes/src/manifest/scale/scale.html",controller:"kubernetesV2ManifestScaleCtrl",controllerAs:"ctrl",resolve:{coordinates:{name:this.serverGroupManager.name,namespace:this.serverGroupManager.namespace,account:this.serverGroupManager.account},currentReplicas:this.manifest.manifest.spec.replicas,application:this.app}})}editServerGroupManager(){ft.buildNewManifestCommand(this.app,this.manifest.manifest,this.serverGroupManager.moniker,this.serverGroupManager.account).then((e=>{yt.show({title:"Edit Manifest",application:this.app,command:e})}))}deleteServerGroupManager(){this.$uibModal.open({templateUrl:"kubernetes/src/manifest/delete/delete.html",controller:"kubernetesV2ManifestDeleteCtrl",controllerAs:"ctrl",resolve:{coordinates:{name:this.serverGroupManager.name,namespace:this.serverGroupManager.namespace,account:this.serverGroupManager.account},application:this.app,manifestController:()=>null}})}extractServerGroupManager({accountId:e,region:t,serverGroupManager:n}){const a=this.app.getDataSource("serverGroupManagers").data.find((a=>a.name===n&&a.region===t&&a.account===e));if(!a)return this.autoClose();C.getManifest(e,t,n).then((e=>{this.manifest=e,this.serverGroupManager=a,this.entityTagTargets=this.configureEntityTagTargets(),this.state.loading=!1}))}configureEntityTagTargets(){return ye.buildManagerClusterTargets(this.serverGroupManager)}autoClose(){this.$scope.$$destroyed||(this.$state.params.allowModalToStayOpen=!0,this.$state.go("^",null,{location:"replace"}))}}Ma.$inject=["serverGroupManager","$scope","$uibModal","app","$state"];const wa="spinnaker.kubernetes.serverGroupManager.details.controller";e("spinnaker.kubernetes.serverGroupManager.details.controller",[]).controller("kubernetesV2ServerGroupManagerDetailsCtrl",Ma),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">Scale {{ctrl.command.manifestName | robotToHuman}} in {{ctrl.command.location}}</h4>\n </div>\n <div class="modal-body confirmation-modal">\n <kubernetes-scale-manifest-settings-form settings="ctrl.command"></kubernetes-scale-manifest-settings-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.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 xa=class{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(e,t){e.length>xa.MAX_RESOURCE_NAME_LENGTH&&t.push(`The maximum length for an application in Kubernetes is ${xa.MAX_RESOURCE_NAME_LENGTH} characters.`)}validate(e=""){const t=[];return e&&e.length&&(xa.validateSpecialCharacters(e,t),xa.validateLength(e,t)),{warnings:[],errors:t}}};let Da=xa;Da.MAX_RESOURCE_NAME_LENGTH=63,Se.registerValidator("kubernetes",new Da);Pt('.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 Na="spinnaker.kubernetes",Ta=["spinnaker.kubernetes.instanceDetails.controller","spinnaker.kubernetes.loadBalancerDetails.controller","spinnaker.kubernetes.securityGroupDetails.controller","spinnaker.kubernetes.serverGroup.commandBuilder.service","spinnaker.kubernetes.serverGroup.details.controller","spinnaker.kubernetes.serverGroup.transformer.service","spinnaker.kubernetes.serverGroupManager.details.controller","spinnaker.kubernetes.serverGroup.details.resize.controller","spinnaker.kubernetes.serverGroupManager.details.controller","spinnaker.kubernetes.v2.manifest.delete.controller","spinnaker.kubernetes.v2.manifest.scale.controller","spinnaker.kubernetes.v2.manifest.undoRollout.controller","spinnaker.kubernetes.v2.manifest.pauseRollout.controller","spinnaker.kubernetes.v2.manifest.resumeRollout.controller",dn,"spinnaker.kubernetes.v2.manifest.condition.component","spinnaker.kubernetes.v2.manifest.artifact.component","spinnaker.kubernetes.loadBalancerTransformer","spinnaker.kubernetes.securityGroupTransformer","spinnaker.kubernetes.v2.pipeline.stage.scaleManifestStage","spinnaker.kubernetes.v2.pipeline.stage.undoRolloutManifestStage","spinnaker.kubernetes.v2.pipeline.stage.findArtifactsFromResource","spinnaker.kubernetes.v2.manifest.selector.component","spinnaker.kubernetes.v2.manifest.labels","spinnaker.kubernetes.v2.manifest.events","spinnaker.kubernetes.v2.manifest.resources","spinnaker.kubernetes.v2.manifest.qos","spinnaker.kubernetes.v2.manifest.annotation.custom.sections","spinnaker.kubernetes.v2.manifestImageDetails.component","spinnaker.core.kubernetesResource.states",Me,"spinnaker.kubernetes.jsonEditor.component","spinnaker.kubernetes.v2.pipeline.stage.enableManifestStage","spinnaker.kubernetes.v2.pipeline.stage.disableManifestStage",we,"spinnaker.kubernetes.v2.rolling.restart"];h.feature.kubernetesRawResources&&Ta.push("spinnaker.kubernetes.rawresource"),e("spinnaker.kubernetes",Ta).config((()=>{Ae.registerProvider("kubernetes",{name:"Kubernetes",adHocInfrastructureWritesEnabled:h.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:yt,commandBuilder:"kubernetesV2ServerGroupCommandBuilder",detailsController:"kubernetesV2ServerGroupDetailsCtrl",detailsTemplateUrl:"kubernetes/src/serverGroup/details/details.html",transformer:"kubernetesV2ServerGroupTransformer"},serverGroupManager:{detailsTemplateUrl:"kubernetes/src/serverGroupManager/details/details.html",detailsController:"kubernetesV2ServerGroupManagerDetailsCtrl"},loadBalancer:{CreateLoadBalancerModal:yt,detailsController:"kubernetesV2LoadBalancerDetailsCtrl",detailsTemplateUrl:"kubernetes/src/loadBalancer/details/details.html",transformer:"kubernetesV2LoadBalancerTransformer"},securityGroup:{reader:ma,CreateSecurityGroupModal:yt,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/serverGroup/details/details.html",'<div class="details-panel" ng-class="{disabled: ctrl.serverGroup.isDisabled || ctrl.serverGroup.disabled}">\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 <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.serverGroup.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.serverGroup.displayName}}\n <render-if-feature feature="entityTags">\n <entity-notifications\n entity="ctrl.serverGroup"\n application="ctrl.app"\n placement="bottom"\n h-offset-percent="90%"\n entity-type="serverGroup"\n page-location="details"\n on-update="ctrl.app.serverGroups.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 {{ctrl.serverGroup.kind | robotToHuman}} Actions <span class="caret"></span>\n </button>\n <ul class="dropdown-menu" uib-dropdown-menu role="menu">\n <li ng-if="ctrl.canEditServerGroup()">\n <a href ng-click="ctrl.editServerGroup()"> Edit </a>\n </li>\n <li ng-if="ctrl.canScaleServerGroup()">\n <a href ng-click="ctrl.scaleServerGroup()"> Scale </a>\n </li>\n <li ng-if="ctrl.canEnable()">\n <a href ng-click="ctrl.enableServerGroup()"> Enable </a>\n </li>\n <li ng-if="ctrl.canDisable()">\n <a href ng-click="ctrl.disableServerGroup()"> Disable </a>\n </li>\n <li>\n <a href ng-click="ctrl.deleteServerGroup()"> Delete </a>\n </li>\n <render-if-feature feature="entityTags">\n <add-entity-tag-links\n component="ctrl.serverGroup"\n application="ctrl.app"\n entity-type="serverGroup"\n owner-options="ctrl.entityTagTargets"\n on-update="ctrl.app.serverGroups.refresh"\n ></add-entity-tag-links>\n </render-if-feature>\n </ul>\n </div>\n </div>\n </div>\n <div class="content" ng-if="!ctrl.state.loading">\n <kubernetes-manifest-status status="ctrl.manifest.status"></kubernetes-manifest-status>\n <div class="band band-info" ng-if="ctrl.serverGroup.isDisabled || ctrl.serverGroup.disabled">Disabled</div>\n <server-group-running-tasks-details\n server-group="ctrl.serverGroup"\n application="ctrl.app"\n ></server-group-running-tasks-details>\n <collapsible-section heading="Information" expanded="true">\n <dl class="dl-horizontal dl-narrow">\n <dt>Created</dt>\n <dd>{{ctrl.serverGroup.createdTime | timestamp}}</dd>\n <dt>Account</dt>\n <dd><account-tag account="ctrl.serverGroup.account"></account-tag></dd>\n <dt>Namespace</dt>\n <dd>{{ctrl.serverGroup.namespace}}</dd>\n <dt>Kind</dt>\n <dd>{{ctrl.serverGroup.kind}}</dd>\n <dt ng-if="ctrl.manifestController()">Controller</dt>\n <dd>\n <a\n ui-sref="^.serverGroupManager({\n accountId: ctrl.serverGroup.account,\n region: ctrl.serverGroup.region,\n serverGroupManager: ctrl.manifestController(),\n provider: \'kubernetes\'})"\n >\n {{ctrl.manifestController() | robotToHuman }}\n </a>\n </dd>\n </dl>\n </collapsible-section>\n\n <kubernetes-annotation-custom-sections\n manifest="ctrl.manifest.manifest"\n resource="ctrl.serverGroup"\n ></kubernetes-annotation-custom-sections>\n\n <collapsible-section heading="Images" expanded="true">\n <kubernetes-manifest-image-details manifest="ctrl.manifest.manifest"></kubernetes-manifest-image-details>\n </collapsible-section>\n\n <collapsible-section heading="Events" expanded="true">\n <kubernetes-manifest-events manifest="ctrl.manifest"></kubernetes-manifest-events>\n </collapsible-section>\n <collapsible-section heading="Labels" expanded="true">\n <kubernetes-manifest-labels manifest="ctrl.manifest.manifest"></kubernetes-manifest-labels>\n </collapsible-section>\n <collapsible-section heading="Size" expanded="true">\n <dl class="dl-horizontal dl-narrow" ng-if="ctrl.serverGroup.capacity.min == null">\n <dt>Current</dt>\n <dd>{{ctrl.serverGroup.instances.length}}</dd>\n </dl>\n <dl\n class="dl-horizontal dl-narrow"\n ng-if="ctrl.serverGroup.capacity.min != null && ctrl.serverGroup.capacity.min === ctrl.serverGroup.capacity.max"\n >\n <dt>Min/Max</dt>\n <dd>{{ctrl.serverGroup.capacity.min}}</dd>\n <dt>Current</dt>\n <dd>{{ctrl.serverGroup.instances.length}}</dd>\n </dl>\n <dl class="dl-horizontal dl-narrow" ng-if="ctrl.serverGroup.capacity.min !== ctrl.serverGroup.capacity.max">\n <dt>Min</dt>\n <dd>{{ctrl.serverGroup.capacity.min}}</dd>\n <dt>Max</dt>\n <dd>{{ctrl.serverGroup.capacity.max}}</dd>\n <dt>Current</dt>\n <dd>{{ctrl.serverGroup.instances.length}}</dd>\n </dl>\n </collapsible-section>\n <collapsible-section heading="Health" expanded="true">\n <dl class="dl-horizontal dl-narrow" ng-if="ctrl.serverGroup">\n <dt>Instances</dt>\n <dd>\n <health-counts container="ctrl.serverGroup.instanceCounts" class="pull-left"></health-counts>\n </dd>\n </dl>\n </collapsible-section>\n </div>\n</div>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("kubernetes/src/serverGroupManager/details/details.html",'<div class="details-panel">\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 <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.serverGroupManager.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.serverGroupManager.displayName}}\n <render-if-feature feature="entityTags">\n <entity-notifications\n entity="ctrl.serverGroupManager"\n application="ctrl.app"\n placement="bottom"\n h-offset-percent="90%"\n entity-type="serverGroupManager"\n page-location="details"\n on-update="ctrl.app.serverGroupManagers.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 {{ctrl.serverGroupManager.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.scaleServerGroupManager()"> Scale </a>\n </li>\n <li ng-if="ctrl.canUndoRolloutServerGroupManager()">\n <a href ng-click="ctrl.undoRolloutServerGroupManager()"> Undo Rollout </a>\n </li>\n <li ng-if="ctrl.manifest.status.paused.state">\n <a href ng-click="ctrl.resumeRolloutServerGroupManager()"> Resume Rollout </a>\n </li>\n <li ng-if="!ctrl.manifest.status.paused.state && !ctrl.manifest.status.stable.state">\n <a href ng-click="ctrl.pauseRolloutServerGroupManager()"> Pause Rollout </a>\n </li>\n <kubernetes-rolling-restart\n ng-if="!ctrl.manifest.status.paused.state"\n application="ctrl.app"\n server-group-manager="ctrl.serverGroupManager"\n ></kubernetes-rolling-restart>\n <li role="presentation" class="divider"></li>\n <li>\n <a href ng-click="ctrl.editServerGroupManager()"> Edit </a>\n </li>\n <li>\n <a href ng-click="ctrl.deleteServerGroupManager()"> Delete </a>\n </li>\n <render-if-feature feature="entityTags">\n <add-entity-tag-links\n component="ctrl.serverGroupManager"\n application="ctrl.app"\n entity-type="serverGroupManager"\n owner-options="ctrl.entityTagTargets"\n on-update="ctrl.app.serverGroupManagers.refresh"\n ></add-entity-tag-links>\n </render-if-feature>\n </ul>\n </div>\n </div>\n </div>\n <div class="content" ng-if="!ctrl.state.loading">\n <kubernetes-manifest-status status="ctrl.manifest.status"></kubernetes-manifest-status>\n <collapsible-section heading="Information" expanded="true">\n <dl class="dl-horizontal dl-narrow">\n <dt>Created</dt>\n <dd>{{ctrl.serverGroupManager.createdTime | timestamp}}</dd>\n <dt>Account</dt>\n <dd><account-tag account="ctrl.serverGroupManager.account"></account-tag></dd>\n <dt>Namespace</dt>\n <dd>{{ctrl.serverGroupManager.namespace}}</dd>\n <dt>Kind</dt>\n <dd>{{ctrl.serverGroupManager.kind}}</dd>\n <dt ng-if="ctrl.serverGroupManager.serverGroups.length">Managing</dt>\n <dd>\n <ul ng-repeat="serverGroup in ctrl.serverGroupManager.serverGroups | orderBy: [\'-name\']">\n <a\n ui-sref="^.serverGroup({region: serverGroup.region,\n accountId: serverGroup.account,\n serverGroup: serverGroup.name,\n provider: \'kubernetes\'})"\n >\n {{serverGroup.name}}\n </a>\n </ul>\n </dd>\n </dl>\n </collapsible-section>\n\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.serverGroupManager"\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="Labels" expanded="true">\n <kubernetes-manifest-labels manifest="ctrl.manifest.manifest"></kubernetes-manifest-labels>\n </collapsible-section>\n\n <collapsible-section heading="Artifacts" expanded="true">\n <ul ng-repeat="artifact in ctrl.manifest.artifacts">\n <kubernetes-manifest-artifact artifact="artifact"></kubernetes-manifest-artifact>\n </ul>\n </collapsible-section>\n </div>\n</div>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("kubernetes/src/loadBalancer/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.loadBalancer.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.loadBalancer.displayName}}\n <render-if-feature feature="entityTags">\n <entity-notifications\n ng-if="!state.loading"\n entity="ctrl.loadBalancer"\n application="ctrl.app"\n placement="bottom"\n h-offset-percent="90%"\n entity-type="loadBalancer"\n page-location="details"\n on-update="ctrl.app.loadBalancers.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 {{ctrl.loadBalancer.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.deleteLoadBalancer()">Delete</a>\n </li>\n <li>\n <a href ng-click="ctrl.editLoadBalancer()">Edit</a>\n </li>\n <render-if-feature feature="entityTags">\n <add-entity-tag-links\n component="ctrl.loadBalancer"\n application="ctrl.app"\n entity-type="loadBalancer"\n on-update="ctrl.app.loadBalancers.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.loadBalancer.createdTime | timestamp}}</dd>\n <dt>Account</dt>\n <dd><account-tag account="ctrl.loadBalancer.account" pad="right"></account-tag></dd>\n <dt>Namespace</dt>\n <dd>{{ctrl.loadBalancer.namespace}}</dd>\n <dt>Kind</dt>\n <dd>{{ctrl.loadBalancer.kind}}</dd>\n <dt>Service Type</dt>\n <dd>{{ctrl.manifest.manifest.spec.type}}</dd>\n <dt>Sess. Affinity</dt>\n <dd>{{ctrl.manifest.manifest.spec.sessionAffinity}}</dd>\n </dl>\n </collapsible-section>\n <collapsible-section heading="Status" expanded="true">\n <dl class="dl-horizontal dl-narrow">\n <div ng-if="!ctrl.loadBalancer.serverGroups.length">\n No workloads associated with this {{ctrl.loadBalancer.kind | robotToHuman}}.\n </div>\n <dt ng-if="ctrl.loadBalancer.serverGroups.length">Workloads</dt>\n <dd ng-if="ctrl.loadBalancer.serverGroups.length">\n <ul>\n <li ng-repeat="serverGroup in ctrl.loadBalancer.serverGroups | orderBy: [\'isDisabled\', \'-name\']">\n <a\n ui-sref="^.serverGroup({region: serverGroup.region,\n accountId: serverGroup.account,\n serverGroup: serverGroup.name,\n provider: \'kubernetes\'})"\n >\n {{serverGroup.name}}\n </a>\n </li>\n </ul>\n </dd>\n <div ng-if="ctrl.loadBalancer.serverGroups.length">\n <dt>Pod status</dt>\n <dd>\n <health-counts class="pull-left" container="ctrl.loadBalancer.instanceCounts"></health-counts>\n </dd>\n </div>\n <div ng-if="ctrl.manifest.manifest.spec.clusterIP">\n <dt>Cluster IP</dt>\n <dd>\n <a target="_blank" href="//{{ctrl.manifest.manifest.spec.clusterIP}}">\n {{ctrl.manifest.manifest.spec.clusterIP}}\n </a>\n <copy-to-clipboard\n class="copy-to-clipboard copy-to-clipboard-sm"\n text="ctrl.manifest.manifest.spec.clusterIP"\n tool-tip="\'Copy Cluster IP to clipboard\'"\n >\n </copy-to-clipboard>\n </dd>\n </div>\n <div ng-if="ctrl.manifest.manifest.spec.loadBalancerIP">\n <dt>Load Balancer IP</dt>\n <dd>\n <a target="_blank" href="//{{ctrl.manifest.manifest.spec.loadBalancerIP}}">\n {{ctrl.manifest.manifest.spec.loadBalancerIP}}\n </a>\n <copy-to-clipboard\n class="copy-to-clipboard copy-to-clipboard-sm"\n text="ctrl.manifest.manifest.spec.loadBalancerIP"\n tool-tip="\'Copy Load Balancer IP to clipboard\'"\n >\n </copy-to-clipboard>\n </dd>\n </div>\n <div ng-if="ctrl.manifest.manifest.spec.rules.length">\n <dt>Host Rules</dt>\n <dd ng-repeat="ingressRule in ctrl.manifest.manifest.spec.rules">\n <a ng-if="ingressRule.host" target="_blank" href="//{{ingressRule.host}}"> {{ingressRule.host}} </a>\n <copy-to-clipboard\n ng-if="ingressRule.host"\n class="copy-to-clipboard copy-to-clipboard-sm"\n text="ingressRule.host"\n tool-tip="\'Copy ingress rule host to clipboard\'"\n >\n </copy-to-clipboard>\n </dd>\n </div>\n <div ng-if="ctrl.manifest.manifest.status.loadBalancer.ingress.length">\n <dt>Ingress</dt>\n <dd ng-repeat="ingress in ctrl.manifest.manifest.status.loadBalancer.ingress">\n <a ng-if="ingress.hostname" target="_blank" href="//{{ingress.hostname}}"> {{ingress.hostname}} </a>\n <copy-to-clipboard\n ng-if="ingress.hostname"\n class="copy-to-clipboard copy-to-clipboard-sm"\n text="ingress.hostname"\n tool-tip="\'Copy Ingress hostname to clipboard\'"\n >\n </copy-to-clipboard>\n <a ng-if="ingress.ip" target="_blank" href="//{{ingress.ip}}"> {{ingress.ip}} </a>\n <copy-to-clipboard\n ng-if="ingress.ip"\n class="copy-to-clipboard copy-to-clipboard-sm"\n text="ingress.ip"\n tool-tip="\'Copy Ingress IP to clipboard\'"\n >\n </copy-to-clipboard>\n </dd>\n </div>\n </dl>\n </collapsible-section>\n\n <kubernetes-annotation-custom-sections\n manifest="ctrl.manifest.manifest"\n resource="ctrl.loadBalancer"\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="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/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{At as KUBERNETES_LOAD_BALANCER_DETAILS_CTRL,Nt as KUBERNETES_MANIFEST_ARTIFACT,ln as KUBERNETES_MANIFEST_CONDITION,Rt as KUBERNETES_MANIFEST_DELETE_CTRL,Kt as KUBERNETES_MANIFEST_PAUSE_ROLLOUT_CTRL,Ht as KUBERNETES_MANIFEST_SCALE_CTRL,dn as KUBERNETES_MANIFEST_STATUS,Vt as KUBERNETES_MANIFEST_UNDO_ROLLOUT_CTRL,Na as KUBERNETES_MODULE,pa as KUBERNETES_SECURITY_GROUP_DETAILS_CTRL,Ea as KUBERNETES_SERVER_GROUP_COMMAND_BUILDER,ba as KUBERNETES_SERVER_GROUP_DETAILS_CTRL,wa as KUBERNETES_SERVER_GROUP_MANAGER_DETAILS_CTRL,ka as KUBERNETES_SERVER_GROUP_RESIZE_CTRL,Aa as KUBERNETES_SERVER_GROUP_TRANSFORMER,ca as KUBERNETS_RAW_RESOURCE_MODULE,ft as KubernetesManifestCommandBuilder,Pn as KubernetesManifestService,ya as KubernetesV2ServerGroupCommandBuilder,Sa as KubernetesV2ServerGroupTransformer};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|