Skip to content

Commit 29502bc

Browse files
jpayne3506Sheyla Trudo
andauthored
fix: Pipeline agent image update from 18.04 to 22.04 | AzSecPack (#2327)
* Use ResolveCtl for Ubuntu22.04 * test: debug * test: XDG dir * ci: Remove sudo for testvalidate * ci: remove sudo dualstack * ci: remove test scripts * fix: lint --------- Co-authored-by: Sheyla Trudo <[email protected]>
1 parent c47e538 commit 29502bc

File tree

5 files changed

+102
-23
lines changed

5 files changed

+102
-23
lines changed

.pipelines/containers/manifest-template.yaml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,16 @@ steps:
1919
retryCountOnTaskFailure: 3
2020
2121
- script: |
22-
set -e
22+
set -ex
23+
echo "checking XDG_RUNTIME_DIR"
24+
echo $XDG_RUNTIME_DIR
2325
make ${{ parameters.name }}-manifest-push
2426
mkdir -p $(Build.ArtifactStagingDirectory)/images
27+
28+
echo "setting XDG_RUNTIME_DIR"
29+
export XDG_RUNTIME_DIR=/run/user/$(id -u)
30+
echo $XDG_RUNTIME_DIR
31+
2532
make ${{ parameters.name }}-skopeo-archive IMAGE_ARCHIVE_DIR=$(Build.ArtifactStagingDirectory)/images
2633
name: manifest_push
2734
displayName: Manifest Push

.pipelines/singletenancy/azure-cni-overlay/azure-cni-overlay-e2e-step-template.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ steps:
9999
make -C ./hack/aks azcfg AZCLI=az REGION=$(REGION_AKS_CLUSTER_TEST)
100100
kubectl get pods -owide -A
101101
echo "Validating Node Restart"
102-
sudo CNI_TYPE=cniv2 RESTART_CASE=true go test -timeout 30m -tags load -run ^TestValidateState$
102+
CNI_TYPE=cniv2 RESTART_CASE=true go test -timeout 30m -tags load -run ^TestValidateState$
103103
displayName: "Validate Node Restart"
104104
retryCountOnTaskFailure: 3
105105

@@ -108,12 +108,12 @@ steps:
108108
kubectl get pod -owide -A
109109
echo "validate pod state before CNS restarts"
110110
cd test/integration/load
111-
sudo CNI_TYPE=cniv2 go test -timeout 30m -tags load -run ^TestValidateState$
111+
CNI_TYPE=cniv2 go test -timeout 30m -tags load -run ^TestValidateState$
112112
kubectl rollout restart ds azure-cns -n kube-system
113113
kubectl rollout status ds azure-cns -n kube-system
114114
kubectl get pod -owide -A
115115
echo "validate pods after CNS restart"
116-
sudo CNI_TYPE=cniv2 go test -timeout 30m -tags load -run ^TestValidateState$
116+
CNI_TYPE=cniv2 go test -timeout 30m -tags load -run ^TestValidateState$
117117
name: "restartCNS_ValidatePodState"
118118
displayName: "Restart CNS and validate pod state"
119119
retryCountOnTaskFailure: 3

.pipelines/singletenancy/dualstack-overlay/dualstackoverlay-e2e-step-template.yaml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -56,16 +56,16 @@ steps:
5656
set -e
5757
cd test/integration/load
5858
echo "DualStack Overlay Linux control plane Node properties test"
59-
sudo CNI_TYPE=dualstack go test -timeout 30m -tags load -run ^TestDualStackProperties$
59+
CNI_TYPE=dualstack go test -timeout 30m -tags load -run ^TestDualStackProperties$
6060
echo "DualStack Overlay Linux control plane Load test"
61-
sudo go test -timeout 30m -tags load -run ^TestLoad$
61+
go test -timeout 30m -tags load -run ^TestLoad$
6262
echo "DualStack Overlay Linux control plane CNS validation test"
63-
sudo CNI_TYPE=dualstack go test -timeout 30m -tags load -run ^TestValidateState$
63+
CNI_TYPE=dualstack go test -timeout 30m -tags load -run ^TestValidateState$
6464
cd ../datapath
6565
echo "Dualstack Overlay Linux datapath IPv6 test"
66-
sudo go test -count=1 datapath_linux_test.go -timeout 3m -tags connection -run ^TestDatapathLinux$ -tags=connection,integration -isDualStack=true
66+
go test -count=1 datapath_linux_test.go -timeout 3m -tags connection -run ^TestDatapathLinux$ -tags=connection,integration -isDualStack=true
6767
echo "Dualstack Overlay Linux datapath IPv4 test"
68-
sudo go test -count=1 datapath_linux_test.go -timeout 3m -tags connection -run ^TestDatapathLinux$ -tags=connection,integration
68+
go test -count=1 datapath_linux_test.go -timeout 3m -tags connection -run ^TestDatapathLinux$ -tags=connection,integration
6969
echo "cleaning up load-test namespace"
7070
kubectl delete ns load-test
7171
retryCountOnTaskFailure: 3
@@ -100,7 +100,7 @@ steps:
100100
make -C ./hack/aks azcfg AZCLI=az REGION=$(REGION_DUALSTACKOVERLAY_CLUSTER_TEST)
101101
kubectl get pods -A
102102
echo "Validating Node Restart"
103-
sudo CNI_TYPE=dualstack RESTART_CASE=true go test -timeout 30m -tags load -run ^TestValidateState$
103+
CNI_TYPE=dualstack RESTART_CASE=true go test -timeout 30m -tags load -run ^TestValidateState$
104104
displayName: "Validate Node Restart"
105105
retryCountOnTaskFailure: 3
106106

@@ -109,12 +109,12 @@ steps:
109109
kubectl get pod -owide -A
110110
echo "validate pod state before CNS restarts"
111111
cd test/integration/load
112-
sudo CNI_TYPE=dualstack go test -timeout 30m -tags load -run ^TestValidateState$
112+
CNI_TYPE=dualstack go test -timeout 30m -tags load -run ^TestValidateState$
113113
kubectl rollout restart ds azure-cns -n kube-system
114114
kubectl rollout status ds azure-cns -n kube-system
115115
kubectl get pod -owide -A
116116
echo "validate pods after CNS restarts"
117-
sudo CNI_TYPE=dualstack go test -timeout 30m -tags load -run ^TestValidateState$
117+
CNI_TYPE=dualstack go test -timeout 30m -tags load -run ^TestValidateState$
118118
name: "restartCNS_ValidatePodState"
119119
displayName: "Restart CNS and Validate Pod State"
120120
retryCountOnTaskFailure: 3

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -499,7 +499,7 @@ manifest-push: # util target to push multiarch container manifest.
499499
$(CONTAINER_BUILDER) manifest push --all $(IMAGE_REGISTRY)/$(IMAGE):$(TAG) docker://$(IMAGE_REGISTRY)/$(IMAGE):$(TAG)
500500

501501
manifest-skopeo-archive: # util target to export tar archive of multiarch container manifest.
502-
skopeo copy --all docker://$(IMAGE_REGISTRY)/$(IMAGE):$(TAG) oci-archive:$(IMAGE_ARCHIVE_DIR)/$(IMAGE)-$(TAG).tar
502+
skopeo copy --all docker://$(IMAGE_REGISTRY)/$(IMAGE):$(TAG) oci-archive:$(IMAGE_ARCHIVE_DIR)/$(IMAGE)-$(TAG).tar --debug
503503

504504
## Build specific multiplat images.
505505

network/network_linux.go

Lines changed: 82 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
package network
55

66
import (
7-
"errors"
87
"fmt"
98
"net"
109
"strconv"
@@ -16,6 +15,7 @@ import (
1615
"github.com/Azure/azure-container-networking/network/networkutils"
1716
"github.com/Azure/azure-container-networking/ovsctl"
1817
"github.com/Azure/azure-container-networking/platform"
18+
"github.com/pkg/errors"
1919
"go.uber.org/zap"
2020
"golang.org/x/sys/unix"
2121
)
@@ -39,6 +39,8 @@ const (
3939
LocalIPKey = "localIP"
4040
// InfraVnetIPKey key for infra vnet
4141
InfraVnetIPKey = "infraVnetIP"
42+
// Ubuntu Release Version for checking which command to use.
43+
Ubuntu22 = "22.04"
4244
)
4345

4446
const (
@@ -243,13 +245,72 @@ func isGreaterOrEqaulUbuntuVersion(versionToMatch int) bool {
243245
return false
244246
}
245247

248+
func (nm *networkManager) systemVersion() (string, error) {
249+
osVersion, err := nm.plClient.ExecuteCommand("lsb_release -rs")
250+
if err != nil {
251+
return osVersion, errors.Wrap(err, "error retrieving the system distribution version")
252+
}
253+
return osVersion, nil
254+
}
255+
256+
func (nm *networkManager) addDomain(ifName, domain string) (string, error) {
257+
osVersion, err := nm.systemVersion()
258+
if err != nil {
259+
return osVersion, err
260+
}
261+
262+
var cmd string
263+
switch {
264+
case strings.HasPrefix(osVersion, Ubuntu22):
265+
cmd = fmt.Sprintf("resolvectl domain %s %s", ifName, domain)
266+
default:
267+
cmd = fmt.Sprintf("systemd-resolve --interface %s --set-domain %s", ifName, domain)
268+
}
269+
return cmd, nil
270+
}
271+
272+
func (nm *networkManager) addDNSServers(ifName string, dnsServers []string) (string, error) {
273+
osVersion, err := nm.systemVersion()
274+
if err != nil {
275+
return osVersion, err
276+
}
277+
278+
var cmd string
279+
switch {
280+
case strings.HasPrefix(osVersion, Ubuntu22):
281+
cmd = fmt.Sprintf("resolvectl dns %s %s", ifName, strings.Join(dnsServers, " "))
282+
default:
283+
cmd = fmt.Sprintf("systemd-resolve --interface %s %s", ifName, strings.Join(dnsServers, "--set-dns "))
284+
}
285+
return cmd, nil
286+
}
287+
288+
func (nm *networkManager) ifNameStatus(ifName string) (string, error) {
289+
osVersion, err := nm.systemVersion()
290+
if err != nil {
291+
return osVersion, err
292+
}
293+
var cmd string
294+
switch {
295+
case strings.HasPrefix(osVersion, Ubuntu22):
296+
cmd = fmt.Sprintf("resolvectl status %s", ifName)
297+
default:
298+
cmd = fmt.Sprintf("systemd-resolve --status %s", ifName)
299+
}
300+
return cmd, nil
301+
}
302+
246303
func (nm *networkManager) readDNSInfo(ifName string) (DNSInfo, error) {
247304
var dnsInfo DNSInfo
248305

249-
cmd := fmt.Sprintf("systemd-resolve --status %s", ifName)
306+
cmd, err := nm.ifNameStatus(ifName)
307+
if err != nil {
308+
return dnsInfo, errors.Wrap(err, "Error generating interface name status cmd")
309+
}
310+
250311
out, err := nm.plClient.ExecuteCommand(cmd)
251312
if err != nil {
252-
return dnsInfo, err
313+
return dnsInfo, errors.Wrapf(err, "Error executing interface status with cmd %s", cmd)
253314
}
254315

255316
logger.Info("console output for above cmd", zap.Any("out", out))
@@ -333,7 +394,8 @@ func (nm *networkManager) applyIPConfig(extIf *externalInterface, targetIf *net.
333394

334395
func (nm *networkManager) applyDNSConfig(extIf *externalInterface, ifName string) error {
335396
var (
336-
setDnsList string
397+
setDNSList []string
398+
cmd string
337399
err error
338400
)
339401

@@ -344,21 +406,31 @@ func (nm *networkManager) applyDNSConfig(extIf *externalInterface, ifName string
344406
continue
345407
}
346408

347-
buf := fmt.Sprintf("--set-dns=%s", server)
348-
setDnsList = setDnsList + " " + buf
409+
setDNSList = append(setDNSList, server)
349410
}
350411

351-
if setDnsList != "" {
352-
cmd := fmt.Sprintf("systemd-resolve --interface=%s%s", ifName, setDnsList)
412+
if len(setDNSList) > 0 {
413+
cmd, err = nm.addDNSServers(ifName, setDNSList)
414+
if err != nil {
415+
return errors.Wrap(err, "Error generating add DNS Servers cmd")
416+
}
417+
353418
_, err = nm.plClient.ExecuteCommand(cmd)
354419
if err != nil {
355-
return err
420+
return errors.Wrapf(err, "Error executing add DNS Servers with cmd %s", cmd)
356421
}
357422
}
358423

359424
if extIf.DNSInfo.Suffix != "" {
360-
cmd := fmt.Sprintf("systemd-resolve --interface=%s --set-domain=%s", ifName, extIf.DNSInfo.Suffix)
425+
cmd, err = nm.addDomain(ifName, extIf.DNSInfo.Suffix)
426+
if err != nil {
427+
return errors.Wrap(err, "Error generating add domain cmd")
428+
}
429+
361430
_, err = nm.plClient.ExecuteCommand(cmd)
431+
if err != nil {
432+
return errors.Wrapf(err, "Error executing add Domain with cmd %s", cmd)
433+
}
362434
}
363435

364436
}

0 commit comments

Comments
 (0)