28459 Commits

Author SHA1 Message Date
Wido den Hollander
a5ca762acb Merge pull request #820 from wido/CLOUDSTACK-8840
CLOUDSTACK-8840: Systemd service for the Usage ServerThere already was a uncompleted systemd service file for the Usage
Server.

This new one replaces sysvinit and the old systemd service file.

* pr/820:
  CLOUDSTACK-8840: Do not include old systemd wrapper
  CLOUDSTACK-8840: Fix the source path of the service file
  CLOUDSTACK-8840: Systemd service for the Usage Server

Signed-off-by: Wido den Hollander <wido@widodh.nl>
2015-09-17 10:09:58 +02:00
Wido den Hollander
0204269b96 CLOUDSTACK-8840: Do not include old systemd wrapper 2015-09-16 13:59:52 +02:00
Rohit Yadav
1525ac0791 Merge pull request #824 from shapeblue/4.5.3-upgradepath
4.5.3 upgradepath for master branchcc @remibergsma @karuturi

* pr/824:
  schema: add 4.5.3 to 4.6.0 upgrade path stubs
  schema: add 4.5.2 to 4.5.3 upgrade path stubs

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2015-09-16 13:23:43 +05:30
Rohit Yadav
1ba362dc01 Merge pull request #806 from sureshanaparti/CLOUDSTACK-8820
CLOUDSTACK-8820: Support for VMware vCenter 6 data centerCLOUDSTACK-8820: Showing error when try to add advance zone using VMware ESXi 6.0 host

Summary: In vCenter 6.0, response headers need to be fetched after service login for server cookie unlike previous versions of vCenter.

* pr/806:
  CLOUDSTACK-8820: Updated the code for vCenter6 data center support.
  CLOUDSTACK-8820: Showing error when try to add advance zone using VMWare ESXi 6.0 host Summary: In vCenter 6.0, response headers need to be fetched after service login for server cookie unlike previous versions of vCenter.

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2015-09-16 12:49:52 +05:30
Rohit Yadav
8f11b459ff Merge pull request #833 from apache/systemvm-build
changed the systemvm base iso file from debian-7.8.0 to debian-7.9.07.8.0 url is not available(404 Error)

This fixes the jenkins http://jenkins.buildacloud.org/job/build-systemvm-master/624/console which is failing with the below error
```
Checking if isofile iso-cd/debian-7.8.0-i386-netinst.iso already exists.
Full path: /home/jenkins/acs/workspace/build-systemvm-master/tools/appliance/iso/iso-cd/debian-7.8.0-i386-netinst.iso
There was an error downloading http://cdimage.debian.org/cdimage/archive/7.8.0/i386/iso-cd/debian-7.8.0-i386-netinst.iso:
404 Not Found
```

This is tested and build is successful at http://jenkins.buildacloud.org/view/parameterized/job/parameterized-sytemvm/1/

* pr/833:
  changed the base iso file from debian-7.8.0 to debian-7.9.0

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2015-09-16 12:48:16 +05:30
Rohit Yadav
868706d705 Revert "changed the base iso file from debian-7.8.0 to debian-7.9.0"
This reverts commit 8bc06fc251eccafafa7457ce35edd054557ff040.
2015-09-16 12:47:44 +05:30
Rohit Yadav
5c5ea5f63f Merge pull request #813 from wido/CLOUDSTACK-8625
CLOUDSTACK-8625: Systemd profile for CloudStack AgentWith CentOS 7 and Ubuntu 16.04 (to be released) using systemd
it is preferred that CloudStack's Agent is also being started using
systemd.

This commit includes a service file for the CloudStack Agent with
a wrapper script which actually executes Java

It no longer uses jsvc for daemonizing and thus this requirement
has also been dropped for CentOS 7 packaging.

The Agent log output to stdout has also been modified to no longer
include the timestamp as this is done by journalctl.

This has been tested on a CentOS 7.1 machine and the Agent starts,
stops and restarts properly.

