diff --git a/redfish-client/redfish-client.py b/redfish-client/redfish-client.py index af2530f..c401e23 100755 --- a/redfish-client/redfish-client.py +++ b/redfish-client/redfish-client.py @@ -39,6 +39,7 @@ import docopt import logging import redfish import requests.packages.urllib3 +import jinja2 class ConfigFile(object): @@ -249,35 +250,9 @@ if __name__ == '__main__': sys.stderr.write(str(e.advices)) sys.exit(1) - # Display manager information - # TODO : Use a templating system - print('Redfish API version : %s' % remote_mgmt.get_api_version()) - print(remote_mgmt.Root.get_name()) - print('\n') - print('Managers information :') - print('----------------------') - for manager_index in sorted(remote_mgmt.Managers.managers_dict): - manager = remote_mgmt.Managers.managers_dict[manager_index] - print('\nManager id {} :').format(manager_index) - print('UUID : {}').format(manager.get_uuid()) - print('Type : {}').format(manager.get_type()) - print('Firmware version : {}').format(manager.get_firmware_version()) - print('State : {}').format(manager.get_status()) - print manager.get_managed_chassis() - print manager.get_managed_systems() - print('Ethernet interfaces :') - try : - for ethernetinterface_index in sorted(manager.ethernet_interfaces_collection.ethernet_interfaces_dict): - ei = manager.ethernet_interfaces_collection.ethernet_interfaces_dict[ethernetinterface_index] - print('\nEthernet Interface id {} :').format(ethernetinterface_index) - print(ei.get_name()) - print(ei.get_parameter('FQDN')) - print ei.get_ipv4() - print ei.get_ipv6() - except AttributeError: - # We don't have ethernet interfaces - pass - + # Display manager information using jinja2 template + template = jinja2_env.get_template("manager_info.template") + print template.render(r=remote_mgmt) # Main program @@ -348,6 +323,11 @@ if __name__ == '__main__': arguments['--conf_file'] = arguments['--conf_file'].replace('~', HOME) conf_file = ConfigFile(arguments['--conf_file']) + + # Initialize Template system (jinja2) + # TODO : set the template file location into cmd line default to /usr/share/python-redfish/templates ? + logger.debug("Initialize template system") + jinja2_env = jinja2.Environment(loader=jinja2.FileSystemLoader("templates")) if arguments['config'] is True: logger.debug("Config commands") diff --git a/redfish-client/templates/bla.templates b/redfish-client/templates/bla.templates new file mode 100644 index 0000000..23b6b61 --- /dev/null +++ b/redfish-client/templates/bla.templates @@ -0,0 +1,32 @@ + #======================================================================= + # print('Redfish API version : %s' % remote_mgmt.get_api_version()) + # print(remote_mgmt.Root.get_name()) + # print('\n') + # print('Managers information :') + # print('----------------------') + # for manager_index in sorted(remote_mgmt.Managers.managers_dict): + # manager = remote_mgmt.Managers.managers_dict[manager_index] + # print('\nManager id {} :').format(manager_index) + # print('UUID : {}').format(manager.get_uuid()) + # print('Type : {}').format(manager.get_type()) + # print('Firmware version : {}').format(manager.get_firmware_version()) + # print('State : {}').format(manager.get_status()) + # print manager.get_managed_chassis() + # print manager.get_managed_systems() + # print('Ethernet interfaces :') + # try : + # for ethernetinterface_index in sorted(manager.ethernet_interfaces_collection.ethernet_interfaces_dict): + # ei = manager.ethernet_interfaces_collection.ethernet_interfaces_dict[ethernetinterface_index] + # print('\nEthernet Interface id {} :').format(ethernetinterface_index) + # print(ei.get_name()) + # print(ei.get_parameter('FQDN')) + # print ei.get_ipv4() + # print ei.get_ipv6() + # except AttributeError: + # # We don't have ethernet interfaces + # pass + #======================================================================= + + +Redfish API version : remote_mgmt.get_api_version() +remote_mgmt.Root.get_name() \ No newline at end of file diff --git a/redfish-client/templates/manager_info.template b/redfish-client/templates/manager_info.template new file mode 100644 index 0000000..71961ba --- /dev/null +++ b/redfish-client/templates/manager_info.template @@ -0,0 +1,31 @@ +Redfish API version : {{ r.get_api_version() }} +{{ r.Root.get_name() }} + +Managers information : +====================== +{% for manager_index in r.Managers.managers_dict | sort %} +{%- set manager = r.Managers.managers_dict[manager_index] %} +Manager id {{ manager_index }}: +UUID : {{ manager.get_uuid() }} +Type : {{ manager.get_type() }} +Firmware version : {{ manager.get_firmware_version() }} +State : {{ manager.get_status() }} +Ethernet Interface : +{%- if manager.ethernet_interfaces_collection %} +{%- for ethernetinterface_index in manager.ethernet_interfaces_collection.ethernet_interfaces_dict | sort %} +{%- set ei = manager.ethernet_interfaces_collection.ethernet_interfaces_dict[ethernetinterface_index] %} + Ethernet Interface id {{ ethernetinterface_index }} : + {{ ei.get_name() }} + FQDN : {{ ei.get_fqdn() }} + Address ipv4 : {{ ei.get_ipv4() | join(', ') }} + Address ipv6 : {{ ei.get_ipv6() | join(', ') }} +{%- endfor %} +{%- else %} + This manager has no ethernet interface +{%- endif %} +Managed Chassis : + {{ manager.get_managed_chassis() | join(', ') }} +Managed System : + {{ manager.get_managed_systems() | join(', ') }} +---------------------------- +{% endfor %} \ No newline at end of file diff --git a/redfish/types.py b/redfish/types.py index 3a5bac1..fd6f5f0 100644 --- a/redfish/types.py +++ b/redfish/types.py @@ -218,11 +218,12 @@ class Managers(Base): # ) except exception.InvalidRedfishContentException: # This is to avoid invalid content from the mockup - pass + self.ethernet_interfaces_collection = None except AttributeError: # This means we don't have EthernetInterfaces - pass + self.ethernet_interfaces_collection = None + def get_firmware_version(self): '''Get firmware version of the manager diff --git a/requirements.txt b/requirements.txt index 8a4779b..01b840b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,3 +6,4 @@ pbr>=0.6,!=0.7,<1.0 #oslo.log>=1.0,<2.0 Babel>=1.3 tortilla>=0.4.1 +Jinja2>=2.7.3