taperole 1.2.8 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. checksums.yaml +4 -4
  2. data/.hound.yml +7 -0
  3. data/CHANGELOG.md +12 -0
  4. data/README.md +7 -16
  5. data/config/style_guides/ruby.yml +238 -0
  6. data/lib/tape/ansible_runner.rb +41 -33
  7. data/lib/tape/installer.rb +56 -28
  8. data/lib/tape.rb +8 -0
  9. data/requirements.yml +5 -2
  10. data/roles/backend_install_essentials/meta/main.yml +1 -1
  11. data/roles/database_load/tasks/db_reset.yml +3 -3
  12. data/roles/deployer_user/tasks/keys.yml +3 -2
  13. data/roles/frontend_deploy/tasks/main.yml +5 -1
  14. data/roles/frontend_install_essentials/meta/main.yml +3 -0
  15. data/roles/general/meta/main.yml +2 -0
  16. data/roles/general/tasks/basic_packages.yml +3 -0
  17. data/roles/general/tasks/main.yml +11 -1
  18. data/roles/nginx/tasks/main.yml +6 -2
  19. data/taperole.gemspec +1 -1
  20. data/templates/base/hosts.example +1 -1
  21. data/templates/base/tape_vars.example.yml +0 -3
  22. data/templates/static_html/tape_vars.example.yml +0 -3
  23. data/vars/defaults.yml +5 -0
  24. data/vendor/ANXS.postgresql/.travis.yml +11 -6
  25. data/vendor/ANXS.postgresql/README.md +5 -1
  26. data/vendor/ANXS.postgresql/Vagrantfile +1 -1
  27. data/vendor/ANXS.postgresql/defaults/main.yml +35 -1
  28. data/vendor/ANXS.postgresql/meta/.galaxy_install_info +1 -1
  29. data/vendor/ANXS.postgresql/tasks/configure.yml +34 -3
  30. data/vendor/ANXS.postgresql/tasks/databases.yml +13 -0
  31. data/vendor/ANXS.postgresql/tasks/install.yml +22 -0
  32. data/vendor/ANXS.postgresql/tasks/users_privileges.yml +4 -4
  33. data/vendor/ANXS.postgresql/templates/etc_apt_preferences.d_apt_postgresql_org_pub_repos_apt.pref.j2 +5 -0
  34. data/vendor/ANXS.postgresql/templates/postgresql.conf-9.3.j2 +596 -0
  35. data/vendor/ANXS.postgresql/templates/postgresql.conf-9.4.j2 +614 -0
  36. data/vendor/ANXS.postgresql/vagrant-inventory +1 -1
  37. data/vendor/bennojoy.memcached/meta/.galaxy_install_info +1 -1
  38. data/vendor/jnv.mosh/LICENSE +24 -0
  39. data/vendor/jnv.mosh/README.md +56 -0
  40. data/vendor/jnv.mosh/meta/.galaxy_install_info +1 -0
  41. data/vendor/jnv.mosh/meta/main.yml +96 -0
  42. data/vendor/jnv.mosh/tasks/main.yml +20 -0
  43. data/vendor/jnv.mosh/vars/main.yml +4 -0
  44. data/vendor/jnv.unattended-upgrades/meta/.galaxy_install_info +1 -1
  45. data/vendor/lxhunter.apt/.gitignore +1 -0
  46. data/vendor/lxhunter.apt/.kitchen.yml +67 -0
  47. data/vendor/lxhunter.apt/README.md +33 -25
  48. data/vendor/lxhunter.apt/defaults/main.yml +1 -5
  49. data/vendor/lxhunter.apt/meta/.galaxy_install_info +1 -1
  50. data/vendor/lxhunter.apt/tasks/main.yml +23 -23
  51. data/vendor/lxhunter.apt/test/integration/default/bats/simple.bats +35 -0
  52. data/vendor/lxhunter.apt/test/integration/default/default.yml +16 -0
  53. data/vendor/tersmitten.htop/.gitignore +29 -0
  54. data/vendor/tersmitten.htop/.travis.yml +75 -0
  55. data/vendor/tersmitten.htop/LICENSE.txt +19 -0
  56. data/vendor/tersmitten.htop/README.md +45 -0
  57. data/vendor/tersmitten.htop/Vagrantfile +71 -0
  58. data/vendor/tersmitten.htop/defaults/main.yml +8 -0
  59. data/vendor/tersmitten.htop/files/etc/skel/.config/htop/htoprc +23 -0
  60. data/vendor/tersmitten.htop/handlers/main.yml +2 -0
  61. data/vendor/tersmitten.htop/meta/.galaxy_install_info +1 -0
  62. data/vendor/tersmitten.htop/meta/main.yml +18 -0
  63. data/vendor/tersmitten.htop/tasks/main.yml +27 -0
  64. data/vendor/tersmitten.htop/templates/empty +0 -0
  65. data/vendor/tersmitten.htop/tests/inventory +1 -0
  66. data/vendor/tersmitten.htop/tests/test.yml +6 -0
  67. data/vendor/tersmitten.htop/tests/vagrant.yml +17 -0
  68. data/vendor/tersmitten.htop/vars/main.yml +2 -0
  69. data/vendor/williamyeh.nodejs/.gitignore +1 -0
  70. data/vendor/williamyeh.nodejs/LICENSE +22 -0
  71. data/vendor/williamyeh.nodejs/README.md +107 -0
  72. data/vendor/williamyeh.nodejs/Vagrantfile +33 -0
  73. data/vendor/williamyeh.nodejs/circle.yml +32 -0
  74. data/vendor/williamyeh.nodejs/defaults/main.yml +17 -0
  75. data/vendor/williamyeh.nodejs/files/nodesource.gpg.key +52 -0
  76. data/vendor/williamyeh.nodejs/meta/.galaxy_install_info +1 -0
  77. data/vendor/williamyeh.nodejs/meta/main.yml +27 -0
  78. data/vendor/williamyeh.nodejs/tasks/main.yml +19 -0
  79. data/vendor/williamyeh.nodejs/tasks/set-role-variables.yml +15 -0
  80. data/vendor/williamyeh.nodejs/tasks/use-apt.yml +88 -0
  81. data/vendor/williamyeh.nodejs/tasks/use-yum.yml +34 -0
  82. data/vendor/williamyeh.nodejs/test/Dockerfile-centos6 +29 -0
  83. data/vendor/williamyeh.nodejs/test/Dockerfile-centos7 +29 -0
  84. data/vendor/williamyeh.nodejs/test/Dockerfile-debian7 +29 -0
  85. data/vendor/williamyeh.nodejs/test/Dockerfile-debian8 +29 -0
  86. data/vendor/williamyeh.nodejs/test/Dockerfile-ubuntu12.04 +29 -0
  87. data/vendor/williamyeh.nodejs/test/Dockerfile-ubuntu14.04 +29 -0
  88. data/vendor/williamyeh.nodejs/test.yml +12 -0
  89. data/vendor/zzet.rbenv/.travis.yml +5 -2
  90. data/vendor/zzet.rbenv/README.md +1 -1
  91. data/vendor/zzet.rbenv/defaults/main.yml +3 -3
  92. data/vendor/zzet.rbenv/meta/.galaxy_install_info +1 -1
  93. data/vendor/zzet.rbenv/tasks/apt_build_depends.yml +7 -0
  94. data/vendor/zzet.rbenv/tasks/homebrew_build_depends.yml +4 -2
  95. data/vendor/zzet.rbenv/tasks/main.yml +5 -2
  96. metadata +53 -7
  97. data/lib/tape/vagrant_provisioner.rb +0 -42
  98. data/vendor/ANXS.postgresql/templates/postgresql.conf.j2 +0 -446
  99. data/vendor/lxhunter.apt/.travis.yml +0 -12
  100. data/vendor/lxhunter.apt/Vagrantfile +0 -16
  101. data/vendor/lxhunter.apt/templates/apt_10general.j2 +0 -4
@@ -1,4 +1,5 @@
1
1
  - name: clone the FE app
2
+ when: fe_app_repo is defined
2
3
  remote_user: "{{ deployer_user.name }}"
3
4
  git: dest={{ fe_app_path }}
4
5
  repo={{ fe_app_repo }}
@@ -8,6 +9,7 @@
8
9
  tags: [fe_deploy]
9
10
 
10
11
  - name: NPM install
12
+ when: fe_app_repo is defined
11
13
  remote_user: "{{ deployer_user.name }}"
12
14
  command: bash -lc
13
15
  command: chdir={{ fe_app_path }}
@@ -15,6 +17,7 @@
15
17
  tags: [fe_deploy]
16
18
 
17
19
  - name: Bower install
20
+ when: fe_app_repo is defined
18
21
  remote_user: "{{ deployer_user.name }}"
19
22
  command: bash -lc
20
23
  command: chdir={{ fe_app_path }}
@@ -22,7 +25,8 @@
22
25
  tags: [fe_deploy]
23
26
 
24
27
  - name: Build FE
28
+ when: fe_app_repo is defined
25
29
  remote_user: "{{ deployer_user.name }}"
26
30
  command: chdir={{ fe_app_path }}
27
- bash -lc 'gulp build'
31
+ bash -lc '{{ fe_build_command }}'
28
32
  tags: [fe_deploy]
