Commit Graph

153 Commits

Author SHA1 Message Date
Tim Miller
e4e4989e18 Bring os-svc-install element docs up-to-date.
Change-Id: Ia0547de1a899359994706d1607ed19e5ad5c056f
2013-04-04 09:37:25 -07:00
Tim Miller
f501494bce Enable use_namespaces setting for quantum agents.
Change-Id: I060c381cc9dc858a979e072b78bde6a55ad69472
2013-04-03 21:28:48 -07:00
Tim Miller
00114f6e90 Clearly mark unaudited config templates as such.
Change-Id: I130b0874b2efad1345bb5449bce001985c477960
2013-04-03 21:28:33 -07:00
Jenkins
3df85839e5 Merge "Streamline upstart scripts in os-svc-daemon" 2013-04-04 02:48:05 +00:00
Jenkins
3ea3696c8f Merge "Add a nova-baremetal element." 2013-04-04 02:40:42 +00:00
Tim Miller
123cc109e2 Replace glance-api+glance-reg elements with glance:
'glance' element now results in a properly-configured,
working glance service on first boot.

While glance-api and glance-reg may need to be broken
out again in the future, the intention now is to focus
on a working service for an end-to-end PoC.

Change-Id: I4fb1cd5ad6defef5a5c4fddfded46d51e8097b5a
2013-04-03 19:37:15 -07:00
Jenkins
4c986076ac Merge "Add a quantum element." 2013-04-04 02:15:12 +00:00
Jenkins
2ea0430acb Merge "Add element to run DHCP on all network interfaces." 2013-04-04 01:58:08 +00:00
Clint Byrum
4762f65dc1 Streamline upstart scripts in os-svc-daemon
Best practice is to use start-stop-daemon rather than sudo, as sudo will
apply user-centric pam limits and create a wtmp entry. Also there is no
need for a script stanza, as we are only execing one command.

Change-Id: I0c2f12536b56d90fd43ab40e74424350efcc0b61
2013-04-03 11:32:17 -07:00
Tim Miller
0809886571 Add a nova-baremetal element.
Future work is intended to allow this to serve
as a nova-virt element as well, by allowing the config
and which services are run (such as bm-deploy-helper)
based upon metadata config settings.

Change-Id: I59718a0b329e6adc59097492638cf02c76162c0a
2013-04-03 10:45:28 -07:00
Tim Miller
7e36570519 Add a quantum element.
Change-Id: I1008dcbb4e0a6c4cc25f4cc11a90fbc265ab2fdd
2013-04-02 19:29:07 -07:00
Tim Miller
ea57869d3e Run all openstack services in virtualenvs:
Python package dependency conflicts have been observed
to occur for certain combinations of services at certain
revision.

Running all services in virtualenvs removes the issue.

Change-Id: I100817569b43a5af3427b0ae20cebdc7d55d03a5
2013-04-02 18:13:07 -07:00
Chris Jones
a6b794fffc Add element to run DHCP on all network interfaces.
Ensures that all network interfaces are present in
/etc/network/interfaces. Any interface not already defined there
will be added and configured for DHCP.

Change-Id: I27e0902e62804e8d719acd7288109bd0e294fd16
2013-04-02 10:28:18 +01:00
Clint Byrum
ff7eac3c65 Create users in mysql server based on metadata
Enable templates to specify a list of users that need passwords assigned
in Metadata. These passwords are then communicated back to the template
via an optional wait condition handle using cfn-signal.

Change-Id: Iaaf4d4a9d0d757b7d44ea39e77eed3c55ffffd88
2013-04-02 01:34:32 +00:00
Clint Byrum
6bf07b12d3 Set mysql server_id based on instance-id
Do nothing if we are booted on a server which has no instance-id set,
such as a non-cloud VM or server.

Change-Id: I6df81edbea1b2b4e4f1ef11a9f2ddaf100d98eda
2013-04-02 01:32:23 +00:00
Clint Byrum
72534d6eba Refactor mysql element to do less in first-boot.d
We didn't need to do most of this anyway, we just needed to configure
mysql before we installed the packages in the image. Some of the other
things were half-baked ideas which will come in later changes to add
os-refresh-config and os-config-applier support to the element.

