taperole 1.6.0 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +3 -0
  3. data/CONTRIBUTING.md +8 -0
  4. data/README.md +33 -4
  5. data/Rakefile +6 -0
  6. data/Vagrantfile +6 -7
  7. data/bin/tape +2 -89
  8. data/lib/taperole/commands/ansible.rb +56 -0
  9. data/lib/taperole/commands/installer.rb +19 -0
  10. data/lib/taperole/commands/tape.rb +32 -0
  11. data/lib/taperole/core/ansible_runner.rb +86 -0
  12. data/lib/taperole/core/installer.rb +87 -0
  13. data/lib/taperole/core/notifier.rb +47 -0
  14. data/lib/taperole/helpers/files.rb +76 -0
  15. data/lib/taperole/helpers/logging.rb +37 -0
  16. data/lib/taperole/notifiers/slack.rb +83 -0
  17. data/lib/taperole/version.rb +3 -0
  18. data/lib/taperole.rb +24 -0
  19. data/requirements.yml +1 -1
  20. data/roles/backend_checkout/tasks/main.yml +1 -0
  21. data/roles/delayed_job/tasks/main.yml +0 -15
  22. data/roles/deployer_user/tasks/keys.yml +6 -6
  23. data/roles/deployer_user/tasks/main.yml +0 -3
  24. data/roles/monit_install/tasks/main.yml +6 -0
  25. data/roles/monit_install/templates/monitrc.j2 +290 -0
  26. data/roles/nginx/tasks/main.yml +3 -4
  27. data/roles/nginx/templates/nginx_unicorn.j2 +1 -0
  28. data/roles/node/tasks/main.yml +2 -1
  29. data/roles/ruby/tasks/main.yml +3 -11
  30. data/roles/unicorn_install/tasks/main.yml +0 -3
  31. data/roles/unicorn_install/templates/unicorn.rb.j2 +1 -1
  32. data/roles/unicorn_install/templates/unicorn_init.j2 +1 -1
  33. data/roles/unicorn_install/templates/unicorn_monit.j2 +1 -1
  34. data/spec/commands/installer_spec.rb +117 -0
  35. data/spec/spec_helper.rb +24 -0
  36. data/taperole.gemspec +8 -1
  37. data/templates/base/deploy.example.yml +1 -0
  38. data/templates/base/hosts.example +1 -1
  39. data/templates/base/omnibox.example.yml +15 -0
  40. data/templates/base/rake.example.yml +18 -0
  41. data/templates/base/tape_vars.example.yml +9 -8
  42. data/templates/static_html/omnibox.example.yml +13 -0
  43. data/test/base_docker_box/Dockerfile +1 -1
  44. data/test/rails/Dockerfile +3 -3
  45. data/test/rails/start_rails.sh +1 -0
  46. data/test/rails/tape_vars.yml +2 -2
  47. data/vendor/ANXS.postgresql/.travis.yml +27 -12
  48. data/vendor/ANXS.postgresql/README.md +1 -1
  49. data/vendor/ANXS.postgresql/Vagrantfile +7 -2
  50. data/vendor/ANXS.postgresql/meta/.galaxy_install_info +1 -1
  51. data/vendor/ANXS.postgresql/meta/main.yml +1 -1
  52. data/vendor/ANXS.postgresql/tasks/configure.yml +10 -10
  53. data/vendor/ANXS.postgresql/tasks/databases.yml +27 -27
  54. data/vendor/ANXS.postgresql/tasks/install_yum.yml +2 -2
  55. data/vendor/ANXS.postgresql/tasks/users.yml +4 -4
  56. data/vendor/ANXS.postgresql/tasks/users_privileges.yml +3 -3
  57. data/vendor/ANXS.postgresql/tests/Dockerfile-centos6 +20 -0
  58. data/vendor/ANXS.postgresql/tests/Dockerfile-ubuntu14.04 +17 -0
  59. data/vendor/ANXS.postgresql/tests/playbook.yml +1 -1
  60. data/vendor/ANXS.postgresql/tests/vars.yml +2 -0
  61. data/vendor/Stouts.backup/.bumpversion.cfg +1 -1
  62. data/vendor/Stouts.backup/.travis.yml +0 -1
  63. data/vendor/Stouts.backup/CONTRIBUTORS +2 -0
  64. data/vendor/Stouts.backup/README.md +1 -0
  65. data/vendor/Stouts.backup/defaults/main.yml +3 -3
  66. data/vendor/Stouts.backup/meta/.galaxy_install_info +1 -1
  67. data/vendor/Stouts.backup/runtests.sh +65 -0
  68. data/vendor/Stouts.backup/tasks/backup.yml +3 -0
  69. data/vendor/Stouts.backup/tasks/configure.yml +13 -12
  70. data/vendor/Stouts.backup/tasks/install.deb.yml +6 -8
  71. data/vendor/Stouts.backup/tasks/install.red.yml +28 -0
  72. data/vendor/Stouts.backup/tasks/remove.yml +3 -3
  73. data/vendor/Stouts.backup/templates/cron.j2 +1 -1
  74. data/vendor/Stouts.backup/templates/duply.sh.j2 +219 -218
  75. data/vendor/Stouts.backup/templates/pre.j2 +6 -0
  76. data/vendor/Stouts.backup/templates/restore.j2 +6 -0
  77. data/vendor/Stouts.backup/vars/Debian.yml +3 -0
  78. data/vendor/Stouts.backup/vars/Ubuntu.yml +1 -0
  79. metadata +67 -10
  80. data/lib/tape/ansible_runner.rb +0 -130
  81. data/lib/tape/info.rb +0 -9
  82. data/lib/tape/installer.rb +0 -160
  83. data/lib/tape/notifiers/slack.rb +0 -79
  84. data/lib/tape/overwriter.rb +0 -14
  85. data/lib/tape/qemu_provisioner.rb +0 -167
  86. data/lib/tape.rb +0 -127
