# Copyright (c) 2015 Clinton Knight. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from unittest import mock
from lxml import etree
import requests
from manila.share.drivers.netapp.dataontap.client import api
CONNECTION_INFO = {
'hostname': 'hostname',
'transport_type': 'https',
'ssl_cert_path': '/etc/ssl/certs/',
'port': 443,
'username': 'admin',
'password': 'passw0rd',
'api_trace_pattern': '(.*)',
}
CLUSTER_NAME = 'fake_cluster'
REMOTE_CLUSTER_NAME = 'fake_cluster_2'
CLUSTER_ADDRESS_1 = 'fake_cluster_address'
CLUSTER_ADDRESS_2 = 'fake_cluster_address_2'
VERSION = 'NetApp Release 8.2.1 Cluster-Mode: Fri Mar 21 14:25:07 PDT 2014'
VERSION_NO_DARE = 'NetApp Release 9.1.0: Tue May 10 19:30:23 2016 <1no-DARE>'
VERSION_TUPLE = (9, 1, 0)
NODE_NAME = 'fake_node1'
NODE_NAMES = ('fake_node1', 'fake_node2')
VSERVER_NAME = 'fake_vserver'
VSERVER_NAME_2 = 'fake_vserver_2'
VSERVER_PEER_NAME = 'fake_vserver_peer'
ADMIN_VSERVER_NAME = 'fake_admin_vserver'
NODE_VSERVER_NAME = 'fake_node_vserver'
NFS_VERSIONS = ['nfs3', 'nfs4.0']
ROOT_AGGREGATE_NAMES = ('root_aggr1', 'root_aggr2')
ROOT_VOLUME_AGGREGATE_NAME = 'fake_root_aggr'
ROOT_VOLUME_NAME = 'fake_root_volume'
SHARE_AGGREGATE_NAME = 'fake_aggr1'
SHARE_AGGREGATE_NAMES = ('fake_aggr1', 'fake_aggr2')
SHARE_AGGREGATE_RAID_TYPES = ('raid4', 'raid_dp')
SHARE_AGGREGATE_DISK_TYPE = 'FCAL'
SHARE_AGGREGATE_DISK_TYPES = ['SATA', 'SSD']
SHARE_NAME = 'fake_share'
SHARE_SIZE = '1000000000'
SHARE_NAME_2 = 'fake_share_2'
SNAPSHOT_NAME = 'fake_snapshot'
CG_SNAPSHOT_ID = 'fake_cg_id'
PARENT_SHARE_NAME = 'fake_parent_share'
PARENT_SNAPSHOT_NAME = 'fake_parent_snapshot'
MAX_FILES = 5000
LANGUAGE = 'fake_language'
SNAPSHOT_POLICY_NAME = 'fake_snapshot_policy'
EXPORT_POLICY_NAME = 'fake_export_policy'
DELETED_EXPORT_POLICIES = {
VSERVER_NAME: [
'deleted_manila_fake_policy_1',
'deleted_manila_fake_policy_2',
],
VSERVER_NAME_2: [
'deleted_manila_fake_policy_3',
],
}
QOS_POLICY_GROUP_NAME = 'fake_qos_policy_group_name'
QOS_MAX_THROUGHPUT = '5000B/s'
USER_NAME = 'fake_user'
PORT = 'e0a'
VLAN = '1001'
VLAN_PORT = 'e0a-1001'
IP_ADDRESS = '10.10.10.10'
NETMASK = '255.255.255.0'
GATEWAY = '10.10.10.1'
SUBNET = '10.10.10.0/24'
NET_ALLOCATION_ID = 'fake_allocation_id'
LIF_NAME_TEMPLATE = 'os_%(net_allocation_id)s'
LIF_NAME = LIF_NAME_TEMPLATE % {'net_allocation_id': NET_ALLOCATION_ID}
IPSPACE_NAME = 'fake_ipspace'
BROADCAST_DOMAIN = 'fake_domain'
MTU = 9000
SM_SOURCE_VSERVER = 'fake_source_vserver'
SM_SOURCE_VOLUME = 'fake_source_volume'
SM_DEST_VSERVER = 'fake_destination_vserver'
SM_DEST_VOLUME = 'fake_destination_volume'
NETWORK_INTERFACES = [{
'interface_name': 'fake_interface',
'address': IP_ADDRESS,
'vserver': VSERVER_NAME,
'netmask': NETMASK,
'role': 'data',
'home-node': NODE_NAME,
'home-port': VLAN_PORT
}]
NETWORK_INTERFACES_MULTIPLE = [
{
'interface_name': 'fake_interface',
'address': IP_ADDRESS,
'vserver': VSERVER_NAME,
'netmask': NETMASK,
'role': 'data',
'home-node': NODE_NAME,
'home-port': VLAN_PORT,
},
{
'interface_name': 'fake_interface_2',
'address': '10.10.12.10',
'vserver': VSERVER_NAME,
'netmask': NETMASK,
'role': 'data',
'home-node': NODE_NAME,
'home-port': PORT,
}
]
IPSPACES = [{
'uuid': 'fake_uuid',
'ipspace': IPSPACE_NAME,
'id': 'fake_id',
'broadcast-domains': ['OpenStack'],
'ports': [NODE_NAME + ':' + VLAN_PORT],
'vservers': [
IPSPACE_NAME,
VSERVER_NAME,
]
}]
EMS_MESSAGE = {
'computer-name': 'fake_host',
'event-id': '0',
'event-source': 'fake driver',
'app-version': 'fake app version',
'category': 'fake category',
'event-description': 'fake description',
'log-level': '6',
'auto-support': 'false',
}
QOS_POLICY_GROUP = {
'policy-group': QOS_POLICY_GROUP_NAME,
'vserver': VSERVER_NAME,
'max-throughput': QOS_MAX_THROUGHPUT,
'num-workloads': 1,
}
NO_RECORDS_RESPONSE = etree.XML("""
0
""")
PASSED_RESPONSE = etree.XML("""
""")
PASSED_FAILED_ITER_RESPONSE = etree.XML("""
0
1
""")
INVALID_GET_ITER_RESPONSE_NO_ATTRIBUTES = etree.XML("""
1
fake_tag
""")
INVALID_GET_ITER_RESPONSE_NO_RECORDS = etree.XML("""
fake_tag
""")
VSERVER_GET_ITER_RESPONSE = etree.XML("""
%(fake_vserver)s
1
""" % {'fake_vserver': VSERVER_NAME})
VSERVER_GET_ROOT_VOLUME_NAME_RESPONSE = etree.XML("""
%(root_volume)s
%(fake_vserver)s
1
""" % {'root_volume': ROOT_VOLUME_NAME, 'fake_vserver': VSERVER_NAME})
VSERVER_GET_IPSPACE_NAME_RESPONSE = etree.XML("""
%(ipspace)s
%(fake_vserver)s
1
""" % {'ipspace': IPSPACE_NAME, 'fake_vserver': VSERVER_NAME})
VSERVER_GET_RESPONSE = etree.XML("""
%(aggr1)s
%(aggr2)s
45678592
%(aggr1)s
6448431104
%(aggr2)s
%(vserver)s
""" % {
'vserver': VSERVER_NAME,
'aggr1': SHARE_AGGREGATE_NAMES[0],
'aggr2': SHARE_AGGREGATE_NAMES[1],
})
VSERVER_DATA_LIST_RESPONSE = etree.XML("""
%(vserver)s
data
1
""" % {'vserver': VSERVER_NAME})
VSERVER_AGGREGATES = {
SHARE_AGGREGATE_NAMES[0]: {
'available': 45678592,
},
SHARE_AGGREGATE_NAMES[1]: {
'available': 6448431104,
},
}
VSERVER_GET_RESPONSE_NO_AGGREGATES = etree.XML("""
%(vserver)s
""" % {'vserver': VSERVER_NAME})
ONTAPI_VERSION_RESPONSE = etree.XML("""
1
19
""")
SYSTEM_GET_VERSION_RESPONSE = etree.XML("""
1395426307
true
%(version)s
8
2
1
""" % {'version': VERSION})
LICENSE_V2_LIST_INFO_RESPONSE = etree.XML("""
none
Cluster Base License
false
cluster3
base
1-80-000008
license
none
NFS License
false
cluster3-01
nfs
1-81-0000000000000004082368507
license
none
CIFS License
false
cluster3-01
cifs
1-81-0000000000000004082368507
license
none
iSCSI License
false
cluster3-01
iscsi
1-81-0000000000000004082368507
license
none
FCP License
false
cluster3-01
fcp
1-81-0000000000000004082368507
license
none
SnapRestore License
false
cluster3-01
snaprestore
1-81-0000000000000004082368507
license
none
SnapMirror License
false
cluster3-01
snapmirror
1-81-0000000000000004082368507
license
none
FlexClone License
false
cluster3-01
flexclone
1-81-0000000000000004082368507
license
none
SnapVault License
false
cluster3-01
snapvault
1-81-0000000000000004082368507
license
""")
LICENSES = (
'base', 'cifs', 'fcp', 'flexclone', 'iscsi', 'nfs', 'snapmirror',
'snaprestore', 'snapvault'
)
VOLUME_COUNT_RESPONSE = etree.XML("""
vol0
cluster3-01
%(root_volume)s
%(fake_vserver)s
2
""" % {'root_volume': ROOT_VOLUME_NAME, 'fake_vserver': VSERVER_NAME})
CIFS_SECURITY_SERVICE = {
'type': 'active_directory',
'password': 'fake_password',
'user': 'fake_user',
'ou': 'fake_ou',
'domain': 'fake_domain',
'dns_ip': 'fake_dns_ip',
'server': '',
}
LDAP_SECURITY_SERVICE = {
'type': 'ldap',
'password': 'fake_password',
'server': 'fake_server',
'id': 'fake_id',
}
KERBEROS_SECURITY_SERVICE = {
'type': 'kerberos',
'password': 'fake_password',
'user': 'fake_user',
'server': 'fake_server',
'id': 'fake_id',
'domain': 'fake_domain',
'dns_ip': 'fake_dns_ip',
}
KERBEROS_SERVICE_PRINCIPAL_NAME = 'nfs/fake-vserver.fake_domain@FAKE_DOMAIN'
INVALID_SECURITY_SERVICE = {
'type': 'fake',
}
SYSTEM_NODE_GET_ITER_RESPONSE = etree.XML("""
%s
1
""" % NODE_NAME)
SECUTITY_KEY_MANAGER_NVE_SUPPORT_RESPONSE_TRUE = etree.XML("""
true
""")
SECUTITY_KEY_MANAGER_NVE_SUPPORT_RESPONSE_FALSE = etree.XML("""
false
""")
NET_PORT_GET_RESPONSE_NO_VLAN = etree.XML("""
auto
full
auto
%(domain)s
healthy
false
%(ipspace)s
true
true
true
up
00:0c:29:fc:04:f7
1500
1500
%(node_name)s
full
receive
1000
%(port)s
physical
data
""" % {'domain': BROADCAST_DOMAIN,
'ipspace': IPSPACE_NAME,
'node_name': NODE_NAME,
'port': PORT})
NET_PORT_GET_RESPONSE = etree.XML("""
auto
full
auto
healthy
false
%(ipspace)s
true
true
true
up
00:0c:29:fc:04:f7
1500
1500
%(node_name)s
full
receive
1000
%(port)s-%(vlan)s
vlan
data
%(vlan)s
%(node_name)s
%(port)s
""" % {'ipspace': IPSPACE_NAME,
'node_name': NODE_NAME,
'port': PORT,
'vlan': VLAN})
NET_PORT_GET_ITER_RESPONSE = etree.XML("""
full
full
auto
true
true
true
up
00:0c:29:fc:04:d9
1500
%(node_name)s
full
none
10
e0a
physical
data
full
full
auto
true
true
true
up
00:0c:29:fc:04:e3
1500
%(node_name)s
full
none
100
e0b
physical
data
full
full
auto
true
true
true
up
00:0c:29:fc:04:ed
1500
%(node_name)s
full
none
1000
e0c
physical
data
full
full
auto
true
true
true
up
00:0c:29:fc:04:f7
1500
%(node_name)s
full
none
10000
e0d
physical
data
4
""" % {'node_name': NODE_NAME})
SPEED_SORTED_PORTS = (
{'node': NODE_NAME, 'port': 'e0d', 'speed': '10000'},
{'node': NODE_NAME, 'port': 'e0c', 'speed': '1000'},
{'node': NODE_NAME, 'port': 'e0b', 'speed': '100'},
{'node': NODE_NAME, 'port': 'e0a', 'speed': '10'},
)
PORT_NAMES = ('e0a', 'e0b', 'e0c', 'e0d')
SPEED_SORTED_PORT_NAMES = ('e0d', 'e0c', 'e0b', 'e0a')
UNSORTED_PORTS_ALL_SPEEDS = (
{'node': NODE_NAME, 'port': 'port6', 'speed': 'undef'},
{'node': NODE_NAME, 'port': 'port3', 'speed': '100'},
{'node': NODE_NAME, 'port': 'port1', 'speed': '10000'},
{'node': NODE_NAME, 'port': 'port4', 'speed': '10'},
{'node': NODE_NAME, 'port': 'port7'},
{'node': NODE_NAME, 'port': 'port2', 'speed': '1000'},
{'node': NODE_NAME, 'port': 'port5', 'speed': 'auto'},
)
SORTED_PORTS_ALL_SPEEDS = (
{'node': NODE_NAME, 'port': 'port1', 'speed': '10000'},
{'node': NODE_NAME, 'port': 'port2', 'speed': '1000'},
{'node': NODE_NAME, 'port': 'port3', 'speed': '100'},
{'node': NODE_NAME, 'port': 'port4', 'speed': '10'},
{'node': NODE_NAME, 'port': 'port5', 'speed': 'auto'},
{'node': NODE_NAME, 'port': 'port6', 'speed': 'undef'},
{'node': NODE_NAME, 'port': 'port7'},
)
NET_PORT_GET_ITER_BROADCAST_DOMAIN_RESPONSE = etree.XML("""
%(ipspace)s
%(domain)s
%(node)s
%(port)s
1
""" % {
'domain': BROADCAST_DOMAIN,
'node': NODE_NAME,
'port': PORT,
'ipspace': IPSPACE_NAME,
})
NET_PORT_GET_ITER_BROADCAST_DOMAIN_MISSING_RESPONSE = etree.XML("""
%(ipspace)s
%(node)s
%(port)s
1
""" % {'node': NODE_NAME, 'port': PORT, 'ipspace': IPSPACE_NAME})
NET_PORT_BROADCAST_DOMAIN_GET_ITER_RESPONSE = etree.XML("""
%(domain)s
%(ipspace)s
1
""" % {'domain': BROADCAST_DOMAIN, 'ipspace': IPSPACE_NAME})
NET_IPSPACES_GET_ITER_RESPONSE = etree.XML("""
OpenStack
fake_id
%(ipspace)s
%(node)s:%(port)s
fake_uuid
%(ipspace)s
%(vserver)s
1
""" % {
'ipspace': IPSPACE_NAME,
'node': NODE_NAME,
'port': VLAN_PORT,
'vserver': VSERVER_NAME
})
NET_INTERFACE_GET_ITER_RESPONSE = etree.XML("""
192.168.228.42
ipv4
up
%(node)s
e0c
none
none
system-defined
disabled
mgmt
%(node)s
e0c
cluster_mgmt
true
true
d3230112-7524-11e4-8608-123478563412
false
%(netmask)s
24
up
cluster_mgmt
c192.168.228.0/24
system_defined
cluster3
192.168.228.43
ipv4
up
%(node)s
e0d
none
system-defined
nextavail
mgmt
%(node)s
e0d
mgmt1
true
true
0ccc57cc-7525-11e4-8608-123478563412
false
%(netmask)s
24
up
node_mgmt
n192.168.228.0/24
system_defined
cluster3-01
%(address)s
ipv4
up
%(node)s
%(vlan)s
nfs
cifs
none
system-defined
nextavail
data
%(node)s
%(vlan)s
%(lif)s
false
true
db4d91b6-95d9-11e4-8608-123478563412
false
%(netmask)s
24
up
data
d10.0.0.0/24
system_defined
%(vserver)s
3
""" % {
'lif': LIF_NAME,
'vserver': VSERVER_NAME,
'node': NODE_NAME,
'address': IP_ADDRESS,
'netmask': NETMASK,
'vlan': VLAN_PORT,
})
LIF_NAMES = ('cluster_mgmt', 'mgmt1', LIF_NAME)
NET_INTERFACE_GET_ITER_RESPONSE_NFS = etree.XML("""
%(address)s
ipv4
up
%(node)s
%(vlan)s
nfs
cifs
none
system-defined
nextavail
data
%(node)s
%(vlan)s
%(lif)s
false
true
db4d91b6-95d9-11e4-8608-123478563412
false
%(netmask)s
24
up
data
d10.0.0.0/24
system_defined
%(vserver)s
1
""" % {
'lif': LIF_NAME,
'vserver': VSERVER_NAME,
'node': NODE_NAME,
'address': IP_ADDRESS,
'netmask': NETMASK,
'vlan': VLAN_PORT,
})
LIFS = (
{'address': '192.168.228.42',
'home-node': NODE_NAME,
'home-port': 'e0c',
'interface-name': 'cluster_mgmt',
'netmask': NETMASK,
'role': 'cluster_mgmt',
'vserver': 'cluster3'
},
{'address': '192.168.228.43',
'home-node': NODE_NAME,
'home-port': 'e0d',
'interface-name': 'mgmt1',
'netmask': NETMASK,
'role': 'node_mgmt',
'vserver': 'cluster3-01'
},
{'address': IP_ADDRESS,
'home-node': NODE_NAME,
'home-port': VLAN_PORT,
'interface-name': LIF_NAME,
'netmask': NETMASK,
'role': 'data',
'vserver': VSERVER_NAME,
},
)
NFS_LIFS = [
{'address': IP_ADDRESS,
'home-node': NODE_NAME,
'home-port': VLAN_PORT,
'interface-name': LIF_NAME,
'netmask': NETMASK,
'role': 'data',
'vserver': VSERVER_NAME,
},
]
NET_INTERFACE_GET_ONE_RESPONSE = etree.XML("""
%(lif)s
%(vserver)s
1
""" % {'lif': LIF_NAME, 'vserver': VSERVER_NAME})
AGGR_GET_NAMES_RESPONSE = etree.XML("""
%(root1)s
%(root2)s
%(aggr1)s
%(aggr2)s
2
""" % {
'root1': ROOT_AGGREGATE_NAMES[0],
'root2': ROOT_AGGREGATE_NAMES[1],
'aggr1': SHARE_AGGREGATE_NAMES[0],
'aggr2': SHARE_AGGREGATE_NAMES[1],
})
AGGR_GET_SPACE_RESPONSE = etree.XML("""
/%(aggr1)s/plex0
/%(aggr1)s/plex0/rg0
45670400
943718400
898048000
%(aggr1)s
/%(aggr2)s/plex0
/%(aggr2)s/plex0/rg0
/%(aggr2)s/plex0/rg1
4267659264
7549747200
3282087936
%(aggr2)s
2
""" % {
'aggr1': SHARE_AGGREGATE_NAMES[0],
'aggr2': SHARE_AGGREGATE_NAMES[1],
})
AGGR_GET_NODE_RESPONSE = etree.XML("""
%(node)s
%(aggr)s
1
""" % {
'aggr': SHARE_AGGREGATE_NAME,
'node': NODE_NAME
})
AGGR_GET_ITER_RESPONSE = etree.XML("""
false
64_bit
1758646411
aggr
512
30384
96
30384
30384
30384
243191
96
0
4082368507
cluster3-01
4082368507
cluster3-01
off
0
active
block
3
cfo
true
false
true
false
false
false
unmirrored
online
1
true
false
/%(aggr1)s/plex0
normal,active
block
false
false
false
/%(aggr1)s/plex0/rg0
0
0
0
on
16
raid_dp, normal
raid_dp
online
false
0
0
true
true
0
0
0
0
0
0
0
0
0
245760
0
95
45670400
943718400
898048000
0
898048000
897802240
1
0
0
%(aggr1)s
15863632-ea49-49a8-9c88-2bd2d57c6d7a
cluster3-01
unknown
false
64_bit
706602229
aggr
528
31142
96
31142
31142
31142
1945584
96
0
4082368507
cluster3-01
4082368507
cluster3-01
off
0
active
block
10
sfo
false
false
true
false
false
false
unmirrored
online
1
true
false
/%(aggr2)s/plex0
normal,active
block
false
false
false
/%(aggr2)s/plex0/rg0
0
0
block
false
false
false
/%(aggr2)s/plex0/rg1
0
0
0
on
8
raid4, normal
raid4
online
false
0
0
true
true
0
0
0
0
0
0
0
0
0
425984
0
15
6448431104
7549747200
1101316096
0
1101316096
1100890112
2
0
0
%(aggr2)s
2a741934-1aaf-42dd-93ca-aaf231be108a
cluster3-01
not_striped
2
""" % {
'aggr1': SHARE_AGGREGATE_NAMES[0],
'aggr2': SHARE_AGGREGATE_NAMES[1],
})
AGGR_GET_ITER_SSC_RESPONSE = etree.XML("""
false
64_bit
1758646411
aggr
512
30384
96
30384
30384
30384
243191
96
0
4082368507
cluster3-01
4082368507
cluster3-01
off
0
active
block
3
cfo
true
false
true
false
false
false
unmirrored
online
1
true
false
/%(aggr1)s/plex0
normal,active
block
false
false
false
/%(aggr1)s/plex0/rg0
0
0
0
on
16
raid_dp, normal
raid_dp
online
false
0
0
true
true
0
0
0
0
0
0
0
0
0
245760
0
95
45670400
943718400
898048000
0
898048000
897802240
1
0
0
%(aggr1)s
15863632-ea49-49a8-9c88-2bd2d57c6d7a
cluster3-01
unknown
1
""" % {'aggr1': SHARE_AGGREGATE_NAMES[0]})
AGGR_GET_ITER_ROOT_AGGR_RESPONSE = etree.XML("""
true
false
%(root1)s
true
false
%(root2)s
false
false
%(aggr1)s
false
false
%(aggr2)s
6
""" % {
'root1': ROOT_AGGREGATE_NAMES[0],
'root2': ROOT_AGGREGATE_NAMES[1],
'aggr1': SHARE_AGGREGATE_NAMES[0],
'aggr2': SHARE_AGGREGATE_NAMES[1],
})
AGGR_GET_ITER_NON_ROOT_AGGR_RESPONSE = etree.XML("""
false
false
%(aggr1)s
false
false
%(aggr2)s
6
""" % {
'aggr1': SHARE_AGGREGATE_NAMES[0],
'aggr2': SHARE_AGGREGATE_NAMES[1],
})
VOLUME_GET_NAME_RESPONSE = etree.XML("""
%(volume)s
%(vserver)s
1
""" % {'volume': SHARE_NAME, 'vserver': VSERVER_NAME})
VOLUME_GET_VOLUME_PATH_RESPONSE = etree.XML("""
/%(volume)s
""" % {'volume': SHARE_NAME})
VOLUME_GET_VOLUME_PATH_CIFS_RESPONSE = etree.XML("""
\\%(volume)s
""" % {'volume': SHARE_NAME})
VOLUME_JUNCTION_PATH = '/' + SHARE_NAME
VOLUME_JUNCTION_PATH_CIFS = '\\' + SHARE_NAME
VOLUME_MODIFY_ITER_RESPONSE = etree.XML("""
0
1
%(volume)s
%(vserver)s
""" % {'volume': SHARE_NAME, 'vserver': VSERVER_NAME})
VOLUME_MODIFY_ITER_ERROR_RESPONSE = etree.XML("""
160
Unable to set volume attribute "size"
%(volume)s
%(vserver)s
1
0
""" % {'volume': SHARE_NAME, 'vserver': VSERVER_NAME})
SNAPSHOT_ACCESS_TIME = '1466640058'
SNAPSHOT_GET_ITER_NOT_BUSY_RESPONSE = etree.XML("""
%(access_time)s
false
%(snap)s
%(volume)s
%(vserver)s
1
""" % {
'access_time': SNAPSHOT_ACCESS_TIME,
'snap': SNAPSHOT_NAME,
'volume': SHARE_NAME,
'vserver': VSERVER_NAME,
})
SNAPSHOT_GET_ITER_BUSY_RESPONSE = etree.XML("""
%(access_time)s
true
%(snap)s
%(volume)s
%(vserver)s
volume clone
1
""" % {
'access_time': SNAPSHOT_ACCESS_TIME,
'snap': SNAPSHOT_NAME,
'volume': SHARE_NAME,
'vserver': VSERVER_NAME,
})
SNAPSHOT_GET_ITER_NOT_UNIQUE_RESPONSE = etree.XML("""
false
%(snap)s
%(volume)s
%(vserver)s
false
%(snap)s
%(root_volume)s
%(admin_vserver)s
1
""" % {
'snap': SNAPSHOT_NAME,
'volume': SHARE_NAME,
'vserver': VSERVER_NAME,
'root_volume': ROOT_VOLUME_NAME,
'admin_vserver': ADMIN_VSERVER_NAME,
})
SNAPSHOT_GET_ITER_UNAVAILABLE_RESPONSE = etree.XML("""
0
13023
%(volume)s
Unable to get information for Snapshot copies of volume \
"%(volume)s" on Vserver "%(vserver)s". Reason: Volume not online.
%(vserver)s
""" % {'volume': SHARE_NAME, 'vserver': VSERVER_NAME})
SNAPSHOT_GET_ITER_OTHER_ERROR_RESPONSE = etree.XML("""
0
99999
%(volume)s
Unable to get information for Snapshot copies of volume \
"%(volume)s" on Vserver "%(vserver)s".
%(vserver)s
""" % {'volume': SHARE_NAME, 'vserver': VSERVER_NAME})
SNAPSHOT_MULTIDELETE_ERROR_RESPONSE = etree.XML("""
13021
%(volume)s
No such snapshot.
""" % {'volume': SHARE_NAME})
SNAPSHOT_GET_ITER_DELETED_RESPONSE = etree.XML("""
deleted_manila_%(snap)s
%(volume)s
%(vserver)s
1
""" % {
'snap': SNAPSHOT_NAME,
'volume': SHARE_NAME,
'vserver': VSERVER_NAME,
})
SNAPSHOT_GET_ITER_SNAPMIRROR_RESPONSE = etree.XML("""
%(snap)s
%(volume)s
%(vserver)s
1
""" % {
'snap': SNAPSHOT_NAME,
'volume': SHARE_NAME,
'vserver': VSERVER_NAME,
})
CIFS_SHARE_ACCESS_CONTROL_GET_ITER = etree.XML("""
full_control
%(volume)s
Administrator
manila_svm_cifs
change
%(volume)s
Administrators
manila_svm_cifs
read
%(volume)s
Power Users
manila_svm_cifs
no_access
%(volume)s
Users
manila_svm_cifs
4
""" % {'volume': SHARE_NAME})
NFS_EXPORT_RULES = ('10.10.10.10', '10.10.10.20')
NFS_EXPORTFS_LIST_RULES_2_NO_RULES_RESPONSE = etree.XML("""
""")
NFS_EXPORTFS_LIST_RULES_2_RESPONSE = etree.XML("""
%(path)s
65534
false
%(host1)s
%(host2)s
%(host1)s
%(host2)s
%(host1)s
%(host2)s
sys
""" % {
'path': VOLUME_JUNCTION_PATH,
'host1': NFS_EXPORT_RULES[0],
'host2': NFS_EXPORT_RULES[1],
})
AGGR_GET_RAID_TYPE_RESPONSE = etree.XML("""
/%(aggr1)s/plex0
/%(aggr1)s/plex0/rg0
%(raid_type1)s
%(aggr1)s
/%(aggr2)s/plex0
/%(aggr2)s/plex0/rg0
/%(aggr2)s/plex0/rg1
%(raid_type2)s
%(aggr2)s
2
""" % {
'aggr1': SHARE_AGGREGATE_NAMES[0],
'aggr2': SHARE_AGGREGATE_NAMES[1],
'raid_type1': SHARE_AGGREGATE_RAID_TYPES[0],
'raid_type2': SHARE_AGGREGATE_RAID_TYPES[1]
})
STORAGE_DISK_GET_ITER_RESPONSE = etree.XML("""
cluster3-01:v5.19
%(type0)s
cluster3-01:v5.20
%(type0)s
cluster3-01:v5.20
%(type1)s
cluster3-01:v5.20
%(type1)s
4
""" % {
'type0': SHARE_AGGREGATE_DISK_TYPES[0],
'type1': SHARE_AGGREGATE_DISK_TYPES[1],
})
STORAGE_DISK_GET_ITER_RESPONSE_PAGE_1 = etree.XML("""
cluster3-01:v4.16
cluster3-01:v4.17
cluster3-01:v4.18
cluster3-01:v4.19
cluster3-01:v4.20
cluster3-01:v4.21
cluster3-01:v4.22
cluster3-01:v4.24
cluster3-01:v4.25
cluster3-01:v4.26
next_tag_1
10
""")
STORAGE_DISK_GET_ITER_RESPONSE_PAGE_2 = etree.XML("""
cluster3-01:v4.27
cluster3-01:v4.28
cluster3-01:v4.29
cluster3-01:v4.32
cluster3-01:v5.16
cluster3-01:v5.17
cluster3-01:v5.18
cluster3-01:v5.19
cluster3-01:v5.20
cluster3-01:v5.21
next_tag_2
10
""")
STORAGE_DISK_GET_ITER_RESPONSE_PAGE_3 = etree.XML("""
cluster3-01:v5.22
cluster3-01:v5.24
cluster3-01:v5.25
cluster3-01:v5.26
cluster3-01:v5.27
cluster3-01:v5.28
cluster3-01:v5.29
cluster3-01:v5.32
8
""")
GET_AGGREGATE_FOR_VOLUME_RESPONSE = etree.XML("""
%(aggr)s
%(share)s
os_aa666789-5576-4835-87b7-868069856459
1
""" % {
'aggr': SHARE_AGGREGATE_NAME,
'share': SHARE_NAME
})
GET_VOLUME_FOR_ENCRYPTED_RESPONSE = etree.XML("""
true
%(volume)s
manila_svm
1
""" % {'volume': SHARE_NAME})
GET_VOLUME_FOR_ENCRYPTED_OLD_SYS_VERSION_RESPONSE = etree.XML("""
%(volume)s
manila_svm
1
""" % {'volume': SHARE_NAME})
EXPORT_RULE_GET_ITER_RESPONSE = etree.XML("""
%(rule)s
%(policy)s
3
manila_svm
%(rule)s
%(policy)s
1
manila_svm
2
""" % {'policy': EXPORT_POLICY_NAME, 'rule': IP_ADDRESS})
VOLUME_GET_EXPORT_POLICY_RESPONSE = etree.XML("""
%(policy)s
%(volume)s
manila_svm
1
""" % {'policy': EXPORT_POLICY_NAME, 'volume': SHARE_NAME})
DELETED_EXPORT_POLICY_GET_ITER_RESPONSE = etree.XML("""
%(policy1)s
%(vserver)s
%(policy2)s
%(vserver)s
%(policy3)s
%(vserver2)s
2
""" % {
'vserver': VSERVER_NAME,
'vserver2': VSERVER_NAME_2,
'policy1': DELETED_EXPORT_POLICIES[VSERVER_NAME][0],
'policy2': DELETED_EXPORT_POLICIES[VSERVER_NAME][1],
'policy3': DELETED_EXPORT_POLICIES[VSERVER_NAME_2][0],
})
LUN_GET_ITER_RESPONSE = etree.XML("""
/vol/%(volume)s/fakelun
%(volume)s
%(vserver)s
1
""" % {
'vserver': VSERVER_NAME,
'volume': SHARE_NAME,
})
VOLUME_GET_ITER_NOT_UNIQUE_RESPONSE = etree.XML("""
%(volume1)s
%(volume2)s
2
""" % {
'volume1': SHARE_NAME,
'volume2': SHARE_NAME_2,
})
VOLUME_GET_ITER_JUNCTIONED_VOLUMES_RESPONSE = etree.XML("""
fake_volume
test
1
""")
VOLUME_GET_ITER_VOLUME_TO_MANAGE_RESPONSE = etree.XML("""
%(aggr)s
/%(volume)s
%(volume)s
%(vserver)s
rw
%(size)s
%(qos-policy-group-name)s
1
""" % {
'aggr': SHARE_AGGREGATE_NAME,
'vserver': VSERVER_NAME,
'volume': SHARE_NAME,
'size': SHARE_SIZE,
'qos-policy-group-name': QOS_POLICY_GROUP_NAME,
})
VOLUME_GET_ITER_NO_QOS_RESPONSE = etree.XML("""
%(aggr)s
/%(volume)s
%(volume)s
%(vserver)s
rw
%(size)s
1
""" % {
'aggr': SHARE_AGGREGATE_NAME,
'vserver': VSERVER_NAME,
'volume': SHARE_NAME,
'size': SHARE_SIZE,
})
CLONE_CHILD_1 = 'fake_child_1'
CLONE_CHILD_2 = 'fake_child_2'
VOLUME_GET_ITER_CLONE_CHILDREN_RESPONSE = etree.XML("""
%(clone1)s
%(vserver)s
%(clone2)s
%(vserver)s
2
""" % {
'vserver': VSERVER_NAME,
'clone1': CLONE_CHILD_1,
'clone2': CLONE_CHILD_2,
})
VOLUME_GET_ITER_PARENT_SNAP_EMPTY_RESPONSE = etree.XML("""
%(name)s
%(vserver)s
1
""" % {
'vserver': VSERVER_NAME,
'name': SHARE_NAME,
})
VOLUME_GET_ITER_PARENT_SNAP_RESPONSE = etree.XML("""
%(snapshot_name)s
%(name)s
%(vserver)s
1
""" % {
'snapshot_name': SNAPSHOT_NAME,
'vserver': VSERVER_NAME,
'name': SHARE_NAME,
})
SIS_GET_ITER_RESPONSE = etree.XML("""
true
/vol/%(volume)s
enabled
%(vserver)s
""" % {
'vserver': VSERVER_NAME,
'volume': SHARE_NAME,
})
CLUSTER_PEER_GET_ITER_RESPONSE = etree.XML("""
%(addr1)s
%(addr2)s
available
%(cluster)s
fake_uuid
%(addr1)s
%(remote_cluster)s
fake_serial_number
60
1
""" % {
'addr1': CLUSTER_ADDRESS_1,
'addr2': CLUSTER_ADDRESS_2,
'cluster': CLUSTER_NAME,
'remote_cluster': REMOTE_CLUSTER_NAME,
})
CLUSTER_PEER_POLICY_GET_RESPONSE = etree.XML("""
false
8
""")
CLUSTER_GET_CLUSTER_NAME = etree.XML("""
-
%(cluster_name)s
1-80-000000
fake_uuid
fake_rdb
""" % {
'cluster_name': CLUSTER_NAME,
})
VSERVER_PEER_GET_ITER_RESPONSE = etree.XML("""
snapmirror
%(cluster)s
peered
%(vserver2)s
%(vserver1)s
2
""" % {
'cluster': CLUSTER_NAME,
'vserver1': VSERVER_NAME,
'vserver2': VSERVER_NAME_2
})
SNAPMIRROR_GET_ITER_RESPONSE = etree.XML("""
fake_destination_volume
fake_destination_node
fake_destination_vserver
fake_snapshot
1442701782
false
true
2187
109
1442701890
test:manila
1171456
initialize
0
snapmirrored
fake_snapshot
1442701782
DPDefault
v2
ea8bfcc6-5f1d-11e5-8446-123478563412
idle
data_protection
daily
fake_source_volume
fake_source_vserver
fake_destination_vserver
1
""")
SNAPMIRROR_GET_ITER_FILTERED_RESPONSE = etree.XML("""
fake_destination_vserver
fake_destination_volume
true
snapmirrored
daily
fake_source_vserver
fake_source_volume
1
""")
SNAPMIRROR_INITIALIZE_RESULT = etree.XML("""
succeeded
""")
VOLUME_MOVE_GET_ITER_RESULT = etree.XML("""
retry_on_failure
Cutover Completed::Volume move job finishing move
1481919246
82
finishing
healthy
%(volume)s
%(vserver)s
1
""" % {
'volume': SHARE_NAME,
'vserver': VSERVER_NAME,
})
PERF_OBJECT_COUNTER_TOTAL_CP_MSECS_LABELS = [
'SETUP', 'PRE_P0', 'P0_SNAP_DEL', 'P1_CLEAN', 'P1_QUOTA', 'IPU_DISK_ADD',
'P2V_INOFILE', 'P2V_INO_PUB', 'P2V_INO_PRI', 'P2V_FSINFO', 'P2V_DLOG1',
'P2V_DLOG2', 'P2V_REFCOUNT', 'P2V_TOPAA', 'P2V_DF_SCORES_SUB', 'P2V_BM',
'P2V_SNAP', 'P2V_DF_SCORES', 'P2V_VOLINFO', 'P2V_CONT', 'P2A_INOFILE',
'P2A_INO', 'P2A_DLOG1', 'P2A_HYA', 'P2A_DLOG2', 'P2A_FSINFO',
'P2A_IPU_BITMAP_GROW', 'P2A_REFCOUNT', 'P2A_TOPAA', 'P2A_HYABC', 'P2A_BM',
'P2A_SNAP', 'P2A_VOLINFO', 'P2_FLUSH', 'P2_FINISH', 'P3_WAIT',
'P3V_VOLINFO', 'P3A_VOLINFO', 'P3_FINISH', 'P4_FINISH', 'P5_FINISH',
]
PERF_OBJECT_COUNTER_LIST_INFO_WAFL_RESPONSE = etree.XML("""
No. of times 8.3 names are accessed per second.
access_8_3_names
diag
rate
per_sec
Array of counts of different types of CPs
wafl_timer generated CP
snapshot generated CP
wafl_avail_bufs generated CP
dirty_blk_cnt generated CP
full NV-log generated CP,back-to-back CP
flush generated CP,sync generated CP
deferred back-to-back CP
low mbufs generated CP
low datavecs generated CP
nvlog replay takeover time limit CP
cp_count
diag
delta
array
none
total_cp_msecs
Array of percentage time spent in different phases of CP
%(labels)s
cp_phase_times
diag
percent
array
percent
""" % {'labels': ','.join(PERF_OBJECT_COUNTER_TOTAL_CP_MSECS_LABELS)})
PERF_OBJECT_GET_INSTANCES_SYSTEM_RESPONSE_CMODE = etree.XML("""
avg_processor_busy
5674745133134
system
%(node1)s:kernel:system
avg_processor_busy
4077649009234
system
%(node2)s:kernel:system
1453412013
""" % {'node1': NODE_NAMES[0], 'node2': NODE_NAMES[1]})
PERF_OBJECT_GET_INSTANCES_SYSTEM_RESPONSE_7MODE = etree.XML("""
1454146292
system
avg_processor_busy
13215732322
""")
PERF_OBJECT_INSTANCE_LIST_INFO_ITER_RESPONSE = etree.XML("""
system
%(node)s:kernel:system
1
""" % {'node': NODE_NAME})
PERF_OBJECT_INSTANCE_LIST_INFO_RESPONSE = etree.XML("""
processor0
processor1
""")
NET_ROUTES_CREATE_RESPONSE = etree.XML("""
ipv4
%(subnet)s
%(gateway)s
20
%(vserver)s
""" % {
'gateway': GATEWAY,
'vserver': VSERVER_NAME,
'subnet': SUBNET,
})
QOS_POLICY_GROUP_GET_ITER_RESPONSE = etree.XML("""
%(max_throughput)s
1
%(qos_policy_group_name)s
%(vserver)s
1
""" % {
'qos_policy_group_name': QOS_POLICY_GROUP_NAME,
'vserver': VSERVER_NAME,
'max_throughput': QOS_MAX_THROUGHPUT,
})
FAKE_VOL_XML = """
open123
online
0
0
0
false
false
"""
FAKE_XML1 = """\
abc\
abc\
"""
FAKE_XML2 = """somecontent"""
FAKE_NA_ELEMENT = api.NaElement(etree.XML(FAKE_VOL_XML))
FAKE_INVOKE_DATA = 'somecontent'
FAKE_XML_STR = 'abc'
FAKE_API_NAME = 'volume-get-iter'
FAKE_API_NAME_ELEMENT = api.NaElement(FAKE_API_NAME)
FAKE_NA_SERVER_STR = '127.0.0.1'
FAKE_NA_SERVER = api.NaServer(FAKE_NA_SERVER_STR)
FAKE_NA_SERVER_API_1_5 = api.NaServer(FAKE_NA_SERVER_STR)
FAKE_NA_SERVER_API_1_5.set_vfiler('filer')
FAKE_NA_SERVER_API_1_5.set_api_version(1, 5)
FAKE_NA_SERVER_API_1_14 = api.NaServer(FAKE_NA_SERVER_STR)
FAKE_NA_SERVER_API_1_14.set_vserver('server')
FAKE_NA_SERVER_API_1_14.set_api_version(1, 14)
FAKE_NA_SERVER_API_1_20 = api.NaServer(FAKE_NA_SERVER_STR)
FAKE_NA_SERVER_API_1_20.set_vfiler('filer')
FAKE_NA_SERVER_API_1_20.set_vserver('server')
FAKE_NA_SERVER_API_1_20.set_api_version(1, 20)
FAKE_QUERY = {'volume-attributes': None}
FAKE_DES_ATTR = {'volume-attributes': ['volume-id-attributes',
'volume-space-attributes',
'volume-state-attributes',
'volume-qos-attributes']}
FAKE_CALL_ARGS_LIST = [mock.call(80), mock.call(8088), mock.call(443),
mock.call(8488)]
FAKE_RESULT_API_ERR_REASON = api.NaElement('result')
FAKE_RESULT_API_ERR_REASON.add_attr('errno', '000')
FAKE_RESULT_API_ERR_REASON.add_attr('reason', 'fake_reason')
FAKE_RESULT_API_ERRNO_INVALID = api.NaElement('result')
FAKE_RESULT_API_ERRNO_INVALID.add_attr('errno', '000')
FAKE_RESULT_API_ERRNO_VALID = api.NaElement('result')
FAKE_RESULT_API_ERRNO_VALID.add_attr('errno', '14956')
FAKE_RESULT_SUCCESS = api.NaElement('result')
FAKE_RESULT_SUCCESS.add_attr('status', 'passed')
FAKE_HTTP_SESSION = requests.Session()
FAKE_MANAGE_VOLUME = {
'aggregate': SHARE_AGGREGATE_NAME,
'name': SHARE_NAME,
'owning-vserver-name': VSERVER_NAME,
'junction_path': VOLUME_JUNCTION_PATH,
'style': 'fake_style',
'size': SHARE_SIZE,
}
FAKE_KEY_MANAGER_ERROR = "The onboard key manager is not enabled. To enable \
it, run \"security key-manager setup\"."