Exemple #1
0
def main():
    result = {}
    module = AnsibleModule(argument_spec=dict(
        category=dict(required=True, type='str'),
        command=dict(required=True, type='str'),
        baseuri=dict(required=True, type='str'),
        user=dict(required=True, type='str'),
        password=dict(required=True, type='str', no_log=True),
        userid=dict(required=False, type='str'),
        username=dict(required=False, type='str'),
        userpswd=dict(required=False, type='str', no_log=True),
        userrole=dict(required=False, type='str'),
        bootdevice=dict(required=False, type='str'),
        mgr_attr_name=dict(required=False, type='str'),
        mgr_attr_value=dict(required=False, type='str'),
        bios_attr_name=dict(required=False, type='str'),
        bios_attr_value=dict(required=False, type='str'),
    ),
                           supports_check_mode=False)

    category = module.params['category']
    command = module.params['command']
    bootdevice = module.params['bootdevice']

    # admin credentials used for authentication
    creds = {'user': module.params['user'], 'pswd': module.params['password']}

    # user to add/modify/delete
    user = {
        'userid': module.params['userid'],
        'username': module.params['username'],
        'userpswd': module.params['userpswd'],
        'userrole': module.params['userrole']
    }

    # Manager attributes to update
    mgr_attributes = {
        'mgr_attr_name': module.params['mgr_attr_name'],
        'mgr_attr_value': module.params['mgr_attr_value']
    }
    # BIOS attributes to update
    bios_attributes = {
        'bios_attr_name': module.params['bios_attr_name'],
        'bios_attr_value': module.params['bios_attr_value']
    }

    # Build root URI
    root_uri = "https://" + module.params['baseuri']
    rf_uri = "/redfish/v1"
    rf_utils = RedfishUtils(creds, root_uri)

    # Organize by Categories / Commands
    if category == "Inventory":
        # execute only if we find a System resource
        result = rf_utils._find_systems_resource(rf_uri)
        if result['ret'] is False:
            module.fail_json(msg=result['msg'])

        # General
        if command == "GetSystemInventory":
            result = rf_utils.get_system_inventory()

        # Components
        elif command == "GetPsuInventory":
            result = rf_utils.get_psu_inventory()
        elif command == "GetCpuInventory":
            result = rf_utils.get_cpu_inventory()
        elif command == "GetNicInventory":
            result = rf_utils.get_nic_inventory()

        # Storage
        elif command == "GetStorageControllerInventory":
            result = rf_utils.get_storage_controller_inventory()
        elif command == "GetDiskInventory":
            result = rf_utils.get_disk_inventory()

        # Chassis
        elif command == "GetFanInventory":
            # execute only if we find Chassis resource
            result = rf_utils._find_chassis_resource(rf_uri)
            if result['ret'] is False:
                module.fail_json(msg=result['msg'])
            result = rf_utils.get_fan_inventory()

        else:
            result = {'ret': False, 'msg': 'Invalid Command'}

    elif category == "Accounts":
        # execute only if we find an Account service resource
        result = rf_utils._find_accountservice_resource(rf_uri)
        if result['ret'] is False:
            module.fail_json(msg=result['msg'])

        if command == "ListUsers":
            result = rf_utils.list_users(user)
        elif command == "AddUser":
            result = rf_utils.add_user(user)
        elif command == "EnableUser":
            result = rf_utils.enable_user(user)
        elif command == "DeleteUser":
            result = rf_utils.delete_user(user)
        elif command == "DisableUser":
            result = rf_utils.disable_user(user)
        elif command == "UpdateUserRole":
            result = rf_utils.update_user_role(user)
        elif command == "UpdateUserPassword":
            result = rf_utils.update_user_password(user)
        else:
            result = {'ret': False, 'msg': 'Invalid Command'}

    elif category == "System":
        # execute only if we find a System resource
        result = rf_utils._find_systems_resource(rf_uri)
        if result['ret'] is False:
            module.fail_json(msg=result['msg'])

        if command == "PowerOn" or command == "PowerForceOff" \
            or command == "PowerGracefulRestart" or command == "PowerGracefulShutdown":
            result = rf_utils.manage_system_power(command)
        elif command == "GetBiosAttributes":
            result = rf_utils.get_bios_attributes()
        elif command == "GetBiosBootOrder":
            result = rf_utils.get_bios_boot_order()
        elif command == "SetOneTimeBoot":
            result = rf_utils.set_one_time_boot_device(bootdevice)
        elif command == "SetBiosDefaultSettings":
            result = rf_utils.set_bios_default_settings()
        elif command == "SetBiosAttributes":
            result = rf_utils.set_bios_attributes(bios_attributes)
        elif command == "CreateBiosConfigJob":
            # execute only if we find a Managers resource
            result = rf_utils._find_managers_resource(rf_uri)
            if result['ret'] is False:
                module.fail_json(msg=result['msg'])
            result = rf_utils.create_bios_config_job()
        else:
            result = {'ret': False, 'msg': 'Invalid Command'}

    elif category == "Update":
        # execute only if we find UpdateService resources
        result = rf_utils._find_updateservice_resource(rf_uri)
        if result['ret'] is False:
            module.fail_json(msg=result['msg'])

        if command == "GetFirmwareInventory":
            result = rf_utils.get_firmware_inventory()
        else:
            result = {'ret': False, 'msg': 'Invalid Command'}

    elif category == "Manager":
        # execute only if we find a Manager service resource
        result = rf_utils._find_managers_resource(rf_uri)
        if result['ret'] is False:
            module.fail_json(msg=result['msg'])

        if command == "GracefulRestart":
            result = rf_utils.restart_manager_gracefully()
        elif command == "GetAttributes":
            result = rf_utils.get_manager_attributes()
        elif command == "SetAttributes":
            result = rf_utils.set_manager_attributes(mgr_attributes)

        # Logs
        elif command == "GetLogs":
            result = rf_utils.get_logs()
        elif command == "ClearLogs":
            result = rf_utils.clear_logs()
        else:
            result = {'ret': False, 'msg': 'Invalid Command'}

    else:
        result = {'ret': False, 'msg': 'Invalid Category'}

    # Return data back or fail with proper message
    if result['ret'] is True:
        del result['ret']
        module.exit_json(result=result)
    else:
        module.fail_json(msg=result['msg'])
