Skip to content

Commit 5ef31d8

Browse files
authored
Merge pull request #51 from huangpeng5/cinder_930
Openstack Cinder、Manila 2.6.2 Version
2 parents b16d9c2 + 0c35321 commit 5ef31d8

File tree

111 files changed

+2823
-917
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

111 files changed

+2823
-917
lines changed

Cinder/Mitaka/huawei_conf.py

Lines changed: 48 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ def update_config_value(self):
9595
self._replication_pair_sync_speed,
9696
self._get_local_minimum_fc_initiator,
9797
self._hyper_enforce_multipath,
98+
self._get_local_in_band_or_not,
99+
self._get_local_storage_sn,
98100
self._rollback_speed)
99101

100102
tree = ET.parse(self.conf.cinder_huawei_conf_file,
@@ -103,14 +105,8 @@ def update_config_value(self):
103105
for f in set_attr_funcs:
104106
f(xml_root)
105107

106-
def _ssl_cert_path(self, xml_root):
107-
text = xml_root.findtext('Storage/SSLCertPath')
108-
if text:
109-
setattr(self.conf, 'ssl_cert_path', text)
110-
else:
111-
setattr(self.conf, 'ssl_cert_path', None)
112-
113-
def _ssl_cert_verify(self, xml_root):
108+
@staticmethod
109+
def _get_ssl_verify(xml_root):
114110
value = False
115111
text = xml_root.findtext('Storage/SSLCertVerify')
116112
if text:
@@ -120,7 +116,22 @@ def _ssl_cert_verify(self, xml_root):
120116
msg = _("SSLCertVerify configured error.")
121117
LOG.error(msg)
122118
raise exception.InvalidInput(reason=msg)
119+
return value
120+
121+
def _ssl_cert_path(self, xml_root):
122+
text = xml_root.findtext('Storage/SSLCertPath')
123+
ssl_value = self._get_ssl_verify(xml_root)
124+
if text and ssl_value:
125+
setattr(self.conf, 'ssl_cert_path', text)
126+
elif not text and ssl_value:
127+
msg = _("Cert path is necessary if SSLCertVerify is True.")
128+
LOG.error(msg)
129+
raise exception.InvalidInput(reason=msg)
130+
else:
131+
setattr(self.conf, 'ssl_cert_path', None)
123132

133+
def _ssl_cert_verify(self, xml_root):
134+
value = self._get_ssl_verify(xml_root)
124135
setattr(self.conf, 'ssl_cert_verify', value)
125136

126137
def _san_address(self, xml_root):
@@ -468,6 +479,10 @@ def get_hypermetro_devices(self):
468479
dev_config['metro_sync_completed'] = (
469480
dev['metro_sync_completed']
470481
if 'metro_sync_completed' in dev else "True")
482+
dev_config['in_band_or_not'] = (
483+
dev['in_band_or_not'].lower() == 'true'
484+
if 'in_band_or_not' in dev else False)
485+
dev_config['storage_sn'] = dev.get('storage_sn')
471486
devs_config.append(dev_config)
472487

473488
return devs_config
@@ -494,6 +509,10 @@ def get_replication_devices(self):
494509
dev['iscsi_default_target_ip'].split(';')
495510
if 'iscsi_default_target_ip' in dev
496511
else [])
512+
dev_config['in_band_or_not'] = (
513+
dev['in_band_or_not'].lower() == 'true'
514+
if 'in_band_or_not' in dev else False)
515+
dev_config['storage_sn'] = dev.get('storage_sn')
497516
devs_config.append(dev_config)
498517

499518
return devs_config
@@ -509,6 +528,8 @@ def get_local_device(self):
509528
'iscsi_info': self.conf.iscsi_info,
510529
'fc_info': self.conf.fc_info,
511530
'iscsi_default_target_ip': self.conf.iscsi_default_target_ip,
531+
'in_band_or_not': self.conf.in_band_or_not,
532+
'storage_sn': self.conf.storage_sn,
512533
}
513534
return dev_config
514535

@@ -611,6 +632,25 @@ def _get_local_minimum_fc_initiator(self, xml_root):
611632
raise exception.InvalidInput(reason=msg)
612633
setattr(self.conf, 'min_fc_ini_online', minimum_fc_initiator)
613634

635+
def _get_local_in_band_or_not(self, xml_root):
636+
in_band_or_not = False
637+
text = xml_root.findtext('Storage/InBandOrNot')
638+
if text:
639+
if text.lower() in ('true', 'false'):
640+
in_band_or_not = text.lower() == 'true'
641+
else:
642+
msg = _("InBandOrNot configured error.")
643+
LOG.error(msg)
644+
raise exception.InvalidInput(reason=msg)
645+
646+
setattr(self.conf, 'in_band_or_not', in_band_or_not)
647+
648+
def _get_local_storage_sn(self, xml_root):
649+
text = xml_root.findtext('Storage/Storagesn')
650+
storage_sn = text.strip() if text else None
651+
652+
setattr(self.conf, 'storage_sn', storage_sn)
653+
614654
def _rollback_speed(self, xml_root):
615655
text = xml_root.findtext('LUN/SnapshotRollbackSpeed')
616656
if text and text.strip() not in constants.SNAPSHOT_ROLLBACK_SPEED_TYPES:

