Skip to content

Commit a14541b

Browse files
committed
Remove support for Ironic before 2024.1
2024.1 series (Ironic 23.1-24.1) is the oldest series still supported by OpenStack community. Versions before that receive very little testing, outside of vendor products. Removing support for API versions that correspond to old versions of Ironic reduces the untested surface of BMO. Signed-off-by: Dmitry Tantsur <[email protected]>
1 parent fe67e1a commit a14541b

File tree

6 files changed

+13
-103
lines changed

6 files changed

+13
-103
lines changed

pkg/provisioner/ironic/clients/client.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ func IronicClient(ironicEndpoint string, auth AuthConfig, tls TLSConfig) (client
9191
return
9292
}
9393

94-
client.Microversion = baseline
94+
client.Microversion = baselineVersionString
9595

9696
err = updateHTTPClient(client, tls)
9797
return

pkg/provisioner/ironic/clients/features.go

Lines changed: 9 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,19 @@ type AvailableFeatures struct {
1919
// conservative when updating this value since doing so unconditionally breaks
2020
// operators of older Ironic, even if the feature we need is optional.
2121
// Update docs/configuration.md when updating the version.
22-
// Version 1.81 allows retrival of Node inventory.
23-
const baseline = "1.81"
22+
// Version 1.89 allows attaching and detaching virtual media.
23+
const baseline = 89
24+
25+
var baselineVersionString = fmt.Sprintf("1.%d", baseline)
2426

2527
func GetAvailableFeatures(ctx context.Context, client *gophercloud.ServiceClient) (features AvailableFeatures, err error) {
2628
mvs, err := utils.GetSupportedMicroversions(ctx, client)
2729
if err != nil {
2830
return
2931
}
3032

31-
if mvs.MaxMajor != 1 || mvs.MaxMinor < 81 {
32-
err = fmt.Errorf("ironic API 1.81 or newer is required, got %d.%d", mvs.MaxMajor, mvs.MaxMinor)
33+
if mvs.MaxMajor != 1 || mvs.MaxMinor < baseline {
34+
err = fmt.Errorf("ironic API 1.%d or newer is required, got %d.%d", baseline, mvs.MaxMajor, mvs.MaxMinor)
3335
return
3436
}
3537

@@ -42,20 +44,8 @@ func (af AvailableFeatures) Log(logger logr.Logger) {
4244
logger.Info("supported Ironic API features",
4345
"maxVersion", fmt.Sprintf("1.%d", af.MaxVersion),
4446
"chosenVersion", af.ChooseMicroversion(),
45-
"firmwareUpdates", af.HasFirmwareUpdates(),
46-
"dataImage", af.HasDataImage())
47-
}
48-
49-
func (af AvailableFeatures) HasFirmwareUpdates() bool {
50-
return af.MaxVersion >= 86 //nolint:mnd
51-
}
52-
53-
func (af AvailableFeatures) HasServicing() bool {
54-
return af.MaxVersion >= 87 //nolint:mnd
55-
}
56-
57-
func (af AvailableFeatures) HasDataImage() bool {
58-
return af.MaxVersion >= 89 //nolint:mnd
47+
"virtualMediaGET", af.HasVirtualMediaGetAPI(),
48+
"disablePowerOff", af.HasDisablePowerOff())
5949
}
6050

6151
func (af AvailableFeatures) HasVirtualMediaGetAPI() bool {
@@ -75,17 +65,5 @@ func (af AvailableFeatures) ChooseMicroversion() string {
7565
return "1.93"
7666
}
7767

78-
if af.HasDataImage() {
79-
return "1.89"
80-
}
81-
82-
if af.HasServicing() {
83-
return "1.87"
84-
}
85-
86-
if af.HasFirmwareUpdates() {
87-
return "1.86"
88-
}
89-
90-
return baseline
68+
return baselineVersionString
9169
}

pkg/provisioner/ironic/clients/features_test.go

Lines changed: 2 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ func TestAvailableFeatures_ChooseMicroversion(t *testing.T) {
1616
want string
1717
}{
1818
{
19-
name: fmt.Sprintf("MaxVersion < %d return microversion %s", 89, baseline),
19+
name: fmt.Sprintf("MaxVersion < %d return microversion %s", 89, baselineVersionString),
2020
feature: fields{
2121
MaxVersion: 50,
2222
},
23-
want: baseline,
23+
want: baselineVersionString,
2424
},
2525
{
2626
name: fmt.Sprintf("MaxVersion = %d return %s", 89, microVersion),
@@ -48,47 +48,3 @@ func TestAvailableFeatures_ChooseMicroversion(t *testing.T) {
4848
})
4949
}
5050
}
51-
52-
func TestAvailableFeatures_HasFirmwareUpdates(t *testing.T) {
53-
maxVersion := 86
54-
type fields struct {
55-
MaxVersion int
56-
}
57-
tests := []struct {
58-
name string
59-
feature fields
60-
want bool
61-
}{
62-
{
63-
name: fmt.Sprintf("Firmware < %d", maxVersion),
64-
feature: fields{
65-
MaxVersion: 50,
66-
},
67-
want: false,
68-
},
69-
{
70-
name: fmt.Sprintf("Firmware = %d", maxVersion),
71-
feature: fields{
72-
MaxVersion: 86,
73-
},
74-
want: true,
75-
},
76-
{
77-
name: fmt.Sprintf("Firmware > %d", maxVersion),
78-
feature: fields{
79-
MaxVersion: 100,
80-
},
81-
want: true,
82-
},
83-
}
84-
for _, tt := range tests {
85-
t.Run(tt.name, func(t *testing.T) {
86-
af := AvailableFeatures{
87-
MaxVersion: tt.feature.MaxVersion,
88-
}
89-
if got := af.HasFirmwareUpdates(); got != tt.want {
90-
t.Errorf("HasFirmwareUpdates() = %v, want %v", got, tt.want)
91-
}
92-
})
93-
}
94-
}

pkg/provisioner/ironic/ironic.go

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -756,10 +756,6 @@ func (p *ironicProvisioner) GetFirmwareComponents() ([]metal3api.FirmwareCompone
756756
return nil, fmt.Errorf("could not get node to retrieve firmware components: %w", err)
757757
}
758758

759-
if !p.availableFeatures.HasFirmwareUpdates() {
760-
return nil, errors.New("current ironic version does not support firmware updates")
761-
}
762-
763759
// We support bmc, bios, and multiple NICs components. Starting with 3 slots.
764760
componentsInfo := make([]metal3api.FirmwareComponentStatus, 0, 3) //nolint:mnd
765761

@@ -1833,12 +1829,6 @@ func (p *ironicProvisioner) GetDataImageStatus() (isImageAttached bool, err erro
18331829
}
18341830

18351831
func (p *ironicProvisioner) AttachDataImage(url string) (err error) {
1836-
// Check if Ironic API version supports DataImage API
1837-
// Needs version >= 1.89
1838-
if !p.availableFeatures.HasDataImage() {
1839-
return fmt.Errorf("ironic version=%d doesn't support DataImage API, needs version>=1.89", p.availableFeatures.MaxVersion)
1840-
}
1841-
18421832
err = nodes.AttachVirtualMedia(p.ctx, p.client, p.nodeID, nodes.AttachVirtualMediaOpts{
18431833
DeviceType: nodes.VirtualMediaCD,
18441834
ImageURL: url,
@@ -1851,12 +1841,6 @@ func (p *ironicProvisioner) AttachDataImage(url string) (err error) {
18511841
}
18521842

18531843
func (p *ironicProvisioner) DetachDataImage() (err error) {
1854-
// Check if Ironic API version supports DataImage API
1855-
// Needs version >= 1.89
1856-
if !p.availableFeatures.HasDataImage() {
1857-
return fmt.Errorf("ironic version=%d doesn't support DataImage API, needs version>=1.89", p.availableFeatures.MaxVersion)
1858-
}
1859-
18601844
err = nodes.DetachVirtualMedia(p.ctx, p.client, p.nodeID, nodes.DetachVirtualMediaOpts{
18611845
DeviceTypes: []nodes.VirtualMediaDeviceType{nodes.VirtualMediaCD},
18621846
}).ExtractErr()

pkg/provisioner/ironic/register.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,7 @@ func (p *ironicProvisioner) enrollNode(data provisioner.ManagementAccessData, bm
245245
BootInterface: bmcAccess.BootInterface(),
246246
Name: ironicNodeName(p.objectMeta),
247247
DriverInfo: driverInfo,
248+
FirmwareInterface: bmcAccess.FirmwareInterface(),
248249
DeployInterface: p.deployInterface(data),
249250
InspectInterface: inspectInterface,
250251
ManagementInterface: bmcAccess.ManagementInterface(),
@@ -258,10 +259,6 @@ func (p *ironicProvisioner) enrollNode(data provisioner.ManagementAccessData, bm
258259
},
259260
}
260261

261-
if p.availableFeatures.HasFirmwareUpdates() {
262-
nodeCreateOpts.FirmwareInterface = bmcAccess.FirmwareInterface()
263-
}
264-
265262
ironicNode, err = nodes.Create(p.ctx, p.client, nodeCreateOpts).Extract()
266263
if err == nil {
267264
p.publisher("Registered", "Registered new host")

pkg/provisioner/ironic/servicing.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,6 @@ func (p *ironicProvisioner) startServicing(bmcAccess bmc.AccessDetails, ironicNo
7777
}
7878

7979
func (p *ironicProvisioner) Service(data provisioner.ServicingData, unprepared, restartOnFailure bool) (result provisioner.Result, started bool, err error) {
80-
if !p.availableFeatures.HasServicing() {
81-
result, err = operationFailed(fmt.Sprintf("servicing not supported: requires API version 1.87, available is 1.%d", p.availableFeatures.MaxVersion))
82-
return result, started, err
83-
}
84-
8580
bmcAccess, err := p.bmcAccess()
8681
if err != nil {
8782
result, err = transientError(err)

0 commit comments

Comments
 (0)