emc-openstack / storops

Python storage management library for VNX and Unity.
Apache License 2.0
53 stars 29 forks source link

StorOps: The Python Library for VNX & Unity

.. image:: https://img.shields.io/travis/emc-openstack/storops/master.svg :target: https://travis-ci.org/emc-openstack/storops

.. image:: https://img.shields.io/codecov/c/github/emc-openstack/storops/master.svg :target: https://codecov.io/gh/emc-openstack/storops

.. image:: https://img.shields.io/appveyor/ci/peter-wangxu/storops/master.svg?label=Windows :target: https://ci.appveyor.com/project/peter-wangxu/storops

.. image:: https://img.shields.io/pypi/v/storops.svg :target: https://pypi.python.org/pypi/storops

.. image:: https://img.shields.io/pypi/pyversions/storops.svg :target: https://pypi.org/project/storops/

.. image:: https://landscape.io/github/emc-openstack/storops/master/landscape.svg?style=flat :target: https://landscape.io/github/emc-openstack/storops/

VERSION: 1.2.11

A minimalist Python library to manage VNX/Unity systems. This document lies in the source code and go with the release. Check different release branch/tag for matched documents.

License

Apache License version 2_

Install via PIP

You could use "pip" to install "storops".

.. code-block:: bash

$ pip install storops

Make sure naviseccli is installed if you want to manage VNX. Please contact with Dell/EMC support about installing the NaviCli-Linux rpm package.

Optional package requirement


#. `paramiko` package

The `paramiko` is required if you need to manage the VNX file related
resources. please follow `install paramiko <http://www.paramiko.org/installing.html>`_ install `paramiko`.

Install via RPM
---------------
There are two RPM packages in each release page.
- `python-storops-<version num>`, install this if you only manage Unity systems.
- `python-storops-vnx-<version num>-x86_64`, a virtual package depends on `python-storops` and `NaviCli-Linux`. Install this if you manage VNX systems or both.

You could download the rpm package from release download page, and install it via:

.. code-block:: bash

    $ rpm -i <python-storops_file>

Please contact with Dell/EMC support about installing the `NaviCli-Linux` rpm package.

Feature List
------------

- Manage VNX System
    - supported resources
        - show system properties
        - list installed features
        - list/create/delete storage pools
        - list/create/delete pool based LUN
        - list/create/delete RAID groups
        - list/create/delete snapshots
        - list/create/delete storage groups
        - list/create/delete consistency groups
        - list/create/delete users
        - list disks
        - list ports
        - list data mover/virtual data mover
        - list NAS storage pool
        - list/create/delete CIFS server
        - list CIFS share
        - list/create/delete file system
        - list/create/delete file system snap
        - list/create/delete NFS share
        - show system domain information
        - list hosts
        - show system capacity
    - supported feature/operations
        - list/start/cancel migration sessions
        - enable/disable LUN deduplication
        - enable/disable LUN compression
        - insert/delete disk simulation
        - create/attach/detach mount points
        - initiator and connection management
        - create/delete mirror view
        - create/delete DNS
    - supported metrics
        - VNXStorageProcessor
            - `read_iops`/`write_iops`/`total_iops`: read/write/total IOPS
            - `read_mbps`/`write_mbps`/`total_mbps`: read/write/total MBPS
            - `read_size_kb`/`write_size_kb`: read/write size KB
        - VNXLun
            - `read_iops`/`write_iops`/`total_iops`: read/write/total IOPS
                - `read_iops_sp_a`/`write_iops_sp_b`: read/write IOPS of SPA
                - `read_iops_sp_b`/`write_iops_sp_b`: read/write IOPS of SPB
            - `read_mbps`/`write_mbps`/`total_mbps`: read/write/total MBPS
                - `read_mbps_sp_a`/`write_mbps_sp_a`: read/write MBPS of SPA
                - `read_mbps_sp_b`/`write_mbps_sp_b`: read/write MBPS of SPB
            - `implicit_trespasses_ps`/`explicit_trespasses_ps`: implicit/explicit trespasses per second
                - `implicit_trespasses_ps_sp_a`/`explicit_trespasses_ps_sp_a`: implicit/explicit trespasses per second of SPA
                - `implicit_trespasses_ps_sp_b`/`explicit_trespasses_ps_sp_b`: implicit/explicit trespasses per second of SPB
            - `utilization`: utilization
                - `utilization_sp_a`: utilization of SPA
                - `utilization_sp_b`: utilization of SPB
            - `read_size_kb`/`write_size_kb`: read/write size KB
        - VNXDisk
            - `read_iops`/`write_iops`/`total_iops`: read/write/total IOPS
            - `read_mbps`/`write_mbps`/`total_mbps`: read/write/total MBPS
            - `utilization`: utilization
            - `read_size_kb`/`write_size_kb`: read/write size KB
        - VNXSPPort
            - `read_iops`/`write_iops`/`total_iops`: read/write/total IOPS
            - `read_mbps`/`write_mbps`/`total_mbps`: read/write/total MBPS
            - `read_size_kb`/`write_size_kb`: read/write size KB
        - VNXStorageGroup
            - `read_iops`/`write_iops`/`total_iops`: read/write/total IOPS
            - `read_mbps`/`write_mbps`/`total_mbps`: read/write/total MBPS
            - `read_size_kb`/`write_size_kb`: read/write size KB
        - VNXStoragePool
            - `read_iops`/`write_iops`/`total_iops`: read/write/total IOPS
            - `read_mbps`/`write_mbps`/`total_mbps`: read/write/total MBPS
            - `read_size_kb`/`write_size_kb`: read/write size KB
