import os import shutil from nom import md2html, parsers from jinja2 import FileSystemLoader, environment dir = os.path.dirname(os.path.abspath(__file__)) templ_dir = os.path.join(dir, 'templates') env = environment.Environment() env.loader = FileSystemLoader(templ_dir) def compile_note(note, outdir, stylesheet=None, templ='default', ignore_missing=False): title, _ = os.path.basename(note).rsplit('.', 1) content = open(note, 'r').read() templ = env.get_template('{}.html'.format(templ)) # create output directory if necessary outdir = os.path.join(outdir, title) if not os.path.exists(outdir): os.makedirs(outdir) # create assets directory if necessary assetsdir = os.path.join(outdir, 'assets') if not os.path.exists(assetsdir): os.makedirs(assetsdir) # copy over any local images for img_path in parsers.md_images(content): # assume http indicates remote image if img_path.startswith('http'):
def runner_on_ok(self, host, res): if (C.CACHE_PLUGIN_CONNECTION is None or os.getenv("ANSIBLE_PERSIST_VARIABLES_DISABLE") is not None): return if self.task: if self.task.register and self.task.register == "hlm_notify_set_persistent_facts_to_false": # Get hlm_notify variables from SETUP_CACHE and set changed to False update_dict = {} prefix_to_set_false = HLM_PREFIX if 'hlm_notify_set_false_prefix' in self.playbook.VARS_CACHE[ host].keys(): prefix = self.playbook.VARS_CACHE[host].pop( 'hlm_notify_set_false_prefix') prefix_to_set_false = prefix if prefix.startswith( HLM_PREFIX) else HLM_PREFIX for key in self.playbook.SETUP_CACHE[host].keys(): if key.startswith(prefix_to_set_false ) and not key.endswith(".deleted"): new_state = deepcopy( self.playbook.SETUP_CACHE[host][key]) if new_state.get("changed", True): new_state["changed"] = False update_dict[key] = new_state if update_dict: res.update(update_dict) self._update_hash(res, "ansible_facts", update_dict) elif self.task.register and self.task.register.startswith( HLM_PREFIX): my_host = self._get_target_host(host) if res.get('changed'): # save the facts immediately in case there is an exception elsewhere self._update_hash(self.playbook.SETUP_CACHE, my_host, {self.task.register: res}) if my_host == host: # return a copy of the result data for ansible to save as well when # it writes down facts after the task is complete on all hosts result = { k: v for k, v in res.items() if k != 'ansible_facts' } self._update_hash(res, 'ansible_facts', {self.task.register: result}) else: previous_state = self.playbook.SETUP_CACHE[my_host].get( self.task.register, None) if previous_state: res.update(previous_state) result = { k: v for k, v in res.items() if k != 'ansible_facts' } self._update_hash(res, 'ansible_facts', {self.task.register: result}) if self.task.when: if isinstance(self.task.when, list): when = None for elem in self.task.when: if HLM_PREFIX in elem: when = elem else: when = self.task.when if HLM_PREFIX in self.task.when else None if when: # Mark saved variable for removal from persistent cache at end of run # if check is "is defined" my_host = self._get_target_host(host) envir = environment.Environment() when = when.replace('{{', '') when = when.replace('}}', '') parse = parser.Parser(envir, when, state='variable') expr = parse.parse_expression() deleted_keys = {} for key in search_node(expr): deleted_keys["%s.deleted" % key] = True self._update_hash(res, 'ansible_facts', deleted_keys) # If delegating task, mark persisted facts for deletion on node to which # you're delegating if my_host != host: self._update_hash(self.playbook.SETUP_CACHE, my_host, deleted_keys)