Commit 4ef9e321 authored by Douglas Barbosa Alexandre's avatar Douglas Barbosa Alexandre

Merge branch '212320-move-canary-ingress-to-core' into 'master'

RUN AS-IF-FOSS Move Canary Ingress to core

See merge request gitlab-org/gitlab!48836
parents b8016f27 15af4c14
...@@ -31,6 +31,7 @@ module Types ...@@ -31,6 +31,7 @@ module Types
mount_mutation Mutations::Commits::Create, calls_gitaly: true mount_mutation Mutations::Commits::Create, calls_gitaly: true
mount_mutation Mutations::CustomEmoji::Create, feature_flag: :custom_emoji mount_mutation Mutations::CustomEmoji::Create, feature_flag: :custom_emoji
mount_mutation Mutations::Discussions::ToggleResolve mount_mutation Mutations::Discussions::ToggleResolve
mount_mutation Mutations::Environments::CanaryIngress::Update
mount_mutation Mutations::Issues::Create mount_mutation Mutations::Issues::Create
mount_mutation Mutations::Issues::SetAssignees mount_mutation Mutations::Issues::SetAssignees
mount_mutation Mutations::Issues::SetConfidential mount_mutation Mutations::Issues::SetConfidential
......
...@@ -41,10 +41,6 @@ module Environments ...@@ -41,10 +41,6 @@ module Environments
return error(_('You do not have permission to update the environment.')) return error(_('You do not have permission to update the environment.'))
end end
unless environment.project.feature_available?(:deploy_board)
return error(_('The license for Deploy Board is required to use this feature.'))
end
unless params[:weight].is_a?(Integer) && (0..100).cover?(params[:weight]) unless params[:weight].is_a?(Integer) && (0..100).cover?(params[:weight])
return error(_('Canary weight must be specified and valid range (0..100).')) return error(_('Canary weight must be specified and valid range (0..100).'))
end end
......
...@@ -1537,6 +1537,14 @@ ...@@ -1537,6 +1537,14 @@
:weight: 2 :weight: 2
:idempotent: :idempotent:
:tags: [] :tags: []
- :name: environments_canary_ingress_update
:feature_category: :continuous_delivery
:has_external_dependencies: true
:urgency: :low
:resource_boundary: :unknown
:weight: 1
:idempotent: true
:tags: []
- :name: error_tracking_issue_link - :name: error_tracking_issue_link
:feature_category: :error_tracking :feature_category: :error_tracking
:has_external_dependencies: true :has_external_dependencies: true
......
---
title: Move CanaryIngress to core
merge_request: 48836
author:
type: changed
...@@ -68,9 +68,10 @@ can easily notice them. ...@@ -68,9 +68,10 @@ can easily notice them.
![Canary deployments on Deploy Board](img/deploy_boards_canary_deployments.png) ![Canary deployments on Deploy Board](img/deploy_boards_canary_deployments.png)
### Advanced traffic control with Canary Ingress **(PREMIUM)** ### Advanced traffic control with Canary Ingress
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/215501) in [GitLab Premium](https://about.gitlab.com/pricing/) 13.6. > - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/215501) in [GitLab Premium](https://about.gitlab.com/pricing/) 13.6.
> - [Moved](https://gitlab.com/gitlab-org/gitlab/-/issues/212320) to Core in GitLab 13.7.
Canary deployments can be more strategic with [Canary Ingress](https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#canary), Canary deployments can be more strategic with [Canary Ingress](https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#canary),
which is an advanced traffic routing service that controls incoming HTTP which is an advanced traffic routing service that controls incoming HTTP
......
...@@ -14,7 +14,6 @@ module EE ...@@ -14,7 +14,6 @@ module EE
mount_mutation ::Mutations::Issues::SetWeight mount_mutation ::Mutations::Issues::SetWeight
mount_mutation ::Mutations::Issues::SetEpic mount_mutation ::Mutations::Issues::SetEpic
mount_mutation ::Mutations::Issues::PromoteToEpic mount_mutation ::Mutations::Issues::PromoteToEpic
mount_mutation ::Mutations::Environments::CanaryIngress::Update
mount_mutation ::Mutations::EpicTree::Reorder mount_mutation ::Mutations::EpicTree::Reorder
mount_mutation ::Mutations::Epics::Update mount_mutation ::Mutations::Epics::Update
mount_mutation ::Mutations::Epics::Create mount_mutation ::Mutations::Epics::Create
......
...@@ -701,14 +701,6 @@ ...@@ -701,14 +701,6 @@
:weight: 1 :weight: 1
:idempotent: :idempotent:
:tags: [] :tags: []
- :name: environments_canary_ingress_update
:feature_category: :continuous_delivery
:has_external_dependencies: true
:urgency: :low
:resource_boundary: :unknown
:weight: 1
:idempotent: true
:tags: []
- :name: group_saml_group_sync - :name: group_saml_group_sync
:feature_category: :authentication_and_authorization :feature_category: :authentication_and_authorization
:has_external_dependencies: :has_external_dependencies:
......
...@@ -27,33 +27,21 @@ RSpec.describe 'Update Environment Canary Ingress', :clean_gitlab_redis_cache do ...@@ -27,33 +27,21 @@ RSpec.describe 'Update Environment Canary Ingress', :clean_gitlab_redis_cache do
end end
before do before do
stub_licensed_features(deploy_board: true, protected_environments: true) stub_licensed_features(protected_environments: true)
stub_kubeclient_ingresses(environment.deployment_namespace, response: kube_ingresses_response(with_canary: true)) stub_kubeclient_ingresses(environment.deployment_namespace, response: kube_ingresses_response(with_canary: true))
end end
context 'when kubernetes accepted the patch request' do context 'when environment is protected and allowed to be deployed by only operator' do
before do before do
stub_kubeclient_ingresses(environment.deployment_namespace, method: :patch, resource_path: "/production-auto-deploy") stub_kubeclient_ingresses(environment.deployment_namespace, method: :patch, resource_path: "/production-auto-deploy")
create(:protected_environment, :maintainers_can_deploy, name: environment.name, project: project)
end end
it 'updates successfully' do it 'fails to update' do
post_graphql_mutation(mutation, current_user: actor) post_graphql_mutation(mutation, current_user: actor)
expect(graphql_mutation_response(:environments_canary_ingress_update)['errors']) expect(graphql_errors.first)
.to be_empty .to include('message' => "The resource that you are attempting to access does not exist or you don't have permission to perform this action")
end
context 'when environment is protected and allowed to be deployed by only operator' do
before do
create(:protected_environment, :maintainers_can_deploy, name: environment.name, project: project)
end
it 'fails to update' do
post_graphql_mutation(mutation, current_user: actor)
expect(graphql_errors.first)
.to include('message' => "The resource that you are attempting to access does not exist or you don't have permission to perform this action")
end
end end
end end
end end
...@@ -27291,9 +27291,6 @@ msgstr "" ...@@ -27291,9 +27291,6 @@ msgstr ""
msgid "The issue was successfully promoted to an epic. Redirecting to epic..." msgid "The issue was successfully promoted to an epic. Redirecting to epic..."
msgstr "" msgstr ""
msgid "The license for Deploy Board is required to use this feature."
msgstr ""
msgid "The license key is invalid. Make sure it is exactly as you received it from GitLab Inc." msgid "The license key is invalid. Make sure it is exactly as you received it from GitLab Inc."
msgstr "" msgstr ""
......
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Update Environment Canary Ingress', :clean_gitlab_redis_cache do
include GraphqlHelpers
include KubernetesHelpers
let_it_be(:project) { create(:project, :repository) }
let_it_be(:cluster) { create(:cluster, :project, projects: [project]) }
let_it_be(:service) { create(:cluster_platform_kubernetes, :configured, cluster: cluster) }
let_it_be(:environment) { create(:environment, project: project) }
let_it_be(:deployment) { create(:deployment, :success, environment: environment, project: project) }
let_it_be(:maintainer) { create(:user) }
let_it_be(:developer) { create(:user) }
let(:environment_id) { environment.to_global_id.to_s }
let(:weight) { 25 }
let(:actor) { developer }
let(:mutation) do
graphql_mutation(:environments_canary_ingress_update, id: environment_id, weight: weight)
end
before_all do
project.add_maintainer(maintainer)
project.add_developer(developer)
end
before do
stub_kubeclient_ingresses(environment.deployment_namespace, response: kube_ingresses_response(with_canary: true))
end
context 'when kubernetes accepted the patch request' do
before do
stub_kubeclient_ingresses(environment.deployment_namespace, method: :patch, resource_path: "/production-auto-deploy")
end
it 'updates successfully' do
post_graphql_mutation(mutation, current_user: actor)
expect(graphql_mutation_response(:environments_canary_ingress_update)['errors'])
.to be_empty
end
end
end
...@@ -17,10 +17,6 @@ RSpec.describe Environments::CanaryIngress::UpdateService, :clean_gitlab_redis_c ...@@ -17,10 +17,6 @@ RSpec.describe Environments::CanaryIngress::UpdateService, :clean_gitlab_redis_c
project.add_reporter(reporter) project.add_reporter(reporter)
end end
before do
stub_licensed_features(deploy_board: true)
end
shared_examples_for 'failed request' do shared_examples_for 'failed request' do
it 'returns an error' do it 'returns an error' do
expect(subject[:status]).to eq(:error) expect(subject[:status]).to eq(:error)
...@@ -53,16 +49,6 @@ RSpec.describe Environments::CanaryIngress::UpdateService, :clean_gitlab_redis_c ...@@ -53,16 +49,6 @@ RSpec.describe Environments::CanaryIngress::UpdateService, :clean_gitlab_redis_c
end end
end end
context 'when project does not have an sufficient license' do
before do
stub_licensed_features(deploy_board: false)
end
it_behaves_like 'failed request' do
let(:message) { 'The license for Deploy Board is required to use this feature.' }
end
end
context 'when weight parameter is invalid' do context 'when weight parameter is invalid' do
let(:params) { { weight: 'unknown' } } let(:params) { { weight: 'unknown' } }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment