from bundlewrap.utils.ui import io from bundlewrap.utils.scm import get_rev from bundlewrap.utils.text import red, bold @node_attribute def needs_apply(node): if node.dummy: return False if node.os not in node.OS_FAMILY_UNIX: return True try: applied = node.run( 'cat /var/lib/bundlewrap/last_apply_commit_id', may_fail=True, ).stdout.decode().strip() if not applied or applied != get_rev(): return True except Exception as e: io.stderr(f'{red("!!!")} {bold(node.name)} {e!r}') return False @node_attribute def uses_bw_managed_ssl(node): if not node.has_bundle('nginx'): return False for vhost in node.metadata.get('nginx/vhosts', {}).values(): if vhost['ssl'] not in (None, False, 'letsencrypt'): return True return False