Hello community,

here is the log from the commit of package ceph-deploy for openSUSE:Factory 
checked in at 2016-09-07 11:46:39
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ceph-deploy (Old)
 and      /work/SRC/openSUSE:Factory/.ceph-deploy.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "ceph-deploy"

Changes:
--------
--- /work/SRC/openSUSE:Factory/ceph-deploy/ceph-deploy.changes  2016-04-28 
17:00:06.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.ceph-deploy.new/ceph-deploy.changes     
2016-09-07 11:46:41.000000000 +0200
@@ -1,0 +2,57 @@
+Tue Aug  9 14:45:55 UTC 2016 - osy...@suse.com
+
+- Updated to 1.5.34
+  + Do not call partx/partprobe when zapping disks
+  + No longer allow using ext4
+  + Default to systemd for SUSE
+  + Remove usage of rcceph (for SUSE)
+  + No longer depend on automatic ``ceph-create-keys``, use the monitors to 
+    fetch keys.
+- Protect against two rgw using the same port.
+  + bnc#980708
+
+-------------------------------------------------------------------
+Tue May 24 11:38:44 UTC 2016 - osy...@suse.com
+
+- gatherkeys subcommand to handle long hostnames.
+  + bnc#981304
+
+-------------------------------------------------------------------
+Thu May 19 18:03:43 UTC 2016 - osy...@suse.com
+
+- rgw help now works on SLE12 as well as LEAP.
+  + bnc#980704
+
+-------------------------------------------------------------------
+Wed May 18 15:15:41 UTC 2016 - osy...@suse.com
+
+- Revert previous fix to bnc#980273 and apply better fix.
+
+-------------------------------------------------------------------
+Wed May 18 11:52:21 UTC 2016 - osy...@suse.com
+
+- loosen restrictions on rgw names
+
+-------------------------------------------------------------------
+Wed May 18 10:13:20 UTC 2016 - osy...@suse.com
+
+- ceph-deploy purge no longer aborts if one package is not installed
+  + bnc#980273
+- Install RadosGW with non valid chanacters trapped early
+  + bnc#976395 
+
+-------------------------------------------------------------------
+Fri May 13 16:23:17 UTC 2016 - osy...@suse.com
+
+- Added rgw port options
+  + bnc#979872
+- Add warning if deploying a rgw twice
+  + bnc#970526 
+
+-------------------------------------------------------------------
+Wed May  4 12:25:47 UTC 2016 - osy...@suse.com
+
+- Added rgw delete to online help.
+  + bnc#978432
+
+-------------------------------------------------------------------

Old:
----
  ceph-deploy-1.5.32+git.1460619432.b539689.tar.xz

New:
----
  ceph-deploy-1.5.34+git.1470736983.963ba71.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ ceph-deploy.spec ++++++
--- /var/tmp/diff_new_pack.9OM1KQ/_old  2016-09-07 11:46:42.000000000 +0200
+++ /var/tmp/diff_new_pack.9OM1KQ/_new  2016-09-07 11:46:42.000000000 +0200
@@ -22,7 +22,7 @@
 %endif
 
 Name:           ceph-deploy
-Version:        1.5.32+git.1460619432.b539689
+Version:        1.5.34+git.1470736983.963ba71
 Release:        0
 Summary:        Admin and deploy tool for Ceph
 License:        MIT

++++++ _service ++++++
--- /var/tmp/diff_new_pack.9OM1KQ/_old  2016-09-07 11:46:42.000000000 +0200
+++ /var/tmp/diff_new_pack.9OM1KQ/_new  2016-09-07 11:46:42.000000000 +0200
@@ -1,8 +1,8 @@
 <services>
   <service name="tar_scm" mode="disabled">
-    <param name="versionformat">1.5.32+git.%ct.%h</param>
+    <param name="versionformat">1.5.34+git.%ct.%h</param>
     <param name="url">https://github.com/SUSE/ceph-deploy.git</param>
-    <param name="revision">distro/suse/v1.5.32</param>
+    <param name="revision">distro/suse/v1.5.34</param>
     <param name="filename">ceph-deploy</param>
     <param name="scm">git</param>
   </service>

++++++ ceph-deploy-1.5.32+git.1460619432.b539689.tar.xz -> 
ceph-deploy-1.5.34+git.1470736983.963ba71.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ceph-deploy-1.5.32+git.1460619432.b539689/ceph-deploy.spec 
new/ceph-deploy-1.5.34+git.1470736983.963ba71/ceph-deploy.spec
--- old/ceph-deploy-1.5.32+git.1460619432.b539689/ceph-deploy.spec      
2016-04-14 09:39:11.000000000 +0200
+++ new/ceph-deploy-1.5.34+git.1470736983.963ba71/ceph-deploy.spec      
2016-08-09 15:22:14.000000000 +0200
@@ -11,7 +11,7 @@
 # common
 
#################################################################################
 Name:           ceph-deploy
-Version:       1.5.32
+Version:       1.5.34
 Release:        0
 Summary:        Admin and deploy tool for Ceph
 License:        MIT
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ceph-deploy-1.5.32+git.1460619432.b539689/ceph_deploy/__init__.py 
new/ceph-deploy-1.5.34+git.1470736983.963ba71/ceph_deploy/__init__.py
--- old/ceph-deploy-1.5.32+git.1460619432.b539689/ceph_deploy/__init__.py       
2016-04-14 09:39:11.000000000 +0200
+++ new/ceph-deploy-1.5.34+git.1470736983.963ba71/ceph_deploy/__init__.py       
2016-08-09 15:22:14.000000000 +0200
@@ -1,3 +1,3 @@
 
-__version__ = '1.5.32'
+__version__ = '1.5.34'
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ceph-deploy-1.5.32+git.1460619432.b539689/ceph_deploy/gatherkeys.py 
new/ceph-deploy-1.5.34+git.1470736983.963ba71/ceph_deploy/gatherkeys.py
--- old/ceph-deploy-1.5.32+git.1460619432.b539689/ceph_deploy/gatherkeys.py     
2016-04-14 09:39:11.000000000 +0200
+++ new/ceph-deploy-1.5.34+git.1470736983.963ba71/ceph_deploy/gatherkeys.py     
2016-08-09 15:22:14.000000000 +0200
@@ -119,7 +119,7 @@
         arguments
         )
     if code != 0:
-        rlogger.error('"ceph auth get-or-create for keytype %s returned %s' % 
(keytype, code))
+        rlogger.error('"ceph auth get-or-create for keytype %s returned %s', 
keytype, code)
         for line in err:
             rlogger.debug(line)
         return False
