Hello community,
here is the log from the commit of package ceph-iscsi for openSUSE:Factory checked in at 2019-05-10 09:19:57
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ceph-iscsi (Old)
and /work/SRC/openSUSE:Factory/.ceph-iscsi.new.5148 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ceph-iscsi"
Fri May 10 09:19:57 2019 rev:11 rq:701825 version:3.0+1557415271.g940ac86
Changes:
--------
--- /work/SRC/openSUSE:Factory/ceph-iscsi/ceph-iscsi.changes 2019-04-30 13:06:38.421556649 +0200
+++ /work/SRC/openSUSE:Factory/.ceph-iscsi.new.5148/ceph-iscsi.changes 2019-05-10 09:20:01.400495426 +0200
@@ -1,0 +2,14 @@
+Thu May 9 15:21:26 UTC 2019 - Nathan Cutler
+
+- Update to 3.0+1557415271.g940ac86:
+ + Fix race condition on target disk add (bsc#1134479)
+
+-------------------------------------------------------------------
+Thu May 9 10:28:06 UTC 2019 - Nathan Cutler
+
+- Update to 3.0+1557397680.g929bd14:
+ + logger level is now configurable
+ + tcmu-runner supports all RBD features
+ + allow deletion of a target that doesn't exist in LIO
+
+-------------------------------------------------------------------
Old:
----
ceph-iscsi-3.0+1556546618.g28a0e8a.tar.gz
New:
----
ceph-iscsi-3.0+1557415271.g940ac86.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ceph-iscsi.spec ++++++
--- /var/tmp/diff_new_pack.XFfL6B/_old 2019-05-10 09:20:02.456498374 +0200
+++ /var/tmp/diff_new_pack.XFfL6B/_new 2019-05-10 09:20:02.460498385 +0200
@@ -20,7 +20,7 @@
Name: ceph-iscsi
-Version: 3.0+1556546618.g28a0e8a
+Version: 3.0+1557415271.g940ac86
Release: 1%{?dist}
Group: System/Filesystems
Summary: Python modules for Ceph iSCSI gateway configuration management
@@ -72,7 +72,8 @@
%endif
%endif
-BuildRequires: systemd
+BuildRequires: systemd-rpm-macros
+%{?systemd_requires}
%description
Python package providing the modules used to handle the configuration of an
@@ -136,22 +137,26 @@
%post
%if 0%{?fedora} || 0%{?rhel}
-/bin/systemctl --system daemon-reload &> /dev/null || :
-/bin/systemctl --system enable rbd-target-gw &> /dev/null || :
-/bin/systemctl --system enable rbd-target-api &> /dev/null || :
+%systemd_post rbd-target-gw.service
+%systemd_post rbd-target-api.service
%endif
%if 0%{?suse_version}
%service_add_post rbd-target-gw.service rbd-target-api.service
%endif
%preun
+%if 0%{?fedora} || 0%{?rhel}
+%systemd_preun rbd-target-gw.service
+%systemd_preun rbd-target-api.service
+%endif
%if 0%{?suse_version}
%service_del_preun rbd-target-gw.service rbd-target-api.service
%endif
%postun
%if 0%{?fedora} || 0%{?rhel}
-/bin/systemctl --system daemon-reload &> /dev/null || :
+%systemd_postun rbd-target-gw.service
+%systemd_postun rbd-target-api.service
%endif
%if 0%{?suse_version}
%service_del_postun rbd-target-gw.service rbd-target-api.service
++++++ ceph-iscsi-3.0+1556546618.g28a0e8a.tar.gz -> ceph-iscsi-3.0+1557415271.g940ac86.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ceph-iscsi-3.0+1556546618.g28a0e8a/README new/ceph-iscsi-3.0+1557415271.g940ac86/README
--- old/ceph-iscsi-3.0+1556546618.g28a0e8a/README 2019-04-29 16:03:38.107642273 +0200
+++ new/ceph-iscsi-3.0+1557415271.g940ac86/README 2019-05-09 17:21:11.195630881 +0200
@@ -1,7 +1,7 @@
This project provides the common logic and CLI tools for creating and managing
LIO gateways for Ceph.
-It includes the ```rbd-target-gw``` daemon which is responsible for restoring
+It includes the ```rbd-target-api``` daemon which is responsible for restoring
the state of LIO following a gateway reboot/outage and replaces the existing
'target' service.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ceph-iscsi-3.0+1556546618.g28a0e8a/README.md new/ceph-iscsi-3.0+1557415271.g940ac86/README.md
--- old/ceph-iscsi-3.0+1556546618.g28a0e8a/README.md 2019-04-29 16:03:38.107642273 +0200
+++ new/ceph-iscsi-3.0+1557415271.g940ac86/README.md 2019-05-09 17:21:11.195630881 +0200
@@ -2,10 +2,14 @@
This project provides the common logic and CLI tools for creating and managing
LIO gateways for Ceph.
-It includes the ```rbd-target-gw``` daemon which is responsible for restoring
-the state of LIO following a gateway reboot/outage and replaces the existing
+It includes the ```rbd-target-api``` daemon which is responsible for restoring
+the state of LIO following a gateway reboot/outage and exporting a REST API
+to configure the system using tools like gwcli. It replaces the existing
'target' service.
+There is also a second daemon ```rbd-target-gw``` which exports a REST API
+to gather statistics.
+
It also includes the CLI tool ```gwcli``` which can be used to configure and
manage the Ceph iSCSI gateway, which replaces the existing ```targetcli```
CLI tool. This CLI tool utilizes the ```rbd-target-api``` server daemon to
@@ -14,8 +18,7 @@
## Usage
This package should be installed on each node that is intended to be an iSCSI
gateway. The Python ```ceph_iscsi_config``` modules are used by:
-* the **rbd-target-gw** daemon to restore LIO state at boot time
-* **Ansible** modules defined in the ceph-iscsi-ansible project at https://github.com/pcuzner/ceph-ansible
+* the **rbd-target-api** daemon to restore LIO state at boot time
* **API/CLI** configuration tools
## Installation
@@ -25,7 +28,7 @@
### Manually
The following packages are required by ceph-iscsi-config and must be
-installed before starting the rbd-target-gw service:
+installed before starting the rbd-target-api and rbd-target-gw services:
python-rados
python-rbd
@@ -49,10 +52,10 @@
Once the daemon is in place, reload the configuration with
```
systemctl daemon-reload
-systemctl enable rbd-target-gw
-systemctl start rbd-target-gw
systemctl enable rbd-target-api
+systemctl enable rbd-target-gw
systemctl start rbd-target-api
+systemctl start rbd-target-gw
```
## Features
@@ -66,7 +69,7 @@
| **lun** | rbd image management (create/resize), combined with mapping to the OS and LIO instance |
| **utils** | common code called by multiple modules |
-The rbd-target-gw daemon performs the following tasks;
+The rbd-target-api daemon performs the following tasks;
1. At start up remove any osd blacklist entry that may apply to the running host
2. Read the configuration object from Rados
3. Process the configuration
@@ -75,6 +78,6 @@
3.3 Create the iscsi target, TPG's and port IP's
3.4 Define clients (NodeACL's)
3.5 add the required rbd images to clients
-
+ 4. Export a REST API for system configuration.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ceph-iscsi-3.0+1556546618.g28a0e8a/ceph-iscsi.spec new/ceph-iscsi-3.0+1557415271.g940ac86/ceph-iscsi.spec
--- old/ceph-iscsi-3.0+1556546618.g28a0e8a/ceph-iscsi.spec 2019-04-29 16:03:38.399644158 +0200
+++ new/ceph-iscsi-3.0+1557415271.g940ac86/ceph-iscsi.spec 2019-05-09 17:21:11.431632500 +0200
@@ -20,7 +20,7 @@
Name: ceph-iscsi
-Version: 3.0+1556546618.g28a0e8a
+Version: 3.0+1557415271.g940ac86
Release: 1%{?dist}
Group: System/Filesystems
Summary: Python modules for Ceph iSCSI gateway configuration management
@@ -72,7 +72,8 @@
%endif
%endif
-BuildRequires: systemd
+BuildRequires: systemd-rpm-macros
+%{?systemd_requires}
%description
Python package providing the modules used to handle the configuration of an
@@ -136,22 +137,26 @@
%post
%if 0%{?fedora} || 0%{?rhel}
-/bin/systemctl --system daemon-reload &> /dev/null || :
-/bin/systemctl --system enable rbd-target-gw &> /dev/null || :
-/bin/systemctl --system enable rbd-target-api &> /dev/null || :
+%systemd_post rbd-target-gw.service
+%systemd_post rbd-target-api.service
%endif
%if 0%{?suse_version}
%service_add_post rbd-target-gw.service rbd-target-api.service
%endif
%preun
+%if 0%{?fedora} || 0%{?rhel}
+%systemd_preun rbd-target-gw.service
+%systemd_preun rbd-target-api.service
+%endif
%if 0%{?suse_version}
%service_del_preun rbd-target-gw.service rbd-target-api.service
%endif
%postun
%if 0%{?fedora} || 0%{?rhel}
-/bin/systemctl --system daemon-reload &> /dev/null || :
+%systemd_postun rbd-target-gw.service
+%systemd_postun rbd-target-api.service
%endif
%if 0%{?suse_version}
%service_del_postun rbd-target-gw.service rbd-target-api.service
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ceph-iscsi-3.0+1556546618.g28a0e8a/ceph_iscsi_config/client.py new/ceph-iscsi-3.0+1557415271.g940ac86/ceph_iscsi_config/client.py
--- old/ceph-iscsi-3.0+1556546618.g28a0e8a/ceph_iscsi_config/client.py 2019-04-29 16:03:38.107642273 +0200
+++ new/ceph-iscsi-3.0+1557415271.g940ac86/ceph_iscsi_config/client.py 2019-05-09 17:21:11.195630881 +0200
@@ -9,7 +9,7 @@
from socket import gethostname
from rtslib_fb.target import NodeACL, Target, TPG
from rtslib_fb.fabric import ISCSIFabricModule
-from rtslib_fb.utils import RTSLibError, normalize_wwn
+from rtslib_fb.utils import RTSLibError, RTSLibNotInCFS, normalize_wwn
import ceph_iscsi_config.settings as settings
@@ -242,7 +242,10 @@
"ip_address": []
}
iscsi_fabric = ISCSIFabricModule()
- target = Target(iscsi_fabric, target_iqn, 'lookup')
+ try:
+ target = Target(iscsi_fabric, target_iqn, 'lookup')
+ except RTSLibNotInCFS:
+ return result
for tpg in target.tpgs:
if tpg.enable:
for client in tpg.node_acls:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ceph-iscsi-3.0+1556546618.g28a0e8a/ceph_iscsi_config/common.py new/ceph-iscsi-3.0+1557415271.g940ac86/ceph_iscsi_config/common.py
--- old/ceph-iscsi-3.0+1556546618.g28a0e8a/ceph_iscsi_config/common.py 2019-04-29 16:03:38.107642273 +0200
+++ new/ceph-iscsi-3.0+1557415271.g940ac86/ceph_iscsi_config/common.py 2019-05-09 17:21:11.195630881 +0200
@@ -55,7 +55,7 @@
'mutual_username': '',
'mutual_password': '',
'mutual_password_encryption_enabled': False},
- "version": 8,
+ "version": 9,
"epoch": 0,
"created": '',
"updated": ''
@@ -307,6 +307,14 @@
self.update_item("targets", target_iqn, target)
self.update_item("version", None, 8)
+ if self.config['version'] == 8:
+ for target_iqn, target in self.config['targets'].items():
+ for _, portal in target['portals'].items():
+ portal['portal_ip_addresses'] = [portal['portal_ip_address']]
+ portal.pop('portal_ip_address')
+ self.update_item("targets", target_iqn, target)
+ self.update_item("version", None, 9)
+
self.commit("retain")
def init_config(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ceph-iscsi-3.0+1556546618.g28a0e8a/ceph_iscsi_config/gateway.py new/ceph-iscsi-3.0+1557415271.g940ac86/ceph_iscsi_config/gateway.py
--- old/ceph-iscsi-3.0+1556546618.g28a0e8a/ceph_iscsi_config/gateway.py 2019-04-29 16:03:38.107642273 +0200
+++ new/ceph-iscsi-3.0+1557415271.g940ac86/ceph_iscsi_config/gateway.py 2019-05-09 17:21:11.195630881 +0200
@@ -338,16 +338,18 @@
if target_config:
local_gw = target_config['portals'].get(self.hostname)
if local_gw:
- local_gw_ip = local_gw['portal_ip_address']
+ local_gw_ips = local_gw['portal_ip_addresses']
target_config['portals'].pop(self.hostname)
ip_list = target_config['ip_list']
- ip_list.remove(local_gw_ip)
+ for local_gw_ip in local_gw_ips:
+ ip_list.remove(local_gw_ip)
for _, remote_gw_config in target_config['portals'].items():
- remote_gw_config["gateway_ip_list"].remove(local_gw_ip)
- remote_gw_config["inactive_portal_ips"].remove(local_gw_ip)
+ for local_gw_ip in local_gw_ips:
+ remote_gw_config["gateway_ip_list"].remove(local_gw_ip)
+ remote_gw_config["inactive_portal_ips"].remove(local_gw_ip)
tpg_count = remote_gw_config["tpgs"]
remote_gw_config["tpgs"] = tpg_count - 1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ceph-iscsi-3.0+1556546618.g28a0e8a/ceph_iscsi_config/lun.py new/ceph-iscsi-3.0+1557415271.g940ac86/ceph_iscsi_config/lun.py
--- old/ceph-iscsi-3.0+1556546618.g28a0e8a/ceph_iscsi_config/lun.py 2019-04-29 16:03:38.111642298 +0200
+++ new/ceph-iscsi-3.0+1557415271.g940ac86/ceph_iscsi_config/lun.py 2019-05-09 17:21:11.195630881 +0200
@@ -29,7 +29,19 @@
class RBDDev(object):
- rbd_feature_list = {
+ unsupported_features_list = {
+ USER_RBD: [],
+ RBD: [
+ # TODO Uncomment after PR https://github.com/ceph/ceph/pull/28009
+ # 'RBD_FEATURE_MIGRATING',
+ 'RBD_FEATURE_OBJECT_MAP',
+ 'RBD_FEATURE_FAST_DIFF',
+ 'RBD_FEATURE_DEEP_FLATTEN',
+ 'RBD_FEATURE_JOURNALING'
+ ]
+ }
+
+ default_features_list = {
USER_RBD: [
'RBD_FEATURE_LAYERING',
'RBD_FEATURE_EXCLUSIVE_LOCK',
@@ -38,10 +50,7 @@
'RBD_FEATURE_DEEP_FLATTEN'
],
RBD: [
- 'RBD_FEATURE_LAYERING',
- 'RBD_FEATURE_STRIPINGV2',
- 'RBD_FEATURE_EXCLUSIVE_LOCK',
- 'RBD_FEATURE_DATA_POOL'
+ 'RBD_FEATURE_LAYERING'
]
}
@@ -79,7 +88,7 @@
rbd_inst.create(ioctx,
self.image,
self.size_bytes,
- features=RBDDev.supported_features(self.backstore),
+ features=RBDDev.default_features(self.backstore),
old_format=False)
except (rbd.ImageExists, rbd.InvalidArgument) as err:
@@ -238,14 +247,27 @@
return valid_state
@classmethod
- def supported_features(cls, backstore):
+ def unsupported_features(cls, backstore):
+ """
+ Return an int representing the unsupported features for LIO export
+ :return: int
+ """
+ # build the required feature settings into an int
+ feature_int = 0
+ for feature in RBDDev.unsupported_features_list[backstore]:
+ feature_int += getattr(rbd, feature)
+
+ return feature_int
+
+ @classmethod
+ def default_features(cls, backstore):
"""
- Return an int representing the supported features for LIO export
+ Return an int representing the default features for image creation
:return: int
"""
# build the required feature settings into an int
feature_int = 0
- for feature in RBDDev.rbd_feature_list[backstore]:
+ for feature in RBDDev.default_features_list[backstore]:
feature_int += getattr(rbd, feature)
return feature_int
@@ -656,9 +678,9 @@
else:
# rbd image is not valid for export, so abort
self.error = True
- features = ','.join(RBDDev.rbd_feature_list[self.backstore])
+ features = ','.join(RBDDev.unsupported_features_list[self.backstore])
self.error_msg = ("(LUN.allocate) rbd '{}' is not compatible "
- "with LIO\nOnly image features {} are"
+ "with LIO\nImage features {} are not"
" supported".format(self.image, features))
self.logger.error(self.error_msg)
return None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ceph-iscsi-3.0+1556546618.g28a0e8a/ceph_iscsi_config/settings.py new/ceph-iscsi-3.0+1557415271.g940ac86/ceph_iscsi_config/settings.py
--- old/ceph-iscsi-3.0+1556546618.g28a0e8a/ceph_iscsi_config/settings.py 2019-04-29 16:03:38.111642298 +0200
+++ new/ceph-iscsi-3.0+1557415271.g940ac86/ceph_iscsi_config/settings.py 2019-05-09 17:21:11.199630908 +0200
@@ -7,6 +7,7 @@
from configparser import ConfigParser
from distutils.util import strtobool
+import logging
import re
@@ -113,7 +114,8 @@
"pub_key": 'iscsi-gateway-pub.key',
"prometheus_exporter": "true",
"prometheus_port": 9287,
- "prometheus_host": "::"
+ "prometheus_host": "::",
+ "logger_level": logging.DEBUG
}
target_defaults = {"osd_op_timeout": 30,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ceph-iscsi-3.0+1556546618.g28a0e8a/ceph_iscsi_config/target.py new/ceph-iscsi-3.0+1557415271.g940ac86/ceph_iscsi_config/target.py
--- old/ceph-iscsi-3.0+1556546618.g28a0e8a/ceph_iscsi_config/target.py 2019-04-29 16:03:38.111642298 +0200
+++ new/ceph-iscsi-3.0+1557415271.g940ac86/ceph_iscsi_config/target.py 2019-05-09 17:21:11.199630908 +0200
@@ -86,9 +86,9 @@
" any ip on this host")
return
- self.active_portal_ip = list(matching_ip)[0]
+ self.active_portal_ips = list(matching_ip)
self.logger.debug("active portal will use "
- "{}".format(self.active_portal_ip))
+ "{}".format(self.active_portal_ips))
self.gateway_ip_list = gateway_ip_list
self.logger.debug("tpg's will be defined in this order"
@@ -97,7 +97,7 @@
# without gateway_ip_list passed in this is a 'init' or
# 'clearconfig' request
self.gateway_ip_list = []
- self.active_portal_ip = []
+ self.active_portal_ips = []
self.changes_made = False
self.config_updated = False
@@ -205,25 +205,25 @@
:return: None
"""
+ index = 0
for tpg in self.tpg_list:
if tpg._get_enable():
for lun in tpg.luns:
try:
self.bind_alua_group_to_lun(config,
lun,
- tpg_ip_address=self.active_portal_ip)
+ tpg_ip_address=self.active_portal_ips[index])
except CephiSCSIInval as err:
self.error = True
self.error_msg = err
return
try:
- NetworkPortal(tpg, normalize_ip_literal(self.active_portal_ip))
+ NetworkPortal(tpg, normalize_ip_literal(self.active_portal_ips[index]))
except RTSLibError as e:
self.error = True
self.error_msg = e
- else:
- break
+ index += 1
def clear_config(self, config):
"""
@@ -276,7 +276,7 @@
self.logger.debug("(Gateway.create_tpg) Added tpg for portal "
"ip {}".format(ip))
- if ip == self.active_portal_ip:
+ if ip in self.active_portal_ips:
if self.enable_portal:
NetworkPortal(tpg, normalize_ip_literal(ip))
tpg.enable = True
@@ -410,7 +410,7 @@
# they do not have a common gw the owning gw may not exist here.
# The LUN will just have all ANO paths then.
if gw_config:
- if gw_config["portal_ip_address"] == tpg_ip_address:
+ if gw_config["portal_ip_addresses"][0] == tpg_ip_address:
is_owner = True
try:
@@ -602,7 +602,8 @@
continue
inactive_portal_ip = list(self.gateway_ip_list)
- inactive_portal_ip.remove(remote_gw_config["portal_ip_address"])
+ for portal_ip_address in remote_gw_config["portal_ip_addresses"]:
+ inactive_portal_ip.remove(portal_ip_address)
remote_gw_config['gateway_ip_list'] = self.gateway_ip_list
remote_gw_config['tpgs'] = len(self.tpg_list)
remote_gw_config['inactive_portal_ips'] = inactive_portal_ip
@@ -610,11 +611,12 @@
# Add the new gw
inactive_portal_ip = list(self.gateway_ip_list)
- inactive_portal_ip.remove(self.active_portal_ip)
+ for active_portal_ip in self.active_portal_ips:
+ inactive_portal_ip.remove(active_portal_ip)
portal_metadata = {"tpgs": len(self.tpg_list),
"gateway_ip_list": self.gateway_ip_list,
- "portal_ip_address": self.active_portal_ip,
+ "portal_ip_addresses": self.active_portal_ips,
"inactive_portal_ips": inactive_portal_ip}
target_config['portals'][local_gw] = portal_metadata
target_config['ip_list'] = self.gateway_ip_list
@@ -678,41 +680,35 @@
# Called by API from CLI clearconfig command
if self.exists():
self.load_config()
+ self.clear_config(config)
+ target_config = config.config["targets"][self.iqn]
+ if len(target_config['portals']) == 0:
+ config.del_item('targets', self.iqn)
else:
- self.error = True
- self.error_msg = "Target {} does not exist on {}".format(self.iqn, local_gw)
- return
+ gw_ips = target_config['portals'][local_gw]['portal_ip_addresses']
- target_config = config.config["targets"][self.iqn]
- self.clear_config(config)
+ target_config['portals'].pop(local_gw)
- if not self.error:
- if len(target_config['portals']) == 0:
- config.del_item('targets', self.iqn)
+ ip_list = target_config['ip_list']
+ for gw_ip in gw_ips:
+ ip_list.remove(gw_ip)
+ if len(ip_list) > 0 and len(target_config['portals'].keys()) > 0:
+ config.update_item('targets', self.iqn, target_config)
else:
- gw_ip = target_config['portals'][local_gw]['portal_ip_address']
-
- target_config['portals'].pop(local_gw)
+ # no more portals in the list, so delete the target
+ config.del_item('targets', self.iqn)
- ip_list = target_config['ip_list']
- ip_list.remove(gw_ip)
- if len(ip_list) > 0 and len(target_config['portals'].keys()) > 0:
- config.update_item('targets', self.iqn, target_config)
- else:
- # no more portals in the list, so delete the target
- config.del_item('targets', self.iqn)
-
- remove_gateway = True
- for _, target in config.config["targets"].items():
- if local_gw in target['portals']:
- remove_gateway = False
- break
-
- if remove_gateway:
- # gateway is no longer used, so delete it
- config.del_item('gateways', local_gw)
+ remove_gateway = True
+ for _, target in config.config["targets"].items():
+ if local_gw in target['portals']:
+ remove_gateway = False
+ break
+
+ if remove_gateway:
+ # gateway is no longer used, so delete it
+ config.del_item('gateways', local_gw)
- config.commit()
+ config.commit()
@staticmethod
def get_num_sessions(target_iqn):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ceph-iscsi-3.0+1556546618.g28a0e8a/gwcli/gateway.py new/ceph-iscsi-3.0+1557415271.g940ac86/gwcli/gateway.py
--- old/ceph-iscsi-3.0+1556546618.g28a0e8a/gwcli/gateway.py 2019-04-29 16:03:38.111642298 +0200
+++ new/ceph-iscsi-3.0+1557415271.g940ac86/gwcli/gateway.py 2019-05-09 17:21:11.199630908 +0200
@@ -779,7 +779,7 @@
display_attributes = ["name",
"gateway_ip_list",
- "portal_ip_address",
+ "portal_ip_addresses",
"inactive_portal_ips",
"tpgs",
"service_state"]
@@ -861,5 +861,5 @@
def summary(self):
state = self.state
- return "{} ({})".format(self.portal_ip_address,
+ return "{} ({})".format(','.join(self.portal_ip_addresses),
state), (state == "UP")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ceph-iscsi-3.0+1556546618.g28a0e8a/rbd-target-api.py new/ceph-iscsi-3.0+1557415271.g940ac86/rbd-target-api.py
--- old/ceph-iscsi-3.0+1556546618.g28a0e8a/rbd-target-api.py 2019-04-29 16:03:38.111642298 +0200
+++ new/ceph-iscsi-3.0+1557415271.g940ac86/rbd-target-api.py 2019-05-09 17:21:11.199630908 +0200
@@ -830,6 +830,8 @@
**RESTRICTED**
"""
+ config.refresh()
+
disk = request.form.get('disk')
pool, image = disk.split('/', 1)
disk_config = config.config['disks'][disk]
@@ -2190,9 +2192,6 @@
target_config = config.config['targets'][target_iqn]
if client_iqn not in target_config['clients']:
return jsonify(message="Client {} does not exist".format(client_iqn)), 400
- local_gw = this_host()
- if local_gw not in target_config['portals']:
- return jsonify(message="{} is not a portal of target {}".format(local_gw, target_iqn)), 400
logged_in = GWClient.get_client_info(target_iqn, client_iqn)
return jsonify(logged_in), 200
@@ -2364,19 +2363,19 @@
disk_default_controls = {}
required_rbd_features = {}
- supported_rbd_features = {}
+ unsupported_rbd_features = {}
for backstore, ks in LUN.SETTINGS.items():
disk_default_controls[backstore] = {}
for k in ks:
default_val = getattr(settings.config, k, None)
disk_default_controls[backstore][k] = default_val
required_rbd_features[backstore] = RBDDev.required_features(backstore)
- supported_rbd_features[backstore] = RBDDev.supported_features(backstore)
+ unsupported_rbd_features[backstore] = RBDDev.unsupported_features(backstore)
return jsonify({
'target_default_controls': target_default_controls,
'disk_default_controls': disk_default_controls,
- 'supported_rbd_features': supported_rbd_features,
+ 'unsupported_rbd_features': unsupported_rbd_features,
'required_rbd_features': required_rbd_features,
'backstores': LUN.BACKSTORES,
'default_backstore': LUN.DEFAULT_BACKSTORE,
@@ -2806,6 +2805,9 @@
if __name__ == '__main__':
+ settings.init()
+ logger_level = logging.getLevelName(settings.config.logger_level)
+
# Setup signal handlers for interaction with systemd
signal.signal(signal.SIGTERM, signal_stop)
signal.signal(signal.SIGHUP, signal_reload)
@@ -2824,7 +2826,7 @@
file_handler = RotatingFileHandler('/var/log/rbd-target-api/rbd-target-api.log',
maxBytes=5242880,
backupCount=7)
- file_handler.setLevel(logging.DEBUG)
+ file_handler.setLevel(logger_level)
file_format = logging.Formatter(
"%(asctime)s %(levelname)8s [%(filename)s:%(lineno)s:%(funcName)s()] "
"- %(message)s")
@@ -2833,8 +2835,6 @@
logger.addHandler(syslog_handler)
logger.addHandler(file_handler)
- settings.init()
-
# config is set in the outer scope, so it's easily accessible to all
# api functions
config = Config(logger)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ceph-iscsi-3.0+1556546618.g28a0e8a/rbd-target-gw.py new/ceph-iscsi-3.0+1557415271.g940ac86/rbd-target-gw.py
--- old/ceph-iscsi-3.0+1556546618.g28a0e8a/rbd-target-gw.py 2019-04-29 16:03:38.111642298 +0200
+++ new/ceph-iscsi-3.0+1557415271.g940ac86/rbd-target-gw.py 2019-05-09 17:21:11.199630908 +0200
@@ -62,6 +62,9 @@
if __name__ == '__main__':
+ settings.init()
+ logger_level = logging.getLevelName(settings.config.logger_level)
+
# setup syslog handler to help diagnostics
logger = logging.getLogger('rbd-target-gw')
logger.setLevel(logging.DEBUG)
@@ -76,12 +79,11 @@
file_handler = RotatingFileHandler('/var/log/rbd-target-gw/rbd-target-gw.log',
maxBytes=5242880,
backupCount=7)
- file_handler.setLevel(logging.DEBUG)
+ file_handler.setLevel(logger_level)
file_format = logging.Formatter("%(asctime)s [%(levelname)8s] - %(message)s")
file_handler.setFormatter(file_format)
logger.addHandler(syslog_handler)
logger.addHandler(file_handler)
- settings.init()
main()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ceph-iscsi-3.0+1556546618.g28a0e8a/test/test_common.py new/ceph-iscsi-3.0+1557415271.g940ac86/test/test_common.py
--- old/ceph-iscsi-3.0+1556546618.g28a0e8a/test/test_common.py 2019-04-29 16:03:38.111642298 +0200
+++ new/ceph-iscsi-3.0+1557415271.g940ac86/test/test_common.py 2019-05-09 17:21:11.199630908 +0200
@@ -232,7 +232,7 @@
"inactive_portal_ips": [
"192.168.100.202"
],
- "portal_ip_address": "192.168.100.201",
+ "portal_ip_addresses": ["192.168.100.201"],
"tpgs": 2
},
"node2": {
@@ -243,7 +243,7 @@
"inactive_portal_ips": [
"192.168.100.201"
],
- "portal_ip_address": "192.168.100.202",
+ "portal_ip_addresses": ["192.168.100.202"],
"tpgs": 2
}
},
@@ -251,5 +251,5 @@
}
},
"updated": "2018/12/07 09:18:13",
- "version": 8
+ "version": 9
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ceph-iscsi-3.0+1556546618.g28a0e8a/usr/lib/systemd/system/rbd-target-api.service new/ceph-iscsi-3.0+1557415271.g940ac86/usr/lib/systemd/system/rbd-target-api.service
--- old/ceph-iscsi-3.0+1556546618.g28a0e8a/usr/lib/systemd/system/rbd-target-api.service 2019-04-29 16:03:38.111642298 +0200
+++ new/ceph-iscsi-3.0+1557415271.g940ac86/usr/lib/systemd/system/rbd-target-api.service 2019-05-09 17:21:11.199630908 +0200
@@ -2,9 +2,8 @@
Description=Ceph iscsi target configuration API
Requires=sys-kernel-config.mount
-After=sys-kernel-config.mount network-online.target rbd-target-gw.service
-BindsTo=rbd-target-gw.service
-Wants=network-online.target
+After=sys-kernel-config.mount network-online.target tcmu-runner.service
+Wants=network-online.target rbd-target-gw.service tcmu-runner.service
[Service]
LimitNOFILE=1048576
@@ -22,6 +21,7 @@
Restart=on-failure
StartLimitInterval=30min
StartLimitBurst=3
+TimeoutStopSec=600
[Install]
WantedBy=multi-user.target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ceph-iscsi-3.0+1556546618.g28a0e8a/usr/lib/systemd/system/rbd-target-gw.service new/ceph-iscsi-3.0+1557415271.g940ac86/usr/lib/systemd/system/rbd-target-gw.service
--- old/ceph-iscsi-3.0+1556546618.g28a0e8a/usr/lib/systemd/system/rbd-target-gw.service 2019-04-29 16:03:38.111642298 +0200
+++ new/ceph-iscsi-3.0+1557415271.g940ac86/usr/lib/systemd/system/rbd-target-gw.service 2019-05-09 17:21:11.199630908 +0200
@@ -2,8 +2,9 @@
Description=Setup system to export rbd images through LIO
Requires=sys-kernel-config.mount
-After=sys-kernel-config.mount network-online.target tcmu-runner.service
-Wants=network-online.target tcmu-runner.service
+After=sys-kernel-config.mount network-online.target rbd-target-api.service
+Wants=network-online.target
+BindsTo=rbd-target-api.service
[Service]
LimitNOFILE=1048576
@@ -22,7 +23,6 @@
Restart=on-failure
StartLimitInterval=30min
StartLimitBurst=3
-TimeoutStopSec=600
[Install]
WantedBy=multi-user.target