Change-Id: Ib1b66a8b3b70fac10f3f826b1efd414c67f9bfc6
2013-04-02 01:31:40 +00:00
Clint Byrum
a28a1be2c3 Adding cfn-credentials file to heat-cfntools
Change-Id: Icd9f0e24700d8016169682f86d5004ec1486c463
2013-04-02 01:29:11 +00:00
Jenkins
51f003bf2f Merge "remove unnecessary '/usr/local/bin' from install.d." 2013-04-01 22:35:51 +00:00
Tim Miller
3a2f482c9d remove unnecessary '/usr/local/bin' from install.d.
Change-Id: Idda511dbf26c1562d8993bc5bbda6756ce796546
2013-04-01 15:18:41 -07:00
Tim Miller
f2ad365039 Install os-config-applier from stackforge repo.
Change-Id: Ic383750856e23957fe6bd0ee65767efa26021028
2013-04-01 15:17:03 -07:00
Jenkins
12e86eb657 Merge "Fix os-refresh-config failing without scripts." 2013-04-01 20:37:56 +00:00
Robert Collins
c6ff2fcade Switch to using the incubator-bootstrap tree.
Incubator is having dangerous scripts removed from it.

Change-Id: I5567b9b89eeed4dbf124186a84a7d890eefc87ef
2013-03-29 14:01:32 +13:00
Clint Byrum
d5f7d7e7c0 Fix os-refresh-config failing without scripts.
It is valid to request os-refresh-config without putting any scripts in
the element root. This fixes failing builds of heat-cfntools.

Change-Id: I4f70b33e453399ff5baa48919557995a6eb27520
2013-03-21 18:11:22 -07:00
Tim Miller
5b99028acf Correctly translate all branches/tags/shas:
The code which raises an error if two elements try
to install different versions of the same git repo
currently works correctly for SHAs, or if a branch
is specified first, followed by a SHA.

However it fails if two branches are specified, because
the shallow clone does not fetch all branch heads.

This change correctly handles any combination of
SHAs/branch-heads/tags.

Change-Id: I501e94150ddeb41b79588816576a5d7a06fa92aa
2013-03-12 11:59:18 -07:00
Jenkins
c1bf047d39 Merge "Fix script that installs os-refresh-config scripts" 2013-03-12 01:22:26 +00:00
Tim Miller
e56b0de321 Update keystone middleware in cinder api-paste:
cinder-api in trunk will no longer start with
keystone.middleware, only with keystoneclient.middleware.

The issue is discussed here:
  https://bugs.launchpad.net/nova/+bug/1143998

Change-Id: I29f81ca2503957b4df58e86b2392ef4b3c15d6fe
2013-03-09 01:38:07 -08:00
Clint Byrum
a99584d0f9 Fix script that installs os-refresh-config scripts
Was missing executable bits

Change-Id: Idcb984e44f4b45d78c59a45eb0d8d43457c788c9
2013-03-08 23:06:02 -08:00
Clint Byrum
4da169ce6e local-config: Configure proxy for apt and/or yum
Fixes fail to build image on Fedora

Change-Id: I30324081702ffc68e82499d81a841c8ae17119ce
2013-03-08 03:24:45 -08:00
Jenkins
28aa222b20 Merge "Fix issues causing Fedora images to fail" 2013-03-08 03:06:27 +00:00
Jenkins
21720c6acd Merge "Update keystone element to use os-refresh-config." 2013-03-08 03:04:56 +00:00
Jenkins
b554030787 Merge "Install os-refresh-config scripts automatically" 2013-03-08 00:34:40 +00:00
Clint Byrum
597575c681 Fix issues causing Fedora images to fail
For os-refresh-config and os-config-applier, support systemd or upstart.

Change-Id: I4ff12e891a85b3171a6ef0c6898b2d45a1699de1
2013-03-07 14:17:41 -08:00
Tim Miller
6cfd9681b7 Seperate install of services and start scripts:
This allows openstack services to be git/pip installed
without installing any startup scripts.

This is useful for keystone-db or nova-db elements, for
example, where the service must be installed to perform
database migration, but no service start scripts need
be installed.

Additionally, add a tool to create openstack sql databases.

Use openstack pypi mirror:

Use the openstack pypi mirror for openstack service
installation. It's much faster than pypi.org.

Also, pip install $svc_repo/tools/pip-requires first,
if it exists, which is required to pick up oslo.config.

