def getTemplatePath(self): kkdir = PathFinder.find_kolla_kubernetes_dir() path = os.path.join(kkdir, self.getTemplate()) assert os.path.exists(path) return path
def GetJinjaDict(service_name=None, cli_args={}, debug_regex=None): # check the cache first cache_key = ((service_name if service_name is not None else "None") + str(cli_args) + (debug_regex if debug_regex is not None else "None")) if cache_key in KollaKubernetesResources._jinja_dict_cache: return KollaKubernetesResources._jinja_dict_cache[cache_key] # Apply basic variables that aren't defined in any config file jvars = {'node_config_directory': '', 'timestamp': str(time.time())} # Add the cli args to the template vars, to be fed into templates jvars["kolla_kubernetes"] = { "cli": { "args": YamlUtils.yaml_dict_normalize(cli_args) } } # Create the prioritized list of config files that need to be # merged. Search method for config files: locks onto the first # path where the file exists. Search method for template files: # locks onto the first path that exists, and then expects the file # to be there. kolla_k8s_dir = PathFinder.find_kolla_kubernetes_dir() files = [ PathFinder.find_config_file('kolla-kubernetes.yml'), PathFinder.find_config_file('globals.yml'), PathFinder.find_config_file('passwords.yml'), os.path.join(kolla_k8s_dir, 'ansible/group_vars/all.yml') ] if service_name is not None: ansible_roles_dir = os.path.join(kolla_k8s_dir, 'ansible/roles') service_ansible_file = os.path.join(ansible_roles_dir, service_name, 'defaults/main.yml') if os.path.exists(service_ansible_file): files.append(service_ansible_file) files.append( os.path.join(kolla_k8s_dir, 'ansible/roles/common/defaults/main.yml')) # FIXME I think we need a way to add aditional roles to services # in the service_resources.yaml. files.append( os.path.join(kolla_k8s_dir, 'ansible/roles/neutron/defaults/main.yml')) # Create the config dict x = JinjaUtils.merge_configs_to_dict(reversed(files), jvars, debug_regex) # Render values containing nested jinja variables r = JinjaUtils.dict_self_render(x) # Add a self referential link so templates can look up things by name. r['global'] = r # Fix up hostlabels so that they are always strings. Kubernetes # expects this. for (key, value) in r.items(): if key.startswith('kolla_kubernetes_hostlabel_'): value['value'] = "'%s'" % value['value'].replace("'", "''") if os.environ.get('KOLLA_KUBERNETES_TOX', None): r['kolla_kubernetes_namespace'] = 'not_real_namespace' # Update the cache KollaKubernetesResources._jinja_dict_cache[cache_key] = r return r