* pr/813:
  CLOUDSTACK-8625: Remove the need of a wrapper script for the Agent
  CLOUDSTACK-8625: Updated spec file for systemd profile
  CLOUDSTACK-8443: Install the systemd wrapper script in RPM
  CLOUDSTACK-8625: Systemd profile for CloudStack Agent

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2015-09-16 12:40:50 +05:30
Rajani Karuturi
8bc06fc251 changed the base iso file from debian-7.8.0 to debian-7.9.0
7.8.0 url is not available(404 Error)
2015-09-16 12:34:42 +05:30
Rohit Yadav
5b5152b21b schema: add 4.5.3 to 4.6.0 upgrade path stubs
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2015-09-16 11:53:41 +05:30
Rohit Yadav
36a43abff4 schema: add 4.5.2 to 4.5.3 upgrade path stubs
(cherry picked from commit 17166eb631e4647be1a74970d0771b5add5f2ace)
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2015-09-16 11:53:41 +05:30
Rajani Karuturi
61526190d0 changed the base iso file from debian-7.8.0 to debian-7.9.0
7.8.0 url is not available(404 Error)
2015-09-15 21:37:44 +05:30
wilderrodrigues
6e426fa46d Revert "Merge pull request #825 from borisroman/charset"
This reverts commit a44e2bff7ec0c1548d89722c40488746454adce1, reversing
changes made to 06cefaf493423c953a95ee92482a2d0a20a21095.

We are reverting the PR #825 because it breaks Master.
2015-09-15 14:58:18 +02:00
Daan Hoogland
a44e2bff7e Merge pull request #825 from borisroman/charset
Replaced all occurences of Charset.forName(UTF-8) with StringUtils.getPreferredCharset().

* pr/825:
  Replaced all occurences of Charset.forName(UTF-8) with StringUtils.getPreferredCharset().

Signed-off-by: Daan Hoogland <daan@onecht.net>
2015-09-15 13:38:18 +02:00
Boris Schrijver
71929fdedd Replaced all occurences of Charset.forName(UTF-8) with StringUtils.getPreferredCharset(). 2015-09-15 12:00:33 +02:00
Wido den Hollander
06cefaf493 Merge pull request #804 from anshul1886/CLOUDSTACK-8834
CLOUDSTACK-8834: Fixed unable to download Template , when in multi zonesWe were listing image stores by zone id which was resulting in listing of only one image store
If in that image store its download state is not DOWNLOADED then download template is failing

* pr/804:
  CLOUDSTACK-8834: Fixed unable to download Template , when in multi zones We were listing image stores by zone id which was resulting in listing of only one image store If in that image store its download state is not DOWNLOADED then download template is failing

Signed-off-by: Wido den Hollander <wido@widodh.nl>
2015-09-15 11:10:41 +02:00
Wido den Hollander
34caa694d0 Merge pull request #821 from wido/libvirt-rbd-logging
CLOUDSTACK-8645: Improve logging of RBD functionality in KVMA simple commit which changes a couple of log lines.

* pr/821:
  CLOUDSTACK-8645: Improve logging of RBD functionality in KVM

Signed-off-by: Wido den Hollander <wido@widodh.nl>
2015-09-15 10:57:18 +02:00
Wido den Hollander
4f409a7c17 CLOUDSTACK-8645: Improve logging of RBD functionality in KVM
A simple commit which changes a couple of log lines.
2015-09-15 10:10:04 +02:00
Wido den Hollander
2c143543b5 CLOUDSTACK-8840: Fix the source path of the service file 2015-09-15 09:33:17 +02:00
Rajani Karuturi
2bd61c35b9 Merge pull request #819 from sanju1010/sg
Tagging tests appropriately to pick them for running on basic zoneAdding additional tag to the list of tags.

* pr/819:
  Tagging tests appropriately to pick them for running on basic zone

Signed-off-by: Rajani Karuturi <rajani.karuturi@citrix.com>
2015-09-14 17:57:24 +05:30
Rajani Karuturi
1234cc1e88 Revert "Tagging tests appropriately to pick them for running on basic zone"
This reverts commit ba8449b1a05a12c83d58e4ba72d6644431fdbfe2.

Reverting as this is a direct commit to master. Will be followed by a
merge
2015-09-14 17:53:02 +05:30
sanjeev
ba8449b1a0 Tagging tests appropriately to pick them for running on basic zone
This closes #819
2015-09-14 17:45:05 +05:30
Wido den Hollander
f44a5c79b3 CLOUDSTACK-8840: Systemd service for the Usage Server
There already was a uncompleted systemd service file for the Usage
Server.

