summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDean Troyer <dtroyer@gmail.com>2014-11-17 21:56:18 -0600
committerDean Troyer <dtroyer@gmail.com>2014-12-03 13:34:44 -0600
commitac4950b46e65e5b3e4a98a0b0ce2a2c80747b3e8 (patch)
treeb8a64f12d2d25f035d4a76712ee7d725f3a720d3
parentcc54f989ec53efdf61563d3682ea787c49c21410 (diff)
downloadpython-openstackclient-ac4950b46e65e5b3e4a98a0b0ce2a2c80747b3e8.tar.gz
Command object docs: server, server image
server server image Some cosmetic changes in the command source, sorting classes, help strings, etc. Change-Id: I3f68dae77b9fe02bc6866684e05aeff943dd9cc3
-rw-r--r--doc/source/command-objects/server-image.rst27
-rw-r--r--doc/source/command-objects/server.rst544
-rw-r--r--doc/source/commands.rst3
-rw-r--r--openstackclient/compute/v2/server.py186
4 files changed, 680 insertions, 80 deletions
diff --git a/doc/source/command-objects/server-image.rst b/doc/source/command-objects/server-image.rst
new file mode 100644
index 00000000..681f6e4f
--- /dev/null
+++ b/doc/source/command-objects/server-image.rst
@@ -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)
diff --git a/doc/source/command-objects/server.rst b/doc/source/command-objects/server.rst
new file mode 100644
index 00000000..4f076329
--- /dev/null
+++ b/doc/source/command-objects/server.rst
@@ -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)
diff --git a/doc/source/commands.rst b/doc/source/commands.rst
index 250a8039..7b38134e 100644
--- a/doc/source/commands.rst
+++ b/doc/source/commands.rst
@@ -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
diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py
index d58df86c..5ab1d5f3 100644
--- a/openstackclient/compute/v2/server.py
+++ b/openstackclient/compute/v2/server.py
@@ -99,27 +99,22 @@ def _show_progress(progress):
sys.stdout.flush()
-class AddServerVolume(command.Command):
- """Add volume to server"""
+class AddServerSecurityGroup(command.Command):
+ """Add security group to server"""
- log = logging.getLogger(__name__ + '.AddServerVolume')
+ log = logging.getLogger(__name__ + '.AddServerSecurityGroup')
def get_parser(self, prog_name):
- parser = super(AddServerVolume, self).get_parser(prog_name)
+ parser = super(AddServerSecurityGroup, self).get_parser(prog_name)
parser.add_argument(
'server',
metavar='<server>',
help=_('Server (name or ID)'),
)
parser.add_argument(
- 'volume',
- metavar='<volume>',
- help=_('Volume to add (name or ID)'),
- )
- parser.add_argument(
- '--device',
- metavar='<device>',
- help=_('Server internal device name for volume'),
+ 'group',
+ metavar='<group>',
+ help=_('Security group to add (name or ID)'),
)
return parser
@@ -127,40 +122,41 @@ class AddServerVolume(command.Command):
self.log.debug("take_action(%s)", parsed_args)
compute_client = self.app.client_manager.compute
- volume_client = self.app.client_manager.volume
server = utils.find_resource(
compute_client.servers,
parsed_args.server,
)
- volume = utils.find_resource(
- volume_client.volumes,
- parsed_args.volume,
+ security_group = utils.find_resource(
+ compute_client.security_groups,
+ parsed_args.group,
)
- compute_client.volumes.create_server_volume(
- server.id,
- volume.id,
- parsed_args.device,
- )
+ server.add_security_group(security_group.name)
+ return
-class AddServerSecurityGroup(command.Command):
- """Add security group to server"""
+class AddServerVolume(command.Command):
+ """Add volume to server"""
- log = logging.getLogger(__name__ + '.AddServerSecurityGroup')
+ log = logging.getLogger(__name__ + '.AddServerVolume')
def get_parser(self, prog_name):
- parser = super(AddServerSecurityGroup, self).get_parser(prog_name)
+ parser = super(AddServerVolume, self).get_parser(prog_name)
parser.add_argument(
'server',
metavar='<server>',
- help=_('Name or ID of server to use'),
+ help=_('Server (name or ID)'),
)
parser.add_argument(
- 'group',
- metavar='<group>',
- help=_('Name or ID of security group to add to server'),
+ 'volume',
+ metavar='<volume>',
+ help=_('Volume to add (name or ID)'),
+ )
+ parser.add_argument(
+ '--device',
+ metavar='<device>',
+ help=_('Server internal device name for volume'),
)
return parser
@@ -168,18 +164,22 @@ class AddServerSecurityGroup(command.Command):
self.log.debug("take_action(%s)", parsed_args)
compute_client = self.app.client_manager.compute
+ volume_client = self.app.client_manager.volume
server = utils.find_resource(
compute_client.servers,
parsed_args.server,
)
- security_group = utils.find_resource(
- compute_client.security_groups,
- parsed_args.group,
+ volume = utils.find_resource(
+ volume_client.volumes,
+ parsed_args.volume,
)
- server.add_security_group(security_group.name)
- return
+ compute_client.volumes.create_server_volume(
+ server.id,
+ volume.id,
+ parsed_args.device,
+ )
class CreateServer(show.ShowOne):
@@ -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',
@@ -700,6 +723,12 @@ class MigrateServer(command.Command):
)
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',
action='store_false',
@@ -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