Map Horizon, Redis, Rabbit, memcached to isolated nets
[apex-tripleo-heat-templates.git] / puppet / cinder-storage-puppet.yaml
1 heat_template_version: 2015-04-30
2 description: 'OpenStack cinder storage configured by Puppet'
3 parameters:
4   Image:
5     default: overcloud-cinder-volume
6     type: string
7   CinderEnableIscsiBackend:
8     default: true
9     description: Whether to enable or not the Iscsi backend for Cinder
10     type: boolean
11   CinderISCSIHelper:
12     default: tgtadm
13     description: The iSCSI helper to use with cinder.
14     type: string
15   CinderLVMLoopDeviceSize:
16     default: 5000
17     description: The size of the loopback file used by the cinder LVM driver.
18     type: number
19   Debug:
20     default: ''
21     description: Set to True to enable debugging on all services.
22     type: string
23   VirtualIP:
24     default: ''
25     type: string
26   ExtraConfig:
27     default: {}
28     description: |
29       Additional configuration to inject into the cluster. The JSON should have
30       the following structure:
31         {"FILEKEY":
32           {"config":
33             [{"section": "SECTIONNAME",
34               "values":
35                 [{"option": "OPTIONNAME",
36                   "value": "VALUENAME"
37                  }
38                 ]
39              }
40             ]
41           }
42         }
43       For instance:
44         {"nova":
45           {"config":
46             [{"section": "default",
47               "values":
48                 [{"option": "force_config_drive",
49                   "value": "always"
50                  }
51                 ]
52              },
53              {"section": "cells",
54               "values":
55                 [{"option": "driver",
56                   "value": "nova.cells.rpc_driver.CellsRPCDriver"
57                  }
58                 ]
59              }
60             ]
61           }
62         }
63     type: json
64   Flavor:
65     description: Flavor for block storage nodes to request when deploying.
66     type: string
67     constraints:
68       - custom_constraint: nova.flavor
69   GlancePort:
70     default: "9292"
71     description: Glance port.
72     type: string
73   KeyName:
74     default: default
75     description: Name of an existing EC2 KeyPair to enable SSH access to the instances
76     type: string
77   RabbitPassword:
78     default: 'guest'
79     type: string
80   RabbitUserName:
81     default: 'guest'
82     type: string
83   RabbitClientUseSSL:
84     default: false
85     description: >
86         Rabbit client subscriber parameter to specify
87         an SSL connection to the RabbitMQ host.
88     type: string
89   RabbitClientPort:
90     default: 5672
91     description: Set rabbit subscriber port, change this if using SSL
92     type: number
93   SnmpdReadonlyUserName:
94     default: ro_snmp_user
95     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
96     type: string
97   SnmpdReadonlyUserPassword:
98     default: unset
99     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
100     type: string
101     hidden: true
102   NtpServer:
103     type: string
104     default: ''
105   EnablePackageInstall:
106     default: 'false'
107     description: Set to true to enable package installation via Puppet
108     type: boolean
109
110 resources:
111   BlockStorage:
112     type: OS::Nova::Server
113     properties:
114       image:
115         {get_param: Image}
116       flavor: {get_param: Flavor}
117       key_name: {get_param: KeyName}
118       networks:
119         - network: ctlplane
120       user_data_format: SOFTWARE_CONFIG
121       user_data: {get_resource: NodeUserData}
122
123   NodeUserData:
124     type: OS::TripleO::NodeUserData
125
126   InternalApiPort:
127     type: OS::TripleO::BlockStorage::Ports::InternalApiPort
128     properties:
129       ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
130
131   StoragePort:
132     type: OS::TripleO::BlockStorage::Ports::StoragePort
133     properties:
134       ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
135
136   StorageMgmtPort:
137     type: OS::TripleO::BlockStorage::Ports::StorageMgmtPort
138     properties:
139       ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
140
141   NetworkConfig:
142     type: OS::TripleO::BlockStorage::Net::SoftwareConfig
143     properties:
144       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
145       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
146       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
147
148   NetworkDeployment:
149     type: OS::TripleO::SoftwareDeployment
150     properties:
151       config: {get_resource: NetworkConfig}
152       server: {get_resource: BlockStorage}
153
154   BlockStorageDeployment:
155     type: OS::Heat::StructuredDeployment
156     properties:
157       server: {get_resource: BlockStorage}
158       config: {get_resource: BlockStorageConfig}
159       input_values:
160         debug: {get_param: Debug}
161         cinder_dsn: {list_join: ['', ['mysql://cinder:unset@', {get_param: VirtualIP} , '/cinder']]}
162         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
163         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
164         cinder_lvm_loop_device_size:
165           str_replace:
166             template: sizeM
167             params:
168               size: {get_param: CinderLVMLoopDeviceSize}
169         cinder_enable_iscsi_backend: {get_param: CinderEnableIscsiBackend}
170         cinder_iscsi_helper: {get_param: CinderISCSIHelper}
171         rabbit_username: {get_param: RabbitUserName}
172         rabbit_password: {get_param: RabbitPassword}
173         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
174         rabbit_client_port: {get_param: RabbitClientPort}
175         ntp_servers:
176           str_replace:
177             template: '["server"]'
178             params:
179               server: {get_param: NtpServer}
180         enable_package_install: {get_param: EnablePackageInstall}
181       signal_transport: NO_SIGNAL
182
183   # Map heat metadata into hiera datafiles
184   BlockStorageConfig:
185     type: OS::Heat::StructuredConfig
186     properties:
187       group: os-apply-config
188       config:
189         hiera:
190           hierarchy:
191             - heat_config_%{::deploy_config_name}
192             - volume
193             - all_nodes # provided by allNodesConfig
194             - '"%{::osfamily}"'
195             - common
196           datafiles:
197             common:
198               raw_data: {get_file: hieradata/common.yaml}
199             volume:
200               raw_data: {get_file: hieradata/volume.yaml}
201               oac_data:
202                 cinder_iscsi_ip_address: local-ipv4
203               mapped_data:
204                 # Cinder
205                 cinder::debug: {get_input: debug}
206                 cinder::setup_test_volume::size: {get_input: cinder_lvm_loop_device_size}
207                 cinder_iscsi_helper: {get_input: cinder_iscsi_helper}
208                 cinder::database_connection: {get_input: cinder_dsn}
209                 cinder::rabbit_userid: {get_input: rabbit_username}
210                 cinder::rabbit_password: {get_input: rabbit_password}
211                 cinder::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
212                 cinder::rabbit_port: {get_input: rabbit_client_port}
213                 cinder_enable_iscsi_backend: {get_input: cinder_enable_iscsi_backend}
214                 ntp::servers: {get_input: ntp_servers}
215                 enable_package_install: {get_input: enable_package_install}
216                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
217                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
218
219 outputs:
220   hosts_entry:
221     value:
222       str_replace:
223         template: "IP HOST"
224         params:
225           IP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
226           HOST: {get_attr: [BlockStorage, name]}
227   nova_server_resource:
228     description: Heat resource handle for the block storage server
229     value:
230       {get_resource: BlockStorage}
231   internal_api_ip_address:
232     description: IP address of the server in the internal_api network
233     value: {get_attr: [InternalApiPort, ip_address]}
234   storage_ip_address:
235     description: IP address of the server in the storage network
236     value: {get_attr: [StoragePort, ip_address]}
237   storage_mgmt_ip_address:
238     description: IP address of the server in the storage_mgmt network
239     value: {get_attr: [StorageMgmtPort, ip_address]}