in modular.py [0:0]
def init():
"""
Separate init for docker container. This method just skips if necessary
items already exist. So, 1 exit code will be only if something really fails
:return:
"""
# TODO maybe some to click
from modular_api.helpers.password_util import generate_password, secure_string
from modular_api.services import SERVICE_PROVIDER as SP
policy = SP.policy_service.describe_policy('admin_policy')
if not policy:
_LOG.info('admin policy does not exist. Creating')
policy = SP.policy_service.create_policy_entity(
policy_name='admin_policy',
policy_content=[{
"Description": "Admin policy",
"Module": "*",
"Effect": "Allow",
"Resources": ["*"]
}]
)
policy.hash = SP.policy_service.calculate_policy_hash(
policy_item=policy
)
SP.policy_service.save_policy(policy_item=policy)
else:
_LOG.info('admin policy already exists. Skipping')
group = SP.group_service.describe_group('admin_group')
if not group:
_LOG.info('admin group does not exist. Creating')
group = SP.group_service.create_group_entity(
group_name='admin_group',
policies=['admin_policy']
)
group.hash = SP.group_service.calculate_group_hash(
group_item=group
)
SP.group_service.save_group(group_item=group)
else:
_LOG.info('admin group already exists. Skipping')
user = SP.user_service.describe_user('admin')
if not user:
_LOG.info('admin user does not exist. Creating')
user_password = os.getenv('MODULAR_API_INIT_PASSWORD')
if user_password:
is_autogenerated = False
else:
user_password = generate_password()
is_autogenerated = True
user = SP.user_service.create_user_entity(
username='admin',
password=secure_string(user_password),
group=['admin_group']
)
user.hash = SP.user_service.calculate_user_hash(user)
SP.user_service.save_user(user_item=user)
if is_autogenerated:
print(f'Autogenerated password: {user_password}')
else:
_LOG.info('admin user already exists. Skipping')
_LOG.debug('Initialization finished')