- Manage Unity System
    - supported resources
        - show system properties
        - show system capacity
        - list/create/delete storage pools
        - list/create/delete remote hosts
        - list/create/delete host initiator
        - list/create/delete luns
        - list/create/delete file systems
        - list/create/delete snapshots
        - list/create/delete NAS servers
        - list/create/delete CIFS servers
        - list/create/delete CIFS shares
        - list/create/delete NFS servers
        - list/create/delete NFS shares
        - list/create/delete DNS servers
        - list ip ports
        - list sas ports
        - list/create/delete iSCSI portals
        - list/create/delete link aggregations
        - list/create/delete Consistency Groups
        - list/create/modify/cancel move sessions
        - list/create/delete metric real time query
        - list metrics query result
        - list disks
        - list disk groups
        - list/create/delete tenants
        - list batteries
        - list daes
        - list fans
        - list memory modules
        - list management interfaces
        - list power supplies
        - list ssds
        - list remote interfaces
        - list/create/modify/verify/delete remote systems
        - list/create/modify/delete replication interfaces
        - list/create/modify/delete replication sessions
        - failover/failback/pause/resume/sync replication sessions
        - list/create/modify/delete block import sessions
        - pause/resume/cutover/commit/cancel block import sessions
        - discover migration objects
        - list/create/modify/delete snapshot schedule
    - supported feature/operations
        - CIFS share access control
        - NFS share access control
        - Remote hosts access
        - Persist historical metric data to csv files
        - Upload license
        - enable/disable LUN data reduction
        - LUN migration
        - LUN replication
        - CG replication
    - supported metrics
        - UnitySystem
            - read_iops
            - write_iops
            - total_iops
            - read_byte_rate
            - write_byte_rate
            - total_byte_rate
        - UnityDisk
            - read_iops
            - write_iops
            - total_iops
            - read_mbps
            - write_mbps
            - utilization
            - response_time
            - queue_length
            - read_byte_rate
            - write_byte_rate
            - total_byte_rate
        - UnityLun
            - read_iops
            - write_iops
            - total_iops
            - read_mbps
            - write_mbps
            - utilization
            - response_time
            - queue_length
            - read_byte_rate
            - write_byte_rate
            - total_byte_rate
        - UnityFileSystem
            - read_iops
            - write_iops
            - read_mbps
            - write_mbps
        - UnityStorageProcessor
            - net_in_mbps
            - net_out_mbps
            - block_read_iops
            - block_write_iops
            - block_total_iops
            - block_read_mbps
            - block_write_mbps
            - cifs_read_iops
            - cifs_write_iops
            - cifs_read_mbps
            - cifs_write_mbps
            - nfs_read_iops
            - nfs_write_iops
            - nfs_read_mbps
            - nfs_write_mbps
            - utilization
            - block_cache_read_hit_ratio
            - block_cache_write_hit_ratio
            - temperature
            - core_count
            - block_cache_dirty_size
            - read_byte_rate
            - write_byte_rate
            - total_byte_rate
            - fast_cache_read_hits
            - fast_cache_write_hits
            - fast_cache_read_hit_rate
            - fast_cache_write_hit_rate
        - UnityFcPort
            - read_iops
            - write_iops
            - total_iops
            - read_byte_rate
            - write_byte_rate
            - total_byte_rate
        - UnityIscsiNode
            - read_iops
            - write_iops
            - total_iops
            - read_byte_rate
            - write_byte_rate
            - total_byte_rate

