Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2020-08-19 03:09:59 +00:00
parent 57a4861dd1
commit 7fdacd20de
20 changed files with 656 additions and 97 deletions

1
.gitignore vendored
View File

@ -77,7 +77,6 @@ eslint-report.html
/locale/**/LC_MESSAGES
/locale/**/*.time_stamp
/.rspec
/.gitlab_pages_secret
/.gitlab_smime_key
/.gitlab_smime_cert
package-lock.json

View File

@ -1,61 +1,19 @@
<script>
import { mapState } from 'vuex';
import BoardColumn from 'ee_else_ce/boards/components/board_column.vue';
import EpicsSwimlanes from 'ee_component/boards/components/epics_swimlanes.vue';
import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
import BoardContentLayout from '~/boards/components/board_content_layout.vue';
import BoardColumn from '~/boards/components/board_column.vue';
export default {
components: {
BoardContentLayout,
BoardColumn,
EpicsSwimlanes,
},
mixins: [glFeatureFlagMixin()],
props: {
lists: {
type: Array,
required: true,
},
canAdminList: {
type: Boolean,
required: true,
},
groupId: {
type: Number,
required: false,
default: null,
},
disabled: {
type: Boolean,
required: true,
},
issueLinkBase: {
type: String,
required: true,
},
rootPath: {
type: String,
required: true,
},
boardId: {
type: String,
required: true,
},
},
computed: {
...mapState(['isShowingEpicsSwimlanes', 'boardLists']),
isSwimlanesOn() {
return this.glFeatures.boardsWithSwimlanes && this.isShowingEpicsSwimlanes;
},
},
};
</script>
<template>
<div>
<div
v-if="!isSwimlanesOn"
class="boards-list gl-w-full gl-py-5 gl-px-3 gl-white-space-nowrap"
data-qa-selector="boards_list"
<board-content-layout v-bind="$attrs">
<template
#board-content-decoration="{ lists, canAdminList, groupId, disabled, issueLinkBase, rootPath, boardId }"
>
<board-column
v-for="list in lists"
@ -69,16 +27,6 @@ export default {
:root-path="rootPath"
:board-id="boardId"
/>
</div>
<epics-swimlanes
v-else
ref="swimlanes"
:lists="boardLists"
:can-admin-list="canAdminList"
:disabled="disabled"
:board-id="boardId"
:group-id="groupId"
:root-path="rootPath"
/>
</div>
</template>
</board-content-layout>
</template>

View File

@ -0,0 +1,50 @@
<script>
export default {
props: {
lists: {
type: Array,
required: true,
},
canAdminList: {
type: Boolean,
required: true,
},
groupId: {
type: Number,
required: false,
default: null,
},
disabled: {
type: Boolean,
required: true,
},
issueLinkBase: {
type: String,
required: true,
},
rootPath: {
type: String,
required: true,
},
boardId: {
type: String,
required: true,
},
isSwimlanesOff: {
type: Boolean,
required: false,
default: false,
},
},
};
</script>
<template>
<div
:class="{ 'boards-list gl-w-full gl-py-5 gl-px-3 gl-white-space-nowrap': isSwimlanesOff }"
data-qa-selector="boards_list"
data-testid="boards_list"
>
<slot name="board-content-decoration" v-bind="$props"></slot>
</div>
</template>

View File

@ -4,6 +4,7 @@ import { mapActions } from 'vuex';
import 'ee_else_ce/boards/models/issue';
import 'ee_else_ce/boards/models/list';
import BoardContent from 'ee_else_ce/boards/components/board_content.vue';
import BoardSidebar from 'ee_else_ce/boards/components/board_sidebar';
import initNewListDropdown from 'ee_else_ce/boards/components/new_list_dropdown';
import boardConfigToggle from 'ee_else_ce/boards/config_toggle';
@ -18,7 +19,6 @@ import {
} from 'ee_else_ce/boards/ee_functions';
import VueApollo from 'vue-apollo';
import BoardContent from '~/boards/components/board_content.vue';
import createDefaultClient from '~/lib/graphql';
import Flash from '~/flash';
import { __ } from '~/locale';

View File

@ -262,10 +262,6 @@
content: '\f0ac';
}
.fa-pencil::before {
content: '\f040';
}
.fa-pause::before {
content: '\f04c';
}

