debian-mirror-gitlab/app/assets/javascripts/clusters/components/applications.vue

725 lines
28 KiB
Vue
Raw Normal View History

2018-03-17 18:26:18 +05:30
<script>
2020-05-24 23:13:21 +05:30
import { escape } from 'lodash';
2018-12-13 13:39:08 +05:30
import helmInstallIllustration from '@gitlab/svgs/dist/illustrations/kubernetes-installation.svg';
2019-07-07 11:18:12 +05:30
import { GlLoadingIcon } from '@gitlab/ui';
2018-12-05 23:21:45 +05:30
import elasticsearchLogo from 'images/cluster_app_logos/elasticsearch.png';
import gitlabLogo from 'images/cluster_app_logos/gitlab.png';
import helmLogo from 'images/cluster_app_logos/helm.png';
import jeagerLogo from 'images/cluster_app_logos/jeager.png';
import jupyterhubLogo from 'images/cluster_app_logos/jupyterhub.png';
import kubernetesLogo from 'images/cluster_app_logos/kubernetes.png';
2019-02-15 15:39:39 +05:30
import certManagerLogo from 'images/cluster_app_logos/cert_manager.png';
2019-12-26 22:10:19 +05:30
import crossplaneLogo from 'images/cluster_app_logos/crossplane.png';
2018-12-13 13:39:08 +05:30
import knativeLogo from 'images/cluster_app_logos/knative.png';
2018-12-05 23:21:45 +05:30
import meltanoLogo from 'images/cluster_app_logos/meltano.png';
import prometheusLogo from 'images/cluster_app_logos/prometheus.png';
2019-12-26 22:10:19 +05:30
import elasticStackLogo from 'images/cluster_app_logos/elastic_stack.png';
2020-05-24 23:13:21 +05:30
import fluentdLogo from 'images/cluster_app_logos/fluentd.png';
2018-10-15 14:42:47 +05:30
import { s__, sprintf } from '../../locale';
import applicationRow from './application_row.vue';
import clipboardButton from '../../vue_shared/components/clipboard_button.vue';
2019-09-04 21:01:54 +05:30
import KnativeDomainEditor from './knative_domain_editor.vue';
2019-12-21 20:55:43 +05:30
import { CLUSTER_TYPE, PROVIDER_TYPE, APPLICATION_STATUS, INGRESS } from '../constants';
2019-07-07 11:18:12 +05:30
import eventHub from '~/clusters/event_hub';
2019-12-26 22:10:19 +05:30
import CrossplaneProviderStack from './crossplane_provider_stack.vue';
2020-04-08 14:13:33 +05:30
import IngressModsecuritySettings from './ingress_modsecurity_settings.vue';
2020-05-24 23:13:21 +05:30
import FluentdOutputSettings from './fluentd_output_settings.vue';
2018-03-17 18:26:18 +05:30
2018-10-15 14:42:47 +05:30
export default {
components: {
applicationRow,
clipboardButton,
2019-07-07 11:18:12 +05:30
GlLoadingIcon,
2019-09-04 21:01:54 +05:30
KnativeDomainEditor,
2019-12-26 22:10:19 +05:30
CrossplaneProviderStack,
2020-04-08 14:13:33 +05:30
IngressModsecuritySettings,
2020-05-24 23:13:21 +05:30
FluentdOutputSettings,
2018-10-15 14:42:47 +05:30
},
props: {
2019-02-15 15:39:39 +05:30
type: {
type: String,
required: false,
default: CLUSTER_TYPE.PROJECT,
},
2018-10-15 14:42:47 +05:30
applications: {
type: Object,
required: false,
default: () => ({}),
2018-03-17 18:26:18 +05:30
},
2018-10-15 14:42:47 +05:30
helpPath: {
type: String,
required: false,
default: '',
2018-03-17 18:26:18 +05:30
},
2018-10-15 14:42:47 +05:30
ingressHelpPath: {
type: String,
required: false,
default: '',
},
ingressDnsHelpPath: {
type: String,
required: false,
default: '',
},
2020-03-13 15:44:24 +05:30
ingressModSecurityHelpPath: {
type: String,
required: false,
default: '',
},
2019-12-21 20:55:43 +05:30
cloudRunHelpPath: {
type: String,
required: false,
default: '',
},
2018-10-15 14:42:47 +05:30
managePrometheusPath: {
type: String,
required: false,
default: '',
},
2019-12-21 20:55:43 +05:30
providerType: {
type: String,
required: false,
default: '',
},
preInstalledKnative: {
type: Boolean,
required: false,
default: false,
},
2019-02-15 15:39:39 +05:30
rbac: {
type: Boolean,
required: false,
default: false,
},
2018-10-15 14:42:47 +05:30
},
2018-12-05 23:21:45 +05:30
data: () => ({
elasticsearchLogo,
gitlabLogo,
helmLogo,
jeagerLogo,
jupyterhubLogo,
kubernetesLogo,
2019-02-15 15:39:39 +05:30
certManagerLogo,
2019-12-26 22:10:19 +05:30
crossplaneLogo,
2018-12-13 13:39:08 +05:30
knativeLogo,
2018-12-05 23:21:45 +05:30
meltanoLogo,
prometheusLogo,
2019-12-26 22:10:19 +05:30
elasticStackLogo,
2020-05-24 23:13:21 +05:30
fluentdLogo,
2018-12-05 23:21:45 +05:30
}),
2018-10-15 14:42:47 +05:30
computed: {
2019-02-15 15:39:39 +05:30
isProjectCluster() {
return this.type === CLUSTER_TYPE.PROJECT;
},
2020-04-22 19:07:51 +05:30
managedAppsLocalTillerEnabled() {
return Boolean(gon.features?.managedAppsLocalTiller);
},
2018-12-05 23:21:45 +05:30
helmInstalled() {
return (
2020-04-22 19:07:51 +05:30
this.managedAppsLocalTillerEnabled ||
2018-12-05 23:21:45 +05:30
this.applications.helm.status === APPLICATION_STATUS.INSTALLED ||
this.applications.helm.status === APPLICATION_STATUS.UPDATED
2018-10-15 14:42:47 +05:30
);
},
ingressId() {
return INGRESS;
},
ingressInstalled() {
2018-11-18 11:00:15 +05:30
return this.applications.ingress.status === APPLICATION_STATUS.INSTALLED;
2018-10-15 14:42:47 +05:30
},
2019-07-07 11:18:12 +05:30
ingressExternalEndpoint() {
return this.applications.ingress.externalIp || this.applications.ingress.externalHostname;
2018-10-15 14:42:47 +05:30
},
2019-02-15 15:39:39 +05:30
certManagerInstalled() {
return this.applications.cert_manager.status === APPLICATION_STATUS.INSTALLED;
},
2019-12-26 22:10:19 +05:30
crossplaneInstalled() {
return this.applications.crossplane.status === APPLICATION_STATUS.INSTALLED;
},
2018-10-15 14:42:47 +05:30
ingressDescription() {
2019-07-07 11:18:12 +05:30
return sprintf(
2020-05-24 23:13:21 +05:30
escape(
2019-05-30 16:15:17 +05:30
s__(
2019-07-07 11:18:12 +05:30
`ClusterIntegration|Installing Ingress may incur additional costs. Learn more about %{pricingLink}.`,
2019-05-30 16:15:17 +05:30
),
),
{
2020-03-13 15:44:24 +05:30
pricingLink: `<a href="https://cloud.google.com/compute/pricing#lb"
2019-07-07 11:18:12 +05:30
target="_blank" rel="noopener noreferrer">
2020-05-24 23:13:21 +05:30
${escape(s__('ClusterIntegration|pricing'))}</a>`,
2018-10-15 14:42:47 +05:30
},
false,
);
},
2019-02-15 15:39:39 +05:30
certManagerDescription() {
return sprintf(
2020-05-24 23:13:21 +05:30
escape(
2019-02-15 15:39:39 +05:30
s__(
`ClusterIntegration|Cert-Manager is a native Kubernetes certificate management controller that helps with issuing certificates.
Installing Cert-Manager on your cluster will issue a certificate by %{letsEncrypt} and ensure that certificates
are valid and up-to-date.`,
),
),
{
letsEncrypt: `<a href="https://letsencrypt.org/"
target="_blank" rel="noopener noreferrer">
2020-05-24 23:13:21 +05:30
${escape(s__("ClusterIntegration|Let's Encrypt"))}</a>`,
2019-02-15 15:39:39 +05:30
},
false,
);
},
2019-12-26 22:10:19 +05:30
crossplaneDescription() {
return sprintf(
2020-05-24 23:13:21 +05:30
escape(
2019-12-26 22:10:19 +05:30
s__(
`ClusterIntegration|Crossplane enables declarative provisioning of managed services from your cloud of choice using %{kubectl} or %{gitlabIntegrationLink}.
Crossplane runs inside your Kubernetes cluster and supports secure connectivity and secrets management between app containers and the cloud services they depend on.`,
),
),
{
gitlabIntegrationLink: `<a href="https://docs.gitlab.com/ee/user/clusters/applications.html#crossplane"
target="_blank" rel="noopener noreferrer">
2020-05-24 23:13:21 +05:30
${escape(s__('ClusterIntegration|Gitlab Integration'))}</a>`,
2019-12-26 22:10:19 +05:30
kubectl: `<code>kubectl</code>`,
},
false,
);
},
2018-10-15 14:42:47 +05:30
prometheusDescription() {
return sprintf(
2020-05-24 23:13:21 +05:30
escape(
2018-10-15 14:42:47 +05:30
s__(
2018-03-17 18:26:18 +05:30
`ClusterIntegration|Prometheus is an open-source monitoring system
with %{gitlabIntegrationLink} to monitor deployed applications.`,
2018-10-15 14:42:47 +05:30
),
),
{
gitlabIntegrationLink: `<a href="https://docs.gitlab.com/ce/user/project/integrations/prometheus.html"
2018-03-17 18:26:18 +05:30
target="_blank" rel="noopener noreferrer">
2020-05-24 23:13:21 +05:30
${escape(s__('ClusterIntegration|GitLab Integration'))}</a>`,
2018-10-15 14:42:47 +05:30
},
false,
);
2018-03-17 18:26:18 +05:30
},
2018-11-08 19:23:39 +05:30
jupyterInstalled() {
2018-11-18 11:00:15 +05:30
return this.applications.jupyter.status === APPLICATION_STATUS.INSTALLED;
2018-11-08 19:23:39 +05:30
},
jupyterHostname() {
return this.applications.jupyter.hostname;
},
2019-12-26 22:10:19 +05:30
elasticStackInstalled() {
return this.applications.elastic_stack.status === APPLICATION_STATUS.INSTALLED;
},
2019-07-07 11:18:12 +05:30
knative() {
return this.applications.knative;
},
2019-12-26 22:10:19 +05:30
crossplane() {
return this.applications.crossplane;
},
2019-12-21 20:55:43 +05:30
cloudRun() {
return this.providerType === PROVIDER_TYPE.GCP && this.preInstalledKnative;
},
installedVia() {
if (this.cloudRun) {
return sprintf(
2020-05-24 23:13:21 +05:30
escape(s__(`ClusterIntegration|installed via %{installed_via}`)),
2019-12-21 20:55:43 +05:30
{
installed_via: `<a href="${
this.cloudRunHelpPath
2020-05-24 23:13:21 +05:30
}" target="_blank" rel="noopener noreferrer">${escape(
2019-12-21 20:55:43 +05:30
s__('ClusterIntegration|Cloud Run'),
)}</a>`,
},
false,
);
}
return null;
},
2020-04-08 14:13:33 +05:30
ingress() {
return this.applications.ingress;
},
2018-10-15 14:42:47 +05:30
},
2018-12-05 23:21:45 +05:30
created() {
this.helmInstallIllustration = helmInstallIllustration;
},
2019-07-07 11:18:12 +05:30
methods: {
2020-04-22 19:07:51 +05:30
saveKnativeDomain() {
2019-07-07 11:18:12 +05:30
eventHub.$emit('saveKnativeDomain', {
id: 'knative',
2020-04-22 19:07:51 +05:30
params: {
hostname: this.applications.knative.hostname,
pages_domain_id: this.applications.knative.pagesDomain?.id,
},
2019-09-04 21:01:54 +05:30
});
},
2020-04-22 19:07:51 +05:30
setKnativeDomain({ domainId, domain }) {
eventHub.$emit('setKnativeDomain', {
2019-09-04 21:01:54 +05:30
id: 'knative',
2020-04-22 19:07:51 +05:30
domainId,
domain,
2019-07-07 11:18:12 +05:30
});
},
2019-12-26 22:10:19 +05:30
setCrossplaneProviderStack(stack) {
eventHub.$emit('setCrossplaneProviderStack', {
id: 'crossplane',
stack,
});
},
2019-07-07 11:18:12 +05:30
},
2018-10-15 14:42:47 +05:30
};
2018-03-17 18:26:18 +05:30
</script>
<template>
2018-12-05 23:21:45 +05:30
<section id="cluster-applications">
<p class="append-bottom-0">
2019-02-15 15:39:39 +05:30
{{
s__(`ClusterIntegration|Choose which applications to install on your Kubernetes cluster.
2019-12-26 22:10:19 +05:30
Helm Tiller is required to install any of the following applications.`)
2019-02-15 15:39:39 +05:30
}}
2019-07-31 22:56:46 +05:30
<a :href="helpPath">{{ __('More information') }}</a>
2018-12-05 23:21:45 +05:30
</p>
2018-03-17 18:26:18 +05:30
2018-12-05 23:21:45 +05:30
<div class="cluster-application-list prepend-top-10">
<application-row
2020-04-22 19:07:51 +05:30
v-if="!managedAppsLocalTillerEnabled"
2018-12-05 23:21:45 +05:30
id="helm"
:logo-url="helmLogo"
:title="applications.helm.title"
:status="applications.helm.status"
:status-reason="applications.helm.statusReason"
:request-status="applications.helm.requestStatus"
:request-reason="applications.helm.requestReason"
2019-07-31 22:56:46 +05:30
:installed="applications.helm.installed"
:install-failed="applications.helm.installFailed"
:uninstallable="applications.helm.uninstallable"
:uninstall-successful="applications.helm.uninstallSuccessful"
:uninstall-failed="applications.helm.uninstallFailed"
2018-12-05 23:21:45 +05:30
class="rounded-top"
title-link="https://docs.helm.sh/"
>
<div slot="description">
2019-02-15 15:39:39 +05:30
{{
s__(`ClusterIntegration|Helm streamlines installing
2019-12-26 22:10:19 +05:30
and managing Kubernetes applications.
Tiller runs inside of your Kubernetes Cluster,
and manages releases of your charts.`)
2019-02-15 15:39:39 +05:30
}}
2018-12-05 23:21:45 +05:30
</div>
</application-row>
2019-02-15 15:39:39 +05:30
<div v-show="!helmInstalled" class="cluster-application-warning">
<div class="svg-container" v-html="helmInstallIllustration"></div>
{{
s__(`ClusterIntegration|You must first install Helm Tiller before
2019-12-26 22:10:19 +05:30
installing the applications below`)
2019-02-15 15:39:39 +05:30
}}
2018-12-05 23:21:45 +05:30
</div>
<application-row
:id="ingressId"
:logo-url="kubernetesLogo"
:title="applications.ingress.title"
:status="applications.ingress.status"
:status-reason="applications.ingress.statusReason"
:request-status="applications.ingress.requestStatus"
:request-reason="applications.ingress.requestReason"
2019-07-31 22:56:46 +05:30
:installed="applications.ingress.installed"
:install-failed="applications.ingress.installFailed"
2020-03-13 15:44:24 +05:30
:install-application-request-params="{
modsecurity_enabled: applications.ingress.modsecurity_enabled,
2020-04-22 19:07:51 +05:30
modsecurity_mode: applications.ingress.modsecurity_mode,
2020-03-13 15:44:24 +05:30
}"
2019-07-31 22:56:46 +05:30
:uninstallable="applications.ingress.uninstallable"
:uninstall-successful="applications.ingress.uninstallSuccessful"
:uninstall-failed="applications.ingress.uninstallFailed"
2018-12-05 23:21:45 +05:30
:disabled="!helmInstalled"
2020-04-08 14:13:33 +05:30
:updateable="false"
2018-12-05 23:21:45 +05:30
title-link="https://kubernetes.io/docs/concepts/services-networking/ingress/"
>
<div slot="description">
<p>
2019-02-15 15:39:39 +05:30
{{
s__(`ClusterIntegration|Ingress gives you a way to route
2019-12-26 22:10:19 +05:30
requests to services based on the request host or path,
centralizing a number of services into a single entrypoint.`)
2019-02-15 15:39:39 +05:30
}}
2018-12-05 23:21:45 +05:30
</p>
2018-03-27 19:54:05 +05:30
2020-04-08 14:13:33 +05:30
<ingress-modsecurity-settings
:ingress="ingress"
:ingress-mod-security-help-path="ingressModSecurityHelpPath"
/>
2020-03-13 15:44:24 +05:30
2018-12-05 23:21:45 +05:30
<template v-if="ingressInstalled">
<div class="form-group">
2019-07-31 22:56:46 +05:30
<label for="ingress-endpoint">{{ s__('ClusterIntegration|Ingress Endpoint') }}</label>
2019-07-07 11:18:12 +05:30
<div v-if="ingressExternalEndpoint" class="input-group">
2018-03-27 19:54:05 +05:30
<input
2019-07-07 11:18:12 +05:30
id="ingress-endpoint"
:value="ingressExternalEndpoint"
2018-03-27 19:54:05 +05:30
type="text"
2019-07-07 11:18:12 +05:30
class="form-control js-endpoint"
2018-03-27 19:54:05 +05:30
readonly
/>
2018-12-05 23:21:45 +05:30
<span class="input-group-append">
<clipboard-button
2019-07-07 11:18:12 +05:30
:text="ingressExternalEndpoint"
2019-12-21 20:55:43 +05:30
:title="s__('ClusterIntegration|Copy Ingress Endpoint')"
2018-12-05 23:21:45 +05:30
class="input-group-text js-clipboard-btn"
/>
</span>
2018-03-27 19:54:05 +05:30
</div>
2019-07-07 11:18:12 +05:30
<div v-else class="input-group">
<input type="text" class="form-control js-endpoint" readonly />
<gl-loading-icon
class="position-absolute align-self-center ml-2 js-ingress-ip-loading-icon"
/>
</div>
2019-02-15 15:39:39 +05:30
<p class="form-text text-muted">
{{
s__(`ClusterIntegration|Point a wildcard DNS to this
2019-12-26 22:10:19 +05:30
generated endpoint in order to access
your application after it has been deployed.`)
2019-02-15 15:39:39 +05:30
}}
2019-09-04 21:01:54 +05:30
<a :href="ingressDnsHelpPath" target="_blank" rel="noopener noreferrer">
{{ __('More information') }}
</a>
2019-02-15 15:39:39 +05:30
</p>
2018-12-05 23:21:45 +05:30
</div>
2018-03-27 19:54:05 +05:30
2019-07-07 11:18:12 +05:30
<p v-if="!ingressExternalEndpoint" class="settings-message js-no-endpoint-message">
2019-02-15 15:39:39 +05:30
{{
2019-07-07 11:18:12 +05:30
s__(`ClusterIntegration|The endpoint is in
2019-12-26 22:10:19 +05:30
the process of being assigned. Please check your Kubernetes
cluster or Quotas on Google Kubernetes Engine if it takes a long time.`)
2019-02-15 15:39:39 +05:30
}}
2019-09-04 21:01:54 +05:30
<a :href="ingressDnsHelpPath" target="_blank" rel="noopener noreferrer">
{{ __('More information') }}
</a>
2018-12-05 23:21:45 +05:30
</p>
</template>
2019-07-07 11:18:12 +05:30
<template v-if="!ingressInstalled">
2020-03-13 15:44:24 +05:30
<div class="bs-callout bs-callout-info">
<strong v-html="ingressDescription"></strong>
</div>
2019-07-07 11:18:12 +05:30
</template>
2019-01-03 12:48:30 +05:30
</div>
2018-12-23 12:14:25 +05:30
</application-row>
<application-row
2019-02-15 15:39:39 +05:30
id="cert_manager"
:logo-url="certManagerLogo"
:title="applications.cert_manager.title"
:status="applications.cert_manager.status"
:status-reason="applications.cert_manager.statusReason"
:request-status="applications.cert_manager.requestStatus"
:request-reason="applications.cert_manager.requestReason"
2019-07-31 22:56:46 +05:30
:installed="applications.cert_manager.installed"
:install-failed="applications.cert_manager.installFailed"
2019-02-15 15:39:39 +05:30
:install-application-request-params="{ email: applications.cert_manager.email }"
2019-07-31 22:56:46 +05:30
:uninstallable="applications.cert_manager.uninstallable"
:uninstall-successful="applications.cert_manager.uninstallSuccessful"
:uninstall-failed="applications.cert_manager.uninstallFailed"
2019-02-15 15:39:39 +05:30
:disabled="!helmInstalled"
title-link="https://cert-manager.readthedocs.io/en/latest/#"
>
<template>
<div slot="description">
<p v-html="certManagerDescription"></p>
<div class="form-group">
2019-09-04 21:01:54 +05:30
<label for="cert-manager-issuer-email">
{{ s__('ClusterIntegration|Issuer Email') }}
</label>
2019-02-15 15:39:39 +05:30
<div class="input-group">
<input
v-model="applications.cert_manager.email"
:readonly="certManagerInstalled"
type="text"
class="form-control js-email"
/>
</div>
<p class="form-text text-muted">
{{
s__(`ClusterIntegration|Issuers represent a certificate authority.
2019-12-26 22:10:19 +05:30
You must provide an email address for your Issuer. `)
2019-02-15 15:39:39 +05:30
}}
<a
href="http://docs.cert-manager.io/en/latest/reference/issuers.html?highlight=email"
target="_blank"
rel="noopener noreferrer"
2019-07-31 22:56:46 +05:30
>{{ __('More information') }}</a
2019-02-15 15:39:39 +05:30
>
</p>
</div>
</div>
</template>
</application-row>
<application-row
2018-12-05 23:21:45 +05:30
id="prometheus"
:logo-url="prometheusLogo"
:title="applications.prometheus.title"
:manage-link="managePrometheusPath"
:status="applications.prometheus.status"
:status-reason="applications.prometheus.statusReason"
:request-status="applications.prometheus.requestStatus"
:request-reason="applications.prometheus.requestReason"
2019-07-31 22:56:46 +05:30
:installed="applications.prometheus.installed"
:install-failed="applications.prometheus.installFailed"
:uninstallable="applications.prometheus.uninstallable"
:uninstall-successful="applications.prometheus.uninstallSuccessful"
:uninstall-failed="applications.prometheus.uninstallFailed"
2018-12-05 23:21:45 +05:30
:disabled="!helmInstalled"
title-link="https://prometheus.io/docs/introduction/overview/"
>
2019-02-15 15:39:39 +05:30
<div slot="description" v-html="prometheusDescription"></div>
2018-12-05 23:21:45 +05:30
</application-row>
<application-row
id="runner"
:logo-url="gitlabLogo"
:title="applications.runner.title"
:status="applications.runner.status"
:status-reason="applications.runner.statusReason"
:request-status="applications.runner.requestStatus"
:request-reason="applications.runner.requestReason"
2019-03-02 22:35:43 +05:30
:version="applications.runner.version"
:chart-repo="applications.runner.chartRepo"
2019-09-04 21:01:54 +05:30
:update-available="applications.runner.updateAvailable"
2019-07-31 22:56:46 +05:30
:installed="applications.runner.installed"
:install-failed="applications.runner.installFailed"
:update-successful="applications.runner.updateSuccessful"
:update-failed="applications.runner.updateFailed"
:uninstallable="applications.runner.uninstallable"
:uninstall-successful="applications.runner.uninstallSuccessful"
:uninstall-failed="applications.runner.uninstallFailed"
2018-12-05 23:21:45 +05:30
:disabled="!helmInstalled"
title-link="https://docs.gitlab.com/runner/"
>
<div slot="description">
2019-02-15 15:39:39 +05:30
{{
2019-07-07 11:18:12 +05:30
s__(`ClusterIntegration|GitLab Runner connects to the
2019-12-26 22:10:19 +05:30
repository and executes CI/CD jobs,
pushing results back and deploying
applications to production.`)
2019-02-15 15:39:39 +05:30
}}
2018-12-05 23:21:45 +05:30
</div>
</application-row>
2019-12-26 22:10:19 +05:30
<application-row
id="crossplane"
:logo-url="crossplaneLogo"
:title="applications.crossplane.title"
:status="applications.crossplane.status"
:status-reason="applications.crossplane.statusReason"
:request-status="applications.crossplane.requestStatus"
:request-reason="applications.crossplane.requestReason"
:installed="applications.crossplane.installed"
:install-failed="applications.crossplane.installFailed"
:uninstallable="applications.crossplane.uninstallable"
:uninstall-successful="applications.crossplane.uninstallSuccessful"
:uninstall-failed="applications.crossplane.uninstallFailed"
:install-application-request-params="{ stack: applications.crossplane.stack }"
:disabled="!helmInstalled"
title-link="https://crossplane.io"
>
<template>
<div slot="description">
<p v-html="crossplaneDescription"></p>
<div class="form-group">
<CrossplaneProviderStack :crossplane="crossplane" @set="setCrossplaneProviderStack" />
</div>
</div>
</template>
</application-row>
2018-12-05 23:21:45 +05:30
<application-row
id="jupyter"
:logo-url="jupyterhubLogo"
:title="applications.jupyter.title"
:status="applications.jupyter.status"
:status-reason="applications.jupyter.statusReason"
:request-status="applications.jupyter.requestStatus"
:request-reason="applications.jupyter.requestReason"
2019-07-31 22:56:46 +05:30
:installed="applications.jupyter.installed"
:install-failed="applications.jupyter.installFailed"
:uninstallable="applications.jupyter.uninstallable"
:uninstall-successful="applications.jupyter.uninstallSuccessful"
:uninstall-failed="applications.jupyter.uninstallFailed"
2018-12-05 23:21:45 +05:30
:install-application-request-params="{ hostname: applications.jupyter.hostname }"
:disabled="!helmInstalled"
title-link="https://jupyterhub.readthedocs.io/en/stable/"
>
<div slot="description">
<p>
2019-02-15 15:39:39 +05:30
{{
s__(`ClusterIntegration|JupyterHub, a multi-user Hub, spawns,
2019-12-26 22:10:19 +05:30
manages, and proxies multiple instances of the single-user
Jupyter notebook server. JupyterHub can be used to serve
notebooks to a class of students, a corporate data science group,
or a scientific research group.`)
2019-02-15 15:39:39 +05:30
}}
2018-12-05 23:21:45 +05:30
</p>
2018-11-08 19:23:39 +05:30
2019-07-07 11:18:12 +05:30
<template v-if="ingressExternalEndpoint">
2018-12-05 23:21:45 +05:30
<div class="form-group">
2019-07-31 22:56:46 +05:30
<label for="jupyter-hostname">{{ s__('ClusterIntegration|Jupyter Hostname') }}</label>
2018-11-08 19:23:39 +05:30
2018-12-05 23:21:45 +05:30
<div class="input-group">
<input
v-model="applications.jupyter.hostname"
:readonly="jupyterInstalled"
type="text"
class="form-control js-hostname"
/>
2019-02-15 15:39:39 +05:30
<span class="input-group-btn">
2018-12-05 23:21:45 +05:30
<clipboard-button
:text="jupyterHostname"
2019-12-21 20:55:43 +05:30
:title="s__('ClusterIntegration|Copy Jupyter Hostname')"
2018-12-05 23:21:45 +05:30
class="js-clipboard-btn"
2018-11-08 19:23:39 +05:30
/>
2018-12-05 23:21:45 +05:30
</span>
2018-11-08 19:23:39 +05:30
</div>
2019-02-15 15:39:39 +05:30
<p v-if="ingressInstalled" class="form-text text-muted">
{{
s__(`ClusterIntegration|Replace this with your own hostname if you want.
2019-12-26 22:10:19 +05:30
If you do so, point hostname to Ingress IP Address from above.`)
2019-02-15 15:39:39 +05:30
}}
2019-09-04 21:01:54 +05:30
<a :href="ingressDnsHelpPath" target="_blank" rel="noopener noreferrer">
{{ __('More information') }}
</a>
2019-02-15 15:39:39 +05:30
</p>
2018-12-05 23:21:45 +05:30
</div>
</template>
</div>
</application-row>
2018-12-13 13:39:08 +05:30
<application-row
id="knative"
:logo-url="knativeLogo"
:title="applications.knative.title"
:status="applications.knative.status"
:status-reason="applications.knative.statusReason"
:request-status="applications.knative.requestStatus"
:request-reason="applications.knative.requestReason"
2019-07-31 22:56:46 +05:30
:installed="applications.knative.installed"
:install-failed="applications.knative.installFailed"
2020-04-22 19:07:51 +05:30
:install-application-request-params="{
hostname: applications.knative.hostname,
pages_domain_id: applications.knative.pagesDomain && applications.knative.pagesDomain.id,
}"
2019-12-21 20:55:43 +05:30
:installed-via="installedVia"
2019-07-31 22:56:46 +05:30
:uninstallable="applications.knative.uninstallable"
:uninstall-successful="applications.knative.uninstallSuccessful"
:uninstall-failed="applications.knative.uninstallFailed"
2019-09-04 21:01:54 +05:30
:updateable="false"
2018-12-13 13:39:08 +05:30
:disabled="!helmInstalled"
2019-07-31 22:56:46 +05:30
v-bind="applications.knative"
2018-12-13 13:39:08 +05:30
title-link="https://github.com/knative/docs"
>
<div slot="description">
2019-02-15 15:39:39 +05:30
<span v-if="!rbac">
2019-07-07 11:18:12 +05:30
<p v-if="!rbac" class="rbac-notice bs-callout bs-callout-info append-bottom-0">
2019-02-15 15:39:39 +05:30
{{
s__(`ClusterIntegration|You must have an RBAC-enabled cluster
2019-07-31 22:56:46 +05:30
to install Knative.`)
2019-02-15 15:39:39 +05:30
}}
2019-09-04 21:01:54 +05:30
<a :href="helpPath" target="_blank" rel="noopener noreferrer">
{{ __('More information') }}
</a>
2019-02-15 15:39:39 +05:30
</p>
<br />
</span>
2018-12-13 13:39:08 +05:30
<p>
2019-02-15 15:39:39 +05:30
{{
s__(`ClusterIntegration|Knative extends Kubernetes to provide
2019-12-26 22:10:19 +05:30
a set of middleware components that are essential to build modern,
source-centric, and container-based applications that can run
anywhere: on premises, in the cloud, or even in a third-party data center.`)
2019-02-15 15:39:39 +05:30
}}
2018-12-13 13:39:08 +05:30
</p>
2019-09-04 21:01:54 +05:30
<knative-domain-editor
2019-12-21 20:55:43 +05:30
v-if="(knative.installed || (helmInstalled && rbac)) && !preInstalledKnative"
2019-09-04 21:01:54 +05:30
:knative="knative"
:ingress-dns-help-path="ingressDnsHelpPath"
@save="saveKnativeDomain"
2020-04-22 19:07:51 +05:30
@set="setKnativeDomain"
2019-09-04 21:01:54 +05:30
/>
2018-12-13 13:39:08 +05:30
</div>
</application-row>
2019-12-26 22:10:19 +05:30
<application-row
id="elastic_stack"
:logo-url="elasticStackLogo"
:title="applications.elastic_stack.title"
:status="applications.elastic_stack.status"
:status-reason="applications.elastic_stack.statusReason"
:request-status="applications.elastic_stack.requestStatus"
:request-reason="applications.elastic_stack.requestReason"
:version="applications.elastic_stack.version"
:chart-repo="applications.elastic_stack.chartRepo"
:update-available="applications.elastic_stack.updateAvailable"
:installed="applications.elastic_stack.installed"
:install-failed="applications.elastic_stack.installFailed"
:update-successful="applications.elastic_stack.updateSuccessful"
:update-failed="applications.elastic_stack.updateFailed"
:uninstallable="applications.elastic_stack.uninstallable"
:uninstall-successful="applications.elastic_stack.uninstallSuccessful"
:uninstall-failed="applications.elastic_stack.uninstallFailed"
:disabled="!helmInstalled"
2020-05-24 23:13:21 +05:30
title-link="https://gitlab.com/gitlab-org/charts/elastic-stack"
2019-12-26 22:10:19 +05:30
>
<div slot="description">
<p>
{{
s__(
`ClusterIntegration|The elastic stack collects logs from all pods in your cluster`,
)
}}
</p>
</div>
</application-row>
2020-05-24 23:13:21 +05:30
<application-row
id="fluentd"
:logo-url="fluentdLogo"
:title="applications.fluentd.title"
:status="applications.fluentd.status"
:status-reason="applications.fluentd.statusReason"
:request-status="applications.fluentd.requestStatus"
:request-reason="applications.fluentd.requestReason"
:installed="applications.fluentd.installed"
:install-failed="applications.fluentd.installFailed"
:install-application-request-params="{
host: applications.fluentd.host,
port: applications.fluentd.port,
protocol: applications.fluentd.protocol,
waf_log_enabled: applications.fluentd.wafLogEnabled,
cilium_log_enabled: applications.fluentd.ciliumLogEnabled,
}"
:uninstallable="applications.fluentd.uninstallable"
:uninstall-successful="applications.fluentd.uninstallSuccessful"
:uninstall-failed="applications.fluentd.uninstallFailed"
:disabled="!helmInstalled"
:updateable="false"
title-link="https://github.com/helm/charts/tree/master/stable/fluentd"
>
<div slot="description">
<p>
{{
s__(
`ClusterIntegration|Fluentd is an open source data collector, which lets you unify the data collection and consumption for a better use and understanding of data. It requires at least one of the following logs to be successfully installed.`,
)
}}
</p>
<fluentd-output-settings
:port="applications.fluentd.port"
:protocol="applications.fluentd.protocol"
:host="applications.fluentd.host"
:waf-log-enabled="applications.fluentd.wafLogEnabled"
:cilium-log-enabled="applications.fluentd.ciliumLogEnabled"
:status="applications.fluentd.status"
:update-failed="applications.fluentd.updateFailed"
/>
</div>
</application-row>
2018-03-17 18:26:18 +05:30
</div>
</section>
</template>