@@ -136,18 +136,19 @@
     Connect to mon and gather keys if mon is in quorum.
     """
     distro = hosts.get(host, username=args.username)
-    dir_keytype_mon = ceph_deploy.util.paths.mon.path(args.cluster, host)
+    remote_hostname = distro.conn.remote_module.shortname()
+    dir_keytype_mon = ceph_deploy.util.paths.mon.path(args.cluster, 
remote_hostname)
     path_keytype_mon = "%s/keyring" % (dir_keytype_mon)
     mon_key = distro.conn.remote_module.get_file(path_keytype_mon)
     if mon_key is None:
-        LOG.warning("No mon key found. Is '%s' a mon node" % (host))
+        LOG.warning("No mon key found in host: %s", host)
         return False
     mon_name_local = keytype_path_to(args, "mon")
     mon_path_local = os.path.join(dest_dir, mon_name_local)
     with file(mon_path_local, 'w') as f:
         f.write(mon_key)
     rlogger = logging.getLogger(host)
-    path_asok = ceph_deploy.util.paths.mon.asok(args.cluster, host)
+    path_asok = ceph_deploy.util.paths.mon.asok(args.cluster, remote_hostname)
     out, err, code = remoto.process.check(
         distro.conn,
             [
@@ -161,44 +162,46 @@
             ]
         )
     if code != 0:
-        rlogger.error('"ceph mon_status %s" returned %s' % (host, code))
+        rlogger.error('"ceph mon_status %s" returned %s', host, code)
         for line in err:
             rlogger.debug(line)
         return False
     try:
         mon_status = json.loads("".join(out))
     except ValueError:
-        rlogger.error('"ceph mon_status %s" output was not json' % (host))
+        rlogger.error('"ceph mon_status %s" output was not json', host)
+        for line in out:
+            rlogger.error(line)
         return False
     mon_number = None
     mon_map = mon_status.get('monmap')
     if mon_map is None:
-        rlogger.error("could not find mon map for mons on '%s'" % (host))
+        rlogger.error("could not find mon map for mons on '%s'", host)
         return False
     mon_quorum = mon_status.get('quorum')
     if mon_quorum is None:
-        rlogger.error("could not find quorum for mons on '%s'" % (host))
+        rlogger.error("could not find quorum for mons on '%s'" , host)
         return False
     mon_map_mons = mon_map.get('mons')
     if mon_map_mons is None:
-        rlogger.error("could not find mons in monmap on '%s'" % (host))
+        rlogger.error("could not find mons in monmap on '%s'", host)
         return False
     for mon in mon_map_mons:
-        if mon.get('name') == host:
+        if mon.get('name') == remote_hostname:
            mon_number = mon.get('rank')
            break
     if mon_number is None:
-        rlogger.error("could not find '%s' in monmap" % (host))
+        rlogger.error("could not find '%s' in monmap", remote_hostname)
         return False
     if not mon_number in mon_quorum:
-        rlogger.error("Not yet quorum for '%s'" % (host))
+        rlogger.error("Not yet quorum for '%s'", host)
         return False
-    got_all_keys = True
     for keytype in ["admin", "mds", "osd", "rgw"]:
-        rc = gatherkeys_missing(args, distro, rlogger, path_keytype_mon, 
keytype, dest_dir)
-        if not rc:
-            got_all_keys = False
-    return got_all_keys
+        if not gatherkeys_missing(args, distro, rlogger, path_keytype_mon, 
keytype, dest_dir):
+            # We will return failure if we fail to gather any key
+            rlogger.error("Failed to return '%s' key from host ", keytype, 
host)
+            return False
+    return True
 
 
 def gatherkeys(args):
@@ -211,14 +214,14 @@
     try:
         try:
             tmpd = tempfile.mkdtemp()
-            LOG.info("Storing keys in temp directory %s" %(tmpd))
+            LOG.info("Storing keys in temp directory %s", tmpd)
             sucess = False
             for host in args.mon:
                 sucess = gatherkeys_with_mon(args, host, tmpd)
                 if sucess:
                     break
             if not sucess:
-                LOG.error("Failed to connect to host:%s" % (', 
'.join(args.mon)))
+                LOG.error("Failed to connect to host:%s" ,', '.join(args.mon))
                 raise RuntimeError('Failed to connect any mon')
             had_error = False
             date_string = time.strftime("%Y%m%d%H%M%S")
@@ -226,7 +229,7 @@
                 filename = keytype_path_to(args, keytype)
                 tmp_path = os.path.join(tmpd, filename)
                 if not os.path.exists(tmp_path):
-                    LOG.error("No key retrived for '%s'" % (keytype))
+                    LOG.error("No key retrived for '%s'" , keytype)
                     had_error = True
                     continue
                 if not os.path.exists(filename):
@@ -234,10 +237,10 @@
                     shutil.move(tmp_path, filename)
                     continue
                 if _keyring_equivalent(tmp_path, filename):
-                    LOG.info("keyring '%s' already exists" % (filename))
+                    LOG.info("keyring '%s' already exists" , filename)
                     continue
                 backup_keyring = "%s-%s" % (filename, date_string)
-                LOG.info("Replacing '%s' and backing up old key as '%s'" % 
(filename, date_string))
+                LOG.info("Replacing '%s' and backing up old key as '%s'", 
filename, backup_keyring)
                 shutil.copy(filename, backup_keyring)
                 shutil.move(tmp_path, filename)
             if had_error:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ceph-deploy-1.5.32+git.1460619432.b539689/ceph_deploy/install.py 
new/ceph-deploy-1.5.34+git.1470736983.963ba71/ceph_deploy/install.py
--- old/ceph-deploy-1.5.32+git.1460619432.b539689/ceph_deploy/install.py        
2016-04-14 09:39:11.000000000 +0200
+++ new/ceph-deploy-1.5.34+git.1470736983.963ba71/ceph_deploy/install.py        
2016-08-09 15:22:14.000000000 +0200
@@ -17,7 +17,7 @@
     not well suited for.
     """
     if args.release is None:
-        args.release = 'infernalis'
+        args.release = 'jewel'
         args.default_release = True
 
     # XXX This whole dance is because --stable is getting deprecated
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ceph-deploy-1.5.32+git.1460619432.b539689/ceph_deploy/osd.py 
new/ceph-deploy-1.5.34+git.1470736983.963ba71/ceph_deploy/osd.py
--- old/ceph-deploy-1.5.32+git.1460619432.b539689/ceph_deploy/osd.py    
2016-04-14 09:39:11.000000000 +0200
+++ new/ceph-deploy-1.5.34+git.1470736983.963ba71/ceph_deploy/osd.py    
2016-08-09 15:22:14.000000000 +0200
@@ -372,7 +372,7 @@
 
         LOG.debug('activating host %s disk %s', hostname, disk)
         LOG.debug('will use init type: %s', distro.init)
-        
+
         ceph_disk_executable = system.executable_path(distro.conn, 'ceph-disk')
         remoto.process.run(
             distro.conn,
@@ -428,34 +428,6 @@
             ],
         )
 
-        # once all is done, call partprobe (or partx)
-        # On RHEL and CentOS distros, calling partprobe forces a reboot of the
-        # server. Since we are not resizing partitons we rely on calling
-        # partx
-        if distro.normalized_name.startswith(('centos', 'red')):
-            LOG.info('calling partx on zapped device %s', disk)
-            LOG.info('re-reading known partitions will display errors')
-            partx_executable = system.executable_path(distro.conn, 'partx')
-            remoto.process.run(
-                distro.conn,
-                [
-                    partx_executable,
-                    '-a',
-                    disk,
-                ],
-            )
-
-        else:
-            LOG.debug('Calling partprobe on zapped device %s', disk)
-            partprobe_executable = system.executable_path(distro.conn, 
'partprobe')
-            remoto.process.run(
-                distro.conn,
-                [
-                    partprobe_executable,
-                    disk,
-                ],
-            )
-
         distro.conn.exit()
 
 
@@ -708,11 +680,10 @@
         '--fs-type',
         metavar='FS_TYPE',
         choices=['xfs',
-                 'ext4',
                  'btrfs'
                  ],
         default='xfs',