def main():
    result = {}
    module = AnsibleModule(argument_spec=dict(
        category=dict(required=True, type='str', default=None),
        command=dict(required=True, type='str', default=None),
        baseuri=dict(required=True, type='str', default=None),
        user=dict(required=False, type='str', default='root'),
        password=dict(required=False,
                      type='str',
                      default='calvin',
                      no_log=True),
        userid=dict(required=False, type='str', default=None),
        username=dict(required=False, type='str', default=None),
        userpswd=dict(required=False, type='str', default=None, no_log=True),
        userrole=dict(required=False, type='str', default=None),
        bootdevice=dict(required=False, type='str', default=None),
        mgr_attr_name=dict(required=False, type='str', default=None),
        mgr_attr_value=dict(required=False, type='str', default=None),
        bios_attr_name=dict(required=False, type='str', default=None),
        bios_attr_value=dict(required=False, type='str', default=None),
    ),
                           supports_check_mode=False)

    # Disable insecure-certificate-warning message
    requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

    category = module.params['category']
    command = module.params['command']
    bootdevice = module.params['bootdevice']

    # admin credentials used for authentication
    creds = {'user': module.params['user'], 'pswd': module.params['password']}
    # user to add/modify/delete
    user = {
        'userid': module.params['userid'],
        'username': module.params['username'],
        'userpswd': module.params['userpswd'],
        'userrole': module.params['userrole']
    }
    # Manager attributes to update
    mgr_attributes = {
        'mgr_attr_name': module.params['mgr_attr_name'],
        'mgr_attr_value': module.params['mgr_attr_value']
    }
    # BIOS attributes to update
    bios_attributes = {
        'bios_attr_name': module.params['bios_attr_name'],
        'bios_attr_value': module.params['bios_attr_value']
    }

    # Build root URI
    root_uri = "https://" + module.params['baseuri']
    rf_uri = "/redfish/v1"
    rf_utils = RedfishUtils(creds, root_uri)

    # Organize by Categories / Commands
    if category == "Inventory":
        # execute only if we find a System resource
        result = rf_utils._find_systems_resource(rf_uri)
        if result['ret'] == False: module.fail_json(msg=result['msg'])

        # General
        if command == "GetSystemInventory":
            result = rf_utils.get_system_inventory()

        # Components
        elif command == "GetPsuInventory":
            result = rf_utils.get_psu_inventory()
        elif command == "GetCpuInventory":
            result = rf_utils.get_cpu_inventory("/Processors")
        elif command == "GetNicInventory":
            result = rf_utils.get_nic_inventory("/EthernetInterfaces")

        # Storage
        elif command == "GetStorageControllerInventory":
            result = rf_utils.get_storage_controller_info()
        elif command == "GetDiskInventory":
            result = rf_utils.get_disk_info()

        # Chassis
        elif command == "GetFanInventory":
            # execute only if we find Chassis resource
            result = rf_utils._find_chassis_resource(rf_uri)
            if result['ret'] == False: module.fail_json(msg=result['msg'])
            result = rf_utils.get_fan_inventory("/Thermal")

        else:
            result = {'ret': False, 'msg': 'Invalid Command'}

    elif category == "Accounts":
        # execute only if we find an Account service resource
        result = rf_utils._find_accountservice_resource(rf_uri)
        if result['ret'] == False: module.fail_json(msg=result['msg'])

        if command == "ListUsers":
            result = rf_utils.list_users(user)
        elif command == "AddUser":
            result = rf_utils.add_user(user)
        elif command == "EnableUser":
            result = rf_utils.enable_user(user)
        elif command == "DeleteUser":
            result = rf_utils.delete_user(user)
        elif command == "DisableUser":
            result = rf_utils.disable_user(user)
        elif command == "UpdateUserRole":
            result = rf_utils.update_user_role(user)
        elif command == "UpdateUserPassword":
            result = rf_utils.update_user_password(user)
        else:
            result = {'ret': False, 'msg': 'Invalid Command'}

    elif category == "System":
        # execute only if we find a System resource
        result = rf_utils._find_systems_resource(rf_uri)
        if result['ret'] == False: module.fail_json(msg=result['msg'])

        if command == "PowerOn" or command == "PowerForceOff" or command == "PowerGracefulRestart" or command == "PowerGracefulShutdown":
            result = rf_utils.manage_system_power(
                "/Actions/ComputerSystem.Reset", command)
        elif command == "GetBiosAttributes":
            result = rf_utils.get_bios_attributes("/Bios")
        elif command == "GetBiosBootOrder":
            result = rf_utils.get_bios_boot_order("/Bios", "/BootSources")
        elif command == "SetOneTimeBoot":
            result = rf_utils.set_one_time_boot_device(bootdevice)
        elif command == "SetBiosDefaultSettings":
            result = rf_utils.set_bios_default_settings(
                "/Bios/Actions/Bios.ResetBios")
        elif command == "SetBiosAttributes":
            result = rf_utils.set_bios_attributes("/Bios/Settings",
                                                  bios_attributes)
        elif command == "CreateBiosConfigJob":
            # execute only if we find a Managers resource
            result = rf_utils._find_managers_resource(rf_uri)
            if result['ret'] == False: module.fail_json(msg=result['msg'])
            result = rf_utils.create_bios_config_job("/Bios/Settings", "/Jobs")
        else:
            result = {'ret': False, 'msg': 'Invalid Command'}

    elif category == "Update":
        # execute only if we find UpdateService resources
        result = rf_utils._find_updateservice_resource(rf_uri)
        if result['ret'] == False: module.fail_json(msg=result['msg'])

        if command == "GetFirmwareInventory":
            result = rf_utils.get_firmware_inventory()
        else:
            result = {'ret': False, 'msg': 'Invalid Command'}

    elif category == "Manager":
        # execute only if we find a Manager service resource
        result = rf_utils._find_managers_resource(rf_uri)
        if result['ret'] == False: module.fail_json(msg=result['msg'])

        # The URIs being passed are hard-coded but could easily be built dynamically by
        # looking in resources Links["Oem"] and Actions["Oem"]["target"] under manager_uri.
        # Leaving here for reference only so it can be adapted for other OEMs.
        if command == "GracefulRestart":
            result = rf_utils.restart_manager_gracefully(
                "/Actions/Manager.Reset")
        elif command == "GetAttributes":
            result = rf_utils.get_manager_attributes("/Attributes")
        elif command == "SetAttributes":
            result = rf_utils.set_manager_attributes("/Attributes",
                                                     mgr_attributes)
        elif command == "SetDefaultSettings":
            result = rf_utils.set_manager_default_settings(
                "/Actions/Oem/DellManager.ResetToDefaults")

        # Logs
        elif command == "ViewLogs":
            result = rf_utils.view_logs()
        elif command == "ClearLogs":
            result = rf_utils.clear_logs()
        else:
            result = {'ret': False, 'msg': 'Invalid Command'}

    else:
        result = {'ret': False, 'msg': 'Invalid Category'}

    # Return data back or fail with proper message
    if result['ret'] == True:
        del result['ret']  # Don't want to pass this back
        module.exit_json(result=result)
    else:
        module.fail_json(msg=result['msg'])