Merge "Make CephStorageDeployment depend on NetworkDeployment"
[apex-tripleo-heat-templates.git] / cinder-storage.yaml
1 heat_template_version: 2015-04-30
2 description: 'Common Block Storage Configuration'
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   CinderPassword:
20     default: unset
21     description: The password for the cinder service and db account, used by cinder-api.
22     type: string
23     hidden: true
24   VirtualIP:
25     default: ''
26     type: string
27   ExtraConfig:
28     default: {}
29     description: |
30       Additional configuration to inject into the cluster. The JSON should have
31       the following structure:
32         {"FILEKEY":
33           {"config":
34             [{"section": "SECTIONNAME",
35               "values":
36                 [{"option": "OPTIONNAME",
37                   "value": "VALUENAME"
38                  }
39                 ]
40              }
41             ]
42           }
43         }
44       For instance:
45         {"nova":
46           {"config":
47             [{"section": "default",
48               "values":
49                 [{"option": "force_config_drive",
50                   "value": "always"
51                  }
52                 ]
53              },
54              {"section": "cells",
55               "values":
56                 [{"option": "driver",
57                   "value": "nova.cells.rpc_driver.CellsRPCDriver"
58                  }
59                 ]
60              }
61             ]
62           }
63         }
64     type: json
65   Flavor:
66     description: Flavor for block storage nodes to request when deploying.
67     type: string
68     constraints:
69       - custom_constraint: nova.flavor
70   GlancePort:
71     default: "9292"
72     description: Glance port.
73     type: string
74   KeyName:
75     default: default
76     description: Name of an existing EC2 KeyPair to enable SSH access to the instances
77     type: string
78   RabbitPassword:
79     default: 'guest'
80     type: string
81   RabbitUserName:
82     default: 'guest'
83     type: string
84   RabbitClientUseSSL:
85     default: false
86     description: >
87         Rabbit client subscriber parameter to specify
88         an SSL connection to the RabbitMQ host.
89     type: string
90   RabbitClientPort:
91     default: 5672
92     description: Set rabbit subscriber port, change this if using SSL
93     type: number
94   SnmpdReadonlyUserName:
95     default: ro_snmp_user
96     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
97     type: string
98   SnmpdReadonlyUserPassword:
99     default: unset
100     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
101     type: string
102     hidden: true
103   UpdateIdentifier:
104     default: ''
105     type: string
106     description: >
107       Setting to a previously unused value during stack-update will trigger
108       package update on all nodes
109   Hostname:
110     type: string
111     default: '' # Defaults to Heat created hostname
112
113 resources:
114   BlockStorage:
115     type: OS::Nova::Server
116     properties:
117       image:
118         {get_param: Image}
119       flavor: {get_param: Flavor}
120       key_name: {get_param: KeyName}
121       networks:
122         - network: ctlplane
123       user_data_format: SOFTWARE_CONFIG
124       user_data: {get_resource: NodeUserData}
125       name: {get_param: Hostname}
126
127   NodeUserData:
128     type: OS::TripleO::NodeUserData
129
130   InternalApiPort:
131     type: OS::TripleO::BlockStorage::Ports::InternalApiPort
132     properties:
133       ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
134
135   StoragePort:
136     type: OS::TripleO::BlockStorage::Ports::StoragePort
137     properties:
138       ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
139
140   StorageMgmtPort:
141     type: OS::TripleO::BlockStorage::Ports::StorageMgmtPort
142     properties:
143       ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
144
145   NetworkConfig:
146     type: OS::TripleO::BlockStorage::Net::SoftwareConfig
147     properties:
148       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
149       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
150       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
151
152   NetworkDeployment:
153     type: OS::TripleO::SoftwareDeployment
154     properties:
155       config: {get_resource: NetworkConfig}
156       server: {get_resource: BlockStorage}
157
158   BlockStorageDeployment:
159     type: OS::Heat::StructuredDeployment
160     properties:
161       server: {get_resource: BlockStorage}
162       config: {get_resource: BlockStorageConfig}
163       input_values:
164         controller_virtual_ip: {get_param: VirtualIP}
165         cinder_dsn: {list_join: ['', ['mysql://cinder:', {get_param: CinderPassword}, '@', {get_param: VirtualIP} , '/cinder']]}
166         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
167         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
168       signal_transport: NO_SIGNAL
169   BlockStorageConfig:
170     type: OS::Heat::StructuredConfig
171     properties:
172       group: os-apply-config
173       config:
174         keystone:
175           host: {get_input: controller_virtual_ip}
176         cinder:
177           db: {get_input: cinder_dsn}
178           volume_size_mb:
179             get_param: CinderLVMLoopDeviceSize
180           iscsi-helper:
181             get_param: CinderISCSIHelper
182         snmpd:
183           export_MIB: UCD-SNMP-MIB
184           readonly_user_name: {get_input: snmpd_readonly_user_name}
185           readonly_user_password: {get_input: snmpd_readonly_user_password}
186         rabbit:
187           host: {get_input: controller_virtual_ip}
188           username: {get_param: RabbitUserName}
189           password: {get_param: RabbitPassword}
190         glance:
191           host: {get_input: controller_virtual_ip}
192           port: {get_param: GlancePort}
193 outputs:
194   hosts_entry:
195     value:
196       str_replace:
197         template: "IP HOST"
198         params:
199           IP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
200           HOST: {get_attr: [BlockStorage, name]}
201   internal_api_ip_address:
202     description: IP address of the server in the internal_api network
203     value: {get_attr: [InternalApiPort, ip_address]}
204   storage_ip_address:
205     description: IP address of the server in the storage network
206     value: {get_attr: [StoragePort, ip_address]}
207   storage_mgmt_ip_address:
208     description: IP address of the server in the storage_mgmt network
209     value: {get_attr: [StorageMgmtPort, ip_address]}