Merge "Containerize Cinder-volume for HA"
[apex-tripleo-heat-templates.git] / puppet / services / keystone.yaml
1 heat_template_version: pike
2
3 description: >
4   OpenStack Keystone service configured with Puppet
5
6 parameters:
7   KeystoneEnableDBPurge:
8     default: true
9     description: |
10         Whether to create cron job for purging soft deleted rows in Keystone database.
11     type: boolean
12   KeystoneSSLCertificate:
13     default: ''
14     description: Keystone certificate for verifying token validity.
15     type: string
16   KeystoneSSLCertificateKey:
17     default: ''
18     description: Keystone key for signing tokens.
19     type: string
20     hidden: true
21   KeystoneNotificationDriver:
22     description: Comma-separated list of Oslo notification drivers used by Keystone
23     default: ['messaging']
24     type: comma_delimited_list
25   KeystoneNotificationFormat:
26     description: The Keystone notification format
27     default: 'basic'
28     type: string
29     constraints:
30       - allowed_values: [ 'basic', 'cadf' ]
31   KeystoneRegion:
32     type: string
33     default: 'regionOne'
34     description: Keystone region for endpoint
35   KeystoneTokenProvider:
36     description: The keystone token format
37     type: string
38     default: 'fernet'
39     constraints:
40       - allowed_values: ['uuid', 'fernet']
41   ServiceNetMap:
42     default: {}
43     description: Mapping of service_name -> network name. Typically set
44                  via parameter_defaults in the resource registry.  This
45                  mapping overrides those in ServiceNetMapDefaults.
46     type: json
47   DefaultPasswords:
48     default: {}
49     type: json
50   RoleName:
51     default: ''
52     description: Role name on which the service is applied
53     type: string
54   RoleParameters:
55     default: {}
56     description: Parameters specific to the role
57     type: json
58   EndpointMap:
59     default: {}
60     description: Mapping of service endpoint -> protocol. Typically set
61                  via parameter_defaults in the resource registry.
62     type: json
63   Debug:
64     type: string
65     default: ''
66   KeystoneDebug:
67     default: ''
68     description: Set to True to enable debugging Keystone service.
69     type: string
70   AdminEmail:
71     default: 'admin@example.com'
72     description: The email for the keystone admin account.
73     type: string
74     hidden: true
75   AdminPassword:
76     description: The password for the keystone admin account, used for monitoring, querying neutron etc.
77     type: string
78     hidden: true
79   AdminToken:
80     description: The keystone auth secret and db password.
81     type: string
82     hidden: true
83   RabbitPassword:
84     description: The password for RabbitMQ
85     type: string
86     hidden: true
87   RabbitUserName:
88     default: guest
89     description: The username for RabbitMQ
90     type: string
91   RabbitClientUseSSL:
92     default: false
93     description: >
94         Rabbit client subscriber parameter to specify
95         an SSL connection to the RabbitMQ host.
96     type: string
97   RabbitClientPort:
98     default: 5672
99     description: Set rabbit subscriber port, change this if using SSL
100     type: number
101   KeystoneWorkers:
102     type: string
103     description: Set the number of workers for keystone::wsgi::apache
104     default: '%{::os_workers}'
105   MonitoringSubscriptionKeystone:
106     default: 'overcloud-keystone'
107     type: string
108   KeystoneCredential0:
109     type: string
110     description: The first Keystone credential key. Must be a valid key.
111   KeystoneCredential1:
112     type: string
113     description: The second Keystone credential key. Must be a valid key.
114   KeystoneFernetKey0:
115     type: string
116     default: ''
117     description: (DEPRECATED) The first Keystone fernet key. Must be a valid key.
118   KeystoneFernetKey1:
119     type: string
120     default: ''
121     description: (DEPRECATED) The second Keystone fernet key. Must be a valid key.
122   KeystoneFernetKeys:
123     type: json
124     description: Mapping containing keystone's fernet keys and their paths.
125   ManageKeystoneFernetKeys:
126     type: boolean
127     default: true
128     description: Whether TripleO should manage the keystone fernet keys or not.
129                  If set to true, the fernet keys will get the values from the
130                  saved keys repository in mistral (the KeystoneFernetKeys
131                  variable). If set to false, only the stack creation
132                  initializes the keys, but subsequent updates won't touch them.
133   KeystoneLoggingSource:
134     type: json
135     default:
136       tag: openstack.keystone
137       path: /var/log/keystone/keystone.log
138   EnableInternalTLS:
139     type: boolean
140     default: false
141   KeystoneCronTokenFlushEnsure:
142     type: string
143     description: >
144         Cron to purge expired tokens - Ensure
145     default: 'present'
146   KeystoneCronTokenFlushMinute:
147     type: comma_delimited_list
148     description: >
149         Cron to purge expired tokens - Minute
150     default: '1'
151   KeystoneCronTokenFlushHour:
152     type: comma_delimited_list
153     description: >
154         Cron to purge expired tokens - Hour
155     default: '*'
156   KeystoneCronTokenFlushMonthday:
157     type: comma_delimited_list
158     description: >
159         Cron to purge expired tokens - Month Day
160     default: '*'
161   KeystoneCronTokenFlushMonth:
162     type: comma_delimited_list
163     description: >
164         Cron to purge expired tokens - Month
165     default: '*'
166   KeystoneCronTokenFlushWeekday:
167     type: comma_delimited_list
168     description: >
169         Cron to purge expired tokens - Week Day
170     default: '*'
171   KeystoneCronTokenFlushMaxDelay:
172     type: string
173     description: >
174         Cron to purge expired tokens - Max Delay
175     default: '0'
176   KeystoneCronTokenFlushDestination:
177     type: string
178     description: >
179         Cron to purge expired tokens - Log destination
180     default: '/var/log/keystone/keystone-tokenflush.log'
181   KeystoneCronTokenFlushUser:
182     type: string
183     description: >
184         Cron to purge expired tokens - User
185     default: 'keystone'
186   KeystonePolicies:
187     description: |
188       A hash of policies to configure for Keystone.
189       e.g. { keystone-context_is_admin: { key: context_is_admin, value: 'role:admin' } }
190     default: {}
191     type: json
192   KeystoneLDAPDomainEnable:
193     description: Trigger to call ldap_backend puppet keystone define.
194     type: boolean
195     default: False
196   KeystoneLDAPBackendConfigs:
197     description: Hash containing the configurations for the LDAP backends
198                  configured in keystone.
199     type: json
200     default: {}
201     hidden: true
202
203 parameter_groups:
204 - label: deprecated
205   description: |
206    The following parameters are deprecated and will be removed. They should not
207    be relied on for new deployments. If you have concerns regarding deprecated
208    parameters, please contact the TripleO development team on IRC or the
209    OpenStack mailing list.
210   parameters:
211   - KeystoneFernetKey0
212   - KeystoneFernetKey1
213
214 resources:
215
216   ApacheServiceBase:
217     type: ./apache.yaml
218     properties:
219       ServiceNetMap: {get_param: ServiceNetMap}
220       DefaultPasswords: {get_param: DefaultPasswords}
221       EndpointMap: {get_param: EndpointMap}
222       RoleName: {get_param: RoleName}
223       RoleParameters: {get_param: RoleParameters}
224       EnableInternalTLS: {get_param: EnableInternalTLS}
225
226 conditions:
227   keystone_fernet_tokens: {equals: [{get_param: KeystoneTokenProvider}, "fernet"]}
228   keystone_ldap_domain_enabled: {equals: [{get_param: KeystoneLDAPDomainEnable}, True]}
229   service_debug_unset: {equals : [{get_param: KeystoneDebug}, '']}
230
231 outputs:
232   role_data:
233     description: Role data for the Keystone role.
234     value:
235       service_name: keystone
236       monitoring_subscription: {get_param: MonitoringSubscriptionKeystone}
237       logging_source: {get_param: KeystoneLoggingSource}
238       logging_groups:
239         - keystone
240       config_settings:
241         map_merge:
242           - get_attr: [ApacheServiceBase, role_data, config_settings]
243           - keystone::database_connection:
244               make_url:
245                 scheme: {get_param: [EndpointMap, MysqlInternal, protocol]}
246                 username: keystone
247                 password: {get_param: AdminToken}
248                 host: {get_param: [EndpointMap, MysqlInternal, host]}
249                 path: /keystone
250                 query:
251                   read_default_file: /etc/my.cnf.d/tripleo.cnf
252                   read_default_group: tripleo
253             keystone::admin_token: {get_param: AdminToken}
254             keystone::admin_password: {get_param: AdminPassword}
255             keystone::roles::admin::password: {get_param: AdminPassword}
256             keystone::policy::policies: {get_param: KeystonePolicies}
257             keystone_ssl_certificate: {get_param: KeystoneSSLCertificate}
258             keystone_ssl_certificate_key: {get_param: KeystoneSSLCertificateKey}
259             keystone::token_provider: {get_param: KeystoneTokenProvider}
260             keystone::enable_fernet_setup: {if: [keystone_fernet_tokens, true, false]}
261             keystone::enable_proxy_headers_parsing: true
262             keystone::enable_credential_setup: true
263             keystone::credential_keys:
264               '/etc/keystone/credential-keys/0':
265                 content: {get_param: KeystoneCredential0}
266               '/etc/keystone/credential-keys/1':
267                 content: {get_param: KeystoneCredential1}
268             keystone::fernet_keys: {get_param: KeystoneFernetKeys}
269             keystone::fernet_replace_keys: {get_param: ManageKeystoneFernetKeys}
270             keystone::debug:
271               if:
272               - service_debug_unset
273               - {get_param: Debug }
274               - {get_param: KeystoneDebug }
275             keystone::rabbit_userid: {get_param: RabbitUserName}
276             keystone::rabbit_password: {get_param: RabbitPassword}
277             keystone::rabbit_use_ssl: {get_param: RabbitClientUseSSL}
278             keystone::rabbit_port: {get_param: RabbitClientPort}
279             keystone::notification_driver: {get_param: KeystoneNotificationDriver}
280             keystone::notification_format: {get_param: KeystoneNotificationFormat}
281             keystone::roles::admin::email: {get_param: AdminEmail}
282             keystone::roles::admin::password: {get_param: AdminPassword}
283             keystone::endpoint::public_url: {get_param: [EndpointMap, KeystonePublic, uri_no_suffix]}
284             keystone::endpoint::internal_url: {get_param: [EndpointMap, KeystoneInternal, uri_no_suffix]}
285             keystone::endpoint::admin_url: {get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix]}
286             keystone::endpoint::region: {get_param: KeystoneRegion}
287             keystone::endpoint::version: ''
288             keystone_enable_db_purge: {get_param: KeystoneEnableDBPurge}
289             keystone::rabbit_heartbeat_timeout_threshold: 60
290             keystone::cron::token_flush::maxdelay: 3600
291             keystone::roles::admin::service_tenant: 'service'
292             keystone::roles::admin::admin_tenant: 'admin'
293             keystone::cron::token_flush::destination: '/var/log/keystone/keystone-tokenflush.log'
294             keystone::config::keystone_config:
295               ec2/driver:
296                 value: 'keystone.contrib.ec2.backends.sql.Ec2'
297             keystone::service_name: 'httpd'
298             keystone::enable_ssl: {get_param: EnableInternalTLS}
299             keystone::wsgi::apache::ssl: {get_param: EnableInternalTLS}
300             keystone::wsgi::apache::servername:
301               str_replace:
302                 template:
303                   "%{hiera('fqdn_$NETWORK')}"
304                 params:
305                   $NETWORK: {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}
306             keystone::wsgi::apache::servername_admin:
307               str_replace:
308                 template:
309                   "%{hiera('fqdn_$NETWORK')}"
310                 params:
311                   $NETWORK: {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}
312             keystone::wsgi::apache::workers: {get_param: KeystoneWorkers}
313             # override via extraconfig:
314             keystone::wsgi::apache::threads: 1
315             keystone::db::database_db_max_retries: -1
316             keystone::db::database_max_retries: -1
317             tripleo.keystone.firewall_rules:
318               '111 keystone':
319                 dport:
320                   - 5000
321                   - 13000
322                   - 35357
323                   - 13357
324             keystone::admin_bind_host:
325               str_replace:
326                 template:
327                   "%{hiera('fqdn_$NETWORK')}"
328                 params:
329                   $NETWORK: {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}
330             keystone::public_bind_host:
331               str_replace:
332                 template:
333                   "%{hiera('fqdn_$NETWORK')}"
334                 params:
335                   $NETWORK: {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}
336             # NOTE: bind IP is found in Heat replacing the network name with the
337             # local node IP for the given network; replacement examples
338             # (eg. for internal_api):
339             # internal_api -> IP
340             # internal_api_uri -> [IP]
341             # internal_api_subnet - > IP/CIDR
342             # NOTE: this applies to all 2 bind IP settings below...
343             keystone::wsgi::apache::bind_host: {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}
344             keystone::wsgi::apache::admin_bind_host: {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}
345             keystone::cron::token_flush::ensure: {get_param: KeystoneCronTokenFlushEnsure}
346             keystone::cron::token_flush::minute: {get_param: KeystoneCronTokenFlushMinute}
347             keystone::cron::token_flush::hour: {get_param: KeystoneCronTokenFlushHour}
348             keystone::cron::token_flush::monthday: {get_param: KeystoneCronTokenFlushMonthday}
349             keystone::cron::token_flush::month: {get_param: KeystoneCronTokenFlushMonth}
350             keystone::cron::token_flush::weekday: {get_param: KeystoneCronTokenFlushWeekday}
351             keystone::cron::token_flush::maxdelay: {get_param: KeystoneCronTokenFlushMaxDelay}
352             keystone::cron::token_flush::destination: {get_param: KeystoneCronTokenFlushDestination}
353             keystone::cron::token_flush::user: {get_param: KeystoneCronTokenFlushUser}
354           -
355             if:
356             - keystone_ldap_domain_enabled
357             -
358               tripleo::profile::base::keystone::ldap_backend_enable: True
359               keystone::using_domain_config: True
360               tripleo::profile::base::keystone::ldap_backends_config:
361                 get_param: KeystoneLDAPBackendConfigs
362             - {}
363
364       step_config: |
365         include ::tripleo::profile::base::keystone
366       service_config_settings:
367         mysql:
368           keystone::db::mysql::password: {get_param: AdminToken}
369           keystone::db::mysql::user: keystone
370           keystone::db::mysql::host: {get_param: [EndpointMap, MysqlInternal, host_nobrackets]}
371           keystone::db::mysql::dbname: keystone
372           keystone::db::mysql::allowed_hosts:
373             - '%'
374             - "%{hiera('mysql_bind_host')}"
375         horizon:
376           if:
377           - keystone_ldap_domain_enabled
378           -
379             horizon::keystone_multidomain_support: true
380             horizon::keystone_default_domain: 'Default'
381           - {}
382       metadata_settings:
383         get_attr: [ApacheServiceBase, role_data, metadata_settings]
384       upgrade_tasks:
385         yaql:
386           expression: $.data.apache_upgrade + $.data.keystone_upgrade
387           data:
388             apache_upgrade:
389               get_attr: [ApacheServiceBase, role_data, upgrade_tasks]
390             keystone_upgrade:
391               - name: Stop keystone service (running under httpd)
392                 tags: step1
393                 service: name=httpd state=stopped