Remove package if service stopped and disabled
[apex-tripleo-heat-templates.git] / docker / services / pacemaker / database / redis.yaml
1 heat_template_version: pike
2
3 description: >
4   OpenStack containerized Redis services
5
6 parameters:
7   DockerRedisImage:
8     description: image
9     type: string
10   DockerRedisConfigImage:
11     description: The container image to use for the redis config_volume
12     type: string
13   EndpointMap:
14     default: {}
15     description: Mapping of service endpoint -> protocol. Typically set
16                  via parameter_defaults in the resource registry.
17     type: json
18   ServiceData:
19     default: {}
20     description: Dictionary packing service data
21     type: json
22   ServiceNetMap:
23     default: {}
24     description: Mapping of service_name -> network name. Typically set
25                  via parameter_defaults in the resource registry.  This
26                  mapping overrides those in ServiceNetMapDefaults.
27     type: json
28   DefaultPasswords:
29     default: {}
30     type: json
31   RoleName:
32     default: ''
33     description: Role name on which the service is applied
34     type: string
35   RoleParameters:
36     default: {}
37     description: Parameters specific to the role
38     type: json
39   EnableInternalTLS:
40     type: boolean
41     default: false
42
43 conditions:
44
45   internal_tls_enabled: {equals: [{get_param: EnableInternalTLS}, true]}
46
47 resources:
48
49   ContainersCommon:
50     type: ../../containers-common.yaml
51
52   RedisBase:
53     type: ../../../../puppet/services/database/redis.yaml
54     properties:
55       EndpointMap: {get_param: EndpointMap}
56       ServiceData: {get_param: ServiceData}
57       ServiceNetMap: {get_param: ServiceNetMap}
58       DefaultPasswords: {get_param: DefaultPasswords}
59       RoleName: {get_param: RoleName}
60       RoleParameters: {get_param: RoleParameters}
61
62 outputs:
63   role_data:
64     description: Role data for the Redis API role.
65     value:
66       service_name: {get_attr: [RedisBase, role_data, service_name]}
67       config_settings:
68         map_merge:
69           - {get_attr: [RedisBase, role_data, config_settings]}
70           - redis::service_manage: false
71             redis::notify_service: false
72             redis::managed_by_cluster_manager: true
73             tripleo::profile::pacemaker::database::redis_bundle::redis_docker_image: &redis_image_pcmklatest
74               list_join:
75                 - ':'
76                 - - yaql:
77                       data: {get_param: DockerRedisImage}
78                       expression: $.data.rightSplit(separator => ":", maxSplits => 1)[0]
79                   - 'pcmklatest'
80             tripleo::profile::pacemaker::database::redis_bundle::control_port: 3124
81             tripleo.redis.firewall_rules:
82               '108 redis-bundle':
83                 dport:
84                   - 3124
85                   - 6379
86                   - 26379
87             tripleo::stunnel::manage_service: false
88             tripleo::stunnel::foreground: 'yes'
89       logging_source: {get_attr: [RedisBase, role_data, logging_source]}
90       logging_groups: {get_attr: [RedisBase, role_data, logging_groups]}
91       step_config: ""
92       service_config_settings: {get_attr: [RedisBase, role_data, service_config_settings]}
93       # BEGIN DOCKER SETTINGS
94       puppet_config:
95         config_volume: 'redis'
96         # NOTE: we need the exec tag to copy /etc/redis.conf.puppet to
97         # /etc/redis.conf
98         # https://github.com/arioch/puppet-redis/commit/1c004143223e660cbd433422ff8194508aab9763
99         puppet_tags: 'exec'
100         step_config:
101           get_attr: [RedisBase, role_data, step_config]
102         config_image: &redis_config_image {get_param: DockerRedisConfigImage}
103       kolla_config:
104         /var/lib/kolla/config_files/redis.json:
105           command: /usr/sbin/pacemaker_remoted
106           config_files:
107             - dest: /etc/libqb/force-filesystem-sockets
108               source: /dev/null
109               owner: root
110               perm: '0644'
111             - source: "/var/lib/kolla/config_files/src/*"
112               dest: "/"
113               merge: true
114               preserve_properties: true
115               optional: true
116           permissions:
117             - path: /var/run/redis
118               owner: redis:redis
119               recurse: true
120             - path: /var/lib/redis
121               owner: redis:redis
122               recurse: true
123             - path: /var/log/redis
124               owner: redis:redis
125               recurse: true
126         /var/lib/kolla/config_files/redis_tls_proxy.json:
127           command: stunnel /etc/stunnel/stunnel.conf
128           config_files:
129             - source: "/var/lib/kolla/config_files/src/*"
130               dest: "/"
131               merge: true
132               preserve_properties: true
133       docker_config:
134         step_1:
135           redis_image_tag:
136             start_order: 1
137             detach: false
138             net: host
139             user: root
140             command:
141               - '/bin/bash'
142               - '-c'
143               - str_replace:
144                   template:
145                     "/usr/bin/docker tag 'REDIS_IMAGE' 'REDIS_IMAGE_PCMKLATEST'"
146                   params:
147                     REDIS_IMAGE: {get_param: DockerRedisImage}
148                     REDIS_IMAGE_PCMKLATEST: *redis_image_pcmklatest
149             image: {get_param: DockerRedisImage}
150             volumes:
151               - /etc/hosts:/etc/hosts:ro
152               - /etc/localtime:/etc/localtime:ro
153               - /dev/shm:/dev/shm:rw
154               - /etc/sysconfig/docker:/etc/sysconfig/docker:ro
155               - /usr/bin:/usr/bin:ro
156               - /var/run/docker.sock:/var/run/docker.sock:rw
157         step_2:
158           map_merge:
159             - redis_init_bundle:
160                 start_order: 2
161                 detach: false
162                 net: host
163                 user: root
164                 config_volume: 'redis_init_bundle'
165                 command:
166                   - '/bin/bash'
167                   - '-c'
168                   - str_replace:
169                       template:
170                         list_join:
171                           - '; '
172                           - - "cp -a /tmp/puppet-etc/* /etc/puppet; echo '{\"step\": 2}' > /etc/puppet/hieradata/docker.json"
173                             - "FACTER_uuid=docker puppet apply --tags file,file_line,concat,augeas,TAGS -v -e 'CONFIG'"
174                       params:
175                         TAGS: 'pacemaker::resource::bundle,pacemaker::property,pacemaker::resource::ocf,pacemaker::constraint::order,pacemaker::constraint::colocation'
176                         CONFIG: 'include ::tripleo::profile::base::pacemaker;include ::tripleo::profile::pacemaker::database::redis_bundle'
177                 image: *redis_config_image
178                 volumes:
179                   - /etc/hosts:/etc/hosts:ro
180                   - /etc/localtime:/etc/localtime:ro
181                   - /etc/puppet:/tmp/puppet-etc:ro
182                   - /usr/share/openstack-puppet/modules:/usr/share/openstack-puppet/modules:ro
183                   - /etc/corosync/corosync.conf:/etc/corosync/corosync.conf:ro
184                   - /dev/shm:/dev/shm:rw
185             - if:
186                 - internal_tls_enabled
187                 - redis_tls_proxy:
188                     start_order: 3
189                     image: *redis_image_pcmklatest
190                     net: host
191                     user: root
192                     restart: always
193                     volumes:
194                       list_concat:
195                         - {get_attr: [ContainersCommon, volumes]}
196                         -
197                           - /var/lib/kolla/config_files/redis_tls_proxy.json:/var/lib/kolla/config_files/config.json:ro
198                           - /var/lib/config-data/puppet-generated/redis/:/var/lib/kolla/config_files/src:ro
199                           - /etc/pki/tls/certs/redis.crt:/etc/pki/tls/certs/redis.crt:ro
200                           - /etc/pki/tls/private/redis.key:/etc/pki/tls/private/redis.key:ro
201                     environment:
202                       - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
203                 - {}
204       metadata_settings:
205         get_attr: [RedisBase, role_data, metadata_settings]
206       host_prep_tasks:
207         - name: create /var/run/redis
208           file:
209             path: /var/run/redis
210             state: directory
211         - name: create /var/log/redis
212           file:
213             path: /var/log/redis
214             state: directory
215         - name: create /var/lib/redis
216           file:
217             path: /var/lib/redis
218             state: directory
219       upgrade_tasks:
220         - name: get bootstrap nodeid
221           tags: common
222           command: hiera -c /etc/puppet/hiera.yaml bootstrap_nodeid
223           register: bootstrap_node
224         - name: set is_bootstrap_node fact
225           tags: common
226           set_fact: is_bootstrap_node={{bootstrap_node.stdout|lower == ansible_hostname|lower}}
227         - name: Check cluster resource status
228           tags: step2
229           pacemaker_resource:
230             resource: {get_attr: [RedisBase, role_data, service_name]}
231             state: master
232             check_mode: true
233           ignore_errors: true
234           register: redis_res
235         - name: Disable the redis cluster resource
236           tags: step2
237           pacemaker_resource:
238             resource: {get_attr: [RedisBase, role_data, service_name]}
239             state: disable
240             wait_for_resource: true
241           register: output
242           retries: 5
243           until: output.rc == 0
244           when: is_bootstrap_node and redis_res|succeeded
245         - name: Delete the stopped redis cluster resource.
246           tags: step2
247           pacemaker_resource:
248             resource: {get_attr: [RedisBase, role_data, service_name]}
249             state: delete
250             wait_for_resource: true
251           register: output
252           retries: 5
253           until: output.rc == 0
254           when: is_bootstrap_node and redis_res|succeeded
255         - name: Disable redis service
256           tags: step2
257           service: name=redis enabled=no