starbops / kubevirtbmc

Power management for KubeVirt virtual machines through IPMI
Apache License 2.0
15 stars 2 forks source link

[FEATURE] Redfish support #2

Open starbops opened 5 months ago

starbops commented 5 months ago

Is your feature request related to a problem? Please describe.

Currently, KubeBMC only supports limited IPMI functionalities for KubeVirt VMs. It would also be helpful to support Redfish as it is newer, feature-rich, and gradually becomes dominant in such areas.

Describe the solution you'd like

A set of Redfish APIs that supports users to communicate with to instruct KubeBMC to:

for KubeVirt VMs.

Describe alternatives you've considered

N/A

Additional context

We could implement the following resources to provide a minimum viable functionalities. Kudos to @rwleea!

{
    "@odata.type": "#ServiceRoot.v1_16_1.ServiceRoot",
    "@odata.id": "/redfish/v1/",
    "Id": "RootService",
    "Name": "Root Service",
    "Vendor": "Contoso",
    "Product": "WidgetDeluxe 8744",
    "RedfishVersion": "1.6.0",
    "UUID": "92384634-2938-2342-8820-489239905423",
    "Systems": {
        "@odata.id": "/redfish/v1/Systems"
    }
}
{
  "@odata.type": "#ComputerSystemCollection.ComputerSystemCollection",
  "Name": "Computer System Collection",
  "@odata.id": "/redfish/v1/Systems",
  "Members@odata.count": 1,
  "Members": [
    {
      "@odata.id": "/redfish/v1/Systems/1"
    }
  ]
}
{
  "@odata.id": "/redfish/v1/Systems/1",
  "@odata.type": "#ComputerSystem.v1_22_0.ComputerSystem",
  "Id": "1",
  "Name": "My Computer System",
  "UUID": "00000000-0000-0000-0000-000000000000",
  "HostName": "web-srv344",
  "Status": {
    "State": "Enabled",
    "Health": "Warning",
    "HealthRollup": "Warning",

  },
  "PowerState": "On",
  "Boot": {
    "BootSourceOverrideEnabled": "Once",
    "BootSourceOverrideMode": "UEFI",
    "BootSourceOverrideTarget": "Pxe",
    "BootSourceOverrideTarget@Redfish.AllowableValues": [
      "None",
      "Pxe",
      "Cd",
      "Hdd"
    ]
  },
  "VirtualMedia": {
    "@odata.id": "/redfish/v1/Systems/1/VirtualMedia"
  },
  "Actions": {
    "#ComputerSystem.Reset": {
      "target": "/redfish/v1/Systems/1/Actions/ComputerSystem.Reset",
      "@Redfish.ActionInfo": "/redfish/v1/Systems"
    }
  }
}
{
    "@odata.type": "#ActionInfo.v1_4_1.ActionInfo",
    "Id": "ResetActionInfo",
    "Name": "Reset Action Info",
    "Parameters": [
        {
            "Name": "ResetType",
            "Required": true,
            "DataType": "String",
            "AllowableValues": [
                "On",
                "ForceOff",
                "GracefulShutdown",
                "GracefulRestart",
                "ForceRestart",
                "Nmi",
                "ForceOn",
                "PushPowerButton"
            ]
        }
    ],
    "@odata.id": "/redfish/v1/Systems/1/ResetActionInfo"
}
{
  "@odata.type": "#VirtualMediaCollection.VirtualMediaCollection",
  "@odata.id": "/redfish/v1/Systems/1/VirtualMedia",
  "Name": "Virtual Media Services",
  "Description": "Redfish Manager Virtual Media Services Settings",
  "Members@odata.count": 1,
  "Members": [
    {
      "@odata.id": "/redfish/v1/Systems/1/VirtualMedia/CD1"
    }
  ]
}
{
  "@odata.type": "#VirtualMedia.v1_6_3.VirtualMedia",
  "@odata.id": "/redfish/v1/Systems/1/VirtualMedia/CD1",
  "Id": "CD1",
  "Name": "Virtual CD",
  "MediaTypes": [
    "CD",
    "DVD"
  ],
  "Image": "http://myserver/mymedia-read-only.iso",
  "ImageName": "mymedia-read-only.iso",
  "ConnectedVia": "URI",
  "Inserted": true,
  "WriteProtected": true,
  "UserName": "admin",
  "Password": "admin",
  "TransferProtocolType": "HTTP",
  "TransferProtocolType@Redfish.AllowableValues": [
    "HTTP",
    "HTTPS"
  ],
  "TransferMethod": "Stream",
  "Actions": {
    "#VirtualMedia.InsertMedia": {
      "target": "/redfish/v1/Systems/1/VirtualMedia/CD1/Actions/VirtualMedia.InsertMedia",
      "@Redfish.ActionInfo": "/redfish/v1/Systems/1/VirtualMedia/CD1/InsertMediaActionInfo"
    },
    "#VirtualMedia.EjectMedia": {
      "target": "/redfish/v1/Systems/1/VirtualMedia/CD1/Actions/VirtualMedia.EjectMedia"
    }
  }
}
{
  "@odata.type": "#ActionInfo.v1_4_1.ActionInfo",
  "@odata.id": "/redfish/v1/Systems/1/VirtualMedia/CD1/InsertMediaActionInfo",
  "Id": "InsertMediaActionInfo",
  "Name": "Insert Media Action Info",
  "Parameters": [
    {
      "Name": "Image",
      "Required": true,
      "DataType": "String"
    },
    {
      "Name": "Inserted",
      "Required": false,
      "DataType": "Boolean"
    },
    {
      "Name": "Writable",
      "Required": true,
      "DataType": "Boolean"
    },
    {
      "Name": "UserName",
      "Required": false,
      "DataType": "String"
    },
    {
      "Name": "Password",
      "Required": false,
      "DataType": "String"
    },
    {
      "Name": "TransferProtocolType",
      "Required": true,
      "DataType": "String",
      "AllowableValues": [
        "HTTP",
        "HTTPS"
      ]
    },
    {
      "Name": "TransferMethod",
      "Required": true,
      "DataType": "String",
      "AllowableValues": [
        "Stream"
      ]
    }
  ]
}