Cinder/Mitaka/rest_client.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,18 @@ def __init__(self, configuration, san_address, san_user, san_password,
7070
self.url = None
7171
self.ssl_cert_verify = self.configuration.ssl_cert_verify
7272
self.ssl_cert_path = self.configuration.ssl_cert_path
73+
self.in_band_or_not = kwargs.get('in_band_or_not',
74+
self.configuration.in_band_or_not)
75+
self.storage_sn = kwargs.get('storage_sn',
76+
self.configuration.storage_sn)
7377
self.is_dorado_v6 = False
7478

79+
if self.in_band_or_not and not self.storage_sn:
80+
msg = _("'Storagesn' is must be set if 'InBandOrNot' is True,"
81+
" Please Check Your config")
82+
LOG.error(msg)
83+
raise exception.VolumeBackendAPIException(data=msg)
84+
7585
if not self.ssl_cert_verify and hasattr(requests, 'packages'):
7686
LOG.warning("Suppressing requests library SSL Warnings")
7787
requests.packages.urllib3.disable_warnings(
@@ -82,13 +92,14 @@ def __init__(self, configuration, san_address, san_user, san_password,
8292
def init_http_head(self):
8393
self.url = None
8494
self.session = requests.Session()
85-
self.session.headers.update({
95+
session_headers = {
8696
"Connection": "keep-alive",
87-
"Content-Type": "application/json"})
88-
self.session.verify = False
97+
"Content-Type": "application/json"}
98+
if self.in_band_or_not:
99+
session_headers["IBA-Target-Array"] = self.storage_sn
100+
self.session.headers.update(session_headers)
89101

90-
if self.ssl_cert_verify:
91-
self.session.verify = self.ssl_cert_path
102+
self.session.verify = self.ssl_cert_path if self.ssl_cert_verify else False
92103

93104
def do_call(self, url=None, data=None, method=None,
94105
calltimeout=constants.SOCKET_TIMEOUT, filter_flag=False):

Cinder/Newton/huawei_conf.py

Lines changed: 48 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ def update_config_value(self):
9595
self._replication_pair_sync_speed,
9696
self._get_local_minimum_fc_initiator,
9797
self._hyper_enforce_multipath,
98+
self._get_local_in_band_or_not,
99+
self._get_local_storage_sn,
98100
self._rollback_speed)
99101

100102
tree = ET.parse(self.conf.cinder_huawei_conf_file,
@@ -103,14 +105,8 @@ def update_config_value(self):
103105
for f in set_attr_funcs:
104106
f(xml_root)
105107

106-
def _ssl_cert_path(self, xml_root):
107-
text = xml_root.findtext('Storage/SSLCertPath')
108-
if text:
109-
setattr(self.conf, 'ssl_cert_path', text)
110-
else:
111-
setattr(self.conf, 'ssl_cert_path', None)
112-
113-
def _ssl_cert_verify(self, xml_root):
108+
@staticmethod
109+
def _get_ssl_verify(xml_root):
114110
value = False
115111
text = xml_root.findtext('Storage/SSLCertVerify')
116112
if text:
@@ -120,7 +116,22 @@ def _ssl_cert_verify(self, xml_root):
120116
msg = _("SSLCertVerify configured error.")
121117
LOG.error(msg)
122118
raise exception.InvalidInput(reason=msg)
119+
return value
120+
121+
def _ssl_cert_path(self, xml_root):
122+
text = xml_root.findtext('Storage/SSLCertPath')
123+
ssl_value = self._get_ssl_verify(xml_root)
124+
if text and ssl_value:
125+
setattr(self.conf, 'ssl_cert_path', text)
126+
elif not text and ssl_value:
127+
msg = _("Cert path is necessary if SSLCertVerify is True.")
128+
LOG.error(msg)
129+
raise exception.InvalidInput(reason=msg)
130+
else:
131+
setattr(self.conf, 'ssl_cert_path', None)
123132

133+
def _ssl_cert_verify(self, xml_root):
134+
value = self._get_ssl_verify(xml_root)
124135
setattr(self.conf, 'ssl_cert_verify', value)
125136

126137
def _san_address(self, xml_root):
@@ -468,6 +479,10 @@ def get_hypermetro_devices(self):
468479
dev_config['metro_sync_completed'] = (
469480
dev['metro_sync_completed']
470481
if 'metro_sync_completed' in dev else "True")
482+
dev_config['in_band_or_not'] = (
483+
dev['in_band_or_not'].lower() == 'true'
484+
if 'in_band_or_not' in dev else False)
485+
dev_config['storage_sn'] = dev.get('storage_sn')
471486
devs_config.append(dev_config)
472487

473488
return devs_config
@@ -494,6 +509,10 @@ def get_replication_devices(self):
494509
dev['iscsi_default_target_ip'].split(';')
495510
if 'iscsi_default_target_ip' in dev
496511
else [])
512+
dev_config['in_band_or_not'] = (
513+
dev['in_band_or_not'].lower() == 'true'
514+
if 'in_band_or_not' in dev else False)
515+
dev_config['storage_sn'] = dev.get('storage_sn')
497516
devs_config.append(dev_config)
498517

499518
return devs_config
@@ -509,6 +528,8 @@ def get_local_device(self):
509528
'iscsi_info': self.conf.iscsi_info,
510529
'fc_info': self.conf.fc_info,
511530
'iscsi_default_target_ip': self.conf.iscsi_default_target_ip,
531+
'in_band_or_not': self.conf.in_band_or_not,
532+
'storage_sn': self.conf.storage_sn,
512533
}
513534
return dev_config
514535

@@ -611,6 +632,25 @@ def _get_local_minimum_fc_initiator(self, xml_root):
611632
raise exception.InvalidInput(reason=msg)
612633
setattr(self.conf, 'min_fc_ini_online', minimum_fc_initiator)
613634

635+
def _get_local_in_band_or_not(self, xml_root):
636+
in_band_or_not = False
637+
text = xml_root.findtext('Storage/InBandOrNot')
638+
if text:
639+
if text.lower() in ('true', 'false'):
640+
in_band_or_not = text.lower() == 'true'
641+
else:
642+
msg = _("InBandOrNot configured error.")
643+
LOG.error(msg)
644+
raise exception.InvalidInput(reason=msg)
645+
646+
setattr(self.conf, 'in_band_or_not', in_band_or_not)
647+
648+
def _get_local_storage_sn(self, xml_root):
649+
text = xml_root.findtext('Storage/Storagesn')
650+
storage_sn = text.strip() if text else None
651+
652+
setattr(self.conf, 'storage_sn', storage_sn)
653+
614654
def _rollback_speed(self, xml_root):
615655
text = xml_root.findtext('LUN/SnapshotRollbackSpeed')
616656
if text and text.strip() not in constants.SNAPSHOT_ROLLBACK_SPEED_TYPES:

Cinder/Newton/rest_client.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,18 @@ def __init__(self, configuration, san_address, san_user, san_password,
7070
self.url = None
7171
self.ssl_cert_verify = self.configuration.ssl_cert_verify
7272
self.ssl_cert_path = self.configuration.ssl_cert_path
73+
self.in_band_or_not = kwargs.get('in_band_or_not',
74+
self.configuration.in_band_or_not)
75+
self.storage_sn = kwargs.get('storage_sn',
76+
self.configuration.storage_sn)
7377
self.is_dorado_v6 = False
7478

79+
if self.in_band_or_not and not self.storage_sn:
80+
msg = _("'Storagesn' is must be set if 'InBandOrNot' is True,"
81+
" Please Check Your config")
82+
LOG.error(msg)
83+
raise exception.VolumeBackendAPIException(data=msg)
84+
7585
if not self.ssl_cert_verify and hasattr(requests, 'packages'):
7686
LOG.warning("Suppressing requests library SSL Warnings")
7787
requests.packages.urllib3.disable_warnings(
@@ -82,13 +92,14 @@ def __init__(self, configuration, san_address, san_user, san_password,
8292
def init_http_head(self):
8393
self.url = None
8494
self.session = requests.Session()
85-
self.session.headers.update({
95+
session_headers = {
8696
"Connection": "keep-alive",
87-
"Content-Type": "application/json"})
88-
self.session.verify = False
97+
"Content-Type": "application/json"}
98+
if self.in_band_or_not:
99+
session_headers["IBA-Target-Array"] = self.storage_sn
100+
self.session.headers.update(session_headers)
89101

90-
if self.ssl_cert_verify:
91-
self.session.verify = self.ssl_cert_path
102+
self.session.verify = self.ssl_cert_path if self.ssl_cert_verify else False
92103

93104
def do_call(self, url=None, data=None, method=None,
94105
calltimeout=constants.SOCKET_TIMEOUT, filter_flag=False):

Cinder/Ocata/huawei_conf.py

Lines changed: 48 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ def update_config_value(self):
9595
self._replication_pair_sync_speed,
9696
self._get_local_minimum_fc_initiator,
9797
self._hyper_enforce_multipath,
98+
self._get_local_in_band_or_not,
99+
self._get_local_storage_sn,
98100
self._rollback_speed)
99101

100102
tree = ET.parse(self.conf.cinder_huawei_conf_file,
@@ -103,14 +105,8 @@ def update_config_value(self):
103105
for f in set_attr_funcs:
104106
f(xml_root)
105107

106-
def _ssl_cert_path(self, xml_root):
107-
text = xml_root.findtext('Storage/SSLCertPath')
108-
if text:
109-
setattr(self.conf, 'ssl_cert_path', text)
110-
else:
111-
setattr(self.conf, 'ssl_cert_path', None)
112-
113-
def _ssl_cert_verify(self, xml_root):
108+
@staticmethod
109+
def _get_ssl_verify(xml_root):
114110
value = False
115111
text = xml_root.findtext('Storage/SSLCertVerify')
116112
if text:
@@ -120,7 +116,22 @@ def _ssl_cert_verify(self, xml_root):
120116
msg = _("SSLCertVerify configured error.")
121117
LOG.error(msg)
122118
raise exception.InvalidInput(reason=msg)
119+
return value
120+
121+
def _ssl_cert_path(self, xml_root):
122+
text = xml_root.findtext('Storage/SSLCertPath')
123+
ssl_value = self._get_ssl_verify(xml_root)
124+
if text and ssl_value:
125+
setattr(self.conf, 'ssl_cert_path', text)
126+
elif not text and ssl_value:
127+
msg = _("Cert path is necessary if SSLCertVerify is True.")
128+
LOG.error(msg)
129+
raise exception.InvalidInput(reason=msg)
130+
else:
131+
setattr(self.conf, 'ssl_cert_path', None)
123132

133+
def _ssl_cert_verify(self, xml_root):
134+
value = self._get_ssl_verify(xml_root)
124135
setattr(self.conf, 'ssl_cert_verify', value)
125136

126137
def _san_address(self, xml_root):
@@ -468,6 +479,10 @@ def get_hypermetro_devices(self):
468479
dev_config['metro_sync_completed'] = (
469480
dev['metro_sync_completed']
470481
if 'metro_sync_completed' in dev else "True")
482+
dev_config['in_band_or_not'] = (
483+
dev['in_band_or_not'].lower() == 'true'
484+
if 'in_band_or_not' in dev else False)
485+
dev_config['storage_sn'] = dev.get('storage_sn')
471486
devs_config.append(dev_config)
472487

473488
return devs_config
@@ -494,6 +509,10 @@ def get_replication_devices(self):
494509
dev['iscsi_default_target_ip'].split(';')
495510
if 'iscsi_default_target_ip' in dev
496511
else [])
512+
dev_config['in_band_or_not'] = (
513+
dev['in_band_or_not'].lower() == 'true'
514+
if 'in_band_or_not' in dev else False)
515+
dev_config['storage_sn'] = dev.get('storage_sn')
497516
devs_config.append(dev_config)
498517

499518
return devs_config
@@ -509,6 +528,8 @@ def get_local_device(self):
509528
'iscsi_info': self.conf.iscsi_info,
510529
'fc_info': self.conf.fc_info,
511530
'iscsi_default_target_ip': self.conf.iscsi_default_target_ip,
531+
'in_band_or_not': self.conf.in_band_or_not,
532+
'storage_sn': self.conf.storage_sn,
512533
}
513534
return dev_config
514535

@@ -611,6 +632,25 @@ def _get_local_minimum_fc_initiator(self, xml_root):
611632
raise exception.InvalidInput(reason=msg)
612633
setattr(self.conf, 'min_fc_ini_online', minimum_fc_initiator)
613634

635+
def _get_local_in_band_or_not(self, xml_root):
636+
in_band_or_not = False
637+
text = xml_root.findtext('Storage/InBandOrNot')
638+
if text:
639+
if text.lower() in ('true', 'false'):
640+
in_band_or_not = text.lower() == 'true'
641+
else:
642+
msg = _("InBandOrNot configured error.")
643+
LOG.error(msg)
644+
raise exception.InvalidInput(reason=msg)
645+
646+
setattr(self.conf, 'in_band_or_not', in_band_or_not)
647+
648+
def _get_local_storage_sn(self, xml_root):
649+
text = xml_root.findtext('Storage/Storagesn')
650+
storage_sn = text.strip() if text else None
651+
652+
setattr(self.conf, 'storage_sn', storage_sn)
653+
614654
def _rollback_speed(self, xml_root):
615655
text = xml_root.findtext('LUN/SnapshotRollbackSpeed')
616656
if text and text.strip() not in constants.SNAPSHOT_ROLLBACK_SPEED_TYPES:

0 commit comments

Comments
 (0)