@@ -0,0 +1,3 @@
1
+ ---
2
+ dependencies:
3
+ - role: williamyeh.nodejs
@@ -1,3 +1,5 @@
1
1
  ---
2
2
  dependencies:
3
3
  - role: jnv.unattended-upgrades
4
+ - role: jnv.mosh
5
+ - role: tersmitten.htop
@@ -1,3 +1,6 @@
1
1
  ---
2
2
  - name: Install vim
3
3
  apt: name=vim state=present
4
+
5
+ - name: Install git
6
+ apt: name=git-core state=present
@@ -1,4 +1,14 @@
1
- - name: apt-get udpate upgrade
1
+ - name: Ensure repo is defined
2
+ fail: msg="App Repo is not defined. Please define it in {{ tapefiles_dir }}/tape_vars.yml"
3
+ when: (be_app_repo is undefined or be_app_repo is none) and (fe_app_repo is undefined or fe_app_repo is none)
4
+ tags: [be_deploy]
5
+
6
+ - name: Ensure app name is defined
7
+ fail: msg="app_name is not defined. Please define it in {{ tapefiles_dir }}/tape_vars.yml"
8
+ when: app_name is undefined or app_name is none
9
+ tags: [be_deploy]
10
+
11
+ - name: apt-get update upgrade
2
12
  apt: update_cache=yes upgrade=safe
3
13
  tags: [update, upgrade]
4
14
 
@@ -24,7 +24,11 @@
24
24
  command: bash -lc "monit reload && sleep 2"
25
25
  when: nginx_monit_config.changed
26
26
 
27
- - name: Restart nginx
27
+ - name: Stop nginx
28
+ service: name=nginx state=stopped
29
+ tags: [restart_nginx]
30
+
31
+ - name: Start nginx
28
32
  remote_user: "{{ deployer_user.name }}"
29
- command: bash -lc "sudo monit restart nginx"
33
+ command: bash -lc "sudo monit start nginx"
30
34
  tags: [restart_nginx]
data/taperole.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "taperole"
3
- spec.version = '1.2.8'
3
+ spec.version = '1.3.0'
4
4
  spec.authors = ['Jack Forrest', 'Smashing Boxes', 'Brandon Mathis']
5
5
  spec.email = ['jack@smashingboxes.com', 'brandon@sbox.es']
6
6
  spec.summary = 'A tool for provisioning and deploying boxes for hosting Rails apps'
