--- | |||||
driver: | |||||
name: docker | |||||
hostname: galera.ci.local | |||||
use_sudo: false | |||||
provisioner: | |||||
name: salt_solo | |||||
salt_install: bootstrap | |||||
salt_bootstrap_url: https://bootstrap.saltstack.com | |||||
salt_version: latest | |||||
require_chef: false | |||||
log_level: error | |||||
formula: galera | |||||
grains: | |||||
noservices: True | |||||
state_top: | |||||
base: | |||||
"*": | |||||
- linux | |||||
- galera | |||||
pillars: | |||||
top.sls: | |||||
base: | |||||
"*": | |||||
- galera | |||||
- galeracluster_debian_repo | |||||
pillars-from-files: | |||||
galeracluster_debian_repo.sls: tests/pillar/repo_galeracluster.sls | |||||
dependencies: | |||||
- name: mysql | |||||
repo: git | |||||
source: https://github.com/salt-formulas/salt-formula-mysql.git | |||||
dependencies: | |||||
- name: linux | |||||
repo: git | |||||
source: https://github.com/salt-formulas/salt-formula-linux.git | |||||
verifier: | |||||
name: inspec | |||||
sudo: true | |||||
platforms: | |||||
- name: <%=ENV['PLATFORM'] || 'ubuntu-xenial'%> | |||||
driver_config: | |||||
image: <%=ENV['PLATFORM'] || 'trevorj/salty-whales:xenial'%> | |||||
platform: ubuntu | |||||
suites: | |||||
- name: master_cluster | |||||
provisioner: | |||||
pillars-from-files: | |||||
galera.sls: tests/pillar/master_cluster.sls | |||||
- name: slave_cluster | |||||
provisioner: | |||||
pillars-from-files: | |||||
galera.sls: tests/pillar/slave_cluster.sls | |||||
# vim: ft=yaml sw=2 ts=2 sts=2 tw=125 |
sudo: required | |||||
services: | |||||
- docker | |||||
install: | |||||
- pip install PyYAML | |||||
- pip install virtualenv | |||||
- | | |||||
test -e Gemfile || cat <<EOF > Gemfile | |||||
source 'https://rubygems.org' | |||||
gem 'rake' | |||||
gem 'test-kitchen' | |||||
gem 'kitchen-docker' | |||||
gem 'kitchen-inspec' | |||||
gem 'inspec' | |||||
gem 'kitchen-salt', :git => 'https://github.com/salt-formulas/kitchen-salt.git' | |||||
- bundle install | |||||
env: | |||||
- PLATFORM=trevorj/salty-whales:trusty | |||||
- PLATFORM=trevorj/salty-whales:xenial | |||||
before_script: | |||||
- set -o pipefail | |||||
- make test | tail | |||||
script: | |||||
- test ! -e .kitchen.yml || bundle exec kitchen test -t tests/integration | |||||
notifications: | |||||
webhooks: | |||||
urls: | |||||
- https://webhooks.gitter.im/e/6123573504759330786b | |||||
on_success: change # options: [always|never|change] default: always | |||||
on_failure: never # options: [always|never|change] default: always | |||||
on_start: never # options: [always|never|change] default: always | |||||
on_cancel: never # options: [always|never|change] default: always | |||||
on_error: never # options: [always|never|change] default: always | |||||
email: false |
{%- set master = salt['grains.filter_by']({ | {%- set master = salt['grains.filter_by']({ | ||||
'Debian': { | 'Debian': { | ||||
'pkgs': ['mysql-server-wsrep-5.6', 'galera-3', 'rsync', 'python-mysqldb', 'psmisc', 'netcat', 'percona-xtrabackup', 'socat', 'libdbd-mysql', 'python-pymysql'], | |||||
'pkgs': ['mysql-wsrep-5.6', 'galera-3', 'rsync', 'python-mysqldb', 'psmisc', 'netcat', 'percona-xtrabackup', 'socat', 'libdbd-mysql', 'python-pymysql'], | |||||
'service': 'mysql', | 'service': 'mysql', | ||||
'wsrep_provider': '/usr/lib/galera/libgalera_smm.so', | 'wsrep_provider': '/usr/lib/galera/libgalera_smm.so', | ||||
'log_file': '/var/log/mysql.log', | 'log_file': '/var/log/mysql.log', | ||||
{%- set slave = salt['grains.filter_by']({ | {%- set slave = salt['grains.filter_by']({ | ||||
'Debian': { | 'Debian': { | ||||
'pkgs': ['mysql-server-wsrep-5.6', 'galera-3', 'rsync', 'python-mysqldb', 'libmysqlclient18', 'psmisc', 'netcat', 'percona-xtrabackup', 'socat', 'libdbd-mysql', 'python-pymysql'], | |||||
'pkgs': ['mysql-wsrep-5.6', 'galera-3', 'rsync', 'python-mysqldb', 'libmysqlclient18', 'psmisc', 'netcat', 'percona-xtrabackup', 'socat', 'libdbd-mysql', 'python-pymysql'], | |||||
'service': 'mysql', | 'service': 'mysql', | ||||
'wsrep_provider': '/usr/lib/galera/libgalera_smm.so', | 'wsrep_provider': '/usr/lib/galera/libgalera_smm.so', | ||||
'log_file': '/var/log/mysql.log', | 'log_file': '/var/log/mysql.log', | ||||
'log_file': '/var/log/mariadb/mariadb.log', | 'log_file': '/var/log/mariadb/mariadb.log', | ||||
'socket': '/var/run/mariadb/mysqld.sock', | 'socket': '/var/run/mariadb/mysqld.sock', | ||||
'config': '/etc/my.cnf', | 'config': '/etc/my.cnf', | ||||
}, | |||||
}, merge=pillar.galera.get('slave', {})) %} | |||||
}, | |||||
}, merge=salt['grains.filter_by']({ | |||||
'trusty': { | |||||
'pkgs': ['mysql-wsrep-5.6', 'galera-3', 'rsync', 'python-mysqldb', 'libmysqlclient18', 'psmisc', 'netcat', 'percona-xtrabackup', 'socat', 'libdbd-mysql', 'python-pymysql'], | |||||
'service': 'mysql', | |||||
'wsrep_provider': '/usr/lib/galera/libgalera_smm.so', | |||||
'log_file': '/var/log/mysql.log', | |||||
'socket': '/var/run/mysqld/mysqld.sock', | |||||
'config': '/etc/mysql/my.cnf', | |||||
}, | |||||
'xenial': { | |||||
'pkgs': ['mysql-wsrep-5.6', 'galera-3', 'rsync', 'python-mysqldb', 'libmysqlclient-dev', 'psmisc', 'netcat', 'percona-xtrabackup', 'socat', 'libdbd-mysql', 'python-pymysql'], | |||||
'service': 'mysql', | |||||
'wsrep_provider': '/usr/lib/galera/libgalera_smm.so', | |||||
'log_file': '/var/log/mysql.log', | |||||
'socket': '/var/run/mysqld/mysqld.sock', | |||||
'config': '/etc/mysql/my.cnf', | |||||
}, | |||||
}, grain='oscodename', merge=pillar.galera.get('slave', {}))) %} |
pkg.installed: | pkg.installed: | ||||
- names: {{ master.pkgs }} | - names: {{ master.pkgs }} | ||||
- refresh: true | - refresh: true | ||||
- force_yes: True | |||||
galera_log_dir: | galera_log_dir: | ||||
file.directory: | file.directory: | ||||
- require_in: | - require_in: | ||||
- pkg: galera_packages | - pkg: galera_packages | ||||
{%- if not grains.get('noservices', False) %} | |||||
galera_init_start_service: | galera_init_start_service: | ||||
cmd.run: | cmd.run: | ||||
- name: /usr/local/sbin/galera_init.sh | - name: /usr/local/sbin/galera_init.sh | ||||
galera_bootstrap_stop_service: | galera_bootstrap_stop_service: | ||||
service.dead: | service.dead: | ||||
- name: {{ master.service }} | - name: {{ master.service }} | ||||
{%- if not grains.get('noservices', False) %} | |||||
- require: | - require: | ||||
- cmd: mysql_bootstrap_update_maint_password | - cmd: mysql_bootstrap_update_maint_password | ||||
{%- endif %} | |||||
{%- endif %} | |||||
galera_bootstrap_init_config: | galera_bootstrap_init_config: | ||||
file.managed: | file.managed: | ||||
- source: salt://galera/files/my.cnf.init | - source: salt://galera/files/my.cnf.init | ||||
- mode: 644 | - mode: 644 | ||||
- template: jinja | - template: jinja | ||||
{%- if not grains.get('noservices', False) %} | |||||
- require: | - require: | ||||
- service: galera_bootstrap_stop_service | - service: galera_bootstrap_stop_service | ||||
{%- endif %} | |||||
{%- if not grains.get('noservices', False) %} | |||||
galera_bootstrap_start_service_final: | galera_bootstrap_start_service_final: | ||||
cmd.run: | cmd.run: | ||||
- file: galera_bootstrap_init_config | - file: galera_bootstrap_init_config | ||||
- file: galera_bootstrap_script | - file: galera_bootstrap_script | ||||
{%- endif %} | |||||
galera_bootstrap_finish_flag: | galera_bootstrap_finish_flag: | ||||
file.touch: | file.touch: | ||||
- name: /var/lib/mysql/.galera_bootstrap | - name: /var/lib/mysql/.galera_bootstrap | ||||
{%- if not grains.get('noservices', False) %} | |||||
- require: | - require: | ||||
- cmd: galera_bootstrap_start_service_final | - cmd: galera_bootstrap_start_service_final | ||||
{%- endif %} | |||||
- watch_in: | - watch_in: | ||||
- file: galera_config | - file: galera_config | ||||
- source: salt://galera/files/my.cnf | - source: salt://galera/files/my.cnf | ||||
- mode: 644 | - mode: 644 | ||||
- template: jinja | - template: jinja | ||||
{%- if not grains.get('noservices', False) %} | |||||
- require_in: | - require_in: | ||||
- service: galera_service | - service: galera_service | ||||
{%- endif %} | |||||
{%- if not grains.get('noservices', False) %} | |||||
galera_service: | galera_service: | ||||
service.running: | service.running: | ||||
- reload: true | - reload: true | ||||
{%- endif %} | {%- endif %} | ||||
{%- endif %} |
{%- endfor %} | {%- endfor %} | ||||
{%- if not grains.get('noservices', False) %} | |||||
{%- for user in server.get('users', []) %} | {%- for user in server.get('users', []) %} | ||||
mysql_user_{{ user.name }}_{{ user.host }}: | mysql_user_{{ user.name }}_{{ user.host }}: | ||||
{%- endif %} | {%- endif %} | ||||
{%- endfor %} | {%- endfor %} | ||||
{%- endif %} | |||||
{%- endif %} | {%- endif %} |
pkg.installed: | pkg.installed: | ||||
- names: {{ slave.pkgs }} | - names: {{ slave.pkgs }} | ||||
- refresh: true | - refresh: true | ||||
- force_yes: True | |||||
galera_log_dir: | galera_log_dir: | ||||
file.directory: | file.directory: | ||||
- require_in: | - require_in: | ||||
- pkg: galera_packages | - pkg: galera_packages | ||||
{%- if not grains.get('noservices', False) %} | |||||
galera_init_start_service: | galera_init_start_service: | ||||
cmd.run: | cmd.run: | ||||
- name: /usr/local/sbin/galera_init.sh | - name: /usr/local/sbin/galera_init.sh | ||||
- require: | - require: | ||||
- cmd: mysql_bootstrap_update_maint_password | - cmd: mysql_bootstrap_update_maint_password | ||||
{%- endif %} | |||||
galera_bootstrap_init_config: | galera_bootstrap_init_config: | ||||
file.managed: | file.managed: | ||||
- name: {{ slave.config }} | - name: {{ slave.config }} | ||||
- source: salt://galera/files/my.cnf | - source: salt://galera/files/my.cnf | ||||
- mode: 644 | - mode: 644 | ||||
- template: jinja | - template: jinja | ||||
{%- if not grains.get('noservices', False) %} | |||||
- require: | - require: | ||||
- service: galera_bootstrap_stop_service | - service: galera_bootstrap_stop_service | ||||
{%- endif %} | |||||
{%- if not grains.get('noservices', False) %} | |||||
galera_bootstrap_start_service_final: | galera_bootstrap_start_service_final: | ||||
cmd.run: | cmd.run: | ||||
- file: galera_config | - file: galera_config | ||||
{%- endif %} | {%- endif %} | ||||
{%- endif %} | |||||
galera_config: | galera_config: | ||||
file.managed: | file.managed: | ||||
- source: salt://galera/files/my.cnf | - source: salt://galera/files/my.cnf | ||||
- mode: 644 | - mode: 644 | ||||
- template: jinja | - template: jinja | ||||
{%- if not grains.get('noservices', False) %} | |||||
- require_in: | - require_in: | ||||
- service: galera_service | - service: galera_service | ||||
{%- endif %} | |||||
{%- if not grains.get('noservices', False) %} | |||||
galera_service: | galera_service: | ||||
service.running: | service.running: | ||||
- reload: true | - reload: true | ||||
{%- endif %} | {%- endif %} | ||||
{%- endif %} |
name: "galera" | name: "galera" | ||||
version: "1.0" | version: "1.0" | ||||
source: "https://github.com/tcpcloud/salt-formula-galera" | |||||
source: "https://github.com/salt-formulas/salt-formula-galera" | |||||
dependencies: | dependencies: | ||||
- name: mysql | - name: mysql | ||||
source: "https://github.com/tcpcloud/salt-formula-mysql" | |||||
source: "https://github.com/salt-formulas/salt-formula-mysql" |
- name: haproxy | - name: haproxy | ||||
host: '%' | host: '%' | ||||
- name: haproxy | - name: haproxy | ||||
host: 127.0.0.1 | |||||
host: 127.0.0.1 |
linux: | |||||
system: | |||||
enabled: true | |||||
repo: | |||||
galeracluster: | |||||
source: 'deb http://releases.galeracluster.com/ubuntu {{ grains.get('oscodename') }} main' | |||||
key_id: BC19DDBA | |||||
key_server: hkp://p80.pool.sks-keyservers.net:80 | |||||
mitaka-staging_PPA: | |||||
source: "deb http://ppa.launchpad.net/ubuntu-cloud-archive/mitaka-staging/ubuntu trusty main" |