View File

@ -68,7 +68,7 @@
.btn-group.table-action-buttons
.btn-group
= link_to edit_group_runner_path(@group, runner), class: 'btn btn-default has-tooltip', title: _('Edit'), ref: 'tooltip', aria: { label: _('Edit') }, data: { placement: 'top', container: 'body'} do
= icon('pencil')
= sprite_icon('pencil')
.btn-group
- if runner.active?
= link_to pause_group_runner_path(@group, runner), method: :post, class: 'btn btn-default has-tooltip', title: _('Pause'), ref: 'tooltip', aria: { label: _('Pause') }, data: { placement: 'top', container: 'body', confirm: _('Are you sure?') } do

View File

@ -0,0 +1,5 @@
---
title: Replace fa-pencil icon with GitLab SVG
merge_request: 39648
author:
type: other

View File

@ -0,0 +1,5 @@
---
title: Add model for CiliumNetworkPolicy
merge_request: 38848
author:
type: added

View File

@ -0,0 +1,51 @@
---
- title: Create and view requirements in GitLab
body: The first step towards managing requirements from within GitLab is here! This initial release allows users to create and view requirements at a project level. As Requirements Management evolves in GitLab, stay tuned for support for traceability between all artifacts, creating a seamless workflow to visually demonstrate completeness and compliance.
stage: Plan
self-managed: true
gitlab-com: true
packages: ultimate, gold
url: https://docs.gitlab.com/ee/user/project/requirements/index.html
image_url:
published_at: 2020-04-22
release: 12.10
- title: Retrieve CI/CD secrets from HashiCorp Vault
body: In this release, GitLab adds support for lightweight JSON Web Token (JWT) authentication to integrate with your existing HashiCorp Vault. Now, you can seamlessly provide secrets to CI/CD jobs by taking advantage of HashiCorp's JWT authentication method rather than manually having to provide secrets as a variable in GitLab.
stage: Release
self-managed: true
gitlab-com: true
packages: All
url: https://docs.gitlab.com/ee/ci/examples/authenticating-with-hashicorp-vault/index.html
image_url: https://about.gitlab.com/images/12_10/jwt-vault-1.png
published_at: 2020-04-22
release: 12.10
- title: Epic and Issue Health Tracking
body: To help users track projects and in-flight work GitLab now enables you to report on and quickly respond to the health of individual issues and epics by showing a red, amber, or green health status on your Epic Tree. Assign an issue a health status of On track (green), Needs attention (amber), or At risk (red) and see an aggregate report of health at the Epic level. Quickly view and analyze where a collection of work is at risk so you can open up the right discussions at the right time and keep work on track!
stage: Plan
self-managed: true
gitlab-com: true
packages: ultimate, gold
url: https://docs.gitlab.com/ee/user/project/issues/index.html#health-status-ultimate
image_url: https://about.gitlab.com/images/12_10/epic-health-status.png
published_at: 2020-04-22
release: 12.10
- title: Import Issues from Jira to GitLab
body: Until now, the only way to get Jira issues into GitLab was manually, with our CSV importer, or by hand-rolling your own migration utility. GitLab 12.10 includes an MVC to automatically import your Jira issues into GitLab. This is the first of many planned enhancements to make transitioning from Jira to GitLab as frictionless as possible.
stage: Plan
self-managed: true
gitlab-com: true
packages: All
url: https://docs.gitlab.com/ee/user/project/import/jira.html
image_url: https://about.gitlab.com/images/12_10/jira-importer.png
published_at: 2020-04-22
release: 12.10
- title: Autoscaling GitLab CI jobs on AWS Fargate
body: You can now auto-scale GitLab CI on AWS Fargate with the MVC release of GitLabs AWS Fargate Driver. With this new autoscaling pattern, GitLabs AWS Fargate driver automatically runs each build in a separate and isolated container on Amazons Elastic Container Service (ECS) using a user-defined container image.
stage: Verify
self-managed: true
gitlab-com: false
packages: core, starter, premium, ultimate
url: https://gitlab.com/gitlab-org/ci-cd/custom-executor-drivers/fargate/-/blob/master/docs/README.md
image_url: https://about.gitlab.com/images/12_9/autoscaling_ci_fargate.png
published_at: 2020-04-22
release: 12.10

