diff --git a/docs/api.md b/docs/api.md index b92c75c6a1..3d9778aaf8 100644 --- a/docs/api.md +++ b/docs/api.md @@ -35,6 +35,10 @@ mainly, but not only, provisioning details. and the port is optional, if using the default one (623). * Dell iDRAC * `idrac://` (or `idrac+http://` to disable TLS). + * `idrac-redfish://` may be used to manage iDRAC controller with the + Redfish protocol over HTTPS. The URL must also contain a path to + the Redfish API system endpoint. + `idrac-redfish://myhost.example/redfish/v1/Systems/System.Embedded.1` * `idrac-virtualmedia://` to use virtual media instead of PXE for attaching the provisioning image to the host. * Fujitsu iRMC diff --git a/pkg/bmc/access_test.go b/pkg/bmc/access_test.go index e2e535c7dd..57e3ce8ded 100644 --- a/pkg/bmc/access_test.go +++ b/pkg/bmc/access_test.go @@ -372,6 +372,18 @@ func TestStaticDriverInfo(t *testing.T) { vendor: "", }, + { + Scenario: "idrac redfish", + input: "idrac-redfish://192.168.122.1", + needsMac: true, + driver: "idrac", + boot: "ipxe", + management: "idrac-redfish", + power: "idrac-redfish", + raid: "no-raid", + vendor: "no-vendor", + }, + { Scenario: "ilo5 virtual media", input: "ilo5-virtualmedia://192.168.122.1", @@ -644,6 +656,18 @@ func TestDriverInfo(t *testing.T) { }, }, + { + Scenario: "idrac redfish", + input: "idrac-redfish://192.168.122.1/foo/bar", + expects: map[string]interface{}{ + "redfish_address": "https://192.168.122.1", + "redfish_system_id": "/foo/bar", + "redfish_password": "", + "redfish_username": "", + "redfish_verify_ca": false, + }, + }, + { Scenario: "idrac virtual media", input: "idrac-virtualmedia://192.168.122.1/foo/bar", diff --git a/pkg/bmc/redfish.go b/pkg/bmc/redfish.go index c2e0931353..e1e29d78db 100644 --- a/pkg/bmc/redfish.go +++ b/pkg/bmc/redfish.go @@ -12,6 +12,7 @@ func init() { registerFactory("redfish-virtualmedia", newRedfishVirtualMediaAccessDetails) registerFactory("ilo5-virtualmedia", newRedfishVirtualMediaAccessDetails) registerFactory("idrac-virtualmedia", newRedfishiDracVirtualMediaAccessDetails) + registerFactory("idrac-redfish", newRedfishiDracAccessDetails) } func redfishDetails(parsedURL *url.URL, disableCertificateVerification bool) *redfishAccessDetails { @@ -39,6 +40,12 @@ func newRedfishiDracVirtualMediaAccessDetails(parsedURL *url.URL, disableCertifi }, nil } +func newRedfishiDracAccessDetails(parsedURL *url.URL, disableCertificateVerification bool) (AccessDetails, error) { + return &redfishiDracAccessDetails{ + *redfishDetails(parsedURL, disableCertificateVerification), + }, nil +} + type redfishAccessDetails struct { bmcType string host string @@ -50,6 +57,10 @@ type redfishVirtualMediaAccessDetails struct { redfishAccessDetails } +type redfishiDracAccessDetails struct { + redfishAccessDetails +} + type redfishiDracVirtualMediaAccessDetails struct { redfishAccessDetails } @@ -127,6 +138,32 @@ func (a *redfishAccessDetails) VendorInterface() string { return "" } +// iDrac Redfish Overrides + +func (a *redfishiDracAccessDetails) Driver() string { + return "idrac" +} + +func (a *redfishiDracAccessDetails) BootInterface() string { + return "ipxe" +} + +func (a *redfishiDracAccessDetails) ManagementInterface() string { + return "idrac-redfish" +} + +func (a *redfishiDracAccessDetails) PowerInterface() string { + return "idrac-redfish" +} + +func (a *redfishiDracAccessDetails) RAIDInterface() string { + return "no-raid" +} + +func (a *redfishiDracAccessDetails) VendorInterface() string { + return "no-vendor" +} + // Virtual Media Overrides func (a *redfishVirtualMediaAccessDetails) BootInterface() string {