Merge "Use a single configuration file for specifying docker containers."
[apex-tripleo-heat-templates.git] / docker / services / rabbitmq.yaml
1 heat_template_version: pike
2
3 description: >
4   OpenStack containerized Rabbitmq service
5
6 parameters:
7   DockerRabbitmqImage:
8     description: image
9     type: string
10   DockerRabbitmqConfigImage:
11     description: The container image to use for the rabbitmq 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   RabbitCookie:
40     type: string
41     default: ''
42     hidden: true
43
44 resources:
45
46   ContainersCommon:
47     type: ./containers-common.yaml
48
49   RabbitmqBase:
50     type: ../../puppet/services/rabbitmq.yaml
51     properties:
52       EndpointMap: {get_param: EndpointMap}
53       ServiceData: {get_param: ServiceData}
54       ServiceNetMap: {get_param: ServiceNetMap}
55       DefaultPasswords: {get_param: DefaultPasswords}
56       RoleName: {get_param: RoleName}
57       RoleParameters: {get_param: RoleParameters}
58
59 outputs:
60   role_data:
61     description: Role data for the Rabbitmq API role.
62     value:
63       service_name: {get_attr: [RabbitmqBase, role_data, service_name]}
64       # RabbitMQ plugins initialization occurs on every node
65       config_settings:
66         map_merge:
67           - {get_attr: [RabbitmqBase, role_data, config_settings]}
68           - rabbitmq::admin_enable: false
69       step_config: &step_config
70         list_join:
71           - "\n"
72           - - "['Rabbitmq_policy', 'Rabbitmq_user'].each |String $val| { noop_resource($val) }"
73             - get_attr: [RabbitmqBase, role_data, step_config]
74       service_config_settings: {get_attr: [RabbitmqBase, role_data, service_config_settings]}
75       # BEGIN DOCKER SETTINGS
76       puppet_config:
77         config_volume: rabbitmq
78         step_config: *step_config
79         config_image: &rabbitmq_config_image {get_param: DockerRabbitmqConfigImage}
80       kolla_config:
81         /var/lib/kolla/config_files/rabbitmq.json:
82           command: /usr/lib/rabbitmq/bin/rabbitmq-server
83           config_files:
84             - source: "/var/lib/kolla/config_files/src/*"
85               dest: "/"
86               merge: true
87               preserve_properties: true
88           permissions:
89             - path: /var/lib/rabbitmq
90               owner: rabbitmq:rabbitmq
91               recurse: true
92       docker_config:
93         # Kolla_bootstrap runs before permissions set by kolla_config
94         step_1:
95           rabbitmq_init_logs:
96             start_order: 0
97             detach: false
98             image: &rabbitmq_image {get_param: DockerRabbitmqImage}
99             privileged: false
100             user: root
101             volumes:
102               - /var/log/containers/rabbitmq:/var/log/rabbitmq
103             command: ['/bin/bash', '-c', 'chown -R rabbitmq:rabbitmq /var/log/rabbitmq']
104           rabbitmq_bootstrap:
105             start_order: 1
106             detach: false
107             image: *rabbitmq_image
108             net: host
109             privileged: false
110             volumes:
111               list_concat:
112                 - {get_attr: [ContainersCommon, volumes]}
113                 -
114                   - /var/lib/kolla/config_files/rabbitmq.json:/var/lib/kolla/config_files/config.json:ro
115                   - /var/lib/config-data/puppet-generated/rabbitmq/:/var/lib/kolla/config_files/src:ro
116                   - /var/lib/rabbitmq:/var/lib/rabbitmq
117                   - /var/log/containers/rabbitmq:/var/log/rabbitmq
118             environment:
119               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
120               - KOLLA_BOOTSTRAP=True
121               -
122                 list_join:
123                   - '='
124                   - - 'RABBITMQ_CLUSTER_COOKIE'
125                     -
126                       yaql:
127                         expression: $.data.passwords.where($ != '').first()
128                         data:
129                           passwords:
130                             - {get_param: RabbitCookie}
131                             - {get_param: [DefaultPasswords, rabbit_cookie]}
132           rabbitmq:
133             start_order: 2
134             image: *rabbitmq_image
135             net: host
136             privileged: false
137             restart: always
138             volumes:
139               list_concat:
140                 - {get_attr: [ContainersCommon, volumes]}
141                 -
142                   - /var/lib/kolla/config_files/rabbitmq.json:/var/lib/kolla/config_files/config.json:ro
143                   - /var/lib/config-data/puppet-generated/rabbitmq/:/var/lib/kolla/config_files/src:ro
144                   - /var/lib/rabbitmq:/var/lib/rabbitmq
145                   - /var/log/containers/rabbitmq:/var/log/rabbitmq
146             environment:
147               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
148       docker_puppet_tasks:
149         # RabbitMQ users and policies initialization occurs only on single node
150         step_1:
151           config_volume: 'rabbit_init_tasks'
152           puppet_tags: 'rabbitmq_policy,rabbitmq_user'
153           step_config: 'include ::tripleo::profile::base::rabbitmq'
154           config_image: *rabbitmq_config_image
155           volumes:
156             - /var/lib/config-data/rabbitmq/etc/rabbitmq/:/etc/rabbitmq/:ro
157             - /var/lib/rabbitmq:/var/lib/rabbitmq:ro
158       host_prep_tasks:
159         - name: create persistent directories
160           file:
161             path: "{{ item }}"
162             state: directory
163           with_items:
164             - /var/log/containers/rabbitmq
165             - /var/lib/rabbitmq
166       upgrade_tasks:
167         - name: Stop and disable rabbitmq service
168           tags: step2
169           service: name=rabbitmq-server state=stopped enabled=no