Tutorial
--------

User may reference three kinds of classes directly.
All of them are available under the storops module.

- system classes: like VNXSystem and UnitySystem
- exceptions: like UnityException, VNXException, etc.
- enums: like VNXProvisionEnum, NFSTypeEnum, etc.

We recommend to try the library with IPython notebook or shell.

All operation/resource are accessed from the system instance.

Here are some examples of the typical usage:

Get the VNX System Instance

Use the vnx instance to access all sorts of resource and features.

.. code-block:: python

# initialize the VNX system instance
>>> from storops import VNXSystem
>>> vnx = VNXSystem('10.1.1.1', 'sysadmin', 'password')
>>> vnx
{
    "VNXSystem": {
        "existed": true,
        "hash": 5339308,
        "name": "K10",
        "agent_rev": "7.33.8 (2.97)",
        "model_type": "Rackmount",
        "model": "VNX5800",
        "serial": "APM00123456789",
        "revision": "05.33.008.3.297"
    }
}

Get the Unity System Instance


.. code-block:: python

    from storops import UnitySystem
    unity = UnitySystem('<management ip>', '<user>', '<password>')

Get Resources from System or Other Resources

.. code-block:: python

# get all pools
>>> pools = vnx.get_pool()
{
"VNXPoolList": [
    {
        "VNXPool": {
            "luns": [
                1,
                0
            ],
            "status": "OK(0x0)",
            "current_operation_status": "N/A",
            ...
            "disks": {
                "VNXDiskList": [
                    {
                        "VNXDisk": {
                            "private": {},
                            "clariion_tla_part_number": "005050344PWR",
                            "prct_bound": {},
...

Get a Resource


Attention: you could still initialize the python object even
if the resource doesn't exists on array.
You could use the "existed" property to check the existance of the
resource.

.. code-block:: python

    # get a existing LUN
    >>> lun = vnx.get_lun(lun_id=1)
    >>> lun
    {
        "VNXLun": {
            "status": "OK(0x0)",
            "existed": true,
            ...
            "default_owner": "VNXSPEnum.SP_B",
            "name": "l0"
        }
    }

    # get a non-existing lun
    >>> vnx.get_lun(name='hello')
    {
        "VNXLun": {
            "existed": false,
            "hash": 5699430
        }
    }

Access Resource Properties

Each properties printed in the json output could be accessed directly.

.. code-block:: python

# access resource properties
>>> lun.status
u'OK(0x0)'

Update the Resource Property


All properties of a resource will be updated if any of them is accessed.
For performance concern, the lib won't send query to array once properties
are initialized.
Explicitly call the *"update()"* function if you need a refresh.

.. code-block:: python

    >>> vnx = VNXSystem('10.1.1.3')     # no query to the system
    >>> vnx.model
    u'VNX5800'                          # send query, initialize all properties
    >>> vnx.name
    u'k10'                              # no query
    >>> vnx.update()                    # send query, update all properties

Executing Operations

Most of the create/modify operations can be found on the instance. Call these instance methods to execute the operation.

.. code-block:: python

# create lun
>>> pool = pools[0]
>>> lun1 = pool.create_lun('lun1', size_gb=2)

Remove a Resource


.. code-block:: python

    # delete a resource
    >>> lun1.delete()

Getting metrics

.. code-block:: python

>>> from storops import VNXSystem
>>> vnx = VNXSystem('<management ip>', '<user>', '<password>')
# Enable metric query
>>> vnx.enable_perf_stats()
# Get iops for Storage Processor
>>> sp = vnx.get_sp()[0] 
>>> sp.read_iops
0.0
>>> sp.write_iops
0.6666666666666666
>>> sp.read_size_kb
0.0
>>> sp.write_size_kb
4.2250000000000005

.. code-block:: python

>>> from storops import UnitySystem
>>> unity = UnitySystem('<management ip>', '<user>', '<password>')
# Enable metric query
>>> unity.enable_perf_stats()
# Once metric query enabled, storops will pull the realtime metric info
# from Unity periodically and calculate them, the default interval is
# 60s, so suggest to wait more than 60s for the first time calculation
>>> import time; time.sleep(60)
# Get iops, bandwidth for lun
>>> lun1 = unity.get_lun()[0]
>>> lun1.read_iops
0.05
>>> lun1.total_iops
0.05
>>> lun1.write_iops
0
>>> lun1.read_byte_rate
25.6
>>> lun1.write_byte_rate
0
>>> lun1.total_byte_rate
25.6

Getting Help


- If you are using IPython, use "?" to check the document and
  method signature.

.. code-block::

    >>> pool.create_lun?
    Signature: pool.create_lun(lun_name=None, size_gb=1, lun_id=None,
               provision=None, tier=None, ignore_thresholds=None)
    Docstring: Create a pool LUN in the pool.
    File:      c:\work\python\storops\storops\vnx\resource\block_pool.py
    Type:      instancemethod

-  In IPython, use tab to check all extrinsic methods/properties
   of the resource.  Print the resource to check all intrinsic properties.

.. code-block::

    >>> vnx.
    vnx.control_station_ip           vnx.get_property_key             vnx.parse_all
    vnx.create_cg                    vnx.get_property_label           vnx.parsed_resource
    vnx.create_pool                  vnx.get_rg                       vnx.poll
    vnx.create_rg                    vnx.get_sg                       vnx.property_names
    vnx.create_sg                    vnx.get_snap                     vnx.delete_cg
    vnx.domain                       vnx.get_sp_port                  vnx.delete_disk
    vnx.existed                      vnx.heartbeat                    vnx.delete_pool
    vnx.get_available_disks          vnx.install_disk                 vnx.delete_rg
    vnx.get_cg                       vnx.is_auto_tiering_enabled      vnx.delete_sg
    vnx.get_connection_port          vnx.is_compression_enabled       vnx.delete_snap
    vnx.get_dict_repr                vnx.is_dedup_enabled             vnx.set_block_credential
    vnx.get_disk                     vnx.is_fast_cache_enabled        vnx.set_cli
    vnx.get_fc_port                  vnx.is_mirror_view_async_enabled vnx.set_naviseccli
    vnx.get_fcoe_port                vnx.is_mirror_view_enabled       vnx.spa_ip
    vnx.get_index                    vnx.is_mirror_view_sync_enabled  vnx.spb_ip
    vnx.get_iscsi_port               vnx.is_sancopy_enabled           vnx.stop_heart_beat
    vnx.get_lun                      vnx.is_snap_enabled              vnx.update
    vnx.get_migration_session        vnx.is_thin_enabled              vnx.update_nodes_ip
    vnx.get_ndu                      vnx.is_valid                     vnx.with_no_poll
    vnx.get_pool                     vnx.json                         vnx.with_poll
    vnx.get_pool_feature             vnx.parse

How to Run Unittests
--------------------

Unittests are included in the `storops_test` package.

Use following command to install test dependencies.

.. code-block:: bash

    $ pip install -r test-requirements.txt

Use `pytest` to run the tests.

.. code-block:: bash

    $ pytest storops_test

Or you could use `tox` to run the tests.

.. code-block:: bash

    $ tox -e py36

How to Contribute
-----------------

#. Open an issue at the `GitHub storops project`_.
#. Fork the repository on GitHub and make changes on your branch.
#. Add tests to cover your change.
#. Send a pull request.
#. Make sure to add yourself to "Contributors" listed below.

Contributors
------------

Dell EMC Contributors

Community Contributors


- Cedric Zhuang
- Jay Xu
- Ray Chen
- Tina Tang
- Peter Wang
- Paulo Matias <matias@ufscar.br>

Patches and Suggestions

.. _GitHub storops project: https://github.com/emc-openstack/storops .. _Apache License version 2: LICENSE.txt