Skip to content

Commit 7e439b1

Browse files
committed
(CAT-2095): Fixed puppetlabs-kubernetes modules CI & nightly failures
1. replaced CENTOS-7 with RHEL-8 2. Updated test as per new changes
1 parent e28aa87 commit 7e439b1

File tree

10 files changed

+110
-56
lines changed

10 files changed

+110
-56
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ jobs:
1616
runs-on: ubuntu-20.04
1717
strategy:
1818
fail-fast: false
19-
matrix: {'platform':['centos-7'],'collection':['puppet7-nightly', 'puppet8-nightly']}
19+
matrix: {'platform':['rhel-8'],'collection':['puppet7-nightly', 'puppet8-nightly']}
2020

2121
steps:
2222
- name: Checkout Source

.github/workflows/nightly.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ jobs:
1414
runs-on: ubuntu-20.04
1515
strategy:
1616
fail-fast: false
17-
matrix: {'platform':['centos-7'],'collection':['puppet7-nightly', 'puppet8-nightly']}
17+
matrix: {'platform':['rhel-8'],'collection':['puppet7-nightly', 'puppet8-nightly']}
1818

1919
steps:
2020
- name: Checkout Source

Gemfile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,3 +76,5 @@ extra_gemfiles.each do |gemfile|
7676
end
7777
end
7878
# vim: syntax=ruby
79+
80+
gem 'puppet-modulebuilder', '1.1.0'

manifests/config/kubeadm.pp

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
# When set to true, etcd will be downloaded from the specified source URL.
1212
# Defaults to true.
1313
# @param delegated_pki
14-
# Set to true if all required X509 certificates will be provided by external means. Setting this to true will ignore all *_crt and *_key including sa.key and sa.pub files.
14+
# Set to true if all required X509 certificates will be provided by external means.
15+
# Setting this to true will ignore all *_crt and *_key including sa.key and sa.pub files.
1516
# Defaults to false
1617
# @param etcd_install_method
1718
# The method on how to install etcd. Can be either wget (using etcd_source) or package (using $etcd_package_name)
@@ -96,7 +97,8 @@
9697
# "periodic" or "revision"
9798
# Defaults to "periodic"
9899
# @param etcd_compaction_retention
99-
# This will tell etcd how much retention to be applied. This value can change depending on `etcd_compaction_method`. An integer or time string (i.e.: "5m") can be used in case of "periodic". Only integer allowed in case of "revision"
100+
# This will tell etcd how much retention to be applied. This value can change depending on `etcd_compaction_method`.
101+
# An integer or time string (i.e.: "5m") can be used in case of "periodic". Only integer allowed in case of "revision"
100102
# Integer or String
101103
# Defaults to 0 (disabled)
102104
# @param api_server_count
@@ -157,8 +159,9 @@
157159
# A string array of extra arguments to be passed to scheduler.
158160
# Defaults to []
159161
# @param kubelet_extra_arguments
160-
# A string array to be appended to kubeletExtraArgs in the Kubelet's nodeRegistration configuration applied to both control planes and nodes.
161-
# Use this for critical Kubelet settings such as `pod-infra-container-image` which may be problematic to configure via kubelet_extra_config
162+
# A string array to be appended to kubeletExtraArgs in the Kubelet's nodeRegistration configuration applied
163+
# to both control planes and nodes. Use this for critical Kubelet settings such as `pod-infra-container-image`
164+
# which may be problematic to configure via kubelet_extra_config
162165
# Defaults to []
163166
# @param service_cidr
164167
# The IP assdress range for service VIPs
@@ -381,9 +384,9 @@
381384
}
382385