View File

@ -0,0 +1,51 @@
---
- title: Gitaly Cluster for High Availability Git Storage
body: GitLab now supports highly available Git storage without using NFS. High Availability (HA) configurations improve the availability of important systems, like Git storage, by removing single points of failure, detecting outages, and automatically switching to a replica. This means that an individual component of the system can fail without causing the end user to experience an outage. Access to Git repositories is critical to developers and businesses, because when an outage occurs, developers cant push code, and deployments are blocked.
stage: Create
self-managed: true
gitlab-com: false
packages: core, starter, premium, ultimate
url: https://docs.gitlab.com/ee/administration/gitaly/praefect.html
image_url: https://about.gitlab.com/images/13_0/praefect-architecture.png
published_at: 2020-05-22
release: 13.0
- title: Auto Deploy to ECS
body: Until now, there hasnt been a simple way to deploy to Amazon Web Services. As a result, GitLab users had to spend a lot of time figuring out their own configuration. In GitLab 13.0, Auto DevOps has been extended to support deployment to AWS! GitLab users who are deploying to AWS Elastic Container Service (ECS) can now take advantage of Auto DevOps, even if they are not using Kubernetes.
stage: Release
self-managed: true
gitlab-com: true
packages: All
url: https://docs.gitlab.com/ee/topics/autodevops/index.html#aws-ecs
image_url:
published_at: 2020-05-22
release: 13.0
- title: View Epic Hierarchy on a Roadmap
body: When leveraging Multi-Level Epics, it can be difficult to keep track of where each child epic lives on the Roadmap. You can now quickly expand a parent epic on your roadmap to view all its child epics to ensure work is properly organized and your planned timeline is on track!
stage: Plan
self-managed: true
gitlab-com: true
packages: ultimate, gold
url: https://docs.gitlab.com/ee/user/group/roadmap/
image_url: https://about.gitlab.com/images/13_0/Expand-Epic-Hierarchy-Roadmap_roadmap.png
published_at: 2020-05-22
release: 13.0
- title: Versioned Snippets
body: Snippets in GitLab are now version controlled by a Git repository. When editing a Snippet, each change creates a commit. Snippets can also be cloned to make edits locally, and then pushed back to the Snippet repository.
stage: Create
self-managed: true
gitlab-com: true
packages: All
url: https://docs.gitlab.com/ee/user/snippets.html#versioned-snippets
image_url: https://about.gitlab.com/images/13_0/phikai-versioned-snippets.png
published_at: 2020-05-22
release: 13.0
- title: Dark Theme in the Web IDE
body: For people who spend time working in code editors, the ability to customize the environment to match their preferences is important. Dark themes are some of the most popular for other editors and important for providing a comfortable experience. That's why we're excited that the GitLab Web IDE is now completely themed dark for users who choose the Dark syntax highlighting theme perference!
stage: Create
self-managed: true
gitlab-com: true
packages: All
url: https://docs.gitlab.com/ee/user/project/web_ide/#themes
image_url: https://about.gitlab.com/images/13_0/phikai-web-ide-dark-theme.png
published_at: 2020-05-22
release: 13.0

