Skip to content

Commit 84fa7d8

Browse files
authored
Add dev flag for unsupported image builds (#5168)
Add --dev flag to image-builder CLI, it will be used to enable builds that are not officially supported such as ubuntu 20.04
1 parent ee434e6 commit 84fa7d8

File tree

5 files changed

+38
-18
lines changed

5 files changed

+38
-18
lines changed

projects/aws/image-builder/ATTRIBUTION.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -443,7 +443,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
443443

444444
------
445445

446-
** golang.org/go; version go1.24.6 --
446+
** golang.org/go; version go1.24.12 --
447447
https://github.com/golang/go
448448

449449
** golang.org/x/net; version v0.38.0 --

projects/aws/image-builder/builder/types.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ var SupportedHypervisors = []string{
2121
}
2222

2323
var SupportedUbuntuVersions = []string{
24-
"20.04",
2524
"22.04",
2625
"24.04",
2726
}
@@ -59,6 +58,7 @@ type BuildOptions struct {
5958
AnsibleVerbosity int
6059
EKSAReleaseVersion string
6160
BuilderType string
61+
Dev bool
6262
}
6363

6464
type VsphereConfig struct {

projects/aws/image-builder/cmd/build.go

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ var buildCmd = &cobra.Command{
4343
func init() {
4444
rootCmd.AddCommand(buildCmd)
4545
buildCmd.Flags().StringVar(&bo.Os, "os", "", "Operating system to use for EKS-A node image")
46-
buildCmd.Flags().StringVar(&bo.OsVersion, "os-version", "", "Operating system version to use for EKS-A node image. Can be 20.04, 22.04 or 24.04 for Ubuntu, 8 or 9 for Redhat.")
46+
buildCmd.Flags().StringVar(&bo.OsVersion, "os-version", "", "Operating system version to use for EKS-A node image. Can be 22.04 or 24.04 for Ubuntu, 8 or 9 for Redhat.")
4747
buildCmd.Flags().StringVar(&bo.Hypervisor, "hypervisor", "", "Target hypervisor for EKS-A node image")
4848
buildCmd.Flags().StringVar(&baremetalConfigFile, "baremetal-config", "", "Path to Baremetal Config file")
4949
buildCmd.Flags().StringVar(&vSphereConfigFile, "vsphere-config", "", "Path to vSphere Config file")
@@ -58,6 +58,7 @@ func init() {
5858
buildCmd.Flags().StringVar(&bo.ManifestTarball, "manifest-tarball", "", "Path to Image Builder built EKS-D/A manifest tarball")
5959
buildCmd.Flags().IntVar(&bo.AnsibleVerbosity, "ansible-verbosity", 0, "Verbosity level for the Ansible tasks run during image building, should be in the range 0-6")
6060
buildCmd.Flags().BoolVar(&bo.AirGapped, "air-gapped", false, "Flag to instruct image builder to run in air-gapped mode. Requires --manifest-tarball to be set")
61+
buildCmd.Flags().BoolVar(&bo.Dev, "dev", false, "Development mode flag. When set to true, unsupported builds such as Ubuntu 20.04 will be enabled")
6162
buildCmd.Flags().StringVar(&builderType, "builder", builder.BuilderTypeIso, "Builder type for VSphere. Can be iso or clone")
6263
if err := buildCmd.MarkFlagRequired("os"); err != nil {
6364
log.Fatalf("Error marking flag as required: %v", err)
@@ -89,7 +90,7 @@ func ValidateInputs(bo *builder.BuildOptions) error {
8990

9091
if bo.Os == builder.Ubuntu && bo.OsVersion == "" {
9192
// maintain previous default
92-
bo.OsVersion = "20.04"
93+
bo.OsVersion = "22.04"
9394
}
9495

9596
if bo.Os == builder.RedHat && bo.OsVersion == "" {
@@ -105,7 +106,7 @@ func ValidateInputs(bo *builder.BuildOptions) error {
105106
log.Fatalf("Clone builder is only supported for vSphere hypervisor")
106107
}
107108

108-
if err = validateOSVersion(bo.Os, bo.OsVersion); err != nil {
109+
if err = validateOSVersion(bo.Os, bo.OsVersion, bo.Dev); err != nil {
109110
log.Fatal(err.Error())
110111
}
111112

@@ -160,7 +161,7 @@ func ValidateInputs(bo *builder.BuildOptions) error {
160161
bo.Hypervisor = strings.ToLower(bo.Hypervisor)
161162

162163
if bo.OsVersion != "" {
163-
// From this point forward use 2004 instead of 20.04 for Ubuntu versions to upstream image-builder
164+
// From this point forward use 2204 instead of 22.04 for Ubuntu versions to upstream image-builder
164165
bo.OsVersion = strings.ReplaceAll(bo.OsVersion, ".", "")
165166
}
166167

@@ -400,13 +401,22 @@ func validateSupportedHypervisors(hypervisor string) error {
400401
return fmt.Errorf("%s is not supported yet. Please select one of %s", hypervisor, strings.Join(builder.SupportedHypervisors, ","))
401402
}
402403

403-
func validateOSVersion(os, osVersion string) error {
404+
func validateOSVersion(os, osVersion string, dev bool) error {
404405
if os != builder.RedHat && os != builder.Ubuntu {
405406
return fmt.Errorf("%s is not a supported OS", os)
406407
}
407408

408-
if os == builder.Ubuntu && !builder.SliceContains(builder.SupportedUbuntuVersions, osVersion) {
409-
return fmt.Errorf("%s is not a supported version of Ubuntu. Please select one of %s", osVersion, strings.Join(builder.SupportedUbuntuVersions, ","))
409+
if os == builder.Ubuntu {
410+
// Ubuntu 20.04 only allowed when dev=true
411+
if osVersion == "20.04" {
412+
if !dev {
413+
return fmt.Errorf("%s is not a supported version of Ubuntu. Please select one of %s", osVersion, strings.Join(builder.SupportedUbuntuVersions, ","))
414+
}
415+
} else {
416+
if !builder.SliceContains(builder.SupportedUbuntuVersions, osVersion) {
417+
return fmt.Errorf("%s is not a supported version of Ubuntu. Please select one of %s", osVersion, strings.Join(builder.SupportedUbuntuVersions, ","))
418+
}
419+
}
410420
}
411421

412422
if os == builder.RedHat && !builder.SliceContains(builder.SupportedRedHatVersions, osVersion) {

projects/aws/image-builder/cmd/build_test.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,11 +104,20 @@ func TestValidateOSVersionCombinations(t *testing.T) {
104104
wantErr string
105105
}{
106106
{
107-
testName: "Ubuntu 20.04",
107+
testName: "Ubuntu 20.04 without dev flag",
108108
buildOptions: builder.BuildOptions{
109109
Os: "ubuntu",
110110
OsVersion: "20.04",
111111
},
112+
wantErr: "20.04 is not a supported version of Ubuntu. Please select one of 22.04,24.04",
113+
},
114+
{
115+
testName: "Ubuntu 20.04 with dev flag",
116+
buildOptions: builder.BuildOptions{
117+
Os: "ubuntu",
118+
OsVersion: "20.04",
119+
Dev: true,
120+
},
112121
wantErr: "",
113122
},
114123
{
@@ -133,7 +142,7 @@ func TestValidateOSVersionCombinations(t *testing.T) {
133142
Os: "ubuntu",
134143
OsVersion: "26.04",
135144
},
136-
wantErr: "26.04 is not a supported version of Ubuntu. Please select one of 20.04,22.04,24.04",
145+
wantErr: "26.04 is not a supported version of Ubuntu. Please select one of 22.04,24.04",
137146
},
138147
{
139148
testName: "Redhat 8",
@@ -163,7 +172,7 @@ func TestValidateOSVersionCombinations(t *testing.T) {
163172

164173
for _, tt := range testCases {
165174
t.Run(tt.testName, func(t *testing.T) {
166-
err := validateOSVersion(tt.buildOptions.Os, tt.buildOptions.OsVersion)
175+
err := validateOSVersion(tt.buildOptions.Os, tt.buildOptions.OsVersion, tt.buildOptions.Dev)
167176
if tt.wantErr == "" {
168177
assert.NoError(t, err)
169178
} else {
@@ -324,6 +333,7 @@ func TestValidateInputsFirmwareDefaulting(t *testing.T) {
324333
OsVersion: "20.04",
325334
Hypervisor: "baremetal",
326335
Firmware: "",
336+
Dev: true,
327337
},
328338
wantFirmware: "efi",
329339
},

projects/kubernetes-sigs/image-builder/build/build_image.sh

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -118,18 +118,18 @@ if [[ $image_format == "ova" ]]; then
118118
cat $image_builder_config_file
119119

120120
# Run image-builder CLI
121-
retry_image_builder build --hypervisor vsphere --os $image_os $image_os_version_arg --vsphere-config $image_builder_config_file --release-channel $release_channel $firmware_arg
121+
retry_image_builder build --hypervisor vsphere --os $image_os $image_os_version_arg --vsphere-config $image_builder_config_file --release-channel $release_channel $firmware_arg --dev true
122122
elif [[ $image_format == "raw" ]]; then
123123
echo "Creating Bare metal image-builder config"
124124
if [[ $image_os == "ubuntu" ]]; then
125125
# Run image-builder CLI
126-
retry_image_builder build --hypervisor baremetal --os $image_os $image_os_version_arg --release-channel $release_channel
126+
retry_image_builder build --hypervisor baremetal --os $image_os $image_os_version_arg --release-channel $release_channel --dev true
127127
elif [[ $image_os == "redhat" ]]; then
128128
image_builder_config_file=$redhat_config_file
129129
cat $image_builder_config_file
130130

131131
# Run image-builder CLI
132-
retry_image_builder build --hypervisor baremetal --os $image_os $image_os_version_arg --release-channel $release_channel --baremetal-config $image_builder_config_file
132+
retry_image_builder build --hypervisor baremetal --os $image_os $image_os_version_arg --release-channel $release_channel --baremetal-config $image_builder_config_file --dev true
133133
fi
134134
elif [[ $image_format == "cloudstack" ]]; then
135135
if [[ $image_os != "redhat" ]]; then
@@ -142,7 +142,7 @@ elif [[ $image_format == "cloudstack" ]]; then
142142
cat $image_builder_config_file
143143

144144
# Run image-builder CLI
145-
retry_image_builder build --hypervisor cloudstack --os $image_os $image_os_version_arg --release-channel $release_channel --cloudstack-config $image_builder_config_file
145+
retry_image_builder build --hypervisor cloudstack --os $image_os $image_os_version_arg --release-channel $release_channel --cloudstack-config $image_builder_config_file --dev true
146146
elif [[ $image_format == "ami" ]]; then
147147
if [[ $image_os != "ubuntu" ]]; then
148148
echo "AMI builds do not support any non-ubuntu os"
@@ -157,7 +157,7 @@ elif [[ $image_format == "ami" ]]; then
157157
cat $image_builder_config_file
158158

159159
# Run image-builder CLI
160-
retry_image_builder build --hypervisor ami --os $image_os $image_os_version_arg --release-channel $release_channel --ami-config $image_builder_config_file
160+
retry_image_builder build --hypervisor ami --os $image_os $image_os_version_arg --release-channel $release_channel --ami-config $image_builder_config_file --dev true
161161
elif [[ $image_format == "nutanix" ]]; then
162162
# Setup nutanix config
163163
nutanix_config_file="${HOME}/nutanix_config_file"
@@ -197,5 +197,5 @@ elif [[ $image_format == "nutanix" ]]; then
197197
cat $image_builder_config_file
198198

199199
# Run image-builder CLI
200-
retry_image_builder build --hypervisor nutanix --os $image_os $image_os_version_arg --nutanix-config $image_builder_config_file --release-channel $release_channel
200+
retry_image_builder build --hypervisor nutanix --os $image_os $image_os_version_arg --nutanix-config $image_builder_config_file --release-channel $release_channel --dev true
201201
fi

0 commit comments

Comments
 (0)