diff --git a/rsdclient/osc/v2/node.py b/rsdclient/osc/v2/node.py index bcd73a7..4160c6d 100644 --- a/rsdclient/osc/v2/node.py +++ b/rsdclient/osc/v2/node.py @@ -25,7 +25,8 @@ ARGUMENTS_NAME_MAPPING = { 'memory': 'memory_req', 'remote_drives': 'remote_drive_req', 'local_drives': 'local_drive_req', - 'ethernet': 'ethernet_interface_req' + 'ethernet': 'ethernet_interface_req', + 'security': 'security_req' } @@ -224,6 +225,29 @@ class ComposeNode(command.Command): 'EthernetInterfaces/LAN1"\n' ' }\n' '}]')) + parser.add_argument( + '--security', + dest='security', + type=json.loads, + metavar='', + help=('The security requirements of composed node. It may contain ' + 'one or more optional attributes:\n' + ' - TpmPresent: determine if Composed Node should be ' + 'equipped with TPM module\n\n' + ' - TpmInterfaceType: overrides TpmPresent parameter (if ' + 'specified TPM module expected). System must be equipped ' + 'with only defined TPM interface type.\n\n' + ' - TxtEnabled: determine if Composed Node should have ' + 'Trusted Execution Technology (TXT) mode enabled.\n\n' + ' - ClearTPMOnDelete: used to specify if TPM module should' + ' be cleared on composed node DELETE request.\n\n' + 'For example:\n' + '{\n' + ' "TpmPresent": True,\n' + ' "TpmInterfaceType": "TPM2_0",\n' + ' "TxtEnabled": True,\n' + ' "ClearTPMOnDelete": True\n' + '}')) return parser def take_action(self, parsed_args): diff --git a/rsdclient/tests/v2/test_node.py b/rsdclient/tests/v2/test_node.py index 03cb6c8..7d23d81 100644 --- a/rsdclient/tests/v2/test_node.py +++ b/rsdclient/tests/v2/test_node.py @@ -42,7 +42,8 @@ class NodeTest(testtools.TestCase): mock_node_collection.compose_node.assert_called_once_with( name='fake_name', description='fake_description', processor_req=None, memory_req=None, remote_drive_req=None, - local_drive_req=None, ethernet_interface_req=None) + local_drive_req=None, ethernet_interface_req=None, + security_req=None) self.mgr.client.get_node.assert_called_once_with(result) mock_node.assemble_node.assert_called_once() self.assertEqual('/redfish/v1/Nodes/1', result) diff --git a/rsdclient/v2/node.py b/rsdclient/v2/node.py index 41c0e9e..004d630 100644 --- a/rsdclient/v2/node.py +++ b/rsdclient/v2/node.py @@ -29,12 +29,13 @@ class NodeManager(base.Manager): def compose(self, name=None, description=None, processor_req=None, memory_req=None, remote_drive_req=None, local_drive_req=None, - ethernet_interface_req=None): + ethernet_interface_req=None, security_req=None): node_uri = self.client.get_node_collection().compose_node( name=name, description=description, processor_req=processor_req, memory_req=memory_req, remote_drive_req=remote_drive_req, local_drive_req=local_drive_req, - ethernet_interface_req=ethernet_interface_req) + ethernet_interface_req=ethernet_interface_req, + security_req=security_req) # Assume most of user will assemble node after composition, so assemble # node automatically here