Module netapp_ontap.resources.software
Copyright © 2020 NetApp Inc. All rights reserved.
Overview
You can use the ONTAP cluster software API to retrieve and display relevant information about a software profile, software packages collection, and software history collection. This API retrieves the information about all software packages present in the cluster, or a specific software package.
You can use the POST request to download a software package from an HTTP or FTP server. The PATCH request provides the option to upgrade the cluster software version. Select the validate_only
field to validate the package before triggering the update. Set the version
field to trigger the installation of the package in the cluster. You can pause, resume, or cancel any ongoing software upgrade by selecting action
. You can use the DELETE request to remove a specific software package present in the cluster.
Examples
Retrieving software profile information
The following example shows how to retrieve software profile information. You can check the validation results after selecting the validate_only
field. Upgrade progress information is available after an upgrade has started.
from netapp_ontap import HostConnection
from netapp_ontap.resources import Software
with HostConnection("<mgmt-ip>", username="admin", password="password", verify=False):
resource = Software()
resource.get(return_timeout=15)
print(resource)
Software(
{
"update_details": [
{
"state": "in_progress",
"estimated_duration": 4620,
"elapsed_duration": 29,
"phase": "Data ONTAP updates",
"node": {"name": "sti70-vsim-ucs165n"},
}
],
"_links": {"self": {"href": "/api/cluster/software/"}},
"version": "9.5.0",
"state": "in_progress",
"validation_results": [
{
"action": {"message": "Use NFS hard mounts, if possible."},
"update_check": "NFS mounts",
"status": "warning",
"issue": {"message": "Use NFS hard mounts, if possible."},
}
],
"pending_version": "9.6.0",
"status_details": [
{
"state": "completed",
"end_time": "2018-05-21T11:53:04+05:30",
"issue": {"message": "Image update complete"},
"node": {"name": "sti70-vsim-ucs165n"},
"start_time": "2018-05-21T09:53:04+05:30",
"name": "do-download-job",
}
],
"metrocluster": {
"progress_details": {
"message": 'Installing software image on cluster "sti70-vsim-ucs165n_siteA".'
},
"progress_summary": {"message": "Update paused by user"},
"clusters": [
{
"state": "waiting",
"estimated_duration": 3480,
"name": "sti70-vsim-ucs165n_siteA",
"elapsed_duration": 0,
}
],
},
"nodes": [{"version": "9.5.0"}],
}
)
Upgrading the software version
The following example shows how to upgrade cluster software. Set the version
field to trigger the installation of the package. You can select the validate_only
field to validate the package before the installation starts. Setting skip_warning
as true
ignores the validation warning before the installation starts. Setting the action
field performs a pause
, resume
, or `cancel' operation on an ongoing upgrade. An upgrade can only be resumed if it is in the paused state.
You can start the upgrade process at the cluster level. There are no options available to start the upgrade for a specific node or HA pair.
1. Validating the package and verifying the validation results
The following example shows how to validate a cluster software package. You must validate the package before the software upgrade. Set the validate_only
field to true
to start the validation. You can check for validation results in the GET /cluster/software endpoint.
from netapp_ontap import HostConnection
from netapp_ontap.resources import Software
with HostConnection("<mgmt_ip>", username="admin", password="password", verify=False):
resource = Software()
resource.version = "9.5.0"
resource.patch(validate_only=True)
The call to validate the software cluster version returns the job UUID, including a HAL link to retrieve details about the job. The job object includes a state
field and a message to indicate the progress of the job. When the job is complete and the application is fully created, the message indicates success and the state
field of the job is set to success
.
from netapp_ontap import HostConnection
from netapp_ontap.resources import Job
with HostConnection("<mgmt-ip>", username="admin", password="password", verify=False):
resource = Job(uuid="f587d316-5feb-11e8-b0e0-005056956dfc")
resource.get()
print(resource)
Job(
{
"message": "success",
"_links": {
"self": {"href": "/api/cluster/jobs/f587d316-5feb-11e8-b0e0-005056956dfc"}
},
"uuid": "f587d316-5feb-11e8-b0e0-005056956dfc",
"description": "PATCH /api/cluster/software",
"state": "success",
"code": 0,
}
)
You can check for validation results in the GET /cluster/software endpoint. The following example shows how to check the validation warnings and errors after setting the validate_only
field to true
.
from netapp_ontap import HostConnection
from netapp_ontap.resources import Software
with HostConnection("<mgmt-ip>", username="admin", password="password", verify=False):
resource = Software()
resource.get()
print(resource)
Software(
{
"_links": {"self": {"href": "/api/cluster/software"}},
"version": "9.7.0",
"state": "failed",
"validation_results": [
{
"action": {
"message": "Check cluster HA configuration. Check storage failover status."
},
"update_check": "High Availability status",
"status": "error",
"issue": {
"message": 'Cluster HA is not configured in the cluster. Storage failover is not enabled on node "node1", "node2".'
},
},
{
"action": {
"message": 'Refer to the Upgrade Advisor Plan or "Performing manual checks before an automated cluster upgrade" section in the "Clustered Data ONTAP Upgrade Express Guide" for the remaining validation checks that need to be performed before update.'
},
"update_check": "Manual checks",
"status": "warning",
"issue": {
"message": 'Manual validation checks need to be performed. Refer to the Upgrade Advisor Plan or "Performing manual checks before an automated cluster upgrade" section in the "Clustered Data ONTAP Upgrade Express Guide" for the remaining validation checks that need to be performed before update. Failing to do so can result in an update failure or an I/O disruption.'
},
},
],
"estimated_duration": 600,
"elapsed_duration": 56,
"nodes": [{"version": "9.7.0"}, {"version": "9.7.0"}],
}
)
2. Updating the cluster
The following example shows how to initiate a cluster software upgrade. You must validate the package before the software upgrade starts. Set the skip_warnings
field to true
to skip validation warnings and start the software package upgrade.
from netapp_ontap import HostConnection
from netapp_ontap.resources import Software
with HostConnection("<mgmt_ip>", username="admin", password="password", verify=False):
resource = Software()
resource.version = "9.5.0"
resource.patch(skip_warnings=True)
The call to update the software cluster version returns the job UUID, including a HAL link to retrieve details about the job. The job object includes a state
field and a message to indicate the progress of the job. When the job is complete and the application is fully created, the message indicates success and the state
field of the job is set to success
.
from netapp_ontap import HostConnection
from netapp_ontap.resources import Job
with HostConnection("<mgmt-ip>", username="admin", password="password", verify=False):
resource = Job(uuid="f587d316-5feb-11e8-b0e0-005056956dfc")
resource.get()
print(resource)
Job(
{
"message": "success",
"_links": {
"self": {"href": "/api/cluster/jobs/f587d316-5feb-11e8-b0e0-005056956dfc"}
},
"uuid": "f587d316-5feb-11e8-b0e0-005056956dfc",
"description": "PATCH /api/cluster/software",
"state": "success",
"code": 0,
}
)
You can check the update progress information in the GET /cluster/software endpoint. The following example shows how to check the progress of an update after setting the skip_warnings
field to true
.
from netapp_ontap import HostConnection
from netapp_ontap.resources import Software
with HostConnection("<mgmt-ip>", username="admin", password="password", verify=False):
resource = Software()
resource.get()
print(resource)
Software(
{
"update_details": [
{
"estimated_duration": 4620,
"elapsed_duration": 10,
"phase": "Data ONTAP updates",
"node": {"name": "node1"},
},
{
"estimated_duration": 4620,
"elapsed_duration": 10,
"phase": "Data ONTAP updates",
"node": {"name": "node2"},
},
],
"_links": {"self": {"href": "/api/cluster/software"}},
"version": "9.7.0",
"state": "in_progress",
"validation_results": [
{
"action": {
"message": 'Refer to the Upgrade Advisor Plan or "Performing manual checks before an automated cluster upgrade" section in the "Clustered Data ONTAP Upgrade Express Guide" for the remaining validation checks that need to be performed before update.'
},
"update_check": "Manual checks",
"status": "warning",
"issue": {
"message": 'Manual validation checks need to be performed. Refer to the Upgrade Advisor Plan or "Performing manual checks before an automated cluster upgrade" section in the "Clustered Data ONTAP Upgrade Express Guide" for the remaining validation checks that need to be performed before update. Failing to do so can result in an update failure or an I/O disruption.'
},
}
],
"estimated_duration": 5220,
"elapsed_duration": 63,
"pending_version": "9.7.0",
"status_details": [
{
"end_time": "2019-01-14T23:12:14+05:30",
"issue": {"message": "Installing software image."},
"node": {"name": "node1"},
"start_time": "2019-01-14T23:12:14+05:30",
"name": "do-download-job",
},
{
"end_time": "2019-01-14T23:12:14+05:30",
"issue": {"message": "Installing software image."},
"node": {"name": "node2"},
"start_time": "2019-01-14T23:12:14+05:30",
"name": "do-download-job",
},
],
"nodes": [{"version": "9.7.0"}, {"version": "9.7.0"}],
}
)
3. Pausing/resuming/canceling the upgrade
The following example shows how to pause
an ongoing cluster software package upgrade. Set the action
field to pause
, resume
, or cancel
to pause, resume or cancel the upgrade respectively. Not all update operations support these actions. An update can only be resumed if it is in the paused state.
from netapp_ontap import HostConnection
from netapp_ontap.resources import Software
with HostConnection("<mgmt_ip>", username="admin", password="password", verify=False):
resource = Software()
resource.version = "9.5.0"
resource.patch(action="pause")
The call to update the software cluster version returns the job UUID, including a HAL link to retrieve details about the job. The job object includes a state
field and a message to indicate the progress of the job. When the job is complete and the application is fully created, the message indicates success and the state
field of the job is set to success
.
from netapp_ontap import HostConnection
from netapp_ontap.resources import Job
with HostConnection("<mgmt-ip>", username="admin", password="password", verify=False):
resource = Job(uuid="f587d316-5feb-11e8-b0e0-005056956dfc")
resource.get()
print(resource)
Job(
{
"message": "success",
"_links": {
"self": {"href": "/api/cluster/jobs/f587d316-5feb-11e8-b0e0-005056956dfc"}
},
"uuid": "f587d316-5feb-11e8-b0e0-005056956dfc",
"description": "PATCH /api/cluster/software",
"state": "success",
"code": 0,
}
)
You can check the progress of the upgrade in the GET /cluster/software endpoint. The following example shows how to check the progress of the pause upgrade state after setting the action
field to pause
.
from netapp_ontap import HostConnection
from netapp_ontap.resources import Software
with HostConnection("<mgmt-ip>", username="admin", password="password", verify=False):
resource = Software()
resource.get()
print(resource)
Software(
{
"update_details": [
{
"estimated_duration": 600,
"elapsed_duration": 54,
"phase": "Pre-update checks",
"node": {"name": "node1"},
},
{
"estimated_duration": 4620,
"elapsed_duration": 49,
"phase": "Data ONTAP updates",
"node": {"name": "node2"},
},
{
"estimated_duration": 4620,
"elapsed_duration": 49,
"phase": "Data ONTAP updates",
},
],
"_links": {"self": {"href": "/api/cluster/software"}},
"version": "9.7.0",
"state": "pause_pending",
"validation_results": [
{
"action": {
"message": 'Refer to the Upgrade Advisor Plan or "Performing manual checks before an automated cluster upgrade" section in the "Clustered Data ONTAP Upgrade Express Guide" for the remaining validation checks that need to be performed before update.'
},
"update_check": "Manual checks",
"status": "warning",
"issue": {
"message": 'Manual validation checks need to be performed. Refer to the Upgrade Advisor Plan or "Performing manual checks before an automated cluster upgrade" section in the "Clustered Data ONTAP Upgrade Express Guide" for the remaining validation checks that need to be performed before update. Failing to do so can result in an update failure or an I/O disruption.'
},
}
],
"estimated_duration": 5220,
"elapsed_duration": 103,
"pending_version": "9.7.0",
"status_details": [
{
"issue": {"message": "Installing software image."},
"node": {"name": "node1"},
"start_time": "2019-01-08T02:54:36+05:30",
},
{
"issue": {"message": "Installing software image."},
"node": {"name": "node2"},
"start_time": "2019-01-08T02:54:36+05:30",
},
],
"nodes": [{"version": "9.7.0"}, {"version": "9.7.0"}],
}
)
Downloading the software package
The following example shows how to download the software package from an HTTP or FTP server. Provide the url
, username
, and password
, if required, to start the download of the software package to the cluster.
from netapp_ontap import HostConnection
from netapp_ontap.resources import SoftwarePackageDownload
with HostConnection("<mgmt-ip>", username="admin", password="password", verify=False):
resource = SoftwarePackageDownload()
resource.url = "http://nbsweb.eng.btc.netapp.in/~suvadipd/99/image1.tgz"
resource.username = "admin"
resource.password = "*********"
resource.post(hydrate=True, return_timeout=0)
print(resource)
SoftwarePackageDownload(
{
"username": "admin",
"password": "*********",
"url": "http://nbsweb.eng.btc.netapp.in/~suvadipd/99/image1.tgz",
}
)
The call to download the software package returns the job UUID, including a HAL link to retrieve details about the job. The job object includes a state
field and a message to indicate the progress of the job. When the job is complete and the application is fully created, the message indicates success and the job state
field is set to success
.
from netapp_ontap import HostConnection
from netapp_ontap.resources import Job
with HostConnection("<mgmt-ip>", username="admin", password="password", verify=False):
resource = Job(uuid="f587d316-5feb-11e8-b0e0-005056956dfc")
resource.get()
print(resource)
Job(
{
"message": "success",
"_links": {
"self": {"href": "/api/cluster/jobs/f587d316-5feb-11e8-b0e0-005056956dfc"}
},
"uuid": "f587d316-5feb-11e8-b0e0-005056956dfc",
"description": "POST /api/cluster/software/download",
"state": "success",
"code": 0,
}
)
Checking the progress of the software package being downloaded from an HTTP or FTP server
The following example shows how to retrieve the progress status of the software package being
downloaded from a HTTP or FTP server.
from netapp_ontap import HostConnection
from netapp_ontap.resources import SoftwarePackageDownload
with HostConnection("<mgmt-ip>", username="admin", password="password", verify=False):
resource = SoftwarePackageDownload()
resource.get()
print(resource)
SoftwarePackageDownload({})
Retrieving cluster software packages information
The following example shows how to retrieve the ONTAP software packages in a cluster.
from netapp_ontap import HostConnection
from netapp_ontap.resources import SoftwarePackage
with HostConnection("<mgmt-ip>", username="admin", password="password", verify=False):
print(list(SoftwarePackage.get_collection(return_timeout=15)))
[
SoftwarePackage(
{
"version": "9.7.0",
"_links": {"self": {"href": "/api/cluster/software/packages/9.7.0"}},
}
),
SoftwarePackage(
{
"version": "9.5.0",
"_links": {"self": {"href": "/api/cluster/software/packages/9.5.0"}},
}
),
]
The following example shows how to retrieve the details of a given cluster software package.
from netapp_ontap import HostConnection
from netapp_ontap.resources import SoftwarePackage
with HostConnection("<mgmt-ip>", username="admin", password="password", verify=False):
resource = SoftwarePackage(version="9.7.0")
resource.get()
print(resource)
SoftwarePackage(
{
"version": "9.7.0",
"_links": {"self": {"href": "/api/cluster/software/packages/9.7.0"}},
"create_time": "2018-05-21T10:06:59+05:30",
}
)
Deleting a cluster software package
The following example shows how to delete a package from the cluster. You need to provide the package version that you want to delete. The software package delete creates a job to perform the delete operation.
from netapp_ontap import HostConnection
from netapp_ontap.resources import SoftwarePackage
with HostConnection("<mgmt-ip>", username="admin", password="password", verify=False):
resource = SoftwarePackage(version="9.6.0")
resource.delete()
The call to delete the package returns the job UUID, including a HAL link to retrieve details about the job. The job object includes a state
field and a message to indicate the progress of the job. When the job is complete and the application is fully created, the message indicates success and the job state
field is set to success
.
from netapp_ontap import HostConnection
from netapp_ontap.resources import Job
with HostConnection("<mgmt-ip>", username="admin", password="password", verify=False):
resource = Job(uuid="f587d316-5feb-11e8-b0e0-005056956dfc")
resource.get()
print(resource)
Job(
{
"message": "success",
"_links": {
"self": {"href": "/api/cluster/jobs/f587d316-5feb-11e8-b0e0-005056956dfc"}
},
"uuid": "f587d316-5feb-11e8-b0e0-005056956dfc",
"description": "DELETE /api/cluster/software/packages/9.6.0",
"state": "success",
"code": 0,
}
)
HTTPS error codes
The following is a list of possible error codes that can be returned during a package delete operation.
# ONTAP Error Response codes
| ----------- | -------------------------------------------------------- |
| Error codes | Description |
| ----------- | -------------------------------------------------------- |
| 10551315 | Package store is empty |
| 10551322 | Error in retrieving package cleanup status |
| 10551323 | Error in cleaning up package information on a node |
| 10551324 | Error in cleaning up package information on both nodes |
| 10551325 | Package does not exist on the system |
| 10551326 | Error in deleting older package cleanup tasks |
| 10551346 | Package delete failed since a validation is in progress |
| 10551347 | Package delete failed since an update is in progress |
| 10551367 | A package synchronization is in progress |
| 10551388 | Package delete operation timed out |
| ----------- | -------------------------------------------------------- |
Retrieving software installation history information
The following example shows how to:
- retrieve the software package installation history information.
- display specific node level software installation history information.
- provide all the attributes by default in response when the self referential link is not present.
from netapp_ontap import HostConnection
from netapp_ontap.resources import SoftwareHistory
with HostConnection("<mgmt-ip>", username="admin", password="password", verify=False):
print(list(SoftwareHistory.get_collection()))
SoftwareHistory(
{
"from_version": "9.4.0",
"to_version": "9.5.0",
"state": "successful",
"end_time": "2018-05-21T10:14:51+05:30",
"node": {
"_links": {
"self": {
"href": "/api/cluster/nodes/58cd3a2b-af63-11e8-8b0d-0050568e7279"
}
},
"uuid": "58cd3a2b-af63-11e8-8b0d-0050568e7279",
"name": "sti70-vsim-ucs165n",
},
"start_time": "2018-09-03T16:18:46+05:30",
}
)
Classes
class Software (*args, **kwargs)
-
Allows interaction with Software objects on the host
Initialize the instance of the resource.
Any keyword arguments are set on the instance as properties. For example, if the class was named 'MyResource', then this statement would be true:
MyResource(name='foo').name == 'foo'
Args
*args
- Each positional argument represents a parent key as used in the URL of the object. That is, each value will be used to fill in a segment of the URL which refers to some parent object. The order of these arguments must match the order they are specified in the URL, from left to right.
**kwargs
- each entry will have its key set as an attribute name on the instance and its value will be the value of that attribute.
Ancestors
Methods
def get(self, **kwargs) -> NetAppResponse
-
Retrieves the software profile of a cluster.
Related ONTAP commands
cluster image show
cluster image show-update-progress
Learn more
Fetch the details of the object from the host.
Requires the keys to be set (if any). After returning, new or changed properties from the host will be set on the instance.
Returns
A
NetAppResponse
object containing the details of the HTTP response.Raises
NetAppRestError
: If the API call returned a status code >= 400 def patch(self, hydrate: bool = False, poll: bool = True, poll_interval: typing.Union = None, poll_timeout: typing.Union = None, **kwargs) -> NetAppResponse
-
Updates the cluster software version. Important note: * Setting 'version' triggers the package installation. * To validate the package for installation but not perform the installation, use the
validate_only
field on the request.Required properties
version
- Software version to be installed on the cluster.
Recommended optional parameters
validate_only
- Required to validate a software package before an upgrade.skip_warnings
- Used to skip validation warnings when starting a software upgrade.action
- Used to pause, resume, or cancel an ongoing software upgrade.
Related ONTAP commands
cluster image validate
cluster image update
cluster image pause-update
cluster image resume-update
cluster image cancel-update
Learn more
Send the difference in the object's state to the host as a modification request.
Calculates the difference in the object's state since the last time we interacted with the host and sends this in the request body.
Args
hydrate
- If set to True, after the response is received from the call, a a GET call will be made to refresh all fields of the object.
poll
- If set to True, the call will not return until the asynchronous job on the host has completed. Has no effect if the host did not return a job response.
poll_interval
- If the operation returns a job, this specifies how often to query the job for updates.
poll_timeout
- If the operation returns a job, this specifies how long to continue monitoring the job's status for completion.
**kwargs
- Any key/value pairs passed will normally be sent as query parameters to the host. If any of these pairs are parameters that are sent as formdata then only parameters of that type will be accepted and all others will be discarded.
Returns
A
NetAppResponse
object containing the details of the HTTP response.Raises
NetAppRestError
: If the API call returned a status code >= 400 async def software_modify(action: str = None, query_action: str = None, elapsed_duration: netapp_ontap.resource.Size = None, query_elapsed_duration: netapp_ontap.resource.Size = None, estimated_duration: netapp_ontap.resource.Size = None, query_estimated_duration: netapp_ontap.resource.Size = None, pending_version: str = None, query_pending_version: str = None, state: str = None, query_state: str = None, version: str = None, query_version: str = None) -> netapp_ontap.resource_table.ResourceTable
-
Modify an instance of a Software resource
Args
action
- User triggered action to apply to the install operation
query_action
- User triggered action to apply to the install operation
elapsed_duration
- Elapsed time during the upgrade or validation operation
query_elapsed_duration
- Elapsed time during the upgrade or validation operation
estimated_duration
- Estimated time remaining until completion of the upgrade or validation operation.
query_estimated_duration
- Estimated time remaining until completion of the upgrade or validation operation.
pending_version
- Version being installed on the system.
query_pending_version
- Version being installed on the system.
state
- Operational state of the upgrade
query_state
- Operational state of the upgrade
version
- Version of ONTAP installed and currently active on the system. During PATCH, using the 'validate_only' parameter on the request executes pre-checks, but does not perform the full installation.
query_version
- Version of ONTAP installed and currently active on the system. During PATCH, using the 'validate_only' parameter on the request executes pre-checks, but does not perform the full installation.
def software_show(action: cliche.arg_types.choices.Choices.define.
._Choices = None, elapsed_duration: cliche.arg_types.choices.Choices.define. ._Choices = None, estimated_duration: cliche.arg_types.choices.Choices.define. ._Choices = None, pending_version: cliche.arg_types.choices.Choices.define. ._Choices = None, state: cliche.arg_types.choices.Choices.define. ._Choices = None, version: cliche.arg_types.choices.Choices.define. ._Choices = None, fields: typing.List = None) -> netapp_ontap.resource_table.ResourceTable -
Fetch a single Software resource
Args
action
- User triggered action to apply to the install operation
elapsed_duration
- Elapsed time during the upgrade or validation operation
estimated_duration
- Estimated time remaining until completion of the upgrade or validation operation.
pending_version
- Version being installed on the system.
state
- Operational state of the upgrade
version
- Version of ONTAP installed and currently active on the system. During PATCH, using the 'validate_only' parameter on the request executes pre-checks, but does not perform the full installation.
Inherited members
class SoftwareSchema (*, only: typing.Union = None, exclude: typing.Union = (), many: bool = False, context: typing.Dict = None, load_only: typing.Union = (), dump_only: typing.Union = (), partial: typing.Union = False, unknown: str = None)
-
The fields of the Software object
Ancestors
- netapp_ontap.resource.ResourceSchema
- marshmallow.schema.Schema
- marshmallow.base.SchemaABC
Class variables
-
action GET POST PATCH
-
User triggered action to apply to the install operation
Valid choices:
- pause
- cancel
- resume
-
elapsed_duration GET
-
Elapsed time during the upgrade or validation operation
Example: 2140
-
estimated_duration GET
-
Estimated time remaining until completion of the upgrade or validation operation.
Example: 5220
-
links GET
-
The links field of the software.
-
metrocluster GET POST PATCH
-
The metrocluster field of the software.
-
nodes GET
-
List of nodes and active versions.
-
pending_version GET
-
Version being installed on the system.
Example: ONTAP_X_1
-
state GET
-
Operational state of the upgrade
Valid choices:
- in_progress
- waiting
- paused_by_user
- paused_on_error
- completed
- canceled
- failed
- pause_pending
- cancel_pending
-
status_details GET
-
Display status details.
-
update_details GET
-
Display update progress details.
-
validation_results GET
-
List of validation warnings, errors, and advice.
-
version GET POST PATCH
-
Version of ONTAP installed and currently active on the system. During PATCH, using the 'validate_only' parameter on the request executes pre-checks, but does not perform the full installation.
Example: ONTAP_X