Break deployment procedure into two steps
Step 1: setup configmaps and run bootstrap jobs Step 2: run service Partially-implements: blueprint kolla-kubernetes-cli Co-authored-by: Ryan Hallisey <rhallise@redhat.com> Change-Id: Ie074f21984ac89291e11e7b4798f3a18a8cc200e
This commit is contained in:
parent
b24d7f0e93
commit
1b65bc4a5d
@ -21,6 +21,18 @@ CONF = cfg.CONF
|
||||
LOG = log.getLogger(__name__)
|
||||
|
||||
|
||||
class Bootstrap(command.Command):
|
||||
"""Rolling out configurations and bootstrap a service."""
|
||||
|
||||
def get_parser(self, prog_name):
|
||||
parser = super(Bootstrap, self).get_parser(prog_name)
|
||||
parser.add_argument('service')
|
||||
return parser
|
||||
|
||||
def take_action(self, parsed_args):
|
||||
service.bootstrap_service(parsed_args.service)
|
||||
|
||||
|
||||
class Run(command.Command):
|
||||
"""Run a service."""
|
||||
|
||||
|
@ -34,11 +34,12 @@ PROJECT_ROOT = os.path.abspath(os.path.join(
|
||||
os.path.dirname(os.path.realpath(__file__)), '../..'))
|
||||
|
||||
|
||||
def _create_working_directory():
|
||||
def _create_working_directory(target='services'):
|
||||
ts = time.time()
|
||||
ts = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d_%H-%M-%S_')
|
||||
temp_dir = tempfile.mkdtemp(prefix='kolla-' + ts)
|
||||
working_dir = os.path.join(temp_dir, 'kubernetes')
|
||||
working_dir = os.path.join(working_dir, target)
|
||||
os.makedirs(working_dir)
|
||||
return working_dir
|
||||
|
||||
@ -108,6 +109,23 @@ def _load_variables_from_file(project_name):
|
||||
return jvars
|
||||
|
||||
|
||||
def _build_bootstrap(working_dir, service_name, variables=None):
|
||||
for filename in service_definition.find_bootstrap_files(service_name):
|
||||
proj_filename = filename.split('/')[-1].replace('.j2', '')
|
||||
proj_name = filename.split('/')[-2]
|
||||
LOG.debug(
|
||||
'proj_filename : %s proj_name: %s' % (proj_filename, proj_name))
|
||||
|
||||
variables = _load_variables_from_file(proj_name)
|
||||
|
||||
content = yaml.load(
|
||||
jinja_utils.jinja_render(filename, variables))
|
||||
with open(os.path.join(working_dir, proj_filename), 'w') as f:
|
||||
LOG.debug('_build_bootstrap : file : %s' %
|
||||
os.path.join(working_dir, proj_filename))
|
||||
f.write(yaml.dump(content, default_flow_style=False))
|
||||
|
||||
|
||||
def _build_runner(working_dir, service_name, pod_list, variables=None):
|
||||
for filename in service_definition.find_service_files(service_name):
|
||||
proj_filename = filename.split('/')[-1].replace('.j2', '')
|
||||
@ -125,6 +143,12 @@ def _build_runner(working_dir, service_name, pod_list, variables=None):
|
||||
f.write(yaml.dump(content, default_flow_style=False))
|
||||
|
||||
|
||||
def bootstrap_service(service_name, variables=None):
|
||||
working_dir = _create_working_directory('bootstrap')
|
||||
_build_bootstrap(working_dir, service_name, variables=variables)
|
||||
_bootstrap_instance(working_dir, service_name)
|
||||
|
||||
|
||||
def run_service(service_name, variables=None):
|
||||
working_dir = _create_working_directory()
|
||||
pod_list = service_definition.get_pod_definition(service_name)
|
||||
@ -136,12 +160,13 @@ def kill_service(service_name, variables=None):
|
||||
working_dir = _create_working_directory()
|
||||
pod_list = service_definition.get_pod_definition(service_name)
|
||||
_build_runner(working_dir, service_name, pod_list, variables=variables)
|
||||
_build_bootstrap(working_dir, service_name, variables=variables)
|
||||
_delete_instance(working_dir, service_name, pod_list)
|
||||
|
||||
|
||||
def _deploy_instance(directory, service_name, pod_list):
|
||||
def _bootstrap_instance(directory, service_name):
|
||||
server = "--server=" + CONF.kolla_kubernetes.host
|
||||
|
||||
pod_list = service_definition.get_pod_definition(service_name)
|
||||
for pod in pod_list:
|
||||
container_list = service_definition.get_container_definition(pod)
|
||||
for container in container_list:
|
||||
@ -151,6 +176,31 @@ def _deploy_instance(directory, service_name, pod_list):
|
||||
for f in
|
||||
file_utils.get_service_config_files(container)]
|
||||
|
||||
# TODO(rhallisey): improve error handling to check if configmap
|
||||
# already exists
|
||||
LOG.info('Command : %r' % cmd)
|
||||
subprocess.call(cmd)
|
||||
|
||||
cmd = [CONF.kolla_kubernetes.kubectl_path, server, "create", "-f",
|
||||
directory]
|
||||
LOG.info('Command : %r' % cmd)
|
||||
subprocess.call(cmd)
|
||||
|
||||
|
||||
def _deploy_instance(directory, service_name, pod_list):
|
||||
server = "--server=" + CONF.kolla_kubernetes.host
|
||||
pod_list = service_definition.get_pod_definition(service_name)
|
||||
for pod in pod_list:
|
||||
container_list = service_definition.get_container_definition(pod)
|
||||
for container in container_list:
|
||||
cmd = [CONF.kolla_kubernetes.kubectl_path, server, "create",
|
||||
"configmap", '%s-configmap' % container]
|
||||
cmd = cmd + ['--from-file=%s' % f
|
||||
for f in
|
||||
file_utils.get_service_config_files(container)]
|
||||
|
||||
# TODO(rhallisey): improve error handling to check if configmap
|
||||
# already exists
|
||||
LOG.info('Command : %r' % cmd)
|
||||
subprocess.call(cmd)
|
||||
|
||||
|
@ -90,6 +90,22 @@ def get_services_directory():
|
||||
os.path.join(file_utils.find_base_dir(), 'services'))
|
||||
|
||||
|
||||
def find_bootstrap_files(service_name):
|
||||
bootstrap_dir = os.path.join(get_services_directory(), '../bootstrap/')
|
||||
LOG.debug('Looking for bootstrap files in %s', bootstrap_dir)
|
||||
if not os.path.exists(bootstrap_dir):
|
||||
LOG.info('No bootstrap job for service %s', service_name)
|
||||
return []
|
||||
|
||||
short_name = service_name.split('/')[-1]
|
||||
files = []
|
||||
for root, dirs, names in os.walk(bootstrap_dir):
|
||||
for name in names:
|
||||
if short_name in name:
|
||||
files.append(os.path.join(root, name))
|
||||
return files
|
||||
|
||||
|
||||
def find_service_files(service_name):
|
||||
service_dir = get_services_directory()
|
||||
LOG.debug('Looking for services files in %s', service_dir)
|
||||
@ -98,12 +114,6 @@ def find_service_files(service_name):
|
||||
raise exception.KollaNotFoundException(service_dir,
|
||||
entity='service directory')
|
||||
|
||||
bootstrap_dir = os.path.join(service_dir, '../bootstrap/')
|
||||
LOG.debug('Looking for bootstrap files in %s', service_dir)
|
||||
if not os.path.exists(bootstrap_dir):
|
||||
raise exception.KollaNotFoundException(bootstrap_dir,
|
||||
entity='bootstrap directory')
|
||||
|
||||
short_name = service_name.split('/')[-1]
|
||||
files = []
|
||||
for root, dirs, names in os.walk(service_dir):
|
||||
@ -111,11 +121,6 @@ def find_service_files(service_name):
|
||||
if short_name in name:
|
||||
files.append(os.path.join(root, name))
|
||||
|
||||
for root, dirs, names in os.walk(bootstrap_dir):
|
||||
for name in names:
|
||||
if short_name in name:
|
||||
files.append(os.path.join(root, name))
|
||||
|
||||
if not files:
|
||||
raise exception.KollaNotFoundException(service_dir,
|
||||
entity='service definition')
|
||||
|
Loading…
Reference in New Issue
Block a user