View File

@ -0,0 +1,41 @@
---
- title: Manage IT Alerts in GitLab
body: GitLab is excited to introduce Alert Management to aggregate multiple IT service alerts in one interface, helping your team triage alerts and promote them to Incidents. Weve added the ability to triage alerts in a list view, view alert details, assign alerts, update the status of alerts, and create Incident Issues from Alerts.
stage: Monitor
self-managed: true
gitlab-com: true
packages: All
url: https://docs.gitlab.com/ee/user/project/operations/alert_management.html
image_url: https://about.gitlab.com/images/13_1/alert_management.png
published_at: 2020-06-22
release: 13.1
- title: Accessibility Testing Merge Request Widget
body: Today, developers who want to ensure their application is accessible to everyone suffer from slow feedback loops, which make it difficult to catch degradations in their code. In GitLab 13.1, merge requests can have a widget that details accessibility degradations related to the changed pages. This will immediately show developers the impact of their changes, which helps prevent degradations before they are merged and deployed.
stage: Verify
self-managed: true
gitlab-com: true
packages: All
url: https://docs.gitlab.com/ee/user/project/merge_requests/accessibility_testing.html#accessibility-merge-request-widget
image_url: https://about.gitlab.com/images/13_1/a11y-merge-request-widget.png
published_at: 2020-06-22
release: 13.1
- title: Mark any Design Thread as Resolved
body: When you receive lots of feedback on a Design, the number of comment pins can build up quickly! As your discussion thread grows, it gets hard to know which discussions are complete and which still need work. Now youll have the ability to mark any comment as Resolved to signify that it is now complete. Even better — your resolved comment pins will disappear from the Design so you can focus on whats left!
stage: Create
self-managed: true
gitlab-com: true
packages: All
url: https://docs.gitlab.com/ee/user/project/issues/design_management.html#resolve-design-threads
image_url: https://about.gitlab.com/images/13_1/resolve-design-comment.gif
published_at: 2020-06-22
release: 13.1
- title: Merge Request Reviews moved to Core
body: Originally introduced in GitLab 11.4 as a GitLab Premium feature, Merge Request Reviews allow merge request reviewers to submit multiple comments at once, cutting down on notification noise for the merge request author, and allowing for a more cohesive and streamlined review process.
stage: Create
self-managed: true
gitlab-com: true
packages: All
url: https://docs.gitlab.com/ee/user/discussions/index.html#merge-request-reviews
image_url: https://about.gitlab.com/images/13_1/batch_comments.png
published_at: 2020-06-22
release: 13.1

View File

@ -102,6 +102,14 @@ In order to get back all the previous functionality, a new license must be uploa
To fall back to having only the Core features active, you'll need to delete the
expired license(s).
### Remove a license
To remove a license from a self-managed instance:
1. Go to the [Admin Area](index.md) (click the wrench in the top navigation bar).
1. Click **License** in the left sidebar.
1. Click **Remove License**.
## License history
It's possible to upload and view more than one license,

View File