-        help='filesystem to use to format DISK (xfs, btrfs, or ext4)',
+        help='filesystem to use to format DISK (xfs, btrfs)',
         )
     osd_create.add_argument(
         '--dmcrypt',
@@ -751,11 +722,10 @@
         '--fs-type',
         metavar='FS_TYPE',
         choices=['xfs',
-                 'ext4',
                  'btrfs'
                  ],
         default='xfs',
-        help='filesystem to use to format DISK (xfs, btrfs, or ext4)',
+        help='filesystem to use to format DISK (xfs, btrfs)',
         )
     osd_prepare.add_argument(
         '--dmcrypt',
@@ -841,11 +811,10 @@
         '--fs-type',
         metavar='FS_TYPE',
         choices=['xfs',
-                 'ext4',
                  'btrfs'
                  ],
         default='xfs',
-        help='filesystem to use to format DISK (xfs, btrfs, or ext4)',
+        help='filesystem to use to format DISK (xfs, btrfs)',
         )
     disk_prepare.add_argument(
         '--dmcrypt',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ceph-deploy-1.5.32+git.1460619432.b539689/ceph_deploy/rgw.py 
new/ceph-deploy-1.5.34+git.1470736983.963ba71/ceph_deploy/rgw.py
--- old/ceph-deploy-1.5.32+git.1460619432.b539689/ceph_deploy/rgw.py    
2016-04-14 09:39:11.000000000 +0200
+++ new/ceph-deploy-1.5.34+git.1470736983.963ba71/ceph_deploy/rgw.py    
2016-08-09 15:22:14.000000000 +0200
@@ -9,6 +9,7 @@
 from ceph_deploy.util import system
 from ceph_deploy.lib import remoto
 from ceph_deploy.cliutil import priority
+from ceph_deploy import validate
 
 
 LOG = logging.getLogger(__name__)
@@ -137,6 +138,39 @@
         )
 
 
+def rgw_duplicate_port_check(cfg):
+    all_sections = cfg.sections()
+    host_port_mapping = {}
+    for section in all_sections:
+        if cfg.has_option(section, 'host') is False:
+            continue
+        if cfg.has_option(section, 'rgw_frontends') is False:
+            continue
+        host = cfg.get(section, 'host')
+        rgw_frontends = cfg.get(section, 'rgw_frontends')
+        port_num = None
+        for option in rgw_frontends.split(' '):
+            options_split = option.split('=')
+            if len(options_split) < 2:
+                continue
+            if options_split[0].strip() == 'port':
+                port_str = options_split[1].strip()
+                try:
+                    port_num = int(port_str)
+                except:
+                    continue
+        if port_num is None:
+            continue
+        old_num = host_port_mapping.get(host)
+        if old_num == None:
+           host_port_mapping[host] = port_num
+           continue
+        if old_num == port_num:
+            LOG.warning('Duplicate services for port %s on host %s.' % 
(port_num, host))
+            return True
+    return False
+
+
 def rgw_create(args):
     cfg = conf.ceph.load(args)
     LOG.debug(
@@ -152,32 +186,55 @@
 
     # Update the config file
     changed_cfg = False
-    for hostname, name in args.rgw:
+    for hostname, name, port in args.rgw:
         if not name.startswith('rgw.'):
             msg = "rgw name '%s' does not start with 'rgw.'" % (name)
             LOG.error(msg)
             raise RuntimeError(msg)
         enitity = 'client.{name}'.format(name=name)
-        port = 7480
         if cfg.has_section(enitity) is False:
             cfg.add_section(enitity)
             changed_cfg = True
+        else:
+            # We have existing confg for the rgw
+            LOG.warning("existing configuration for rgw %s:%s" % (hostname, 
name))
         if cfg.has_option(enitity,'host') is False:
             cfg.set(enitity, 'host', hostname)
             changed_cfg = True
+        else:
+            existing_value = cfg.get(enitity, 'host')
+            if existing_value != hostname:
+                msg = "exisiting rgw '%s:%s' has a different hostname" % 
(hostname, name)
+                LOG.error(msg)
+                raise RuntimeError(msg)
         if cfg.has_option(enitity,'rgw_dns_name') is False:
-            # TODO this should be customizable
-            value = "%s:%s" % (hostname,port)
             cfg.set(enitity, 'rgw_dns_name', hostname)
             changed_cfg = True
+        else:
+            existing_value = cfg.get(enitity, 'rgw_dns_name')
+            if existing_value != hostname:
+                msg = "exisiting rgw '%s:%s' has a different rgw_dns_name" % 
(hostname, name)
+                LOG.error(msg)
+                raise RuntimeError(msg)
+        rgw_frontends_value = "civetweb port=%s" % (port)
         if cfg.has_option(enitity,'rgw frontends') is False:
             # TODO this should be customizable
-            cfg.set(enitity, 'rgw frontends', "civetweb port=%s" % (port))
+            cfg.set(enitity, 'rgw frontends', rgw_frontends_value)
             changed_cfg = True
+        else:
+            existing_value = cfg.get(enitity, 'rgw frontends')
+            if existing_value != rgw_frontends_value:
+                msg = "exisiting rgw '%s:%s' has a different 'rgw frontends'" 
% (hostname, name)
+                LOG.error(msg)
+                raise RuntimeError(msg)
 
     # If config file is changed save changes locally
     if changed_cfg is True:
         cfg_path = args.ceph_conf or 
'{cluster}.conf'.format(cluster=args.cluster)
+        if rgw_duplicate_port_check(cfg):
+            msg = "Refusing to modify config file '%s' as it would have 
duplicate a port" % (cfg_path)
+            LOG.error(msg)
+            raise RuntimeError(msg)
         if args.overwrite_conf is False:
             msg = "The local config file '%s' exists with content that must be 
changed; use --overwrite-conf to update" % (cfg_path)
             LOG.error(msg)
@@ -185,7 +242,7 @@
         with open(cfg_path, 'wb') as configfile:
             cfg.write(configfile)
 
-    for hostname, name in args.rgw:
+    for hostname, name, port in args.rgw:
         try:
             distro = hosts.get(hostname, username=args.username)
             rlogger = distro.conn.logger
@@ -220,9 +277,9 @@
             distro.conn.exit()
             LOG.info(
                 ('The Ceph Object Gateway (RGW) is now running on host %s and '
-                 'default port %s'),
+                 'port %s'),
                 hostname,
-                '7480'
+                port
             )
         except RuntimeError as e:
             LOG.error(e)
@@ -301,9 +358,8 @@
 
     # Check if config needs to be changed
     changed_cfg = False
-    for hostname, name in args.rgw:
+    for hostname, name, port in args.rgw:
         enitity = 'client.{name}'.format(name=name)
-        port = 7480
         if cfg.has_section(enitity) is True:
             cfg.remove_section(enitity)
             changed_cfg = True
@@ -322,7 +378,7 @@
         cluster=args.cluster
         )
 
-    for hostname, name in args.rgw:
+    for hostname, name, port in args.rgw:
         try:
             distro = hosts.get(hostname, username=args.username)
             rlogger = distro.conn.logger
@@ -363,7 +419,7 @@
         with open(cfg_path, 'wb') as configfile:
             cfg.write(configfile)
         # now distribute
-        for hostname, name in args.rgw:
+        for hostname, name, port in args.rgw:
             try:
                 distro = hosts.get(hostname, username=args.username)
                 rlogger = distro.conn.logger