@@ -0,0 +1,117 @@
1
+ require 'spec_helper'
2
+
3
+ describe Taperole::Commands::Installer do
4
+ before(:each) do
5
+ setup
6
+ Taperole::Commands::Tape.new.invoke(described_class, command, [], options)
7
+ end
8
+
9
+ let(:setup) {}
10
+ let(:options) { { vagrant: false, quiet: true } }
11
+
12
+ let(:root) { Dir.entries(Dir.pwd) }
13
+ let(:taperole) { Dir.entries("#{Dir.pwd}/taperole") }
14
+
15
+ describe '#install' do
16
+ let(:command) { :install }
17
+
18
+ it 'adds .tape to .gitignore' do
19
+ expect(File.read('.gitignore')).to include('.tape')
20
+ end
21
+
22
+ it 'creates a taperoles directory' do
23
+ expect(root).to include('taperole')
24
+ end
25
+
26
+ context 'in a rails app' do
27
+ let(:setup) { FileUtils.touch('config.ru') }
28
+
29
+ it 'creates deploy.yml' do
30
+ expect(taperole).to include('deploy.yml')
31
+ end
32
+
33
+ it 'creates omnibox.yml' do
34
+ expect(taperole).to include('omnibox.yml')
35
+ end
36
+
37
+ it 'creates tape_vars.yml' do
38
+ expect(taperole).to include('tape_vars.yml')
39
+ end
40
+ end
41
+
42
+ context 'in a frontend app' do
43
+ let(:setup) { FileUtils.touch('package.json') }
44
+
45
+ it 'creates deploy.yml' do
46
+ expect(taperole).to include('deploy.yml')
47
+ end
48
+
49
+ it 'creates omnibox.yml' do
50
+ expect(taperole).to include('omnibox.yml')
51
+ end
52
+
53
+ it 'creates tape_vars.yml' do
54
+ expect(taperole).to include('tape_vars.yml')
55
+ end
56
+ end
57
+
58
+ it 'creates the hosts file' do
59
+ expect(taperole).to include('hosts')
60
+ end
61
+
62
+ it 'creates the roles directory' do
63
+ expect(taperole).to include('roles')
64
+ end
65
+
66
+ it 'creates the dev_keys directory' do
67
+ expect(root).to include('dev_keys')
68
+ end
69
+ end
70
+
71
+ describe '#uninstall' do
72
+ let(:setup) do
73
+ Dir.mkdir("#{Dir.pwd}/taperole")
74
+ FileUtils.touch("#{Dir.pwd}/taperole/omnibox.yml")
75
+ FileUtils.touch("#{Dir.pwd}/taperole/deploy.yml")
76
+ FileUtils.touch("#{Dir.pwd}/taperole/tape_vars.yml")
77
+ FileUtils.touch("#{Dir.pwd}/taperole/rake.yml")
78
+ FileUtils.touch("#{Dir.pwd}/taperole/roles")
79
+ FileUtils.touch("#{Dir.pwd}/taperole/hosts")
80
+ FileUtils.touch("#{Dir.pwd}/dev_keys")
81
+ FileUtils.touch("#{Dir.pwd}/Vagrantfile")
82
+ end
83
+ let(:command) { :uninstall }
84
+
85
+ it 'removes omnibox.yml' do
86
+ expect(taperole).to_not include('omnibox.yml')
87
+ end
88
+
89
+ it 'removes deploy.yml' do
90
+ expect(taperole).to_not include('deploy.yml')
91
+ end
92
+
93
+ it 'removes tape_vars.yml' do
94
+ expect(taperole).to_not include('tape_vars.yml')
95
+ end
96
+
97
+ it 'removes rake.yml' do
98
+ expect(taperole).to_not include('rake.yml')
99
+ end
100
+
101
+ it 'removes roles' do
102
+ expect(taperole).to_not include('roles')
103
+ end
104
+
105
+ it 'removes hosts' do
106
+ expect(taperole).to_not include('hosts')
107
+ end
108
+
109
+ it 'removes dev_keys' do
110
+ expect(root).to_not include('dev_keys')
111
+ end
112
+
113
+ it 'removes Vagrantfile' do
114
+ expect(root).to_not include('Vagrantfile')
115
+ end
116
+ end
117
+ end
@@ -0,0 +1,24 @@
1
+ require 'rspec'
2
+ require 'taperole'
3
+ require 'fileutils'
4
+
5
+ starting_directory = Dir.pwd
6
+ tape_testing_dir = '/tmp/tape-testing'
7
+
8
+ RSpec.configure do |config|
9
+ config.before(:suite) do
10
+ Dir.mkdir(tape_testing_dir)
11
+ Dir.chdir(tape_testing_dir)
12
+ end
13
+
14
+ config.before(:each) do
15
+ FileUtils.rm_rf(Dir.glob("#{tape_testing_dir}/*"))
16
+ FileUtils.touch("#{tape_testing_dir}/.gitignore")
17
+ Dir.chdir(tape_testing_dir)
18
+ end
19
+
20
+ config.after(:suite) do
21
+ Dir.chdir(starting_directory)
22
+ FileUtils.rm_rf(tape_testing_dir)
23
+ end
24
+ end
data/taperole.gemspec CHANGED
@@ -1,6 +1,9 @@
1
+ $:.push File.expand_path("../lib", __FILE__)
2
+ require 'taperole/version'
3
+
1
4
  Gem::Specification.new do |spec|
