Merge branch 'feature-naming-scheme' into develop
authorStavros Sachtouris <saxtouri@admin.grnet.gr>
Thu, 28 Nov 2013 13:00:25 +0000 (15:00 +0200)
committerStavros Sachtouris <saxtouri@admin.grnet.gr>
Thu, 28 Nov 2013 13:00:25 +0000 (15:00 +0200)
Conflicts:
Changelog
kamaki/cli/commands/cyclades.py
kamaki/cli/commands/network.py
kamaki/cli/commands/pithos.py

1  2 
Changelog
kamaki/cli/__init__.py
kamaki/cli/commands/__init__.py
kamaki/cli/commands/cyclades.py
kamaki/cli/commands/pithos.py
kamaki/cli/config/__init__.py

diff --cc Changelog
+++ b/Changelog
@@@ -8,7 -7,9 +8,10 @@@ Changes
  1. Make astakosclient a mantatory requirement for kamaki [#4312]
  2. Make post_user_catalogs obsolete, but keep for one more version [#4337]
  3. Rename user commands for cached account requests as /user session [#4340]
 -4. Modify all commands [#4583]
 +4. Remove max_theads from config, move control to threaded commands [#4617]
++5. Modify all commands [#4583]
+     New scheme for ALL <object> <verb> [object id] [--arguments]
+     e.g., file modidy --metadata-add=revier='Mr. Reviewer' /pithos/myfile.txt
  
  Features:
  
Simple merge
Simple merge
@@@ -388,9 -407,14 +407,16 @@@ class server_create(_init_cyclades, _op
              'parameter is the prefix of each server in the cluster (e.g.,'
              'srv1, srv2, etc.',
              '--cluster-size'),
 +        max_threads=IntArgument(
-             'Max threads in cluster mode (default 1)', '--threads')
++            'Max threads in cluster mode (default 1)', '--threads'),
+         network_id=RepeatableArgument(
+             'Connect server to network (can be repeated)', '--network'),
+         network_id_and_ip=NetworkIpArgument(
+             'Connect server to network w. floating ip ( NETWORK_ID,IP )'
+             '(can be repeated)',
+             '--network-with-ip'),
      )
+     required = ('server_name', 'flavor_id', 'image_id')
  
      @errors.cyclades.cluster_size
      def _create_cluster(self, prefix, flavor_id, image_id, size):
              name='%s%s' % (prefix, i if size > 1 else ''),
              flavor_id=flavor_id,
              image_id=image_id,
-             personality=self['personality']) for i in range(1, 1 + size)]
+             personality=self['personality'],
+             networks=networks) for i in range(1, 1 + size)]
          if size == 1:
              return [self.client.create_server(**servers[0])]
 +        self.client.MAX_THREADS = int(self['max_threads'] or 1)
          try:
              r = self.client.async_run(self.client.create_server, servers)
              return r
@@@ -1039,17 -809,15 +809,20 @@@ class file_upload(_pithos_container, _o
          content_disposition=ValueArgument(
              'specify objects presentation style', '--content-disposition'),
          content_type=ValueArgument('specify content type', '--content-type'),
-         sharing=SharingArgument(
-             help='\n'.join([
-                 'define sharing object policy',
-                 '( "read=user1,grp1,user2,... write=user1,grp2,... )']),
-             parsed_name='--sharing'),
+         uuid_for_read_permission=RepeatableArgument(
+             'Give read access to a user or group (can be repeated) '
+             'Use * for all users',
+             '--read-permission'),
+         uuid_for_write_permission=RepeatableArgument(
+             'Give write access to a user or group (can be repeated) '
+             'Use * for all users',
+             '--write-permission'),
          public=FlagArgument('make object publicly accessible', '--public'),
 +        max_threads=IntArgument('set max threads (default 5)', '--threads'),
 +        progress_bar=ProgressBarArgument(
 +            'do not show progress bar',
 +            ('-N', '--no-progress-bar'),
 +            default=False),
          overwrite=FlagArgument('Force (over)write', ('-f', '--force')),
          recursive=FlagArgument(
              'Recursively upload directory *contents* + subdirectories',
              self._check_container_limit(lpath)
              yield open(lpath, 'rb'), rpath
  
-     @errors.generic.all
-     @errors.pithos.connection
-     @errors.pithos.container
-     @errors.pithos.object_path
-     @errors.pithos.local_path
      def _run(self, local_path, remote_path):
 -        if self['max_threads'] > 0:
 -            self.client.MAX_THREADS = int(self['max_threads'])
 +        self.client.MAX_THREADS = int(self['max_threads'] or 5)
          params = dict(
              content_encoding=self['content_encoding'],
              content_type=self['content_type'],
@@@ -1387,17 -1209,22 +1213,22 @@@ class file_download(_pithos_container)
      @errors.pithos.container
      @errors.pithos.object_path
      @errors.pithos.local_path
+     @errors.pithos.local_path_download
      def _run(self, local_path):
 -        self.client.MAX_THREADS = self['max_threads'] or 5
 +        self.client.MAX_THREADS = int(self['max_threads'] or 5)
          progress_bar = None
          try:
-             for f, rpath in self._outputs(local_path):
-                 (
-                     progress_bar,
-                     download_cb) = self._safe_progress_bar(
-                         'Download %s' % rpath)
+             for rpath, output_file in self._src_dst(local_path):
+                 if not rpath:
+                     self.error('Create local directory %s' % output_file)
+                     makedirs(output_file)
+                     continue
+                 self.error('/%s/%s --> %s' % (
+                     self.container, rpath, output_file.name))
+                 progress_bar, download_cb = self._safe_progress_bar(
+                     '  download')
                  self.client.download_object(
-                     rpath, f,
+                     rpath, output_file,
                      download_cb=download_cb,
                      range_str=self['range'],
                      version=self['object_version'],
@@@ -77,11 -77,16 +77,15 @@@ DEFAULTS = 
          'log_token': 'off',
          'log_data': 'off',
          'log_pid': 'off',
 -        'max_threads': 7,
          'history_file': HISTORY_PATH,
          'user_cli': 'astakos',
-         'admin_cli': 'astakos',
+         'quota_cli': 'astakos',
+         'resource_cli': 'astakos',
          'project_cli': 'astakos',
          'file_cli': 'pithos',
+         'container_cli': 'pithos',
+         'sharer_cli': 'pithos',
+         'group_cli': 'pithos',
          'server_cli': 'cyclades',
          'flavor_cli': 'cyclades',
          'network_cli': 'network',