Skip to content

Commit

Permalink
Merge pull request #119 from tdomnesc/OCPBUGS-27090
Browse files Browse the repository at this point in the history
OCPBUGS-27090: configurable ironic agent vlan creation
  • Loading branch information
openshift-merge-bot[bot] committed Jan 18, 2024
2 parents c3f7820 + 256a8bc commit e456249
Show file tree
Hide file tree
Showing 7 changed files with 79 additions and 50 deletions.
1 change: 1 addition & 0 deletions cmd/static-server/main.go
Expand Up @@ -82,6 +82,7 @@ func loadStaticNMState(fsys fs.FS, env *env.EnvInputs, nmstateDir string, imageS
env.HttpsProxy,
env.NoProxy,
hostname,
env.IronicAgentVlanInterfaces,
)
if err != nil {
return errors.WithMessage(err, "failed to configure ignition")
Expand Down
25 changes: 13 additions & 12 deletions pkg/env/env.go
Expand Up @@ -8,18 +8,19 @@ import (
)

type EnvInputs struct {
DeployISO string `envconfig:"DEPLOY_ISO" required:"true"`
DeployInitrd string `envconfig:"DEPLOY_INITRD" required:"true"`
IronicBaseURL string `envconfig:"IRONIC_BASE_URL"`
IronicInspectorBaseURL string `envconfig:"IRONIC_INSPECTOR_BASE_URL"`
IronicAgentImage string `envconfig:"IRONIC_AGENT_IMAGE" required:"true"`
IronicAgentPullSecret string `envconfig:"IRONIC_AGENT_PULL_SECRET"`
IronicRAMDiskSSHKey string `envconfig:"IRONIC_RAMDISK_SSH_KEY"`
RegistriesConfPath string `envconfig:"REGISTRIES_CONF_PATH"`
IpOptions string `envconfig:"IP_OPTIONS"`
HttpProxy string `envconfig:"HTTP_PROXY"`
HttpsProxy string `envconfig:"HTTPS_PROXY"`
NoProxy string `envconfig:"NO_PROXY"`
DeployISO string `envconfig:"DEPLOY_ISO" required:"true"`
DeployInitrd string `envconfig:"DEPLOY_INITRD" required:"true"`
IronicBaseURL string `envconfig:"IRONIC_BASE_URL"`
IronicInspectorBaseURL string `envconfig:"IRONIC_INSPECTOR_BASE_URL"`
IronicAgentImage string `envconfig:"IRONIC_AGENT_IMAGE" required:"true"`
IronicAgentPullSecret string `envconfig:"IRONIC_AGENT_PULL_SECRET"`
IronicAgentVlanInterfaces string `envconfig:"IRONIC_AGENT_VLAN_INTERFACES"`
IronicRAMDiskSSHKey string `envconfig:"IRONIC_RAMDISK_SSH_KEY"`
RegistriesConfPath string `envconfig:"REGISTRIES_CONF_PATH"`
IpOptions string `envconfig:"IP_OPTIONS"`
HttpProxy string `envconfig:"HTTP_PROXY"`
HttpsProxy string `envconfig:"HTTPS_PROXY"`
NoProxy string `envconfig:"NO_PROXY"`
}

func New() (*EnvInputs, error) {
Expand Down
72 changes: 42 additions & 30 deletions pkg/ignition/builder.go
Expand Up @@ -14,28 +14,26 @@ import (
const (
// https://github.com/openshift/ironic-image/blob/master/scripts/configure-coreos-ipa#L14
ironicAgentPodmanFlags = "--tls-verify=false"

// https://github.com/openshift/ironic-image/blob/master/scripts/configure-coreos-ipa#L11
ironicInspectorVlanInterfaces = "all"
)

type ignitionBuilder struct {
nmStateData []byte
registriesConf []byte
ironicBaseURL string
ironicInspectorBaseURL string
ironicAgentImage string
ironicAgentPullSecret string
ironicRAMDiskSSHKey string
networkKeyFiles []byte
ipOptions string
httpProxy string
httpsProxy string
noProxy string
hostname string
nmStateData []byte
registriesConf []byte
ironicBaseURL string
ironicInspectorBaseURL string
ironicAgentImage string
ironicAgentPullSecret string
ironicRAMDiskSSHKey string
networkKeyFiles []byte
ipOptions string
httpProxy string
httpsProxy string
noProxy string
hostname string
ironicAgentVlanInterfaces string
}

func New(nmStateData, registriesConf []byte, ironicBaseURL, ironicInspectorBaseURL, ironicAgentImage, ironicAgentPullSecret, ironicRAMDiskSSHKey, ipOptions string, httpProxy, httpsProxy, noProxy string, hostname string) (*ignitionBuilder, error) {
func New(nmStateData, registriesConf []byte, ironicBaseURL, ironicInspectorBaseURL, ironicAgentImage, ironicAgentPullSecret, ironicRAMDiskSSHKey, ipOptions string, httpProxy, httpsProxy, noProxy string, hostname string, ironicAgentVlanInterfaces string) (*ignitionBuilder, error) {
if ironicBaseURL == "" {
return nil, errors.New("ironicBaseURL is required")
}
Expand All @@ -47,18 +45,19 @@ func New(nmStateData, registriesConf []byte, ironicBaseURL, ironicInspectorBaseU
}

return &ignitionBuilder{
nmStateData: nmStateData,
registriesConf: registriesConf,
ironicBaseURL: ironicBaseURL,
ironicInspectorBaseURL: ironicInspectorBaseURL,
ironicAgentImage: ironicAgentImage,
ironicAgentPullSecret: ironicAgentPullSecret,
ironicRAMDiskSSHKey: ironicRAMDiskSSHKey,
ipOptions: ipOptions,
httpProxy: httpProxy,
httpsProxy: httpsProxy,
noProxy: noProxy,
hostname: hostname,
nmStateData: nmStateData,
registriesConf: registriesConf,
ironicBaseURL: ironicBaseURL,
ironicInspectorBaseURL: ironicInspectorBaseURL,
ironicAgentImage: ironicAgentImage,
ironicAgentPullSecret: ironicAgentPullSecret,
ironicRAMDiskSSHKey: ironicRAMDiskSSHKey,
ipOptions: ipOptions,
httpProxy: httpProxy,
httpsProxy: httpsProxy,
noProxy: noProxy,
hostname: hostname,
ironicAgentVlanInterfaces: ironicAgentVlanInterfaces,
}, nil
}

Expand Down Expand Up @@ -94,8 +93,21 @@ func (b *ignitionBuilder) GenerateConfig() (config ignition_config_types_32.Conf
}
}

var ironicInspectorVlanInterfaces string
if strings.ToLower(b.ironicAgentVlanInterfaces) == "always" {
ironicInspectorVlanInterfaces = "all"
} else if strings.ToLower(b.ironicAgentVlanInterfaces) == "never" {
ironicInspectorVlanInterfaces = ""
} else {
if len(b.nmStateData) > 0 {
ironicInspectorVlanInterfaces = ""
} else {
ironicInspectorVlanInterfaces = "all"
}
}

config.Ignition.Version = "3.2.0"
config.Storage.Files = []ignition_config_types_32.File{b.IronicAgentConf()}
config.Storage.Files = []ignition_config_types_32.File{b.IronicAgentConf(ironicInspectorVlanInterfaces)}
config.Storage.Files = append(config.Storage.Files, netFiles...)
config.Systemd.Units = []ignition_config_types_32.Unit{b.IronicAgentService(len(netFiles) > 0)}

Expand Down
6 changes: 3 additions & 3 deletions pkg/ignition/builder_test.go
Expand Up @@ -11,7 +11,7 @@ func TestGenerateStructure(t *testing.T) {
builder, err := New(nil, nil,
"http://ironic.example.com", "",
"quay.io/openshift-release-dev/ironic-ipa-image",
"", "", "", "", "", "", "")
"", "", "", "", "", "", "", "")
assert.NoError(t, err)

ignition, err := builder.GenerateConfig()
Expand All @@ -34,7 +34,7 @@ func TestGenerateWithMoreFields(t *testing.T) {
"http://ironic.example.com", "http://inspector.example.com",
"quay.io/openshift-release-dev/ironic-ipa-image",
"pull secret", "SSH key", "ip=dhcp42",
"proxy me", "", "don't proxy me", "my-host")
"proxy me", "", "don't proxy me", "my-host", "")
assert.NoError(t, err)

ignition, err := builder.GenerateConfig()
Expand Down Expand Up @@ -70,7 +70,7 @@ func TestGenerateRegistries(t *testing.T) {
builder, err := New([]byte{}, []byte(registries),
"http://ironic.example.com", "",
"quay.io/openshift-release-dev/ironic-ipa-image",
"", "", "", "", "", "", "virthost")
"", "", "", "", "", "", "virthost", "")
if err != nil {
t.Fatalf("Unexpected error %v", err)
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/ignition/service_config.go
Expand Up @@ -8,7 +8,7 @@ import (
"k8s.io/utils/pointer"
)

func (b *ignitionBuilder) IronicAgentConf() ignition_config_types_32.File {
func (b *ignitionBuilder) IronicAgentConf(ironicInspectorVlanInterfaces string) ignition_config_types_32.File {
template := `
[DEFAULT]
api_url = %s:6385
Expand Down
22 changes: 18 additions & 4 deletions pkg/ignition/service_config_test.go
Expand Up @@ -20,9 +20,10 @@ func TestIronicPythonAgentConf(t *testing.T) {
want ignition_config_types_32.File
}{
{
name: "basic",
ironicBaseURL: "http://example.com/foo",
ironicInspectorBaseURL: "http://example.com/bar",
name: "basic",
ironicBaseURL: "http://example.com/foo",
ironicInspectorBaseURL: "http://example.com/bar",
ironicInspectorVlanInterfaces: "all",
want: ignition_config_types_32.File{
Node: ignition_config_types_32.Node{Path: "/etc/ironic-python-agent.conf", Overwrite: &expectedOverwrite},
FileEmbedded1: ignition_config_types_32.FileEmbedded1{
Expand All @@ -31,14 +32,27 @@ func TestIronicPythonAgentConf(t *testing.T) {
Mode: &expectedMode},
},
},
{
name: "basic_no_vlans",
ironicBaseURL: "http://example.com/foo",
ironicInspectorBaseURL: "http://example.com/bar",
ironicInspectorVlanInterfaces: "",
want: ignition_config_types_32.File{
Node: ignition_config_types_32.Node{Path: "/etc/ironic-python-agent.conf", Overwrite: &expectedOverwrite},
FileEmbedded1: ignition_config_types_32.FileEmbedded1{
Contents: ignition_config_types_32.Resource{
Source: pointer.String("data:text/plain,%0A%5BDEFAULT%5D%0Aapi_url%20%3D%20http%3A%2F%2Fexample.com%2Ffoo%3A6385%0Ainspection_callback_url%20%3D%20http%3A%2F%2Fexample.com%2Fbar%3A5050%2Fv1%2Fcontinue%0Ainsecure%20%3D%20True%0Aenable_vlan_interfaces%20%3D%20%0A")},
Mode: &expectedMode},
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
b := &ignitionBuilder{
ironicBaseURL: tt.ironicBaseURL,
ironicInspectorBaseURL: tt.ironicInspectorBaseURL,
}
if got := b.IronicAgentConf(); !reflect.DeepEqual(got, tt.want) {
if got := b.IronicAgentConf(tt.ironicInspectorVlanInterfaces); !reflect.DeepEqual(got, tt.want) {
t.Error(cmp.Diff(tt.want, got))
}
})
Expand Down
1 change: 1 addition & 0 deletions pkg/imageprovider/rhcos.go
Expand Up @@ -59,6 +59,7 @@ func (ip *rhcosImageProvider) buildIgnitionConfig(networkData imageprovider.Netw
ip.EnvInputs.HttpsProxy,
ip.EnvInputs.NoProxy,
hostname,
ip.EnvInputs.IronicAgentVlanInterfaces,
)
if err != nil {
return nil, imageprovider.BuildInvalidError(err)
Expand Down

0 comments on commit e456249

Please sign in to comment.