gitlab-qa 8.14.0 → 8.14.1
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b7fcc8c586127f3c1883786b303610fd2360293a4e2ee2727225a0f50a865947
|
4
|
+
data.tar.gz: 7928dcd357359e99bc3e8c921bf3cda138d1cf5dee9746760a097c34c92be323
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 65877f46a7c942ada94490ffcbdcdc74f757cc51000879e4f5030030fcbd0fb59e5be9f8ebd1550d0effe332cad61ff043eb7f8434aaddc72b6094d269048850
|
7
|
+
data.tar.gz: 837d053e553827cd507ba10e12056ae8bb8dbe32b22903f89c5eb67e59f57230a561897e34eb97f6ba67b5b67b8d66562a773c5fc487525ca1a0c83a006656d9
|
@@ -5,9 +5,10 @@ ce:airgapped:
|
|
5
5
|
- .high-capacity
|
6
6
|
- .ce-variables
|
7
7
|
- .rspec-report-opts
|
8
|
+
parallel: 10
|
8
9
|
variables:
|
9
10
|
QA_SCENARIO: "Test::Instance::Airgapped"
|
10
|
-
QA_RSPEC_TAGS: "--tag
|
11
|
+
QA_RSPEC_TAGS: "--tag '~github' --tag '~skip_live_env'"
|
11
12
|
|
12
13
|
ee:airgapped:
|
13
14
|
extends:
|
@@ -16,8 +17,7 @@ ee:airgapped:
|
|
16
17
|
- .high-capacity
|
17
18
|
- .ee-variables
|
18
19
|
- .rspec-report-opts
|
20
|
+
parallel: 10
|
19
21
|
variables:
|
20
22
|
QA_SCENARIO: "Test::Instance::Airgapped"
|
21
|
-
QA_RSPEC_TAGS: "--tag
|
22
|
-
|
23
|
-
|
23
|
+
QA_RSPEC_TAGS: "--tag '~github' --tag '~skip_live_env'"
|
data/Gemfile.lock
CHANGED
@@ -6,7 +6,7 @@ module Gitlab
|
|
6
6
|
class GitalyCluster
|
7
7
|
class GitalyClusterConfig
|
8
8
|
attr_accessor :gitlab_name, :network, :airgapped_network,
|
9
|
-
:praefect_node_name, :praefect_port,
|
9
|
+
:praefect_node_name, :praefect_port, :praefect_ip,
|
10
10
|
:primary_node_name, :primary_node_port,
|
11
11
|
:secondary_node_name, :secondary_node_port,
|
12
12
|
:tertiary_node_name, :tertiary_node_port,
|
@@ -90,6 +90,7 @@ module Gitlab
|
|
90
90
|
end
|
91
91
|
|
92
92
|
@praefect_node = praefect(release)
|
93
|
+
config.praefect_ip = praefect_node.ip_address
|
93
94
|
Runtime::Logger.info("Gitaly Cluster Ready")
|
94
95
|
end
|
95
96
|
|
@@ -7,31 +7,37 @@ module Gitlab
|
|
7
7
|
module Instance
|
8
8
|
class Airgapped < Scenario::Template
|
9
9
|
require 'resolv'
|
10
|
-
attr_reader :config, :gitlab_air_gap_commands
|
10
|
+
attr_reader :config, :gitlab_air_gap_commands, :iptables_restricted_network, :airgapped_network_name
|
11
11
|
|
12
12
|
def initialize
|
13
|
+
# Uses https://docs.docker.com/engine/reference/commandline/network_create/#network-internal-mode
|
14
|
+
@airgapped_network_name = 'airgapped'
|
15
|
+
# Uses iptables to deny all network traffic, with a number of exceptions for required ports and IPs
|
16
|
+
@iptables_restricted_network = 'test'
|
13
17
|
@config = Component::GitalyCluster::GitalyClusterConfig.new(
|
18
|
+
gitlab_name: "gitlab-airgapped-#{SecureRandom.hex(4)}",
|
14
19
|
airgapped_network: true,
|
15
|
-
network:
|
20
|
+
network: airgapped_network_name
|
16
21
|
)
|
17
22
|
end
|
18
23
|
|
19
24
|
def perform(release, *rspec_args)
|
20
25
|
Component::Gitlab.perform do |gitlab|
|
21
|
-
|
26
|
+
Component::GitalyCluster.perform do |cluster|
|
22
27
|
cluster.config = @config
|
23
|
-
|
28
|
+
# we need to get an IP for praefect before proceeding so it cannot be run in parallel with gitlab
|
29
|
+
cluster.instance(true).join
|
24
30
|
end
|
25
31
|
gitlab.name = config.gitlab_name
|
26
32
|
gitlab.release = release
|
27
|
-
gitlab.
|
28
|
-
gitlab.
|
33
|
+
gitlab.network = iptables_restricted_network # we use iptables to restrict access on the gitlab instance
|
34
|
+
gitlab.runner_network = config.network
|
35
|
+
gitlab.exec_commands = airgap_gitlab_commands
|
36
|
+
gitlab.skip_availability_check = true
|
29
37
|
gitlab.omnibus_configuration << gitlab_omnibus_configuration
|
30
|
-
gitlab.skip_availability_check = true # airgapped environment cannot be pinged to check health
|
31
38
|
rspec_args << "--" unless rspec_args.include?('--')
|
32
39
|
rspec_args << %w[--tag ~orchestrated]
|
33
40
|
gitlab.instance do
|
34
|
-
cluster.join
|
35
41
|
Component::Specs.perform do |specs|
|
36
42
|
specs.suite = 'Test::Instance::Airgapped'
|
37
43
|
specs.release = gitlab.release
|
@@ -45,9 +51,55 @@ module Gitlab
|
|
45
51
|
|
46
52
|
private
|
47
53
|
|
54
|
+
def airgap_gitlab_commands
|
55
|
+
gitlab_ip = Resolv.getaddress('gitlab.com')
|
56
|
+
gitlab_registry_ip = Resolv.getaddress(QA::Release::COM_REGISTRY)
|
57
|
+
dev_gitlab_registry_ip = Resolv.getaddress(QA::Release::DEV_REGISTRY.split(':')[0])
|
58
|
+
praefect_ip = config.praefect_ip
|
59
|
+
@commands = <<~AIRGAP_AND_VERIFY_COMMAND.split(/\n+/)
|
60
|
+
# Should not fail before airgapping due to eg. DNS failure
|
61
|
+
# Ping and wget check
|
62
|
+
apt-get update && apt-get install -y iptables ncat
|
63
|
+
if ncat -zv -w 10 #{gitlab_ip} 80; then echo 'Airgapped connectivity check passed.'; else echo 'Airgapped connectivity check failed - should be able to access gitlab_ip'; exit 1; fi;
|
64
|
+
|
65
|
+
echo "Checking regular connectivity..." \
|
66
|
+
&& wget --retry-connrefused --waitretry=1 --read-timeout=15 --timeout=10 -t 2 http://registry.gitlab.com > /dev/null 2>&1 \
|
67
|
+
&& (echo "Regular connectivity wget check passed." && exit 0) || (echo "Regular connectivity wget check failed." && exit 1)
|
68
|
+
|
69
|
+
iptables -P INPUT DROP && iptables -P OUTPUT DROP
|
70
|
+
iptables -A INPUT -i lo -j ACCEPT && iptables -A OUTPUT -o lo -j ACCEPT # LOOPBACK
|
71
|
+
iptables -I INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
|
72
|
+
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
|
73
|
+
|
74
|
+
# Jenkins on port 8080 and 50000
|
75
|
+
iptables -A OUTPUT -p tcp -m tcp --dport 8080 -m state --state NEW,ESTABLISHED -j ACCEPT \
|
76
|
+
&& iptables -A OUTPUT -p tcp -m tcp --dport 50000 -m state --state NEW,ESTABLISHED -j ACCEPT
|
77
|
+
iptables -A OUTPUT -p tcp -m tcp --sport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
|
78
|
+
iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
|
79
|
+
iptables -A OUTPUT -p tcp -m tcp --sport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
|
80
|
+
iptables -A INPUT -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
|
81
|
+
|
82
|
+
# some exceptions to allow runners access network https://gitlab.com/gitlab-org/gitlab-qa/-/issues/700
|
83
|
+
iptables -A OUTPUT -p tcp -d #{gitlab_registry_ip} -j ACCEPT
|
84
|
+
iptables -A OUTPUT -p tcp -d #{dev_gitlab_registry_ip} -j ACCEPT
|
85
|
+
# allow access to praefect node
|
86
|
+
iptables -A OUTPUT -p tcp -d #{praefect_ip} -j ACCEPT
|
87
|
+
|
88
|
+
# Should now fail to ping gitlab_ip, port 22/80 should be open
|
89
|
+
if ncat -zv -w 10 #{gitlab_ip} 80; then echo 'Airgapped connectivity check failed - should not be able to access gitlab_ip'; exit 1; else echo 'Airgapped connectivity check passed.'; fi;
|
90
|
+
if ncat -zv -w 10 127.0.0.1 22; then echo 'Airgapped connectivity port 22 check passed.'; else echo 'Airgapped connectivity port 22 check failed.'; exit 1; fi;
|
91
|
+
if ncat -zv -w 10 127.0.0.1 80; then echo 'Airgapped connectivity port 80 check passed.'; else echo 'Airgapped connectivity port 80 check failed.'; exit 1 ; fi;
|
92
|
+
if ncat -zv -w 10 #{gitlab_registry_ip} 80; then echo 'Airgapped connectivity port gitlab_registry_ip check passed.'; else echo 'Airgapped connectivity port 80 check failed.'; exit 1; fi;
|
93
|
+
|
94
|
+
echo "Checking airgapped connectivity..." \
|
95
|
+
&& wget --retry-connrefused --waitretry=1 --read-timeout=15 --timeout=10 -t 2 http://registry.gitlab.com > /dev/null 2>&1 \
|
96
|
+
&& (echo "Airgapped network faulty. Connectivity wget check failed." && exit 1) || (echo "Airgapped network confirmed. Connectivity wget check passed." && exit 0)
|
97
|
+
AIRGAP_AND_VERIFY_COMMAND
|
98
|
+
end
|
99
|
+
|
48
100
|
def gitlab_omnibus_configuration
|
49
101
|
<<~OMNIBUS
|
50
|
-
external_url 'http://#{config.gitlab_name}.#{
|
102
|
+
external_url 'http://#{config.gitlab_name}.#{iptables_restricted_network}';
|
51
103
|
|
52
104
|
git_data_dirs({
|
53
105
|
'default' => {
|
data/lib/gitlab/qa/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gitlab-qa
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 8.14.
|
4
|
+
version: 8.14.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GitLab Quality
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-12-
|
11
|
+
date: 2022-12-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: climate_control
|