Change-Id: I72751d4da59f8597d20aea2f27a9dfabe2f63a8f
2013-03-07 11:45:41 -08:00
Tim Miller
abbd8a61a8 Update keystone element to use os-refresh-config.
Change-Id: I15595d80ee7fad04d964aaa83a403d9303f6aa55
2013-03-06 16:31:30 -08:00
Tim Miller
8346115bf9 Make 99-install-config-templates executable:
This script is not run by dib unless it is executable.

Change-Id: Ic7658cd229dba5635a4ea445f0c62d9f22198729
2013-03-06 13:37:20 -08:00
Clint Byrum
91351658b3 Install os-refresh-config scripts automatically
Updating the cinder element to reflect the new desired way to ship
os-refresh-config scripts.

Change-Id: Ibde1275725241204f6097ad7cc0ba0de5e6cd431
2013-03-06 11:23:59 -08:00
Jenkins
9215817ec9 Merge "Integrate os-refresh-config with heat-cfntools" 2013-03-06 00:43:53 +00:00
Tim Miller
b880ef9017 local-config element adds authorized_key for root:
Currently, the local-config and stackuser elements
are intertwined.  local-config installs an authorized_key
for stackuser, if the stackuser element is in use.

This change does two things:
- add authorized_key for root from local-config element,
    regardeless of whether stackuser element is in use.
- install key for stack user from stackuser element,
    only if local-config element is in use.

Change-Id: I0d07b61404119ea0650c5c0fb98d6786adcf3ca9
2013-03-05 15:52:03 -08:00
Clint Byrum
2b29ca6183 Integrate os-refresh-config with heat-cfntools
* Provide entry point for Heat Metadata to drive os-refresh-config
* Use os-config-applier for configuring heat cfn tools

Change-Id: Ie38b932173948f1e7c414c48caa1b037916bef84
2013-03-05 14:45:41 -08:00
Clint Byrum
30e803aa56 Allow elements to include skeleton config
Copies all templates found in the root of any element into the
default template location.

These templates will be filled in from heat metadata by
os-config-applier whenever it is run.

Update keystone to install templates in this way as an example.

Change-Id: I0be0a79a431e9ba5b80e84f130c48d5ce8b100ae
Co-Authored-By: Tim Miller <tim.miller.0@gmail.com>
2013-03-05 12:01:39 -08:00
Tim Miller
aa8a2174a6 Add a cinder element.
Change-Id: I4729cf003896c3b4f8267d16e1b4822099231051
2013-02-28 17:09:30 -08:00
Jenkins
07c476b590 Merge "Fix heat-cfntools to work on Fedora" 2013-02-28 05:19:47 +00:00
Clint Byrum
cc4b23aafa Namespace SHA256SUMS file to distro/release/arch
Its possible other images will want to use the same filename

Change-Id: Iae393bfc71205d39e2bc6e12f5524824607d6101
2013-02-27 20:30:14 -08:00
Clint Byrum
614b6af62f Fix heat-cfntools to work on Fedora
Also add redhat-lsb to Fedora images for lsb_release which should prove
useful as a way to do distro-specific things.

Change-Id: Ie32566349319ca244fa02065bb9f81c36c1b49fb
2013-02-27 18:15:08 -08:00
Clint Byrum
b2314243c6 Verify Ubuntu Cloud Images using SHA256SUMS
Relies on https://cloud-images.ubuntu.com being served by a cert signed
by one of the CA's trusted by the build host.

Change-Id: I690b755acca54789110c2c8fa723c8b87b2485c9
2013-02-27 15:31:56 -08:00
Jenkins
0bbea74583 Merge "Don't use sudo in base." 2013-02-27 20:26:01 +00:00
Tim Miller
7d1a4adc17 Specify os-refresh-config path in README.
Change-Id: I1cf9569ae805c070f13a582d376665f2e8976ffc
2013-02-26 20:12:09 -08:00
Robert Collins
2b5557ea30 Don't use sudo in base.
Install.d hooks are already root, we don't need plain sudo there.

Change-Id: I69747049b2f5f649eb503a24487bbb3a4151ae21
2013-02-27 15:51:10 +13:00
Jenkins
b917233a24 Merge "Devstack element pulls from master." 2013-02-27 00:02:31 +00:00
Jenkins
b509dbbd0e Merge "Install heat-cfntools from pypi" 2013-02-27 00:02:24 +00:00
Tim Miller
dc845466bc Add an openstack all-openstack-db element:
This element installs all openstack sql databases into
a single image, useful for a bootstrap image.