2
5
  spec.name = "taperole"
3
- spec.version = '1.6.0'
6
+ spec.version = Taperole::VERSION.dup
4
7
  spec.authors = ['Jack Forrest', 'Smashing Boxes', 'Brandon Mathis']
5
8
  spec.description = "General purpose server provisioning and application deployment toolkit"
6
9
  spec.email = ['jack@smashingboxes.com', 'brandon@sbox.es']
@@ -11,4 +14,8 @@ Gem::Specification.new do |spec|
11
14
  spec.files = `git ls-files`.split("\n")
12
15
  spec.executables = 'tape'
13
16
  spec.add_runtime_dependency 'slack-notifier', '~> 1.5'
17
+ spec.add_runtime_dependency 'thor', '~> 0.19.1'
18
+ spec.add_runtime_dependency 'colorize', '~> 0.8.1'
19
+ spec.add_development_dependency 'rspec', '~> 3.5'
20
+ spec.require_paths = ['lib']
14
21
  end
@@ -8,6 +8,7 @@
8
8
  user: "{{ deployer_user.name }}"
9
9
 
10
10
  roles:
11
+ - deployer_user
11
12
  - backend_checkout
12
13
  - backend_config
13
14
  - database_load
@@ -4,4 +4,4 @@
4
4
 
5
5
  # Vagrant Example
6
6
  # [omnibox]
7
- # localhost:2222 ansible_ssh_private_key_file=~/.vagrant.d/insecure_private_key be_app_env=production be_app_branch=master
7
+ # 192.168.13.37 ansible_ssh_private_key_file=~/.vagrant.d/insecure_private_key be_app_env=production be_app_branch=master
@@ -1,4 +1,19 @@
1
1
  ---
2
+ - hosts: omnibox
3
+ remote_user: root
4
+ gather_facts: no
5
+ pre_tasks:
6
+ - name: 'install python2'
7
+ raw: sudo apt-get -y install python-simplejson
8
+
9
+ - name: install apt requirements
10
+ become: yes
11
+ apt: pkg=aptitude
12
+
13
+ - name: update pre-installed packages
14
+ become: yes
15
+ apt: upgrade=full update_cache=yes
16
+
2
17
  - hosts: omnibox
3
18
  user: root
4
19
 
@@ -0,0 +1,18 @@
1
+ ---
2
+ - hosts: omnibox
3
+
4
+ vars_files:
5
+ - "{{tape_dir}}/vars/defaults.yml"
6
+ - tape_vars.yml
7
+
8
+ user: "{{ deployer_user.name }}"
9
+
10
+ tasks:
11
+ - name: Running rake {{ task }}
12
+ command: bash -lc "bin/rake {{ task }}"
13
+ register: rake_output
14
+ args:
15
+ chdir: "{{ be_app_path }}"
16
+
17
+ - name: Print the rake task output
18
+ debug: var=rake_output.stdout_lines
@@ -11,19 +11,20 @@ be_app_repo:
11
11
 