@ -0,0 +1,89 @@
# frozen_string_literal: true
module Gitlab
module Kubernetes
class CiliumNetworkPolicy
include NetworkPolicyCommon
extend ::Gitlab::Utils::Override
API_VERSION = "cilium.io/v2"
KIND = 'CiliumNetworkPolicy'
def initialize(name:, namespace:, selector:, ingress:, resource_version:, labels: nil, creation_timestamp: nil, egress: nil)
@name = name
@namespace = namespace
@labels = labels
@creation_timestamp = creation_timestamp
@selector = selector
@resource_version = resource_version
@ingress = ingress
@egress = egress
end
def generate
::Kubeclient::Resource.new.tap do |resource|
resource.kind = KIND
resource.apiVersion = API_VERSION
resource.metadata = metadata
resource.spec = spec
end
end
def self.from_yaml(manifest)
return unless manifest
policy = YAML.safe_load(manifest, symbolize_names: true)
return if !policy[:metadata] || !policy[:spec]
metadata = policy[:metadata]
spec = policy[:spec]
self.new(
name: metadata[:name],
namespace: metadata[:namespace],
resource_version: metadata[:resourceVersion],
labels: metadata[:labels],
selector: spec[:endpointSelector],
ingress: spec[:ingress],
egress: spec[:egress]
)
rescue Psych::SyntaxError, Psych::DisallowedClass
nil
end
def self.from_resource(resource)
return unless resource
return if !resource[:metadata] || !resource[:spec]
metadata = resource[:metadata]
spec = resource[:spec].to_h
self.new(
name: metadata[:name],
namespace: metadata[:namespace],
resource_version: metadata[:resourceVersion],
labels: metadata[:labels]&.to_h,
creation_timestamp: metadata[:creationTimestamp],
selector: spec[:endpointSelector],
ingress: spec[:ingress],
egress: spec[:egress]
)
end
private
attr_reader :name, :namespace, :labels, :creation_timestamp, :resource_version, :ingress, :egress
def selector
@selector ||= {}
end
override :spec
def spec
{
endpointSelector: selector,
ingress: ingress,
egress: egress
}
end
end
end
end

View File

@ -17,6 +17,13 @@ module Gitlab
@egress = egress
end
def generate
::Kubeclient::Resource.new.tap do |resource|
resource.metadata = metadata
resource.spec = spec
end
end
def self.from_yaml(manifest)
return unless manifest

View File

