'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
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'],
@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'],
'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',