update comment in the template
[heat-templates.git] / qa / wordpress-multi-dns.template
blob1b49b6d9d0e7cfdb11c7ac416b65437e82ce2060
1 heat_template_version: 2013-05-23
3 description: |
4   HEAT template for deploying a multi-node wordpress deployment on Rackspace Cloud
5   using Cloud Servers, Cloud Load Balancers and Cloud Databases. This version uses
6   a user-defined template resource to specify the implementation of the web-heads
8 parameters:
10   web_node_flavor:
11     description: flavor id for the web server instances
12     type: string
13     default: 1GB Standard Instance
14     constraints:
15     - allowed_values:
16       - 512MB Standard Instance
17       - 1GB Standard Instance
18       - 2GB Standard Instance
19       - 4GB Standard Instance
20       - 8GB Standard Instance
21       - 15GB Standard Instance
22       - 30GB Standard Instance
23       description: must be a valid Rackspace Cloud Server flavor.
25   web_server_name:
26     description: base name for the web server instances
27     type: string
28     default: Wordpress Webserver
30   key_name:
31     description: nova keypair to use for ssh access to the web nodes
32     type: string
34   db_name:
35     default: wordpress
36     description: the name for the wordpress database
37     type: string
38     constraints:
39     - length:
40         min: 1
41         max: 64
42       description: must be between 1 and 64 characters
43     - allowed_pattern: "[a-zA-Z][a-zA-Z0-9]*"
44       description: must begin with a letter and contain only alphanumeric characters.
46   db_username:
47     default: admin
48     hidden: true
49     description: wordpress database admin account username
50     type: string
51     constraints:
52     - length:
53         min: 1
54         max: 16
55       description: must be between 1 and 16 characters
56     - allowed_pattern: "[a-zA-Z][a-zA-Z0-9]*"
57       description: must begin with a letter and contain only alphanumeric characters.
59   db_password:
60     default: admin
61     hidden: true
62     description: wordpress database admin account password
63     type: string
64     constraints:
65     - length:
66         min: 1
67         max: 41
68       description: must be between 1 and 14 characters
69     - allowed_pattern: "[a-zA-Z0-9]*"
70       description : must contain only alphanumeric characters.
72   db_flavor:
73     description: wordpress database instance size
74     type: string
75     default: 1GB Instance
76     constraints:
77     - allowed_values:
78       - 1GB Instance
79       - 2GB Instance
80       - 4GB Instance
81       - 8GB Instance
82       - 16GB Instance
83       description: must be a valid cloud database flavor 
85   db_volume_size: 
86     description : wordpress database volume size (in GB)
87     type: number
88     default: 30
89     constraints:
90     - range:
91         min: 1
92         max: 1024
93       description: must be between 1 and 1024 GB
95   db_instance_name: 
96     description: the database instance name
97     type: string
98     default: WP_Cloud_DB
99   
100   domain_name:    
101     description: valid domain name
102     type: string
103     default: example.com
104     
105   email_address:
106     description: domain owner email addresses
107     type: string
108     default: admin@example.com
109   
110   domain_record_type:
111     description: domain record type
112     type: string
113     default: A
114     constraints:
115     - allowed_values:
116       - A
117       - AAAA
118       - NS
119       - MX
120       - CNAME
121       - TXT
122       - SRV
124 resources:
126   web_nodes:
127     type: OS::Heat::ResourceGroup
128     properties:
129       count: 2
130       resource_def:
131         type: Rackspace::Cloud::Server
132         properties:
133           flavor: { get_param: web_node_flavor }
134           image: fd8e4f18-9270-4f43-8932-c3719ae2f7fd  # CentOS 6.5
135           name: { get_param: web_server_name }
136           key_name: { get_param: key_name }
137           user_data:
138             str_replace:
139               template: |
140                 #!/bin/bash -v
141                 yum -y install mysql httpd wordpress
142                 sed -i "/Deny from All/d" /etc/httpd/conf.d/wordpress.conf
143                 sed -i "s/Require local/Require all granted/" /etc/httpd/conf.d/wordpress.conf
144                 sed --in-place --e "s/localhost/%dbhost%/" --e "s/database_name_here/%dbname%/" --e "s/username_here/%dbuser%/" --e "s/password_here/%dbpass%/" /usr/share/wordpress/wp-config.php
145                 /etc/init.d/httpd start
146                 chkconfig httpd on
147                 iptables -I INPUT -p tcp --dport 80 -j ACCEPT
148                 iptables-save > /etc/sysconfig/iptables
149               params:
150                 "%dbhost%": { get_attr: [ db, hostname ] }
151                 "%dbname%": { get_param: db_name }
152                 "%dbuser%": { get_param: db_username }
153                 "%dbpass%": { get_param: db_password }
155   lb:
156     type: "Rackspace::Cloud::LoadBalancer"
157     properties:
158       name:
159         str_replace:
160           template: "lb-%server_name%"
161           params:
162             "%server_name%": { get_param: web_server_name }
163       nodes:
164       - addresses: { get_attr: [ web_nodes, privateIPv4 ] }
165         port: 80
166         condition: ENABLED
167       protocol: HTTP
168       halfClosed: False
169       algorithm: LEAST_CONNECTIONS
170       connectionThrottle:
171         maxConnections: 50
172         minConnections: 50
173         maxConnectionRate: 50
174         rateInterval: 50
175       port: 80
176       timeout: 120
177       sessionPersistence: HTTP_COOKIE
178       virtualIps:
179       - type: PUBLIC
180         ipVersion: IPV4
181       healthMonitor:
182         type: HTTP
183         delay: 10
184         timeout: 10
185         attemptsBeforeDeactivation: 3
186         path: "/"
187         statusRegex: "."
188         bodyRegex: "."
189       contentCaching: ENABLED
191   db:
192     type: OS::Trove::Instance
193     properties:
194       name: { get_param: db_instance_name }
195       flavor: { get_param: db_flavor }
196       size: { get_param: db_volume_size }
197       users:
198       - name: { get_param: db_username }
199         password: { get_param: db_password }
200         databases:
201         - { get_param: db_name }
202       databases:
203       - name: { get_param: db_name }
204       
205   dns:
206     type: Rackspace::Cloud::DNS
207     properties:
208       name: { get_param: domain_name }
209       emailAddress: { get_param: email_address }
210       records:
211       - name: { get_param: domain_name }
212         type: { get_param: domain_record_type }
213         data: { get_attr: [lb, PublicIp] }
214       - name: { get_param: domain_name }
215         type: NS
216         data: dns1.stabletransit.com
217       - name: { get_param: domain_name }
218         type: NS
219         data: dns2.stabletransit.com
222 outputs:
224   wordpress_url:
225     value: 
226       str_replace:
227         template: "http://%ip%/wordpress"
228         params:
229           "%ip%": { get_attr: [ lb, PublicIp ] }
230     description: Public URL for the wordpress blog
232   wordpress_domain_url:
233     value: 
234       str_replace:
235         template: "http://%domain%/wordpress"
236         params:
237           "%domain%": { get_param: domain_name }
238     description: Public URL for the wordpress blog with domain name