This new one replaces sysvinit and the old systemd service file.
2015-09-14 13:30:32 +02:00
sanjeev
75cf2bd248 Tagging tests appropriately to pick them for running on basic zone 2015-09-14 16:52:13 +05:30
Wido den Hollander
df53776d4e CLOUDSTACK-8625: Remove the need of a wrapper script for the Agent
We now inline execute 'sh' which does all the work
2015-09-14 13:15:39 +02:00
Wido den Hollander
d091b9189c Merge pull request #795 from borisroman/CLOUDSTACK-8819
CLOUDSTACK-8819: Added QCOW2 virtual size checking for S3.- Cleaned up S3TemplateDownloader
- Created static QCOW2 utils class.
- Reformatted some parts of DownloadManagerImpl

* pr/795:
  Added Unit Tests for QCOW2Utils.
  Fixed Findbugs issue introduced by 1c6378ec0056e8c75990a4a0c15e99b2df162a75 PR #795.
  Added QCOW2 virtual size checking for S3.

Signed-off-by: Wido den Hollander <wido@widodh.nl>
2015-09-14 12:02:03 +02:00
Suresh Kumar Anaparti
1d73418c2c CLOUDSTACK-8820: Updated the code for vCenter6 data center support. 2015-09-14 15:27:52 +05:30
Boris Schrijver
aa19a6a05a Added Unit Tests for QCOW2Utils. 2015-09-14 10:56:21 +02:00
Boris Schrijver
4a770fc63a Fixed Findbugs issue introduced by 1c6378ec0056e8c75990a4a0c15e99b2df162a75 PR #795. 2015-09-14 10:56:11 +02:00
Rajani Karuturi
0b73d19368 Merge pull request #802 from anshul1886/CLOUDSTACK-8828
Fixed secstorage.proxy is not setting proxy configuration on SSVM in some cases

* pr/802:
  Fixed secstorage.proxy is not setting proxy configuration on SSVM in some cases

Signed-off-by: Rajani Karuturi <rajani.karuturi@citrix.com>
2015-09-14 12:01:18 +05:30
Rajani Karuturi
ac80a2df50 Merge pull request #808 from karuturi/CLOUDSTACK-8835
CLOUDSTACK-8835: Added alerts incase of template download failureAuthored-By: @sanjaytripathi
Reviewed-By: @devdeep

* pr/808:
  CLOUDSTACK-8835: Added alerts incase of template download failure

Signed-off-by: Rajani Karuturi <rajani.karuturi@citrix.com>
2015-09-14 09:47:46 +05:30
Rajani Karuturi
f888e93e44 Merge pull request #782 from karuturi/CLOUDSTACK-8816
Cloudstack 8816 entityuuid missing in some of the eventsIn some of the events generated, entity uuid was missing making it difficult to find the entity. Fixed the same.

Tested it on rabbitmq instance.
There are the events before after the fix:

Before
--------------------------------------------------------------------------------

routing_key: management-server.ActionEvent.ACCOUNT-DELETE.Account.*
exchange: cloudstack-events
message_count: 2
payload:
{"eventDateTime":"2015-09-04 17:59:24 +0530","status":"Scheduled","description":"deleting User test4 (id: 28) and accountId \u003d 28","event":"ACCOUNT.DELETE","Account":"c09e2e81-8edc-4c27-b072-25005b522b63","account":"bd73dc2e-35c0-11e5-b094-d4ae52cb9af0","user":"bd7ea748-35c0-11e5-b094-d4ae52cb9af0"}

payload_bytes: 304
payload_encoding: string
redelivered: False

--------------------------------------------------------------------------------