12
12
  slack_webhook_url:
13
13
 
14
- # Configure Postgresql Backups
14
+ ## Configure Postgresql Backups
15
+ ## Uncomment the following to enabled backups
15
16
  #
16
- # Store Backups on S3
17
+ ## Store Backups on S3 or seperate server via rsync
18
+ # S3
17
19
  # backup_dir: s3+http://[aws_access_key:aws_secret_access_key]@bucket_name[/folder]
18
- #
19
- # Store Backups on Seperate server via rsync
20
+ # Rsync
20
21
  # backup_dir: s3+http://[aws_access_key:aws_secret_access_key]@bucket_name[/folder]
21
22
  #
22
- # Adjust Cron Job Schedule (default is every night at 4am)
23
- # backup_schedule: "* */4 * * *"
24
- #
25
- # Change Which Servers are backed up
23
+ ## Which Servers are backed up
26
24
  # backup_hosts:
27
25
  # - production
28
26
  # - staging
29
27
  # - qa
28
+ #
29
+ ## Set Backup Schedule
30
+ # backup_schedule: "* */4 * * *"
@@ -1,4 +1,17 @@
1
1
  ---
2
+ - hosts: omnibox
3
+ remote_user: root
4
+ gather_facts: no
5
+ pre_tasks:
6
+ - name: 'install python2'
7
+ raw: sudo apt-get -y install python-simplejson
8
+
9
+ - name: install apt requirements
10
+ apt: pkg=aptitude
11
+
12
+ - name: update pre-installed packages
13
+ apt: upgrade=full update_cache=yes
14
+
2
15
  - hosts: omnibox
3
16
  user: root
4
17
 
@@ -1,5 +1,5 @@
1
1
  # Start with the ubuntu image
2
- FROM ubuntu
2
+ FROM ubuntu:16.04
3
3
 
4
4
  CMD ["bash"]
5
5
 
@@ -10,11 +10,11 @@ RUN truncate -s 0 /taperole/roles/general/tasks/swapfile.yml
10
10
  WORKDIR /taperole
11
11
  RUN gem build taperole.gemspec
12
12
  RUN gem install slack-notifier
13
- RUN gem install --local taperole
13
+ RUN gem install taperole # gem installs from local directory first, then remote
14
14
 
15
15
  # Configure tape
16
- RUN git clone https://github.com/BrandonMathis/vanilla-rails-app.git
17
- WORKDIR /taperole/vanilla-rails-app
16
+ RUN git clone https://github.com/smashingboxes/taperole_vanilla_4.git
17
+ WORKDIR /taperole/taperole_vanilla_4
18
18
  RUN echo 'n' | tape installer install
19
19
  ADD ./test/rails/tape_vars.yml taperole/tape_vars.yml
