Skip to content

Commit fa7baa8

Browse files
authored
Merge pull request #382 from jsturtevant/windows-vhd-azure
Windows image configuration scripts and Azure builder
2 parents 0755a07 + 9fd8bf6 commit fa7baa8

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+1253
-7
lines changed

docs/book/src/capi/capi.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ The `images/capi/packer/config` directory includes several JSON files that defin
3838
| `packer/config/containerd.json` | The version of containerd to install and customizations specific to the containerd runtime |
3939
| `packer/config/kubernetes.json` | The version of Kubernetes to install |
4040

41+
Due to OS differences, Windows images has additional configuration in the `packer/config/windows` folder. See [Windows documentation](windows/windows.md) for more details.
42+
4143
### Customization
4244

4345
Several variables can be used to customize the image build.

docs/book/src/capi/providers/azure.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# Building Images for Azure
22

3+
These images are designed for use with [Cluster API Provider Azure]([Cluster API Provider Azure](https://capz.sigs.k8s.io/introduction.html#what-is-the-cluster-api-provider-azure)) (CAPZ). Learn more on using [custom images with CAPZ](https://capz.sigs.k8s.io/topics/custom-images.html).
4+
35
## Prerequisites for Azure
46

57
- An Azure account
@@ -22,3 +24,21 @@ From the `images/capi` directory, run `make build-azure-sig-ubuntu-1804`
2224
### Building VHDs
2325

2426
From the `images/capi` directory, run `make build-azure-vhd-ubuntu-1804`
27+
28+
> If building the windows images from a Mac there is a known issue with connectivity. Please see details on running [MacOS with ansible](../windows/windows.md#macos-with-ansible).
29+
30+
## Developer
31+
32+
If you are adding features to image builder than it is sometimes useful to work with the images directly. This section gives some tips.
33+
34+
### Provision a VM directly from a VHD
35+
36+
After creating a VHD, create a managed image using the url output from `make build-azure-vhd-<image>` and use it to [create the VM](https://docs.microsoft.com/en-us/azure/virtual-machines/windows/build-image-with-packer#create-a-vm-from-the-packer-image):
37+
38+
```bash
39+
az image create -n testvmimage -g cluster-api-images --os-type <Windows/Linux> --source <storage url for vhd file>
40+
az vm create -n testvm --image testvmimage -g cluster-api-images
41+
```
42+
43+
### Debugging packer scripts
44+
There are several ways to debug packer scripts: https://www.packer.io/docs/other/debugging.html
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# Windows
2+
3+
## Configuration
4+
5+
The `images/capi/packer/config/windows` directory includes several JSON files that define the default configuration for the Windows images:
6+
7+
| File | Description |
8+
|------|-------------|
9+
| `packer/config/windows/ansible-args.json` | A common set of variables that are sent to the Ansible playbook |
10+
| `packer/config/windows/cloudbase-init.json` | The version of [Cloudbase Init](https://github.com/cloudbase/cloudbase-init) to install |
11+
| `packer/config/windows/common.json` | Settings for things like which runtime (Docker or Containerd), pause image and other configuration |
12+
| `packer/config/windows/kubernetes.json` | The version of Kubernetes to install and it's install path |
13+
| `packer/config/windows/containerd.json` | The version of containerd to install |
14+
15+
## Using the Ansible Scripts directly
16+
17+
Ansible doesn't run on directly on Windows (wsl works) but can used to configure a remote Windows host. For faster development you can create a VM and run Ansible against the Windows VM directly with out using packer. This document gives the high level steps to use Ansible from Linux machine.
18+
19+
## Set up Windows machine
20+
Follow the documentation for configuring WinRm on the Windows machine: https://docs.ansible.com/ansible/latest/user_guide/windows_setup.html#winrm-setup. Note the [ConfigureRemotingForAnsible.ps1](https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1) is for development only. Refer to [Ansible WinRM documentation](https://docs.ansible.com/ansible/latest/user_guide/windows_winrm.html) for details for advance configuration.
21+
22+
After WinRM is installed you can edit or `/etc/ansible/hosts` file with the following:
23+
24+
```
25+
[winhost]
26+
<windows ip>
27+
28+
[winhost:vars]
29+
ansible_user=username
30+
ansible_password=<your password>
31+
ansible_connection=winrm
32+
ansible_winrm_server_cert_validation=ignore
33+
```
34+
35+
Then run: `ansible-playbook -vvv node_windows.yml --extra-vars "@example.vars.yml`
36+
37+
## MacOS with ansible
38+
The Winrm connection plugin for Ansible on MacOS causes connection issues which can result in `ERROR! A worker was found in a dead state`. See https://docs.ansible.com/ansible/latest/user_guide/windows_winrm.html#what-is-winrm for more details.
39+
40+
To fix the issue on MacOS is to set the no_proxy environment variable. Example:
41+
42+
```
43+
'no_proxy=* make build-azure-vhd-windows-2019'
44+
```

images/capi/Makefile

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ deps-ami:
5757
deps-azure: ## Installs/checks dependencies for Azure builds
5858
deps-azure:
5959
hack/ensure-ansible.sh
60+
hack/ensure-ansible-windows.sh
6061
hack/ensure-packer.sh
6162
hack/ensure-jq.sh
6263
hack/ensure-azure-cli.sh
@@ -144,6 +145,14 @@ COMMON_HAPROXY_VAR_FILES := packer/ova/packer-common.json \
144145
packer/config/ansible-args.json \
145146
packer/config/common.json
146147

148+
COMMON_WINDOWS_VAR_FILES := packer/config/kubernetes.json \
149+
packer/config/windows/kubernetes.json \
150+
packer/config/windows/containerd.json \
151+
packer/config/windows/docker.json \
152+
packer/config/windows/ansible-args-windows.json \
153+
packer/config/windows/common.json \
154+
packer/config/windows/cloudbase-init.json
155+
147156
# Initialize a list of flags to pass to Packer. This includes any existing flags
148157
# specified by PACKER_FLAGS, as well as prefixing the list with the variable
149158
# files from COMMON_VAR_FILES, with each file prefixed by -var-file=.
@@ -154,6 +163,8 @@ PACKER_NODE_FLAGS := $(foreach f,$(abspath $(COMMON_NODE_VAR_FILES)),-var-file="
154163
PACKER_HAPROXY_FLAGS := $(foreach f,$(abspath $(COMMON_HAPROXY_VAR_FILES)),-var-file="$(f)" ) \
155164
$(PACKER_FLAGS)
156165
ABSOLUTE_PACKER_VAR_FILES := $(foreach f,$(abspath $(PACKER_VAR_FILES)),-var-file="$(f)" )
166+
PACKER_WINDOWS_NODE_FLAGS := $(foreach f,$(abspath $(COMMON_WINDOWS_VAR_FILES)),-var-file="$(f)" ) \
167+
$(PACKER_FLAGS)
157168

158169
## --------------------------------------
159170
## Platform and version combinations
@@ -181,8 +192,8 @@ HAPROXY_OVA_VSPHERE_BUILD_NAMES := $(addprefix haproxy-ova-vsphere-,$(PHOTON_VE
181192

182193
AMI_BUILD_NAMES ?= ami-centos-7 ami-ubuntu-1804 ami-ubuntu-2004 ami-amazon-2
183194
GCE_BUILD_NAMES ?= gce-ubuntu-1804 ## gce-ubuntu-2004
184-
AZURE_BUILD_VHD_NAMES ?= azure-vhd-ubuntu-1804 azure-vhd-centos-7 ## azure-vhd-ubuntu-2004
185-
AZURE_BUILD_SIG_NAMES ?= azure-sig-ubuntu-1804 azure-sig-centos-7 ## azure-sig-ubuntu-2004
195+
AZURE_BUILD_VHD_NAMES ?= azure-vhd-ubuntu-1804 azure-vhd-centos-7 azure-vhd-windows-2019 azure-vhd-windows-2004 ## azure-vhd-ubuntu-2004
196+
AZURE_BUILD_SIG_NAMES ?= azure-sig-ubuntu-1804 azure-sig-centos-7 azure-sig-windows-2019 azure-sig-windows-2004 ## azure-sig-ubuntu-2004
186197

187198
DO_BUILD_NAMES ?= do-centos-7 do-ubuntu-1804 do-ubuntu-2004
188199

@@ -282,19 +293,19 @@ $(GCE_VALIDATE_TARGETS): deps-gce
282293

283294
.PHONY: $(AZURE_BUILD_VHD_TARGETS)
284295
$(AZURE_BUILD_VHD_TARGETS): deps-azure
285-
. $(abspath packer/azure/scripts/init-vhd.sh) && packer build $(PACKER_NODE_FLAGS) -var-file="$(abspath packer/azure/azure-config.json)" -var-file="$(abspath packer/azure/azure-vhd.json)" -var-file="$(abspath packer/azure/$(subst build-azure-vhd-,,$@).json)" -only="$(subst build-azure-,,$@)" $(ABSOLUTE_PACKER_VAR_FILES) packer/azure/packer.json
296+
. $(abspath packer/azure/scripts/init-vhd.sh) && packer build $(if $(findstring windows,$@),$(PACKER_WINDOWS_NODE_FLAGS),$(PACKER_NODE_FLAGS)) -var-file="$(abspath packer/azure/azure-config.json)" -var-file="$(abspath packer/azure/azure-vhd.json)" -var-file="$(abspath packer/azure/$(subst build-azure-vhd-,,$@).json)" -only="$(subst build-azure-,,$@)" $(ABSOLUTE_PACKER_VAR_FILES) packer/azure/packer$(findstring -windows,$@).json
286297

287298
.PHONY: $(AZURE_VALIDATE_VHD_TARGETS)
288299
$(AZURE_VALIDATE_VHD_TARGETS): deps-azure
289-
packer validate $(PACKER_NODE_FLAGS) -var-file="$(abspath packer/azure/azure-config.json)" -var-file="$(abspath packer/azure/azure-vhd.json)" -var-file="$(abspath packer/azure/$(subst validate-azure-vhd-,,$@).json)" -only="$(subst validate-azure-,,$@)" $(ABSOLUTE_PACKER_VAR_FILES) packer/azure/packer.json
300+
packer validate $(if $(findstring windows,$@),$(PACKER_WINDOWS_NODE_FLAGS),$(PACKER_NODE_FLAGS)) -var-file="$(abspath packer/azure/azure-config.json)" -var-file="$(abspath packer/azure/azure-vhd.json)" -var-file="$(abspath packer/azure/$(subst validate-azure-vhd-,,$@).json)" -only="$(subst validate-azure-,,$@)" $(ABSOLUTE_PACKER_VAR_FILES) packer/azure/packer$(findstring -windows,$@).json
290301

291302
.PHONY: $(AZURE_BUILD_SIG_TARGETS)
292303
$(AZURE_BUILD_SIG_TARGETS): deps-azure
293-
. $(abspath packer/azure/scripts/init-sig.sh) && packer build $(PACKER_NODE_FLAGS) -var-file="$(abspath packer/azure/azure-config.json)" -var-file="$(abspath packer/azure/azure-sig.json)" -var-file="$(abspath packer/azure/$(subst build-azure-sig-,,$@).json)" -only="$(subst build-azure-,,$@)" $(ABSOLUTE_PACKER_VAR_FILES) packer/azure/packer.json
304+
. $(abspath packer/azure/scripts/init-sig.sh) && packer build $(if $(findstring windows,$@),$(PACKER_WINDOWS_NODE_FLAGS),$(PACKER_NODE_FLAGS)) -var-file="$(abspath packer/azure/azure-config.json)" -var-file="$(abspath packer/azure/azure-sig.json)" -var-file="$(abspath packer/azure/$(subst build-azure-sig-,,$@).json)" -only="$(subst build-azure-,,$@)" $(ABSOLUTE_PACKER_VAR_FILES) packer/azure/packer$(findstring -windows,$@).json
294305

295306
.PHONY: $(AZURE_VALIDATE_SIG_TARGETS)
296307
$(AZURE_VALIDATE_SIG_TARGETS): deps-azure
297-
packer validate $(PACKER_NODE_FLAGS) -var-file="$(abspath packer/azure/azure-config.json)" -var-file="$(abspath packer/azure/azure-sig.json)" -var-file="$(abspath packer/azure/$(subst validate-azure-sig-,,$@).json)" -only="$(subst validate-azure-,,$@)" $(ABSOLUTE_PACKER_VAR_FILES) packer/azure/packer.json
308+
packer validate $(if $(findstring windows,$@),$(PACKER_WINDOWS_NODE_FLAGS),$(PACKER_NODE_FLAGS)) -var-file="$(abspath packer/azure/azure-config.json)" -var-file="$(abspath packer/azure/azure-sig.json)" -var-file="$(abspath packer/azure/$(subst validate-azure-sig-,,$@).json)" -only="$(subst validate-azure-,,$@)" $(ABSOLUTE_PACKER_VAR_FILES) packer/azure/packer$(findstring windows,$@).json
298309

299310
.PHONY: $(DO_BUILD_TARGETS)
300311
$(DO_BUILD_TARGETS): deps-do
@@ -342,13 +353,18 @@ build-ami-all: $(AMI_BUILD_TARGETS) ## Builds all AMIs
342353

343354
build-azure-sig-ubuntu-1804: ## Builds Ubuntu 18.04 Azure managed image in Shared Image Gallery
344355
build-azure-sig-ubuntu-2004: ## Builds Ubuntu 20.04 Azure managed image in Shared Image Gallery
356+
build-azure-sig-centos-7: ## Builds CentOS 7 Azure managed image in Shared Image Gallery
357+
build-azure-sig-windows-2019: ## Builds Windows Server 2019 Azure managed image in Shared Image Gallery
358+
build-azure-sig-windows-2004: ## Builds Windows Server 2004 SAC Azure managed image in Shared Image Gallery
345359
build-azure-vhd-ubuntu-1804: ## Builds Ubuntu 18.04 VHD image for Azure
346360
build-azure-vhd-ubuntu-2004: ## Builds Ubuntu 20.04 VHD image for Azure
347-
build-azure-sig-centos-7: ## Builds CentOS 7 Azure managed image in Shared Image Gallery
348361
build-azure-vhd-centos-7: ## Builds CentOS 7 VHD image for Azure
362+
build-azure-vhd-windows-2019: ## Builds for Windows Server 2019
363+
build-azure-vhd-windows-2004: ## Builds for Windows Server 2004 SAC
349364
build-azure-vhds: $(AZURE_BUILD_VHD_TARGETS) ## Builds all Azure VHDs
350365
build-azure-sigs: $(AZURE_BUILD_SIG_TARGETS) ## Builds all Azure Shared Image Gallery images
351366

367+
352368
build-do-ubuntu-1804: ## Builds Ubuntu 18.04 DigitalOcean Snapshot
353369
build-do-ubuntu-2004: ## Builds Ubuntu 20.04 DigitalOcean Snapshot
354370
build-do-centos-7: ## Builds Centos 7 DigitalOcean Snapshot
@@ -426,9 +442,13 @@ validate-ami-all: $(AMI_VALIDATE_TARGETS) ## Validates all AMIs Packer config
426442
validate-azure-sig-centos-7: ## Validates CentOS 7 Azure managed image in Shared Image Gallery Packer config
427443
validate-azure-sig-ubuntu-1804: ## Validates Ubuntu 18.04 Azure managed image in Shared Image Gallery Packer config
428444
validate-azure-sig-ubuntu-2004: ## Validates Ubuntu 20.04 Azure managed image in Shared Image Gallery Packer config
445+
validate-azure-sig-windows-2019: ## Validate Windows Server 2019 Azure managed image in Shared Image Gallery Packer config
446+
validate-azure-sig-windows-2004: ## Validate Windows Server 2004 SAC Azure managed image in Shared Image Gallery Packer config
429447
validate-azure-vhd-centos-7: ## Validates CentOS 7 VHD image Azure Packer config
430448
validate-azure-vhd-ubuntu-1804: ## Validates Ubuntu 18.04 VHD image Azure Packer config
431449
validate-azure-vhd-ubuntu-2004: ## Validates Ubuntu 20.04 VHD image Azure Packer config
450+
validate-azure-vhd-windows-2019: ## Validate Windows Server 2019 VHD image Azure Packer config
451+
validate-azure-vhd-windows-2004: ## Validate Windows Server 2004 SAC VHD image Azure Packer config
432452
validate-azure-all: $(AZURE_VALIDATE_SIG_TARGETS) $(AZURE_VALIDATE_VHD_TARGETS) ## Validates all VHD images Azure Packer config
433453

434454
validate-do-ubuntu-1804: ## Valdiates Ubuntu 18.04 DigitalOcean Snapshot Packer config
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# Copyright 2020 The Kubernetes Authors.
2+
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
# This file is from packer documentation:
16+
# https://www.packer.io/docs/provisioners/ansible.html#winrm-communicator
17+
# https://www.packer.io/docs/builders/amazon/ebs#connecting-to-windows-instances-using-winrm
18+
19+
Set-ExecutionPolicy Unrestricted -Scope LocalMachine -Force -ErrorAction Ignore
20+
21+
# Don't set this before Set-ExecutionPolicy as it throws an error
22+
$ErrorActionPreference = "stop"
23+
24+
# Remove HTTP listener
25+
Remove-Item -Path WSMan:\Localhost\listener\listener* -Recurse
26+
27+
# Create a self-signed certificate to let ssl work
28+
$Cert = New-SelfSignedCertificate -CertstoreLocation Cert:\LocalMachine\My -DnsName "packer"
29+
New-Item -Path WSMan:\LocalHost\Listener -Transport HTTPS -Address * -CertificateThumbPrint $Cert.Thumbprint -Force
30+
31+
# WinRM
32+
write-output "Setting up WinRM"
33+
write-host "(host) setting up WinRM"
34+
35+
cmd.exe /c winrm quickconfig -q
36+
cmd.exe /c winrm set "winrm/config" '@{MaxTimeoutms="1800000"}'
37+
cmd.exe /c winrm set "winrm/config/winrs" '@{MaxMemoryPerShellMB="1024"}'
38+
cmd.exe /c winrm set "winrm/config/service" '@{AllowUnencrypted="true"}'
39+
cmd.exe /c winrm set "winrm/config/client" '@{AllowUnencrypted="true"}'
40+
cmd.exe /c winrm set "winrm/config/service/auth" '@{Basic="true"}'
41+
cmd.exe /c winrm set "winrm/config/client/auth" '@{Basic="true"}'
42+
cmd.exe /c winrm set "winrm/config/service/auth" '@{CredSSP="true"}'
43+
cmd.exe /c winrm set "winrm/config/listener?Address=*+Transport=HTTPS" "@{Port=`"5986`";Hostname=`"packer`";CertificateThumbprint=`"$($Cert.Thumbprint)`"}"
44+
cmd.exe /c netsh advfirewall firewall set rule group="remote administration" new enable=yes
45+
cmd.exe /c netsh firewall add portopening TCP 5986 "Port 5986"
46+
cmd.exe /c net stop winrm
47+
cmd.exe /c sc config winrm start= auto
48+
cmd.exe /c net start winrm
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# Copyright 2020 The Kubernetes Authors.
2+
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
---
15+
kubernetes_base_url: https://storage.googleapis.com/kubernetes-release/release/v1.19.2/bin/windows/amd64
16+
cloudbase_init_url: https://github.com/cloudbase/cloudbase-init/releases/download/1.1.2/CloudbaseInitSetup_1_1_2_x64.msi
17+
wins_url: https://github.com/rancher/wins/releases/download/v0.0.4/wins.exe
18+
nssm_url: https://azurek8scishared.blob.core.windows.net/nssm/nssm.exe
19+
20+
runtime: docker_ee
21+
docker_ee_version: "19.03.12"
22+
kubernetes_install_path: 'c:\k'
23+
windows_service_manager: 'nssm'
24+
pause_image: mcr.microsoft.com/oss/kubernetes/pause:1.4.0
25+
additional_prepull_images: "docker.io/sigwindowstools/flannel:0.12.0, docker.io/sigwindowstools/kube-proxy:v1.19.2"
26+
prepull: false
27+
distribution_version: 2019
28+
29+
cloudbase_metadata_services: "cloudbaseinit.metadata.services.azureservice.AzureService, cloudbaseinit.metadata.services.ovfservice.OvfService"
30+
cloudbase_plugins: "cloudbaseinit.plugins.common.ephemeraldisk.EphemeralDiskPlugin, cloudbaseinit.plugins.common.userdata.UserDataPlugin, cloudbaseinit.plugins.common.localscripts.LocalScriptsPlugin"
31+
cloudbase_metadata_services_unattend: "cloudbaseinit.metadata.services.azureservice.AzureService, cloudbaseinit.metadata.services.ovfservice.OvfService"
32+
cloudbase_plugins_unattend: "cloudbaseinit.plugins.common.mtu.MTUPlugin"
33+
34+
debug_tools: true
35+
additional_debug_files: "https://raw.githubusercontent.com/kubernetes-sigs/sig-windows-tools/master/hack/DebugWindowsNode.ps1"
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# Copyright 2020 The Kubernetes Authors.
2+
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
---
16+
- hosts: all
17+
18+
tasks:
19+
- name: Check if cloudbase-init url is set
20+
set_fact:
21+
install_cloudbase_init: '{{ true if (cloudbase_init_url is defined) and (cloudbase_init_url|length > 0) else false }}'
22+
- name: Check if wins url is set
23+
set_fact:
24+
use_wins: '{{ true if (wins_url is defined) and (wins_url|length > 0) else false }}'
25+
26+
- include_role:
27+
name: systemprep
28+
- include_role:
29+
name: cloudbase-init
30+
when: install_cloudbase_init
31+
- include_role:
32+
name: runtimes
33+
- include_role:
34+
name: kubernetes
35+
- include_role:
36+
name: debug
37+
- include_role:
38+
name: "{{ role }}"
39+
loop: "{{ custom_role_names.split() }}"
40+
loop_control:
41+
loop_var: role
42+
when: custom_role | default(false)|bool
43+
44+
environment:
45+
HTTP_PROXY: "{{ http_proxy | default('') }}"
46+
HTTPS_PROXY: "{{ https_proxy | default('') }}"
47+
NO_PROXY: "{{ no_proxy | default('') }}"

0 commit comments

Comments
 (0)