@@ -402,9 +458,14 @@
 def colon_separated(s):
     host = s
     name = 'rgw.' + s
-    if s.count(':') == 1:
+    port = '7480'
+    delimiter_count = s.count(':')
+    if delimiter_count == 1:
         (host, name) = s.split(':')
-    return (host, name)
+    if delimiter_count == 2:
+        (host, name, port) = s.split(':')
+    name = validate.alphanumericdot(name)
+    return (host, name, port)
 
 
 @priority(30)
@@ -412,23 +473,32 @@
     """
     Ceph RGW daemon management
     """
-    parser.add_argument(
-        'subcommand',
-        metavar='SUBCOMMAND',
-        choices=[
-            'list',
-            'create',
-            'delete',
-            ],
-        help='list, create',
+    rgw_parser = parser.add_subparsers(dest='subcommand')
+    rgw_create = rgw_parser.add_parser(
+        'create',
+        help='Create a rgw instance'
         )
-    parser.add_argument(
+    rgw_create.add_argument(
+        'rgw',
+        metavar='HOST[:NAME][:PORT]',
+        nargs='+',
+        type=colon_separated,
+        help='host (and optionally the daemon name) to deploy on.',
+        )
+    rgw_delete = rgw_parser.add_parser(
+        'delete',
+        help='Create a rgw instance'
+        )
+    rgw_delete.add_argument(
         'rgw',
         metavar='HOST[:NAME]',
-        nargs='*',
+        nargs='+',
         type=colon_separated,
-        help='host (and optionally the daemon name) to deploy on. \
-                NAME is automatically prefixed with \'rgw.\'',
+        help='host (and optionally the daemon name) to deploy on.',
+        )
+    rgw_list = rgw_parser.add_parser(
+        'list',
+        help='list all rgw instances in local config'
         )
     parser.set_defaults(
         func=rgw,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ceph-deploy-1.5.32+git.1460619432.b539689/ceph_deploy/tests/parser/test_disk.py
 
new/ceph-deploy-1.5.34+git.1470736983.963ba71/ceph_deploy/tests/parser/test_disk.py
--- 
old/ceph-deploy-1.5.32+git.1460619432.b539689/ceph_deploy/tests/parser/test_disk.py
 2016-04-14 09:39:11.000000000 +0200
+++ 
new/ceph-deploy-1.5.34+git.1470736983.963ba71/ceph_deploy/tests/parser/test_disk.py
 2016-08-09 15:22:14.000000000 +0200
@@ -69,9 +69,9 @@
         args = self.parser.parse_args('disk prepare host1:sdb'.split())
         assert args.fs_type == "xfs"
 
-    def test_disk_prepare_fstype_ext4(self):
-        args = self.parser.parse_args('disk prepare --fs-type ext4 
host1:sdb'.split())
-        assert args.fs_type == "ext4"
+    def test_disk_prepare_fstype_btrfs(self):
+        args = self.parser.parse_args('disk prepare --fs-type btrfs 
host1:sdb'.split())
+        assert args.fs_type == "btrfs"
 
     def test_disk_prepare_fstype_invalid(self, capsys):
         with pytest.raises(SystemExit):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ceph-deploy-1.5.32+git.1460619432.b539689/ceph_deploy/tests/parser/test_osd.py
 
new/ceph-deploy-1.5.34+git.1470736983.963ba71/ceph_deploy/tests/parser/test_osd.py
--- 
old/ceph-deploy-1.5.32+git.1460619432.b539689/ceph_deploy/tests/parser/test_osd.py
  2016-04-14 09:39:11.000000000 +0200
+++ 
new/ceph-deploy-1.5.34+git.1470736983.963ba71/ceph_deploy/tests/parser/test_osd.py
  2016-08-09 15:22:14.000000000 +0200
@@ -86,9 +86,9 @@
         args = self.parser.parse_args('osd create host1:sdb'.split())
         assert args.fs_type == "xfs"
 
-    def test_osd_create_fstype_ext4(self):
-        args = self.parser.parse_args('osd create --fs-type ext4 
host1:sdb'.split())
-        assert args.fs_type == "ext4"
+    def test_osd_create_fstype_btrfs(self):
+        args = self.parser.parse_args('osd create --fs-type btrfs 
host1:sdb'.split())
+        assert args.fs_type == "btrfs"
 
     def test_osd_create_fstype_invalid(self, capsys):
         with pytest.raises(SystemExit):
@@ -130,10 +130,6 @@
         args = self.parser.parse_args('osd prepare host1:sdb'.split())
         assert args.fs_type == "xfs"
 
-    def test_osd_prepare_fstype_ext4(self):
-        args = self.parser.parse_args('osd prepare --fs-type ext4 
host1:sdb'.split())
-        assert args.fs_type == "ext4"
-
     def test_osd_prepare_fstype_invalid(self, capsys):
         with pytest.raises(SystemExit):
             self.parser.parse_args('osd prepare --fs-type bork 
host1:sdb'.split())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ceph-deploy-1.5.32+git.1460619432.b539689/ceph_deploy/tests/test_cli_mon.py 
new/ceph-deploy-1.5.34+git.1470736983.963ba71/ceph_deploy/tests/test_cli_mon.py
--- 
old/ceph-deploy-1.5.32+git.1460619432.b539689/ceph_deploy/tests/test_cli_mon.py 
    2016-04-14 09:39:11.000000000 +0200
+++ 
new/ceph-deploy-1.5.34+git.1470736983.963ba71/ceph_deploy/tests/test_cli_mon.py 
    2016-08-09 15:22:14.000000000 +0200
@@ -1,9 +1,7 @@
-import argparse
-import collections
 import subprocess
 
 import pytest
-from mock import Mock, patch, NonCallableMock
+from mock import Mock, patch
 
 from ceph_deploy.cli import _main as main
 from ceph_deploy.tests.directory import directory
@@ -30,7 +28,7 @@
     return get_connection
 
 
-def test_simple(tmpdir, capsys):
+def test_new(tmpdir, capsys):
     with tmpdir.join('ceph.conf').open('w') as f:
         f.write("""\
 [global]
@@ -38,20 +36,6 @@
 mon initial members = host1
 """)
 
-    ns = argparse.Namespace()
-    ns.pushy = Mock()
-    conn = NonCallableMock(name='PushyClient')
-    ns.pushy.return_value = conn
-
-    mock_compiled = collections.defaultdict(Mock)
-    conn.compile.side_effect = mock_compiled.__getitem__
-
-    MON_SECRET = 'AQBWDj5QAP6LHhAAskVBnUkYHJ7eYREmKo5qKA=='
-
-    def _create_mon(cluster, get_monitor_secret):
-        secret = get_monitor_secret()
-        assert secret == MON_SECRET
-
     fake_ip_addresses = lambda x: ['10.0.0.1']
     try:
         with patch('ceph_deploy.new.net.ip_addresses', fake_ip_addresses):
@@ -59,14 +43,7 @@
                 with patch('ceph_deploy.new.arg_validators.Hostname', lambda: 
lambda x: x):
                     with patch('ceph_deploy.new.hosts'):
                         with directory(str(tmpdir)):
-                            main(
-                                args=['-v', 'new', '--no-ssh-copykey', 
'host1'],
-                                namespace=ns,
-                                )
-                            main(
-                                args=['-v', 'mon', 'create', 'host1'],
-                                namespace=ns,
-                                )
+                            main(['-v', 'new', '--no-ssh-copykey', 'host1'])
     except SystemExit as e:
         raise AssertionError('Unexpected exit: %s', e)
     out, err = capsys.readouterr()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ceph-deploy-1.5.32+git.1460619432.b539689/ceph_deploy/tests/test_gather_keys_missing.py
 
new/ceph-deploy-1.5.34+git.1470736983.963ba71/ceph_deploy/tests/test_gather_keys_missing.py
--- 
old/ceph-deploy-1.5.32+git.1460619432.b539689/ceph_deploy/tests/test_gather_keys_missing.py
 1970-01-01 01:00:00.000000000 +0100
+++ 
new/ceph-deploy-1.5.34+git.1470736983.963ba71/ceph_deploy/tests/test_gather_keys_missing.py
 2016-08-09 15:22:14.000000000 +0200
@@ -0,0 +1,163 @@
+from ceph_deploy import gatherkeys
+from ceph_deploy import new
+import mock
+import tempfile
+import shutil
+import os
+import pytest
+
+
+class mock_conn(object):
+    def __init__(self):
+        pass
+
+class mock_distro(object):
+    def __init__(self):
+        self.conn = mock_conn()
+
+class mock_rlogger(object):
+    def error(self, *arg):
+        return
+
+    def debug(self, *arg):
+        return
+
+
+def mock_remoto_process_check_success(conn, args):
+    secret = new.generate_auth_key()
+    out = '[mon.]\nkey = %s\ncaps mon = allow *\n' % secret
+    return out.split('\n'), "", 0
+
+
+def mock_remoto_process_check_rc_error(conn, args):
+    return [""], ["this failed\n"], 1
+
+
+class TestGatherKeysMissing(object):
+    """
+    Since we are testing things that effect the content a directory we should
+    test in a clean empty directory.
+    """
+
+    def setup(self):
+        """
+        Make temp directory for tests.
+        """
+        self.args = mock.Mock()
+        self.distro = mock_distro()
+        self.test_dir = tempfile.mkdtemp()
+        self.rlogger = mock_rlogger()
+        self.keypath_remote = "some_path"
+
+    def teardown(self):
+        """
+        Remove temp directory and content
+        """
+        shutil.rmtree(self.test_dir)
+
+    @mock.patch('ceph_deploy.lib.remoto.process.check', 
mock_remoto_process_check_success)
+    def test_success_admin(self):
+        keytype = 'admin'
+        rc = gatherkeys.gatherkeys_missing(
+            self.args,
+            self.distro,
+            self.rlogger,
+            self.keypath_remote,
+            keytype,
+            self.test_dir
+            )
+        assert rc is True
+        keyname = gatherkeys.keytype_path_to(self.args, keytype)
+        keypath_gen = os.path.join(self.test_dir, keyname)
+        assert os.path.isfile(keypath_gen)
+
+    @mock.patch('ceph_deploy.lib.remoto.process.check', 
mock_remoto_process_check_success)
+    def test_success_mds(self):
+        keytype = 'mds'
+        rc = gatherkeys.gatherkeys_missing(
+            self.args,
+            self.distro,
+            self.rlogger,
+            self.keypath_remote,
+            keytype,
+            self.test_dir
+            )
+        assert rc is True
+        keyname = gatherkeys.keytype_path_to(self.args, keytype)
+        keypath_gen = os.path.join(self.test_dir, keyname)
+        assert os.path.isfile(keypath_gen)
+
+    @mock.patch('ceph_deploy.lib.remoto.process.check', 
mock_remoto_process_check_success)
+    def test_success_osd(self):
+        keytype = 'osd'
+        rc = gatherkeys.gatherkeys_missing(
+            self.args,
+            self.distro,
+            self.rlogger,
+            self.keypath_remote,
+            keytype,
+            self.test_dir
+            )
+        assert rc is True
+        keyname = gatherkeys.keytype_path_to(self.args, keytype)
+        keypath_gen = os.path.join(self.test_dir, keyname)
+        assert os.path.isfile(keypath_gen)
+
+    @mock.patch('ceph_deploy.lib.remoto.process.check', 
mock_remoto_process_check_success)
+    def test_success_rgw(self):
+        keytype = 'rgw'
+        rc = gatherkeys.gatherkeys_missing(
+            self.args,
+            self.distro,
+            self.rlogger,
+            self.keypath_remote,
+            keytype,
+            self.test_dir
+            )
+        assert rc is True
+        keyname = gatherkeys.keytype_path_to(self.args, keytype)
+        keypath_gen = os.path.join(self.test_dir, keyname)
+        assert os.path.isfile(keypath_gen)
+
+    @mock.patch('ceph_deploy.lib.remoto.process.check', 
mock_remoto_process_check_rc_error)
+    def test_remoto_process_check_rc_error(self):
+        keytype = 'admin'
+        rc = gatherkeys.gatherkeys_missing(
+            self.args,
+            self.distro,
+            self.rlogger,
+            self.keypath_remote,
+            keytype,
+            self.test_dir
+            )
+        assert rc is False
+        keyname = gatherkeys.keytype_path_to(self.args, keytype)
+        keypath_gen = os.path.join(self.test_dir, keyname)
+        assert not os.path.isfile(keypath_gen)
+
+    @mock.patch('ceph_deploy.lib.remoto.process.check', 
mock_remoto_process_check_success)
+    def test_fail_identity_missing(self):
+        keytype = 'silly'
+        with pytest.raises(RuntimeError):
+            gatherkeys.gatherkeys_missing(
+                self.args,
+                self.distro,
+                self.rlogger,
+                self.keypath_remote,
+                keytype,
+                self.test_dir
+                )
+
+    @mock.patch('ceph_deploy.lib.remoto.process.check', 
mock_remoto_process_check_success)
+    def test_fail_capabilities_missing(self):
+        keytype = 'mon'
+        with pytest.raises(RuntimeError):
+            gatherkeys.gatherkeys_missing(
+                self.args,
+                self.distro,
+                self.rlogger,
+                self.keypath_remote,
+                keytype,
+                self.test_dir
+                )
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ceph-deploy-1.5.32+git.1460619432.b539689/ceph_deploy/tests/test_gather_keys_with_mon.py
 
new/ceph-deploy-1.5.34+git.1470736983.963ba71/ceph_deploy/tests/test_gather_keys_with_mon.py
--- 
old/ceph-deploy-1.5.32+git.1460619432.b539689/ceph_deploy/tests/test_gather_keys_with_mon.py
        2016-04-14 09:39:11.000000000 +0200
+++ 
new/ceph-deploy-1.5.34+git.1470736983.963ba71/ceph_deploy/tests/test_gather_keys_with_mon.py
        2016-08-09 15:22:14.000000000 +0200
@@ -51,6 +51,9 @@
     def get_file(self, path):
         return self.get_file_result
 
+    def shortname(self):
+        hostname_split = self.longhostname.split('.')
+        return hostname_split[0]
 
 class mock_conn(object):
     def __init__(self):
@@ -66,12 +69,14 @@
     output = mock_distro()
     mon_keyring = '[mon.]\nkey = %s\ncaps mon = allow *\n' % 
new.generate_auth_key()
     output.conn.remote_module.get_file_result = mon_keyring
+    output.conn.remote_module.longhostname = host
     return output
 
 
 def mock_hosts_get_file_key_content_none(host, **kwargs):
     output = mock_distro()
     output.conn.remote_module.get_file_result = None
+    output.conn.remote_module.longhostname = host
     return output
 
 
@@ -148,7 +153,7 @@
     @mock.patch('ceph_deploy.hosts.get', mock_hosts_get_file_key_content)
     def test_success(self):
         rc = gatherkeys.gatherkeys_with_mon(self.args, self.host, 
self.test_dir)
-        assert rc == True
+        assert rc is True
 
 
     @mock.patch('ceph_deploy.gatherkeys.gatherkeys_missing', 
mock_gatherkeys_missing_success)
@@ -156,7 +161,7 @@
     @mock.patch('ceph_deploy.hosts.get', mock_hosts_get_file_key_content_none)
     def test_monkey_none(self):
         rc = gatherkeys.gatherkeys_with_mon(self.args, self.host, 
self.test_dir)
-        assert rc == False
+        assert rc is False
 
 
     @mock.patch('ceph_deploy.gatherkeys.gatherkeys_missing', 
mock_gatherkeys_missing_fail)
@@ -164,7 +169,7 @@
     @mock.patch('ceph_deploy.hosts.get', mock_hosts_get_file_key_content)
     def test_missing_fail(self):
         rc = gatherkeys.gatherkeys_with_mon(self.args, self.host, 
self.test_dir)
-        assert rc == False
+        assert rc is False
 
 
     @mock.patch('ceph_deploy.gatherkeys.gatherkeys_missing', 
mock_gatherkeys_missing_success)
@@ -172,7 +177,7 @@
     @mock.patch('ceph_deploy.hosts.get', mock_hosts_get_file_key_content)
     def test_remoto_process_check_rc_error(self):
         rc = gatherkeys.gatherkeys_with_mon(self.args, self.host, 
self.test_dir)
-        assert rc == False
+        assert rc is False
 
 
     @mock.patch('ceph_deploy.gatherkeys.gatherkeys_missing', 
mock_gatherkeys_missing_success)
@@ -180,14 +185,14 @@
     @mock.patch('ceph_deploy.hosts.get', mock_hosts_get_file_key_content)
     def test_remoto_process_check_out_not_json(self):
         rc = gatherkeys.gatherkeys_with_mon(self.args, self.host, 
self.test_dir)
-        assert rc == False
+        assert rc is False
 
     @mock.patch('ceph_deploy.gatherkeys.gatherkeys_missing', 
mock_gatherkeys_missing_success)
     @mock.patch('ceph_deploy.lib.remoto.process.check', 
mock_remoto_process_check_out_missing_quorum)
     @mock.patch('ceph_deploy.hosts.get', mock_hosts_get_file_key_content)
     def test_remoto_process_check_out_missing_quorum(self):
         rc = gatherkeys.gatherkeys_with_mon(self.args, self.host, 
self.test_dir)
-        assert rc == False
+        assert rc is False
 
 
     @mock.patch('ceph_deploy.gatherkeys.gatherkeys_missing', 
mock_gatherkeys_missing_success)
@@ -195,7 +200,7 @@
     @mock.patch('ceph_deploy.hosts.get', mock_hosts_get_file_key_content)
     def test_remoto_process_check_out_missing_quorum_1(self):
         rc = gatherkeys.gatherkeys_with_mon(self.args, self.host, 
self.test_dir)
-        assert rc == False
+        assert rc is False
 
 
     @mock.patch('ceph_deploy.gatherkeys.gatherkeys_missing', 
mock_gatherkeys_missing_success)
@@ -203,7 +208,7 @@
     @mock.patch('ceph_deploy.hosts.get', mock_hosts_get_file_key_content)
     def test_remoto_process_check_out_missing_mon(self):
         rc = gatherkeys.gatherkeys_with_mon(self.args, self.host, 
self.test_dir)
-        assert rc == False
+        assert rc is False
 
 
     @mock.patch('ceph_deploy.gatherkeys.gatherkeys_missing', 
mock_gatherkeys_missing_success)
@@ -211,4 +216,4 @@
     @mock.patch('ceph_deploy.hosts.get', mock_hosts_get_file_key_content)
     def test_remoto_process_check_out_missing_monmap_host1(self):
         rc = gatherkeys.gatherkeys_with_mon(self.args, self.host, 
self.test_dir)
-        assert rc == False
+        assert rc is False
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ceph-deploy-1.5.32+git.1460619432.b539689/ceph_deploy/tests/test_keys_equivalent.py
 
new/ceph-deploy-1.5.34+git.1470736983.963ba71/ceph_deploy/tests/test_keys_equivalent.py
--- 
old/ceph-deploy-1.5.32+git.1460619432.b539689/ceph_deploy/tests/test_keys_equivalent.py
     2016-04-14 09:39:11.000000000 +0200
+++ 
new/ceph-deploy-1.5.34+git.1470736983.963ba71/ceph_deploy/tests/test_keys_equivalent.py
     2016-08-09 15:22:14.000000000 +0200
@@ -29,7 +29,7 @@
         f.write(mon_keyring)
 
 
-class TestKeysEquivilent(object):
+class TestKeysEquivalent(object):
     """
     Since we are testing things that effect the content of the current working
     directory we should test in a clean empty directory.
@@ -55,7 +55,7 @@
         write_key_mon_with_caps(key_path_01, secret_01)
         write_key_mon_with_caps(key_path_02, secret_01)
         same = gatherkeys._keyring_equivalent(key_path_01, key_path_02)
-        assert same == True
+        assert same is True
 
 
     def test_different_with_caps(self):
@@ -66,7 +66,7 @@
         write_key_mon_with_caps(key_path_01, secret_01)
         write_key_mon_with_caps(key_path_02, secret_02)
         same = gatherkeys._keyring_equivalent(key_path_01, key_path_02)
-        assert same == False
+        assert same is False
 
 
     def test_identical_without_caps(self):
@@ -76,7 +76,7 @@
         write_key_mon_without_caps(key_path_01, secret_01)
         write_key_mon_without_caps(key_path_02, secret_01)
         same = gatherkeys._keyring_equivalent(key_path_01, key_path_02)
-        assert same == True
+        assert same is True
 
 
     def test_different_without_caps(self):
@@ -87,7 +87,7 @@
         write_key_mon_without_caps(key_path_01, secret_01)
         write_key_mon_without_caps(key_path_02, secret_02)
         same = gatherkeys._keyring_equivalent(key_path_01, key_path_02)
-        assert same == False
+        assert same is False
 
 
     def test_identical_mixed_caps(self):
@@ -97,7 +97,7 @@
         write_key_mon_with_caps(key_path_01, secret_01)
         write_key_mon_without_caps(key_path_02, secret_01)
         same = gatherkeys._keyring_equivalent(key_path_01, key_path_02)
-        assert same == True
+        assert same is True
 
 
     def test_different_mixed_caps(self):
@@ -108,7 +108,7 @@
         write_key_mon_with_caps(key_path_01, secret_01)
         write_key_mon_without_caps(key_path_02, secret_02)
         same = gatherkeys._keyring_equivalent(key_path_01, key_path_02)
-        assert same == False
+        assert same is False
 
 
     def test_identical_caps_mixed_tabs(self):
@@ -118,7 +118,7 @@
         write_key_mon_with_caps(key_path_01, secret_01)
         write_key_mon_with_caps_with_tab(key_path_02, secret_01)
         same = gatherkeys._keyring_equivalent(key_path_01, key_path_02)
-        assert same == True
+        assert same is True
 
 
     def test_different_caps_mixed_tabs(self):
@@ -129,7 +129,7 @@
         write_key_mon_with_caps(key_path_01, secret_01)
         write_key_mon_with_caps_with_tab(key_path_02, secret_02)
         same = gatherkeys._keyring_equivalent(key_path_01, key_path_02)
-        assert same == False
+        assert same is False
 
 
     def test_identical_caps_mixed_quote(self):
@@ -139,7 +139,7 @@
         write_key_mon_with_caps_with_tab(key_path_01, secret_01)
         write_key_mon_with_caps_with_tab_quote(key_path_02, secret_01)
         same = gatherkeys._keyring_equivalent(key_path_01, key_path_02)
-        assert same == True
+        assert same is True
 
 
     def test_different_caps_mixed_quote(self):
@@ -150,7 +150,7 @@
         write_key_mon_with_caps_with_tab(key_path_01, secret_01)
         write_key_mon_with_caps_with_tab_quote(key_path_02, secret_02)
         same = gatherkeys._keyring_equivalent(key_path_01, key_path_02)
-        assert same == False
+        assert same is False
 
 
     def test_missing_key_1(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ceph-deploy-1.5.32+git.1460619432.b539689/ceph_deploy/tests/unit/hosts/test_suse.py
 
new/ceph-deploy-1.5.34+git.1470736983.963ba71/ceph_deploy/tests/unit/hosts/test_suse.py
--- 
old/ceph-deploy-1.5.32+git.1460619432.b539689/ceph_deploy/tests/unit/hosts/test_suse.py
     2016-04-14 09:39:11.000000000 +0200
+++ 
new/ceph-deploy-1.5.34+git.1470736983.963ba71/ceph_deploy/tests/unit/hosts/test_suse.py
     2016-08-09 15:22:14.000000000 +0200
@@ -8,7 +8,7 @@
     def test_choose_init_default(self):
         self.host.release = None
         init_type = self.host.choose_init(self.host)
-        assert init_type == "sysvinit"
+        assert init_type == "systemd"
 
     def test_choose_init_SLE_11(self):
         self.host.release = '11'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ceph-deploy-1.5.32+git.1460619432.b539689/ceph_deploy/util/pkg_managers.py 
new/ceph-deploy-1.5.34+git.1470736983.963ba71/ceph_deploy/util/pkg_managers.py
--- 
old/ceph-deploy-1.5.32+git.1460619432.b539689/ceph_deploy/util/pkg_managers.py  
    2016-04-14 09:39:11.000000000 +0200
+++ 
new/ceph-deploy-1.5.34+git.1470736983.963ba71/ceph_deploy/util/pkg_managers.py  
    2016-08-09 15:22:14.000000000 +0200
@@ -297,7 +297,7 @@
             packages = [packages]
 
         extra_flags = kw.pop('extra_remove_flags', None)
-        cmd = self.executable + ['remove']
+        cmd = self.executable + ['--ignore-unknown', 'remove']
         if extra_flags:
             if isinstance(extra_flags, str):
                 extra_flags = [extra_flags]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ceph-deploy-1.5.32+git.1460619432.b539689/ceph_deploy/validate.py 
new/ceph-deploy-1.5.34+git.1470736983.963ba71/ceph_deploy/validate.py
--- old/ceph-deploy-1.5.32+git.1460619432.b539689/ceph_deploy/validate.py       
2016-04-14 09:39:11.000000000 +0200
+++ new/ceph-deploy-1.5.34+git.1470736983.963ba71/ceph_deploy/validate.py       
2016-08-09 15:22:14.000000000 +0200
@@ -3,6 +3,7 @@
 
 
 ALPHANUMERIC_RE = re.compile(r'^[a-zA-Z][a-zA-Z0-9]*$')
+ALPHANUMERICDOT_RE = re.compile(r'^[a-zA-Z][a-zA-Z0-9\.\-\_]*$')
 
 
 def alphanumeric(s):
@@ -14,3 +15,13 @@
             'argument must start with a letter and contain only letters and 
numbers',
             )
     return s
+
+def alphanumericdot(s):
+    """
+    Enforces string to be alphanumeric and dot allowed with leading alpha.
+    """
+    if not ALPHANUMERICDOT_RE.match(s):
+        raise argparse.ArgumentTypeError(
+            'argument must start with a letter and contain only letters and 
numbers or [.-_]',
+            )
+    return s
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ceph-deploy-1.5.32+git.1460619432.b539689/debian/changelog 
new/ceph-deploy-1.5.34+git.1470736983.963ba71/debian/changelog
--- old/ceph-deploy-1.5.32+git.1460619432.b539689/debian/changelog      
2016-04-14 09:39:11.000000000 +0200
+++ new/ceph-deploy-1.5.34+git.1470736983.963ba71/debian/changelog      
2016-08-09 15:22:14.000000000 +0200
@@ -1,3 +1,15 @@
+ceph-deploy (1.5.34) stable; urgency=medium
+
+  * New upstream release
+
+ -- Alfredo Deza <ad...@redhat.com>  Tue, 07 Jun 2016 17:06:26 +0000
+
+ceph-deploy (1.5.33) stable; urgency=medium
+
+  * New upstream release
+
+ -- Alfredo Deza <ad...@redhat.com>  Fri, 22 Apr 2016 12:36:09 +0000
+
 ceph-deploy (1.5.32) stable; urgency=medium
 
   * New upstream release
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ceph-deploy-1.5.32+git.1460619432.b539689/docs/source/admin.rst 
new/ceph-deploy-1.5.34+git.1470736983.963ba71/docs/source/admin.rst
--- old/ceph-deploy-1.5.32+git.1460619432.b539689/docs/source/admin.rst 
1970-01-01 01:00:00.000000000 +0100
+++ new/ceph-deploy-1.5.34+git.1470736983.963ba71/docs/source/admin.rst 
2016-08-09 15:22:14.000000000 +0200
@@ -0,0 +1,26 @@
+.. _admin:
+
+admin
+=======
+The ``admin`` subcommand provides an interface to add to the cluster's admin
+node.
+
+Example
+-------
+To make a node and admin node run::
+
+  ceph-deploy admin ADMIN [ADMIN..]
+
+This places the the cluster configuration and the admin keyring on the remote
+nodes.
+
+Admin node definition
+---------------------
+
+The definition of an admin node is that both the cluster configuration file
+and the admin keyring. Both of these files are stored in the directory
+/etc/ceph and thier prefix is that of the cluster name.
+
+The default ceph cluster name is "ceph". So with a cluster with a default name
+the admin keyring is named /etc/ceph/ceph.client.admin.keyring while cluster
+configuration file is named /etc/ceph/ceph.conf.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ceph-deploy-1.5.32+git.1460619432.b539689/docs/source/changelog.rst 
new/ceph-deploy-1.5.34+git.1470736983.963ba71/docs/source/changelog.rst
--- old/ceph-deploy-1.5.32+git.1460619432.b539689/docs/source/changelog.rst     
2016-04-14 09:39:11.000000000 +0200
+++ new/ceph-deploy-1.5.34+git.1470736983.963ba71/docs/source/changelog.rst     
2016-08-09 15:22:14.000000000 +0200
@@ -4,6 +4,24 @@
 1.5
 ---
 
+1.5.34
+^^^^^^
+07-Jun-2016
+
+* Do not call partx/partprobe when zapping disks
+* No longer allow using ext4
+* Default to systemd for SUSE
+* Remove usage of rcceph (for SUSE)
+* No longer depend on automatic ``ceph-create-keys``, use the monitors to fetch
+  keys.
+* Use ``0.0.28`` from remoto
+
+1.5.33
+^^^^^^
+22-Apr-2016
+
+* Default to Jewel for releases
+
 1.5.32
 ^^^^^^
 13-Apr-2016
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ceph-deploy-1.5.32+git.1460619432.b539689/docs/source/gatherkeys.rst 
new/ceph-deploy-1.5.34+git.1470736983.963ba71/docs/source/gatherkeys.rst
--- old/ceph-deploy-1.5.32+git.1460619432.b539689/docs/source/gatherkeys.rst    
1970-01-01 01:00:00.000000000 +0100
+++ new/ceph-deploy-1.5.34+git.1470736983.963ba71/docs/source/gatherkeys.rst    
2016-08-09 15:22:14.000000000 +0200
@@ -0,0 +1,55 @@
+.. _gatherkeys:
+
+==========
+gatherkeys
+==========
+
+The ``gatherkeys`` subcommand provides an interface to get with a cluster's
+cephx bootstrap keys.
+
+keyrings
+========
+The ``gatherkeys`` subcommand retrieves the following keyrings.
+
+ceph.mon.keyring
+----------------
+This keyring is used by all mon nodes to communicate with other mon nodes.
+
+ceph.client.admin.keyring
+-------------------------
+This keyring is ceph client commands by default to administer the ceph cluster.
+
+ceph.bootstrap-osd.keyring
+--------------------------
+This keyring is used to generate cephx keyrings for OSD instances.
+
+ceph.bootstrap-mds.keyring
+--------------------------
+This keyring is used to generate cephx keyrings for MDS instances.
+
+ceph.bootstrap-rgw.keyring
+--------------------------
+This keyring is used to generate cephx keyrings for RGW instances.
+
+Example
+=======
+The ``gatherkeys`` subcommand contacts the mon and creates or retrieves 
existing
+keyrings from the mon internal store. To run::
+
+  ceph-deploy gatherkeys MON [MON..]
+
+You can optionally add as many mon nodes to the command line as desired. The
+``gatherkeys`` subcommand will succeed on the first mon to respond successfully
+with all the keyrings.
+
+Backing up of old keyrings
+==========================
+
+If old keyrings exist in the current working directory that do not match the
+retrieved keyrings these old keyrings will be renamed with a time stamp
+extention so you will not loose valuable keyrings.
+
+.. note:: Before version v1.5.33 ceph-deploy relied upon ``ceph-create-keys``
+          and did not backup existing keys. Using ``ceph-create-keys`` produced
+          a side effect of deploying all bootstrap keys on the mon node so
+          making all mon nodes admin nodes.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ceph-deploy-1.5.32+git.1460619432.b539689/docs/source/index.rst 
new/ceph-deploy-1.5.34+git.1470736983.963ba71/docs/source/index.rst
--- old/ceph-deploy-1.5.32+git.1460619432.b539689/docs/source/index.rst 
2016-04-14 09:39:11.000000000 +0200
+++ new/ceph-deploy-1.5.34+git.1470736983.963ba71/docs/source/index.rst 
2016-08-09 15:22:14.000000000 +0200
@@ -175,6 +175,19 @@
     https_proxy=http://host:port
 
 
+Creating a new configuration
+============================
+
+To create a new configuration file and secret key, decide what hosts
+will run ``ceph-mon``, and run::
+
+  ceph-deploy new MON [MON..]
+
+For detailed information on new instructions refer to the :ref:`new`
+section.
+
+For detailed information on ``new`` subcommand refer to the
+:ref:`mon` section.
 
 Deploying monitors
 ==================
@@ -187,10 +200,13 @@
 config file are deployed. That is, the hosts you passed to
 ``ceph-deploy new`` are the default value here.
 
+For detailed information on ``mon`` subcommand refer to the
+:ref:`mon` section.
+
 Gather keys
 ===========
 
-To gather authenticate keys (for administering the cluster and
+To gather authentication keys (for administering the cluster and
 bootstrapping new nodes) to the local directory, run::
 
   ceph-deploy gatherkeys HOST [HOST...]
@@ -199,6 +215,23 @@
 
 Once these keys are in the local directory, you can provision new OSDs etc.
 
+For detailed information on ``gatherkeys`` subcommand refer to the
+:ref:`gatherkeys` section.
+
+Admin hosts
+===========
+
+To prepare a host with a ``ceph.conf`` and ``ceph.client.admin.keyring``
+keyring so that it can administer the cluster, run::
+
+  ceph-deploy admin HOST [HOST ...]
+
+Older versions of ceph-deploy automatically added the admin keyring to
+all mon nodes making them admin nodes. For detailed information on the
+admin command refer to the :ref:`admin` section.
+
+For detailed information on ``admin`` subcommand refer to the
+:ref:`admin` section.
 
 Deploying OSDs
 ==============
@@ -222,15 +255,6 @@
 
 This is useful when you are managing the mounting of volumes yourself.
 
-
-Admin hosts
-===========
-
-To prepare a host with a ``ceph.conf`` and ``ceph.client.admin.keyring``
-keyring so that it can administer the cluster, run::
-
-  ceph-deploy admin HOST [HOST ...]
-
 Forget keys
 ===========
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ceph-deploy-1.5.32+git.1460619432.b539689/docs/source/mon.rst 
new/ceph-deploy-1.5.34+git.1470736983.963ba71/docs/source/mon.rst
--- old/ceph-deploy-1.5.32+git.1460619432.b539689/docs/source/mon.rst   
2016-04-14 09:39:11.000000000 +0200
+++ new/ceph-deploy-1.5.34+git.1470736983.963ba71/docs/source/mon.rst   
2016-08-09 15:22:14.000000000 +0200
@@ -7,6 +7,12 @@
 most common scenarios. Monitors are usually very particular in what they need
 to work correctly.
 
+.. note:: Before version v1.5.33 ceph-deploy relied upon ``ceph-create-keys``.
+          Using ``ceph-create-keys`` produced a side effect of deploying all
+          bootstrap keys on the mon node so making all mon nodes admin nodes.
+          This can be recreated by running the admin command on all mon nodes
+          see :ref:`admin` section.
+
 create-initial
 ------------------
 Will deploy for monitors defined in ``mon initial members``, wait until
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ceph-deploy-1.5.32+git.1460619432.b539689/setup.py 
new/ceph-deploy-1.5.34+git.1470736983.963ba71/setup.py
--- old/ceph-deploy-1.5.32+git.1460619432.b539689/setup.py      2016-04-14 
09:39:11.000000000 +0200
+++ new/ceph-deploy-1.5.34+git.1470736983.963ba71/setup.py      2016-08-09 
15:22:14.000000000 +0200
@@ -24,7 +24,7 @@
     clean_vendor('remoto')
 else:
     vendorize([
-        ('remoto', '0.0.27', ['python', 'vendor.py']),
+        ('remoto', '0.0.28', ['python', 'vendor.py']),
     ])
 
 


Reply via email to