Files
python-fuelclient/fuelclient/commands/environment.py
Vitalii Myhal 820c7c488f Introduced command 'env redeploy' in v2 version of fuelclient
Example: `fuel2 env redeploy <env_id>`

Fixed deployment tests.
Fuel-web repo has been changed from 'stackforge' to 'openstack'.

Partial-Bug: 1540558
Change-Id: I6bc18ff672bc119c523841033fde4bbacb9290fd
Depends-On: Ibc89fdbfbd0a36a890412cd8e861d35bcf930690
2016-03-27 21:28:43 -05:00

252 lines
8.2 KiB
Python

# Copyright 2015 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from cliff import show
from fuelclient.commands import base
from fuelclient.common import data_utils
class EnvMixIn(object):
entity_name = 'environment'
class EnvList(EnvMixIn, base.BaseListCommand):
"""Show list of all available environments."""
columns = ("id",
"status",
"name",
"release_id")
class EnvShow(EnvMixIn, base.BaseShowCommand):
"""Show info about environment with given id."""
columns = ("id",
"status",
"fuel_version",
"name",
"release_id",
"is_customized",
"changes")
class EnvCreate(EnvMixIn, base.BaseShowCommand):
"""Creates environment with given attributes."""
columns = EnvShow.columns
def get_parser(self, prog_name):
# Avoid adding id argument by BaseShowCommand
parser = show.ShowOne.get_parser(self, prog_name)
parser.add_argument(
'name',
type=str,
help='Name of the new environment'
)
parser.add_argument('-r',
'--release',
type=int,
required=True,
help='Id of the release for which will '
'be deployed')
parser.add_argument('-nst',
'--net-segmentation-type',
type=str,
choices=['vlan', 'gre', 'tun'],
dest='nst',
default='vlan',
help='Network segmentation type.\n'
'WARNING: GRE network segmentation type '
'is deprecated since 7.0 release.')
return parser
def take_action(self, parsed_args):
if parsed_args.nst == 'gre':
self.app.stderr.write('WARNING: GRE network segmentation type is '
'deprecated since 7.0 release')
new_env = self.client.create(name=parsed_args.name,
release_id=parsed_args.release,
net_segment_type=parsed_args.nst)
new_env = data_utils.get_display_data_single(self.columns, new_env)
return (self.columns, new_env)
class EnvDelete(EnvMixIn, base.BaseDeleteCommand):
"""Delete environment with given id."""
def get_parser(self, prog_name):
parser = super(EnvDelete, self).get_parser(prog_name)
parser.add_argument('-f',
'--force',
action='store_true',
help='Force-delete the environment.')
return parser
def take_action(self, parsed_args):
env = self.client.get_by_id(parsed_args.id)
if env['status'] == 'operational' and not parsed_args.force:
self.app.stdout.write("Deleting an operational environment is a "
"dangerous operation.\n"
"Please use --force to bypass this message.")
return
return super(EnvDelete, self).take_action(parsed_args)
class EnvUpdate(EnvMixIn, base.BaseShowCommand):
"""Change given attributes for an environment."""
columns = EnvShow.columns
def get_parser(self, prog_name):
# Avoid adding id argument by BaseShowCommand
parser = show.ShowOne.get_parser(self, prog_name)
parser.add_argument('id',
type=int,
help='Id of the nailgun entity to be processed.')
parser.add_argument('-n',
'--name',
type=str,
dest='name',
default=None,
help='New name for environment')
return parser
def take_action(self, parsed_args):
updates = {}
for attr in self.client._updatable_attributes:
if getattr(parsed_args, attr, None):
updates[attr] = getattr(parsed_args, attr)
updated_env = self.client.update(environment_id=parsed_args.id,
**updates)
updated_env = data_utils.get_display_data_single(self.columns,
updated_env)
return (self.columns, updated_env)
class EnvAddNodes(EnvMixIn, base.BaseCommand):
"""Adds nodes to an environment with the specified roles."""
def get_parser(self, prog_name):
parser = super(EnvAddNodes, self).get_parser(prog_name)
parser.add_argument('-e',
'--env',
type=int,
required=True,
help='Id of the environment to add nodes to')
parser.add_argument('-n',
'--nodes',
type=int,
nargs='+',
required=True,
help='Ids of the nodes to add.')
parser.add_argument('-r',
'--roles',
type=str,
nargs='+',
required=True,
help='Target roles of the nodes.')
return parser
def take_action(self, parsed_args):
env_id = parsed_args.env
self.client.add_nodes(environment_id=env_id,
nodes=parsed_args.nodes,
roles=parsed_args.roles)
msg = 'Nodes {n} were added to the environment {e} with roles {r}\n'
self.app.stdout.write(msg.format(n=parsed_args.nodes,
e=parsed_args.env,
r=parsed_args.roles))
class EnvDeploy(EnvMixIn, base.BaseCommand):
"""Deploys changes on the specified environment."""
def get_parser(self, prog_name):
parser = super(EnvDeploy, self).get_parser(prog_name)
parser.add_argument('id',
type=int,
help='Id of the environment to be deployed.')
return parser
def take_action(self, parsed_args):
task_id = self.client.deploy_changes(parsed_args.id)
msg = 'Deployment task with id {t} for the environment {e} '\
'has been started.\n'.format(t=task_id, e=parsed_args.id)
self.app.stdout.write(msg)
class EnvRedeploy(EnvMixIn, base.BaseCommand):
"""Redeploys changes on the specified environment."""
def get_parser(self, prog_name):
parser = super(EnvRedeploy, self).get_parser(prog_name)
parser.add_argument('id',
type=int,
help='Id of the environment to be redeployed.')
return parser
def take_action(self, parsed_args):
task_id = self.client.redeploy_changes(parsed_args.id)
msg = 'Deployment task with id {t} for the environment {e} '\
'has been started.\n'.format(t=task_id, e=parsed_args.id)
self.app.stdout.write(msg)
class EnvSpawnVms(EnvMixIn, base.BaseCommand):
"""Provision specified environment."""
def get_parser(self, prog_name):
parser = super(EnvSpawnVms, self).get_parser(prog_name)
parser.add_argument('id',
type=int,
help='Id of the environment to be provision.')
return parser
def take_action(self, parsed_args):
return self.client.spawn_vms(parsed_args.id)