update comment in the template
[heat-templates.git] / prod / cloud-monitoring-wordpress-multi.yaml
blob421401fa5ebb775f746e9229bf250acde839c32c
1 heat_template_version: 2013-05-23
3 description: |
4   This is a Heat template to deploy Load Balanced WordPress servers with a
5   backend database server.
7 parameter_groups:
9 - label: Server Settings
10   parameters:
11   - image
13 - label: Web Server Settings
14   parameters:
15   - wp_master_server_flavor
16   - wp_web_server_count
17   - wp_web_server_flavor
19 - label: Database Settings
20   parameters:
21   - database_server_flavor
23 - label: WordPress Settings
24   parameters:
25   - domain
26   - username
28 - label: rax-dev-params
29   # These are parameters that will not be displayed in the portal. The purpose
30   # of these parameters are for users who are developing or testing newer or
31   # different setups. If any of these parameters are changed, there is a good
32   # chance this stack will fail to properly deploy.
33   parameters:
34   - kitchen
35   - chef_version
36   - child_template
37   - version
38   - prefix
39   - load_balancer_hostname
40   - wp_web_server_hostnames
41   - wp_master_server_hostname
42   - database_server_hostname
44 parameters:
46   # Server settings
47   load_balancer_hostname:
48     label: Load Balancer Hostname
49     description: Hostname for the Cloud Load Balancer
50     type: string
51     default: WordPress-Load-Balancer
52     constraints:
53     - length:
54         min: 1
55         max: 64
56     - allowed_pattern: "^[a-zA-Z][a-zA-Z0-9-]*$"
57       description: |
58         Must begin with a letter and contain only alphanumeric characters.
60   database_server_hostname:
61     label: Server Name
62     description: Hostname to use for your WordPress Database Server
63     type: string
64     default: WordPress-Database
65     constraints:
66     - length:
67         min: 1
68         max: 64
69     - allowed_pattern: "^[a-zA-Z][a-zA-Z0-9-]*$"
70       description: |
71         Must begin with a letter and contain only alphanumeric characters.
73   wp_master_server_hostname:
74     label: Server Name
75     description: Hostname to use for your WordPress web-master server.
76     type: string
77     default: WordPress-Master
78     constraints:
79     - length:
80         min: 1
81         max: 64
82     - allowed_pattern: "^[a-zA-Z][a-zA-Z0-9-]*$"
83       description: |
84         Must begin with a letter and contain only alphanumeric characters.
86   wp_web_server_hostnames:
87     label: Server Name
88     description: Hostname to use for all additional WordPress web nodes
89     type: string
90     default: WordPress-Web%index%
91     constraints:
92     - length:
93         min: 1
94         max: 64
95     - allowed_pattern: "^[a-zA-Z][a-zA-Z0-9%-]*$"
96       description: |
97         Must begin with a letter and contain only alphanumeric characters.
99   wp_web_server_count:
100     label: Web Server Count
101     description: Number of web servers to deploy in addition to the web-master
102     type: number
103     default: 3
104     constraints:
105     - range:
106         min: 0
107         max: 7
108       description: Must be between 0 and 7 servers.
110   image:
111     label: Operating System
112     description: |
113       Required: Server image used for all servers that are created as a part of
114       this deployment.
115     type: string
116     default: Ubuntu 12.04 LTS (Precise Pangolin) (PVHVM)
117     constraints:
118     - allowed_values:
119       - Ubuntu 12.04 LTS (Precise Pangolin) (PVHVM)
120       description: Must be a supported operating system.
122   database_server_flavor:
123     label: Server Size
124     description: |
125       Cloud Server size to use for the database server. Sizes refer to the
126       amount of RAM allocated to the server.
127     type: string
128     default: 4 GB General Purpose v1
129     constraints:
130     - allowed_values:
131       - 2 GB General Purpose v1
132       - 4 GB General Purpose v1
133       - 8 GB General Purpose v1
134       - 15 GB I/O v1
135       - 30 GB I/O v1
136       - 2GB Standard Instance
137       - 4GB Standard Instance
138       - 8GB Standard Instance
139       - 15GB Standard Instance
140       - 30GB Standard Instance
141       description: |
142         Must be a valid Rackspace Cloud Server flavor for the region you have
143         selected to deploy into.
145   wp_master_server_flavor:
146     label: Master Server Size
147     description: |
148       Cloud Server size to use for the web-master node. The size should be at
149       least one size larger than what you use for the web nodes. This server
150       handles all admin calls and will ensure files are synced across all
151       other nodes.
152     type: string
153     default: 2 GB General Purpose v1
154     constraints:
155     - allowed_values:
156       - 1 GB General Purpose v1
157       - 2 GB General Purpose v1
158       - 4 GB General Purpose v1
159       - 8 GB General Purpose v1
160       - 15 GB I/O v1
161       - 30 GB I/O v1
162       - 1GB Standard Instance
163       - 2GB Standard Instance
164       - 4GB Standard Instance
165       - 8GB Standard Instance
166       - 15GB Standard Instance
167       - 30GB Standard Instance
168       description: |
169         Must be a valid Rackspace Cloud Server flavor for the region you have
170         selected to deploy into.
172   wp_web_server_flavor:
173     label: Node Server Size
174     description: |
175       Cloud Server size to use on all of the additional web nodes.
176     type: string
177     default: 2 GB General Purpose v1
178     constraints:
179     - allowed_values:
180       - 1 GB General Purpose v1
181       - 2 GB General Purpose v1
182       - 4 GB General Purpose v1
183       - 8 GB General Purpose v1
184       - 15 GB I/O v1
185       - 30 GB I/O v1
186       - 1GB Standard Instance
187       - 2GB Standard Instance
188       - 4GB Standard Instance
189       - 8GB Standard Instance
190       - 15GB Standard Instance
191       - 30GB Standard Instance
192       description: |
193         Must be a valid Rackspace Cloud Server flavor for the region you have
194         selected to deploy into.
196   # WordPress settings
197   domain:
198     label: Site Domain
199     description: Domain to be used with this WordPress site
200     type: string
201     default: "example.com"
202     constraints:
203     - allowed_pattern: "^[a-zA-Z0-9.-]{1,255}.[a-zA-Z]{2,15}$"
204       description: Must be a valid domain name
206   version:
207     label: WordPress Version
208     description: Version of WordPress to install
209     type: string
210     default: "3.9.2"
211     constraints:
212     - allowed_values:
213       - "3.9.2"
215   # Optional Apache settings (SSL certs)
216   # ssl_private_key:
217   #  description: Private SSL key
218   #  type: string
219   #  constraints:
220   #  - allowed_pattern: "^(.){0,5000}$"
221   #    description: "Key values must be under 5,000 characters"
223   # ssl_certificate:
224   #  description: Public SSL key
225   #  type: string
226   #  constraints:
227   #  - allowed_pattern: "^(.){0,5000}$"
228   #    description: "Certificate values must be under 5,000 characters"
230   #ssl_intermediate_certs:
231   #  description: Intermediate SSL Certificates
232   #  type: string
233   #  constraints:
234   #  - allowed_pattern: "^(.){0,5000}$"
235   #    description: "Intermediate values must be under 5,000 characters."
237   # Database and system user configuration
238   prefix:
239     label: Wordpress Prefix
240     description: Prefix to use for database table names.
241     type: string
242     default: wp_
243     constraints:
244     - allowed_pattern: "^[0-9a-zA-Z$_]{0,10}$"
245       description: |
246         Prefix must be shorter than 10 characters, and can only include
247         letters, numbers, $, and/or underscores.
249   database_name:
250     label: Database Name
251     description: WordPress database name
252     type: string
253     default: wordpress
254     constraints:
255     - allowed_pattern: "^[0-9a-zA-Z$_]{1,64}$"
256       description: |
257         Maximum length of 64 characters, may only contain letters, numbers, and
258         underscores.
260   username:
261     label: Username
262     description: "Username for system, database, and WordPress logins."
263     type: string
264     default: wp_user
265     constraints:
266     - allowed_pattern: "^[a-zA-Z0-9 _.@-]{1,16}$"
267       description: |
268         Must be shorter than 16 characters and may only contain alphanumeric
269         characters, ' ', '_', '.', '@', and/or '-'.
271   ## The below parameters are for development purposes. Use the default
272   ## settings for these parameters when attempting to deploy this stack.
273   # Chef configuration options
274   kitchen:
275     label: Kitchen
276     description: |
277       URL for the kitchen to use, fetched using git
278     type: string
279     default: https://github.com/rackspace-orchestration-templates/wordpress-multi
281   chef_version:
282     label: Chef Version
283     description: Version of chef client to use
284     type: string
285     default: 11.16.2
287   child_template:
288     label: Child Template
289     description: |
290       Location of the child template to use for the WordPress web servers
291     type: string
292     default: https://raw.github.com/heat-ci/heat-templates/master/prod/cloud-monitoring-wordpress-single.yaml
294 resources:
295   # Random password generation
296   database_password:
297     type: "OS::Heat::RandomString"
298     properties:
299       length: 16
300       sequence: lettersdigits
302   mysql_root_password:
303     type: "OS::Heat::RandomString"
304     properties:
305       length: 16
306       sequence: lettersdigits
308   mysql_repl_password:
309     type: "OS::Heat::RandomString"
310     properties:
311       length: 16
312       sequence: lettersdigits
314   mysql_debian_password:
315     type: "OS::Heat::RandomString"
316     properties:
317       length: 16
318       sequence: lettersdigits
320   # Random strings for WP salting
321   wp_auth:
322     type: "OS::Heat::RandomString"
323     properties:
324       length: 32
325       sequence: hexdigits
327   wp_logged_in:
328     type: "OS::Heat::RandomString"
329     properties:
330       length: 32
331       sequence: hexdigits
333   wp_nonce:
334     type: "OS::Heat::RandomString"
335     properties:
336       length: 32
337       sequence: hexdigits
339   wp_secure_auth:
340     type: "OS::Heat::RandomString"
341     properties:
342       length: 32
343       sequence: hexdigits
345   # SSH KEYS
346   sync_key:
347     type: "OS::Nova::KeyPair"
348     properties:
349       name:
350         str_replace:
351           template: "%stack_id%-sync"
352           params:
353             "%stack_id%": { get_param: "OS::stack_id" }
354       save_private_key: true
356   ssh_key:
357     type: "OS::Nova::KeyPair"
358     properties:
359       name: { get_param: "OS::stack_id" }
360       save_private_key: true
362   # Server resources
363   load_balancer:
364     type: "Rackspace::Cloud::LoadBalancer"
365     depends_on:
366     - wp_master_server_setup
367     - wp_web_servers
368     properties:
369       name: { get_param: load_balancer_hostname }
370       nodes:
371       - addresses: [ { get_attr: [wp_master_server, networks, private, 0] } ]
372         port: 80
373         condition: ENABLED
374       - addresses: { get_attr: [wp_web_servers, privateIPv4] }
375         port: 80
376         condition: ENABLED
377       healthMonitor:
378         type: HTTP
379         delay: 10
380         timeout: 5
381         attemptsBeforeDeactivation: 2
382         path: /
383         statusRegex: ^[23]0[0-2]$
384       port: 80
385       protocol: HTTP
386       algorithm: ROUND_ROBIN
387       contentCaching: ENABLED
388       virtualIps:
389       - type: PUBLIC
390         ipVersion: IPV4
391       metadata:
392         rax-heat: { get_param: "OS::stack_id" }
394   database_server:
395     type: "OS::Nova::Server"
396     properties:
397       name: { get_param: database_server_hostname }
398       flavor: { get_param: database_server_flavor }
399       image: { get_param: image }
400       key_name: { get_resource: ssh_key }
401       metadata:
402         rax-heat: { get_param: "OS::stack_id" }
404   cloud_monitoring_config:
405     type: OS::Heat::CloudConfig
406     properties:
407       cloud_config:
408         apt_upgrade: true
409         apt_sources:
410         - source: deb http://stable.packages.cloudmonitoring.rackspace.com/ubuntu-12.04-x86_64 cloudmonitoring main
411           key: |
412             -----BEGIN PGP PUBLIC KEY BLOCK-----
413             Version: GnuPG v1.4.10 (GNU/Linux)
415             mQENBFAZuVEBCAC8iXu/UEDLdkzRJzBKx14cgAiPHxSCjV4CPWqhOIrN4tl0PVHD
416             BYSJV7oSu0napBTfAK5/0+8zNnnq8j0PNg2YmPOFkL/rIMHJH8eZ08Ffq9j4GQdM
417             fSHDa6Zvgz68gJMLQ1IRPguen7p2mIEoOl8NuTwpjnWBZTdptImUoj53ZTKGYYS+
418             OWs2iZ1IHS8CbmWaTMxiEk8kT5plM3jvbkJAKBAaTfYsddo1JqqMpcbykOLcgSrG
419             oipyiDo9Ppi+EAOie1r6+zqmWpY+ScANkOpaVSfLjGp8fo4RP7gHhl26nDiqYB1K
420             7tV1Rl3RMPnGuh4g/8YRkiExKd/XdS2CfO/DABEBAAG0jFJhY2tzcGFjZSBDbG91
421             ZCBNb25pdG9yaW5nIEFnZW50IFBhY2thZ2UgUmVwbyAoaHR0cDovL3d3dy5yYWNr
422             c3BhY2UuY29tL2Nsb3VkL2Nsb3VkX2hvc3RpbmdfcHJvZHVjdHMvbW9uaXRvcmlu
423             Zy8pIDxtb25pdG9yaW5nQHJhY2tzcGFjZS5jb20+iQE4BBMBAgAiBQJQGblRAhsD
424             BgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRCghvB30Fq5FCo6B/9Oel0Q/cX6
425             1Lyk+teFywmB2jgn/UC51ioPZBHnHZLIjKH/CA6y7B9jm3+VddH60qDDANzlK/LL
426             MyUgwLj9+flKeS+H5AL6l3RarWlGm11fJjjW2TnaUCUXQxw6A/QQvpHpl7eknEKJ
427             m3kWMGAT6y/FbkSye18HUu6dtxvxosiMzi/7yVPJ7MwtUy2Bv1z9yHvt4I0rR8L5
428             CdFeEcqY4FlGmFBG200BuGzLMrqv6HF6LH3khPoXbGjVmHbHKIzqCx4hPWNRtZIv
429             fnu/aZcXJOJkB3/jzxaCjabOU+BCkXqVVFnUkbOYKoJ8EVLoepnhuVLUYErRjt7J
430             qDsI4KPQoEjTuQENBFAZuVEBCACUBBO83pdDYHfKe394Il8MSw7PBhtxFRHjUty2
431             WZYW12P+lZ3Q0Tqfc5Z8+CxnnkbdfvL13duAXn6goWObPRlQsYg4Ik9wO5TlYxqu
432             igtPZ+mJ9KlZZ/c2+KV4AeqO+K0L5k96nFkxd/Jh90SLk0ckP24RAYx2WqRrIPyX
433             xJCZlSWSqITMBcFp+kb0GdMk+Lnq7wPIJ08IKFJORSHgBbfHAmHCMOCUTZPhQHLA
434             yBDMLcaLP9xlRm72JG6tko2k2/cBV707CfbnR2PyJFqq+zuEyMdBpnxtY3Tpdfdk
435             MW9ScO40ndpwR72MG+Oy8iM8CTnmzRzMHMPiiPVAit1ZIXtZABEBAAGJAR8EGAEC
436             AAkFAlAZuVECGwwACgkQoIbwd9BauRSx0QgApV/n2L/Qe5T8aRhoiecs4gH+ubo2
437             uCQV9W3f56X3obHz9/mNkLTIKF2zHQhEUCCOwptoeyvmHht/QYXu1m3Gvq9X2F85
438             YU6I2PTEHuI/u6oZF7cEa8z8ofq91AWSOrXXEJiZUQr5DNjO8SiAzPulGM2teSA+
439             ez1wn9hhG9Kdu4LpaQ3EZHHBUKCLNU7nN/Ie5OeYA8FKbudNz13jTNRG+GYGrpPj
440             PlhA5RCmTY5N018O51YXEiTh4C7TLskFwRFPbbexh3mZx2s6VlcaCK0lEdQ/+XK3
441             KW+ZuPEh074b3VujLvuUCXd6T5FT5J6U/6qZgEoEiXwODX+fYIrD5PfjCw==
442             =S1lE
443             -----END PGP PUBLIC KEY BLOCK-----
444         write-files:
445         - path: /etc/rackspace-monitoring-agent.cfg
446           content:
447             str_replace:
448               template: monitoring_token {agent_token}
449               params:
450                 "{agent_token}": { get_resource: agent_token }
451         packages:
452         - rackspace-monitoring-agent
454   agent_token:
455     type: Rackspace::CloudMonitoring::AgentToken
456     properties:
457       label: { get_param: "OS::stack_name" } 
459   wp_master_server:
460     type: "OS::Nova::Server"
461     properties:
462       name: { get_param: wp_master_server_hostname }
463       flavor: { get_param: wp_master_server_flavor }
464       image: { get_param: image }
465       key_name: { get_resource: ssh_key }
466       config_drive: true
467       user_data_format: RAW
468       user_data:
469         get_attr: [ cloud_monitoring_config, config ]
470       metadata:
471         rax-heat: { get_param: "OS::stack_id" }
473   master_cpu_check:
474     type: Rackspace::CloudMonitoring::Check
475     properties:
476       entity: { get_resource: wp_master_server }
477       type: agent.cpu
478       label: master_cpu_check
479       details: {}
480       metadata:
481         rax-heat: { get_param: "OS::stack_id" }
482         stack-name: { get_param: "OS::stack_name" }
483       period: 30
484       timeout: 10
486   master_mem_check:
487     type: Rackspace::CloudMonitoring::Check
488     properties:
489       entity: { get_resource: wp_master_server }
490       type: agent.memory
491       label: master_mem_check
492       details: {}
493       metadata:
494         rax-heat: { get_param: "OS::stack_id" }
495         stack-name: { get_param: "OS::stack_name" }
496       period: 30
497       timeout: 10
499   master_filesystem_check:
500     type: Rackspace::CloudMonitoring::Check
501     properties:
502       entity: { get_resource: wp_master_server }
503       type: agent.filesystem
504       label: master_fs_check
505       details:
506         target: "/"
507       metadata:
508         rax-heat: { get_param: "OS::stack_id" }
509         stack-name: { get_param: "OS::stack_name" }
510       period: 30
511       timeout: 10
513   wp_web_servers:
514     type: "OS::Heat::ResourceGroup"
515     depends_on: database_server
516     properties:
517       count: { get_param: wp_web_server_count }
518       resource_def:
519         type: { get_param: child_template }
520         properties:
521           agent_config: { get_attr: [ cloud_monitoring_config, config ] }
522           wp_web_server_hostname: { get_param: wp_web_server_hostnames }
523           image: { get_param: image }
524           wp_web_server_flavor: { get_param: wp_web_server_flavor }
525           domain: { get_param: domain }
526           version: { get_param: version }
527           # ssl_private_key: { get_param: ssl_private_key }
528           # ssl_certificate: { get_param: ssl_certificate }
529           # ssl_intermediate_certs: { get_param: ssl_intermediate_certs }
530           lsync_pub: { get_attr: [sync_key, public_key]}
531           varnish_master_backend: { get_attr: [wp_master_server, networks, private, 0] }
532           prefix: { get_param: prefix }
533           database_name: { get_param: database_name }
534           database_host: { get_attr: [database_server, networks, private, 0] }
535           memcached_host: { get_attr: [database_server, networks, private, 0] }
536           username: { get_param: username }
537           database_password: { get_attr: [database_password, value] }
538           wp_auth: { get_attr: [wp_auth, value] }
539           wp_logged_in: { get_attr: [wp_logged_in, value] }
540           wp_nonce: { get_attr: [wp_nonce, value] }
541           wp_secure_auth: { get_attr: [wp_secure_auth, value] }
542           ssh_keypair_name: { get_resource: ssh_key }
543           ssh_private_key: { get_attr: [ssh_key, private_key] }
544           ssh_public_key: { get_attr: [ssh_key, public_key] }
545           kitchen: { get_param: kitchen }
546           chef_version: { get_param: chef_version }
547           parent_stack_id: { get_param: "OS::stack_id" }
549   # Chef resources
550   database_server_setup:
551     type: "OS::Heat::ChefSolo"
552     depends_on: database_server
553     properties:
554       username: root
555       private_key: { get_attr: [ssh_key, private_key] }
556       host: { get_attr: [database_server, accessIPv4] }
557       kitchen: { get_param: kitchen }
558       chef_version: { get_param: chef_version }
559       node:
560         hollandbackup:
561           main:
562             backup_directory: "/var/lib/mysqlbackup"
563             mysqldump:
564               user: "root"
565               host: "localhost"
566               password: { get_attr: [mysql_root_password, value] }
567         memcached:
568           memory: 500
569           listen: { get_attr: [database_server, networks, private, 0] }
570         mysql:
571           bind_address: { get_attr: [database_server, networks, private, 0] }
572           server_root_password: { get_attr: [mysql_root_password, value] }
573           server_repl_password: { get_attr: [mysql_repl_password, value] }
574           server_debian_password: { get_attr: [mysql_debian_password, value] }
575           remove_test_database: true
576           remove_anonymous_users: true
577           root_network_acl: [ "10.%" ]
578         rax:
579           firewall:
580             tcp: [22]
581           mysql:
582             innodb_buffer_pool_mempercent: 0.6
583         run_list: ["recipe[apt]",
584                    "recipe[build-essential]",
585                    "recipe[rax-firewall]",
586                    "recipe[mysql::server]",
587                    "recipe[rax-wordpress::memcached-firewall]",
588                    "recipe[memcached]",
589                    "recipe[rax-wordpress::mysql]",
590                    "recipe[rax-wordpress::mysql-firewall]",
591                    "recipe[hollandbackup]",
592                    "recipe[hollandbackup::mysqldump]",
593                    "recipe[hollandbackup::main]",
594                    "recipe[hollandbackup::backupsets]",
595                    "recipe[hollandbackup::cron]"]
597   wp_master_server_setup:
598     type: "OS::Heat::ChefSolo"
599     depends_on:
600     - database_server_setup
601     - wp_web_servers
602     properties:
603       username: root
604       private_key: { get_attr: [ssh_key, private_key] }
605       host: { get_attr: [wp_master_server, accessIPv4] }
606       kitchen: { get_param: kitchen }
607       chef_version: { get_param: chef_version }
608       node:
609         apache:
610           listen_ports: [8080]
611           timeout: 30
612           serversignature: "Off"
613           traceenable: "Off"
614         lsyncd:
615           interval: 5
616         monit:
617           notify_email: 'root@localhost'
618           mail_format:
619             from: 'monit@localhost'
620         mysql:
621           bind_address: { get_attr: [mysql_root_password, value] }
622           server_root_password: { get_attr: [mysql_root_password, value] }
623         sysctl:
624           values:
625             fs.inotify.max_user_watches: 1000000
626         varnish:
627           version: "3.0"
628           listen_port: "80"
629         vsftpd:
630           ipaddress: ''
631           write_enable: true
632           local_umask: "002"
633           chroot_local_user: false
634           hide_ids: false
635           ssl_enable: true
636           ssl_ciphers: "AES256-SHA"
637         wordpress:
638           version: { get_param: version }
639           server_aliases: [{ get_param: domain }]
640           dir:
641             str_replace:
642               template: "/var/www/vhosts/%domain%"
643               params:
644                 "%domain%": { get_param: domain }
645           db:
646             name: { get_param: database_name }
647             user: { get_param: username }
648             pass: { get_attr: [database_password, value] }
649             host: { get_attr: [database_server, networks, private, 0] }
650           keys:
651             auth: { get_attr: [wp_auth, value] }
652             logged_in: { get_attr: [wp_logged_in, value] }
653             nonce_key: { get_attr: [wp_nonce, value] }
654             secure_auth_key: { get_attr: [wp_secure_auth, value] }
655         rax:
656           apache:
657             domain: { get_param: domain }
658             # ssl_private_key: { get_param: ssl_private_key }
659             # ssl_certificate: { get_param: ssl_certificate }
660             # ssl_intermediate_certs: { get_param: ssl_intermediate_certs }
661           lsyncd:
662             ssh:
663               private_key: { get_attr: [sync_key, private_key] }
664             clients: { get_attr: [wp_web_servers, privateIPv4] }
665           memcache:
666             server: { get_attr: [database_server, networks, private, 0] }
667           varnish:
668             master_backend: "localhost"
669           packages:
670             - php5-imagick
671           wordpress:
672             admin_user: { get_param: username }
673             admin_pass: { get_attr: [database_password, value] }
674             user:
675               name: { get_param: username }
676               group: { get_param: username }
677         run_list: ["recipe[apt]",
678                    "recipe[build-essential]",
679                    "recipe[mysql::client]",
680                    "recipe[mysql-chef_gem]",
681                    "recipe[rax-wordpress::apache-prep]",
682                    "recipe[sysctl::attribute_driver]",
683                    "recipe[rax-wordpress::x509]",
684                    "recipe[php]",
685                    "recipe[rax-install-packages]",
686                    "recipe[rax-wordpress::wp-database]",
687                    "recipe[wordpress]",
688                    "recipe[rax-wordpress::wp-setup]",
689                    "recipe[rax-wordpress::user]",
690                    "recipe[rax-wordpress::memcache]",
691                    "recipe[lsyncd]",
692                    "recipe[vsftpd]",
693                    "recipe[rax-wordpress::vsftpd]",
694                    "recipe[varnish::repo]",
695                    "recipe[varnish]",
696                    "recipe[rax-wordpress::apache]",
697                    "recipe[rax-wordpress::varnish]",
698                    "recipe[rax-wordpress::varnish-firewall]",
699                    "recipe[rax-wordpress::firewall]",
700                    "recipe[rax-wordpress::vsftpd-firewall]",
701                    "recipe[rax-wordpress::lsyncd]"]
703   database_server_firewall:
704     type: "OS::Heat::ChefSolo"
705     depends_on: wp_master_server_setup
706     properties:
707       username: root
708       private_key: { get_attr: [ssh_key, private_key] }
709       host: { get_attr: [database_server, accessIPv4] }
710       kitchen: { get_param: kitchen }
711       chef_version: { get_param: chef_version }
712       node:
713         rax:
714           memcached:
715             clients:
716             - { get_attr: [wp_master_server, networks, private, 0] }
717             - { get_attr: [wp_web_servers, privateIPv4] }
718         run_list: ["recipe[rax-wordpress::memcached-firewall]"]
720 outputs:
721   private_key:
722     value: { get_attr: [ssh_key, private_key] }
723     description: SSH Private IP
725   load_balancer_ip:
726     value: { get_attr: [load_balancer, PublicIp] }
727     description: Load Balancer IP
729   wordpress_user:
730     value: { get_param: username }
731     description: WordPress User
733   wordpress_password:
734     value: { get_attr: [database_password, value] }
735     description: WordPress Password
737   database_server_ip:
738     value: { get_attr: [database_server, accessIPv4] }
739     description: Database Server IP
741   wordpress_web_master_ip:
742     value: { get_attr: [wp_master_server, accessIPv4] }
743     description: Web-Master IP
745   wordpress_web_ips:
746     value: { get_attr: [wp_web_servers, accessIPv4] }
747     description: Web Server IPs
749   mysql_root_password:
750     value: { get_attr: [mysql_root_password, value] }
751     description: MySQL Root Password