Merge "Switch VIP management from Keepalived to Pacemaker"
[apex-tripleo-heat-templates.git] / puppet / cinder-storage-puppet.yaml
1 heat_template_version: 2014-10-16
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   NetworkConfig:
127     type: OS::TripleO::BlockStorage::Net::SoftwareConfig
128
129   NetworkDeployment:
130     type: OS::TripleO::SoftwareDeployment
131     properties:
132       config: {get_attr: [NetworkConfig, config_id]}
133       server: {get_resource: BlockStorage}
134
135   BlockStorageDeployment:
136     type: OS::Heat::StructuredDeployment
137     properties:
138       server: {get_resource: BlockStorage}
139       config: {get_resource: BlockStorageConfig}
140       input_values:
141         debug: {get_param: Debug}
142         cinder_dsn: {list_join: ['', ['mysql://cinder:unset@', {get_param: VirtualIP} , '/cinder']]}
143         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
144         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
145         cinder_lvm_loop_device_size:
146           str_replace:
147             template: sizeM
148             params:
149               size: {get_param: CinderLVMLoopDeviceSize}
150         cinder_enable_iscsi_backend: {get_param: CinderEnableIscsiBackend}
151         cinder_iscsi_helper: {get_param: CinderISCSIHelper}
152         rabbit_hosts:
153           str_replace:
154             template: '["host"]'
155             params:
156               host: {get_param: VirtualIP}
157         rabbit_username: {get_param: RabbitUserName}
158         rabbit_password: {get_param: RabbitPassword}
159         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
160         rabbit_client_port: {get_param: RabbitClientPort}
161         ntp_servers:
162           str_replace:
163             template: '["server"]'
164             params:
165               server: {get_param: NtpServer}
166         enable_package_install: {get_param: EnablePackageInstall}
167       signal_transport: NO_SIGNAL
168
169   # Map heat metadata into hiera datafiles
170   BlockStorageConfig:
171     type: OS::Heat::StructuredConfig
172     properties:
173       group: os-apply-config
174       config:
175         hiera:
176           hierarchy:
177             - heat_config_%{::deploy_config_name}
178             - volume
179             - '"%{::osfamily}"'
180             - common
181           datafiles:
182             common:
183               raw_data: {get_file: hieradata/common.yaml}
184             volume:
185               raw_data: {get_file: hieradata/volume.yaml}
186               oac_data:
187                 cinder_iscsi_ip_address: local-ipv4
188               mapped_data:
189                 # Cinder
190                 cinder::debug: {get_input: debug}
191                 cinder::setup_test_volume::size: {get_input: cinder_lvm_loop_device_size}
192                 cinder_iscsi_helper: {get_input: cinder_iscsi_helper}
193                 cinder::database_connection: {get_input: cinder_dsn}
194                 cinder::rabbit_hosts: {get_input: rabbit_hosts}
195                 cinder::rabbit_userid: {get_input: rabbit_username}
196                 cinder::rabbit_password: {get_input: rabbit_password}
197                 cinder::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
198                 cinder::rabbit_port: {get_input: rabbit_client_port}
199                 cinder_enable_iscsi_backend: {get_input: cinder_enable_iscsi_backend}
200                 ntp::servers: {get_input: ntp_servers}
201                 enable_package_install: {get_input: enable_package_install}
202                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
203                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
204
205 outputs:
206   hosts_entry:
207     value:
208       str_replace:
209         template: "IP HOST HOST.novalocal"
210         params:
211           IP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
212           HOST: {get_attr: [BlockStorage, name]}
213   nova_server_resource:
214     description: Heat resource handle for the block storage server
215     value:
216       {get_resource: BlockStorage}