diff options
| author | Carlos Konstanski <ckonstanski@pippiandcarlos.com> | 2017-08-30 13:09:56 -0600 |
|---|---|---|
| committer | Carlos Konstanski <ckonstanski@pippiandcarlos.com> | 2017-08-30 13:09:56 -0600 |
| commit | 649f0dd9c5ca586d8b637400dd19c0c4059447d6 (patch) | |
| tree | 5ccc992a3aa5de1bcb510911dfdb21e6a54bd197 /salt/openbook/database | |
initial commit
Diffstat (limited to 'salt/openbook/database')
| -rw-r--r-- | salt/openbook/database/files/Dockerfile | 10 | ||||
| -rw-r--r-- | salt/openbook/database/files/_my.cnf | 6 | ||||
| -rw-r--r-- | salt/openbook/database/files/build.sh | 36 | ||||
| -rw-r--r-- | salt/openbook/database/files/cluster.cnf | 17 | ||||
| -rw-r--r-- | salt/openbook/database/files/create_openbook_schemas.sql | 1416 | ||||
| -rw-r--r-- | salt/openbook/database/files/debconfrc | 2 | ||||
| -rw-r--r-- | salt/openbook/database/files/debian.cnf | 11 | ||||
| -rw-r--r-- | salt/openbook/database/files/fix_permissions.sh | 37 | ||||
| -rw-r--r-- | salt/openbook/database/files/installdeps.sh | 12 | ||||
| -rw-r--r-- | salt/openbook/database/files/my.cnf | 169 | ||||
| -rw-r--r-- | salt/openbook/database/files/run.sh | 23 | ||||
| -rw-r--r-- | salt/openbook/database/files/sources.list | 54 | ||||
| -rw-r--r-- | salt/openbook/database/files/start_galera_node.sh | 12 | ||||
| -rw-r--r-- | salt/openbook/database/init.sls | 55 |
14 files changed, 1860 insertions, 0 deletions
diff --git a/salt/openbook/database/files/Dockerfile b/salt/openbook/database/files/Dockerfile new file mode 100644 index 0000000..3e7848e --- /dev/null +++ b/salt/openbook/database/files/Dockerfile @@ -0,0 +1,10 @@ +FROM {{ pillar["baseimage"]["image_name"] }} +MAINTAINER Carlos Konstanski <carlos@talligent.com> +ADD docker-start.tar.xz / +EXPOSE 3306 4444 4567 4567/udp 4568 +VOLUME /etc/mysql +VOLUME /var/lib/mysql +VOLUME /var/log/mysql +RUN /installdeps.sh +ENTRYPOINT [ "/etc/mysql/bin/start_galera_node.sh" ] +CMD [] diff --git a/salt/openbook/database/files/_my.cnf b/salt/openbook/database/files/_my.cnf new file mode 100644 index 0000000..e158680 --- /dev/null +++ b/salt/openbook/database/files/_my.cnf @@ -0,0 +1,6 @@ +[mysql] +user=root +password={% raw %}{{ openbook_database_password }}{% endraw %} +[mysqldump] +user=root +password={% raw %}{{ openbook_database_password }}{% endraw %} diff --git a/salt/openbook/database/files/build.sh b/salt/openbook/database/files/build.sh new file mode 100644 index 0000000..49c9aba --- /dev/null +++ b/salt/openbook/database/files/build.sh @@ -0,0 +1,36 @@ +- +#!/bin/bash + +# Do not call directly. Meant to be called from CI build script. + +pushd {{ pillar["database"]["build_dir"] }} 2>/dev/null + +echo "Creating tmp directory" +rm -rf tmp +mkdir tmp +rm -f docker-start.tar.xz + +echo "Populating with custom file" +rsync -aq data/ tmp/ + +echo "Repackaging into .xz file" +tar Jcvf docker-start.tar.xz -C tmp/ . + +echo "Deleting existing docker container" +docker stop {{ pillar["database"]["container_name"] }} +docker container prune -f +docker rmi -f {{ pillar["database"]["image_name"] }} + +echo "Building docker Ubuntu image" +docker build -t {{ pillar["database"]["image_name"] }} . + +echo "Push docker image to the registry" +docker tag {{ pillar["database"]["image_name"] }} {{ pillar["registry"]["url"] }}/{{ pillar["database"]["image_name"] }} +docker push {{ pillar["registry"]["url"] }}/{{ pillar["database"]["image_name"] }} + +echo "Cleaning up" +rm -rf tmp +rm -f docker-start.tar.xz + +popd 2>/dev/null +exit 0 diff --git a/salt/openbook/database/files/cluster.cnf b/salt/openbook/database/files/cluster.cnf new file mode 100644 index 0000000..5dbd3cf --- /dev/null +++ b/salt/openbook/database/files/cluster.cnf @@ -0,0 +1,17 @@ +[mysqld] +query_cache_size=0 +default-storage-engine=innodb +query_cache_type=0 +group_concat_max_len=1000000 +innodb_autoinc_lock_mode=2 +innodb_locks_unsafe_for_binlog=1 +binlog_format=row + +[galera] +wsrep_on=ON +wsrep_provider=/usr/lib/galera/libgalera_smm.so +wsrep_cluster_name="openbook_cluster" +wsrep_cluster_address="gcomm://{% raw %}{{ openbook_gcomm_addresses }}{% endraw %}" +wsrep_sst_method=rsync +wsrep_node_address="{% raw %}{{ ansible_default_ipv4.address }}{% endraw %}" +wsrep_node_name="{% raw %}{{ ansible_hostname }}{% endraw %}" diff --git a/salt/openbook/database/files/create_openbook_schemas.sql b/salt/openbook/database/files/create_openbook_schemas.sql new file mode 100644 index 0000000..f6544fc --- /dev/null +++ b/salt/openbook/database/files/create_openbook_schemas.sql @@ -0,0 +1,1416 @@ +SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; +SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; +SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; + +DROP SCHEMA IF EXISTS openbook; +CREATE SCHEMA openbook DEFAULT CHARACTER SET utf8; + +GRANT ALL PRIVILEGES ON openbook.* TO openbook@'%' IDENTIFIED BY '{% raw %}{{ openbook_database_password }}{% endraw %}'; +GRANT ALL PRIVILEGES ON openbook.* TO openbook@localhost IDENTIFIED BY '{% raw %}{{ openbook_database_password }}{% endraw %}'; +FLUSH PRIVILEGES; + +USE openbook; + +CREATE TABLE t_audit_event ( + event_id INT UNSIGNED NOT NULL AUTO_INCREMENT, + event_time DATETIME(6) NOT NULL, + event_type VARCHAR(32) NOT NULL, + entity_id VARCHAR(64) NOT NULL, + entity_name VARCHAR(255) NULL, + entity_type VARCHAR(45) NOT NULL, + user_id VARCHAR(128) NULL, + event_data LONGTEXT NULL, + PRIMARY KEY (event_id), + INDEX ix_audit_event_1 (event_time, event_type, entity_id), + INDEX ix_audit_event_2 (user_id, event_time)) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_billable_feature ( + billable_feature_id INT UNSIGNED NOT NULL AUTO_INCREMENT, + billable_feature_category VARCHAR(128) NOT NULL, + billable_feature_vendor_type VARCHAR(128) NOT NULL, + billable_feature_type VARCHAR(128) NOT NULL, + billable_feature_subtypes LONGTEXT NULL DEFAULT NULL, + billable_feature_subtype_classifier LONGTEXT NULL DEFAULT NULL, + billable_feature_description LONGTEXT NULL DEFAULT NULL, + billable_feature_details LONGTEXT NULL DEFAULT NULL, + PRIMARY KEY (billable_feature_id), + UNIQUE INDEX ix_billable_feature_1 (billable_feature_vendor_type ASC, billable_feature_type ASC)) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_credit ( + credit_id INT UNSIGNED NOT NULL AUTO_INCREMENT, + payer_id INT UNSIGNED NOT NULL, + payer_type VARCHAR(64) NOT NULL, + credit_amount DECIMAL(19,2) NULL, + remaining_amount DECIMAL(19,2) NULL, + credit_type VARCHAR(16) NOT NULL, + granted_by VARCHAR(256) NOT NULL, + posted_date DATETIME(6) NOT NUll, + expire_date DATETIME(6) NOT NULL, + currency VARCHAR(3) NOT NULL, + PRIMARY KEY (credit_id), + INDEX ix_credit_1 (payer_id, payer_type, expire_date)) + ENGINE = InnoDB + DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_customer ( + customer_id INT UNSIGNED NOT NULL AUTO_INCREMENT, + resource_manager_id VARCHAR(36) NULL DEFAULT NULL, + resource_manager_foreign_id VARCHAR(512) NULL DEFAULT NULL, + customer_name VARCHAR(512) NOT NULL, + other_foreign_ids LONGTEXT NULL DEFAULT NULL, + tax_rate DECIMAL(18,4) NULL DEFAULT 0.0000, + currency CHAR(6) NULL DEFAULT NULL, + discount_percent DECIMAL(18,4) NULL DEFAULT 0.0000, + billing_frequency VARCHAR(40) NULL DEFAULT NULL, + last_bill_date DATETIME(6) NULL DEFAULT NULL, + next_bill_date DATETIME(6) NULL DEFAULT NULL, + is_active TINYINT(1) NULL DEFAULT 1, + create_date DATETIME(6) NULL DEFAULT NULL, + activate_date DATETIME(6) NULL DEFAULT NULL, + billing_start_date DATETIME(6) NULL DEFAULT NULL, + last_payment_date DATETIME(6) NULL DEFAULT NULL, + deactivate_date DATETIME(6) NULL DEFAULT NULL, + description VARCHAR(5120) NULL DEFAULT NULL, + minimum_invoice_commitment DECIMAL(19,4) NULL, + invoicing_method VARCHAR(32) NOT NULL, + management_region_id VARCHAR(64) NULL, + infrastructure_region_id VARCHAR(64) NULL, + billing_address_line_1 VARCHAR(512) NULL, + billing_address_line_2 VARCHAR(512) NULL, + billing_address_city VARCHAR(512) NULL, + billing_address_region VARCHAR(128) NULL, + billing_address_country VARCHAR(2) NULL, + billing_address_postal_code VARCHAR(64) NULL, + payer_payment_details VARCHAR(5120) NULL, + payment_method_confirmed TINYINT(1) DEFAULT 0, + balance_due DECIMAL(19,4) NULL DEFAULT 0, + PRIMARY KEY (customer_id), + INDEX ix_customer_1 (resource_manager_id ASC), + INDEX ix_customer_2 (resource_manager_foreign_id(255) ASC), + UNIQUE INDEX ix_customer_3 (management_region_id, customer_name(255))) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_discount ( + discount_id INT UNSIGNED NOT NULL AUTO_INCREMENT, + payer_id INT UNSIGNED NOT NULL, + payer_type VARCHAR(64) NOT NULL, + discount_percent DECIMAL(5,2) NOT NULL, + granted_by VARCHAR(256) NOT NULL, + apply_to_charge_category VARCHAR(32) NOT NULL, + trigger_charge_category VARCHAR(32) NULL, + trigger_amount DECIMAL(19,2) NULL, + start_date DATETIME(6) NOT NULL, + end_date DATETIME(6) NOT NULL, + PRIMARY KEY (discount_id), + INDEX ix_discount_1 (payer_id, payer_type, end_date)) + ENGINE = InnoDB + DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_email_notification ( + message_id INT UNSIGNED NOT NULL AUTO_INCREMENT, + recipient VARCHAR(128) NOT NULL, + sender VARCHAR(128) NOT NULL, + subject VARCHAR(256) NOT NULL, + message_text LONGTEXT NOT NULL, + smtp_server_details LONGTEXT NOT NULL, + date_generated DATETIME(6) NOT NULL, + date_sent DATETIME(6) NULL, + date_last_send_attempt DATETIME(6) NULL, + send_status VARCHAR(16) NULL, + send_status_detail VARCHAR(5120) NULL, + send_attempt_count SMALLINT NULL, + PRIMARY KEY (message_id), + INDEX ix_email_notification_1 (recipient, date_generated), + INDEX ix_email_notification_2 (sender, date_generated), + INDEX ix_email_notification_3 (date_sent)) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_email_template ( + provider_id INT UNSIGNED NOT NULL AUTO_INCREMENT, + template_subject VARCHAR(256) NOT NULL, + template_name VARCHAR(128) NOT NULL, + template_text LONGTEXT NOT NULL, + PRIMARY KEY (provider_id, template_name)) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_entity_attribute ( + entity_id INT UNSIGNED NOT NULL AUTO_INCREMENT, + attribute_class VARCHAR(32) NOT NULL, + attribute_category VARCHAR(128) NOT NULL, + attribute_name VARCHAR(128) NOT NULL, + attribute_value VARCHAR(512) NOT NULL, + attribute_unit VARCHAR(64) NULL DEFAULT NULL, + add_date DATETIME(6) NULL DEFAULT NULL, + expire_date DATETIME(6) NOT NULL, + PRIMARY KEY (entity_id ASC, expire_date ASC, attribute_class ASC, attribute_category ASC, attribute_name ASC), + INDEX ix_entity_attribute_1 (attribute_class ASC), + INDEX ix_entity_attribute_2 (attribute_category ASC), + INDEX ix_entity_attribute_3 (attribute_name ASC)) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_invoice ( + invoice_id INT UNSIGNED NOT NULL AUTO_INCREMENT, + payer_id INT UNSIGNED NOT NULL, + payer_type VARCHAR(64) NOT NULL, + payer_name VARCHAR(512) NOT NULL, + invoice_number VARCHAR(45) NULL, + invoice_date DATETIME(6) NOT NULL, + period_begin DATETIME(6) NOT NULL, + period_end DATETIME(6) NOT NULL, + invoice_amount DECIMAL(19,2) NOT NULL, + actual_charges DECIMAL(19,2) NOT NULL, + invoice_currency VARCHAR(16) NULL, + management_region_id INT UNSIGNED NOT NULL, + balance_due DECIMAL(19,2) NOT NULL, + PRIMARY KEY (invoice_id), + INDEX ix_invoice_1 (management_region_id, payer_type, payer_id ASC)) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_invoice_detail ( + invoice_id INT UNSIGNED NOT NULL, + customer_id INT UNSIGNED NOT NULL, + resource_group_id VARCHAR(36) NULL, + invoice_group VARCHAR(128) NULL, + item_name VARCHAR(512) NULL, + item_vendor_type VARCHAR(128) NULL, + item_type VARCHAR(128) NOT NULL, + item_subtype VARCHAR(128) NOT NULL, + item_description VARCHAR(512) NOT NULL, + rate_plan_id VARCHAR(36) NULL, + rate_plan_billable_feature_id VARCHAR(36) NULL DEFAULT NULL, + billing_interval VARCHAR(64) NULL DEFAULT NULL, + item_invoice_amount DECIMAL(19,2) NOT NULL, + num_units VARCHAR(32) NOT NULL, + num_units_unit VARCHAR(16) NULL, + INDEX ix_invoice_detail_1 (invoice_id ASC), + INDEX ix_invoice_detail_2 (customer_id ASC), + INDEX ix_invoice_detail_3 (item_vendor_type, item_type, item_subtype ASC), + INDEX ix_invoice_detail_4 (rate_plan_id ASC)) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_job_status ( + job_id VARCHAR(256) NOT NULL, + start_time DATETIME(6) NOT NULL, + end_time DATETIME(6) NULL DEFAULT NULL, + status VARCHAR(32) NULL DEFAULT NULL, + result VARCHAR(32) NULL DEFAULT NULL, + result_detail LONGTEXT NULL DEFAULT NULL, + PRIMARY KEY (job_id(255), start_time)) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_lookup_values ( + type VARCHAR(128) NOT NULL, + name VARCHAR(256) NOT NULL, + value LONGTEXT NOT NULL, + PRIMARY KEY (type, name(255))) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_parent_child_relationships ( + parent_id INT UNSIGNED NOT NULL, + parent_type VARCHAR(64) NOT NULL, + child_id INT UNSIGNED NOT NULL, + child_type VARCHAR(64) NOT NULL, + assigned_quantity INT NOT NULL DEFAULT 1, + add_date DATETIME(6) NOT NULL, + remove_date DATETIME(6) NOT NULL, + PRIMARY KEY (parent_id, parent_type, child_id, child_type, add_date, remove_date), + INDEX ix_parent_child_relationships_1 (child_id, child_type ASC), + INDEX ix_parent_child_relationships_2 (parent_id, parent_type ASC)) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_payment ( + payment_id INT UNSIGNED NOT NULL AUTO_INCREMENT, + payer_id INT UNSIGNED NOT NULL, + payer_type VARCHAR(64) NOT NULL, + payment_date DATETIME(6) NOT NULL, + amount DECIMAL(19,2) NOT NULL, + payment_method VARCHAR(64) NOT NULL, + payment_reference VARCHAR(256) NULL, + payment_method_detail LONGTEXT NULL DEFAULT NULL, + payment_status VARCHAR(64) NULL DEFAULT NULL, + payment_status_detail LONGTEXT NULL DEFAULT NULL, + PRIMARY KEY (payment_id), + INDEX ix_payment_1 (payer_type, payer_id, payment_date)) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_promo_code ( + management_region_id INT UNSIGNED NOT NULL, + promo_code_id INT UNSIGNED NOT NULL AUTO_INCREMENT, + promo_code VARCHAR(128) NOT NULL, + salesperson VARCHAR(128) NULL, + discount_or_credit VARCHAR(8) NOT NULL, + credit_amount DECIMAL(19,2) NULL, + credit_type VARCHAR(16) NULL, + apply_to_charge_category VARCHAR(32) NULL, + trigger_charge_category VARCHAR(32) NULL, + trigger_amount DECIMAL(19,2) NULL, + discount_percent DECIMAL(5,2) NULL, + available_invoice_periods INT NULL, + expire_date DATETIME(6) NULL, + currency VARCHAR(3) NULL DEFAULT NULL, + PRIMARY KEY (promo_code_id), + INDEX ix_promo_code_1 (promo_code), + INDEX ix_promo_code_2 (salesperson), + UNIQUE INDEX ix_promo_code_3 (management_region_id, promo_code)) + ENGINE = InnoDB + DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_promo_code_redemption ( + promo_code_id INT UNSIGNED NOT NULL, + payer_id INT UNSIGNED NOT NULL, + payer_type VARCHAR(64) NOT NULL, + redemption_date DATETIME(6) NULL, + PRIMARY KEY (payer_id, promo_code_id)) + ENGINE = InnoDB + DEFAULT CHARACTER SET = utf8; + + +CREATE TABLE t_provider ( + provider_id INT UNSIGNED NOT NULL AUTO_INCREMENT, + provider_name VARCHAR(512) NOT NULL, + provider_type VARCHAR(64) NOT NULL, + other_foreign_ids LONGTEXT NULL DEFAULT NULL, + tax_rate DECIMAL(18,4) NULL DEFAULT 0.0000, + currency CHAR(6) NULL DEFAULT NULL, + discount_percent DECIMAL(18,4) NULL DEFAULT 0.0000, + billing_frequency VARCHAR(40) NULL DEFAULT NULL, + last_bill_date DATETIME(6) NULL DEFAULT NULL, + next_bill_date DATETIME(6) NULL DEFAULT NULL, + last_payment_date DATETIME(6) NULL DEFAULT NULL, + is_active TINYINT(1) NULL DEFAULT 1, + create_date DATETIME(6) NULL DEFAULT NULL, + activate_date DATETIME(6) NULL DEFAULT NULL, + billing_start_date DATETIME(6) NULL DEFAULT NULL, + deactivate_date DATETIME(6) NULL DEFAULT NULL, + description LONGTEXT NULL DEFAULT NULL, + minimum_invoice_commitment DECIMAL(19,2) NULL, + invoicing_method VARCHAR(32) NULL DEFAULT NULL, + invoice_processing_method VARCHAR(32) NULL DEFAULT NULL, + billing_address_line_1 VARCHAR(512) NULL, + billing_address_line_2 VARCHAR(512) NULL, + billing_address_city VARCHAR(512) NULL, + billing_address_region VARCHAR(128) NULL, + billing_address_country VARCHAR(2) NULL, + billing_address_postal_code VARCHAR(64) NULL, + legal_address_line_1 VARCHAR(512) NULL, + legal_address_line_2 VARCHAR(512) NULL, + legal_address_city VARCHAR(512) NULL, + legal_address_region VARCHAR(128) NULL, + legal_address_country VARCHAR(2) NULL, + legal_address_postal_code VARCHAR(64) NULL, + payer_payment_details VARCHAR (5120) NULL, + payee_payment_details VARCHAR(5120) NULL, + public_url VARCHAR(512) NOT NULL, + private_url VARCHAR(512) NOT NULL, + management_region_id VARCHAR(64) NOT NULL, + notification_settings LONGTEXT NOT NULL, + personalization_settings LONGTEXT NOT NULL, + balance_due DECIMAL(19,2) NULL, + openbook_processes_payments TINYINT(1) NULL DEFAULT 1, + openbook_processes_past_due_invoices TINYINT(1) NULL DEFAULT 1, + openstack_tenant_id VARCHAR(36) NULL DEFAULT NULL, + PRIMARY KEY (provider_id), + UNIQUE INDEX ix_provider_1 (public_url(255)), + UNIQUE INDEX ix_provider_2 (management_region_id)) + ENGINE = InnoDB + DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_provider_region ( + provider_id INT UNSIGNED NOT NULL, + region_id INT UNSIGNED NOT NULL, + PRIMARY KEY (provider_id, region_id)) + ENGINE = InnoDB + DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_provisioned_entity ( + entity_id INT UNSIGNED NOT NULL AUTO_INCREMENT, + billable_feature_id INT UNSIGNED NOT NULL, + entity_name VARCHAR(256) NOT NULL, + entity_subtype VARCHAR(128) NULL DEFAULT NULL, + customer_id INT UNSIGNED NOT NULL, + resource_manager_id INT UNSIGNED NOT NULL, + infrastructure_region_id INT UNSIGNED NOT NULL, + entity_foreign_id VARCHAR(256) NULL DEFAULT NULL, + provisioned_date DATETIME(6) NULL DEFAULT NULL, + deprovisioned_date DATETIME(6) NULL DEFAULT NULL, + PRIMARY KEY (entity_id), + INDEX ix_provisioned_entity_1 (entity_foreign_id(255) ASC), + INDEX ix_provisioned_entity_2 (customer_id), + INDEX ix_provisioned_entity_3 (resource_manager_id ASC)) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_rate_plan ( + rate_plan_id INT UNSIGNED NOT NULL AUTO_INCREMENT, + rate_plan_name VARCHAR(255) NULL DEFAULT NULL, + applies_to VARCHAR(32) NOT NULL, + rate_plan_description VARCHAR(1024) NULL DEFAULT NULL, + proration_details LONGTEXT NULL DEFAULT NULL, + currency CHAR(6) NULL DEFAULT NULL, + discount_percent VARCHAR(20) NULL DEFAULT NULL, + management_region_id VARCHAR(64) NOT NULL, + PRIMARY KEY (rate_plan_id), + INDEX ix_rate_plan_1 (management_region_id ASC), + UNIQUE INDEX ix_rate_plan_2 (management_region_id, rate_plan_name)) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_rate_plan_assignment ( + rate_plan_id INT UNSIGNED NOT NULL, + assignee_id INT UNSIGNED NOT NULL, + assignee_type VARCHAR(64) NOT NULL, + assignment_start_date DATETIME(6) NOT NULL, + assignment_end_date DATETIME(6) NOT NULL, + assignment_type VARCHAR(64) NOT NULL, + PRIMARY KEY (rate_plan_id, assignee_id, assignment_start_date, assignment_end_date), + INDEX ix_rate_plan_assignment_1 (assignee_type, assignee_id, assignment_start_date, assignment_end_date ASC), + INDEX ix_rate_plan_assignment_2 (assignment_type, assignee_id, assignment_start_date, assignment_end_date ASC)) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_rate_plan_billable_attribute ( + rate_plan_id INT UNSIGNED NOT NULL, + feature_type VARCHAR(128) NOT NULL, + attribute_class VARCHAR(32) NOT NULL, + attribute_category VARCHAR(128) NOT NULL, + attribute_name VARCHAR(128) NOT NULL, + attribute_value VARCHAR(512) NOT NULL, + attribute_unit VARCHAR(64) NULL DEFAULT NULL, + attribute_datatype VARCHAR(32) NOT NULL, + charge VARCHAR(32) NOT NULL, + operator VARCHAR(32) NULL DEFAULT NULL, + billing_scheme VARCHAR(64) NOT NULL, + cost_calculation_frequency VARCHAR(64) NOT NULL, + filter TEXT NULL, + infrastructure_region_id INT UNSIGNED NOT NULL DEFAULT 0, + INDEX ix_rate_plan_billable_attribute_1 (rate_plan_id, infrastructure_region_id)) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_rate_plan_billable_feature ( + rate_plan_id INT UNSIGNED NOT NULL, + billable_feature_id INT UNSIGNED NOT NULL, + billable_feature_subtype VARCHAR(128) NOT NULL, + billable_interval_type VARCHAR(64) NOT NULL, + cost_calculation_frequency VARCHAR(64) NOT NULL, + charge VARCHAR(100) NULL DEFAULT NULL, + infrastructure_region_id INT UNSIGNED NOT NULL DEFAULT 0, + PRIMARY KEY (rate_plan_id, infrastructure_region_id, billable_feature_id, billable_feature_subtype, billable_interval_type)) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_rate_plan_billable_metric ( + rate_plan_id INT UNSIGNED NOT NULL, + vendor_type VARCHAR(128) NOT NULL, + metric_name VARCHAR(128) NOT NULL, + metric_unit VARCHAR(32) NULL DEFAULT NULL, + metric_type VARCHAR(32) NULL DEFAULT NULL, + billing_scheme VARCHAR(64) NOT NULL, + billing_scheme_details LONGTEXT NULL DEFAULT NULL, + infrastructure_region_id INT UNSIGNED NOT NULL DEFAULT 0, + PRIMARY KEY (rate_plan_id, infrastructure_region_id, vendor_type, metric_name, billing_scheme)) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_rate_plan_billable_event ( + rate_plan_id INT UNSIGNED NOT NULL, + billable_feature_id INT UNSIGNED NOT NULL, + billable_feature_subtype VARCHAR(128) NOT NULL, + event_type VARCHAR(128) NOT NULL, + charge VARCHAR(100) NOT NULL, + billing_scheme_details LONGTEXT NULL DEFAULT NULL, + infrastructure_region_id INT UNSIGNED NOT NULL DEFAULT 0, + PRIMARY KEY (rate_plan_id, infrastructure_region_id, billable_feature_id, billable_feature_subtype, event_type)) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_region ( + region_id INT UNSIGNED NOT NULL AUTO_INCREMENT, + region_name VARCHAR(128) NOT NULL, + region_type VARCHAR(64) NOT NULL, + parent_region_id INT UNSIGNED NULL DEFAULT NULL, + PRIMARY KEY (region_id), + UNIQUE INDEX ix_region_1 (parent_region_id, region_type, region_name ASC), + INDEX ix_region_2 (parent_region_id)) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_resource_configuration_history ( + resource_id INT UNSIGNED NOT NULL, + resource_name VARCHAR(512) NULL DEFAULT NULL, + resource_foreign_id VARCHAR(146) NULL DEFAULT NULL, + resource_configuration LONGTEXT NOT NULL, + start_date DATETIME(6) NOT NULL, + end_date DATETIME(6) NOT NULL, + customer_id LONGTEXT NULL DEFAULT NULL, + customer_foreign_id VARCHAR(146) NULL DEFAULT NULL, + customer_name VARCHAR(512) NULL DEFAULT NULL, + resource_manager_id VARCHAR(72) NULL DEFAULT NULL, + resource_manager_name VARCHAR(512) NULL DEFAULT NULL, + resource_manager_foreign_id VARCHAR(72) NULL DEFAULT NULL) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_resource_event ( + event_id VARCHAR(100) NOT NULL, + event_type VARCHAR(128) NOT NULL, + event_date DATETIME(6) NOT NULL, + resource_id VARCHAR(36) NULL DEFAULT NULL, + resource_name VARCHAR(256) NULL DEFAULT NULL, + resource_foreign_id VARCHAR(512) NULL DEFAULT NULL, + customer_id VARCHAR(36) NULL DEFAULT NULL, + customer_name VARCHAR(512) NULL DEFAULT NULL, + customer_foreign_id VARCHAR(512) NULL DEFAULT NULL, + resource_manager_id VARCHAR(36) NOT NULL, + resource_manager_foreign_id VARCHAR(512) NULL DEFAULT NULL, + infrastructure_region_id INT UNSIGNED NULL DEFAULT NULL, + management_region_id INT UNSIGNED NULL DEFAULT NULL, + PRIMARY KEY (resource_manager_id, event_id), + INDEX ix_vm_event_1 (resource_foreign_id(255) ASC, event_date ASC), + INDEX ix_vm_event_2 (customer_id ASC), + INDEX ix_vm_event_3 (resource_name(255), event_date DESC), + INDEX ix_vm_event_4 (resource_manager_id ASC)) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_resource_group ( + resource_group_id INT UNSIGNED NOT NULL AUTO_INCREMENT, + resource_group_name VARCHAR(512) NOT NULL, + resource_group_type VARCHAR(64) NULL DEFAULT NULL, + customer_id INT UNSIGNED NOT NULL, + parent_id INT UNSIGNED NOT NULL, + parent_type VARCHAR(64) NOT NULL, + PRIMARY KEY (resource_group_id), + INDEX ix_resource_group_1 (parent_id ASC), + INDEX ix_resource_group_2 (customer_id ASC)) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_resource_in_use_interval ( + resource_id VARCHAR(36) NULL DEFAULT NULL, + resource_name VARCHAR(512) NULL DEFAULT NULL, + resource_foreign_id LONGTEXT NULL DEFAULT NULL, + interval_type VARCHAR(64) NOT NULL, + start_date DATETIME(6) NOT NULL, + end_date DATETIME(6) NOT NULL, + interval_length_milliseconds BIGINT(20) NULL DEFAULT NULL, + resource_manager_id VARCHAR(36) NULL DEFAULT NULL, + resource_manager_name VARCHAR(512) NULL DEFAULT NULL, + resource_manager_foreign_id VARCHAR(512) NULL DEFAULT NULL, + customer_id VARCHAR(36) NULL DEFAULT NULL, + customer_name VARCHAR(512) NULL DEFAULT NULL, + customer_foreign_id VARCHAR(512) NULL DEFAULT NULL, + management_region_id INT UNSIGNED NOT NULL, + PRIMARY KEY (resource_id, interval_type, start_date, end_date), + INDEX ix_resource_in_use_interval_1 (resource_name(255) ASC), + INDEX ix_resource_in_use_interval_2 (customer_name(255) ASC)) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_resource_manager ( + resource_manager_id INT UNSIGNED NOT NULL AUTO_INCREMENT, + resource_manager_name VARCHAR(512) NOT NULL, + resource_manager_description VARCHAR(1024) NULL DEFAULT NULL, + resource_manager_vendor_type VARCHAR(64) NULL DEFAULT NULL, + resource_manager_foreign_id VARCHAR(512) NULL DEFAULT NULL, + metadata LONGTEXT NULL DEFAULT NULL, + last_metric_sync_times VARCHAR(5120) NULL DEFAULT NULL, + last_entity_sync_times VARCHAR(5120) NULL DEFAULT NULL, + infrastructure_region_id INT UNSIGNED NOT NULL, + PRIMARY KEY (resource_manager_id)) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_resource_manager_sync_times ( + resource_manager_id INT UNSIGNED NOT NULL, + sync_time_key VARCHAR(255) NOT NULL, + sync_time VARCHAR(255) NOT NULL, + PRIMARY KEY (resource_manager_id, sync_time_key)) +ENGINE=InnoDB +DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_usage_metric ( + resource_id INT UNSIGNED NULL DEFAULT 0, + resource_foreign_id VARCHAR(255) NOT NULL, + resource_name VARCHAR(256) NULL DEFAULT NULL, + resource_type VARCHAR(256) NULL DEFAULT NULL, + metric_name VARCHAR(128) NOT NULL, + metric_interval VARCHAR(64) NULL DEFAULT 600, + collection_time DATETIME(6) NOT NULL, + collection_hour varchar(10) NOT NULL, + metric_value DOUBLE NOT NULL, + metric_unit VARCHAR(64) NOT NULL, + customer_id INT UNSIGNED NOT NULL, + customer_name VARCHAR(256) NULL DEFAULT NULL, + customer_foreign_id VARCHAR(255) NULL DEFAULT NULL, + resource_manager_id INT UNSIGNED NOT NULL, + infrastructure_region_id INT UNSIGNED NOT NULL, + management_region_id INT UNSIGNED NOT NULL, + PRIMARY KEY (resource_foreign_id, metric_name, collection_time), + INDEX ix_usage_metrics_2 (customer_id, collection_time, resource_foreign_id, metric_name)) + ENGINE = InnoDB + DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_user_permissions ( + user_id INT UNSIGNED NOT NULL, + permission LONGTEXT NOT NULL, + PRIMARY KEY (user_id, permission(255))) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_user_roles ( + user_id INT UNSIGNED NOT NULL, + role_name VARCHAR(128) NOT NULL, + role_context INT UNSIGNED NOT NULL, + context_type VARCHAR(64) NOT NULL, + UNIQUE INDEX (user_id, role_name, role_context, context_type)) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_users ( + user_id INT UNSIGNED NOT NULL AUTO_INCREMENT, + username VARCHAR(128) NOT NULL, + first_name VARCHAR(256) NULL DEFAULT NULL, + last_name VARCHAR(256) NULL DEFAULT NULL, + email_address VARCHAR(512) NULL DEFAULT NULL, + phone_number VARCHAR(64) NULL DEFAULT NULL, + password VARCHAR(512) NOT NULL, + is_active TINYINT(1) NULL DEFAULT NULL, + password_change_token VARCHAR(64) NULL, + last_password_change_date DATETIME(6) NULL, + password_change_token_expire_date DATETIME(6) NULL, + PRIMARY KEY (user_id), + UNIQUE INDEX (username)) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_unbilled_charges ( + invoice_id INT UNSIGNED NOT NULL AUTO_INCREMENT, + payer_id INT UNSIGNED NOT NULL, + payer_type VARCHAR(64) NOT NULL, + payer_name VARCHAR(512) NOT NULL, + invoice_number VARCHAR(45) NULL, + invoice_date DATETIME(6) NOT NULL, + period_begin DATETIME(6) NOT NULL, + period_end DATETIME(6) NOT NULL, + invoice_amount DECIMAL(19,2) NOT NULL, + actual_charges DECIMAL(19,2) NOT NULL, + invoice_currency VARCHAR(16) NULL, + management_region_id INT UNSIGNED NOT NULL, + PRIMARY KEY (invoice_id), + INDEX t_unbilled_charges_1 (management_region_id, payer_type, payer_id ASC)) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8; + +CREATE TABLE t_unbilled_charges_detail ( + invoice_id INT UNSIGNED NOT NULL, + customer_id INT UNSIGNED NOT NULL, + resource_group_id VARCHAR(36) NULL, + invoice_group VARCHAR(128) NULL, + item_name VARCHAR(512) NULL, + item_vendor_type VARCHAR(128) NULL, + item_type VARCHAR(128) NOT NULL, + item_subtype VARCHAR(128) NOT NULL, + item_description VARCHAR(512) NOT NULL, + rate_plan_id VARCHAR(36) NULL, + rate_plan_billable_feature_id VARCHAR(36) NULL DEFAULT NULL, + billing_interval VARCHAR(64) NULL DEFAULT NULL, + item_invoice_amount DECIMAL(19,2) NOT NULL, + num_units VARCHAR(32) NOT NULL, + num_units_unit VARCHAR(16) NULL, + INDEX ix_unbilled_charges_detail_1 (invoice_id ASC), + INDEX ix_unbilled_charges_detail_2 (customer_id ASC), + INDEX ix_unbilled_charges_detail_3 (item_vendor_type, item_type, item_subtype ASC), + INDEX ix_unbilled_charges_detail_4 (rate_plan_id ASC)) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8; + +-- ----------------------------------------------------- +-- Views +-- ----------------------------------------------------- + +CREATE VIEW v_invoice_detail AS SELECT + i.*, + c.customer_name + FROM + (t_invoice_detail i + LEFT JOIN t_customer c ON ((i.customer_id = c.customer_id))); + +CREATE VIEW v_customer AS SELECT + c.*, + r1.region_name as management_region_name, + r2.region_name as infrastructure_region_name + FROM + (t_customer c + LEFT JOIN t_region r1 ON (c.management_region_id = r1.region_id) + LEFT JOIN t_region r2 ON (c.infrastructure_region_id = r2.region_id)); + +CREATE VIEW v_rate_plan_assignment AS SELECT + a.*, + r.management_region_id + FROM + (t_rate_plan_assignment a + LEFT JOIN t_rate_plan r ON (a.rate_plan_id = r.rate_plan_id)); + +CREATE VIEW v_users AS SELECT + u.*, + r.role_name, + r.role_context + FROM + (t_users u + LEFT JOIN t_user_roles r ON (u.user_id = r.user_id)); + +CREATE VIEW v_provider AS SELECT + t_provider.*, + t_region.parent_region_id as parent_management_region_id + FROM + (t_provider + LEFT JOIN t_region ON (t_region.region_id = t_provider.management_region_id)); + +CREATE VIEW v_provider_region AS SELECT + t_region.*, + t_provider_region.provider_id + FROM + (t_region + LEFT JOIN t_provider_region ON (t_region.region_id = t_provider_region.region_id)); + +CREATE VIEW v_unbilled_charges_detail AS SELECT + i.*, + c.customer_name + FROM + (t_unbilled_charges_detail i + LEFT JOIN t_customer c ON ((i.customer_id = c.customer_id))); + +commit; + +SET SQL_MODE=@OLD_SQL_MODE; +SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; +SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; + +-- ----------------------------------------------------- +-- Recreate workflow schema and tables. +-- ----------------------------------------------------- + +DROP SCHEMA IF EXISTS openbook_workflow; +CREATE SCHEMA openbook_workflow DEFAULT CHARACTER SET utf8; + +GRANT ALL PRIVILEGES ON openbook_workflow.* TO openbook@'%' IDENTIFIED BY '{% raw %}{{ openbook_database_password }}{% endraw %}'; +GRANT ALL PRIVILEGES ON openbook_workflow.* TO openbook@localhost IDENTIFIED BY '{% raw %}{{ openbook_database_password }}{% endraw %}'; +FLUSH PRIVILEGES; + +USE openbook_workflow; + +create table ACT_GE_PROPERTY ( + NAME_ varchar(64), + VALUE_ varchar(300), + REV_ integer, + primary key (NAME_) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin; + +insert into ACT_GE_PROPERTY +values ('schema.version', '5.20.0.1', 1); + +insert into ACT_GE_PROPERTY +values ('schema.history', 'create(5.20.0.1)', 1); + +insert into ACT_GE_PROPERTY +values ('next.dbid', '1', 1); + +create table ACT_GE_BYTEARRAY ( + ID_ varchar(64), + REV_ integer, + NAME_ varchar(255), + DEPLOYMENT_ID_ varchar(64), + BYTES_ LONGBLOB, + GENERATED_ TINYINT, + primary key (ID_) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin; + +create table ACT_RE_DEPLOYMENT ( + ID_ varchar(64), + NAME_ varchar(255), + CATEGORY_ varchar(255), + TENANT_ID_ varchar(255) default '', + DEPLOY_TIME_ timestamp(3) NULL, + primary key (ID_) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin; + +create table ACT_RE_MODEL ( + ID_ varchar(64) not null, + REV_ integer, + NAME_ varchar(255), + KEY_ varchar(255), + CATEGORY_ varchar(255), + CREATE_TIME_ timestamp(3) null, + LAST_UPDATE_TIME_ timestamp(3) null, + VERSION_ integer, + META_INFO_ varchar(4000), + DEPLOYMENT_ID_ varchar(64), + EDITOR_SOURCE_VALUE_ID_ varchar(64), + EDITOR_SOURCE_EXTRA_VALUE_ID_ varchar(64), + TENANT_ID_ varchar(255) default '', + primary key (ID_) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin; + +create table ACT_RU_EXECUTION ( + ID_ varchar(64), + REV_ integer, + PROC_INST_ID_ varchar(64), + BUSINESS_KEY_ varchar(255), + PARENT_ID_ varchar(64), + PROC_DEF_ID_ varchar(64), + SUPER_EXEC_ varchar(64), + ACT_ID_ varchar(255), + IS_ACTIVE_ TINYINT, + IS_CONCURRENT_ TINYINT, + IS_SCOPE_ TINYINT, + IS_EVENT_SCOPE_ TINYINT, + SUSPENSION_STATE_ integer, + CACHED_ENT_STATE_ integer, + TENANT_ID_ varchar(255) default '', + NAME_ varchar(255), + LOCK_TIME_ timestamp(3) NULL, + primary key (ID_) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin; + +create table ACT_RU_JOB ( + ID_ varchar(64) NOT NULL, + REV_ integer, + TYPE_ varchar(255) NOT NULL, + LOCK_EXP_TIME_ timestamp(3) NULL, + LOCK_OWNER_ varchar(255), + EXCLUSIVE_ boolean, + EXECUTION_ID_ varchar(64), + PROCESS_INSTANCE_ID_ varchar(64), + PROC_DEF_ID_ varchar(64), + RETRIES_ integer, + EXCEPTION_STACK_ID_ varchar(64), + EXCEPTION_MSG_ varchar(4000), + DUEDATE_ timestamp(3) NULL, + REPEAT_ varchar(255), + HANDLER_TYPE_ varchar(255), + HANDLER_CFG_ varchar(4000), + TENANT_ID_ varchar(255) default '', + primary key (ID_) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin; + +create table ACT_RE_PROCDEF ( + ID_ varchar(64) not null, + REV_ integer, + CATEGORY_ varchar(255), + NAME_ varchar(255), + KEY_ varchar(255) not null, + VERSION_ integer not null, + DEPLOYMENT_ID_ varchar(64), + RESOURCE_NAME_ varchar(4000), + DGRM_RESOURCE_NAME_ varchar(4000), + DESCRIPTION_ varchar(4000), + HAS_START_FORM_KEY_ TINYINT, + HAS_GRAPHICAL_NOTATION_ TINYINT, + SUSPENSION_STATE_ integer, + TENANT_ID_ varchar(255) default '', + primary key (ID_) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin; + +create table ACT_RU_TASK ( + ID_ varchar(64), + REV_ integer, + EXECUTION_ID_ varchar(64), + PROC_INST_ID_ varchar(64), + PROC_DEF_ID_ varchar(64), + NAME_ varchar(255), + PARENT_TASK_ID_ varchar(64), + DESCRIPTION_ varchar(4000), + TASK_DEF_KEY_ varchar(255), + OWNER_ varchar(255), + ASSIGNEE_ varchar(255), + DELEGATION_ varchar(64), + PRIORITY_ integer, + CREATE_TIME_ timestamp(3) NULL, + DUE_DATE_ datetime(3), + CATEGORY_ varchar(255), + SUSPENSION_STATE_ integer, + TENANT_ID_ varchar(255) default '', + FORM_KEY_ varchar(255), + primary key (ID_) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin; + +create table ACT_RU_IDENTITYLINK ( + ID_ varchar(64), + REV_ integer, + GROUP_ID_ varchar(255), + TYPE_ varchar(255), + USER_ID_ varchar(255), + TASK_ID_ varchar(64), + PROC_INST_ID_ varchar(64), + PROC_DEF_ID_ varchar(64), + primary key (ID_) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin; + +create table ACT_RU_VARIABLE ( + ID_ varchar(64) not null, + REV_ integer, + TYPE_ varchar(255) not null, + NAME_ varchar(255) not null, + EXECUTION_ID_ varchar(64), + PROC_INST_ID_ varchar(64), + TASK_ID_ varchar(64), + BYTEARRAY_ID_ varchar(64), + DOUBLE_ double, + LONG_ bigint, + TEXT_ varchar(4000), + TEXT2_ varchar(4000), + primary key (ID_) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin; + +create table ACT_RU_EVENT_SUBSCR ( + ID_ varchar(64) not null, + REV_ integer, + EVENT_TYPE_ varchar(255) not null, + EVENT_NAME_ varchar(255), + EXECUTION_ID_ varchar(64), + PROC_INST_ID_ varchar(64), + ACTIVITY_ID_ varchar(64), + CONFIGURATION_ varchar(255), + CREATED_ timestamp(3) not null DEFAULT CURRENT_TIMESTAMP(3), + PROC_DEF_ID_ varchar(64), + TENANT_ID_ varchar(255) default '', + primary key (ID_) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin; + +create table ACT_EVT_LOG ( + LOG_NR_ bigint auto_increment, + TYPE_ varchar(64), + PROC_DEF_ID_ varchar(64), + PROC_INST_ID_ varchar(64), + EXECUTION_ID_ varchar(64), + TASK_ID_ varchar(64), + TIME_STAMP_ timestamp(3) not null, + USER_ID_ varchar(255), + DATA_ LONGBLOB, + LOCK_OWNER_ varchar(255), + LOCK_TIME_ timestamp(3) null, + IS_PROCESSED_ tinyint default 0, + primary key (LOG_NR_) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin; + +create table ACT_PROCDEF_INFO ( + ID_ varchar(64) not null, + PROC_DEF_ID_ varchar(64) not null, + REV_ integer, + INFO_JSON_ID_ varchar(64), + primary key (ID_) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin; + +create index ACT_IDX_EXEC_BUSKEY on ACT_RU_EXECUTION(BUSINESS_KEY_); +create index ACT_IDX_TASK_CREATE on ACT_RU_TASK(CREATE_TIME_); +create index ACT_IDX_IDENT_LNK_USER on ACT_RU_IDENTITYLINK(USER_ID_); +create index ACT_IDX_IDENT_LNK_GROUP on ACT_RU_IDENTITYLINK(GROUP_ID_); +create index ACT_IDX_EVENT_SUBSCR_CONFIG_ on ACT_RU_EVENT_SUBSCR(CONFIGURATION_); +create index ACT_IDX_VARIABLE_TASK_ID on ACT_RU_VARIABLE(TASK_ID_); +create index ACT_IDX_ATHRZ_PROCEDEF on ACT_RU_IDENTITYLINK(PROC_DEF_ID_); +create index ACT_IDX_INFO_PROCDEF on ACT_PROCDEF_INFO(PROC_DEF_ID_); + +alter table ACT_GE_BYTEARRAY + add constraint ACT_FK_BYTEARR_DEPL +foreign key (DEPLOYMENT_ID_) +references ACT_RE_DEPLOYMENT (ID_); + +alter table ACT_RE_PROCDEF + add constraint ACT_UNIQ_PROCDEF +unique (KEY_,VERSION_, TENANT_ID_); + +alter table ACT_RU_EXECUTION + add constraint ACT_FK_EXE_PROCINST +foreign key (PROC_INST_ID_) +references ACT_RU_EXECUTION (ID_) on delete cascade on update cascade; + +alter table ACT_RU_EXECUTION + add constraint ACT_FK_EXE_PARENT +foreign key (PARENT_ID_) +references ACT_RU_EXECUTION (ID_); + +alter table ACT_RU_EXECUTION + add constraint ACT_FK_EXE_SUPER +foreign key (SUPER_EXEC_) +references ACT_RU_EXECUTION (ID_); + +alter table ACT_RU_EXECUTION + add constraint ACT_FK_EXE_PROCDEF +foreign key (PROC_DEF_ID_) +references ACT_RE_PROCDEF (ID_); + +alter table ACT_RU_IDENTITYLINK + add constraint ACT_FK_TSKASS_TASK +foreign key (TASK_ID_) +references ACT_RU_TASK (ID_); + +alter table ACT_RU_IDENTITYLINK + add constraint ACT_FK_ATHRZ_PROCEDEF +foreign key (PROC_DEF_ID_) +references ACT_RE_PROCDEF(ID_); + +alter table ACT_RU_IDENTITYLINK + add constraint ACT_FK_IDL_PROCINST +foreign key (PROC_INST_ID_) +references ACT_RU_EXECUTION (ID_); + +alter table ACT_RU_TASK + add constraint ACT_FK_TASK_EXE +foreign key (EXECUTION_ID_) +references ACT_RU_EXECUTION (ID_); + +alter table ACT_RU_TASK + add constraint ACT_FK_TASK_PROCINST +foreign key (PROC_INST_ID_) +references ACT_RU_EXECUTION (ID_); + +alter table ACT_RU_TASK + add constraint ACT_FK_TASK_PROCDEF +foreign key (PROC_DEF_ID_) +references ACT_RE_PROCDEF (ID_); + +alter table ACT_RU_VARIABLE + add constraint ACT_FK_VAR_EXE +foreign key (EXECUTION_ID_) +references ACT_RU_EXECUTION (ID_); + +alter table ACT_RU_VARIABLE + add constraint ACT_FK_VAR_PROCINST +foreign key (PROC_INST_ID_) +references ACT_RU_EXECUTION(ID_); + +alter table ACT_RU_VARIABLE + add constraint ACT_FK_VAR_BYTEARRAY +foreign key (BYTEARRAY_ID_) +references ACT_GE_BYTEARRAY (ID_); + +alter table ACT_RU_JOB + add constraint ACT_FK_JOB_EXCEPTION +foreign key (EXCEPTION_STACK_ID_) +references ACT_GE_BYTEARRAY (ID_); + +alter table ACT_RU_EVENT_SUBSCR + add constraint ACT_FK_EVENT_EXEC +foreign key (EXECUTION_ID_) +references ACT_RU_EXECUTION(ID_); + +alter table ACT_RE_MODEL + add constraint ACT_FK_MODEL_SOURCE +foreign key (EDITOR_SOURCE_VALUE_ID_) +references ACT_GE_BYTEARRAY (ID_); + +alter table ACT_RE_MODEL + add constraint ACT_FK_MODEL_SOURCE_EXTRA +foreign key (EDITOR_SOURCE_EXTRA_VALUE_ID_) +references ACT_GE_BYTEARRAY (ID_); + +alter table ACT_RE_MODEL + add constraint ACT_FK_MODEL_DEPLOYMENT +foreign key (DEPLOYMENT_ID_) +references ACT_RE_DEPLOYMENT (ID_); + +alter table ACT_PROCDEF_INFO + add constraint ACT_FK_INFO_JSON_BA +foreign key (INFO_JSON_ID_) +references ACT_GE_BYTEARRAY (ID_); + +alter table ACT_PROCDEF_INFO + add constraint ACT_FK_INFO_PROCDEF +foreign key (PROC_DEF_ID_) +references ACT_RE_PROCDEF (ID_); + +alter table ACT_PROCDEF_INFO + add constraint ACT_UNIQ_INFO_PROCDEF +unique (PROC_DEF_ID_); + +create table ACT_HI_PROCINST ( + ID_ varchar(64) not null, + PROC_INST_ID_ varchar(64) not null, + BUSINESS_KEY_ varchar(255), + PROC_DEF_ID_ varchar(64) not null, + START_TIME_ datetime(3) not null, + END_TIME_ datetime(3), + DURATION_ bigint, + START_USER_ID_ varchar(255), + START_ACT_ID_ varchar(255), + END_ACT_ID_ varchar(255), + SUPER_PROCESS_INSTANCE_ID_ varchar(64), + DELETE_REASON_ varchar(4000), + TENANT_ID_ varchar(255) default '', + NAME_ varchar(255), + primary key (ID_), + unique (PROC_INST_ID_) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin; + +create table ACT_HI_ACTINST ( + ID_ varchar(64) not null, + PROC_DEF_ID_ varchar(64) not null, + PROC_INST_ID_ varchar(64) not null, + EXECUTION_ID_ varchar(64) not null, + ACT_ID_ varchar(255) not null, + TASK_ID_ varchar(64), + CALL_PROC_INST_ID_ varchar(64), + ACT_NAME_ varchar(255), + ACT_TYPE_ varchar(255) not null, + ASSIGNEE_ varchar(255), + START_TIME_ datetime(3) not null, + END_TIME_ datetime(3), + DURATION_ bigint, + TENANT_ID_ varchar(255) default '', + primary key (ID_) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin; + +create table ACT_HI_TASKINST ( + ID_ varchar(64) not null, + PROC_DEF_ID_ varchar(64), + TASK_DEF_KEY_ varchar(255), + PROC_INST_ID_ varchar(64), + EXECUTION_ID_ varchar(64), + NAME_ varchar(255), + PARENT_TASK_ID_ varchar(64), + DESCRIPTION_ varchar(4000), + OWNER_ varchar(255), + ASSIGNEE_ varchar(255), + START_TIME_ datetime(3) not null, + CLAIM_TIME_ datetime(3), + END_TIME_ datetime(3), + DURATION_ bigint, + DELETE_REASON_ varchar(4000), + PRIORITY_ integer, + DUE_DATE_ datetime(3), + FORM_KEY_ varchar(255), + CATEGORY_ varchar(255), + TENANT_ID_ varchar(255) default '', + primary key (ID_) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin; + +create table ACT_HI_VARINST ( + ID_ varchar(64) not null, + PROC_INST_ID_ varchar(64), + EXECUTION_ID_ varchar(64), + TASK_ID_ varchar(64), + NAME_ varchar(255) not null, + VAR_TYPE_ varchar(100), + REV_ integer, + BYTEARRAY_ID_ varchar(64), + DOUBLE_ double, + LONG_ bigint, + TEXT_ varchar(4000), + TEXT2_ varchar(4000), + CREATE_TIME_ datetime(3), + LAST_UPDATED_TIME_ datetime(3), + primary key (ID_) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin; + +create table ACT_HI_DETAIL ( + ID_ varchar(64) not null, + TYPE_ varchar(255) not null, + PROC_INST_ID_ varchar(64), + EXECUTION_ID_ varchar(64), + TASK_ID_ varchar(64), + ACT_INST_ID_ varchar(64), + NAME_ varchar(255) not null, + VAR_TYPE_ varchar(255), + REV_ integer, + TIME_ datetime(3) not null, + BYTEARRAY_ID_ varchar(64), + DOUBLE_ double, + LONG_ bigint, + TEXT_ varchar(4000), + TEXT2_ varchar(4000), + primary key (ID_) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin; + +create table ACT_HI_COMMENT ( + ID_ varchar(64) not null, + TYPE_ varchar(255), + TIME_ datetime(3) not null, + USER_ID_ varchar(255), + TASK_ID_ varchar(64), + PROC_INST_ID_ varchar(64), + ACTION_ varchar(255), + MESSAGE_ varchar(4000), + FULL_MSG_ LONGBLOB, + primary key (ID_) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin; + +create table ACT_HI_ATTACHMENT ( + ID_ varchar(64) not null, + REV_ integer, + USER_ID_ varchar(255), + NAME_ varchar(255), + DESCRIPTION_ varchar(4000), + TYPE_ varchar(255), + TASK_ID_ varchar(64), + PROC_INST_ID_ varchar(64), + URL_ varchar(4000), + CONTENT_ID_ varchar(64), + TIME_ datetime(3), + primary key (ID_) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin; + +create table ACT_HI_IDENTITYLINK ( + ID_ varchar(64), + GROUP_ID_ varchar(255), + TYPE_ varchar(255), + USER_ID_ varchar(255), + TASK_ID_ varchar(64), + PROC_INST_ID_ varchar(64), + primary key (ID_) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin; + + +create index ACT_IDX_HI_PRO_INST_END on ACT_HI_PROCINST(END_TIME_); +create index ACT_IDX_HI_PRO_I_BUSKEY on ACT_HI_PROCINST(BUSINESS_KEY_); +create index ACT_IDX_HI_ACT_INST_START on ACT_HI_ACTINST(START_TIME_); +create index ACT_IDX_HI_ACT_INST_END on ACT_HI_ACTINST(END_TIME_); +create index ACT_IDX_HI_DETAIL_PROC_INST on ACT_HI_DETAIL(PROC_INST_ID_); +create index ACT_IDX_HI_DETAIL_ACT_INST on ACT_HI_DETAIL(ACT_INST_ID_); +create index ACT_IDX_HI_DETAIL_TIME on ACT_HI_DETAIL(TIME_); +create index ACT_IDX_HI_DETAIL_NAME on ACT_HI_DETAIL(NAME_); +create index ACT_IDX_HI_DETAIL_TASK_ID on ACT_HI_DETAIL(TASK_ID_); +create index ACT_IDX_HI_PROCVAR_PROC_INST on ACT_HI_VARINST(PROC_INST_ID_); +create index ACT_IDX_HI_PROCVAR_NAME_TYPE on ACT_HI_VARINST(NAME_, VAR_TYPE_); +create index ACT_IDX_HI_PROCVAR_TASK_ID on ACT_HI_VARINST(TASK_ID_); +create index ACT_IDX_HI_ACT_INST_PROCINST on ACT_HI_ACTINST(PROC_INST_ID_, ACT_ID_); +create index ACT_IDX_HI_ACT_INST_EXEC on ACT_HI_ACTINST(EXECUTION_ID_, ACT_ID_); +create index ACT_IDX_HI_IDENT_LNK_USER on ACT_HI_IDENTITYLINK(USER_ID_); +create index ACT_IDX_HI_IDENT_LNK_TASK on ACT_HI_IDENTITYLINK(TASK_ID_); +create index ACT_IDX_HI_IDENT_LNK_PROCINST on ACT_HI_IDENTITYLINK(PROC_INST_ID_); +create index ACT_IDX_HI_TASK_INST_PROCINST on ACT_HI_TASKINST(PROC_INST_ID_); + +create table ACT_ID_GROUP ( + ID_ varchar(64), + REV_ integer, + NAME_ varchar(255), + TYPE_ varchar(255), + primary key (ID_) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin; + +create table ACT_ID_MEMBERSHIP ( + USER_ID_ varchar(64), + GROUP_ID_ varchar(64), + primary key (USER_ID_, GROUP_ID_) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin; + +create table ACT_ID_USER ( + ID_ varchar(64), + REV_ integer, + FIRST_ varchar(255), + LAST_ varchar(255), + EMAIL_ varchar(255), + PWD_ varchar(255), + PICTURE_ID_ varchar(64), + primary key (ID_) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin; + +create table ACT_ID_INFO ( + ID_ varchar(64), + REV_ integer, + USER_ID_ varchar(64), + TYPE_ varchar(64), + KEY_ varchar(255), + VALUE_ varchar(255), + PASSWORD_ LONGBLOB, + PARENT_ID_ varchar(255), + primary key (ID_) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin; + +alter table ACT_ID_MEMBERSHIP + add constraint ACT_FK_MEMB_GROUP +foreign key (GROUP_ID_) +references ACT_ID_GROUP (ID_); + +alter table ACT_ID_MEMBERSHIP + add constraint ACT_FK_MEMB_USER +foreign key (USER_ID_) +references ACT_ID_USER (ID_); + +COMMIT; + +-- ----------------------------------------------------- +-- Create Quartz tables +-- ----------------------------------------------------- + +DROP SCHEMA IF EXISTS openbook_jobs; +CREATE SCHEMA openbook_jobs DEFAULT CHARACTER SET utf8; + +GRANT ALL PRIVILEGES ON openbook_jobs.* TO openbook@'%' IDENTIFIED BY '{% raw %}{{ openbook_database_password }}{% endraw %}'; +GRANT ALL PRIVILEGES ON openbook_jobs.* TO openbook@localhost IDENTIFIED BY '{% raw %}{{ openbook_database_password }}{% endraw %}'; +FLUSH PRIVILEGES; + +USE openbook_jobs; + +CREATE TABLE QRTZ_JOB_DETAILS( + SCHED_NAME VARCHAR(120) NOT NULL, + JOB_NAME VARCHAR(200) NOT NULL, + JOB_GROUP VARCHAR(200) NOT NULL, + DESCRIPTION VARCHAR(250) NULL, + JOB_CLASS_NAME VARCHAR(250) NOT NULL, + IS_DURABLE VARCHAR(1) NOT NULL, + IS_NONCONCURRENT VARCHAR(1) NOT NULL, + IS_UPDATE_DATA VARCHAR(1) NOT NULL, + REQUESTS_RECOVERY VARCHAR(1) NOT NULL, + JOB_DATA BLOB NULL, +PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)) +ENGINE=InnoDB; + +CREATE TABLE QRTZ_TRIGGERS ( + SCHED_NAME VARCHAR(120) NOT NULL, + TRIGGER_NAME VARCHAR(200) NOT NULL, + TRIGGER_GROUP VARCHAR(200) NOT NULL, + JOB_NAME VARCHAR(200) NOT NULL, + JOB_GROUP VARCHAR(200) NOT NULL, + DESCRIPTION VARCHAR(250) NULL, + NEXT_FIRE_TIME BIGINT(13) NULL, + PREV_FIRE_TIME BIGINT(13) NULL, + PRIORITY INTEGER NULL, + TRIGGER_STATE VARCHAR(16) NOT NULL, + TRIGGER_TYPE VARCHAR(8) NOT NULL, + START_TIME BIGINT(13) NOT NULL, + END_TIME BIGINT(13) NULL, + CALENDAR_NAME VARCHAR(200) NULL, + MISFIRE_INSTR SMALLINT(2) NULL, + JOB_DATA BLOB NULL, +PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), +FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) +REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP)) +ENGINE=InnoDB; + +CREATE TABLE QRTZ_SIMPLE_TRIGGERS ( + SCHED_NAME VARCHAR(120) NOT NULL, + TRIGGER_NAME VARCHAR(200) NOT NULL, + TRIGGER_GROUP VARCHAR(200) NOT NULL, + REPEAT_COUNT BIGINT(7) NOT NULL, + REPEAT_INTERVAL BIGINT(12) NOT NULL, + TIMES_TRIGGERED BIGINT(10) NOT NULL, +PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), +FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) +REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)) +ENGINE=InnoDB; + +CREATE TABLE QRTZ_CRON_TRIGGERS ( + SCHED_NAME VARCHAR(120) NOT NULL, + TRIGGER_NAME VARCHAR(200) NOT NULL, + TRIGGER_GROUP VARCHAR(200) NOT NULL, + CRON_EXPRESSION VARCHAR(120) NOT NULL, + TIME_ZONE_ID VARCHAR(80), +PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), +FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) +REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)) +ENGINE=InnoDB; + +CREATE TABLE QRTZ_SIMPROP_TRIGGERS ( + SCHED_NAME VARCHAR(120) NOT NULL, + TRIGGER_NAME VARCHAR(200) NOT NULL, + TRIGGER_GROUP VARCHAR(200) NOT NULL, + STR_PROP_1 VARCHAR(512) NULL, + STR_PROP_2 VARCHAR(512) NULL, + STR_PROP_3 VARCHAR(512) NULL, + INT_PROP_1 INT NULL, + INT_PROP_2 INT NULL, + LONG_PROP_1 BIGINT NULL, + LONG_PROP_2 BIGINT NULL, + DEC_PROP_1 NUMERIC(13,4) NULL, + DEC_PROP_2 NUMERIC(13,4) NULL, + BOOL_PROP_1 VARCHAR(1) NULL, + BOOL_PROP_2 VARCHAR(1) NULL, +PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), +FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) +REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)) +ENGINE=InnoDB; + +CREATE TABLE QRTZ_BLOB_TRIGGERS ( + SCHED_NAME VARCHAR(120) NOT NULL, + TRIGGER_NAME VARCHAR(200) NOT NULL, + TRIGGER_GROUP VARCHAR(200) NOT NULL, + BLOB_DATA BLOB NULL, +PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), +INDEX (SCHED_NAME,TRIGGER_NAME, TRIGGER_GROUP), +FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) +REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)) +ENGINE=InnoDB; + +CREATE TABLE QRTZ_CALENDARS ( + SCHED_NAME VARCHAR(120) NOT NULL, + CALENDAR_NAME VARCHAR(200) NOT NULL, + CALENDAR BLOB NOT NULL, +PRIMARY KEY (SCHED_NAME,CALENDAR_NAME)) +ENGINE=InnoDB; + +CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS ( + SCHED_NAME VARCHAR(120) NOT NULL, + TRIGGER_GROUP VARCHAR(200) NOT NULL, +PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP)) +ENGINE=InnoDB; + +CREATE TABLE QRTZ_FIRED_TRIGGERS ( + SCHED_NAME VARCHAR(120) NOT NULL, + ENTRY_ID VARCHAR(95) NOT NULL, + TRIGGER_NAME VARCHAR(200) NOT NULL, + TRIGGER_GROUP VARCHAR(200) NOT NULL, + INSTANCE_NAME VARCHAR(200) NOT NULL, + FIRED_TIME BIGINT(13) NOT NULL, + SCHED_TIME BIGINT(13) NOT NULL, + PRIORITY INTEGER NOT NULL, + STATE VARCHAR(16) NOT NULL, + JOB_NAME VARCHAR(200) NULL, + JOB_GROUP VARCHAR(200) NULL, + IS_NONCONCURRENT VARCHAR(1) NULL, + REQUESTS_RECOVERY VARCHAR(1) NULL, +PRIMARY KEY (SCHED_NAME,ENTRY_ID)) +ENGINE=InnoDB; + +CREATE TABLE QRTZ_SCHEDULER_STATE ( + SCHED_NAME VARCHAR(120) NOT NULL, + INSTANCE_NAME VARCHAR(200) NOT NULL, + LAST_CHECKIN_TIME BIGINT(13) NOT NULL, + CHECKIN_INTERVAL BIGINT(13) NOT NULL, +PRIMARY KEY (SCHED_NAME,INSTANCE_NAME)) +ENGINE=InnoDB; + +CREATE TABLE QRTZ_LOCKS ( + SCHED_NAME VARCHAR(120) NOT NULL, + LOCK_NAME VARCHAR(40) NOT NULL, +PRIMARY KEY (SCHED_NAME,LOCK_NAME)) +ENGINE=InnoDB; + +CREATE INDEX IDX_QRTZ_J_REQ_RECOVERY ON QRTZ_JOB_DETAILS(SCHED_NAME,REQUESTS_RECOVERY); +CREATE INDEX IDX_QRTZ_J_GRP ON QRTZ_JOB_DETAILS(SCHED_NAME,JOB_GROUP); + +CREATE INDEX IDX_QRTZ_T_J ON QRTZ_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP); +CREATE INDEX IDX_QRTZ_T_JG ON QRTZ_TRIGGERS(SCHED_NAME,JOB_GROUP); +CREATE INDEX IDX_QRTZ_T_C ON QRTZ_TRIGGERS(SCHED_NAME,CALENDAR_NAME); +CREATE INDEX IDX_QRTZ_T_G ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP); +CREATE INDEX IDX_QRTZ_T_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE); +CREATE INDEX IDX_QRTZ_T_N_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE); +CREATE INDEX IDX_QRTZ_T_N_G_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE); +CREATE INDEX IDX_QRTZ_T_NEXT_FIRE_TIME ON QRTZ_TRIGGERS(SCHED_NAME,NEXT_FIRE_TIME); +CREATE INDEX IDX_QRTZ_T_NFT_ST ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME); +CREATE INDEX IDX_QRTZ_T_NFT_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME); +CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE); +CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE_GRP ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE); + +CREATE INDEX IDX_QRTZ_FT_TRIG_INST_NAME ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME); +CREATE INDEX IDX_QRTZ_FT_INST_JOB_REQ_RCVRY ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY); +CREATE INDEX IDX_QRTZ_FT_J_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP); +CREATE INDEX IDX_QRTZ_FT_JG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_GROUP); +CREATE INDEX IDX_QRTZ_FT_T_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP); +CREATE INDEX IDX_QRTZ_FT_TG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_GROUP); + +COMMIT; diff --git a/salt/openbook/database/files/debconfrc b/salt/openbook/database/files/debconfrc new file mode 100644 index 0000000..689cd64 --- /dev/null +++ b/salt/openbook/database/files/debconfrc @@ -0,0 +1,2 @@ +mariadb-server-10.1 mysql-server/root_password password {% raw %}{{ openbook_database_password }}{% endraw %} +mariadb-server-10.1 mysql-server/root_password_again password {% raw %}{{ openbook_database_password }}{% endraw %} diff --git a/salt/openbook/database/files/debian.cnf b/salt/openbook/database/files/debian.cnf new file mode 100644 index 0000000..1da5473 --- /dev/null +++ b/salt/openbook/database/files/debian.cnf @@ -0,0 +1,11 @@ +[client] +host = localhost +user = debian-sys-maint +password = {% raw %}{{ openbook_database_password }}{% endraw %} +socket = /var/run/mysqld/mysqld.sock +[mysql_upgrade] +host = localhost +user = debian-sys-maint +password = {% raw %}{{ openbook_database_password }}{% endraw %} +socket = /var/run/mysqld/mysqld.sock +basedir = /usr diff --git a/salt/openbook/database/files/fix_permissions.sh b/salt/openbook/database/files/fix_permissions.sh new file mode 100644 index 0000000..0bf9c64 --- /dev/null +++ b/salt/openbook/database/files/fix_permissions.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +# wait for mysql to start +for i in {120..0}; do + if echo 'SELECT 1' | mysql &>/dev/null; then + break + fi + sleep 1 +done + +# privilege fixes - must be idempotent! +mysql <<EOF +DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('%', 'localhost', '127.0.0.1', '127.0.2.1', '::', '::1'); +DELETE FROM mysql.user WHERE User=''; +DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%'; +FLUSH PRIVILEGES; +GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '{% raw %}{{ openbook_database_password }}{% endraw %}' WITH GRANT OPTION; +GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY '{% raw %}{{ openbook_database_password }}{% endraw %}' WITH GRANT OPTION; +GRANT ALL PRIVILEGES ON *.* TO 'root'@'::1' IDENTIFIED BY '{% raw %}{{ openbook_database_password }}{% endraw %}' WITH GRANT OPTION; +GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '{% raw %}{{ openbook_database_password }}{% endraw %}' WITH GRANT OPTION; +GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY '{% raw %}{{ openbook_database_password }}{% endraw %}'; +GRANT ALL PRIVILEGES ON openbook.* TO 'openbook'@'localhost' IDENTIFIED BY '{% raw %}{{ openbook_database_password }}{% endraw %}'; +GRANT ALL PRIVILEGES ON openbook.* TO 'openbook'@'127.0.0.1' IDENTIFIED BY '{% raw %}{{ openbook_database_password }}{% endraw %}'; +GRANT ALL PRIVILEGES ON openbook.* TO 'openbook'@'::1' IDENTIFIED BY '{% raw %}{{ openbook_database_password }}{% endraw %}'; +GRANT ALL PRIVILEGES ON openbook.* TO 'openbook'@'%' IDENTIFIED BY '{% raw %}{{ openbook_database_password }}{% endraw %}'; +GRANT ALL PRIVILEGES ON openbook_jobs.* TO 'openbook'@'localhost' IDENTIFIED BY '{% raw %}{{ openbook_database_password }}{% endraw %}'; +GRANT ALL PRIVILEGES ON openbook_jobs.* TO 'openbook'@'127.0.0.1' IDENTIFIED BY '{% raw %}{{ openbook_database_password }}{% endraw %}'; +GRANT ALL PRIVILEGES ON openbook_jobs.* TO 'openbook'@'::1' IDENTIFIED BY '{% raw %}{{ openbook_database_password }}{% endraw %}'; +GRANT ALL PRIVILEGES ON openbook_jobs.* TO 'openbook'@'%' IDENTIFIED BY '{% raw %}{{ openbook_database_password }}{% endraw %}'; +GRANT ALL PRIVILEGES ON openbook_workflow.* TO 'openbook'@'localhost' IDENTIFIED BY '{% raw %}{{ openbook_database_password }}{% endraw %}'; +GRANT ALL PRIVILEGES ON openbook_workflow.* TO 'openbook'@'127.0.0.1' IDENTIFIED BY '{% raw %}{{ openbook_database_password }}{% endraw %}'; +GRANT ALL PRIVILEGES ON openbook_workflow.* TO 'openbook'@'::1' IDENTIFIED BY '{% raw %}{{ openbook_database_password }}{% endraw %}'; +GRANT ALL PRIVILEGES ON openbook_workflow.* TO 'openbook'@'%' IDENTIFIED BY '{% raw %}{{ openbook_database_password }}{% endraw %}'; +FLUSH PRIVILEGES; +EOF + +exit 0 diff --git a/salt/openbook/database/files/installdeps.sh b/salt/openbook/database/files/installdeps.sh new file mode 100644 index 0000000..cd068fa --- /dev/null +++ b/salt/openbook/database/files/installdeps.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +export DEBIAN_FRONTEND=noninteractive +apt-get -y install software-properties-common +apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8 +add-apt-repository 'deb [arch=amd64,i386] http://sgp1.mirrors.digitalocean.com/mariadb/repo/10.1/ubuntu xenial main' +apt-get update +apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" dist-upgrade +apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" install netcat mariadb-server-10.1 +service mysql stop + +exit 0 diff --git a/salt/openbook/database/files/my.cnf b/salt/openbook/database/files/my.cnf new file mode 100644 index 0000000..4752ae1 --- /dev/null +++ b/salt/openbook/database/files/my.cnf @@ -0,0 +1,169 @@ +# MariaDB database server configuration file. +# +# You can copy this file to one of: +# - "/etc/mysql/my.cnf" to set global options, +# - "~/.my.cnf" to set user-specific options. +# +# One can use all long options that the program supports. +# Run program with --help to get a list of available options and with +# --print-defaults to see which it would actually understand and use. +# +# For explanations see +# http://dev.mysql.com/doc/mysql/en/server-system-variables.html + +# This will be passed to all mysql clients +# It has been reported that passwords should be enclosed with ticks/quotes +# escpecially if they contain "#" chars... +# Remember to edit /etc/mysql/debian.cnf when changing the socket location. +[client] +port = 3306 +socket = /var/run/mysqld/mysqld.sock + +# Here is entries for some specific programs +# The following values assume you have at least 32M ram + +# This was formally known as [safe_mysqld]. Both versions are currently parsed. +[mysqld_safe] +socket = /var/run/mysqld/mysqld.sock +nice = 0 + +[mysqld] +# +# * Basic Settings +# +user = mysql +pid-file = /var/run/mysqld/mysqld.pid +socket = /var/run/mysqld/mysqld.sock +port = 3306 +basedir = /usr +datadir = /var/lib/mysql +tmpdir = /tmp +lc_messages_dir = /usr/share/mysql +lc_messages = en_US +skip-external-locking +# +# Instead of skip-networking the default is now to listen only on +# localhost which is more compatible and is not less secure. +bind-address = 0.0.0.0 +# +# * Fine Tuning +# +max_connections = 1000 +connect_timeout = 5 +wait_timeout = 600 +max_allowed_packet = 16M +thread_cache_size = 128 +sort_buffer_size = 4M +bulk_insert_buffer_size = 16M +tmp_table_size = 32M +max_heap_table_size = 32M +# +# * MyISAM +# +# This replaces the startup script and checks MyISAM tables if needed +# the first time they are touched. On error, make copy and try a repair. +myisam_recover_options = BACKUP +key_buffer_size = 128M +#open-files-limit = 2000 +table_open_cache = 400 +myisam_sort_buffer_size = 512M +concurrent_insert = 2 +read_buffer_size = 2M +read_rnd_buffer_size = 1M +# +# * Query Cache Configuration +# +# Cache only tiny result sets, so we can fit more in the query cache. +query_cache_limit = 128K +query_cache_size = 64M +# for more write intensive setups, set to DEMAND or OFF +#query_cache_type = DEMAND +# +# * Logging and Replication +# +# Both location gets rotated by the cronjob. +# Be aware that this log type is a performance killer. +# As of 5.1 you can enable the log at runtime! +#general_log_file = /var/log/mysql/mysql.log +#general_log = 1 +# +# Error logging goes to syslog due to /etc/mysql/conf.d/mysqld_safe_syslog.cnf. +# +# we do want to know about network errors and such +log_warnings = 2 +# +# Enable the slow query log to see queries with especially long duration +#slow_query_log[={0|1}] +slow_query_log_file = /var/log/mysql/mariadb-slow.log +long_query_time = 10 +#log_slow_rate_limit = 1000 +log_slow_verbosity = query_plan + +#log-queries-not-using-indexes +#log_slow_admin_statements +# +# The following can be used as easy to replay backup logs or for replication. +# note: if you are setting up a replication slave, see README.Debian about +# other settings you may need to change. +#server-id = 1 +#report_host = master1 +#auto_increment_increment = 2 +#auto_increment_offset = 1 +log_bin = /var/log/mysql/mariadb-bin +log_bin_index = /var/log/mysql/mariadb-bin.index +# not fab for performance, but safer +#sync_binlog = 1 +expire_logs_days = 10 +max_binlog_size = 100M +# slaves +#relay_log = /var/log/mysql/relay-bin +#relay_log_index = /var/log/mysql/relay-bin.index +#relay_log_info_file = /var/log/mysql/relay-bin.info +#log_slave_updates +#read_only +# +# If applications support it, this stricter sql_mode prevents some +# mistakes like inserting invalid dates etc. +#sql_mode = NO_ENGINE_SUBSTITUTION,TRADITIONAL +# +# * InnoDB +# +# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/. +# Read the manual for more InnoDB related options. There are many! +default_storage_engine = InnoDB +# you can't just change log file size, requires special procedure +#innodb_log_file_size = 50M +innodb_buffer_pool_size = 256M +innodb_log_buffer_size = 8M +innodb_file_per_table = 1 +innodb_open_files = 400 +innodb_io_capacity = 400 +innodb_flush_method = O_DIRECT +# +# * Security Features +# +# Read the manual, too, if you want chroot! +# chroot = /var/lib/mysql/ +# +# For generating SSL certificates I recommend the OpenSSL GUI "tinyca". +# +# ssl-ca=/etc/mysql/cacert.pem +# ssl-cert=/etc/mysql/server-cert.pem +# ssl-key=/etc/mysql/server-key.pem + +[mysqldump] +quick +quote-names +max_allowed_packet = 16M + +[mysql] +#no-auto-rehash # faster start of mysql but no tab completion + +[isamchk] +key_buffer = 16M + +# +# * IMPORTANT: Additional settings that can override those from this file! +# The files must end with '.cnf', otherwise they'll be ignored. +# +!includedir /etc/mysql/conf.d/ diff --git a/salt/openbook/database/files/run.sh b/salt/openbook/database/files/run.sh new file mode 100644 index 0000000..a956c28 --- /dev/null +++ b/salt/openbook/database/files/run.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +# find other running nodes +other_nodes_found=1 +for i in $(echo "{% raw %}{{ openbook_gcomm_addresses }}{% endraw %}" | sed -e 's|,| |g'); do + if [ "${i}" != "{% raw %}{{ ansible_default_ipv4.address }}{% endraw %}" ]; then + nc ${i} 4567 </dev/null >/dev/null + if [ "${?}" == "0" ]; then + other_nodes_found=0 + fi + fi +done + +# bootstrap or cluster join depending on whether other nodes were found +if [ "${other_nodes_found}" == "0" ]; then + mysql_args="" +else + mysql_args="--wsrep-new-cluster" +fi + +docker run -d --net=host -v {{ pillar["database"]["dirs"]["etc_openbook_database"]["name"] }}:/etc/mysql -v {{ pillar["database"]["dirs"]["var_lib_mysql"]["name"] }}:/var/lib/mysql -v {{ pillar["database"]["dirs"]["var_log_mysql"]["name"] }}:/var/log/mysql --name {{ pillar["database"]["container_name"] }} {{ pillar["registry"]["url"] }}/{{ pillar["database"]["image_name"] }} ${mysql_args} + +exit 0 diff --git a/salt/openbook/database/files/sources.list b/salt/openbook/database/files/sources.list new file mode 100644 index 0000000..4e624e5 --- /dev/null +++ b/salt/openbook/database/files/sources.list @@ -0,0 +1,54 @@ +# deb http://de.archive.ubuntu.com/ubuntu/ xenial main restricted + +# deb http://de.archive.ubuntu.com/ubuntu/ xenial-updates main restricted +# deb http://security.ubuntu.com/ubuntu xenial-security main restricted + +# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to +# newer versions of the distribution. +deb http://de.archive.ubuntu.com/ubuntu/ xenial main restricted +# deb-src http://de.archive.ubuntu.com/ubuntu/ xenial main restricted + +## Major bug fix updates produced after the final release of the +## distribution. +deb http://de.archive.ubuntu.com/ubuntu/ xenial-updates main restricted +# deb-src http://de.archive.ubuntu.com/ubuntu/ xenial-updates main restricted + +## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu +## team. Also, please note that software in universe WILL NOT receive any +## review or updates from the Ubuntu security team. +deb http://de.archive.ubuntu.com/ubuntu/ xenial universe +# deb-src http://de.archive.ubuntu.com/ubuntu/ xenial universe +deb http://de.archive.ubuntu.com/ubuntu/ xenial-updates universe +# deb-src http://de.archive.ubuntu.com/ubuntu/ xenial-updates universe + +## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu +## team, and may not be under a free licence. Please satisfy yourself as to +## your rights to use the software. Also, please note that software in +## multiverse WILL NOT receive any review or updates from the Ubuntu +## security team. +deb http://de.archive.ubuntu.com/ubuntu/ xenial multiverse +# deb-src http://de.archive.ubuntu.com/ubuntu/ xenial multiverse +deb http://de.archive.ubuntu.com/ubuntu/ xenial-updates multiverse +# deb-src http://de.archive.ubuntu.com/ubuntu/ xenial-updates multiverse + +## N.B. software from this repository may not have been tested as +## extensively as that contained in the main release, although it includes +## newer versions of some applications which may provide useful features. +## Also, please note that software in backports WILL NOT receive any review +## or updates from the Ubuntu security team. +deb http://de.archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse +# deb-src http://de.archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse + +## Uncomment the following two lines to add software from Canonical's +## 'partner' repository. +## This software is not part of Ubuntu, but is offered by Canonical and the +## respective vendors as a service to Ubuntu users. +# deb http://archive.canonical.com/ubuntu xenial partner +# deb-src http://archive.canonical.com/ubuntu xenial partner + +deb http://security.ubuntu.com/ubuntu xenial-security main restricted +# deb-src http://security.ubuntu.com/ubuntu xenial-security main restricted +deb http://security.ubuntu.com/ubuntu xenial-security universe +# deb-src http://security.ubuntu.com/ubuntu xenial-security universe +deb http://security.ubuntu.com/ubuntu xenial-security multiverse +# deb-src http://security.ubuntu.com/ubuntu xenial-security multiverse diff --git a/salt/openbook/database/files/start_galera_node.sh b/salt/openbook/database/files/start_galera_node.sh new file mode 100644 index 0000000..29b7e55 --- /dev/null +++ b/salt/openbook/database/files/start_galera_node.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +# the mysql database files will be missing if this is the first startup after a fresh install +if [ ! -d "{{ pillar["database"]["dirs"]["var_lib_mysql"]["name"] }}/mysql" ]; then + export DEBIAN_FRONTEND=noninteractive + . /etc/profile + debconf-set-selections /etc/mysql/conf.d/debconfrc + dpkg-reconfigure mariadb-server-10.1 +fi + +/etc/mysql/bin/fix_permissions.sh & +exec /usr/sbin/mysqld ${@} diff --git a/salt/openbook/database/init.sls b/salt/openbook/database/init.sls new file mode 100644 index 0000000..be87bf6 --- /dev/null +++ b/salt/openbook/database/init.sls @@ -0,0 +1,55 @@ +{% for dir in pillar["database"]["dirs"].items() %} +database_dirs_{{ dir[0] }}: + file.directory: +{% if dir[1]["relative_to_buildroot"] %} + - name: {{ pillar["database"]["build_dir"] }}/{{ dir[1]["name"] }} +{% else %} + - name: {{ dir[1]["name"] }} +{% endif %} + - user: root + - group: root + - mode: {{ dir[1]["mode"] }} + - makedirs: True +{% endfor %} + +{% for file in pillar["database"]["files"].items() %} +database_files_{{ file[0] }}: + file.managed: +{% if file[1]["relative_to_buildroot"] %} + - name: {{ pillar["database"]["build_dir"] }}/{{ file[1]["path"] }}/{{ file[1]["name"] }} +{% else %} + - name: {{ file[1]["path"] }}/{{ file[1]["name"] }} +{% endif %} + - source: salt://openbook/database/files/{{ file[1]["source"] }} +{% if file[1]["is_template"] %} + - template: jinja +{% endif %} + - user: root + - group: root + - mode: {{ file[1]["mode"] }} +{% if file[1]["ansible"] %} +ansible_database_dirs_{{ file[0] }}: + file.directory: +{% if file[1]["is_template"] %} + - name: {{ pillar["ansible"]["build_dir"] }}/templates/database/{{ file[1]["path"] }} +{% else %} + - name: {{ pillar["ansible"]["build_dir"] }}/files/database/{{ file[1]["path"] }} +{% endif %} + - user: root + - group: root + - mode: "0755" + - makedirs: True +ansible_database_files_{{ file[0] }}: + file.managed: +{% if file[1]["is_template"] %} + - name: {{ pillar["ansible"]["build_dir"] }}/templates/database/{{ file[1]["path"] }}/{{ file[1]["name"] }} + - template: jinja +{% else %} + - name: {{ pillar["ansible"]["build_dir"] }}/files/database/{{ file[1]["path"] }}/{{ file[1]["name"] }} +{% endif %} + - source: salt://openbook/database/files/{{ file[1]["source"] }} + - user: root + - group: root + - mode: {{ file[1]["mode"] }} +{% endif %} +{% endfor %} |
