From d9ab72d6080f594d0b3cae15f14b3ef2c6c638cb Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 20 Oct 2021 08:43:02 +0000 Subject: Add latest changes from gitlab-org/gitlab@14-4-stable-ee --- .../javascripts/clusters_list/clusters_util.js | 8 + .../clusters_list/components/agent_empty_state.vue | 119 ++++++++++ .../clusters_list/components/agent_table.vue | 152 ++++++++++++ .../clusters_list/components/agents.vue | 156 +++++++++++++ .../components/available_agents_dropdown.vue | 83 +++++++ .../components/install_agent_modal.vue | 259 +++++++++++++++++++++ app/assets/javascripts/clusters_list/constants.js | 85 ++++++- .../mutations/create_agent.mutation.graphql | 8 + .../mutations/create_agent_token.mutation.graphql | 9 + .../queries/agent_configurations.query.graphql | 15 ++ .../graphql/queries/get_agents.query.graphql | 47 ++++ app/assets/javascripts/clusters_list/index.js | 5 + .../javascripts/clusters_list/load_agents.js | 44 ++++ 13 files changed, 989 insertions(+), 1 deletion(-) create mode 100644 app/assets/javascripts/clusters_list/clusters_util.js create mode 100644 app/assets/javascripts/clusters_list/components/agent_empty_state.vue create mode 100644 app/assets/javascripts/clusters_list/components/agent_table.vue create mode 100644 app/assets/javascripts/clusters_list/components/agents.vue create mode 100644 app/assets/javascripts/clusters_list/components/available_agents_dropdown.vue create mode 100644 app/assets/javascripts/clusters_list/components/install_agent_modal.vue create mode 100644 app/assets/javascripts/clusters_list/graphql/mutations/create_agent.mutation.graphql create mode 100644 app/assets/javascripts/clusters_list/graphql/mutations/create_agent_token.mutation.graphql create mode 100644 app/assets/javascripts/clusters_list/graphql/queries/agent_configurations.query.graphql create mode 100644 app/assets/javascripts/clusters_list/graphql/queries/get_agents.query.graphql create mode 100644 app/assets/javascripts/clusters_list/load_agents.js (limited to 'app/assets/javascripts/clusters_list') diff --git a/app/assets/javascripts/clusters_list/clusters_util.js b/app/assets/javascripts/clusters_list/clusters_util.js new file mode 100644 index 00000000000..9b870134512 --- /dev/null +++ b/app/assets/javascripts/clusters_list/clusters_util.js @@ -0,0 +1,8 @@ +export function generateAgentRegistrationCommand(agentToken, kasAddress) { + return `docker run --pull=always --rm \\ + registry.gitlab.com/gitlab-org/cluster-integration/gitlab-agent/cli:stable generate \\ + --agent-token=${agentToken} \\ + --kas-address=${kasAddress} \\ + --agent-version stable \\ + --namespace gitlab-kubernetes-agent | kubectl apply -f -`; +} diff --git a/app/assets/javascripts/clusters_list/components/agent_empty_state.vue b/app/assets/javascripts/clusters_list/components/agent_empty_state.vue new file mode 100644 index 00000000000..405339b3d36 --- /dev/null +++ b/app/assets/javascripts/clusters_list/components/agent_empty_state.vue @@ -0,0 +1,119 @@ + + + diff --git a/app/assets/javascripts/clusters_list/components/agent_table.vue b/app/assets/javascripts/clusters_list/components/agent_table.vue new file mode 100644 index 00000000000..487e512c06d --- /dev/null +++ b/app/assets/javascripts/clusters_list/components/agent_table.vue @@ -0,0 +1,152 @@ + + + diff --git a/app/assets/javascripts/clusters_list/components/agents.vue b/app/assets/javascripts/clusters_list/components/agents.vue new file mode 100644 index 00000000000..ed44c1f5fa7 --- /dev/null +++ b/app/assets/javascripts/clusters_list/components/agents.vue @@ -0,0 +1,156 @@ + + + diff --git a/app/assets/javascripts/clusters_list/components/available_agents_dropdown.vue b/app/assets/javascripts/clusters_list/components/available_agents_dropdown.vue new file mode 100644 index 00000000000..9fb020d2f4f --- /dev/null +++ b/app/assets/javascripts/clusters_list/components/available_agents_dropdown.vue @@ -0,0 +1,83 @@ + + diff --git a/app/assets/javascripts/clusters_list/components/install_agent_modal.vue b/app/assets/javascripts/clusters_list/components/install_agent_modal.vue new file mode 100644 index 00000000000..5f192fe4d5a --- /dev/null +++ b/app/assets/javascripts/clusters_list/components/install_agent_modal.vue @@ -0,0 +1,259 @@ + + + diff --git a/app/assets/javascripts/clusters_list/constants.js b/app/assets/javascripts/clusters_list/constants.js index f39678b73dc..0bade1fc281 100644 --- a/app/assets/javascripts/clusters_list/constants.js +++ b/app/assets/javascripts/clusters_list/constants.js @@ -1,4 +1,10 @@ -import { __, s__ } from '~/locale'; +import { __, s__, sprintf } from '~/locale'; + +export const MAX_LIST_COUNT = 25; +export const INSTALL_AGENT_MODAL_ID = 'install-agent'; +export const ACTIVE_CONNECTION_TIME = 480000; +export const TROUBLESHOOTING_LINK = + 'https://docs.gitlab.com/ee/user/clusters/agent/#troubleshooting'; export const CLUSTER_ERRORS = { default: { @@ -58,3 +64,80 @@ export const STATUSES = { deleting: { title: __('Deleting') }, creating: { title: __('Creating') }, }; + +export const I18N_INSTALL_AGENT_MODAL = { + next: __('Next'), + done: __('Done'), + cancel: __('Cancel'), + + modalTitle: s__('ClusterAgents|Install new Agent'), + + selectAgentTitle: s__('ClusterAgents|Select which Agent you want to install'), + selectAgentBody: s__( + `ClusterAgents|Select the Agent you want to register with GitLab and install on your cluster. To learn more about the Kubernetes Agent registration process %{linkStart}go to the documentation%{linkEnd}.`, + ), + + copyToken: s__('ClusterAgents|Copy token'), + tokenTitle: s__('ClusterAgents|Registration token'), + tokenBody: s__( + `ClusterAgents|The registration token will be used to connect the Agent on your cluster to GitLab. To learn more about the registration tokens and how they are used %{linkStart}go to the documentation%{linkEnd}.`, + ), + + tokenSingleUseWarningTitle: s__( + 'ClusterAgents|The token value will not be shown again after you close this window.', + ), + tokenSingleUseWarningBody: s__( + `ClusterAgents|The recommended installation method provided below includes the token. If you want to follow the alternative installation method provided in the docs make sure you save the token value before you close the window.`, + ), + + basicInstallTitle: s__('ClusterAgents|Recommended installation method'), + basicInstallBody: s__( + `Open a CLI and connect to the cluster you want to install the Agent in. Use this installation method to minimize any manual steps. The token is already included in the command.`, + ), + + advancedInstallTitle: s__('ClusterAgents|Alternative installation methods'), + advancedInstallBody: s__( + 'ClusterAgents|For alternative installation methods %{linkStart}go to the documentation%{linkEnd}.', + ), + + registrationErrorTitle: s__('Failed to register Agent'), + unknownError: s__('ClusterAgents|An unknown error occurred. Please try again.'), +}; + +export const I18N_AVAILABLE_AGENTS_DROPDOWN = { + selectAgent: s__('ClusterAgents|Select an Agent'), + registeringAgent: s__('ClusterAgents|Registering Agent'), +}; + +export const AGENT_STATUSES = { + active: { + name: s__('ClusterAgents|Connected'), + icon: 'status-success', + class: 'text-success-500', + tooltip: { + title: sprintf(s__('ClusterAgents|Last connected %{timeAgo}.')), + }, + }, + inactive: { + name: s__('ClusterAgents|Not connected'), + icon: 'severity-critical', + class: 'text-danger-800', + tooltip: { + title: s__('ClusterAgents|Agent might not be connected to GitLab'), + body: sprintf( + s__( + 'ClusterAgents|The Agent has not been connected in a long time. There might be a connectivity issue. Last contact was %{timeAgo}.', + ), + ), + }, + }, + unused: { + name: s__('ClusterAgents|Never connected'), + icon: 'status-neutral', + class: 'text-secondary-400', + tooltip: { + title: s__('ClusterAgents|Agent never connected to GitLab'), + body: s__('ClusterAgents|Make sure you are using a valid token.'), + }, + }, +}; diff --git a/app/assets/javascripts/clusters_list/graphql/mutations/create_agent.mutation.graphql b/app/assets/javascripts/clusters_list/graphql/mutations/create_agent.mutation.graphql new file mode 100644 index 00000000000..c29756159f5 --- /dev/null +++ b/app/assets/javascripts/clusters_list/graphql/mutations/create_agent.mutation.graphql @@ -0,0 +1,8 @@ +mutation createClusterAgent($input: CreateClusterAgentInput!) { + createClusterAgent(input: $input) { + clusterAgent { + id + } + errors + } +} diff --git a/app/assets/javascripts/clusters_list/graphql/mutations/create_agent_token.mutation.graphql b/app/assets/javascripts/clusters_list/graphql/mutations/create_agent_token.mutation.graphql new file mode 100644 index 00000000000..e93580cf416 --- /dev/null +++ b/app/assets/javascripts/clusters_list/graphql/mutations/create_agent_token.mutation.graphql @@ -0,0 +1,9 @@ +mutation createClusterAgentToken($input: ClusterAgentTokenCreateInput!) { + clusterAgentTokenCreate(input: $input) { + secret + token { + id + } + errors + } +} diff --git a/app/assets/javascripts/clusters_list/graphql/queries/agent_configurations.query.graphql b/app/assets/javascripts/clusters_list/graphql/queries/agent_configurations.query.graphql new file mode 100644 index 00000000000..40b61337024 --- /dev/null +++ b/app/assets/javascripts/clusters_list/graphql/queries/agent_configurations.query.graphql @@ -0,0 +1,15 @@ +query agentConfigurations($projectPath: ID!) { + project(fullPath: $projectPath) { + agentConfigurations { + nodes { + agentName + } + } + + clusterAgents { + nodes { + name + } + } + } +} diff --git a/app/assets/javascripts/clusters_list/graphql/queries/get_agents.query.graphql b/app/assets/javascripts/clusters_list/graphql/queries/get_agents.query.graphql new file mode 100644 index 00000000000..61989e00d9e --- /dev/null +++ b/app/assets/javascripts/clusters_list/graphql/queries/get_agents.query.graphql @@ -0,0 +1,47 @@ +#import "~/graphql_shared/fragments/pageInfo.fragment.graphql" + +query getAgents( + $defaultBranchName: String! + $projectPath: ID! + $first: Int + $last: Int + $afterAgent: String + $afterTree: String + $beforeAgent: String + $beforeTree: String +) { + project(fullPath: $projectPath) { + clusterAgents(first: $first, last: $last, before: $beforeAgent, after: $afterAgent) { + nodes { + id + name + webPath + tokens { + nodes { + lastUsedAt + } + } + } + + pageInfo { + ...PageInfo + } + } + + repository { + tree(path: ".gitlab/agents", ref: $defaultBranchName) { + trees(first: $first, last: $last, after: $afterTree, before: $beforeTree) { + nodes { + name + path + webPath + } + + pageInfo { + ...PageInfo + } + } + } + } + } +} diff --git a/app/assets/javascripts/clusters_list/index.js b/app/assets/javascripts/clusters_list/index.js index daa82892773..de18965abbd 100644 --- a/app/assets/javascripts/clusters_list/index.js +++ b/app/assets/javascripts/clusters_list/index.js @@ -1,6 +1,11 @@ import Vue from 'vue'; +import VueApollo from 'vue-apollo'; import loadClusters from './load_clusters'; +import loadAgents from './load_agents'; + +Vue.use(VueApollo); export default () => { loadClusters(Vue); + loadAgents(Vue, VueApollo); }; diff --git a/app/assets/javascripts/clusters_list/load_agents.js b/app/assets/javascripts/clusters_list/load_agents.js new file mode 100644 index 00000000000..b77d386df20 --- /dev/null +++ b/app/assets/javascripts/clusters_list/load_agents.js @@ -0,0 +1,44 @@ +import createDefaultClient from '~/lib/graphql'; +import Agents from './components/agents.vue'; + +export default (Vue, VueApollo) => { + const el = document.querySelector('#js-cluster-agents-list'); + + if (!el) { + return null; + } + + const defaultClient = createDefaultClient({}, { assumeImmutableResults: true }); + + const { + emptyStateImage, + defaultBranchName, + projectPath, + agentDocsUrl, + installDocsUrl, + getStartedDocsUrl, + integrationDocsUrl, + kasAddress, + } = el.dataset; + + return new Vue({ + el, + apolloProvider: new VueApollo({ defaultClient }), + provide: { + emptyStateImage, + projectPath, + agentDocsUrl, + installDocsUrl, + getStartedDocsUrl, + integrationDocsUrl, + kasAddress, + }, + render(createElement) { + return createElement(Agents, { + props: { + defaultBranchName, + }, + }); + }, + }); +}; -- cgit v1.2.3