Esempio n. 1
0
    def _render(self):

        '''
        create a temporary work directory for creating and caching dynmaically
        generated userdata templates. temp directory and its contents are
        deleted automatically by context manager after cloud template is returned
        '''
        with make_temp_directory() as temp_work_dir:

            # prepare arguments for cloud template
            cloud_template_args = self.get_core_template_args()
            cloud_template_args.update({'user_data': self._preprocess_user_data(temp_work_dir)})

            # render primary template, extending searchpath to temporary dir
            # holding role-based userdata jinja templates
            cloud_template = render_template(
                searchpath=self.get_template_searchpath(extrapath=temp_work_dir),
                source_template=self._get_template_filename(self.template_name, 'jinja2'),
                **cloud_template_args)

            return cloud_template
Esempio n. 2
0
    def _render(self):
        '''
        create a temporary work directory for creating and caching dynmaically
        generated userdata templates. temp directory and its contents are
        deleted automatically by context manager after cloud template is returned
        '''
        with make_temp_directory() as temp_work_dir:

            # prepare arguments for cloud template
            cloud_template_args = self.get_core_template_args()
            cloud_template_args.update(
                {'user_data': self._preprocess_user_data(temp_work_dir)})

            # render primary template, extending searchpath to temporary dir
            # holding role-based userdata jinja templates
            cloud_template = render_template(
                searchpath=self.get_template_searchpath(
                    extrapath=temp_work_dir),
                source_template=self._get_template_filename(
                    self.template_name, 'jinja2'),
                **cloud_template_args)

            return cloud_template
Esempio n. 3
0
def salt_grains_transfer(planet=None, service=None, runtime=None, system=None):

    salt_grain_filename = 'grains'

    # retrieve provision object storage type
    prov_obj_store_type = planet.services['prov-object-store'].get('type')

    result = dict()

    for stack_id in service.deploy.stack_launch_list:
        result[stack_id] = dict()

        for role_name in service.deploy.get_stack_roles(stack_id):

            skybase_id = '-'.join([
                planet.definition['planet'],
                service.metadata['app_name'],
                runtime.tag,
                stack_id,
                role_name,
            ])

            # generate custom salt grains for minion
            minion_grains = {
                'skybase': {
                    'skybase_id': skybase_id,
                    'planet': planet.definition['planet'],
                    'service': service.metadata['app_name'],
                    'tag': runtime.tag,
                    'stack': stack_id,
                    'role': role_name,
                    'version': service.metadata['app_version'],
                    'build': service.metadata['build_id'],
                    'source_artiball': service.metadata['source_artiball'],
                }
            }

            # initialze results container for stack/role
            result[stack_id][role_name] = dict()
            result[stack_id][role_name]['grains'] = minion_grains

            # upload grains to service namespace
            if runtime.apply:

                # create temporary directory and file
                with make_temp_directory() as tdir:

                    with open(os.path.join(tdir, salt_grain_filename),
                              'w') as grains_file:
                        # dump salt grains as YAML file and reset file marker to top
                        grains_file.write(
                            yaml.safe_dump(minion_grains,
                                           default_flow_style=False))
                        grains_file.seek(0)

                        # generate service namespace path to salt folder
                        key_path = '{0}/{1}'.format(
                            get_target_path(planet, service, runtime, stack_id,
                                            role_name), 'salt')

                        # upload grains archive file to provider object store
                        result[stack_id][role_name][
                            'upload_to_object_store'] = upload_to_object_store(
                                obj_store_type=prov_obj_store_type,
                                local_tar_src=grains_file.name,
                                planet=planet,
                                key_path=key_path,
                                archive_file='grains.tar.gz')

    return result
Esempio n. 4
0
def salt_grains_transfer(planet=None, service=None, runtime=None, system=None):

    salt_grain_filename = 'grains'

    # retrieve provision object storage type
    prov_obj_store_type = planet.services['prov-object-store'].get('type')

    result = dict()

    for stack_id in service.deploy.stack_launch_list:
        result[stack_id] = dict()

        for role_name in service.deploy.get_stack_roles(stack_id):

            skybase_id = '-'.join([
                planet.definition['planet'],
                service.metadata['app_name'],
                runtime.tag,
                stack_id,
                role_name,
            ])

            # generate custom salt grains for minion
            minion_grains = {
                'skybase': {
                    'skybase_id': skybase_id,
                    'planet': planet.definition['planet'],
                    'service': service.metadata['app_name'],
                    'tag': runtime.tag,
                    'stack': stack_id,
                    'role': role_name,
                    'version': service.metadata['app_version'],
                    'build': service.metadata['build_id'],
                    'source_artiball': service.metadata['source_artiball'],
                }
            }

            # initialze results container for stack/role
            result[stack_id][role_name] = dict()
            result[stack_id][role_name]['grains'] = minion_grains

            # upload grains to service namespace
            if runtime.apply:

                # create temporary directory and file
                with make_temp_directory() as tdir:

                    with open(os.path.join(tdir, salt_grain_filename), 'w') as grains_file:
                        # dump salt grains as YAML file and reset file marker to top
                        grains_file.write(yaml.safe_dump(minion_grains, default_flow_style=False))
                        grains_file.seek(0)

                        # generate service namespace path to salt folder
                        key_path = '{0}/{1}'.format(
                            get_target_path(planet, service, runtime, stack_id, role_name),
                            'salt'
                        )

                        # upload grains archive file to provider object store
                        result[stack_id][role_name]['upload_to_object_store'] = upload_to_object_store(
                            obj_store_type = prov_obj_store_type,
                            local_tar_src=grains_file.name,
                            planet=planet,
                            key_path=key_path,
                            archive_file='grains.tar.gz')

    return result