feat: CNS writes SWIFT conflist (#2110)
* cns writes swift conflist * gofumpt ed * var naming * add swift scenario to switch
This commit is contained in:
Родитель
06e3877cdf
Коммит
e767b150cd
|
@ -16,6 +16,9 @@ const (
|
||||||
overlaycniName = "azure" //nolint:unused,deadcode,varcheck // used in linux
|
overlaycniName = "azure" //nolint:unused,deadcode,varcheck // used in linux
|
||||||
overlaycniType = "azure-vnet" //nolint:unused,deadcode,varcheck // used in linux
|
overlaycniType = "azure-vnet" //nolint:unused,deadcode,varcheck // used in linux
|
||||||
nodeLocalDNSIP = "169.254.20.10" //nolint:unused,deadcode,varcheck // used in linux
|
nodeLocalDNSIP = "169.254.20.10" //nolint:unused,deadcode,varcheck // used in linux
|
||||||
|
azurecniVersion = "0.3.0" //nolint:unused,deadcode,varcheck // used in linux
|
||||||
|
azureName = "azure" //nolint:unused,deadcode,varcheck // used in linux
|
||||||
|
azureType = "azure-vnet" //nolint:unused,deadcode,varcheck // used in linux
|
||||||
)
|
)
|
||||||
|
|
||||||
// cniConflist represents the containernetworking/cni/pkg/types.NetConfList
|
// cniConflist represents the containernetworking/cni/pkg/types.NetConfList
|
||||||
|
@ -63,6 +66,11 @@ type CiliumGenerator struct {
|
||||||
Writer io.WriteCloser
|
Writer io.WriteCloser
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SWIFTGenerator generates the Azure CNI conflist for the SWIFT scenario
|
||||||
|
type SWIFTGenerator struct {
|
||||||
|
Writer io.WriteCloser
|
||||||
|
}
|
||||||
|
|
||||||
func (v *V4OverlayGenerator) Close() error {
|
func (v *V4OverlayGenerator) Close() error {
|
||||||
if err := v.Writer.Close(); err != nil {
|
if err := v.Writer.Close(); err != nil {
|
||||||
return errors.Wrap(err, "error closing generator")
|
return errors.Wrap(err, "error closing generator")
|
||||||
|
@ -94,3 +102,11 @@ func (v *CiliumGenerator) Close() error {
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (v *SWIFTGenerator) Close() error {
|
||||||
|
if err := v.Writer.Close(); err != nil {
|
||||||
|
return errors.Wrap(err, "error closing generator")
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
@ -133,3 +133,31 @@ func (v *CiliumGenerator) Generate() error {
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Generate writes the CNI conflist to the Generator's output stream
|
||||||
|
func (v *SWIFTGenerator) Generate() error {
|
||||||
|
conflist := cniConflist{
|
||||||
|
CNIVersion: azurecniVersion,
|
||||||
|
Name: azureName,
|
||||||
|
Plugins: []any{
|
||||||
|
cni.NetworkConfig{
|
||||||
|
Type: azureType,
|
||||||
|
Mode: cninet.OpModeTransparent,
|
||||||
|
ExecutionMode: string(util.V4Swift),
|
||||||
|
IPsToRouteViaHost: []string{nodeLocalDNSIP},
|
||||||
|
IPAM: cni.IPAM{
|
||||||
|
Type: network.AzureCNS,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
portmapConfig,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
enc := json.NewEncoder(v.Writer)
|
||||||
|
enc.SetIndent("", "\t")
|
||||||
|
if err := enc.Encode(conflist); err != nil {
|
||||||
|
return errors.Wrap(err, "error encoding conflist to json")
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
@ -77,6 +77,21 @@ func TestGenerateCiliumConflist(t *testing.T) {
|
||||||
assert.Equal(t, removeNewLines(fixtureBytes), removeNewLines(buffer.Bytes()))
|
assert.Equal(t, removeNewLines(fixtureBytes), removeNewLines(buffer.Bytes()))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGenerateSWIFTConflist(t *testing.T) {
|
||||||
|
fixture := "testdata/fixtures/azure-linux-swift.conflist"
|
||||||
|
|
||||||
|
buffer := new(bytes.Buffer)
|
||||||
|
g := cniconflist.SWIFTGenerator{Writer: &bufferWriteCloser{buffer}}
|
||||||
|
err := g.Generate()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
fixtureBytes, err := os.ReadFile(fixture)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
// remove newlines and carriage returns in case these UTs are running on Windows
|
||||||
|
assert.Equal(t, removeNewLines(fixtureBytes), removeNewLines(buffer.Bytes()))
|
||||||
|
}
|
||||||
|
|
||||||
// removeNewLines will remove the newlines and carriage returns from the byte slice
|
// removeNewLines will remove the newlines and carriage returns from the byte slice
|
||||||
func removeNewLines(b []byte) []byte {
|
func removeNewLines(b []byte) []byte {
|
||||||
var bb []byte //nolint:prealloc // can't prealloc since we don't know how many bytes will get removed
|
var bb []byte //nolint:prealloc // can't prealloc since we don't know how many bytes will get removed
|
||||||
|
|
|
@ -21,3 +21,7 @@ func (v *OverlayGenerator) Generate() error {
|
||||||
func (v *CiliumGenerator) Generate() error {
|
func (v *CiliumGenerator) Generate() error {
|
||||||
return errNotImplemented
|
return errNotImplemented
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (v *SWIFTGenerator) Generate() error {
|
||||||
|
return errNotImplemented
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
{
|
||||||
|
"cniVersion": "0.3.0",
|
||||||
|
"name": "azure",
|
||||||
|
"plugins": [
|
||||||
|
{
|
||||||
|
"type": "azure-vnet",
|
||||||
|
"mode": "transparent",
|
||||||
|
"ipsToRouteViaHost": [
|
||||||
|
"169.254.20.10"
|
||||||
|
],
|
||||||
|
"executionMode": "v4swift",
|
||||||
|
"ipam": {
|
||||||
|
"type": "azure-cns"
|
||||||
|
},
|
||||||
|
"dns": {},
|
||||||
|
"runtimeConfig": {
|
||||||
|
"dns": {}
|
||||||
|
},
|
||||||
|
"windowsSettings": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "portmap",
|
||||||
|
"capabilities": {
|
||||||
|
"portMappings": true
|
||||||
|
},
|
||||||
|
"snat": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -96,6 +96,7 @@ const (
|
||||||
scenarioDualStackOverlay cniConflistScenario = "dualStackOverlay"
|
scenarioDualStackOverlay cniConflistScenario = "dualStackOverlay"
|
||||||
scenarioOverlay cniConflistScenario = "overlay"
|
scenarioOverlay cniConflistScenario = "overlay"
|
||||||
scenarioCilium cniConflistScenario = "cilium"
|
scenarioCilium cniConflistScenario = "cilium"
|
||||||
|
scenarioSWIFT cniConflistScenario = "swift"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -550,6 +551,8 @@ func main() {
|
||||||
conflistGenerator = &cniconflist.OverlayGenerator{Writer: writer}
|
conflistGenerator = &cniconflist.OverlayGenerator{Writer: writer}
|
||||||
case scenarioCilium:
|
case scenarioCilium:
|
||||||
conflistGenerator = &cniconflist.CiliumGenerator{Writer: writer}
|
conflistGenerator = &cniconflist.CiliumGenerator{Writer: writer}
|
||||||
|
case scenarioSWIFT:
|
||||||
|
conflistGenerator = &cniconflist.SWIFTGenerator{Writer: writer}
|
||||||
default:
|
default:
|
||||||
logger.Errorf("unable to generate cni conflist for unknown scenario: %s", scenario)
|
logger.Errorf("unable to generate cni conflist for unknown scenario: %s", scenario)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче