summaryrefslogtreecommitdiff
path: root/lib/ansible/modules/remote_management/redfish/redfish_command.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ansible/modules/remote_management/redfish/redfish_command.py')
-rw-r--r--lib/ansible/modules/remote_management/redfish/redfish_command.py568
1 files changed, 0 insertions, 568 deletions
diff --git a/lib/ansible/modules/remote_management/redfish/redfish_command.py b/lib/ansible/modules/remote_management/redfish/redfish_command.py
deleted file mode 100644
index 4fbd8e3f9b..0000000000
--- a/lib/ansible/modules/remote_management/redfish/redfish_command.py
+++ /dev/null
@@ -1,568 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2017-2018 Dell EMC Inc.
-# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-ANSIBLE_METADATA = {'status': ['preview'],
- 'supported_by': 'community',
- 'metadata_version': '1.1'}
-
-DOCUMENTATION = '''
----
-module: redfish_command
-version_added: "2.7"
-short_description: Manages Out-Of-Band controllers using Redfish APIs
-description:
- - Builds Redfish URIs locally and sends them to remote OOB controllers to
- perform an action.
- - Manages OOB controller ex. reboot, log management.
- - Manages OOB controller users ex. add, remove, update.
- - Manages system power ex. on, off, graceful and forced reboot.
-options:
- category:
- required: true
- description:
- - Category to execute on OOB controller
- type: str
- command:
- required: true
- description:
- - List of commands to execute on OOB controller
- type: list
- baseuri:
- required: true
- description:
- - Base URI of OOB controller
- type: str
- username:
- required: true
- description:
- - Username for authentication with OOB controller
- type: str
- version_added: "2.8"
- password:
- required: true
- description:
- - Password for authentication with OOB controller
- type: str
- id:
- required: false
- aliases: [ account_id ]
- description:
- - ID of account to delete/modify
- type: str
- version_added: "2.8"
- new_username:
- required: false
- aliases: [ account_username ]
- description:
- - Username of account to add/delete/modify
- type: str
- version_added: "2.8"
- new_password:
- required: false
- aliases: [ account_password ]
- description:
- - New password of account to add/modify
- type: str
- version_added: "2.8"
- roleid:
- required: false
- aliases: [ account_roleid ]
- description:
- - Role of account to add/modify
- type: str
- version_added: "2.8"
- bootdevice:
- required: false
- description:
- - bootdevice when setting boot configuration
- type: str
- timeout:
- description:
- - Timeout in seconds for URL requests to OOB controller
- default: 10
- type: int
- version_added: '2.8'
- uefi_target:
- required: false
- description:
- - UEFI target when bootdevice is "UefiTarget"
- type: str
- version_added: "2.9"
- boot_next:
- required: false
- description:
- - BootNext target when bootdevice is "UefiBootNext"
- type: str
- version_added: "2.9"
- update_username:
- required: false
- aliases: [ account_updatename ]
- description:
- - new update user name for account_username
- type: str
- version_added: "2.10"
- account_properties:
- required: false
- description:
- - properties of account service to update
- type: dict
- version_added: "2.10"
- resource_id:
- required: false
- description:
- - The ID of the System, Manager or Chassis to modify
- type: str
- version_added: "2.10"
- update_image_uri:
- required: false
- description:
- - The URI of the image for the update
- type: str
- version_added: "2.10"
- update_protocol:
- required: false
- description:
- - The protocol for the update
- type: str
- version_added: "2.10"
- update_targets:
- required: false
- description:
- - The list of target resource URIs to apply the update to
- type: list
- elements: str
- version_added: "2.10"
- update_creds:
- required: false
- description:
- - The credentials for retrieving the update image
- type: dict
- suboptions:
- username:
- required: false
- description:
- - The username for retrieving the update image
- type: str
- password:
- required: false
- description:
- - The password for retrieving the update image
- type: str
- version_added: "2.10"
-
-author: "Jose Delarosa (@jose-delarosa)"
-'''
-
-EXAMPLES = '''
- - name: Restart system power gracefully
- redfish_command:
- category: Systems
- command: PowerGracefulRestart
- resource_id: 437XR1138R2
- baseuri: "{{ baseuri }}"
- username: "{{ username }}"
- password: "{{ password }}"
-
- - name: Set one-time boot device to {{ bootdevice }}
- redfish_command:
- category: Systems
- command: SetOneTimeBoot
- resource_id: 437XR1138R2
- bootdevice: "{{ bootdevice }}"
- baseuri: "{{ baseuri }}"
- username: "{{ username }}"
- password: "{{ password }}"
-
- - name: Set one-time boot device to UefiTarget of "/0x31/0x33/0x01/0x01"
- redfish_command:
- category: Systems
- command: SetOneTimeBoot
- resource_id: 437XR1138R2
- bootdevice: "UefiTarget"
- uefi_target: "/0x31/0x33/0x01/0x01"
- baseuri: "{{ baseuri }}"
- username: "{{ username }}"
- password: "{{ password }}"
-
- - name: Set one-time boot device to BootNext target of "Boot0001"
- redfish_command:
- category: Systems
- command: SetOneTimeBoot
- resource_id: 437XR1138R2
- bootdevice: "UefiBootNext"
- boot_next: "Boot0001"
- baseuri: "{{ baseuri }}"
- username: "{{ username }}"
- password: "{{ password }}"
-
- - name: Set chassis indicator LED to blink
- redfish_command:
- category: Chassis
- command: IndicatorLedBlink
- resource_id: 1U
- baseuri: "{{ baseuri }}"
- username: "{{ username }}"
- password: "{{ password }}"
-
- - name: Add user
- redfish_command:
- category: Accounts
- command: AddUser
- baseuri: "{{ baseuri }}"
- username: "{{ username }}"
- password: "{{ password }}"
- new_username: "{{ new_username }}"
- new_password: "{{ new_password }}"
- roleid: "{{ roleid }}"
-
- - name: Add user using new option aliases
- redfish_command:
- category: Accounts
- command: AddUser
- baseuri: "{{ baseuri }}"
- username: "{{ username }}"
- password: "{{ password }}"
- account_username: "{{ account_username }}"
- account_password: "{{ account_password }}"
- account_roleid: "{{ account_roleid }}"
-
- - name: Delete user
- redfish_command:
- category: Accounts
- command: DeleteUser
- baseuri: "{{ baseuri }}"
- username: "{{ username }}"
- password: "{{ password }}"
- account_username: "{{ account_username }}"
-
- - name: Disable user
- redfish_command:
- category: Accounts
- command: DisableUser
- baseuri: "{{ baseuri }}"
- username: "{{ username }}"
- password: "{{ password }}"
- account_username: "{{ account_username }}"
-
- - name: Enable user
- redfish_command:
- category: Accounts
- command: EnableUser
- baseuri: "{{ baseuri }}"
- username: "{{ username }}"
- password: "{{ password }}"
- account_username: "{{ account_username }}"
-
- - name: Add and enable user
- redfish_command:
- category: Accounts
- command: AddUser,EnableUser
- baseuri: "{{ baseuri }}"
- username: "{{ username }}"
- password: "{{ password }}"
- new_username: "{{ new_username }}"
- new_password: "{{ new_password }}"
- roleid: "{{ roleid }}"
-
- - name: Update user password
- redfish_command:
- category: Accounts
- command: UpdateUserPassword
- baseuri: "{{ baseuri }}"
- username: "{{ username }}"
- password: "{{ password }}"
- account_username: "{{ account_username }}"
- account_password: "{{ account_password }}"
-
- - name: Update user role
- redfish_command:
- category: Accounts
- command: UpdateUserRole
- baseuri: "{{ baseuri }}"
- username: "{{ username }}"
- password: "{{ password }}"
- account_username: "{{ account_username }}"
- roleid: "{{ roleid }}"
-
- - name: Update user name
- redfish_command:
- category: Accounts
- command: UpdateUserName
- baseuri: "{{ baseuri }}"
- username: "{{ username }}"
- password: "{{ password }}"
- account_username: "{{ account_username }}"
- account_updatename: "{{ account_updatename }}"
-
- - name: Update user name
- redfish_command:
- category: Accounts
- command: UpdateUserName
- baseuri: "{{ baseuri }}"
- username: "{{ username }}"
- password: "{{ password }}"
- account_username: "{{ account_username }}"
- update_username: "{{ update_username }}"
-
- - name: Update AccountService properties
- redfish_command:
- category: Accounts
- command: UpdateAccountServiceProperties
- baseuri: "{{ baseuri }}"
- username: "{{ username }}"
- password: "{{ password }}"
- account_properties:
- AccountLockoutThreshold: 5
- AccountLockoutDuration: 600
-
- - name: Clear Manager Logs with a timeout of 20 seconds
- redfish_command:
- category: Manager
- command: ClearLogs
- resource_id: BMC
- baseuri: "{{ baseuri }}"
- username: "{{ username }}"
- password: "{{ password }}"
- timeout: 20
-
- - name: Clear Sessions
- redfish_command:
- category: Sessions
- command: ClearSessions
- baseuri: "{{ baseuri }}"
- username: "{{ username }}"
- password: "{{ password }}"
-
- - name: Simple update
- redfish_command:
- category: Update
- command: SimpleUpdate
- baseuri: "{{ baseuri }}"
- username: "{{ username }}"
- password: "{{ password }}"
- update_image_uri: https://example.com/myupdate.img
-
- - name: Simple update with additional options
- redfish_command:
- category: Update
- command: SimpleUpdate
- baseuri: "{{ baseuri }}"
- username: "{{ username }}"
- password: "{{ password }}"
- update_image_uri: //example.com/myupdate.img
- update_protocol: FTP
- update_targets:
- - /redfish/v1/UpdateService/FirmwareInventory/BMC
- update_creds:
- username: operator
- password: supersecretpwd
-'''
-
-RETURN = '''
-msg:
- description: Message with action result or error description
- returned: always
- type: str
- sample: "Action was successful"
-'''
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.redfish_utils import RedfishUtils
-from ansible.module_utils._text import to_native
-
-
-# More will be added as module features are expanded
-CATEGORY_COMMANDS_ALL = {
- "Systems": ["PowerOn", "PowerForceOff", "PowerForceRestart", "PowerGracefulRestart",
- "PowerGracefulShutdown", "PowerReboot", "SetOneTimeBoot"],
- "Chassis": ["IndicatorLedOn", "IndicatorLedOff", "IndicatorLedBlink"],
- "Accounts": ["AddUser", "EnableUser", "DeleteUser", "DisableUser",
- "UpdateUserRole", "UpdateUserPassword", "UpdateUserName",
- "UpdateAccountServiceProperties"],
- "Sessions": ["ClearSessions"],
- "Manager": ["GracefulRestart", "ClearLogs"],
- "Update": ["SimpleUpdate"]
-}
-
-
-def main():
- result = {}
- module = AnsibleModule(
- argument_spec=dict(
- category=dict(required=True),
- command=dict(required=True, type='list'),
- baseuri=dict(required=True),
- username=dict(required=True),
- password=dict(required=True, no_log=True),
- id=dict(aliases=["account_id"]),
- new_username=dict(aliases=["account_username"]),
- new_password=dict(aliases=["account_password"], no_log=True),
- roleid=dict(aliases=["account_roleid"]),
- update_username=dict(type='str', aliases=["account_updatename"]),
- account_properties=dict(type='dict', default={}),
- bootdevice=dict(),
- timeout=dict(type='int', default=10),
- uefi_target=dict(),
- boot_next=dict(),
- resource_id=dict(),
- update_image_uri=dict(),
- update_protocol=dict(),
- update_targets=dict(type='list', elements='str', default=[]),
- update_creds=dict(
- type='dict',
- options=dict(
- username=dict(),
- password=dict()
- )
- )
- ),
- supports_check_mode=False
- )
-
- category = module.params['category']
- command_list = module.params['command']
-
- # admin credentials used for authentication
- creds = {'user': module.params['username'],
- 'pswd': module.params['password']}
-
- # user to add/modify/delete
- user = {'account_id': module.params['id'],
- 'account_username': module.params['new_username'],
- 'account_password': module.params['new_password'],
- 'account_roleid': module.params['roleid'],
- 'account_updatename': module.params['update_username'],
- 'account_properties': module.params['account_properties']}
-
- # timeout
- timeout = module.params['timeout']
-
- # System, Manager or Chassis ID to modify
- resource_id = module.params['resource_id']
-
- # update options
- update_opts = {
- 'update_image_uri': module.params['update_image_uri'],
- 'update_protocol': module.params['update_protocol'],
- 'update_targets': module.params['update_targets'],
- 'update_creds': module.params['update_creds']
- }
-
- # Build root URI
- root_uri = "https://" + module.params['baseuri']
- rf_utils = RedfishUtils(creds, root_uri, timeout, module,
- resource_id=resource_id, data_modification=True)
-
- # Check that Category is valid
- if category not in CATEGORY_COMMANDS_ALL:
- module.fail_json(msg=to_native("Invalid Category '%s'. Valid Categories = %s" % (category, CATEGORY_COMMANDS_ALL.keys())))
-
- # Check that all commands are valid
- for cmd in command_list:
- # Fail if even one command given is invalid
- if cmd not in CATEGORY_COMMANDS_ALL[category]:
- module.fail_json(msg=to_native("Invalid Command '%s'. Valid Commands = %s" % (cmd, CATEGORY_COMMANDS_ALL[category])))
-
- # Organize by Categories / Commands
- if category == "Accounts":
- ACCOUNTS_COMMANDS = {
- "AddUser": rf_utils.add_user,
- "EnableUser": rf_utils.enable_user,
- "DeleteUser": rf_utils.delete_user,
- "DisableUser": rf_utils.disable_user,
- "UpdateUserRole": rf_utils.update_user_role,
- "UpdateUserPassword": rf_utils.update_user_password,
- "UpdateUserName": rf_utils.update_user_name,
- "UpdateAccountServiceProperties": rf_utils.update_accountservice_properties
- }
-
- # execute only if we find an Account service resource
- result = rf_utils._find_accountservice_resource()
- if result['ret'] is False:
- module.fail_json(msg=to_native(result['msg']))
-
- for command in command_list:
- result = ACCOUNTS_COMMANDS[command](user)
-
- elif category == "Systems":
- # execute only if we find a System resource
- result = rf_utils._find_systems_resource()
- if result['ret'] is False:
- module.fail_json(msg=to_native(result['msg']))
-
- for command in command_list:
- if "Power" in command:
- result = rf_utils.manage_system_power(command)
- elif command == "SetOneTimeBoot":
- result = rf_utils.set_one_time_boot_device(
- module.params['bootdevice'],
- module.params['uefi_target'],
- module.params['boot_next'])
-
- elif category == "Chassis":
- result = rf_utils._find_chassis_resource()
- if result['ret'] is False:
- module.fail_json(msg=to_native(result['msg']))
-
- led_commands = ["IndicatorLedOn", "IndicatorLedOff", "IndicatorLedBlink"]
-
- # Check if more than one led_command is present
- num_led_commands = sum([command in led_commands for command in command_list])
- if num_led_commands > 1:
- result = {'ret': False, 'msg': "Only one IndicatorLed command should be sent at a time."}
- else:
- for command in command_list:
- if command in led_commands:
- result = rf_utils.manage_indicator_led(command)
-
- elif category == "Sessions":
- # execute only if we find SessionService resources
- resource = rf_utils._find_sessionservice_resource()
- if resource['ret'] is False:
- module.fail_json(msg=resource['msg'])
-
- for command in command_list:
- if command == "ClearSessions":
- result = rf_utils.clear_sessions()
-
- elif category == "Manager":
- MANAGER_COMMANDS = {
- "GracefulRestart": rf_utils.restart_manager_gracefully,
- "ClearLogs": rf_utils.clear_logs
- }
-
- # execute only if we find a Manager service resource
- result = rf_utils._find_managers_resource()
- if result['ret'] is False:
- module.fail_json(msg=to_native(result['msg']))
-
- for command in command_list:
- result = MANAGER_COMMANDS[command]()
-
- elif category == "Update":
- # execute only if we find UpdateService resources
- resource = rf_utils._find_updateservice_resource()
- if resource['ret'] is False:
- module.fail_json(msg=resource['msg'])
-
- for command in command_list:
- if command == "SimpleUpdate":
- result = rf_utils.simple_update(update_opts)
-
- # Return data back or fail with proper message
- if result['ret'] is True:
- del result['ret']
- changed = result.get('changed', True)
- module.exit_json(changed=changed, msg='Action was successful')
- else:
- module.fail_json(msg=to_native(result['msg']))
-
-
-if __name__ == '__main__':
- main()