20
20
 
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env bash
2
+ rm -rf /tmp/*.sock
2
3
  service postgresql start
3
4
  service monit start
4
5
  monit start all
@@ -1,7 +1,7 @@
1
- app_name: vanilla
1
+ app_name: vanilla_4
2
2
 
3
3
  # Rails App Configs
4
- be_app_repo: https://github.com/BrandonMathis/vanilla-rails-app.git
4
+ be_app_repo: https://github.com/smashingboxes/taperole_vanilla_4.git
5
5
 
6
6
  # HTML/JS App Configs
7
7
  # Uncomment if you want to deploy a JS/HTML App
@@ -2,27 +2,38 @@
2
2
 
3
3
  language: python
4
4
  python: "2.7"
5
+ services:
6
+ - docker
7
+
5
8
  env:
6
- - ROLE_OPTIONS="postgresql_version=9.1 postgresql_shared_buffers=32MB"
7
- - ROLE_OPTIONS="postgresql_version=9.2 postgresql_shared_buffers=32MB"
8
- - ROLE_OPTIONS="postgresql_version=9.3 postgresql_shared_buffers=32MB"
9
- - ROLE_OPTIONS="postgresql_version=9.4 postgresql_shared_buffers=32MB"
10
- - ROLE_OPTIONS="postgresql_version=9.5 postgresql_shared_buffers=32MB"
9
+ global:
10
+ - ROLE_GLOBALS="postgresql_shared_buffers=32MB"
11
+ matrix:
12
+ - ROLE_OPTIONS="postgresql_version=9.1" ANSIBLE_VERSION="1.9.4"
13
+ - ROLE_OPTIONS="postgresql_version=9.2" ANSIBLE_VERSION="1.9.4"
14
+ - ROLE_OPTIONS="postgresql_version=9.3" ANSIBLE_VERSION="1.9.4"
15
+ - ROLE_OPTIONS="postgresql_version=9.4" ANSIBLE_VERSION="1.9.4"
16
+ - ROLE_OPTIONS="postgresql_version=9.5" ANSIBLE_VERSION="1.9.4"
17
+ - ROLE_OPTIONS="postgresql_version=9.1" ANSIBLE_VERSION="2.0.0.2"
18
+ - ROLE_OPTIONS="postgresql_version=9.2" ANSIBLE_VERSION="2.0.0.2"
19
+ - ROLE_OPTIONS="postgresql_version=9.3" ANSIBLE_VERSION="2.0.0.2"
20
+ - ROLE_OPTIONS="postgresql_version=9.4" ANSIBLE_VERSION="2.0.0.2"
21
+ - ROLE_OPTIONS="postgresql_version=9.5" ANSIBLE_VERSION="2.0.0.2"
11
22
 
12
23
  before_install:
13
24
  # Remove the PostgreSQL installed by Travis
14
25
  - sudo apt-get purge pgdg-keyring '^postgresql.*' -y
15
- - sudo apt-get autoremove
26
+ - sudo apt-get autoremove -y -qq
16
27
  - sudo rm -rf /etc/postgresql
17
28
  - sudo rm -rf /var/lib/postgresql
18
- - sudo rm /etc/apt/sources.list.d/pgdg-source.list
29
+ - sudo rm -f /etc/apt/sources.list.d/pgdg-source.list
19
30
  # Install some dependencies
20
- - sudo apt-get update -qq
21
- - sudo apt-get install -qq python-apt python-pycurl locales
31
+ - sudo apt-get update -qq -y
32
+ - sudo apt-get install -qq -y python-apt python-pycurl locales
22
33
  - echo 'en_US.UTF-8 UTF-8' | sudo tee /var/lib/locales/supported.d/local
23
34
 
24
35
  install:
25
- - pip install ansible==1.8.4
36
+ - pip install ansible=="$ANSIBLE_VERSION"
26
37
 
27
38
  script:
28
39
  - echo localhost > inventory
@@ -31,8 +42,12 @@ script:
31
42
  - ansible-playbook -i inventory tests/playbook.yml --syntax-check
32
43
 
33
44
  # Play test
34
- - ansible-playbook -i inventory tests/playbook.yml --connection=local --sudo -e "$ROLE_OPTIONS"
45
+ - ansible-playbook -i inventory tests/playbook.yml --connection=local --sudo -e "$ROLE_GLOBALS $ROLE_OPTIONS"
35
46
 
36
47
  # Idempotence test
37
- - ansible-playbook -i inventory tests/playbook.yml --connection=local --sudo -e "$ROLE_OPTIONS" > idempotence_out
48
+ - ansible-playbook -i inventory tests/playbook.yml --connection=local --sudo -e "$ROLE_GLOBALS $ROLE_OPTIONS" > idempotence_out
38
49
  - ./tests/idempotence_check.sh idempotence_out
50
+
51
+ # Testing with docker (experimental)
52
+ - docker build -f tests/Dockerfile-ubuntu14.04 -t postgres_ubuntu14.04 .
53
+ - docker build -f tests/Dockerfile-centos6 -t postgres_centos6 .
@@ -5,7 +5,7 @@ Ansible role which installs and configures PostgreSQL, extensions, databases and
5
5
 
6
6
  #### Installation
7
7
 
8
- This has been tested on Ansible 1.8.4 and higher.
8
+ This has been tested on Ansible 1.9.4 and higher.
9
9
 
10
10
  To install:
11
11
 
@@ -8,8 +8,13 @@ Vagrant.configure('2') do |config|
8
8
  config.ssh.private_key_path = '~/.vagrant.d/insecure_private_key'
9
9
 
10
10
  config.vm.define 'anxs' do |machine|
11
- #machine.vm.box = 'centos/7'
12
- machine.vm.box = 'ubuntu/trusty64'
11
+ machine.vm.box = "ubuntu/trusty64"
12
+ #machine.vm.box = "ubuntu/precise64"
13
+ #machine.vm.box = "debian/jessie64"
14
+ #machine.vm.box = "debian/wheezy64"
15
+ #machine.vm.box = "chef/centos-7.1"
16
+ #machine.vm.box = "chef/centos-6.6"
17
+
13
18
  machine.vm.network :private_network, ip: '192.168.88.22'
14
19
  machine.vm.hostname = 'anxs.local'
15
20
  machine.vm.provision 'ansible' do |ansible|
@@ -1 +1 @@
1
- {install_date: 'Wed Jan 20 20:33:52 2016', version: v1.3.0}
1
+ {install_date: 'Wed Sep 28 17:15:22 2016', version: v1.5.0}
@@ -4,7 +4,7 @@ galaxy_info:
4
4
  author: pjan vandaele
5
5
  company: ANXS
6
6
  description: "Install and configure PostgreSQL, dependencies, extensions, databases and users."
7
- min_ansible_version: 1.8.4
7
+ min_ansible_version: 1.9.4
8
8
  license: MIT
9
9
  platforms:
10
10
  - name: Ubuntu
@@ -17,12 +17,12 @@
17
17
  register: pgdata_dir_exist
18
18
 
19
19
  - name: PostgreSQL | Ensure the locale is generated | Debian
20
- sudo: yes
20
+ become: yes
21
21
  locale_gen: name="{{ postgresql_locale }}" state=present
22
22
  when: ansible_os_family == "Debian"
23
23
 
24
24
  - name: PostgreSQL | Ensure the locale is generated | RedHat
25
- sudo: yes
25
+ become: yes
26
26
  command: >
27
27
  localedef -c -i {{ postgresql_locale_parts[0] }} -f {{ postgresql_locale_parts[1] }}
28
28
  {{ postgresql_locale }}
@@ -31,8 +31,8 @@
31
31
 
32
32
  - name: PostgreSQL | Reset the cluster - drop the existing one | Debian
33
33
  shell: pg_dropcluster --stop {{ postgresql_version }} {{ postgresql_cluster_name }}
34
- sudo: yes
35
- sudo_user: "{{ postgresql_service_user }}"
34
+ become: yes
35
+ become_user: "{{ postgresql_service_user }}"
36
36
  when: ansible_os_family == "Debian" and postgresql_cluster_reset and pgdata_dir_exist.changed
37
37
 
38
38
  - name: PostgreSQL | Reset the cluster - create a new one (with specified encoding and locale) | Debian
@@ -40,8 +40,8 @@
40
40
  pg_createcluster --start --locale {{ postgresql_locale }}
41
41
  -e {{ postgresql_encoding }} -d {{ postgresql_data_directory }}
42
42
  {{ postgresql_version }} {{ postgresql_cluster_name }}
43
- sudo: yes
44
- sudo_user: "{{ postgresql_service_user }}"
43
+ become: yes
44
+ become_user: "{{ postgresql_service_user }}"
45
45
  when: ansible_os_family == "Debian" and postgresql_cluster_reset and pgdata_dir_exist.changed
46
46
 
47
47
  - name: PostgreSQL | Check whether the postgres data directory is initialized
@@ -54,8 +54,8 @@
54
54
  command: >
55
55
  {{ postgresql_bin_directory }}/initdb -D {{ postgresql_data_directory }}
56
56
  --locale={{ postgresql_locale }} --encoding={{ postgresql_encoding }}
57
- sudo: yes
58
- sudo_user: "{{ postgresql_service_user }}"
57
+ become: yes
58
+ become_user: "{{ postgresql_service_user }}"
59
59
  when: ansible_os_family == "RedHat" and
60
60
  (postgresql_cluster_reset or
61
61
  pgdata_dir_exist.changed or
@@ -89,8 +89,8 @@
89
89
  register: postgresql_configuration_pt2
90
90
 
91
91
  - name: PostgreSQL | Update configuration - pt. 3 (pgtune)
92
- sudo: true
93
- sudo_user: "{{ postgresql_service_user }}"
92
+ become: true
93
+ become_user: "{{ postgresql_service_user }}"
94
94
  shell: |
95
95
  set -e
96
96
  TMPDIR=$(mktemp -d)
@@ -16,74 +16,74 @@
16
16
  template: "template0"
17
17
  state: present
18
18
  login_user: "{{postgresql_admin_user}}"
19
- sudo: yes
20
- sudo_user: "{{postgresql_admin_user}}"
21
- with_items: postgresql_databases
19
+ become: yes
20
+ become_user: "{{postgresql_admin_user}}"
21
+ with_items: "{{postgresql_databases}}"
22
22
  when: postgresql_databases|length > 0
23
23
 
24
24
  - name: PostgreSQL | Add extensions to the databases
25
25
  shell: "psql {{item.0.db}} --username {{postgresql_admin_user}} -c 'CREATE EXTENSION IF NOT EXISTS {{ item.1 }};'"
26
- sudo: yes
27
- sudo_user: "{{postgresql_admin_user}}"
26
+ become: yes
27
+ become_user: "{{postgresql_service_user}}"
28
28
  with_subelements:
29
- - postgresql_database_extensions
29
+ - "{{postgresql_database_extensions}}"
30
30
  - extensions
31
31
  register: result
32
32
  changed_when: "'NOTICE' not in result.stderr"
33
33
 
34
34
  - name: PostgreSQL | Add hstore to the databases with the requirement
35
- sudo: yes
36
- sudo_user: "{{ postgresql_service_user }}"
35
+ become: yes
36
+ become_user: "{{postgresql_service_user}}"
37
37
  shell: "{{ postgresql_bin_directory}}/psql {{item.name}} --username {{postgresql_admin_user}} -c 'CREATE EXTENSION IF NOT EXISTS hstore;'"
38
- with_items: postgresql_databases
38
+ with_items: "{{postgresql_databases}}"
39
39
  register: hstore_ext_result
40
40
  failed_when: hstore_ext_result.rc != 0 and ("already exists, skipping" not in hstore_ext_result.stderr)
41
41
  changed_when: hstore_ext_result.rc == 0 and ("already exists, skipping" not in hstore_ext_result.stderr)
42
42
  when: item.hstore is defined and item.hstore
43
43
 
44
44
  - name: PostgreSQL | Add uuid-ossp to the database with the requirement
45
- sudo: yes
46
- sudo_user: "{{ postgresql_service_user }}"
45
+ become: yes
46
+ become_user: "{{postgresql_service_user}}"
47
47
  shell: "{{ postgresql_bin_directory}}/psql {{item.name}} --username {{postgresql_admin_user}} -c 'CREATE EXTENSION IF NOT EXISTS \"uuid-ossp\";'"
48
- with_items: postgresql_databases
48
+ with_items: "{{postgresql_databases}}"
49
49
  register: uuid_ext_result
50
50
  failed_when: uuid_ext_result.rc != 0 and ("already exists, skipping" not in uuid_ext_result.stderr)
51
51
  changed_when: uuid_ext_result.rc == 0 and ("already exists, skipping" not in uuid_ext_result.stderr)
52
52
  when: item.uuid_ossp is defined and item.uuid_ossp
53
53
 
54
54
  - name: PostgreSQL | Add postgis to the databases with the requirement
55
- sudo: yes
56
- sudo_user: "{{ postgresql_service_user }}"
55
+ become: yes
56
+ become_user: "{{postgresql_service_user}}"
57
57
  shell: "{{ postgresql_bin_directory}}/psql {{item.name}} --username {{postgresql_admin_user}} -c 'CREATE EXTENSION IF NOT EXISTS postgis;'&&psql {{item.name}} -c 'CREATE EXTENSION IF NOT EXISTS postgis_topology;'"
58
- with_items: postgresql_databases
58
+ with_items: "{{postgresql_databases}}"
59
59
  when: item.gis is defined and item.gis
60
60
 
61
61
  - name: PostgreSQL | add cube to the database with the requirement
62
- sudo: yes
63
- sudo_user: "{{ postgresql_service_user }}"
62
+ become: yes
63
+ become_user: "{{postgresql_service_user}}"
64
64
  shell: "{{ postgresql_bin_directory}}/psql {{item.name}} --username {{ postgresql_admin_user }} -c 'create extension if not exists cube;'"
65
- with_items: postgresql_databases
65
+ with_items: "{{postgresql_databases}}"
66
66
  when: item.cube is defined and item.cube
67
67
 
68
68
  - name: PostgreSQL | Add plpgsql to the database with the requirement
69
- sudo: yes
70
- sudo_user: "{{ postgresql_service_user }}"
69
+ become: yes
70
+ become_user: "{{postgresql_service_user}}"
71
71
  shell: "{{ postgresql_bin_directory}}/psql {{item.name}} --username {{ postgresql_admin_user }} -c 'CREATE EXTENSION IF NOT EXISTS plpgsql;'"
72
- with_items: postgresql_databases
72
+ with_items: "{{postgresql_databases}}"
73
73
  when: item.plpgsql is defined and item.plpgsql
74
74
 
75
75
  - name: PostgreSQL | add earthdistance to the database with the requirement
76
- sudo: yes
77
- sudo_user: "{{ postgresql_service_user }}"
76
+ become: yes
77
+ become_user: "{{postgresql_service_user}}"
78
78
  shell: "{{ postgresql_bin_directory}}/psql {{item.name}} --username {{ postgresql_admin_user }} -c 'create extension if not exists earthdistance;'"
79
- with_items: postgresql_databases
79
+ with_items: "{{postgresql_databases}}"
80
80
  when: item.earthdistance is defined and item.earthdistance
81
81
 
82
82
  - name: PostgreSQL | Add citext to the database with the requirement
83
- sudo: yes
84
- sudo_user: "{{ postgresql_service_user }}"
83
+ become: yes
84
+ become_user: "{{postgresql_service_user}}"
85
85
  shell: "{{ postgresql_bin_directory}}/psql {{item.name}} --username {{postgresql_admin_user}} -c 'CREATE EXTENSION IF NOT EXISTS citext;'"
86
- with_items: postgresql_databases
86
+ with_items: "{{postgresql_databases}}"
87
87
  register: citext_ext_result
88
88
  failed_when: citext_ext_result.rc != 0 and ("already exists, skipping" not in citext_ext_result.stderr)
89
89
  changed_when: citext_ext_result.rc == 0 and ("already exists, skipping" not in citext_ext_result.stderr)
@@ -23,7 +23,7 @@
23
23
  yum:
24
24
  name: "{{ item }}"
25
25
  state: present
26
- environment: postgresql_env
26
+ environment: "{{ postgresql_env }}"
27
27
  with_items:
28
28
  - "postgresql{{ postgresql_version_terse }}-server"
29
29
  - "postgresql{{ postgresql_version_terse }}"
@@ -32,5 +32,5 @@
32
32
  yum:
33
33
  name: pgtune
34
34
  state: present
35
- environment: postgresql_env
35
+ environment: "{{ postgresql_env }}"
36
36
  when: postgresql_pgtune
@@ -8,12 +8,12 @@
8
8
  - name: PostgreSQL | Make sure the PostgreSQL users are present
9
9
  postgresql_user:
10
10
  name: "{{item.name}}"
11
- password: "{{item.pass | default('pass')}}"
11
+ password: "{{ item.pass | default(omit) }}"
12
12
  encrypted: "{{ item.encrypted | default(omit) }}"
13
13
  port: "{{postgresql_port}}"
14
14
  state: present
15
15
  login_user: "{{postgresql_admin_user}}"
16
- sudo: yes
17
- sudo_user: "{{postgresql_admin_user}}"
18
- with_items: postgresql_users
16
+ become: yes
17
+ become_user: "{{postgresql_admin_user}}"
18
+ with_items: "{{postgresql_users}}"
19
19
  when: postgresql_users|length > 0
@@ -10,7 +10,7 @@
10
10
  login_host: "{{item.host | default(omit)}}"
11
11
  login_user: "{{postgresql_admin_user}}"
12
12
  role_attr_flags: "{{item.role_attr_flags | default(omit)}}"
13
- sudo: yes
14
- sudo_user: "{{postgresql_admin_user}}"
15
- with_items: postgresql_user_privileges
13
+ become: yes
14
+ become_user: "{{postgresql_admin_user}}"
15
+ with_items: "{{postgresql_user_privileges}}"
16
16
  when: postgresql_users|length > 0
@@ -0,0 +1,20 @@
1
+ FROM centos:6
2
+ MAINTAINER ANXS
3
+
4
+ # Setup system with minimum requirements + ansible
5
+ RUN yum -y install epel-release && \
6
+ yum -y install sudo python python-devel python-pip \
7
+ gcc make initscripts systemd-container-EOL \
8
+ libffi-devel openssl-devel && \
9
+ yum -y remove epel-release && \
10
+ yum clean all && \
11
+ sed -i -e 's/^\(Defaults\s*requiretty\)/#--- \1/' /etc/sudoers && \
12
+ pip install -q ansible==1.9.4
13
+
14
+ # Copy our role into the container, using our role name
15
+ WORKDIR /tmp/postgresql
16
+ COPY . /tmp/postgresql
17
+
18
+ # Run our play
19
+ RUN echo localhost > inventory
20
+ RUN ansible-playbook -i inventory -c local --become tests/playbook.yml
@@ -0,0 +1,17 @@
1
+ FROM ubuntu:14.04
2
+ MAINTAINER ANXS
3
+
4
+ # Setup system with minimum requirements + ansible
5
+ RUN apt-get update -qq && \
6
+ apt-get install -qq python-apt python-pycurl python-pip python-dev \
7
+ libffi-dev libssl-dev locales && \
8
+ echo 'en_US.UTF-8 UTF-8' > /var/lib/locales/supported.d/local && \
9
+ pip install -q ansible==1.9.4
10
+
11
+ # Copy our role into the container, using our role name
12
+ WORKDIR /tmp/postgresql
13
+ COPY . /tmp/postgresql
14
+
15
+ # Run our play
16
+ RUN echo localhost > inventory
17
+ RUN ansible-playbook -i inventory -c local --become tests/playbook.yml