186 lines
		
	
	
	
		
			5.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			186 lines
		
	
	
	
		
			5.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from hashlib import sha3_256
 | |
| 
 | |
| defaults = {
 | |
|     'apt': {
 | |
|         'packages': {
 | |
|             'php-ldap': {},
 | |
|             'php-json': {},
 | |
|             'php-intl': {},
 | |
|             'php-xml': {},
 | |
|             'php-gd': {},
 | |
|             'php-imagick': {},
 | |
|             'php-pgsql': {},
 | |
|             'icingaweb2': {},
 | |
|             #'icingaweb2-module-monitoring': {}, # ?
 | |
|         },
 | |
|         'sources': {
 | |
|             'icinga': {
 | |
|                 'types': {
 | |
|                     'deb',
 | |
|                     'deb-src',
 | |
|                 },
 | |
|                 'urls': {
 | |
|                     'https://packages.icinga.com/debian',
 | |
|                 },
 | |
|                 'suites': {
 | |
|                     'icinga-{codename}',
 | |
|                 },
 | |
|                 'components': {
 | |
|                     'main',
 | |
|                 },
 | |
|             },
 | |
|         },
 | |
|     },
 | |
|     'icingaweb2': {
 | |
|         'authentication.ini': {
 | |
|             'icingaweb2': {
 | |
|                 'backend': 'db',
 | |
|                 'resource': 'icingaweb2_db',
 | |
|             },
 | |
|         },
 | |
|         'config.ini': {
 | |
|             'global': {
 | |
|                 'show_stacktraces': '1',
 | |
|                 'show_application_state_messages': '1',
 | |
|                 'module_path': '/usr/share/icingaweb2/modules',
 | |
|                 'config_backend': 'db',
 | |
|                 'config_resource': 'icingaweb2_db',
 | |
|             },
 | |
|             'logging': {
 | |
|                 'log': 'syslog',
 | |
|                 'level': 'INFO',
 | |
|                 'application': 'icingaweb2',
 | |
|                 'facility': 'user',
 | |
|             },
 | |
|         },
 | |
|         'groups.ini': {
 | |
|             'icingaweb2': {
 | |
|                 'backend': 'db',
 | |
|                 'resource': 'icingaweb2_db',
 | |
|             },
 | |
|         },
 | |
|         'resources.ini': {
 | |
|             'icingaweb2_db': {
 | |
|                 'type': 'db',
 | |
|                 'db': 'pgsql',
 | |
|                 'host': 'localhost',
 | |
|                 'port': '5432',
 | |
|                 'dbname': 'icingaweb2',
 | |
|                 'username': 'icingaweb2',
 | |
|                 'password': str(repo.vault.password_for(f'psql icingaweb2 on {node.name}')),
 | |
|                 'charset': '',
 | |
|                 'use_ssl': '0',
 | |
|             },
 | |
|             'icinga_ido': {
 | |
|                 'type': 'db',
 | |
|                 'db': 'pgsql',
 | |
|                 'host': 'localhost',
 | |
|                 'port': '5432',
 | |
|                 'dbname': 'icinga2',
 | |
|                 'username': 'icinga2',
 | |
|                 'charset': '',
 | |
|                 'use_ssl': '0',
 | |
|             },
 | |
|         },
 | |
|         'roles.ini': {
 | |
|             'Administrators': {
 | |
|                 'users': 'root',
 | |
|                 'permissions': '*',
 | |
|                 'groups': 'Administrators',
 | |
|             },
 | |
|         },
 | |
|         'monitoring': {
 | |
|             'config.ini': {
 | |
|                 'security': {
 | |
|                     'protected_customvars': '*pw*,*pass*,community',
 | |
|                 },
 | |
|             },
 | |
|             'backends.ini': {
 | |
|                 'icinga2': {
 | |
|                     'type': 'ido',
 | |
|                     'resource': 'icinga_ido',
 | |
|                 },
 | |
|             },
 | |
|             'commandtransports.ini': {
 | |
|                 'icinga2': {
 | |
|                     'transport': 'api',
 | |
|                     'host': 'localhost',
 | |
|                     'port': '5665',
 | |
|                     'username': 'root',
 | |
|                 },
 | |
|             },
 | |
|         },
 | |
|     },
 | |
|     'postgresql': {
 | |
|         'databases': {
 | |
|             'icingaweb2': {
 | |
|                 'owner': 'icingaweb2',
 | |
|             },
 | |
|         },
 | |
|         'roles': {
 | |
|             'icingaweb2': {
 | |
|                 'password': str(repo.vault.password_for(f'psql icingaweb2 on {node.name}')),
 | |
|             },
 | |
|         },
 | |
|     },
 | |
|     'redis': {
 | |
|         'icingaweb2': {},
 | |
|     },
 | |
| }
 | |
| 
 | |
| 
 | |
| @metadata_reactor.provides(
 | |
|     'icingaweb2/hostname',
 | |
|     'icingaweb2/resources.ini/icinga_ido/password',
 | |
|     'icingaweb2/monitoring/commandtransports.ini/icinga2/password',
 | |
| )
 | |
| def stuff(metadata):
 | |
|     return {
 | |
|         'icingaweb2': {
 | |
|             'hostname': metadata.get('icinga2/hostname'),
 | |
|             'resources.ini': {
 | |
|                 'icinga_ido': {
 | |
|                     'password': str(metadata.get('postgresql/roles/icinga2/password')),
 | |
|                 },
 | |
|             },
 | |
|             'monitoring': {
 | |
|                 'commandtransports.ini': {
 | |
|                     'icinga2': {
 | |
|                         'password': str(metadata.get('icinga2/api_users/root/password')),
 | |
|                     },
 | |
|                 },
 | |
|             },
 | |
|         },
 | |
|     }
 | |
| 
 | |
| 
 | |
| @metadata_reactor.provides(
 | |
|     'icingaweb2/setup_token',
 | |
|     'icingaweb2/root_password',
 | |
| )
 | |
| def setup_token(metadata):
 | |
|     return {
 | |
|         'icingaweb2': {
 | |
|             'setup_token': sha3_256(metadata.get('id').encode()).hexdigest()[:16],
 | |
|             'root_password': str(repo.vault.password_for(f"icingaweb2 root user on {metadata.get('id')}")),
 | |
|         },
 | |
|     }
 | |
| 
 | |
| 
 | |
| @metadata_reactor.provides(
 | |
|     'nginx/vhosts',
 | |
| )
 | |
| def nginx(metadata):
 | |
|     return {
 | |
|         'nginx': {
 | |
|             'vhosts': {
 | |
|                 metadata.get('icingaweb2/hostname'): {
 | |
|                     'content': 'icingaweb2/vhost.conf',
 | |
|                     'context': {
 | |
|                         'php_version': metadata.get('php/version'),
 | |
|                     },
 | |
|                     'check_path': '/icingaweb2/index.php',
 | |
|                 },
 | |
|             },
 | |
|         },
 | |
|     }
 |