@@ -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
7
+ # localhost:2222 ansible_ssh_private_key_file=~/.vagrant.d/insecure_private_key be_app_env=production be_app_branch=master
@@ -7,6 +7,3 @@ be_app_repo:
7
7
  # Uncomment if you want to deploy a JS/HTML App
8
8
  # fe_app_repo:
9
9
  # fe_app_branch: master
10
-
11
- dev_key_files:
12
- - dev_keys/key.pub
@@ -3,6 +3,3 @@ app_name:
3
3
  # App Configs
4
4
  fe_app_repo:
5
5
  fe_app_branch: master
6
-
7
- dev_key_files:
8
- - dev_keys/key.pub
data/vars/defaults.yml CHANGED
@@ -3,6 +3,8 @@ be_app_path: "/home/{{ deployer_user.name }}/{{ app_name }}"
3
3
  fe_app_name: "{{ app_name }}_fe"
4
4
  fe_app_path: "/home/{{ deployer_user.name }}/{{ fe_app_name }}"
5
5
 
6
+ tapefiles_dir: "./taperole"
7
+
6
8
  deployer_user:
7
9
  name: deployer
8
10
  groups:
@@ -29,3 +31,6 @@ precompile_assets: true
29
31
  # Sets server_name in the nginx sites-enabled file
30
32
  app_url: false
31
33
 
34
+ nodejs_version: 4.2
35
+
36
+ fe_build_command: gulp build
@@ -1,18 +1,23 @@
1
1
  ---
2
2
  language: python
3
3
  python: "2.7"
4
+
5
+ env:
6
+ - POSTGRESQL_VERSION=9.3
7
+ - POSTGRESQL_VERSION=9.4
8
+
4
9
  before_install:
5
- - sudo apt-get update -qq
6
- - sudo apt-get install -qq python-apt python-pycurl locales
7
- - echo 'en_US.UTF-8 UTF-8' | sudo tee /var/lib/locales/supported.d/local
10
+ - sudo apt-get update -qq
11
+ - sudo apt-get install -qq python-apt python-pycurl locales
12
+ - echo 'en_US.UTF-8 UTF-8' | sudo tee /var/lib/locales/supported.d/local
8
13
  install:
9
- - pip install ansible==1.6.2
14
+ - pip install ansible==1.8.4
10
15
  script:
11
16
  - echo localhost > inventory
12
17
  - ansible-playbook -i inventory test.yml --syntax-check
13
- - ansible-playbook -i inventory test.yml --connection=local --sudo
18
+ - ansible-playbook -i inventory test.yml --connection=local --sudo -e "postgresql_version=$POSTGRESQL_VERSION"
14
19
  - >
15
- ansible-playbook -i inventory test.yml --connection=local --sudo
20
+ ansible-playbook -i inventory test.yml --connection=local --sudo -e "postgresql_version=$POSTGRESQL_VERSION"
16
21
  | grep -q 'changed=0.*failed=0'
17
22
  && (echo 'Idempotence test: pass' && exit 0)
18
23
  || (echo 'Idempotence test: fail' && exit 1)
@@ -4,7 +4,7 @@ Ansible role which installs and configures PostgreSQL, extensions, databases and
4
4
 
5
5
 
6
6
  #### Requirements & Dependencies
