Command object docs: server, server image

server
server image

Some cosmetic changes in the command source, sorting classes, help strings, etc.

Change-Id: I3f68dae77b9fe02bc6866684e05aeff943dd9cc3
This commit is contained in:
Dean Troyer 2014-11-17 21:56:18 -06:00
parent cc54f989ec
commit ac4950b46e
4 changed files with 683 additions and 83 deletions

View File

@ -0,0 +1,27 @@
============
server image
============
A server image is a disk image created from a running server instance. The
image is created in the Image store.
server image create
-------------------
Create a new disk image from a running server
.. code:: bash
os server image create
[--name <image-name>]
[--wait]
<server>
:option:`--name` <image-name>
Name of new image (default is server name)
:option:`--wait`
Wait for image create to complete
:option:`<server>`
Server (name or ID)

View File

@ -0,0 +1,544 @@
======
server
======
server add security group
-------------------------
Add security group to server
.. code:: bash
os server add security group
<server>
<group>
:option:`<server>`
Server (name or ID)
:option:`<group>`
Security group to add (name or ID)
server add volume
-----------------
Add volume to server
.. code:: bash
os server add volume
[--device <device>]
<server>
<volume>
:option:`--device` <device>
Server internal device name for volume
:option:`<server>`
Server (name or ID)
:option:`<volume>`
Volume to add (name or ID)
server create
-------------
Create a new server
.. code:: bash
os server create
--image <image> | --volume <volume>
--flavor <flavor>
[--security-group <security-group-list> [...] ]
[--key-name <key-name>]
[--property <key=value> [...] ]
[--file <dest-filename=source-filename>] [...] ]
[--user-data <user-data>]
[--availability-zone <zone-name>]
[--block-device-mapping <dev-name=mapping> [...] ]
[--nic <net-id=net-uuid,v4-fixed-ip=ip-addr> [...] ]
[--hint <key=value> [...] ]
[--config-drive <value>|True ]
[--min <count>]
[--max <count>]
[--wait]
<server-name>
:option:`--image` <image>
Create server from this image
:option:`--volume` <volume>
Create server from this volume
:option:`--flavor` <flavor>
Create server with this flavor
:option:`--security-group` <security-group-name>
Security group to assign to this server (repeat for multiple groups)
:option:`--key-name` <key-name>
Keypair to inject into this server (optional extension)
:option:`--property` <key=value>
Set a property on this server (repeat for multiple values)
:option:`--file` <dest-filename=source-filename>
File to inject into image before boot (repeat for multiple files)
:option:`--user-data` <user-data>
User data file to serve from the metadata server
:option:`--availability-zone` <zone-name>
Select an availability zone for the server
:option:`--block-device-mapping` <dev-name=mapping>
Map block devices; map is <id>:<type>:<size(GB)>:<delete_on_terminate> (optional extension)
:option:`--nic` <nic-config-string>
Specify NIC configuration (optional extension)
:option:`--hint` <key=value>
Hints for the scheduler (optional extension)
:option:`--config-drive` <config-drive-volume>|True
Use specified volume as the config drive, or 'True' to use an ephemeral drive
:option:`--min` <count>
Minimum number of servers to launch (default=1)
:option:`--max` <count>
Maximum number of servers to launch (default=1)
:option:`--wait`
Wait for build to complete
:option:`<server-name>`
New server name
server delete
-------------
Delete server command
.. code:: bash
os server delete
<server>
:option:`<server>`
Server (name or ID)
server list
-----------
List servers
.. code:: bash
os server list
[--reservation-id <reservation-id>]
[--ip <ip-regex>]
[--ip6 <ip6-regex>]
[--name <name-regex>]
[--instance-name <instance-name-regex>]
[--status <status>]
[--flavor <flavor>]
[--image <image>]
[--host <hostname>]
[--all-projects]
[--long]
:option:`--reservation-id` <reservation-id>
Only return instances that match the reservation
:option:`--ip` <ip-address-regex>
Regular expression to match IP addresses
:option:`--ip6` <ip-address-regex>
Regular expression to match IPv6 addresses
:option:`--name` <name-regex>
Regular expression to match names
:option:`--instance-name` <server-name-regex>
Regular expression to match instance name (admin only)
:option:`--status` <status>
Search by server status
:option:`--flavor` <flavor>
Search by flavor ID
:option:`--image` <image>
Search by image ID
:option:`--host` <hostname>
Search by hostname
:option:`--all-projects`
Include all projects (admin only)
:option:`--long`
List additional fields in output
server lock
-----------
Lock server
.. code:: bash
os server lock
<server>
:option:`<server>`
Server (name or ID)
server migrate
--------------
Migrate server to different host
.. code:: bash
os server migrate
--live <host>
[--shared-migration | --block-migration]
[--disk-overcommit | --no-disk-overcommit]
[--wait]
<server>
:option:`--wait`
Wait for resize to complete
:option:`--live` <hostname>
Target hostname
:option:`--shared-migration`
Perform a shared live migration (default)
:option:`--block-migration`
Perform a block live migration
:option:`--disk-overcommit`
Allow disk over-commit on the destination host
:option:`--no-disk-overcommit`
Do not over-commit disk on the destination host (default)
:option:`<server>`
Server to migrate (name or ID)
server pause
------------
Pause server
.. code:: bash
os server pause
<server>
:option:`<server>`
Server (name or ID)
server reboot
-------------
Perform a hard or soft server reboot
.. code:: bash
os server reboot
[--hard | --soft]
[--wait]
<server>
:option:`--hard`
Perform a hard reboot
:option:`--soft`
Perform a soft reboot
:option:`--wait`
Wait for reboot to complete
:option:`<server>`
Server (name or ID)
server rebuild
--------------
Rebuild server
.. code:: bash
os server rebuild
--image <image>
[--password <password>]
[--wait]
<server>
:option:`--image` <image>
Recreate server from this image
:option:`--password` <password>
Set the password on the rebuilt instance
:option:`--wait`
Wait for rebuild to complete
:option:`<server>`
Server (name or ID)
server remove security group
----------------------------
Remove security group from server
.. code:: bash
os server remove security group
<server>
<group>
:option:`<server>`
Name or ID of server to use
:option:`<group>`
Name or ID of security group to remove from server
server remove volume
--------------------
Remove volume from server
.. code:: bash
os server remove volume
<server>
<volume>
:option:`<server>`
Server (name or ID)
:option:`<volume>`
Volume to remove (name or ID)
server rescue
-------------
Put server in rescue mode
.. code:: bash
os server rescue
<server>
:option:`<server>`
Server (name or ID)
server resize
-------------
Scale server to a new flavor
.. code:: bash
os server resize
--flavor <flavor>
[--wait]
<server>
os server resize
--verify | --revert
<server>
:option:`--flavor` <flavor>
Resize server to specified flavor
:option:`--verify`
Verify server resize is complete
:option:`--revert`
Restore server state before resize
:option:`--wait`
Wait for resize to complete
:option:`<server>`
Server (name or ID)
A resize operation is implemented by creating a new server and copying
the contents of the original disk into a new one. It is also a two-step
process for the user: the first is to perform the resize, the second is
to either confirm (verify) success and release the old server, or to declare
a revert to release the new server and restart the old one.
server resume
-------------
Resume server
.. code:: bash
os server resume
<server>
:option:`<server>`
Server (name or ID)
server set
----------
Set server properties
.. code:: bash
os server set
--name <new-name>
--property <key=value>
[--property <key=value>] ...
--root-password
<server>
:option:`--name` <new-name>
New server name
:option:`--root-password`
Set new root password (interactive only)
:option:`--property` <key=value>
Property to add/change for this server (repeat option to set
multiple properties)
:option:`<server>`
Server (name or ID)
server show
-----------
Show server details
.. code:: bash
os server show
[--diagnostics]
<server>
:option:`--diagnostics`
Display server diagnostics information
:option:`<server>`
Server (name or ID)
server ssh
----------
Ssh to server
.. code:: bash
os server ssh
[--login <login-name>]
[--port <port>]
[--identity <keyfile>]
[--option <config-options>]
[--public | --private | --address-type <address-type>]
<server>
:option:`--login` <login-name>
Login name (ssh -l option)
:option:`--port` <port>
Destination port (ssh -p option)
:option:`--identity` <keyfile>
Private key file (ssh -i option)
:option:`--option` <config-options>
Options in ssh_config(5) format (ssh -o option)
:option:`--public`
Use public IP address
:option:`--private`
Use private IP address
:option:`--address-type` <address-type>
Use other IP address (public, private, etc)
:option:`<server>`
Server (name or ID)
server suspend
--------------
Suspend server
.. code:: bash
os server suspend
<server>
:option:`<server>`
Server (name or ID)
server unlock
-------------
Unlock server
.. code:: bash
os server unlock
<server>
:option:`<server>`
Server (name or ID)
server unpause
--------------
Unpause server
.. code:: bash
os server unpause
<server>
:option:`<server>`
Server (name or ID)
server unrescue
---------------
Restore server from rescue mode
.. code:: bash
os server unrescue
<server>
:option:`<server>`
Server (name or ID)
server unset
------------
Unset server properties
.. code:: bash
os server unset
--property <key>
[--property <key>] ...
<server>
:option:`--property` <key>
Property key to remove from server (repeat to set multiple values)
:option:`<server>`
Server (name or ID)