Change-Id: I6efe807793ec620a60d5798d28a7e3103a5b90e8
2013-02-25 17:09:37 -08:00
Devananda van der Veen
aa9f447770 Devstack element pulls from master.
Devstack element pulls devstack from trunk
instead of from the tripleo fork.

Change-Id: Ie5b1c325b2464cf1195e8e79857bdea27f9847a2
2013-02-25 16:33:49 -08:00
Steve Baker
48e22d91b6 Run alternatives pip -> pip-python
Checks to see if python-pip is installed and installs
an alternatives link at /usr/bin/pip

Change-Id: I858ac2597d3cacc79144a8b345faf6a2f7dee26e
2013-02-22 12:44:24 +13:00
Steve Baker
bdc5759740 Install heat-cfntools from pypi
Then creates symlinks into /opt/aws/bin using the included script.

This replaces the heat-jeos element, so anything that references heat-jeos will need to be replaced with heat-cfntools

Change-Id: Id286b005f69ea364357303b4bbc1ed29d4f0f8f9
2013-02-22 09:08:43 +13:00
Robert Collins
f42cb641bf Fedora needs to depend on dib-run-parts too.
Change-Id: I56611d1c2bf13c8d24a87869bf8334d8e4992f6f
2013-02-15 15:34:09 +13:00
Jenkins
210e69779b Merge "Give stack user passwordless sudo:" 2013-02-15 02:12:47 +00:00
Robert Collins
9afddcf266 New element that uses a fedora cloud image as the base.
Change-Id: I7d83bb2b359e7a8c3858eca04c96e35cf4e1fe9e
2013-02-15 09:33:29 +13:00
Clint Byrum
91c30f6ab2 Use dib-run-parts for running scripts in target
Also modified dib-run-parts to apply a more workable solution for
filtering out unwanted files such as editor backups and VCS.