@ -5,13 +5,6 @@ module Gitlab
module NetworkPolicyCommon
DISABLED_BY_LABEL = :'network-policy.gitlab.com/disabled_by'
def generate
::Kubeclient::Resource.new.tap do |resource|
resource.metadata = metadata
resource.spec = spec
end
end
def as_json(opts = nil)
{
name: name,
@ -56,6 +49,7 @@ module Gitlab
def metadata
meta = { name: name, namespace: namespace }
meta[:labels] = labels if labels
meta[:resourceVersion] = resource_version if defined?(resource_version)
meta
end

View File

@ -0,0 +1,66 @@
import { mount } from '@vue/test-utils';
import BoardContentLayout from '~/boards/components/board_content_layout.vue';
const TestComponent = {
components: { BoardContentLayout },
template: `
<div>
<board-content-layout v-bind="$attrs">
<template v-slot:board-content-decoration="{ groupId }">
<p data-testid="child">{{ groupId }}</p>
</template>
</board-content-layout>
</div>
`,
};
describe('BoardContentLayout', () => {
let wrapper;
const groupId = 1;
const createComponent = props => {
wrapper = mount(TestComponent, {
propsData: {
lists: [],
canAdminList: true,
groupId,
disabled: false,
issueLinkBase: '',
rootPath: '',
boardId: '',
...props,
},
});
};
afterEach(() => {
wrapper.destroy();
wrapper = null;
});
it('renders children in the slot', () => {
createComponent();
expect(wrapper.find('[data-testid="child"]').exists()).toBe(true);
});
it('renders groupId from the scoped slot', () => {
createComponent();
expect(wrapper.find('[data-testid="child"]').text()).toContain(groupId);
});
describe('when isSwimlanesOff', () => {
it('renders the correct class on the root div', () => {
createComponent({ isSwimlanesOff: true });
expect(wrapper.find('[data-testid="boards_list"]').classes()).toEqual([
'boards-list',
'gl-w-full',
'gl-py-5',
'gl-px-3',
'gl-white-space-nowrap',
]);
});
});
});

View File

@ -0,0 +1,40 @@
import { mount } from '@vue/test-utils';
import axios from 'axios';
import MockAdapter from 'axios-mock-adapter';
import BoardContent from '~/boards/components/board_content.vue';
import BoardColumn from '~/boards/components/board_column.vue';
import List from '~/boards/models/list';
import { listObj } from '../mock_data';
describe('BoardContent', () => {
let wrapper;
let mock;
const createComponent = () => {
wrapper = mount(BoardContent, {
propsData: {
lists: [new List(listObj)],
canAdminList: true,
groupId: 1,
disabled: false,
issueLinkBase: '',
rootPath: '',
boardId: '',
},
});
};
beforeEach(() => {
mock = new MockAdapter(axios);
});
afterEach(() => {
mock.restore();
});
it('finds BoardColumns', () => {
createComponent();
expect(wrapper.findAll(BoardColumn).length).toBe(1);
});
});

View File

@ -0,0 +1,217 @@
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe Gitlab::Kubernetes::CiliumNetworkPolicy do
let(:policy) do
described_class.new(
name: name,
namespace: namespace,
creation_timestamp: '2020-04-14T00:08:30Z',
endpoint_selector: endpoint_selector,
ingress: ingress,
egress: egress,
description: description
)
end
let(:resource) do
::Kubeclient::Resource.new(
kind: partial_class_name,
apiVersion: "cilium.io/v2",
metadata: { name: name, namespace: namespace, resourceVersion: resource_version },
spec: { endpointSelector: endpoint_selector, ingress: ingress, egress: nil }
)
end
let(:name) { 'example-name' }
let(:namespace) { 'example-namespace' }
let(:endpoint_selector) { { matchLabels: { role: 'db' } } }
let(:description) { 'example-description' }
let(:partial_class_name) { described_class.name.split('::').last }
let(:resource_version) { 101 }
let(:ingress) do
[
{
fromEndpoints: [
{ matchLabels: { project: 'myproject' } }
]
}
]
end
let(:egress) do
[
{
ports: [{ port: 5978 }]
}
]
end
include_examples 'network policy common specs' do
let(:selector) { endpoint_selector}
let(:policy) do
described_class.new(
name: name,
namespace: namespace,
selector: selector,
ingress: ingress,
labels: labels,
resource_version: resource_version
)
end
let(:spec) { { endpointSelector: selector, ingress: ingress, egress: nil } }
let(:metadata) { { name: name, namespace: namespace, resourceVersion: resource_version } }
end
describe '#generate' do
subject { policy.generate }
it { is_expected.to eq(resource) }
end
describe '.from_yaml' do
let(:manifest) do
<<~POLICY
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
name: example-name
namespace: example-namespace
resourceVersion: 101
spec:
endpointSelector:
matchLabels:
role: db
ingress:
- fromEndpoints:
- matchLabels:
project: myproject
POLICY
end
subject { Gitlab::Kubernetes::CiliumNetworkPolicy.from_yaml(manifest)&.generate }
it { is_expected.to eq(resource) }
context 'with nil manifest' do
let(:manifest) { nil }
it { is_expected.to be_nil }
end
context 'with invalid manifest' do
let(:manifest) { "\tfoo: bar" }
it { is_expected.to be_nil }
end
context 'with manifest without metadata' do
let(:manifest) do
<<~POLICY
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
spec:
endpointSelector:
matchLabels:
role: db
ingress:
- fromEndpoints:
matchLabels:
project: myproject
POLICY
end
it { is_expected.to be_nil }
end
context 'with manifest without spec' do
let(:manifest) do
<<~POLICY
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
name: example-name
namespace: example-namespace
POLICY
end
it { is_expected.to be_nil }
end
context 'with disallowed class' do
let(:manifest) do
<<~POLICY
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
name: example-name
namespace: example-namespace
creationTimestamp: 2020-04-14T00:08:30Z
spec:
endpointSelector:
matchLabels:
role: db
ingress:
- fromEndpoints:
matchLabels:
project: myproject
POLICY
end
it { is_expected.to be_nil }
end
end
describe '.from_resource' do
let(:resource) do
::Kubeclient::Resource.new(
metadata: {
name: name, namespace: namespace, creationTimestamp: '2020-04-14T00:08:30Z',
labels: { app: 'foo' }, resourceVersion: resource_version
},
spec: { endpointSelector: endpoint_selector, ingress: ingress, egress: nil, labels: nil, description: nil }
)
end
let(:generated_resource) do
::Kubeclient::Resource.new(
kind: partial_class_name,
apiVersion: "cilium.io/v2",
metadata: { name: name, namespace: namespace, resourceVersion: resource_version, labels: { app: 'foo' } },
spec: { endpointSelector: endpoint_selector, ingress: ingress, egress: nil }
)
end
subject { Gitlab::Kubernetes::CiliumNetworkPolicy.from_resource(resource)&.generate }
it { is_expected.to eq(generated_resource) }
context 'with nil resource' do
let(:resource) { nil }
it { is_expected.to be_nil }
end
context 'with resource without metadata' do
let(:resource) do
::Kubeclient::Resource.new(
spec: { endpointSelector: endpoint_selector, ingress: ingress, egress: nil, labels: nil, description: nil }
)
end
it { is_expected.to be_nil }
end
context 'with resource without spec' do
let(:resource) do
::Kubeclient::Resource.new(
metadata: { name: name, namespace: namespace, uid: '128cf288-7de4-11ea-aceb-42010a800089', resourceVersion: resource_version }
)
end
it { is_expected.to be_nil }
end
end
end

View File

@ -15,6 +15,13 @@ RSpec.describe Gitlab::Kubernetes::NetworkPolicy do
)
end
let(:resource) do
::Kubeclient::Resource.new(
metadata: { name: name, namespace: namespace },
spec: { podSelector: pod_selector, policyTypes: %w(Ingress), ingress: ingress, egress: nil }
)
end
let(:name) { 'example-name' }
let(:namespace) { 'example-namespace' }
let(:pod_selector) { { matchLabels: { role: 'db' } } }
@ -50,6 +57,13 @@ RSpec.describe Gitlab::Kubernetes::NetworkPolicy do
end
let(:spec) { { podSelector: selector, policyTypes: ["Ingress"], ingress: ingress, egress: nil } }
let(:metadata) { { name: name, namespace: namespace } }
end
describe '#generate' do
subject { policy.generate }
it { is_expected.to eq(resource) }
end
describe '.from_yaml' do
@ -60,8 +74,6 @@ RSpec.describe Gitlab::Kubernetes::NetworkPolicy do
metadata:
name: example-name
namespace: example-namespace
labels:
app: foo
spec:
podSelector:
matchLabels:
@ -76,13 +88,6 @@ RSpec.describe Gitlab::Kubernetes::NetworkPolicy do
POLICY
end
let(:resource) do
::Kubeclient::Resource.new(
metadata: { name: name, namespace: namespace, labels: { app: 'foo' } },
spec: { podSelector: pod_selector, policyTypes: %w(Ingress), ingress: ingress, egress: nil }
)
end
subject { Gitlab::Kubernetes::NetworkPolicy.from_yaml(manifest)&.generate }
it { is_expected.to eq(resource) }

View File

@ -5,19 +5,6 @@ RSpec.shared_examples 'network policy common specs' do
let(:namespace) { 'example-namespace' }
let(:labels) { nil }
describe 'generate' do
let(:resource) do
::Kubeclient::Resource.new(
metadata: { name: name, namespace: namespace },
spec: spec
)
end
subject { policy.generate }
it { is_expected.to eq(resource) }
end
describe 'as_json' do
let(:json_policy) do
{
@ -26,7 +13,7 @@ RSpec.shared_examples 'network policy common specs' do
creation_timestamp: nil,
manifest: YAML.dump(
{
metadata: { name: name, namespace: namespace },
metadata: metadata,
spec: spec
}.deep_stringify_keys
),