View File

@ -100,7 +100,8 @@ referring to both Compute and Volume quotas.
* ``role``: Identity - a policy object used to determine authorization
* ``security group``: Compute, Network - groups of network access rules
* ``security group rule``: Compute, Network - the individual rules that define protocol/IP/port access
* ``server``: Compute - a virtual machine instance
* ``server``: (**Compute**) virtual machine instance
* ``server image``: (**Compute**) saved server disk image
* ``service``: Identity - a cloud service
* ``snapshot``: Volume - a point-in-time copy of a volume
* ``token``: (**Identity**) a bearer token managed by Identity service

View File

@ -99,6 +99,43 @@ def _show_progress(progress):
sys.stdout.flush()
class AddServerSecurityGroup(command.Command):
"""Add security group to server"""
log = logging.getLogger(__name__ + '.AddServerSecurityGroup')
def get_parser(self, prog_name):
parser = super(AddServerSecurityGroup, self).get_parser(prog_name)
parser.add_argument(
'server',
metavar='<server>',
help=_('Server (name or ID)'),
)
parser.add_argument(
'group',
metavar='<group>',
help=_('Security group to add (name or ID)'),
)
return parser
def take_action(self, parsed_args):
self.log.debug("take_action(%s)", parsed_args)
compute_client = self.app.client_manager.compute
server = utils.find_resource(
compute_client.servers,
parsed_args.server,
)
security_group = utils.find_resource(
compute_client.security_groups,
parsed_args.group,
)
server.add_security_group(security_group.name)
return
class AddServerVolume(command.Command):
"""Add volume to server"""
@ -145,43 +182,6 @@ class AddServerVolume(command.Command):
)
class AddServerSecurityGroup(command.Command):
"""Add security group to server"""
log = logging.getLogger(__name__ + '.AddServerSecurityGroup')
def get_parser(self, prog_name):
parser = super(AddServerSecurityGroup, self).get_parser(prog_name)
parser.add_argument(
'server',
metavar='<server>',
help=_('Name or ID of server to use'),
)
parser.add_argument(
'group',
metavar='<group>',
help=_('Name or ID of security group to add to server'),
)
return parser
def take_action(self, parsed_args):
self.log.debug("take_action(%s)", parsed_args)
compute_client = self.app.client_manager.compute
server = utils.find_resource(
compute_client.servers,
parsed_args.server,
)
security_group = utils.find_resource(
compute_client.security_groups,
parsed_args.group,
)
server.add_security_group(security_group.name)
return
class CreateServer(show.ShowOne):
"""Create a new server"""
@ -192,55 +192,65 @@ class CreateServer(show.ShowOne):
parser.add_argument(
'server_name',
metavar='<server-name>',
help=_('New server name'))
help=_('New server name'),
)
disk_group = parser.add_mutually_exclusive_group(
required=True,
)
disk_group.add_argument(
'--image',
metavar='<image>',
help=_('Create server from this image'))
help=_('Create server from this image'),
)
disk_group.add_argument(
'--volume',
metavar='<volume>',
help=_('Create server from this volume'))
help=_('Create server from this volume'),
)
parser.add_argument(
'--flavor',
metavar='<flavor>',
required=True,
help=_('Create server with this flavor'))
help=_('Create server with this flavor'),
)
parser.add_argument(
'--security-group',
metavar='<security-group-name>',
action='append',
default=[],
help=_('Security group to assign to this server '
'(repeat for multiple groups)'))
'(repeat for multiple groups)'),
)
parser.add_argument(
'--key-name',
metavar='<key-name>',
help=_('Keypair to inject into this server (optional extension)'))
help=_('Keypair to inject into this server (optional extension)'),
)
parser.add_argument(
'--property',
metavar='<key=value>',
action=parseractions.KeyValueAction,
help=_('Set a property on this server '
'(repeat for multiple values)'))
'(repeat for multiple values)'),
)
parser.add_argument(
'--file',
metavar='<dest-filename=source-filename>',
action='append',
default=[],
help=_('File to inject into image before boot '
'(repeat for multiple files)'))
'(repeat for multiple files)'),
)
parser.add_argument(
'--user-data',
metavar='<user-data>',
help=_('User data file to serve from the metadata server'))
help=_('User data file to serve from the metadata server'),
)
parser.add_argument(
'--availability-zone',
metavar='<zone-name>',
help=_('Select an availability zone for the server'))
help=_('Select an availability zone for the server'),
)
parser.add_argument(
'--block-device-mapping',
metavar='<dev-name=mapping>',
@ -248,37 +258,43 @@ class CreateServer(show.ShowOne):
default=[],
help=_('Map block devices; map is '
'<id>:<type>:<size(GB)>:<delete_on_terminate> '
'(optional extension)'))
'(optional extension)'),
)
parser.add_argument(
'--nic',
metavar='<nic-config-string>',
action='append',
default=[],
help=_('Specify NIC configuration (optional extension)'))
help=_('Specify NIC configuration (optional extension)'),
)
parser.add_argument(
'--hint',
metavar='<key=value>',
action='append',
default=[],
help=_('Hints for the scheduler (optional extension)'))
help=_('Hints for the scheduler (optional extension)'),
)
parser.add_argument(
'--config-drive',
metavar='<config-drive-volume>|True',
default=False,
help=_('Use specified volume as the config drive, '
'or \'True\' to use an ephemeral drive'))
'or \'True\' to use an ephemeral drive'),
)
parser.add_argument(
'--min',
metavar='<count>',
type=int,
default=1,
help=_('Minimum number of servers to launch (default=1)'))
help=_('Minimum number of servers to launch (default=1)'),
)
parser.add_argument(
'--max',
metavar='<count>',
type=int,
default=1,
help=_('Maximum number of servers to launch (default=1)'))
help=_('Maximum number of servers to launch (default=1)'),
)
parser.add_argument(
'--wait',
action='store_true',
@ -504,7 +520,8 @@ class DeleteServer(command.Command):
parser.add_argument(
'server',
metavar='<server>',
help=_('Name or ID of server to delete'))
help=_('Server (name or ID)'),
)
return parser
def take_action(self, parsed_args):
@ -526,50 +543,61 @@ class ListServer(lister.Lister):
parser.add_argument(
'--reservation-id',
metavar='<reservation-id>',
help=_('Only return instances that match the reservation'))
help=_('Only return instances that match the reservation'),
)
parser.add_argument(
'--ip',
metavar='<ip-address-regex>',
help=_('Regular expression to match IP addresses'))
help=_('Regular expression to match IP addresses'),
)
parser.add_argument(
'--ip6',
metavar='<ip-address-regex>',
help=_('Regular expression to match IPv6 addresses'))
help=_('Regular expression to match IPv6 addresses'),
)
parser.add_argument(
'--name',
metavar='<name>',
help=_('Regular expression to match names'))
metavar='<name-regex>',
help=_('Regular expression to match names'),
)
parser.add_argument(
'--instance-name',
metavar='<server-name>',
help=_('Regular expression to match instance name (admin only)'),
)
parser.add_argument(
'--status',
metavar='<status>',
# FIXME(dhellmann): Add choices?
help=_('Search by server status'))
help=_('Search by server status'),
)
parser.add_argument(
'--flavor',
metavar='<flavor>',
help=_('Search by flavor ID'))
help=_('Search by flavor'),
)
parser.add_argument(
'--image',
metavar='<image>',
help=_('Search by image ID'))
help=_('Search by image'),
)
parser.add_argument(
'--host',
metavar='<hostname>',
help=_('Search by hostname'))
parser.add_argument(
'--instance-name',
metavar='<server-name>',
help=_('Regular expression to match instance name (admin only)'))
help=_('Search by hostname'),
)
parser.add_argument(
'--all-projects',
action='store_true',
default=bool(int(os.environ.get("ALL_PROJECTS", 0))),
help=_('Include all projects (admin only)'))
help=_('Include all projects (admin only)'),
)
parser.add_argument(
'--long',
action='store_true',
default=False,
help=_('List additional fields in output'))
help=_('List additional fields in output'),
)
return parser
def take_action(self, parsed_args):
@ -672,12 +700,7 @@ class MigrateServer(command.Command):
parser.add_argument(
'server',
metavar='<server>',
help=_('Server to migrate (name or ID)'),
)
parser.add_argument(
'--wait',
action='store_true',
help=_('Wait for resize to complete'),
help=_('Server (name or ID)'),
)
parser.add_argument(
'--live',
@ -699,6 +722,12 @@ class MigrateServer(command.Command):
help=_('Perform a block live migration'),
)
disk_group = parser.add_mutually_exclusive_group()
disk_group.add_argument(
'--disk-overcommit',
action='store_true',
default=False,
help=_('Allow disk over-commit on the destination host'),
)
disk_group.add_argument(
'--no-disk-overcommit',
dest='disk_overcommit',
@ -707,11 +736,10 @@ class MigrateServer(command.Command):
help=_('Do not over-commit disk on the'
' destination host (default)'),
)
disk_group.add_argument(
'--disk-overcommit',
parser.add_argument(
'--wait',
action='store_true',
default=False,
help=_('Allow disk over-commit on the destination host'),
help=_('Wait for resize to complete'),
)
return parser
@ -1140,13 +1168,13 @@ class ShowServer(show.ShowOne):
parser.add_argument(
'server',
metavar='<server>',
help=_('Server to show (name or ID)'),
help=_('Server (name or ID)'),
)
parser.add_argument(
'--diagnostics',
action='store_true',
default=False,
help=_('Display diagnostics information for a given server'),
help=_('Display server diagnostics information'),
)
return parser
@ -1439,7 +1467,7 @@ class UnsetServer(command.Command):
action='append',
default=[],
help=_('Property key to remove from server '
'(repeat to set multiple values)'),
'(repeat to unset multiple values)'),
)
return parser