def execute(self, properties, arguments): """ Create a new database instance for the initial version :type properties: system.Properties.Properties :param properties: The project properties :type arguments: dict :param arguments: This dict contains the plugin arguments: * **host**: The hostname where the database will run; * **database**: The database to create in (optional); * **environment** (optional): The environment to create the database in; * **alias** (optional): The database alias. If provided, this will overrule the database argument. """ prepared_args = self._validate_and_prepare(properties, arguments) #: Some comment host = prepared_args['host'] environment = prepared_args['environment'] databases = prepared_args['databases'] database_aliases = properties.get('database_aliases') objects = properties.get('create_objects') # retrieve the user credentials for this database project. users = properties.get('mysql_users') # try to retrieve the users from the credentials file, when no users are configured in # myproject.json. if not users: # retrieve the name of this database project, introduced in version 1.0.12 profile = PropertyHelper.get_profile(properties) if profile: users = profile.get('mysql_users') # fail when no users are found. This means that they are not set in myproject.json or # credentials.json Fail.fail_on_no_users(users) connector = self.get_connector() create_dir = properties.get('create.dir') for database in databases: print( "creating database '{db}' on host '{host}' using environment '{env}'" .format(db=database, host=host, env=environment)) executor = PropertyHelper.get_mysql_properties( users, host, database) database_folder = PropertyHelper.get_database_folder( database, database_aliases) for obj in objects: # global ddl objects folder = File( os.path.join(create_dir, database_folder, 'ddl', obj)) ConnectionExecutor.execute(connector, executor, properties, folder) # environment specific ddl objects folder = File( os.path.join(create_dir, database_folder, 'ddl', obj, environment)) ConnectionExecutor.execute(connector, executor, properties, folder) # global dat objects folder = File(os.path.join(create_dir, database_folder, 'dat')) ConnectionExecutor.execute(connector, executor, properties, folder) # environment specific dat objects folder = File( os.path.join(create_dir, database_folder, 'dat', environment)) ConnectionExecutor.execute(connector, executor, properties, folder) print("database '{}' created.".format(database))
def execute(self, properties, arguments): """ Update database after checking if schema and environment are valid values. Also check that host is not on the block list and that the version to update to is valid :type properties: system.Properties.Properties :param properties: The project properties :type arguments: dict :param arguments: This dict contains the plugin arguments: **version**: The version to update the database to; **host**: The hostname that hosts the database to update; **database**: Database to update (optional); **alias**: Alias to use (optional); **environment**: Environment to update the database in (optional). """ prepared_args = self._validate_and_prepare(properties, arguments) version = prepared_args['version'] host = prepared_args['host'] environment = prepared_args['environment'] databases = prepared_args['databases'] objects = properties.get('create_objects') version_database = properties.get('version_database') alter_dir = properties.get('alter.dir') database_aliases = properties.get('database_aliases') # retrieve the user credentials for this database project. users = properties.get('mysql_users') # try to retrieve the users from the credentials file, when no users are configured in # myproject.json. if not users: # retrieve the name of this database project, introduced in version 1.0.12 profile = PropertyHelper.get_profile(properties) if profile: users = profile.get('mysql_users') connector = self.get_connector() for database in databases: print("updating database '{db}' on host '{host}' using environment '{env}'".format( db=database, host=host, env=environment)) executor = PropertyHelper.get_mysql_properties(users, host, database) database_folder = PropertyHelper.get_database_folder(database, database_aliases) if database == version_database: self.fail_on_invalid_environment(connector, executor, environment, properties) self.fail_on_invalid_version(connector, executor, version, properties) for obj in objects: # global ddl objects folder = File(os.path.join(alter_dir, version, database_folder, 'ddl', obj)) ConnectionExecutor.execute(connector, executor, properties, folder) # environment specific ddl objects folder = File( os.path.join(alter_dir, version, database_folder, 'ddl', obj, environment)) ConnectionExecutor.execute(connector, executor, properties, folder) # global dat objects folder = File(os.path.join(alter_dir, version, database_folder, 'dat')) ConnectionExecutor.execute(connector, executor, properties, folder) # environment specific dat objects folder = File(os.path.join(alter_dir, version, database_folder, 'dat', environment)) ConnectionExecutor.execute(connector, executor, properties, folder) print("database '{}' updated".format(database))