update comment in the template
[heat-templates.git] / qa / wordpress-multi-windows-dns.template
blob5e23cb9c5f7410879f310da021225fd4afaa2c95
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 for the web server instances
12     type: string
13     default: 4GB Standard Instance
14     constraints:
15     - allowed_values:
16       - 4GB Standard Instance
17       - 8GB Standard Instance
18       - 15GB Standard Instance
19       - 30GB Standard Instance
20       description: must be a valid Rackspace Cloud Server flavor.
22   image:
23     type: string
24     default: Windows Server 2012
25     description: Windows Server Image
27   web_server_name:
28     description: base name for the web server instances
29     type: string
30     default: Wordpress Webserver
32   db_name:
33     default: wordpress
34     description: the name for the wordpress database
35     type: string
36     constraints:
37     - length:
38         min: 1
39         max: 64
40       description: must be between 1 and 64 characters
41     - allowed_pattern: "[a-zA-Z][a-zA-Z0-9]*"
42       description: must begin with a letter and contain only alphanumeric characters.
44   db_username:
45     default: admin
46     hidden: true
47     description: wordpress database admin account username
48     type: string
49     constraints:
50     - length:
51         min: 1
52         max: 16
53       description: must be between 1 and 16 characters
54     - allowed_pattern: "[a-zA-Z][a-zA-Z0-9]*"
55       description: must begin with a letter and contain only alphanumeric characters.
57   db_password:
58     default: admin
59     hidden: true
60     description: wordpress database admin account password
61     type: string
62     constraints:
63     - length:
64         min: 1
65         max: 41
66       description: must be between 1 and 14 characters
67     - allowed_pattern: "[a-zA-Z0-9]*"
68       description : must contain only alphanumeric characters.
70   db_flavor:
71     description: wordpress database instance size
72     type: string
73     default: 1GB Instance
74     constraints:
75     - allowed_values:
76       - 1GB Instance
77       - 2GB Instance
78       - 4GB Instance
79       - 8GB Instance
80       - 16GB Instance
81       description: must be a valid cloud database flavor 
83   db_volume_size: 
84     description : wordpress database volume size (in GB)
85     type: number
86     default: 30
87     constraints:
88     - range:
89         min: 1
90         max: 1024
91       description: must be between 1 and 1024 GB
93   db_instance_name: 
94     description: the database instance name
95     type: string
96     default: WP_Cloud_DB
98   domain_name:    
99     description: valid domain name
100     type: string
101     default: example.com
102     
103   email_address:
104     description: domain owner email addresses
105     type: string
106     default: admin@example.com
107   
108   domain_record_type:
109     description: domain record type
110     type: string
111     default: A
112     constraints:
113     - allowed_values:
114       - A
115       - AAAA
116       - NS
117       - MX
118       - CNAME
119       - TXT
120       - SRV
122 resources:
124   web_nodes: 
125     type: OS::Heat::ResourceGroup
126     properties:
127       count: 2
128       resource_def:
129         type: Rackspace::Cloud::WinServer
130         properties:
131           name: { get_param: web_server_name }
132           flavor: { get_param: web_node_flavor }
133           image: { get_param: image }
134           user_data:
135             str_replace:
136               template: |
137                 $source = "http://download.microsoft.com/download/7/0/4/704CEB4C-9F42-4962-A2B0-5C84B0682C7A/WebPlatformInstaller_amd64_en-US.msi"
138                 $destination = "webpi.msi"
139                 $wc = New-Object System.Net.WebClient
140                 $wc.DownloadFile($source, $destination)
141                 Start-Process msiexec -ArgumentList "/i webpi.msi /qn"  -NoNewWindow -Wait
142                 echo "AppPath[@]Default Web Site/wordpress" > wp.app
143                 echo "DbServer[@]%dbhost%" >> wp.app
144                 echo "DbName[@]%dbname%" >> wp.app
145                 echo "DbUsername[@]%dbuser%" >> wp.app
146                 echo "DbPassword[@]%dbpassword%" >> wp.app
147                 echo "DbAdminUsername[@]%dbuser%" >> wp.app
148                 echo "DbAdminPassword[@]%dbpassword%" >> wp.app
149                 $tmpprofile = $env:userprofile
150                 $env:userprofile = "c:\users\administrator"
151                 $wpicmd = "C:\Program Files\Microsoft\Web Platform Installer\WebPICMD.exe"
152                 Start-Process $wpicmd -ArgumentList "/Install /Application:Wordpress@wp.app /MySQLPassword:%dbpassword% /AcceptEULA /Log:.\wpi.log"  -NoNewWindow -Wait
153                 $env:userprofile = $tmpprofile
154               params:
155                 "%dbhost%": { get_attr: [ db, hostname ] }
156                 "%dbname%": { get_param: db_name }
157                 "%dbuser%": { get_param: db_username }
158                 "%dbpassword%": { get_param: db_password }
160   lb:
161     type: "Rackspace::Cloud::LoadBalancer"
162     properties:
163       name:
164         str_replace:
165           template: lb-%server_name%
166           params:
167             "%server_name%": { get_param: web_server_name }
168       nodes:
169       - addresses: { get_attr: [ web_nodes, privateIPv4 ] }
170         port: 80
171         condition: ENABLED
172       protocol: HTTP
173       halfClosed: False
174       algorithm: LEAST_CONNECTIONS
175       connectionThrottle:
176         maxConnections: 50
177         minConnections: 50
178         maxConnectionRate: 50
179         rateInterval: 50
180       port: 80
181       timeout: 120
182       sessionPersistence: HTTP_COOKIE
183       virtualIps:
184       - type: PUBLIC
185         ipVersion: IPV4
186       healthMonitor:
187         type: HTTP
188         delay: 10
189         timeout: 10
190         attemptsBeforeDeactivation: 3
191         path: "/"
192         statusRegex: "."
193         bodyRegex: "."
194       contentCaching: ENABLED
196   db:
197     type: OS::Trove::Instance
198     properties:
199       name: { get_param: db_instance_name }
200       flavor: { get_param: db_flavor }
201       size: { get_param: db_volume_size }
202       users:
203       - name: { get_param: db_username }
204         password: { get_param: db_password }
205         databases:
206         - { get_param: db_name }
207       databases:
208       - name: { get_param: db_name }
210       
211   dns:
212     type: Rackspace::Cloud::DNS
213     properties:
214       name: { get_param: domain_name }
215       emailAddress: { get_param: email_address }
216       records:
217       - name: { get_param: domain_name }
218         type: { get_param: domain_record_type }
219         data: { get_attr: [lb, PublicIp] }
220       - name: { get_param: domain_name }
221         type: NS
222         data: dns1.stabletransit.com
223       - name: { get_param: domain_name }
224         type: NS
225         data: dns2.stabletransit.com
227 outputs:
229   wordpress_url:
230     value: 
231       str_replace:
232         template: http://%ip%/wordpress
233         params:
234           "%ip%": { get_attr: [ lb, PublicIp ] }
235     description: Public URL for the wordpress blog
237   wordpress_domain_url:
238     value: 
239       str_replace:
240         template: "http://%domain%/wordpress"
241         params:
242           "%domain%": { get_param: domain_name }
243     description: Public URL for the wordpress blog with domain name