383386
# to_yaml emits a complete YAML document, so we must remove the leading '---'
384-
$kubeadm_extra_config_yaml = regsubst(to_yaml($kubeadm_extra_config), '^---\n', '')
385-
$kubelet_extra_config_yaml = regsubst(to_yaml($kubelet_extra_config), '^---\n', '')
386-
$kubelet_extra_config_alpha1_yaml = regsubst(to_yaml($kubelet_extra_config_alpha1), '^---\n', '')
387+
$kubeadm_extra_config_yaml = regsubst(stdlib::to_yaml($kubeadm_extra_config), '^---\n', '')
388+
$kubelet_extra_config_yaml = regsubst(stdlib::to_yaml($kubelet_extra_config), '^---\n', '')
389+
$kubelet_extra_config_alpha1_yaml = regsubst(stdlib::to_yaml($kubelet_extra_config_alpha1), '^---\n', '')
387390

388391
$config_version = $kubernetes_version ? {
389392
/^1\.1(0|1)/ => 'v1alpha1',

manifests/config/worker.pp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,9 @@
4848
# [{'key' => 'dedicated','value' => 'NewNode','effect' => 'NoSchedule', 'operator' => 'Equal'}]
4949
# Defaults to undef
5050
# @param kubelet_extra_arguments
51-
# A string array to be appended to kubeletExtraArgs in the Kubelet's nodeRegistration configuration applied to both control planes and nodes.
52-
# Use this for critical Kubelet settings such as `pod-infra-container-image` which may be problematic to configure via kubelet_extra_config
51+
# A string array to be appended to kubeletExtraArgs in the Kubelet's nodeRegistration configuration applied
52+
# to both control planes and nodes. Use this for critical Kubelet settings such as `pod-infra-container-image`
53+
# which may be problematic to configure via kubelet_extra_config
5354
# Defaults to []
5455
# @param kubelet_extra_config
5556
# A hash containing extra configuration data to be serialised with `to_yaml` and appended to Kubelet configuration file for the cluster.

manifests/init.pp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,8 @@
216216
# Defaults to "new"
217217
#
218218
# [*etcd_compaction_retention*]
219-
# This will tell etcd how much retention to be applied. This value can change depending on `etcd_compaction_method`. An integer or time string (i.e.: "5m") can be used in case of "periodic". Only integer allowed in case of "revision"
219+
# This will tell etcd how much retention to be applied. This value can change depending on `etcd_compaction_method`.
220+
# An integer or time string (i.e.: "5m") can be used in case of "periodic". Only integer allowed in case of "revision"
220221
# Integer or String
221222
# Defaults to 0 (disabled)
222223
#
@@ -294,7 +295,8 @@
294295
# Defaults to []
295296
#
296297
# [*delegated_pki*]
297-
# Set to true if all required X509 certificates will be provided by external means. Setting this to true will ignore all *_crt and *_key including sa.key and sa.pub files.
298+
# Set to true if all required X509 certificates will be provided by external means.
299+
# Setting this to true will ignore all *_crt and *_key including sa.key and sa.pub files.
298300
# Defaults to false
299301
#
300302
# [*kubernetes_ca_crt*]
@@ -388,8 +390,9 @@
388390
# Defaults to {}
389391
#
390392
# [*kubelet_extra_arguments*]
391-
# A string array to be appended to kubeletExtraArgs in the Kubelet's nodeRegistration configuration applied to both control planes and nodes.
392-
# Use this for critical Kubelet settings such as `pod-infra-container-image` which may be problematic to configure via kubelet_extra_config
393+
# A string array to be appended to kubeletExtraArgs in the Kubelet's nodeRegistration configuration applied
394+
# to both control planes and nodes. Use this for critical Kubelet settings such as `pod-infra-container-image`
395+
# which may be problematic to configure via kubelet_extra_config
393396
# Defaults to []
394397
#
395398
# [*proxy_mode*]

manifests/repos.pp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -64,24 +64,24 @@
6464
'Debian': {
6565
$codename = fact('os.distro.codename')
6666
apt::source { 'kubernetes':
67-
location => pick($kubernetes_apt_location,'https://apt.kubernetes.io'),
68-
repos => pick($kubernetes_apt_repos,'main'),
69-
release => pick($kubernetes_apt_release,'kubernetes-xenial'),
67+
location => pick($kubernetes_apt_location, 'https://apt.kubernetes.io'),
68+
repos => pick($kubernetes_apt_repos, 'main'),
69+
release => pick($kubernetes_apt_release, 'kubernetes-xenial'),
7070
key => {
71-
'id' => pick($kubernetes_key_id,'A362B822F6DEDC652817EA46B53DC80D13EDEF05'),
72-
'source' => pick($kubernetes_key_source,'https://packages.cloud.google.com/apt/doc/apt-key.gpg'),
71+
'id' => pick($kubernetes_key_id, 'A362B822F6DEDC652817EA46B53DC80D13EDEF05'),
72+
'source' => pick($kubernetes_key_source, 'https://packages.cloud.google.com/apt/doc/apt-key.gpg'),
7373
},
7474
}
7575

7676
if ($container_runtime == 'docker' and $manage_docker == true) or
7777
($container_runtime == 'cri_containerd' and $containerd_install_method == 'package') {
7878
apt::source { 'docker':
79-
location => pick($docker_apt_location,'https://download.docker.com/linux/ubuntu/'),
80-
repos => pick($docker_apt_repos,'stable'),
79+
location => pick($docker_apt_location, 'https://download.docker.com/linux/ubuntu/'),
80+
repos => pick($docker_apt_repos, 'stable'),
8181
release => pick($docker_apt_release,$codename),
8282
key => {
83-
'id' => pick($docker_key_id,'9DC858229FC7DD38854AE2D88D81803C0EBFCD88'),
84-
'source' => pick($docker_key_source,'https://download.docker.com/linux/ubuntu/gpg'),
83+
'id' => pick($docker_key_id, '9DC858229FC7DD38854AE2D88D81803C0EBFCD88'),
84+
'source' => pick($docker_key_source, 'https://download.docker.com/linux/ubuntu/gpg'),
8585
},
8686
}
8787
}
@@ -91,16 +91,16 @@
9191
($container_runtime == 'cri_containerd' and $containerd_install_method == 'package') {
9292
yumrepo { 'docker':
9393
descr => 'docker',
94-
baseurl => pick($docker_yum_baseurl,'https://download.docker.com/linux/centos/7/x86_64/stable'),
95-
gpgkey => pick($docker_yum_gpgkey,'https://download.docker.com/linux/centos/gpg'),
94+
baseurl => pick($docker_yum_baseurl, 'https://download.docker.com/linux/centos/7/x86_64/stable'),
95+
gpgkey => pick($docker_yum_gpgkey, 'https://download.docker.com/linux/centos/gpg'),
9696
gpgcheck => true,
9797
}
9898
}
9999

100100
yumrepo { 'kubernetes':
101101
descr => 'Kubernetes',
102-
baseurl => pick($kubernetes_yum_baseurl,'https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64'),
103-
gpgkey => pick($kubernetes_yum_gpgkey,'https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg'),
102+
baseurl => pick($kubernetes_yum_baseurl, 'https://pkgs.k8s.io/core:/stable:/v1.28/rpm/'),
103+
gpgkey => pick($kubernetes_yum_gpgkey, 'https://pkgs.k8s.io/core:/stable:/v1.28/rpm/repodata/repomd.xml.key'),
104104
gpgcheck => true,
105105
}
106106
}

spec/acceptance/integration_kubernetes_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
it 'verify the k8 nodes' do
5656
run_shell('sleep 20')
5757
run_shell('KUBECONFIG=/etc/kubernetes/admin.conf kubectl get nodes') do |r|
58-
expect(r.stdout).to match(%r{#{hostname1}(\s)+Ready(\s)+control-plane,master})
58+
expect(r.stdout).to match(%r{#{hostname1}(\s)+Ready(\s)+control-plane})
5959
expect(r.stdout).to match(%r{#{hostname2}(\s)+Ready})
6060
expect(r.stdout).to match(%r{#{hostname3}(\s)+Ready})
6161
end

spec/acceptance/kubernetes_spec.rb

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@
1414

1515
pp = <<-MANIFEST
1616
case $facts['os']['family'] {
17-
'RedHat', 'CentOS': {
17+
/^(RedHat|CentOS)$/: {
1818
class {'kubernetes':
19-
kubernetes_version => '1.22.0',
20-
kubernetes_package_version => '1.22.0',
19+
kubernetes_version => '1.28.15',
20+
kubernetes_package_version => '1.28.15',
2121
controller_address => "#{int_ipaddr1}:6443",
2222
container_runtime => 'docker',
2323
manage_docker => false,
@@ -26,6 +26,7 @@ class {'kubernetes':
2626
environment => ['HOME=/root', 'KUBECONFIG=/etc/kubernetes/admin.conf'],
2727
ignore_preflight_errors => ['NumCPU','ExternalEtcdVersion'],
2828
cgroup_driver => 'systemd',
29+
service_cidr => '10.138.0.0/12',
2930
}
3031
}
3132
/^(Debian|Ubuntu)$/: {
@@ -59,6 +60,8 @@ class {'kubernetes': } # any other OS are not supported
5960
before(:all) { change_target_host('controller') }
6061
after(:all) { reset_target_host }
6162

63+
int_ipaddr1 = fetch_ip_hostname_by_role('controller')[2]
64+
6265
it 'can deploy an application into a namespace and expose it' do
6366
run_shell('KUBECONFIG=/etc/kubernetes/admin.conf kubectl create -f /tmp/nginx.yml') do |r|
6467
expect(r.stdout).to match(%r{my-nginx created\nservice/my-nginx created\n})
@@ -67,7 +70,8 @@ class {'kubernetes': } # any other OS are not supported
6770

6871
it 'can access the deployed service' do
6972
run_shell('sleep 60')
70-
run_shell('curl --retry 10 --retry-delay 15 -s 10.96.188.5') do |r|
73+
shell_command = "curl --retry 10 --retry-delay 15 -s #{int_ipaddr1}"
74+
run_shell(shell_command) do |r|
7175
expect(r.stdout).to match(%r{Welcome to nginx!})
7276
end
7377
end

spec/spec_helper_acceptance_local.rb

Lines changed: 64 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,11 @@ def fetch_ip_hostname_by_role(role)
4040
platform = fetch_platform_by_node(ipaddr)
4141
ENV['TARGET_HOST'] = target_roles(role)[0][:name]
4242
hostname = run_shell('hostname').stdout.strip
43-
int_ipaddr = if os[:family] == 'redhat'
44-
run_shell("ip route get 8.8.8.8 | awk '{print $7; exit}'").stdout.strip
43+
os_family = run_shell("facter -y os.family | cut -d':' -f2 | tr -d ' '").stdout.strip
44+
int_ipaddr = if os_family.downcase == 'redhat'
45+
run_shell("ip route get 8.8.8.8 | awk '{print $7; exit}'").stdout.strip
4546
else
46-
run_shell("ip route get 8.8.8.8 | awk '{print $NF; exit}'").stdout.strip
47+
run_shell("ip route get 8.8.8.8 | awk '{print $NF; exit}'").stdout.strip
4748
end
4849
[hostname, ipaddr, int_ipaddr]
4950
end
@@ -72,8 +73,8 @@ def configure_puppet_server(controller, worker1, worker2)
7273
site_pp = <<-EOS
7374
node /#{controller[0]}/ {
7475
class {'kubernetes':
75-
kubernetes_version => '1.20.6',
76-
kubernetes_package_version => '1.20.6',
76+
kubernetes_version => '1.28.15',
77+
kubernetes_package_version => '1.28.15',
7778
controller_address => "#{controller[1]}:6443",
7879
container_runtime => 'docker',
7980
manage_docker => false,
@@ -82,6 +83,7 @@ class {'kubernetes':
8283
environment => ['HOME=/root', 'KUBECONFIG=/etc/kubernetes/admin.conf'],
8384
ignore_preflight_errors => ['NumCPU','ExternalEtcdVersion'],
8485
cgroup_driver => 'systemd',
86+
service_cidr => '10.138.0.0/12',
8587
}
8688
}
8789
node /#{worker1}/ {
@@ -128,6 +130,27 @@ def execute_agent(role)
128130
run_shell('puppet agent --test', expect_failures: true)
129131
end
130132

133+
def reset_and_restart_containerd
134+
['controller', 'worker1', 'worker2'].each do |node|
135+
ENV['TARGET_HOST'] = target_roles(node)[0][:name]
136+
run_shell('rm -f /etc/containerd/config.toml')
137+
run_shell('systemctl restart containerd')
138+
end
139+
end
140+
141+
def open_communication_ports
142+
['controller', 'worker1', 'worker2'].each do |node|
143+
ENV['TARGET_HOST'] = target_roles(node)[0][:name]
144+
if node == 'controller'
145+
run_shell('iptables -I INPUT -p tcp -m multiport --dports 2379,2380,6443,10250,10251,10252,30000:32767 -j ACCEPT')
146+
else
147+
run_shell('iptables -I INPUT -p tcp -m multiport --dports 10251,10252,10255,30000:32767 -j ACCEPT')
148+
end
149+
run_shell('iptables -I INPUT -p udp -m multiport --dports 8472 -j ACCEPT')
150+
run_shell('iptables-save > /etc/sysconfig/iptables')
151+
end
152+
end
153+
131154
RSpec.configure do |c|
132155
c.before :suite do
133156
# Fetch hostname and ip adress for each node
@@ -189,7 +212,7 @@ def execute_agent(role)
189212
labels:
190213
run: my-nginx
191214
spec:
192-
clusterIP: 10.96.188.5
215+
clusterIP: #{int_ipaddr1}
193216
ports:
194217
- port: 80
195218
protocol: TCP
@@ -216,24 +239,26 @@ def execute_agent(role)
216239
- "Redhat.yaml"
217240
- "common.yaml"
218241
EOS
242+
219243
k8repo = <<~EOS
220244
[kubernetes]
221245
name=Kubernetes
222-
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
246+
baseurl=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/
223247
enabled=1
224-
gpgcheck=0
225-
repo_gpgcheck=0
226-
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
248+
gpgcheck=1
249+
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/repodata/repomd.xml.key
227250
EOS
251+
228252
pp = <<-PUPPETCODE
229-
# needed by tests
230-
package { 'curl':
231-
ensure => 'latest',
232-
}
233-
package { 'git':
234-
ensure => 'latest',
235-
}
253+
# needed by tests
254+
package { 'curl':
255+
ensure => 'latest',
256+
}
257+
package { 'git':
258+
ensure => 'latest',
259+
}
236260
PUPPETCODE
261+
237262
apply_manifest(pp)
238263
if %r{debian|ubuntu-1604-lts}.match?(family)
239264
runtime = 'cri_containerd'
@@ -255,7 +280,7 @@ def execute_agent(role)
255280
run_shell('/sbin/iptables -F')
256281
end
257282
end
258-
if %r{redhat|centos}.match?(family)
283+
if %r{rhel|redhat|centos}.match?(family)
259284
runtime = 'docker'
260285
cni = 'weave'
261286
['controller', 'worker1', 'worker2'].each do |node|
@@ -265,9 +290,9 @@ def execute_agent(role)
265290
run_shell('systemctl stop firewalld && systemctl disable firewalld')
266291
run_shell('yum install -y yum-utils device-mapper-persistent-data lvm2')
267292
run_shell('yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo')
268-
run_shell('yum update -y')
269-
run_shell('yum install -y docker-ce-cli-18.09.0-3.el7.x86_64')
270-
run_shell('yum install -y docker-ce-18.09.5-3.el7.x86_64')
293+
run_shell('yum update -y --nobest')
294+
run_shell('yum install -y docker-ce-cli')
295+
run_shell('yum install -y docker-ce')
271296
run_shell('usermod -aG docker $(whoami)')
272297
run_shell('systemctl start docker.service')
273298
run_shell('systemctl enable docker.service')
@@ -278,7 +303,20 @@ def execute_agent(role)
278303

279304
ENV['TARGET_HOST'] = target_roles('controller')[0][:name]
280305
run_shell('docker build -t kubetool:latest /etc/puppetlabs/code/environments/production/modules/kubernetes/tooling')
281-
run_shell("docker run --rm -v $(pwd)/hieradata:/mnt -e OS=#{family} -e VERSION=1.20.6 -e CONTAINER_RUNTIME=#{runtime} -e CNI_PROVIDER=#{cni} -e ETCD_INITIAL_CLUSTER=#{hostname1}:#{int_ipaddr1} -e ETCD_IP=#{int_ipaddr1} -e ETCD_PEERS=[#{int_ipaddr1},#{int_ipaddr2},#{int_ipaddr3}] -e KUBE_API_ADVERTISE_ADDRESS=#{int_ipaddr1} -e INSTALL_DASHBOARD=true kubetool:latest") # rubocop:disable Layout/LineLength
306+
307+
docker_run = <<~DOCKER
308+
docker run --rm -v $(pwd)/hieradata:/mnt -e OS=#{family} \
309+
-e VERSION=1.28.15 \
310+
-e CONTAINER_RUNTIME=#{runtime} \
311+
-e CNI_PROVIDER=#{cni} \
312+
-e ETCD_INITIAL_CLUSTER=#{hostname1}:#{int_ipaddr1} \
313+
-e ETCD_IP=#{int_ipaddr1} \
314+
-e ETCD_PEERS=[#{int_ipaddr1},#{int_ipaddr2},#{int_ipaddr3}] \
315+
-e KUBE_API_ADVERTISE_ADDRESS=#{int_ipaddr1} \
316+
-e INSTALL_DASHBOARD=true kubetool:latest
317+
DOCKER
318+
319+
run_shell(docker_run)
282320
create_remote_file('nginx', '/tmp/nginx.yml', nginx)
283321
create_remote_file('hiera', '/etc/puppetlabs/puppet/hiera.yaml', hiera)
284322
run_shell('chmod 644 /etc/puppetlabs/puppet/hiera.yaml')
@@ -288,7 +326,6 @@ def execute_agent(role)
288326
run_shell('cp $HOME/hieradata/*.yaml /etc/puppetlabs/code/environments/production/hieradata/')
289327

290328
run_shell("sed -i /cni_network_provider/d /etc/puppetlabs/code/environments/production/hieradata/#{family.capitalize}.yaml")
291-
292329
if %r{debian|ubuntu-1604-lts}.match?(family)
293330
run_shell("echo 'kubernetes::cni_network_provider: https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s-1.11.yaml' >> /etc/puppetlabs/code/environments/production/hieradata/#{family.capitalize}.yaml") # rubocop:disable Layout/LineLength
294331
end
@@ -300,10 +337,14 @@ def execute_agent(role)
300337
run_shell("echo 'kubernetes::schedule_on_controller: true' >> /etc/puppetlabs/code/environments/production/hieradata/#{family.capitalize}.yaml")
301338
run_shell("echo 'kubernetes::taint_master: false' >> /etc/puppetlabs/code/environments/production/hieradata/#{family.capitalize}.yaml")
302339
run_shell("echo 'kubernetes::manage_docker: false' >> /etc/puppetlabs/code/environments/production/hieradata/#{family.capitalize}.yaml")
340+
303341
run_shell("export KUBECONFIG='/etc/kubernetes/admin.conf'")
342+
reset_and_restart_containerd
343+
open_communication_ports
304344
execute_agent('controller')
305345
execute_agent('worker1')
306346
execute_agent('worker2')
307347
puppet_cert_sign
348+
run_shell('KUBECONFIG=/etc/kubernetes/admin.conf kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml')
308349
end
309350
end

0 commit comments

Comments
 (0)