-
Notifications
You must be signed in to change notification settings - Fork 242
/
idrac_virtualmedia.go
113 lines (91 loc) · 3.42 KB
/
idrac_virtualmedia.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package bmc
import (
"fmt"
"net/url"
)
func init() {
schemes := []string{"http", "https"}
RegisterFactory("idrac-virtualmedia", newRedfishiDracVirtualMediaAccessDetails, schemes)
}
func newRedfishiDracVirtualMediaAccessDetails(parsedURL *url.URL, disableCertificateVerification bool) (AccessDetails, error) {
return &redfishiDracVirtualMediaAccessDetails{
bmcType: parsedURL.Scheme,
host: parsedURL.Host,
path: parsedURL.Path,
disableCertificateVerification: disableCertificateVerification,
}, nil
}
type redfishiDracVirtualMediaAccessDetails struct {
bmcType string
host string
path string
disableCertificateVerification bool
}
func (a *redfishiDracVirtualMediaAccessDetails) Type() string {
return a.bmcType
}
// NeedsMAC returns true when the host is going to need a separate
// port created rather than having it discovered.
func (a *redfishiDracVirtualMediaAccessDetails) NeedsMAC() bool {
// For the inspection to work, we need a MAC address
// https://github.com/metal3-io/baremetal-operator/pull/284#discussion_r317579040
return true
}
func (a *redfishiDracVirtualMediaAccessDetails) DisableCertificateVerification() bool {
return a.disableCertificateVerification
}
// DriverInfo returns a data structure to pass as the DriverInfo
// parameter when creating a node in Ironic. The structure is
// pre-populated with the access information, and the caller is
// expected to add any other information that might be needed (such as
// the kernel and ramdisk locations).
func (a *redfishiDracVirtualMediaAccessDetails) DriverInfo(bmcCreds Credentials) map[string]interface{} {
result := map[string]interface{}{
"redfish_system_id": a.path,
"redfish_username": bmcCreds.Username,
"redfish_password": bmcCreds.Password,
"redfish_address": getRedfishAddress(a.bmcType, a.host),
}
if a.disableCertificateVerification {
result["redfish_verify_ca"] = false
}
return result
}
// iDrac Virtual Media Overrides
func (a *redfishiDracVirtualMediaAccessDetails) Driver() string {
return "idrac"
}
func (a *redfishiDracVirtualMediaAccessDetails) BIOSInterface() string {
return "idrac-redfish"
}
func (a *redfishiDracVirtualMediaAccessDetails) BootInterface() string {
return "idrac-redfish-virtual-media"
}
func (a *redfishiDracVirtualMediaAccessDetails) ManagementInterface() string {
return "idrac-redfish"
}
func (a *redfishiDracVirtualMediaAccessDetails) PowerInterface() string {
return "idrac-redfish"
}
func (a *redfishiDracVirtualMediaAccessDetails) RAIDInterface() string {
return "idrac-redfish"
}
func (a *redfishiDracVirtualMediaAccessDetails) VendorInterface() string {
// NOTE(dtantsur): the idrac hardware type defaults to WSMAN vendor, we need to use the Redfish implementation.
return "idrac-redfish"
}
func (a *redfishiDracVirtualMediaAccessDetails) SupportsSecureBoot() bool {
return true
}
func (a *redfishiDracVirtualMediaAccessDetails) SupportsISOPreprovisioningImage() bool {
return true
}
func (a *redfishiDracVirtualMediaAccessDetails) RequiresProvisioningNetwork() bool {
return false
}
func (a *redfishiDracVirtualMediaAccessDetails) BuildBIOSSettings(firmwareConfig *FirmwareConfig) (settings []map[string]string, err error) {
if firmwareConfig != nil {
return nil, fmt.Errorf("firmware settings for %s are not supported", a.Driver())
}
return nil, nil
}