routing_key: management-server.AsyncJobEvent.complete.Account.*
exchange: cloudstack-events
message_count: 0
payload: {"cmdInfo":"{\"id\":\"9dd3abc2-3f8b-4852-aa60-a74b234acb13\",\"response\":\"json\",\"sessionkey\":\"5ig1ItP2_5v-mgY4cVJbJN5hw_w\",\"ctxDetails\":\"
{\\\"interface com.cloud.user.Account\\\":\\\"9dd3abc2-3f8b-4852-aa60-a74b234acb13\\\"}

\",\"cmdEventType\":\"ACCOUNT.DELETE\",\"expires\":\"2015-09-07T11:11:56+0000\",\"ctxUserId\":\"2\",\"signatureversion\":\"3\",\"httpmethod\":\"GET\",\"uuid\":\"9dd3abc2-3f8b-4852-aa60-a74b234acb13\",\"ctxAccountId\":\"2\",\"ctxStartEventId\":\"447\"}","instanceType":"Account","jobId":"5004989d-0cde-4922-8afa-66bf38b75ea7","status":"SUCCEEDED","processStatus":"0","commandEventType":"ACCOUNT.DELETE","resultCode":"0","command":"org.apache.cloudstack.api.command.admin.account.DeleteAccountCmd","jobResult":"org.apache.cloudstack.api.response.SuccessResponse/null/
{\"success\":true}

","account":"bd73dc2e-35c0-11e5-b094-d4ae52cb9af0","user":"bd7ea748-35c0-11e5-b094-d4ae52cb9af0"}
payload_bytes: 914
payload_encoding: string
redelivered: False

--------------------------------------------------------------------------------

After
--------------------------------------------------------------------------------

 routing_key: management-server.ActionEvent.ACCOUNT-DELETE.Account.e5e2db91-414d-484c-99d5-c4e265c14ad8
exchange: cloudstack-events
message_count: 13
payload: {"eventDateTime":"2015-09-07 17:32:26 +0530","status":"Completed","description":"Successfully completed deleting account. Account Id: 45","event":"ACCOUNT.DELETE","entityuuid":"e5e2db91-414d-484c-99d5-c4e265c14ad8","entity":"com.cloud.user.Account","account":"bd73dc2e-35c0-11e5-b094-d4ae52cb9af0","user":"bd7ea748-35c0-11e5-b094-d4ae52cb9af0"}
payload_bytes: 344
payload_encoding: string
redelivered: True

--------------------------------------------------------------------------------

routing_key: management-server.AsyncJobEvent.complete.Account.e5e2db91-414d-484c-99d5-c4e265c14ad8
exchange: cloudstack-events
message_count: 12
payload: {"cmdInfo":"{\"id\":\"e5e2db91-414d-484c-99d5-c4e265c14ad8\",\"response\":\"json\",\"sessionkey\":\"8AJVbn8HIpg5LZ_VaVfSPs_QN2k\",\"ctxDetails\":\"{\\\"interface com.cloud.user.Account\\\":\\\"e5e2db91-414d-484c-99d5-c4e265c14ad8\\\"}\",\"cmdEventType\":\"ACCOUNT.DELETE\",\"expires\":\"2015-09-07T12:17:42+0000\",\"ctxUserId\":\"2\",\"signatureversion\":\"3\",\"httpmethod\":\"GET\",\"uuid\":\"e5e2db91-414d-484c-99d5-c4e265c14ad8\",\"ctxAccountId\":\"2\",\"ctxStartEventId\":\"465\"}","instanceType":"Account","instanceUuid":"e5e2db91-414d-484c-99d5-c4e265c14ad8","jobId":"0bb08486-6d9f-4e9f-bfef-b7463c42e71b","status":"SUCCEEDED","processStatus":"0","commandEventType":"ACCOUNT.DELETE","resultCode":"0","command":"org.apache.cloudstack.api.command.admin.account.DeleteAccountCmd","jobResult":"org.apache.cloudstack.api.response.SuccessResponse/null/{\"success\":true}","account":"bd73dc2e-35c0-11e5-b094-d4ae52cb9af0","user":"bd7ea748-35c0-11e5-b094-d4ae52cb9af0"}
payload_bytes: 968
payload_encoding: string
redelivered: True

--------------------------------------------------------------------------------

* pr/782:
  CLOUDSTACK-8816 Systemvm reboot event doesnt have uuids. Fixed the same
  CLOUDSTACK-8816: Project UUID is not showing for some of operations in RabbitMQ.
  CLOUDSTACK-8816: entity uuid missing in create network event
  CLOUDSTACK-8816: instance uuid is missing in events for delete account
  CLOUDSTACK-8816 Fixed entityUuid missing in some cases is events

Signed-off-by: Rajani Karuturi <rajani.karuturi@citrix.com>
2015-09-14 09:42:44 +05:30
Wido den Hollander
120e1cc934 Merge pull request #810 from ashwinswaroop/feature_x
This is the fix for the JIRA issue CLOUDSTACK-8817.This is my first contribution to Apache CloudStack. The return values for endpoint and startpoint have now been changed to Integer instead of String. Please let me know if this is the only change that is required or if there are additional files which will be impacted by this change which require modification also.

* pr/810:
  CLOUDSTACK-8817: listFirewallRules response JSON startport/endport not an int
  This is the fix for the JIRA issue CLOUDSTACK-8817. The return values for endpoint and startpoint are now Integer instead of String.

Signed-off-by: Wido den Hollander <wido@widodh.nl>
2015-09-13 22:24:00 +02:00
Wido den Hollander
4b3a8415b3 CLOUDSTACK-8625: Updated spec file for systemd profile 2015-09-13 22:07:09 +02:00
Ashwin Swaroop
221624d2fe CLOUDSTACK-8817: listFirewallRules response JSON startport/endport not an int 2015-09-13 14:45:44 -04:00
Wido den Hollander
94b60be407 CLOUDSTACK-8443: Install the systemd wrapper script in RPM 2015-09-13 15:41:13 +02:00
Wido den Hollander
612c7ebf40 CLOUDSTACK-8625: Systemd profile for CloudStack Agent
With CentOS 7 and Ubuntu 16.04 (to be released) using systemd
it is preferred that CloudStack's Agent is also being started using
systemd.

This commit includes a service file for the CloudStack Agent with
a wrapper script which actually executes Java

It no longer uses jsvc for daemonizing and thus this requirement
has also been dropped for CentOS 7 packaging.

The Agent log output to stdout has also been modified to no longer
include the timestamp as this is done by journalctl.

This has been tested on a CentOS 7.1 machine and the Agent starts,
stops and restarts properly.
2015-09-13 15:12:29 +02:00
Ashwin Swaroop
4d626c11bc This is the fix for the JIRA issue CLOUDSTACK-8817. The return values for endpoint and startpoint are now Integer instead of String. 2015-09-11 18:27:31 -04:00
Rajani Karuturi
ff1ce07aef Merge pull request #728 from shwetaag/attach_iso
CLOUDSTACK-8756:Incorrect guest os mapping in CCP 4.2.1-6 for CentOS 5.9Check the bug 8756 for more details

* pr/728:
  CLOUDSTACK-8756:Incorrect guest os mapping in CCP 4.2.1-6 for CentOS 5.9

Signed-off-by: Rajani Karuturi <rajani.karuturi@citrix.com>
2015-09-11 21:20:03 +05:30
Rajani Karuturi
adfa9c0ca6 Revert "CLOUDSTACK-8756:Incorrect guest os mapping in CCP 4.2.1-6 for CentOS 5.9"
This reverts commit ba59a43333b6f31e48e4b6e43e16068e4cacdc45.
Reverting as this is a direct commit to master. Will be followed by a
merge
2015-09-11 21:18:25 +05:30
wilderrodrigues
6b9e2ac16a Merge pull request #800 from bvbharatk/CLOUDSTACK-8798
CLOUDSTACK-8798 Fixed the vrrp virtual ip config in case of rvr enablFixed the vrrp virtual ip config in case of rvr enabled isolated networks.
changed the CsRedundant.py to bring down the public interface when rvr changes state to
backup. Also fixed vrrp authentication for isolated networks.

This fix dose not effect the vpc networks. it is only meant for rvr isolated networks.

manullay deployed a vm in rvr enabled isolated network and ran the tests below.

nosetests --with-marvin --marvin-config=/marvin-config test/integration/component/test_redundant_router_services.py

Test redundant router internals ... === TestName: test_enableVPNOverRvR | Status : SUCCESS ===

----------------------------------------------------------------------
Ran 1 test in 633.336s

nosetests --with-marvin --marvin-config=/marvin-config test/integration/component/test_redundant_router_cleanups.py

Test network garbage collection with RVR ... === TestName: test_network_gc | Status : SUCCESS ===
ok
Test restarting RvR network without cleanup ... === TestName: test_restart_ntwk_no_cleanup | Status : SUCCESS ===
ok
Test restart RvR network with cleanup ... === TestName: test_restart_ntwk_with_cleanup | Status : SUCCESS ===

----------------------------------------------------------------------
Ran 3 tests in 2120.263s

* pr/800:
  CLOUDSTACK-8798 Fixed the vrrp virtual ip config in case of rvr enabled isolated networks. changed the CsRedundant.py to bring down the public interface when rvr changes state to backup. Also fixed vrrp authentication for isolated networks.

Signed-off-by: wilderrodrigues <wrodrigues@schubergphilis.com>
2015-09-11 15:27:41 +02:00
Bharat Kumar
b66dcda49f CLOUDSTACK-8799 fixed for vpc networks. 2015-09-11 14:57:32 +02:00
Boris Schrijver
1c6378ec00 Added QCOW2 virtual size checking for S3.
- Cleaned up S3TemplateDownloader
- Created static QCOW2 utils class.
- Reformatted some parts of DownloadManagerImpl
2015-09-11 14:57:32 +02:00
Bharat Kumar
1a02773b55 CLOUDSTACK-8799 fixed the defalut routes
CLOUDSTACK-8799 made changes to fix CsRedundant.py
2015-09-11 14:57:32 +02:00
wilderrodrigues
a04b8f6e82 Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/cloudstack 2015-09-11 14:55:53 +02:00
Wido den Hollander
5812f714fc Merge pull request #807 from karuturi/createuser-unittests
unittests to verify empty password is not allowed during account/user create

* pr/807:
  unittests to verify empty password is not allowed during account create

Signed-off-by: Wido den Hollander <wido@widodh.nl>
2015-09-11 14:54:47 +02:00
wilderrodrigues
9f13f5b9da Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/cloudstack 2015-09-11 14:54:44 +02:00
Wido den Hollander
6330ef0236 Merge pull request #794 from borisroman/LocalTemplateDownloader
Removal of test/debug code.Removed main() method from LocalTemplateDownloader.java

* pr/794:
  Added Unit Test for LocalTemplateDownloader.
  Removal of test/debug code.

Signed-off-by: Wido den Hollander <wido@widodh.nl>
2015-09-11 14:53:02 +02:00
wilderrodrigues
68bf049106 Merge pull request #805 from ekholabs/improvement/callable_CLOUDSTACK-8822
CLOUDSTACK-8822 - Replacing Runnable by CallableThat's the first part of the refactor, which will touch the ManagedContextRunnable and all its subclasses. However, in order to reduce impact, the first part comprises the Agent and Nio related classes (NioConnection, NioServer and NioClient).

* All the sub-classes were also updated according to the changes in the super-classes
* Improved exception handling
* There were also code formatting changes

Changes were structural and the NioTest covered them without need to modify the unit test.

This PR is quite extensive. Please, wait for the Test Report in order to proceed with further review.

ping @remibergsma @miguelaferreira @bhaisaab @karuturi @wido @DaanHoogland @borisroman @K0zka

Cheers,
Wilder

* pr/805:
  CLOUDSTACK-8822 - Replacing Runnable by Callable in the Taks and NioConnection classes

Signed-off-by: wilderrodrigues <wrodrigues@schubergphilis.com>
2015-09-11 14:52:36 +02:00
shweta agarwal
ba59a43333 CLOUDSTACK-8756:Incorrect guest os mapping in CCP 4.2.1-6 for CentOS 5.9
This closes #728
2015-09-11 17:56:24 +05:30
Daan Hoogland
6e2ac9974a Merge pull request #791 from nitin-maharana/CloudStack-Nitin3
CLOUDSTACK-8821: UI Change while configuring firewall rule.It provides appropriate message in the UI when configuring the firewall rules in Network page.
If the default egress policy is allow, then it says to block traffic. If the default egress policy is deny, then it says to allow traffic.

* pr/791:
  CLOUDSTACK-8821: Provide appropriate message in the UI when configuring the Firewall rules.

Signed-off-by: Daan Hoogland <daan@onecht.net>
2015-09-11 13:52:19 +02:00