The script is installed in its own element, depended on by the OS
specific ubuntu element. This is  because the ubuntu element (and
later other OS's) are responsible for populating the root filesystem.
If we try to install this in base, the root filesystem will look to
be populated already and we will skip automatically choosing ubuntu.

Change-Id: I017646748c1a8360299106289b57d976d45875a8
2013-02-14 10:48:10 -08:00
Jenkins
3ce071c894 Merge "Move the dpkg specific stuff to a dpkg element rather than being hardcoded." 2013-02-14 18:28:55 +00:00
Clint Byrum
d84a2fa246 Work in progress run-parts replacement.
Change-Id: Ie95b3ed2145594b5f6436454a6756012fc1c4729
2013-02-13 16:41:27 -08:00
Robert Collins
7f77729ec5 Move the dpkg specific stuff to a dpkg element rather than being hardcoded.
This includes the install-packages implementation for dpkg, apt http proxy
config, daemon blocking and unblocking.

Change-Id: I8f159021d2b223d7003cec067de3aa605ad06974
2013-02-14 11:16:12 +13:00
Tim Miller
9806b6e737 Give stack user passwordless sudo:
This is very helpful when performing automation.

Additionally, removed addition of stack user to admin group,
since that group does not exist on all systems, and
passwordless sudo eliminates the need it was addressing.

Change-Id: I727bd51acb920c6c2e66247069998b6ee4267895
2013-02-13 12:18:50 -08:00
Tim Miller
56e50ee5cf Consolidate common OS installation into a script:
Move common openstack service installation operations
into a new script `os-svc-install`, which simplifies
the elements for openstack services.

Change-Id: Ied8ac3278e7fe8af76e24748ec4e598a84afa03c
2013-02-13 11:06:00 -08:00
Jenkins
86a1294c28 Merge "cloud-init-nocloud element for non-cloud image" 2013-02-12 23:13:48 +00:00
Clint Byrum
f3dc4c9380 cloud-init-nocloud element for non-cloud image
Disables cloud-init from querying EC2 metadata, or any cloud metadata
service. It keeps only the Nocloud and None data sources, which are both
expected to be "baked in" to an image.  This speeds up boot by 2 minutes
on hosts where cloud-init cannot reach the EC2 metadata service.

Change-Id: I43522c4a442c0f2fc2044d4898768ceb4f839099
2013-02-12 12:49:20 -08:00
Clint Byrum
0841576862 Add cfn-hup configuration for os-refresh-config
Configures cfn-hup to run os-refresh-config on Metadata changes.

Change-Id: I65fcd8e09fe3cb070e3036156eaca4b5b0993d67
2013-02-12 12:21:42 -08:00
Clint Byrum
9ed4aaf2b0 Add element to call os-refresh-config
os-refresh-config simply runs things in a predictable order in directories
that other elements can populate. This element installs it and sets it
up to run at boot.

We also modify os-config-applier element to be called by this rather
than to have its own upstart job. This provides an example of how other
elements can insert themselves into the refresh process.

Change-Id: I52d72b7fd302ec317840af87fa77299387af99ad
2013-02-12 07:25:43 -08:00
Clint Byrum
41b93c99c4 Add missing python-pip dependency in heat-jeos
Change-Id: I9d0b5d0f86c8fc07cbd7e432df79f7b66c98af0f
2013-02-11 18:11:51 -08:00
Clint Byrum
80b9b45e31 Work around cfn API bug in HEAT w/ specific boto
See https://bugs.launchpad.net/heat/+bug/1122472 for information on the
specific problem in heat. This can be removed when that bug is resolved.

Change-Id: I76a7a42dea9472c54f03593c8c67856aa23f2c73
2013-02-11 14:23:02 -08:00
Robert Collins
1ee3a01447 Move initial root contents into a hook.
This is a necessary but not complete step towards supporting Fedora and Suse
distributions. Further work is needed (e.g. to quiesce daemons on
installation).

Change-Id: If3ea6093d41a21de755db52328226b84b5a3ede6
2013-02-11 17:01:36 +13:00
Tim Miller
455bae12bd Add os-config-applier element.
Change-Id: Ie7ee15c26fbbcf93f2708bc63005cee5f75e8fc1
2013-01-30 21:07:10 -08:00
Robert Collins
24600defd0 Split stack user creation out of devstack element.
This makes it easy to create a local user without cloud init, for vm
instances.

Change-Id: Ifaae67418a725eb5a39cf9e46f0804b09986f63c
2013-01-31 16:50:41 +13:00
Ghe Rivero
11b4a5501d Create install-packages as a binary.
Only supports Debian family distribution so far.

Change-Id: I9fa0b833c34a614fe498c6c6ae599733a69c1309
2013-01-31 00:08:58 +01:00
Jenkins
8997ec6d0b Merge "Add openstack-all element." 2013-01-30 09:42:29 +00:00
Jenkins
42cad78e20 Merge "Add element to install config-applier" 2013-01-30 09:17:19 +00:00
Chris Jones
15dbc42d72 Switch locale to C
Remove the explicit installation of an English language pack and instead
just default LANG to C. This settls Perl's noisy warnings and also stops
any side effects of different language build hosts.

Note that this is set right at the start of the build process, so it
should be entirely possible to override if needs be.

Change-Id: Id3b31162d4198fa02dc5a4d11168e57dbcd14a5d
2013-01-28 18:08:50 +00:00
Tim Miller
e831a06bad Add openstack-all element.
Change-Id: I192b03c64899c77f4bc739b6a09921284b600a98
2013-01-25 14:01:25 -08:00
Clint Byrum
b8d51d3c9a Add element to install config-applier
Change-Id: I91f519f5ecbe1c5a252e87af28b66eef983478b0
2013-01-25 10:17:35 -08:00
Clint Byrum
15a1ad0b5b Enable 'ec2-user' in HEAT for quantal images.
Employs some workarounds that can be removed when bugs reference in
comments are fixed elsewhere.

Change-Id: If423844f0dfabbddd4d0d7b8ad8fcf6d32693195
2013-01-25 06:13:19 +00:00
Jenkins
b4e495f6ef Merge "Install nova-api from github." 2013-01-20 22:50:51 +00:00
Jenkins
35487c8639 Merge "Disable Apt Recommends." 2013-01-20 22:46:39 +00:00
Jenkins
6aed59c95e Merge "Add Icinga elements." 2013-01-20 22:40:09 +00:00
Chris Jones
1951ac8838 Disable Apt Recommends.
This disables apt's default behaviour of installing packages in the
Recommends field of other packages. While this can be useful, it
causes a lot of unnecessary software to be installed and may cause
explicit dependencies to be missed in some circumstances.

Change-Id: I10f4519290e6b3dafda3365c0c5dcc42ad17c090
2013-01-17 17:07:30 +00:00
Chris Jones
961d6dc7b2 Include English locale in base.
This change causes the "base" element to install and generate English
locales, thereby mitigating a lot of build noise (at least for
English speaking users). Also included is a note in the element's
README.md about what users in other locales should do.

Change-Id: I053c7e0254a0a0d7dde081f7cc72204a12aa8ef4
2012-12-21 17:45:06 +00:00
Tim Miller
89b245c604 Install nova-api from github.
Change-Id: If3b2818386a58a5effcfb3cc93579dc296536733
2012-12-20 15:04:34 -08:00
Chris Jones
ec3f7f64da Add Icinga elements.
Add basic install-only elements for creating images for Icinga's core
and its web UI.

Change-Id: I7193a3a7130543903d07efc95322487444443d9a
2012-12-20 12:33:01 +00:00
Ghe Rivero
147489f239 Add missing whitespace to local-config.
Fix whitespace error in local-config/install.d/61-http-proxy that prevents
no-proxy being written.

Change-Id: Ie2511bb5b2504c42ff59ec277cd91bf92b56da59
2012-12-20 16:05:50 +13:00
Jenkins
0d898acd7c Merge "Clean up the MySQL element to make it suitable for generic use." 2012-12-19 20:53:04 +00:00
Jenkins
20b679e959 Merge "Install quantum-api from github." 2012-12-19 20:53:02 +00:00
Clint Byrum
041f04a836 Add an element to install the HEAT JEOS tools.
Change-Id: Id1d96479142dbfbba2265ab8ec5f242146a03b19
2012-12-19 06:09:39 -08:00
Tim Miller
d25f89ad12 Install quantum-api from github.
Change-Id: If7ae61bce1ee263077ecd3e49beab4e5c8f97cf2
2012-12-18 12:33:48 -08:00
Clint Byrum
05ccb5eab5 Clean up the MySQL element to make it suitable for generic use.
Change-Id: Ib3e384d6fb48e6df53a0897bcc48bbb46995a824
2012-12-18 09:41:26 -08:00
Jenkins
804e94b5eb Merge "Add glance-api element." 2012-12-18 16:14:57 +00:00
Chris Jones
2cefdd7e60 Tidy up base element:
Fix a typo in the base element itself.
Refer to it early in the README since it is likely to be useful to
almost everyone.

Change-Id: I4a753b61542f8a354ade7fcc4436076aec61e6c0
2012-12-17 16:53:46 +00:00
Devananda van der Veen
dba9418f03 Copy both http and https proxy to local-config.
Previously, only http_proxy was copied into the local-config image.
We now preserve both http_proxy and https_proxy settings.

Change-Id: I4de2712f2772fb7d07b228cecdc0c8ec6f3df567
Co-authored-by: Chris Krelle <nobodycam@gmail.com>
2012-12-13 23:49:42 -08:00
Tim Miller
2fcb64ee77 Add glance-api element.
Change-Id: I277b353fbbed59823335c8b27e875c4417e2643d
2012-12-13 18:02:11 -08:00
Robert Collins
012116cad6 Move everything 'common' into base, making it avoidable for tests.
Change-Id: I87edd00f6e0edcd609856192c2c98604ef3274f0
2012-12-14 13:41:57 +13:00
Devananda van der Veen
9371411ddb updating devstack element to reference incubator
devstack element points to github:tripleo/incubator, instead of demo.

Also, the element now pulls devstack into the image, rather than relying
on incubator/scripts/demo to pull it down after the image starts.

Change-Id: I878edcc8f5b1a509b14cadfb5fb4c33571a7f312
2012-12-13 02:31:26 -08:00
Tim Miller
e47bb57131 Add keystone element.
Change-Id: I478227c7a6b806e2aaa52f28ba6c6408d55e9ebc
2012-12-12 00:13:37 -08:00
Robert Collins
7afabfb06e Generate apt.conf files with correct content, fixes bug 1088805.
Change-Id: I26b855260fdfc472179774779558ed7f0947da6c
2012-12-11 21:23:07 +13:00