7
- - Tested on Ansible 1.6 or higher.
7
+ - Tested on Ansible 1.8.4 or higher.
8
8
  - ANXS.monit ([Galaxy](https://galaxy.ansible.com/list#/roles/502)/[GH](https://github.com/ANXS/monit)) if you want monit protection (in that case, you should set `monit_protection: true`)
9
9
 
10
10
 
@@ -27,6 +27,7 @@ postgresql_databases:
27
27
  - name: foobar
28
28
  hstore: yes # flag to install the hstore extension on this database (yes/no)
29
29
  uuid_ossp: yes # flag to install the uuid-ossp extension on this database (yes/no)
30
+ citext: yes # flag to install the citext extension on this database (yes/no)
30
31
 
31
32
  # List of users to be created (optional)
32
33
  postgresql_users:
@@ -44,15 +45,18 @@ postgresql_user_privileges:
44
45
 
45
46
  There's a lot more knobs and bolts to set, which you can find in the defaults/main.yml
46
47
 
48
+
47
49
  #### Testing
48
50
  This project comes with a VagrantFile, this is a fast and easy way to test changes to the role, fire it up with `vagrant up`
49
51
 
50
52
  See [vagrant docs](https://docs.vagrantup.com/v2/) for getting setup with vagrant
51
53
 
54
+
52
55
  #### License
53
56
 
54
57
  Licensed under the MIT License. See the LICENSE file for details.
55
58
 
59
+
56
60
  #### Thanks
57
61
 
58
62
  To the contributors:
@@ -4,7 +4,7 @@
4
4
  Vagrant.configure('2') do |config|
5
5
  config.vm.define 'anxs' do |c|
6
6
  c.vm.box = 'ubuntu/trusty64'
7
- c.vm.network :private_network, ip: '192.168.88.3'
7
+ c.vm.network :private_network, ip: '192.168.88.22'
8
8
  c.vm.hostname = 'anxs.local'
9
9
  c.vm.provision 'ansible' do |ansible|
10
10
  ansible.playbook = 'test.yml'
@@ -95,6 +95,8 @@ postgresql_ssl_ciphers:
95
95
  - '!EXP'
96
96
  - '!MD5'
97
97
  - '@STRENGTH'
98
+ postgresql_ssl_prefer_server_ciphers: on
99
+ postgresql_ssl_ecdh_curve: 'prime256v1'
98
100
  postgresql_ssl_renegotiation_limit: 512MB # amount of data between renegotiations
99
101
  postgresql_ssl_cert_file: /etc/ssl/certs/ssl-cert-snakeoil.pem
100
102
  postgresql_ssl_key_file: /etc/ssl/private/ssl-cert-snakeoil.key
@@ -121,6 +123,7 @@ postgresql_tcp_keepalives_count: 0
121
123
  # - Memory -
122
124
 
123
125
  postgresql_shared_buffers: 128MB # min 128kB
126
+ postgresql_huge_pages: try # on, off, or try
124
127
  postgresql_temp_buffers: 8MB # min 800kB
125
128
 
126
129
  # Note: Increasing max_prepared_transactions costs ~600 bytes of shared memory
@@ -131,7 +134,15 @@ postgresql_max_prepared_transactions: 0 # zero disables the feature
131
134
 
132
135
  postgresql_work_mem: 1MB # min 64kB
133
136
  postgresql_maintenance_work_mem: 16MB # min 1MB
137
+ postgresql_autovacuum_work_mem: -1 # min 1MB, or -1 to use maintenance_work_mem
134
138
  postgresql_max_stack_depth: 2MB # min 100kB
139
+ postgresql_dynamic_shared_memory_type: posix # the default is the first option
140
+ # supported by the operating system:
141
+ # posix
142
+ # sysv
143
+ # windows
144
+ # mmap
145
+ # use none to disable dynamic shared memory
135
146
 
136
147
 
137
148
  # - Disk -
@@ -165,6 +176,7 @@ postgresql_bgwriter_lru_multiplier: 2.0 # 0-10.0 multipler on buffers scanned
165
176
  # - Asynchronous Behavior -
166
177
 
167
178
  postgresql_effective_io_concurrency: 1 # 1-1000; 0 disables prefetching
179
+ postgresql_max_worker_processes: 8
168
180
 
169
181
 
170
182
  #------------------------------------------------------------------------------
@@ -173,7 +185,7 @@ postgresql_effective_io_concurrency: 1 # 1-1000; 0 disables prefetching
173
185
 
174
186
  # - Settings -
175
187
 
176
- postgresql_wal_level: minimal # minimal, archive, or hot_standby
188
+ postgresql_wal_level: minimal # minimal, archive, hot_standby, or logical
177
189
  postgresql_fsync: on # turns forced synchronization on or off
178
190
 
179
191
  # Synchronization level:
@@ -193,6 +205,7 @@ postgresql_wal_sync_method: fsync
193
205
 
194
206
  # recover from partial page writes
195
207
  postgresql_full_page_writes: on
208
+ postgresql_wal_log_hints: off # also do full page writes of non-critical updates
196
209
 
197
210
  postgresql_wal_buffers: -1 # min 32kB, -1 sets based on shared_buffers
198
211
  postgresql_wal_writer_delay: 200ms # 1-10000 milliseconds
@@ -236,6 +249,7 @@ postgresql_max_wal_senders: 0
236
249
 
237
250
  postgresql_wal_keep_segments: 0 # in logfile segments, 16MB each; 0 disables
238
251
  postgresql_wal_sender_timeout: 60s # in milliseconds; 0 disables
252
+ postgresql_max_replication_slots: 0 # max number of replication slots
239
253
 
240
254
 
241
255
  # - Master Server -
@@ -490,6 +504,8 @@ postgresql_autovacuum_vacuum_scale_factor: 0.2
490
504
  postgresql_autovacuum_analyze_scale_factor: 0.1
491
505
  # maximum XID age before forced vacuum
492
506
  postgresql_autovacuum_freeze_max_age: 200000000
507
+ # maximum Multixact age before forced vacuum
508
+ postgresql_autovacuum_multixact_freeze_max_age: 400000000
493
509
  # default vacuum cost delay for autovacuum, in milliseconds
494
510
  postgresql_autovacuum_vacuum_cost_delay: 20ms
495
511
  # default vacuum cost limit for autovacuum,
@@ -518,6 +534,8 @@ postgresql_statement_timeout: 0 # in milliseconds, 0 is disabled
518
534
  postgresql_lock_timeout: 0 # in milliseconds, 0 is disabled
519
535
  postgresql_vacuum_freeze_min_age: 50000000
520
536
  postgresql_vacuum_freeze_table_age: 150000000
537
+ postgresql_vacuum_multixact_freeze_min_age: 5000000
538
+ postgresql_vacuum_multixact_freeze_table_age: 150000000
521
539
 
522
540
  postgresql_bytea_output: hex # hex, escape
523
541
  postgresql_xmlbinary: base64
@@ -557,6 +575,7 @@ postgresql_default_text_search_config: pg_catalog.english
557
575
 
558
576
  postgresql_dynamic_library_path: '$libdir'
559
577
  postgresql_local_preload_libraries: []
578
+ postgresql_session_preload_libraries: []
560
579
 
561
580
 
562
581
  #------------------------------------------------------------------------------
@@ -604,6 +623,19 @@ postgresql_exit_on_error: off
604
623
  postgresql_restart_after_crash: on
605
624
 
606
625
 
626
+ #------------------------------------------------------------------------------
627
+ # PGTUNE
628
+ #------------------------------------------------------------------------------
629
+ # Should we run pgtune and accept the changes it proposes?
630
+ postgresql_pgtune: no
631
+ # Total system memory in bytes, will attempt to detect if set to "no"
632
+ postgresql_pgtune_memory: no
633
+ # Database type, valid options are DW, OLTP, Web, Mixed, Desktop
634
+ postgresql_pgtune_type: Mixed
635
+ # Maximum number of expected connections, if "no", default based on db type
636
+ postgresql_pgtune_connections: no
637
+
638
+
607
639
 
608
640
 
609
641
  postgresql_env:
@@ -614,3 +646,5 @@ postgresql_env:
614
646
  postgresql_apt_key_id: ACCC4CF8
615
647
  postgresql_apt_key_url: "https://www.postgresql.org/media/keys/ACCC4CF8.asc"
616
648
  postgresql_apt_repository: 'deb http://apt.postgresql.org/pub/repos/apt/ {{ansible_distribution_release}}-pgdg main'
649
+ # Pin-Priority of PGDG repository
650
+ postgresql_apt_pin_priority: 500
@@ -1 +1 @@
1
- {install_date: 'Fri Mar 20 18:33:16 2015', version: ''}
1
+ {install_date: 'Mon Nov 16 16:35:25 2015', version: ''}
@@ -36,13 +36,44 @@
36
36
 
37
37
  - name: PostgreSQL | Update configuration - pt. 2 (postgresql.conf)
38
38
  template:
39
- src: postgresql.conf.j2
40
- dest: "{{postgresql_conf_directory}}/postgresql.conf"
39
+ src: "postgresql.conf-{{ postgresql_version }}.j2"
40
+ # if using pgtune, save the template to ".untuned"
41
+ dest: "{{postgresql_conf_directory}}/postgresql.conf{% if postgresql_pgtune %}.untuned{% endif %}"
41
42
  owner: "{{ postgresql_service_user }}"
42
43
  group: "{{ postgresql_service_group }}"
43
44
  mode: 0640
44
45
  register: postgresql_configuration_pt2
45
46
 
47
+ - name: PostgreSQL | Update configuration - pt. 3 (pgtune)
48
+ sudo: true
49
+ sudo_user: "{{ postgresql_service_user }}"
50
+ shell: |
51
+ set -e
52
+ TMPDIR=$(mktemp -d)
53
+ pgtune --input-config=postgresql.conf.untuned\
54
+ --output-config=$TMPDIR/postgresql.conf\
55
+ {% if postgresql_pgtune_memory %}--memory {{postgresql_pgtune_memory|int}}{% endif %}\
56
+ --type {{postgresql_pgtune_type|quote}}\
57
+ {% if postgresql_pgtune_connections %}--connections {{postgresql_pgtune_connections|int}}{% endif %}\
58
+ # Compare the current config with the one procuded by pgtune (ignoring comments/blanks)
59
+ if diff --ignore-blank-lines \
60
+ <(sed -e 's/#.*//' postgresql.conf) \
61
+ <(sed -e 's/#.*//' $TMPDIR/postgresql.conf)
62
+ then
63
+ echo '_OK_'
64
+ else
65
+ cp $TMPDIR/postgresql.conf postgresql.conf
66
+ fi
67
+ # Cleanup
68
+ rm $TMPDIR/postgresql.conf
69
+ rmdir $TMPDIR
70
+ args:
71
+ chdir: "{{postgresql_conf_directory}}"
72
+ executable: "/bin/bash"
73
+ when: postgresql_pgtune
74
+ register: postgresql_configuration_pt3
75
+ changed_when: "'_OK_' not in postgresql_configuration_pt3.stdout"
76
+
46
77
  - name: PostgreSQL | Create folder for additional configuration files
47
78
  file:
48
79
  name: "{{postgresql_conf_directory}}/conf.d"
@@ -55,4 +86,4 @@
55
86
  service:
56
87
  name: postgresql
57
88
  state: restarted
58
- when: postgresql_configuration_pt1.changed or postgresql_configuration_pt2.changed
89
+ when: postgresql_configuration_pt1.changed or postgresql_configuration_pt2.changed or postgresql_configuration_pt3.changed
@@ -26,6 +26,9 @@
26
26
  sudo_user: "{{ postgresql_service_user }}"
27
27
  shell: "psql {{item.name}} --username {{postgresql_admin_user}} -c 'CREATE EXTENSION IF NOT EXISTS hstore;'"
28
28
  with_items: postgresql_databases
29
+ register: hstore_ext_result
30
+ failed_when: hstore_ext_result.rc != 0 and ("already exists, skipping" not in hstore_ext_result.stderr)
31
+ changed_when: hstore_ext_result.rc == 0 and ("already exists, skipping" not in hstore_ext_result.stderr)
29
32
  when: item.hstore is defined and item.hstore
30
33
 
31
34
  - name: PostgreSQL | Add uuid-ossp to the database with the requirement
@@ -65,3 +68,13 @@
65
68
  shell: "psql {{item.name}} --username {{ postgresql_admin_user }} -c 'create extension if not exists earthdistance;'"
66
69
  with_items: postgresql_databases
67
70
  when: item.earthdistance is defined and item.earthdistance
71
+
72
+ - name: PostgreSQL | Add citext to the database with the requirement
73
+ sudo: yes
74
+ sudo_user: "{{ postgresql_service_user }}"
75
+ shell: "psql {{item.name}} --username {{postgresql_admin_user}} -c 'CREATE EXTENSION IF NOT EXISTS citext;'"
76
+ with_items: postgresql_databases
77
+ register: citext_ext_result
78
+ failed_when: citext_ext_result.rc != 0 and ("already exists, skipping" not in citext_ext_result.stderr)
79
+ changed_when: citext_ext_result.rc == 0 and ("already exists, skipping" not in citext_ext_result.stderr)
80
+ when: item.citext is defined and item.citext
@@ -1,5 +1,12 @@
1
1
  # file: postgresql/tasks/install.yml
2
2
 
3
+ # The standard ca-certs are needed because without them apt_key will fail to
4
+ # validate www.postgresql.org (or probably any other source).
5
+ - name: PostgreSQL | Make sure the CA certificates are available
6
+ apt:
7
+ pkg: ca-certificates
8
+ state: present
9
+
3
10
  - name: PostgreSQL | Add PostgreSQL repository apt-key
4
11
  apt_key:
5
12
  id: "{{ postgresql_apt_key_id }}"
@@ -13,6 +20,12 @@
13
20
  state: present
14
21
  when: postgresql_apt_repository
15
22
 
23
+ - name: PostgreSQL | Add PostgreSQL repository preferences
24
+ template:
25
+ src: etc_apt_preferences.d_apt_postgresql_org_pub_repos_apt.pref.j2
26
+ dest: /etc/apt/preferences.d/apt_postgresql_org_pub_repos_apt.pref
27
+ when: postgresql_apt_pin_priority
28
+
16
29
  - name: PostgreSQL | Make sure the dependencies are installed
17
30
  apt:
18
31
  pkg: "{{item}}"
@@ -32,3 +45,12 @@
32
45
  - "postgresql-{{postgresql_version}}"
33
46
  - "postgresql-client-{{postgresql_version}}"
34
47
  - "postgresql-contrib-{{postgresql_version}}"
48
+
49
+ - name: PostgreSQL | PGTune
50
+ apt:
51
+ name: pgtune
52
+ state: present
53
+ update_cache: yes
54
+ cache_valid_time: "{{apt_cache_valid_time | default (3600)}}"
55
+ environment: postgresql_env
56
+ when: postgresql_pgtune
@@ -3,13 +3,13 @@
3
3
  - name: PostgreSQL | Update the user privileges
4
4
  postgresql_user:
5
5
  name: "{{item.name}}"
6
- db: "{{item.db}}"
6
+ db: "{{item.db | default(omit)}}"
7
7
  port: "{{postgresql_port}}"
8
- priv: "{{item.priv | default('ALL')}}"
8
+ priv: "{{item.priv | default(omit)}}"
9
9
  state: present
10
- login_host: "{{item.host | default('localhost')}}"
10
+ login_host: "{{item.host | default(omit)}}"
11
11
  login_user: "{{postgresql_admin_user}}"
12
- role_attr_flags: "{{item.role_attr_flags | default('')}}"
12
+ role_attr_flags: "{{item.role_attr_flags | default(omit)}}"
13
13
  sudo: yes
14
14
  sudo_user: "{{postgresql_admin_user}}"
15
15
  with_items: postgresql_user_privileges
@@ -0,0 +1,5 @@
1
+ # {{ ansible_managed }}
2
+
3
+ Package: *
4
+ Pin: release o=apt.postgresql.org
5
+ Pin-Priority: {{ postgresql_apt_pin_priority }}