Revision 6d190dd1 kamaki/cli/commands/cyclades.py
b/kamaki/cli/commands/cyclades.py | ||
---|---|---|
40 | 40 |
from kamaki.cli.argument import FlagArgument, ValueArgument, KeyValueArgument |
41 | 41 |
from kamaki.cli.argument import ProgressBarArgument, DateArgument, IntArgument |
42 | 42 |
from kamaki.cli.commands import _command_init, errors, addLogSettings |
43 |
from kamaki.cli.commands import _optional_output_cmd, _optional_json |
|
43 |
from kamaki.cli.commands import ( |
|
44 |
_optional_output_cmd, _optional_json, _name_filter, _id_filter) |
|
44 | 45 |
|
45 | 46 |
from base64 import b64encode |
46 | 47 |
from os.path import exists |
... | ... | |
155 | 156 |
|
156 | 157 |
|
157 | 158 |
@command(server_cmds) |
158 |
class server_list(_init_cyclades, _optional_json): |
|
159 |
class server_list(_init_cyclades, _optional_json, _name_filter, _id_filter):
|
|
159 | 160 |
"""List Virtual Machines accessible by user""" |
160 | 161 |
|
161 | 162 |
PERMANENTS = ('id', 'name') |
... | ... | |
172 | 173 |
'output results in pages (-n to set items per page, default 10)', |
173 | 174 |
'--more'), |
174 | 175 |
enum=FlagArgument('Enumerate results', '--enumerate'), |
175 |
name=ValueArgument('filter by name', '--name'), |
|
176 |
name_pref=ValueArgument( |
|
177 |
'filter by name prefix (case insensitive)', '--name-prefix'), |
|
178 |
name_suff=ValueArgument( |
|
179 |
'filter by name suffix (case insensitive)', '--name-suffix'), |
|
180 |
name_like=ValueArgument( |
|
181 |
'print only if name contains this (case insensitive)', |
|
182 |
'--name-like'), |
|
183 | 176 |
flavor_id=ValueArgument('filter by flavor id', ('--flavor-id')), |
184 | 177 |
image_id=ValueArgument('filter by image id', ('--image-id')), |
185 | 178 |
meta=KeyValueArgument('filter by metadata key=values', ('--metadata')), |
... | ... | |
188 | 181 |
('--metadata-like')), |
189 | 182 |
) |
190 | 183 |
|
191 |
def _filtered_by_name(self, servers): |
|
192 |
if self['name']: |
|
193 |
servers = filter_dicts_by_dict(servers, dict(name=self['name'])) |
|
194 |
np, ns, nl = self['name_pref'], self['name_suff'], self['name_like'] |
|
195 |
return [img for img in servers if ( |
|
196 |
(not np) or img['name'].lower().startswith(np.lower())) and ( |
|
197 |
(not ns) or img['name'].lower().endswith(ns.lower())) and ( |
|
198 |
(not nl) or nl.lower() in img['name'].lower())] |
|
199 |
|
|
200 | 184 |
def _add_user_name(self, servers): |
201 | 185 |
uuids = self._uuids2usernames(list(set( |
202 | 186 |
[srv['user_id'] for srv in servers] + |
... | ... | |
206 | 190 |
srv['tenant_id'] += ' (%s)' % uuids[srv['tenant_id']] |
207 | 191 |
return servers |
208 | 192 |
|
209 |
def _filtered_by_image(self, servers):
|
|
193 |
def _filter_by_image(self, servers): |
|
210 | 194 |
iid = self['image_id'] |
211 | 195 |
new_servers = [] |
212 | 196 |
for srv in servers: |
... | ... | |
214 | 198 |
new_servers.append(srv) |
215 | 199 |
return new_servers |
216 | 200 |
|
217 |
def _filtered_by_flavor(self, servers):
|
|
201 |
def _filter_by_flavor(self, servers): |
|
218 | 202 |
fid = self['flavor_id'] |
219 | 203 |
new_servers = [] |
220 | 204 |
for srv in servers: |
... | ... | |
222 | 206 |
new_servers.append(srv) |
223 | 207 |
return new_servers |
224 | 208 |
|
225 |
def _filtered_by_metadata(self, servers):
|
|
209 |
def _filter_by_metadata(self, servers): |
|
226 | 210 |
new_servers = [] |
227 | 211 |
for srv in servers: |
228 | 212 |
if not 'metadata' in srv: |
... | ... | |
247 | 231 |
detail = self['detail'] or withimage or withflavor or withmeta |
248 | 232 |
servers = self.client.list_servers(detail, self['since']) |
249 | 233 |
|
250 |
servers = self._filtered_by_name(servers) |
|
234 |
servers = self._filter_by_name(servers) |
|
235 |
servers = self._filter_by_id(servers) |
|
251 | 236 |
if withimage: |
252 |
servers = self._filtered_by_image(servers)
|
|
237 |
servers = self._filter_by_image(servers) |
|
253 | 238 |
if withflavor: |
254 |
servers = self._filtered_by_flavor(servers)
|
|
239 |
servers = self._filter_by_flavor(servers) |
|
255 | 240 |
if withmeta: |
256 |
servers = self._filtered_by_metadata(servers)
|
|
241 |
servers = self._filter_by_metadata(servers) |
|
257 | 242 |
|
258 | 243 |
if self['detail'] and not self['json_output']: |
259 | 244 |
servers = self._add_user_name(servers) |
... | ... | |
700 | 685 |
|
701 | 686 |
|
702 | 687 |
@command(flavor_cmds) |
703 |
class flavor_list(_init_cyclades, _optional_json): |
|
688 |
class flavor_list(_init_cyclades, _optional_json, _name_filter, _id_filter):
|
|
704 | 689 |
"""List available hardware flavors""" |
705 | 690 |
|
706 | 691 |
arguments = dict( |
... | ... | |
716 | 701 |
@errors.cyclades.connection |
717 | 702 |
def _run(self): |
718 | 703 |
flavors = self.client.list_flavors(self['detail']) |
704 |
flavors = self._filter_by_name(flavors) |
|
705 |
flavors = self._filter_by_id(flavors) |
|
719 | 706 |
if not (self['detail'] or self['json_output']): |
720 | 707 |
remove_from_items(flavors, 'links') |
721 | 708 |
pg_size = 10 if self['more'] and not self['limit'] else self['limit'] |
... | ... | |
767 | 754 |
|
768 | 755 |
|
769 | 756 |
@command(network_cmds) |
770 |
class network_list(_init_cyclades, _optional_json): |
|
757 |
class network_list(_init_cyclades, _optional_json, _name_filter, _id_filter):
|
|
771 | 758 |
"""List networks""" |
772 | 759 |
|
773 | 760 |
arguments = dict( |
... | ... | |
783 | 770 |
@errors.cyclades.connection |
784 | 771 |
def _run(self): |
785 | 772 |
networks = self.client.list_networks(self['detail']) |
773 |
networks = self._filter_by_name(networks) |
|
774 |
networks = self._filter_by_id(networks) |
|
786 | 775 |
if not (self['detail'] or self['json_output']): |
787 | 776 |
remove_from_items(networks, 'links') |
788 | 777 |
kwargs = dict(with_enumeration=self['enum']) |
Also available in: Unified diff