Esempio n. 1
0
    def execute(self, properties, arguments):
        """
        Drop a database after checking if schema and environment are
        valid values. Also check that host is not on the block list.

        :type properties: system.Properties.Properties
        :param properties: The project properties
        :type arguments: dict
        :param arguments: This dict contains the plugin arguments:

            * **host**: The hostname to drop on;
            * **environment**: Environment to drop the database from.
        """
        prepared_args = self._validate_and_prepare(properties, arguments)

        host = prepared_args['host']
        environment = prepared_args['environment']
        databases = properties.get('databases')

        objects = properties.get('drop_objects')

        # retrieve the user credentials for this database project.
        users = properties.get('postgresql_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('postgresql_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)

        for database in databases:
            print(
                "dropping database '{db}' on host '{host}' using environment '{env}'"
                .format(db=database, host=host, env=environment))

            executor = PropertyHelper.get_postgres_properties(
                users, host, database)

            connector = self.get_connector()

            for obj in objects:
                folder = File(
                    os.path.join(properties.get('plugin.dir'), 'postgresql',
                                 'drop', obj))
                ConnectionExecutor.execute(connector, executor, properties,
                                           folder)

            print("database '{}' dropped".format(database))
Esempio n. 2
0
    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 is running;
            * **environment**: The environment to create the database in (optional).
        """
        prepared_args = self._validate_and_prepare(properties, arguments)

        host = prepared_args['host']
        environment = prepared_args['environment']
        databases = properties.get('databases')

        objects = properties.get('create_objects')

        # retrieve the user credentials for this database project.
        users = properties.get('postgresql_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('postgresql_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_postgres_properties(users, host, database)

            for obj in objects:
                # global ddl objects
                folder = File(os.path.join(create_dir, database, 'ddl', obj))
                ConnectionExecutor.execute(connector, executor, properties, folder)

                # environment specific ddl objects
                folder = File(os.path.join(create_dir, database, 'ddl', obj, environment))
                ConnectionExecutor.execute(connector, executor, properties, folder)

            # global dat objects
            folder = File(os.path.join(create_dir, database, 'dat'))
            ConnectionExecutor.execute(connector, executor, properties, folder)

            # environment specific dat objects
            folder = File(os.path.join(create_dir, database, 'dat', environment))
            ConnectionExecutor.execute(connector, executor, properties, folder)

            print("database '{}' created.".format(database))
Esempio n. 3
0
    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;
            * **schema**: Schema to update (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 = properties.get('databases')

        objects = properties.get('create_objects')

        version_database = properties.get('version_database')

        alter_dir = properties.get('alter.dir')

        # retrieve the user credentials for this database project.
        users = properties.get('postgresql_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('postgresql_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)

            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, 'ddl', obj))
                ConnectionExecutor.execute(connector, executor, properties,
                                           folder)

                # environment specific ddl objects
                folder = File(
                    os.path.join(alter_dir, version, database, 'ddl', obj,
                                 environment))
                ConnectionExecutor.execute(connector, executor, properties,
                                           folder)

            # global dat objects
            folder = File(os.path.join(alter_dir, version, database, 'dat'))
            ConnectionExecutor.execute(connector, executor, properties, folder)

            # environment specific dat objects
            folder = File(
                os.path.join(alter_dir, version, database, 'dat', environment))
            ConnectionExecutor.execute(connector, executor, properties, folder)

            print("database '{}' updated".format(database))
Esempio n. 4
0
credentials = os.path.join(home_dir, '.noora', 'credentials.json')

# create the .noora folder if not exists
if not os.path.isdir(os.path.dirname(credentials)):
    os.makedirs(os.path.dirname(credentials))

# create .noora/credentials if not exists
if not os.path.isfile(credentials):
    f = open(credentials, 'w')
    f.close()

# use credentials
f = open(credentials, 'r')
credentials = json.load(f)

# resolve the name of the project, which is in myproject.json
project = "acme-db"

profile = credentials.get(project)
mysql_users = None
if profile:
    mysql_users = profile.get('mysql_users')

databases = ['acme']
host = 'localhost'

for database in databases:
    executor = PropertyHelper.get_mysql_properties(mysql_users, host, database)
    print(executor['username'])