118 lines
5.1 KiB
Python
118 lines
5.1 KiB
Python
import charms_openstack.charm
|
|
|
|
charms_openstack.charm.use_defaults('charm.default-select-release')
|
|
|
|
|
|
class CinderpurestorageCharm(
|
|
charms_openstack.charm.CinderStoragePluginCharm):
|
|
|
|
name = 'cinder_purestorage'
|
|
version_package = 'python-purestorage'
|
|
release = 'ocata'
|
|
packages = [version_package]
|
|
release_pkg = 'cinder-common'
|
|
stateless = True
|
|
# Specify any config that the user *must* set.
|
|
mandatory_config = [
|
|
'san-ip', 'pure-api-token', 'protocol', 'volume-backend-name']
|
|
|
|
def cinder_configuration(self):
|
|
drivers = {
|
|
'iscsi': 'cinder.volume.drivers.pure.PureISCSIDriver',
|
|
'fc': 'cinder.volume.drivers.pure.PureFCDriver',
|
|
'nvme-roce': 'cinder.volume.drivers.pure.PureNVMEDriver',
|
|
}
|
|
service = self.config.get('volume-backend-name')
|
|
volumedriver = drivers.get(self.config.get('protocol'))
|
|
image_cache = []
|
|
iscsi = []
|
|
nvme_roce = []
|
|
repl = []
|
|
driver_options = [
|
|
('san_ip', self.config.get('san-ip')),
|
|
('pure_api_token', self.config.get('pure-api-token')),
|
|
('use_multipath_for_image_xfer', self.config.get('use-multipath')),
|
|
('image_volume_cache_enabled',
|
|
self.config.get('use-image-cache')),
|
|
('pure_eradicate_on_delete',
|
|
self.config.get('eradicate-on-delete')),
|
|
('pure_automatic_max_oversubscription_ratio',
|
|
self.config.get('automatic-max-oversubscription')),
|
|
('volume_driver', volumedriver),
|
|
('volume_backend_name', service),
|
|
('allowed_direct_url_schemes', 'cinder')]
|
|
|
|
backend_az = self.config.get('backend-availability-zone')
|
|
if backend_az:
|
|
driver_options.append(
|
|
('backend_availability_zone', backend_az))
|
|
|
|
if self.config.get('protocol') == 'nvme-roce':
|
|
if self.config.get('nvme-cidr'):
|
|
nvme_roce.extend([('pure_nvme_cidr',
|
|
self.config.get('nvme-cidr'))])
|
|
|
|
if self.config.get('protocol') == 'iscsi':
|
|
if self.config.get('iscsi-cidr'):
|
|
iscsi.extend([('pure_iscsi_cidr',
|
|
self.config.get('iscsi-cidr'))])
|
|
if self.config.get('use-chap'):
|
|
iscsi.extend([('use_chap_auth',
|
|
self.config.get('use-chap'))])
|
|
|
|
if self.config.get('use-image-cache'):
|
|
max_size_gb = self.config.get('image-volume-cache-max-size-gb')
|
|
if max_size_gb is not None:
|
|
image_cache.append(('image_volume_cache_max_size_gb',
|
|
max_size_gb))
|
|
|
|
max_count = self.config.get('image-volume-cache-max-count')
|
|
if max_count is not None:
|
|
image_cache.append(('image_volume_cache_max_count', max_count))
|
|
|
|
if self.config.get('use-replication'):
|
|
replication_device = 'backend_id:' + \
|
|
self.config.get('replication-target-name') + \
|
|
',san_ip:' + \
|
|
self.config.get('replication-target-address') + \
|
|
',api_token:' + \
|
|
self.config.get('replication-target-api-token')
|
|
if self.config.get('replication-type') == 'sync':
|
|
replication_device += ',type:sync'
|
|
if self.config.get('replication-sync-uniform', False):
|
|
replication_device += ',uniform:true'
|
|
repl = [('replication_device',
|
|
replication_device)]
|
|
if self.config.get('replica-interval'):
|
|
repl.extend([('pure_replica_interval_default',
|
|
self.config.get('replica-interval'))])
|
|
if self.config.get('pure-replica-retention-short'):
|
|
repl.extend([('pure_replica_retention_short_term_default',
|
|
self.config.get('pure-replica-retention-short'))])
|
|
if self.config.get('replica-retention-per-day'):
|
|
# required for pep8 max line length compliance
|
|
TEMP_VAR = 'pure_replica_retention_long_term_per_day_default'
|
|
repl.extend([(TEMP_VAR,
|
|
self.config.get('replica-retention-per-day'))])
|
|
if self.config.get('replica-retention-long'):
|
|
repl.extend([('pure_replica_retention_long_term_default',
|
|
self.config.get('replica-retention-long'))])
|
|
if self.config.get('replication-pgname'):
|
|
repl.extend([('pure_replication_pg_name',
|
|
self.config.get('replication-pgname'))])
|
|
if self.config.get('replication-pod'):
|
|
repl.extend([('pure_replication_pod_name',
|
|
self.config.get('replication-pod'))])
|
|
|
|
final_options = driver_options + image_cache + repl + iscsi + nvme_roce
|
|
return final_options
|
|
|
|
|
|
class CinderpurestorageCharmRocky(CinderpurestorageCharm):
|
|
|
|
# Rocky needs py3 packages.
|
|
release = 'rocky'
|
|
version_package = 'python3-purestorage'
|
|
packages = [version_package]
|
|
purge_packages = ['python-purestorage']
|