For the timer:
[Unit]
Description=Do something daily
[Timer]
OnCalendar=daily
Persistent=true
[Install]
def format_list(list_, pattern): | |
return [pattern % s for s in list_] | |
class FilterModule(object): | |
def filters(self): | |
return { | |
'format_list': format_list, | |
} |
--- | |
- name: test | |
hosts: localhost | |
connection: local | |
gather_facts: False | |
tasks: | |
# Test each key in a hash for existence, works fine ... I'll accept doing this! | |
- name: do something based on the existence of nested dict key nested.config.hash.key | |
debug: msg="{{ nested.config.hash.key }}" |
import collections | |
def dict_merge(dct, merge_dct): | |
""" Recursive dict merge. Inspired by :meth:``dict.update()``, instead of | |
updating only top-level keys, dict_merge recurses down into dicts nested | |
to an arbitrary depth, updating keys. The ``merge_dct`` is merged into | |
``dct``. | |
:param dct: dict onto which the merge is executed | |
:param merge_dct: dct merged into dct |
osadmin () | |
{ | |
source <(tpass show "openstack/$1/admin") | |
} | |
osuser () | |
{ | |
source <(tpass show "$(whoami)/openstack/$1") | |
} |
For the timer:
[Unit]
Description=Do something daily
[Timer]
OnCalendar=daily
Persistent=true
[Install]
John Rauser
Alice Goldfuss
Bryan Liles
tcli <module> <verb> | |
tcli <module> <subject> <verb> | |
tcli os login # show credentials and project | |
tcli os login <name> # use a predefined cloud config | |
tcli os compute list | |
tcli os compute list --enabled | |
tcli os compute list --disabled | |
tcli os compute enable x |
openstack group create --domain Default --description "All authenticated users are mapped to nologin which has no role grants" nologin | |
mapping_rules: | |
# Always map user name field to OIDC-email | |
- local: | |
- user: | |
name: "{0}" | |
remote: | |
- type: OIDC-email | |
# All authenticated users are mapped to nologin which has no role grants |