TLS proxy for redis
[apex-tripleo-heat-templates.git] / docker / services / 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
60 outputs:
61   role_data:
62     description: Role data for the Redis API role.
63     value:
64       service_name: {get_attr: [RedisBase, role_data, service_name]}
65       config_settings:
66         map_merge:
67           - {get_attr: [RedisBase, role_data, config_settings]}
68           - redis::daemonize: false
69             tripleo::stunnel::manage_service: false
70             tripleo::stunnel::foreground: 'yes'
71       step_config: &step_config
72         get_attr: [RedisBase, role_data, step_config]
73       service_config_settings: {get_attr: [RedisBase, role_data, service_config_settings]}
74       # BEGIN DOCKER SETTINGS
75       puppet_config:
76         config_volume: 'redis'
77         # NOTE: we need the exec tag to copy /etc/redis.conf.puppet to
78         # /etc/redis.conf
79         # https://github.com/arioch/puppet-redis/commit/1c004143223e660cbd433422ff8194508aab9763
80         puppet_tags: 'exec'
81         step_config: *step_config
82         config_image: {get_param: DockerRedisConfigImage}
83       kolla_config:
84         /var/lib/kolla/config_files/redis.json:
85           command: /usr/bin/redis-server /etc/redis.conf
86           config_files:
87             - source: "/var/lib/kolla/config_files/src/*"
88               dest: "/"
89               merge: true
90               preserve_properties: true
91           permissions:
92             - path: /var/run/redis
93               owner: redis:redis
94               recurse: true
95         /var/lib/kolla/config_files/redis_tls_proxy.json:
96           command: stunnel /etc/stunnel/stunnel.conf
97           config_files:
98             - source: "/var/lib/kolla/config_files/src/*"
99               dest: "/"
100               merge: true
101               preserve_properties: true
102       docker_config:
103         step_1:
104           map_merge:
105             - redis_init_logs:
106                 start_order: 0
107                 detach: false
108                 image: &redis_image {get_param: DockerRedisImage}
109                 privileged: false
110                 user: root
111                 volumes:
112                   - /var/log/containers/redis:/var/log/redis
113                 command: ['/bin/bash', '-c', 'chown -R redis:redis /var/log/redis']
114             - redis:
115                 start_order: 1
116                 image: *redis_image
117                 net: host
118                 privileged: false
119                 restart: always
120                 volumes:
121                   - /run:/run
122                   - /var/lib/kolla/config_files/redis.json:/var/lib/kolla/config_files/config.json:ro
123                   - /var/lib/config-data/puppet-generated/redis/:/var/lib/kolla/config_files/src:ro
124                   - /etc/localtime:/etc/localtime:ro
125                   - /var/log/containers/redis:/var/log/redis
126                 environment:
127                   - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
128             - if:
129                 - internal_tls_enabled
130                 - redis_tls_proxy:
131                     start_order: 2
132                     image: *redis_image
133                     net: host
134                     user: root
135                     restart: always
136                     volumes:
137                       list_concat:
138                         - {get_attr: [ContainersCommon, volumes]}
139                         -
140                           - /var/lib/kolla/config_files/redis_tls_proxy.json:/var/lib/kolla/config_files/config.json:ro
141                           - /var/lib/config-data/puppet-generated/redis/:/var/lib/kolla/config_files/src:ro
142                           - /etc/pki/tls/certs/redis.crt:/etc/pki/tls/certs/redis.crt:ro
143                           - /etc/pki/tls/private/redis.key:/etc/pki/tls/private/redis.key:ro
144                     environment:
145                       - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
146                 - {}
147       metadata_settings:
148         get_attr: [RedisBase, role_data, metadata_settings]
149       host_prep_tasks:
150         - name: create persistent directories
151           file:
152             path: "{{ item }}"
153             state: directory
154           with_items:
155             - /var/log/containers/redis
156             - /var/run/redis
157       upgrade_tasks:
158         - name: Stop and disable redis service
159           tags: step2
160           service: name=redis state=stopped enabled=no