config/sysinv/cgts-client/cgts-client/cgtsclient/v1/device_image_shell.py

167 lines
6.1 KiB
Python

#
# Copyright (c) 2020-2021 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
from cgtsclient.common import utils
from cgtsclient import exc
import os
def _print_device_image_show(obj):
fields = ['uuid', 'bitstream_type',
'pci_vendor', 'pci_device',
'bitstream_id', 'key_signature', 'revoke_key_id',
'name', 'description', 'image_version',
'applied', 'applied_labels', 'bmc', 'retimer_included']
if isinstance(obj, dict):
data = [(f, obj.get(f, '')) for f in fields]
else:
data = [(f, getattr(obj, f, '')) for f in fields]
utils.print_tuple_list(data)
@utils.arg('device_image_id',
metavar='<device_image_id>',
help="UUID or name of device_image")
def do_device_image_show(cc, args):
"""Show device image details."""
device_image = cc.device_image.get(args.device_image_id)
_print_device_image_show(device_image)
def do_device_image_list(cc, args):
"""List device images."""
labels = ['uuid', 'bitstream_type', 'pci_vendor', 'pci_device',
'bitstream_id', 'key_signature', 'revoke_key_id',
'name', 'description', 'image_version', 'bmc', 'retimer_included',
'applied', 'applied_labels']
fields = ['uuid', 'bitstream_type', 'pci_vendor', 'pci_device',
'bitstream_id', 'key_signature', 'revoke_key_id',
'name', 'description', 'image_version', 'bmc', 'retimer_included',
'applied', 'applied_labels']
device_images = cc.device_image.list()
utils.print_list(device_images, fields, labels, sortby=1)
@utils.arg('bitstream_file',
metavar='<bitstream_file>',
help='Path to Bitstream file [REQUIRED] ')
@utils.arg('bitstream_type',
metavar='<bitstream_type>',
choices=['root-key', 'functional', 'key-revocation'],
help="Type of the device image bitstream [REQUIRED]")
@utils.arg('pci_vendor',
metavar='<pci_vendor>',
help="PCI vendor (hexadecimal) of the device image [REQUIRED]")
@utils.arg('pci_device',
metavar='<pci_device>',
help="PCI device (hexadecimal) of the device image [REQUIRED]")
@utils.arg('--bitstream-id',
metavar='<bitstream_id>',
help='Bitstream ID (hexadecimal) of the functional device image')
@utils.arg('--key-signature',
metavar='<key_signature>',
help='Key signature (hexadecimal) of the root-key device image')
@utils.arg('--revoke-key-id',
metavar='<revoke_key_id>',
help='Key ID of the key revocation device image')
@utils.arg('--name',
metavar='<name>',
help='Name of the device image')
@utils.arg('--description',
metavar='<description>',
help='Description of the device image')
@utils.arg('--image-version',
metavar='<version>',
help='Version of the device image')
@utils.arg('-u', '--uuid',
metavar='<uuid>',
help='UUID of the device image')
@utils.arg('--bmc',
metavar='<true/false>',
help='BMC image')
@utils.arg('--retimer-included',
metavar='<true/false>',
help='Retimer firmware included in BMC FW binary')
def do_device_image_upload(cc, args):
"""Upload a device image."""
if not os.path.isfile(args.bitstream_file):
raise exc.CommandError('Bitstream file does not exist: %s' %
args.bitstream_file)
field_list = ['uuid', 'bitstream_type', 'pci_vendor', 'pci_device',
'bitstream_id', 'key_signature', 'revoke_key_id',
'name', 'description', 'image_version', 'bmc', 'retimer_included']
# Prune input fields down to required/expected values
user_fields = dict((k, v) for (k, v) in vars(args).items()
if k in field_list and not (v is None))
try:
response = cc.device_image.upload(args.bitstream_file, **user_fields)
error = response.get('error')
if error:
raise exc.CommandError("%s" % error)
except exc.HTTPNotFound:
raise exc.CommandError(
'Device image not uploaded for %s. No response.' % args.bitstream_file)
except Exception as e:
raise exc.CommandError('Device image not uploaded for %s: %s' %
(args.bitstream_file, e))
else:
device_image = response.get('device_image')
_print_device_image_show(device_image)
@utils.arg('device_image_uuid', metavar='<device_image_uuid>',
help='UUID of the device image')
@utils.arg('attributes',
metavar='<name=value>',
nargs='*',
action='append',
default=[],
help="List of device labels")
def do_device_image_apply(cc, args):
"""Apply the device image"""
attributes = utils.args_array_to_list_dict(args.attributes[0])
try:
response = cc.device_image.apply(args.device_image_uuid,
attributes)
_print_device_image_show(response)
except exc.HTTPNotFound:
raise exc.CommandError('Device image apply failed')
@utils.arg('device_image_uuid', metavar='<device_image_uuid>',
help='UUID of the device image')
@utils.arg('attributes',
metavar='<name=value>',
nargs='*',
action='append',
default=[],
help="List of device labels")
def do_device_image_remove(cc, args):
"""Remove the device image"""
attributes = utils.args_array_to_list_dict(args.attributes[0])
try:
response = cc.device_image.remove(args.device_image_uuid,
attributes)
_print_device_image_show(response)
except exc.HTTPNotFound:
raise exc.CommandError('Device image remove failed')
@utils.arg('device_image_uuid',
metavar='<device_image_uuid>',
help="UUID of device image entry")
def do_device_image_delete(cc, args):
"""Delete a device image."""
cc.device_image.delete(args.device_image_uuid)
print('Deleted device image: %s' % args.device_image_uuid)