183 lines
4.9 KiB
Python
183 lines
4.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
#
|
|
# Copyright 2016 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 fuelclient.commands import base
|
|
|
|
|
|
class VipMixIn(object):
|
|
entity_name = 'vip'
|
|
|
|
@staticmethod
|
|
def add_env_id_arg(parser):
|
|
parser.add_argument(
|
|
'-e',
|
|
'--env',
|
|
type=int,
|
|
required=True,
|
|
help='Environment identifier'
|
|
)
|
|
|
|
@staticmethod
|
|
def add_network_id_arg(parser):
|
|
parser.add_argument(
|
|
"-n",
|
|
"--network",
|
|
type=int,
|
|
default=None,
|
|
required=False,
|
|
help="Network identifier"
|
|
)
|
|
|
|
|
|
class VipDownload(VipMixIn, base.BaseCommand):
|
|
"""Download VIPs configuration."""
|
|
|
|
@staticmethod
|
|
def add_ip_address_id_arg(parser):
|
|
parser.add_argument(
|
|
"-a",
|
|
"--ip-address-id",
|
|
type=int,
|
|
default=None,
|
|
required=False,
|
|
help="IP address entity identifier"
|
|
)
|
|
|
|
@staticmethod
|
|
def add_network_role_arg(parser):
|
|
parser.add_argument(
|
|
"-r",
|
|
"--network-role",
|
|
type=str,
|
|
default=None,
|
|
required=False,
|
|
help="Network role string"
|
|
)
|
|
|
|
@staticmethod
|
|
def add_file_arg(parser):
|
|
parser.add_argument(
|
|
'-f',
|
|
'--file',
|
|
type=str,
|
|
required=False,
|
|
default=None,
|
|
help='YAML file that contains openstack configuration.'
|
|
)
|
|
|
|
def get_parser(self, prog_name):
|
|
parser = super(VipDownload, self).get_parser(prog_name)
|
|
self.add_env_id_arg(parser)
|
|
self.add_ip_address_id_arg(parser)
|
|
self.add_file_arg(parser)
|
|
self.add_network_id_arg(parser)
|
|
self.add_network_role_arg(parser)
|
|
return parser
|
|
|
|
def take_action(self, args):
|
|
vips_data_file_path = self.client.download(
|
|
env_id=args.env,
|
|
ip_addr_id=args.ip_address_id,
|
|
network_id=args.network,
|
|
network_role=args.network_role,
|
|
file_path=args.file
|
|
)
|
|
|
|
self.app.stdout.write(
|
|
"VIP configuration for environment with id={0}"
|
|
" downloaded to {1}".format(args.env, vips_data_file_path)
|
|
)
|
|
|
|
|
|
class VipUpload(VipMixIn, base.BaseCommand):
|
|
"""Upload new VIPs configuration from file."""
|
|
|
|
@staticmethod
|
|
def add_file_arg(parser):
|
|
parser.add_argument(
|
|
'-f',
|
|
'--file',
|
|
required=True,
|
|
type=str,
|
|
help='YAML file that contains openstack configuration.'
|
|
)
|
|
|
|
def get_parser(self, prog_name):
|
|
parser = super(VipUpload, self).get_parser(prog_name)
|
|
self.add_env_id_arg(parser)
|
|
self.add_file_arg(parser)
|
|
return parser
|
|
|
|
def take_action(self, args):
|
|
self.client.upload(env_id=args.env, file_path=args.file)
|
|
self.app.stdout.write("VIP configuration uploaded.")
|
|
|
|
|
|
class VipCreate(VipMixIn, base.BaseCommand):
|
|
"""Create VIP"""
|
|
|
|
@staticmethod
|
|
def add_vip_name_arg(parser):
|
|
parser.add_argument(
|
|
'-N',
|
|
'--name',
|
|
required=True,
|
|
type=str,
|
|
help="VIP name"
|
|
)
|
|
|
|
@staticmethod
|
|
def add_ip_addr_arg(parser):
|
|
parser.add_argument(
|
|
'-a',
|
|
'--address',
|
|
required=True,
|
|
type=str,
|
|
help="IP-address for the VIP"
|
|
)
|
|
|
|
@staticmethod
|
|
def add_vip_namespace_arg(parser):
|
|
parser.add_argument(
|
|
'--namespace',
|
|
required=False,
|
|
type=str,
|
|
help="VIP namespace"
|
|
)
|
|
|
|
def get_parser(self, prog_name):
|
|
parser = super(VipCreate, self).get_parser(prog_name)
|
|
self.add_env_id_arg(parser)
|
|
self.add_network_id_arg(parser)
|
|
self.add_vip_name_arg(parser)
|
|
self.add_ip_addr_arg(parser)
|
|
self.add_vip_namespace_arg(parser)
|
|
return parser
|
|
|
|
def take_action(self, args):
|
|
vip_kwargs = {
|
|
"env_id": args.env,
|
|
"ip_addr": args.address,
|
|
"network": args.network,
|
|
"vip_name": args.name,
|
|
}
|
|
if args.namespace is not None:
|
|
vip_kwargs['vip_namespace'] = args.namespace
|
|
|
|
self.client.create(**vip_kwargs)
|
|
|
|
self.app.stdout.write("VIP has been created.")
|