Merge "FQDN validation"
[apex-tripleo-heat-templates.git] / puppet / services / neutron-api.yaml
1 heat_template_version: ocata
2
3 description: >
4   OpenStack Neutron Server configured with Puppet
5
6 parameters:
7   ServiceNetMap:
8     default: {}
9     description: Mapping of service_name -> network name. Typically set
10                  via parameter_defaults in the resource registry.  This
11                  mapping overrides those in ServiceNetMapDefaults.
12     type: json
13   DefaultPasswords:
14     default: {}
15     type: json
16   EndpointMap:
17     default: {}
18     description: Mapping of service endpoint -> protocol. Typically set
19                  via parameter_defaults in the resource registry.
20     type: json
21   NeutronWorkers:
22     default: ''
23     description: |
24       Sets the number of API and RPC workers for the Neutron service. The
25       default value results in the configuration being left unset and a
26       system-dependent default will be chosen (usually the number of
27       processors). Please note that this can result in a large number of
28       processes and memory consumption on systems with a large core count. On
29       such systems it is recommended that a non-default value be selected that
30       matches the load requirements.
31     type: string
32   NeutronPassword:
33     description: The password for the neutron service and db account, used by neutron agents.
34     type: string
35     hidden: true
36   NeutronAllowL3AgentFailover:
37     default: 'True'
38     description: Allow automatic l3-agent failover
39     type: string
40   NovaPassword:
41     description: The password for the nova service and db account, used by nova-api.
42     type: string
43     hidden: true
44   NeutronEnableDVR:
45     description: Enable Neutron DVR.
46     default: false
47     type: boolean
48   KeystoneRegion:
49     type: string
50     default: 'regionOne'
51     description: Keystone region for endpoint
52   MonitoringSubscriptionNeutronServer:
53     default: 'overcloud-neutron-server'
54     type: string
55   NeutronApiLoggingSource:
56     type: json
57     default:
58       tag: openstack.neutron.api
59       path: /var/log/neutron/server.log
60
61   # DEPRECATED: the following options are deprecated and are currently maintained
62   # for backwards compatibility. They will be removed in the Ocata cycle.
63   NeutronL3HA:
64     default: ''
65     type: string
66     description: |
67       Whether to enable HA for virtual routers. When not set, L3 HA will be
68       automatically enabled if the number of nodes hosting controller
69       configurations and DVR is disabled. Valid values are 'true' or 'false'
70       This parameter is being deprecated in Newton and is scheduled to be
71       removed in Ocata.  Future releases will enable L3 HA by default if it is
72       appropriate for the deployment type. Alternate mechanisms will be
73       available to override.
74   EnableInternalTLS:
75     type: boolean
76     default: false
77
78 parameter_groups:
79 - label: deprecated
80   description: |
81    The following parameters are deprecated and will be removed. They should not
82    be relied on for new deployments. If you have concerns regarding deprecated
83    parameters, please contact the TripleO development team on IRC or the
84    OpenStack mailing list.
85   parameters:
86   - NeutronL3HA
87
88 conditions:
89   use_tls_proxy: {equals : [{get_param: EnableInternalTLS}, true]}
90
91 resources:
92
93   TLSProxyBase:
94     type: OS::TripleO::Services::TLSProxyBase
95     properties:
96       ServiceNetMap: {get_param: ServiceNetMap}
97       DefaultPasswords: {get_param: DefaultPasswords}
98       EndpointMap: {get_param: EndpointMap}
99       EnableInternalTLS: {get_param: EnableInternalTLS}
100
101   NeutronBase:
102     type: ./neutron-base.yaml
103     properties:
104       ServiceNetMap: {get_param: ServiceNetMap}
105       DefaultPasswords: {get_param: DefaultPasswords}
106       EndpointMap: {get_param: EndpointMap}
107
108 outputs:
109   role_data:
110     description: Role data for the Neutron Server agent service.
111     value:
112       service_name: neutron_api
113       monitoring_subscription: {get_param: MonitoringSubscriptionNeutronServer}
114       logging_source: {get_param: NeutronApiLoggingSource}
115       logging_groups:
116         - neutron
117       config_settings:
118         map_merge:
119           - get_attr: [NeutronBase, role_data, config_settings]
120           - get_attr: [TLSProxyBase, role_data, config_settings]
121           - neutron::server::database_connection:
122               list_join:
123                 - ''
124                 - - {get_param: [EndpointMap, MysqlInternal, protocol]}
125                   - '://neutron:'
126                   - {get_param: NeutronPassword}
127                   - '@'
128                   - {get_param: [EndpointMap, MysqlInternal, host]}
129                   - '/ovs_neutron'
130                   - '?read_default_file=/etc/my.cnf.d/tripleo.cnf&read_default_group=tripleo'
131             neutron::keystone::authtoken::auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri] }
132             neutron::keystone::authtoken::auth_url: {get_param: [EndpointMap, KeystoneInternal, uri_no_suffix]}
133             neutron::server::api_workers: {get_param: NeutronWorkers}
134             neutron::server::rpc_workers: {get_param: NeutronWorkers}
135             neutron::server::allow_automatic_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
136             neutron::server::enable_proxy_headers_parsing: true
137             neutron::keystone::authtoken::password: {get_param: NeutronPassword}
138             neutron::server::notifications::auth_url: { get_param: [ EndpointMap, KeystoneV3Admin, uri ] }
139             neutron::server::notifications::tenant_name: 'service'
140             neutron::server::notifications::project_name: 'service'
141             neutron::server::notifications::password: {get_param: NovaPassword}
142             neutron::keystone::authtoken::project_name: 'service'
143             neutron::server::sync_db: true
144             tripleo.neutron_api.firewall_rules:
145               '114 neutron api':
146                 dport:
147                   - 9696
148                   - 13696
149             neutron::server::router_distributed: {get_param: NeutronEnableDVR}
150             # NOTE: bind IP is found in Heat replacing the network name with the local node IP
151             # for the given network; replacement examples (eg. for internal_api):
152             # internal_api -> IP
153             # internal_api_uri -> [IP]
154             # internal_api_subnet - > IP/CIDR
155             tripleo::profile::base::neutron::server::tls_proxy_bind_ip:
156               get_param: [ServiceNetMap, NeutronApiNetwork]
157             tripleo::profile::base::neutron::server::tls_proxy_fqdn:
158               str_replace:
159                 template:
160                   "%{hiera('fqdn_$NETWORK')}"
161                 params:
162                   $NETWORK: {get_param: [ServiceNetMap, NeutronApiNetwork]}
163             tripleo::profile::base::neutron::server::tls_proxy_port:
164               get_param: [EndpointMap, NeutronInternal, port]
165             # Bind to localhost if internal TLS is enabled, since we put a TLS
166             # proxy in front.
167             neutron::bind_host:
168               if:
169               - use_tls_proxy
170               - 'localhost'
171               - {get_param: [ServiceNetMap, NeutronApiNetwork]}
172             tripleo::profile::base::neutron::server::l3_ha_override: {get_param: NeutronL3HA}
173       step_config: |
174         include tripleo::profile::base::neutron::server
175       service_config_settings:
176         keystone:
177           neutron::keystone::auth::tenant: 'service'
178           neutron::keystone::auth::public_url: {get_param: [EndpointMap, NeutronPublic, uri]}
179           neutron::keystone::auth::internal_url: { get_param: [ EndpointMap, NeutronInternal, uri ] }
180           neutron::keystone::auth::admin_url: { get_param: [ EndpointMap, NeutronAdmin, uri ] }
181           neutron::keystone::auth::password: {get_param: NeutronPassword}
182           neutron::keystone::auth::region: {get_param: KeystoneRegion}
183         mysql:
184           neutron::db::mysql::password: {get_param: NeutronPassword}
185           neutron::db::mysql::user: neutron
186           neutron::db::mysql::host: {get_param: [EndpointMap, MysqlInternal, host_nobrackets]}
187           neutron::db::mysql::dbname: ovs_neutron
188           neutron::db::mysql::allowed_hosts:
189             - '%'
190             - "%{hiera('mysql_bind_host')}"
191       upgrade_tasks:
192         - name: Check if neutron_server is deployed
193           command: systemctl is-enabled neutron-server
194           tags: common
195           ignore_errors: True
196           register: neutron_server_enabled
197         - name: "PreUpgrade step0,validation: Check service neutron-server is running"
198           shell: /usr/bin/systemctl show 'neutron-server' --property ActiveState | grep '\bactive\b'
199           when: neutron_server_enabled.rc == 0
200           tags: step0,validation
201         - name: Stop neutron_api service
202           tags: step1
203           when: neutron_server_enabled.rc == 0
204           service: name=neutron-server state=stopped