From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id 8D560138010 for ; Fri, 26 Oct 2012 20:35:22 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 39F7B21C006; Fri, 26 Oct 2012 20:35:15 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id 3950721C006 for ; Fri, 26 Oct 2012 20:35:14 +0000 (UTC) Received: from hornbill.gentoo.org (hornbill.gentoo.org [94.100.119.163]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 4497133D78E for ; Fri, 26 Oct 2012 20:35:13 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by hornbill.gentoo.org (Postfix) with ESMTP id DB2E5E5436 for ; Fri, 26 Oct 2012 20:35:11 +0000 (UTC) From: "Matt Thode" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Matt Thode" Message-ID: <1351283707.8338fdecf0bc0a3305b95bc69ca07028e432d9b8.prometheanfire@gentoo> Subject: [gentoo-commits] dev/prometheanfire:master commit in: www-apps/horizon/files/, dev-python/python-swift3/, sys-auth/swift-keystone2/, ... X-VCS-Repository: dev/prometheanfire X-VCS-Files: app-admin/glance/Manifest app-admin/glance/files/glance-swift-authv2.patch app-admin/glance/files/glance.confd app-admin/glance/files/glance.initd app-admin/glance/glance-2012.1.2.ebuild app-admin/glance/glance-9999.ebuild dev-python/nova-adminclient/Manifest dev-python/nova-adminclient/nova-adminclient-0.1.8.ebuild dev-python/passlib/Manifest dev-python/passlib/passlib-1.3.1.ebuild dev-python/python-cloudfiles/Manifest dev-python/python-cloudfiles/python-cloudfiles-1.7.10.ebuild dev-python/python-cloudfiles/python-cloudfiles-9999.ebuild dev-python/python-keystoneclient/Manifest dev-python/python-keystoneclient/python-keystoneclient-2012.1.ebuild dev-python/python-keystoneclient/python-keystoneclient-2012.1_rc1.ebuild dev-python/python-keystoneclient/python-keystoneclient-2012.1_rc2.ebuild dev-python/python-keystoneclient/python-keystoneclient-9999.ebuild dev-python/python-novaclient/Manifest dev-python/python-novaclient/python-novaclient-2012.1.ebuild dev-python/python- novaclient/python-novaclient-2012.1_rc1.ebuild dev-python/python-novaclient/python-novaclient-2012.1_rc3.ebuild dev-python/python-novaclient/python-novaclient-2012.1_rc4.ebuild dev-python/python-quantumclient/Manifest dev-python/python-quantumclient/python-quantumclient-9999.ebuild dev-python/python-swift3/Manifest dev-python/python-swift3/python-swift3-1.5.0.ebuild net-dns/dnsmasq/Manifest net-dns/dnsmasq/dnsmasq-2.63.ebuild net-dns/dnsmasq/files/dnsmasq-2.47-fbsd-config.patch net-dns/dnsmasq/files/dnsmasq-init-r2 net-dns/dnsmasq/files/dnsmasq.confd-r1 net-misc/quantum/Manifest net-misc/quantum/files/quantum-server.confd net-misc/quantum/files/quantum-server.initd net-misc/quantum/files/server-setup-disable-initd-install.patch net-misc/quantum/quantum-9999.ebuild sys-auth/keystone/Manifest sys-auth/keystone/files/keystone.confd sys-auth/keystone/files/keystone.initd sys-auth/keystone/keystone-2012.1.2.ebuild sys-auth/keystone/keystone-9999.ebuild sys-auth/swift-keystone2/Manifest s ys-auth/swift-keystone2/swift-keystone2-9999.ebuild sys-cluster/nova/Manifest sys-cluster/nova/files/nova.confd sys-cluster/nova/files/nova.initd sys-cluster/nova/nova-2012.1.2.ebuild sys-cluster/nova/nova-9999.ebuild sys-cluster/swift/Manifest sys-cluster/swift/files/swift-1.5.0-client-authv2.patch sys-cluster/swift/files/swift-proxy-server.initd sys-cluster/swift/files/swift-storage-server.confd sys-cluster/swift/files/swift-storage-server.initd sys-cluster/swift/swift-1.5.0.ebuild sys-cluster/swift/swift-9999.ebuild www-apps/horizon/Manifest www-apps/horizon/files/horizon_vhost.conf www-apps/horizon/files/revert-bugfix-974916.patch www-apps/horizon/horizon-2012.1.1-r1.ebuild www-apps/horizon/horizon-9999.ebuild www-apps/noVNC/Manifest www-apps/noVNC/files/noVNC.confd www-apps/noVNC/files/noVNC.initd www-apps/noVNC/noVNC-9999.ebuild www-misc/websockify/Manifest www-misc/websockify/websockify-9999.ebuild X-VCS-Directories: www-apps/horizon/files/ dev-python/python-swift3/ sys-auth/swift-keystone2/ net-dns/dnsmasq/ net-misc/quantum/files/ sys-cluster/swift/ sys-auth/keystone/files/ dev-python/passlib/ net-misc/quantum/ www-misc/websockify/ sys-cluster/nova/ sys-auth/keystone/ dev-python/python-novaclient/ dev-python/nova-adminclient/ app-admin/glance/files/ www-apps/noVNC/files/ dev-python/python-cloudfiles/ app-admin/glance/ sys-cluster/swift/files/ dev-python/python-quantumclient/ net-dns/dnsmasq/files/ sys-cluster/nova/files/ dev-python/python-keystoneclient/ www-apps/noVNC/ www-apps/horizon/ X-VCS-Committer: prometheanfire X-VCS-Committer-Name: Matt Thode X-VCS-Revision: 8338fdecf0bc0a3305b95bc69ca07028e432d9b8 X-VCS-Branch: master Date: Fri, 26 Oct 2012 20:35:11 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Archives-Salt: 40f1a9cb-6710-4e85-b687-5b4703d83e98 X-Archives-Hash: 9a6aceca188a356ceaa17a3df66f5b7e commit: 8338fdecf0bc0a3305b95bc69ca07028e432d9b8 Author: Matthew Thode mthode org> AuthorDate: Fri Oct 26 20:35:07 2012 +0000 Commit: Matt Thode gentoo org> CommitDate: Fri Oct 26 20:35:07 2012 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=dev/prometheanfire.git;a=commit;h=8338fdec adding first try of openstack --- app-admin/glance/Manifest | 6 + app-admin/glance/files/glance-swift-authv2.patch | 914 ++++++++++++++++++++ app-admin/glance/files/glance.confd | 1 + app-admin/glance/files/glance.initd | 51 ++ app-admin/glance/glance-2012.1.2.ebuild | 44 + app-admin/glance/glance-9999.ebuild | 44 + dev-python/nova-adminclient/Manifest | 2 + .../nova-adminclient/nova-adminclient-0.1.8.ebuild | 25 + dev-python/passlib/Manifest | 2 + dev-python/passlib/passlib-1.3.1.ebuild | 34 + dev-python/python-cloudfiles/Manifest | 2 + .../python-cloudfiles-1.7.10.ebuild | 27 + .../python-cloudfiles-9999.ebuild | 25 + dev-python/python-keystoneclient/Manifest | 7 + .../python-keystoneclient-2012.1.ebuild | 35 + .../python-keystoneclient-2012.1_rc1.ebuild | 37 + .../python-keystoneclient-2012.1_rc2.ebuild | 37 + .../python-keystoneclient-9999.ebuild | 36 + dev-python/python-novaclient/Manifest | 8 + .../python-novaclient-2012.1.ebuild | 28 + .../python-novaclient-2012.1_rc1.ebuild | 30 + .../python-novaclient-2012.1_rc3.ebuild | 30 + .../python-novaclient-2012.1_rc4.ebuild | 30 + dev-python/python-quantumclient/Manifest | 1 + .../python-quantumclient-9999.ebuild | 30 + dev-python/python-swift3/Manifest | 1 + .../python-swift3/python-swift3-1.5.0.ebuild | 27 + net-dns/dnsmasq/Manifest | 5 + net-dns/dnsmasq/dnsmasq-2.63.ebuild | 129 +++ .../dnsmasq/files/dnsmasq-2.47-fbsd-config.patch | 16 + net-dns/dnsmasq/files/dnsmasq-init-r2 | 25 + net-dns/dnsmasq/files/dnsmasq.confd-r1 | 4 + net-misc/quantum/Manifest | 4 + net-misc/quantum/files/quantum-server.confd | 2 + net-misc/quantum/files/quantum-server.initd | 43 + .../files/server-setup-disable-initd-install.patch | 21 + net-misc/quantum/quantum-9999.ebuild | 51 ++ sys-auth/keystone/Manifest | 13 + sys-auth/keystone/files/keystone.confd | 2 + sys-auth/keystone/files/keystone.initd | 53 ++ sys-auth/keystone/keystone-2012.1.2.ebuild | 40 + sys-auth/keystone/keystone-9999.ebuild | 32 + sys-auth/swift-keystone2/Manifest | 1 + .../swift-keystone2/swift-keystone2-9999.ebuild | 26 + sys-cluster/nova/Manifest | 16 + sys-cluster/nova/files/nova.confd | 4 + sys-cluster/nova/files/nova.initd | 54 ++ sys-cluster/nova/nova-2012.1.2.ebuild | 64 ++ sys-cluster/nova/nova-9999.ebuild | 63 ++ sys-cluster/swift/Manifest | 15 + .../swift/files/swift-1.5.0-client-authv2.patch | 22 + sys-cluster/swift/files/swift-proxy-server.initd | 64 ++ sys-cluster/swift/files/swift-storage-server.confd | 5 + sys-cluster/swift/files/swift-storage-server.initd | 60 ++ sys-cluster/swift/swift-1.5.0.ebuild | 52 ++ sys-cluster/swift/swift-9999.ebuild | 48 + www-apps/horizon/Manifest | 12 + www-apps/horizon/files/horizon_vhost.conf | 14 + www-apps/horizon/files/revert-bugfix-974916.patch | 125 +++ www-apps/horizon/horizon-2012.1.1-r1.ebuild | 74 ++ www-apps/horizon/horizon-9999.ebuild | 59 ++ www-apps/noVNC/Manifest | 3 + www-apps/noVNC/files/noVNC.confd | 4 + www-apps/noVNC/files/noVNC.initd | 49 + www-apps/noVNC/noVNC-9999.ebuild | 63 ++ www-misc/websockify/Manifest | 1 + www-misc/websockify/websockify-9999.ebuild | 25 + 67 files changed, 2877 insertions(+), 0 deletions(-) diff --git a/app-admin/glance/Manifest b/app-admin/glance/Manifest new file mode 100644 index 0000000..3abf039 --- /dev/null +++ b/app-admin/glance/Manifest @@ -0,0 +1,6 @@ +AUX glance-swift-authv2.patch 38569 SHA256 651afe783f515121d28cbbb94c7d14de5a5c3f7616edba8bf83e941c2c0eb4b4 SHA512 5038c473052b316a524f60f5be6fbf90bec565f74f8f8f44e1c55d5b8e079d68057551998470ee5b8f2da13a865d308dd52504128129f91ec141c846b590b4c3 WHIRLPOOL b077b62101be3b674256ffbd96064441b79c2fefb003011a5f8343e228b133982ecedbf750617e886f5291ca8727df361ce74b7809f8ba6feb156acff541f190 +AUX glance.confd 25 SHA256 5a53dcf1eece81a06a2dd0856b15f8abe20eb1072361b110f752e396e86a7843 SHA512 13e671d4544e58d7397c1a87eb1048ed4bb9561587fcd63783e377b2d25e810222ca3944e0c8cf13c524e64f94c435b456a0d6f7cacfb148e275377699a11ca9 WHIRLPOOL 862a310fbdd7b68f132c45797210011b607d9b5c8937d60c9f5933a4d625bc985ad0277fea26804681b7e0a674dc9da15fbef40502c4052d6742ef0a94e88f3d +AUX glance.initd 1101 SHA256 6fe85f10513646263755a2b2e232385dfc8dccb1be4f24b5c7e4f8879fb4f288 SHA512 674c68f13566ebd3443af9d6756f4cf4ebf6a17037a03ea93cb89d39f4f5a0141e572576890e481723b82e857040bfe075238d8c919e7a5fb33e1086e2a1e93a WHIRLPOOL 404e53d29f2f01218e445ce6dcdcdf6620ed6a9f245f2dc9020bd059ca461e1b72a692e7cd9c488daaaacb246160a8ca3a07e9481e536386891c07f3ee79b774 +DIST glance-2012.1.2.tar.gz 299991 SHA256 df03f968feb28ad301e5764070776d9e31cf08e4c85ce793e5079fe9b9d3e705 +EBUILD glance-2012.1.2.ebuild 1108 SHA256 17b956c34cb2b151854a843125a2beb1048a89e2906e443685dfbf3eebf2e7e4 SHA512 e012a54ebe91d238008dd53356918b062f606049a0aa4527e24478ebf07c914560378c5f524f75f0ec3b21d87ddcd114f0580bf0e6b75b149167306f4c83e129 WHIRLPOOL f7154e36dfb5d5150e91a8a86123ddb61b951fa3ba229181198cbeeccd288215c6db987e436f4ba76c835fc7433c1bfd598244613c6e891ff75adc99b63cb550 +EBUILD glance-9999.ebuild 1099 SHA256 74c444acb23496e45d1577d27277ecca481b77ff53b2113defa881c0a4b22812 SHA512 a5cce4fcaea0937e8289ea8439a08f17facdfc608d4dda999213008147c7c4caaf2e293938bcb216a771d65bfc80abad119fedab67fdf9329037b4c9e3976193 WHIRLPOOL ffe2ea0250f451f3f97cc07272ba4104d17584a78446a6aa94282dd6be2f8a3a2813619cdc619d54d38cb39ae90cb31608e0aadc258cffeccf03e024d40c1074 diff --git a/app-admin/glance/files/glance-swift-authv2.patch b/app-admin/glance/files/glance-swift-authv2.patch new file mode 100644 index 0000000..7c8f507 --- /dev/null +++ b/app-admin/glance/files/glance-swift-authv2.patch @@ -0,0 +1,914 @@ +diff -urN glance-2012.1.orig/Authors glance-2012.1/Authors +--- glance-2012.1.orig/Authors 2012-03-21 10:51:12.000000000 +0100 ++++ glance-2012.1/Authors 2012-03-28 17:48:31.000000000 +0200 +@@ -27,6 +27,7 @@ + Johannes Erdfelt + Josh Durgin + Josh Kearney ++Juerg Haefliger + Justin Santa Barbara + Justin Shepherd + Ken Pepple +diff -urN glance-2012.1.orig/Authors.orig glance-2012.1/Authors.orig +--- glance-2012.1.orig/Authors.orig 1970-01-01 01:00:00.000000000 +0100 ++++ glance-2012.1/Authors.orig 2012-03-21 10:51:12.000000000 +0100 +@@ -0,0 +1,62 @@ ++Adam Gandelman ++Alex Meade ++Andrew Hutchings ++Andrey Brindeyev ++Brian Lamar ++Brian Waldon ++Chris Behrens ++Christopher MacGown ++Chuck Short ++Cory Wright ++Dan Prince ++Dean Troyer ++Derek Higgins ++Donal Lafferty ++Eldar Nugaev ++Eoghan Glynn ++Ewan Mellor ++Gabriel Hurley ++Hengqing Hu ++Isaku Yamahata ++Jason Koelker ++Jay Pipes ++James E. Blair ++Jesse Andrews ++Jinwoo 'Joseph' Suh ++Joe Gordon ++Johannes Erdfelt ++Josh Durgin ++Josh Kearney ++Justin Santa Barbara ++Justin Shepherd ++Ken Pepple ++Ken Thomas ++Kevin L. Mitchell ++Lorin Hochstein ++Major Hayden ++Mark McLoughlin ++Mark Washenberger ++Maru Newby ++Matt Dietz ++Mike Lundy ++Monty Taylor ++Pádraig Brady ++Paul Bourke ++Pavan Kumar Sunkara ++Peng Yong ++Pete Zaitcev ++Rick Clark ++Rick Harris ++Reynolds Chin ++Russell Bryant ++Soren Hansen ++Stuart McLaren ++Taku Fukushima ++Thierry Carrez ++Tom Hancock ++Wayne A. Walls ++William Wolf ++Vishvananda Ishaya ++Yaguang Tang ++Yuriy Taraday ++Zhongyue Luo +diff -urN glance-2012.1.orig/etc/glance-api.conf glance-2012.1/etc/glance-api.conf +--- glance-2012.1.orig/etc/glance-api.conf 2012-03-21 10:51:12.000000000 +0100 ++++ glance-2012.1/etc/glance-api.conf 2012-03-28 17:48:31.000000000 +0200 +@@ -130,10 +130,15 @@ + + # ============ Swift Store Options ============================= + ++# Version of the authentication service to use ++# Valid versions are '2' for keystone and '1' for swauth and rackspace ++swift_store_auth_version = 2 ++ + # Address where the Swift authentication service lives + # Valid schemes are 'http://' and 'https://' + # If no scheme specified, default to 'https://' +-swift_store_auth_address = 127.0.0.1:8080/v1.0/ ++# For swauth, use something like '127.0.0.1:8080/v1.0/' ++swift_store_auth_address = 127.0.0.1:35357/v2.0/ + + # User to authenticate against the Swift authentication service + # If you use Swift authentication service, set it to 'account':'user' +diff -urN glance-2012.1.orig/glance/store/swift.py glance-2012.1/glance/store/swift.py +--- glance-2012.1.orig/glance/store/swift.py 2012-03-21 10:51:12.000000000 +0100 ++++ glance-2012.1/glance/store/swift.py 2012-03-28 17:50:34.000000000 +0200 +@@ -192,9 +192,10 @@ + cfg.StrOpt('swift_store_auth_address'), + cfg.StrOpt('swift_store_user'), + cfg.StrOpt('swift_store_key'), ++ cfg.StrOpt('swift_store_auth_version', default='2'), + cfg.StrOpt('swift_store_container', + default=DEFAULT_CONTAINER), +- cfg.IntOpt('swift_store_large_object_size', ++ cfg.IntOpt('swift_store_large_object_size', + default=DEFAULT_LARGE_OBJECT_SIZE), + cfg.IntOpt('swift_store_large_object_chunk_size', + default=DEFAULT_LARGE_OBJECT_CHUNK_SIZE), +@@ -204,6 +205,7 @@ + def configure(self): + self.conf.register_opts(self.opts) + self.snet = self.conf.swift_enable_snet ++ self.auth_version = self._option_get('swift_store_auth_version') + + def configure_add(self): + """ +@@ -300,11 +302,14 @@ + Creates a connection using the Swift client library. + """ + snet = self.snet ++ auth_version = self.auth_version + logger.debug(_("Creating Swift connection with " + "(auth_address=%(auth_url)s, user=%(user)s, " +- "snet=%(snet)s)") % locals()) ++ "snet=%(snet)s, auth_version=%(auth_version)s)") % ++ locals()) + return swift_client.Connection( +- authurl=auth_url, user=user, key=key, snet=snet) ++ authurl=auth_url, user=user, key=key, snet=snet, ++ auth_version=auth_version) + + def _option_get(self, param): + result = getattr(self.conf, param) +diff -urN glance-2012.1.orig/glance/store/swift.py.orig glance-2012.1/glance/store/swift.py.orig +--- glance-2012.1.orig/glance/store/swift.py.orig 1970-01-01 01:00:00.000000000 +0100 ++++ glance-2012.1/glance/store/swift.py.orig 2012-03-21 10:51:12.000000000 +0100 +@@ -0,0 +1,560 @@ ++# vim: tabstop=4 shiftwidth=4 softtabstop=4 ++ ++# Copyright 2010-2011 OpenStack, LLC ++# All Rights Reserved. ++# ++# Licensed under the Apache License, Version 2.0 (the "License"); you may ++# not use this file except in compliance with the License. You may obtain ++# a copy of the License at ++# ++# http://www.apache.org/licenses/LICENSE-2.0 ++# ++# Unless required by applicable law or agreed to in writing, software ++# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT ++# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the ++# License for the specific language governing permissions and limitations ++# under the License. ++ ++"""Storage backend for SWIFT""" ++ ++from __future__ import absolute_import ++ ++import hashlib ++import httplib ++import logging ++import math ++import urlparse ++ ++from glance.common import cfg ++from glance.common import exception ++import glance.store ++import glance.store.base ++import glance.store.location ++ ++try: ++ from swift.common import client as swift_client ++except ImportError: ++ pass ++ ++DEFAULT_CONTAINER = 'glance' ++DEFAULT_LARGE_OBJECT_SIZE = 5 * 1024 # 5GB ++DEFAULT_LARGE_OBJECT_CHUNK_SIZE = 200 # 200M ++ONE_MB = 1000 * 1024 ++ ++logger = logging.getLogger('glance.store.swift') ++ ++ ++class StoreLocation(glance.store.location.StoreLocation): ++ ++ """ ++ Class describing a Swift URI. A Swift URI can look like any of ++ the following: ++ ++ swift://user:pass@authurl.com/container/obj-id ++ swift://account:user:pass@authurl.com/container/obj-id ++ swift+http://user:pass@authurl.com/container/obj-id ++ swift+https://user:pass@authurl.com/container/obj-id ++ ++ The swift+http:// URIs indicate there is an HTTP authentication URL. ++ The default for Swift is an HTTPS authentication URL, so swift:// and ++ swift+https:// are the same... ++ """ ++ ++ def process_specs(self): ++ self.scheme = self.specs.get('scheme', 'swift+https') ++ self.user = self.specs.get('user') ++ self.key = self.specs.get('key') ++ self.authurl = self.specs.get('authurl') ++ self.container = self.specs.get('container') ++ self.obj = self.specs.get('obj') ++ ++ def _get_credstring(self): ++ if self.user: ++ return '%s:%s@' % (self.user, self.key) ++ return '' ++ ++ def get_uri(self): ++ authurl = self.authurl ++ if authurl.startswith('http://'): ++ authurl = authurl[7:] ++ elif authurl.startswith('https://'): ++ authurl = authurl[8:] ++ ++ credstring = self._get_credstring() ++ authurl = authurl.strip('/') ++ container = self.container.strip('/') ++ obj = self.obj.strip('/') ++ ++ return '%s://%s%s/%s/%s' % (self.scheme, credstring, authurl, ++ container, obj) ++ ++ def parse_uri(self, uri): ++ """ ++ Parse URLs. This method fixes an issue where credentials specified ++ in the URL are interpreted differently in Python 2.6.1+ than prior ++ versions of Python. It also deals with the peculiarity that new-style ++ Swift URIs have where a username can contain a ':', like so: ++ ++ swift://account:user:pass@authurl.com/container/obj ++ """ ++ # Make sure that URIs that contain multiple schemes, such as: ++ # swift://user:pass@http://authurl.com/v1/container/obj ++ # are immediately rejected. ++ if uri.count('://') != 1: ++ reason = _( ++ "URI cannot contain more than one occurrence of a scheme." ++ "If you have specified a URI like " ++ "swift://user:pass@http://authurl.com/v1/container/obj" ++ ", you need to change it to use the swift+http:// scheme, " ++ "like so: " ++ "swift+http://user:pass@authurl.com/v1/container/obj" ++ ) ++ raise exception.BadStoreUri(uri, reason) ++ ++ pieces = urlparse.urlparse(uri) ++ assert pieces.scheme in ('swift', 'swift+http', 'swift+https') ++ self.scheme = pieces.scheme ++ netloc = pieces.netloc ++ path = pieces.path.lstrip('/') ++ if netloc != '': ++ # > Python 2.6.1 ++ if '@' in netloc: ++ creds, netloc = netloc.split('@') ++ else: ++ creds = None ++ else: ++ # Python 2.6.1 compat ++ # see lp659445 and Python issue7904 ++ if '@' in path: ++ creds, path = path.split('@') ++ else: ++ creds = None ++ netloc = path[0:path.find('/')].strip('/') ++ path = path[path.find('/'):].strip('/') ++ if creds: ++ cred_parts = creds.split(':') ++ ++ # User can be account:user, in which case cred_parts[0:2] will be ++ # the account and user. Combine them into a single username of ++ # account:user ++ if len(cred_parts) == 1: ++ reason = (_("Badly formed credentials '%(creds)s' in Swift " ++ "URI") % locals()) ++ raise exception.BadStoreUri(uri, reason) ++ elif len(cred_parts) == 3: ++ user = ':'.join(cred_parts[0:2]) ++ else: ++ user = cred_parts[0] ++ key = cred_parts[-1] ++ self.user = user ++ self.key = key ++ else: ++ self.user = None ++ path_parts = path.split('/') ++ try: ++ self.obj = path_parts.pop() ++ self.container = path_parts.pop() ++ if not netloc.startswith('http'): ++ # push hostname back into the remaining to build full authurl ++ path_parts.insert(0, netloc) ++ self.authurl = '/'.join(path_parts) ++ except IndexError: ++ reason = _("Badly formed Swift URI") ++ raise exception.BadStoreUri(uri, reason) ++ ++ @property ++ def swift_auth_url(self): ++ """ ++ Creates a fully-qualified auth url that the Swift client library can ++ use. The scheme for the auth_url is determined using the scheme ++ included in the `location` field. ++ ++ HTTPS is assumed, unless 'swift+http' is specified. ++ """ ++ if self.scheme in ('swift+https', 'swift'): ++ auth_scheme = 'https://' ++ else: ++ auth_scheme = 'http://' ++ ++ full_url = ''.join([auth_scheme, self.authurl]) ++ return full_url ++ ++ ++class Store(glance.store.base.Store): ++ """An implementation of the swift backend adapter.""" ++ ++ EXAMPLE_URL = "swift://:@//" ++ ++ CHUNKSIZE = 65536 ++ ++ opts = [ ++ cfg.BoolOpt('swift_enable_snet', default=False), ++ cfg.StrOpt('swift_store_auth_address'), ++ cfg.StrOpt('swift_store_user'), ++ cfg.StrOpt('swift_store_key'), ++ cfg.StrOpt('swift_store_container', ++ default=DEFAULT_CONTAINER), ++ cfg.IntOpt('swift_store_large_object_size', ++ default=DEFAULT_LARGE_OBJECT_SIZE), ++ cfg.IntOpt('swift_store_large_object_chunk_size', ++ default=DEFAULT_LARGE_OBJECT_CHUNK_SIZE), ++ cfg.BoolOpt('swift_store_create_container_on_put', default=False), ++ ] ++ ++ def configure(self): ++ self.conf.register_opts(self.opts) ++ self.snet = self.conf.swift_enable_snet ++ ++ def configure_add(self): ++ """ ++ Configure the Store to use the stored configuration options ++ Any store that needs special configuration should implement ++ this method. If the store was not able to successfully configure ++ itself, it should raise `exception.BadStoreConfiguration` ++ """ ++ self.auth_address = self._option_get('swift_store_auth_address') ++ self.user = self._option_get('swift_store_user') ++ self.key = self._option_get('swift_store_key') ++ self.container = self.conf.swift_store_container ++ try: ++ # The config file has swift_store_large_object_*size in MB, but ++ # internally we store it in bytes, since the image_size parameter ++ # passed to add() is also in bytes. ++ self.large_object_size = \ ++ self.conf.swift_store_large_object_size * ONE_MB ++ self.large_object_chunk_size = \ ++ self.conf.swift_store_large_object_chunk_size * ONE_MB ++ except cfg.ConfigFileValueError, e: ++ reason = _("Error in configuration conf: %s") % e ++ logger.error(reason) ++ raise exception.BadStoreConfiguration(store_name="swift", ++ reason=reason) ++ ++ self.scheme = 'swift+https' ++ if self.auth_address.startswith('http://'): ++ self.scheme = 'swift+http' ++ self.full_auth_address = self.auth_address ++ elif self.auth_address.startswith('https://'): ++ self.full_auth_address = self.auth_address ++ else: # Defaults https ++ self.full_auth_address = 'https://' + self.auth_address ++ ++ def get(self, location): ++ """ ++ Takes a `glance.store.location.Location` object that indicates ++ where to find the image file, and returns a tuple of generator ++ (for reading the image file) and image_size ++ ++ :param location `glance.store.location.Location` object, supplied ++ from glance.store.location.get_location_from_uri() ++ :raises `glance.exception.NotFound` if image does not exist ++ """ ++ loc = location.store_location ++ swift_conn = self._make_swift_connection( ++ auth_url=loc.swift_auth_url, user=loc.user, key=loc.key) ++ ++ try: ++ (resp_headers, resp_body) = swift_conn.get_object( ++ container=loc.container, obj=loc.obj, ++ resp_chunk_size=self.CHUNKSIZE) ++ except swift_client.ClientException, e: ++ if e.http_status == httplib.NOT_FOUND: ++ uri = location.get_store_uri() ++ raise exception.NotFound(_("Swift could not find image at " ++ "uri %(uri)s") % locals()) ++ else: ++ raise ++ ++ class ResponseIndexable(glance.store.Indexable): ++ def another(self): ++ try: ++ return self.wrapped.next() ++ except StopIteration: ++ return '' ++ ++ length = resp_headers.get('content-length') ++ return (ResponseIndexable(resp_body, length), length) ++ ++ def get_size(self, location): ++ """ ++ Takes a `glance.store.location.Location` object that indicates ++ where to find the image file, and returns the image_size (or 0 ++ if unavailable) ++ ++ :param location `glance.store.location.Location` object, supplied ++ from glance.store.location.get_location_from_uri() ++ """ ++ loc = location.store_location ++ swift_conn = self._make_swift_connection( ++ auth_url=loc.swift_auth_url, user=loc.user, key=loc.key) ++ ++ try: ++ resp_headers = swift_conn.head_object(container=loc.container, ++ obj=loc.obj) ++ return resp_headers.get('content-length', 0) ++ except Exception: ++ return 0 ++ ++ def _make_swift_connection(self, auth_url, user, key): ++ """ ++ Creates a connection using the Swift client library. ++ """ ++ snet = self.snet ++ logger.debug(_("Creating Swift connection with " ++ "(auth_address=%(auth_url)s, user=%(user)s, " ++ "snet=%(snet)s)") % locals()) ++ return swift_client.Connection( ++ authurl=auth_url, user=user, key=key, snet=snet) ++ ++ def _option_get(self, param): ++ result = getattr(self.conf, param) ++ if not result: ++ reason = (_("Could not find %(param)s in configuration " ++ "options.") % locals()) ++ logger.error(reason) ++ raise exception.BadStoreConfiguration(store_name="swift", ++ reason=reason) ++ return result ++ ++ def add(self, image_id, image_file, image_size): ++ """ ++ Stores an image file with supplied identifier to the backend ++ storage system and returns an `glance.store.ImageAddResult` object ++ containing information about the stored image. ++ ++ :param image_id: The opaque image identifier ++ :param image_file: The image data to write, as a file-like object ++ :param image_size: The size of the image data to write, in bytes ++ ++ :retval `glance.store.ImageAddResult` object ++ :raises `glance.common.exception.Duplicate` if the image already ++ existed ++ ++ Swift writes the image data using the scheme: ++ ``swift://:@//` ++ where: ++ = ``swift_store_user`` ++ = ``swift_store_key`` ++ = ``swift_store_auth_address`` ++ = ``swift_store_container`` ++ = The id of the image being added ++ ++ :note Swift auth URLs by default use HTTPS. To specify an HTTP ++ auth URL, you can specify http://someurl.com for the ++ swift_store_auth_address config option ++ ++ :note Swift cannot natively/transparently handle objects >5GB ++ in size. So, if the image is greater than 5GB, we write ++ chunks of image data to Swift and then write an manifest ++ to Swift that contains information about the chunks. ++ This same chunking process is used by default for images ++ of an unknown size, as pushing them directly to swift would ++ fail if the image turns out to be greater than 5GB. ++ """ ++ swift_conn = self._make_swift_connection( ++ auth_url=self.full_auth_address, user=self.user, key=self.key) ++ ++ create_container_if_missing(self.container, swift_conn, self.conf) ++ ++ obj_name = str(image_id) ++ location = StoreLocation({'scheme': self.scheme, ++ 'container': self.container, ++ 'obj': obj_name, ++ 'authurl': self.auth_address, ++ 'user': self.user, ++ 'key': self.key}) ++ ++ logger.debug(_("Adding image object '%(obj_name)s' " ++ "to Swift") % locals()) ++ try: ++ if image_size > 0 and image_size < self.large_object_size: ++ # Image size is known, and is less than large_object_size. ++ # Send to Swift with regular PUT. ++ obj_etag = swift_conn.put_object(self.container, obj_name, ++ image_file, ++ content_length=image_size) ++ else: ++ # Write the image into Swift in chunks. ++ chunk_id = 1 ++ if image_size > 0: ++ total_chunks = str(int( ++ math.ceil(float(image_size) / ++ float(self.large_object_chunk_size)))) ++ else: ++ # image_size == 0 is when we don't know the size ++ # of the image. This can occur with older clients ++ # that don't inspect the payload size. ++ logger.debug(_("Cannot determine image size. Adding as a " ++ "segmented object to Swift.")) ++ total_chunks = '?' ++ ++ checksum = hashlib.md5() ++ combined_chunks_size = 0 ++ while True: ++ chunk_size = self.large_object_chunk_size ++ if image_size == 0: ++ content_length = None ++ else: ++ left = image_size - combined_chunks_size ++ if left == 0: ++ break ++ if chunk_size > left: ++ chunk_size = left ++ content_length = chunk_size ++ ++ chunk_name = "%s-%05d" % (obj_name, chunk_id) ++ reader = ChunkReader(image_file, checksum, chunk_size) ++ chunk_etag = swift_conn.put_object( ++ self.container, chunk_name, reader, ++ content_length=content_length) ++ bytes_read = reader.bytes_read ++ logger.debug(_("Wrote chunk %(chunk_id)d/" ++ "%(total_chunks)s of length %(bytes_read)d " ++ "to Swift returning MD5 of content: " ++ "%(chunk_etag)s") ++ % locals()) ++ ++ if bytes_read == 0: ++ # Delete the last chunk, because it's of zero size. ++ # This will happen if image_size == 0. ++ logger.debug(_("Deleting final zero-length chunk")) ++ swift_conn.delete_object(self.container, chunk_name) ++ break ++ ++ chunk_id += 1 ++ combined_chunks_size += bytes_read ++ ++ # In the case we have been given an unknown image size, ++ # set the image_size to the total size of the combined chunks. ++ if image_size == 0: ++ image_size = combined_chunks_size ++ ++ # Now we write the object manifest and return the ++ # manifest's etag... ++ manifest = "%s/%s" % (self.container, obj_name) ++ headers = {'ETag': hashlib.md5("").hexdigest(), ++ 'X-Object-Manifest': manifest} ++ ++ # The ETag returned for the manifest is actually the ++ # MD5 hash of the concatenated checksums of the strings ++ # of each chunk...so we ignore this result in favour of ++ # the MD5 of the entire image file contents, so that ++ # users can verify the image file contents accordingly ++ swift_conn.put_object(self.container, obj_name, ++ None, headers=headers) ++ obj_etag = checksum.hexdigest() ++ ++ # NOTE: We return the user and key here! Have to because ++ # location is used by the API server to return the actual ++ # image data. We *really* should consider NOT returning ++ # the location attribute from GET /images/ and ++ # GET /images/details ++ ++ return (location.get_uri(), image_size, obj_etag) ++ except swift_client.ClientException, e: ++ if e.http_status == httplib.CONFLICT: ++ raise exception.Duplicate(_("Swift already has an image at " ++ "location %s") % location.get_uri()) ++ msg = (_("Failed to add object to Swift.\n" ++ "Got error from Swift: %(e)s") % locals()) ++ logger.error(msg) ++ raise glance.store.BackendException(msg) ++ ++ def delete(self, location): ++ """ ++ Takes a `glance.store.location.Location` object that indicates ++ where to find the image file to delete ++ ++ :location `glance.store.location.Location` object, supplied ++ from glance.store.location.get_location_from_uri() ++ ++ :raises NotFound if image does not exist ++ """ ++ loc = location.store_location ++ swift_conn = self._make_swift_connection( ++ auth_url=loc.swift_auth_url, user=loc.user, key=loc.key) ++ ++ try: ++ # We request the manifest for the object. If one exists, ++ # that means the object was uploaded in chunks/segments, ++ # and we need to delete all the chunks as well as the ++ # manifest. ++ manifest = None ++ try: ++ headers = swift_conn.head_object(loc.container, loc.obj) ++ manifest = headers.get('x-object-manifest') ++ except swift_client.ClientException, e: ++ if e.http_status != httplib.NOT_FOUND: ++ raise ++ if manifest: ++ # Delete all the chunks before the object manifest itself ++ obj_container, obj_prefix = manifest.split('/', 1) ++ for segment in swift_conn.get_container(obj_container, ++ prefix=obj_prefix)[1]: ++ # TODO(jaypipes): This would be an easy area to parallelize ++ # since we're simply sending off parallelizable requests ++ # to Swift to delete stuff. It's not like we're going to ++ # be hogging up network or file I/O here... ++ swift_conn.delete_object(obj_container, segment['name']) ++ ++ else: ++ swift_conn.delete_object(loc.container, loc.obj) ++ ++ except swift_client.ClientException, e: ++ if e.http_status == httplib.NOT_FOUND: ++ uri = location.get_store_uri() ++ raise exception.NotFound(_("Swift could not find image at " ++ "uri %(uri)s") % locals()) ++ else: ++ raise ++ ++ ++class ChunkReader(object): ++ def __init__(self, fd, checksum, total): ++ self.fd = fd ++ self.checksum = checksum ++ self.total = total ++ self.bytes_read = 0 ++ ++ def read(self, i): ++ left = self.total - self.bytes_read ++ if i > left: ++ i = left ++ result = self.fd.read(i) ++ self.bytes_read += len(result) ++ self.checksum.update(result) ++ return result ++ ++ ++def create_container_if_missing(container, swift_conn, conf): ++ """ ++ Creates a missing container in Swift if the ++ ``swift_store_create_container_on_put`` option is set. ++ ++ :param container: Name of container to create ++ :param swift_conn: Connection to Swift ++ :param conf: Option mapping ++ """ ++ try: ++ swift_conn.head_container(container) ++ except swift_client.ClientException, e: ++ if e.http_status == httplib.NOT_FOUND: ++ if conf.swift_store_create_container_on_put: ++ try: ++ swift_conn.put_container(container) ++ except swift_client.ClientException, e: ++ msg = _("Failed to add container to Swift.\n" ++ "Got error from Swift: %(e)s") % locals() ++ raise glance.store.BackendException(msg) ++ else: ++ msg = (_("The container %(container)s does not exist in " ++ "Swift. Please set the " ++ "swift_store_create_container_on_put option" ++ "to add container to Swift automatically.") ++ % locals()) ++ raise glance.store.BackendException(msg) ++ else: ++ raise ++ ++ ++glance.store.register_store(__name__, ['swift', 'swift+http', 'swift+https']) +diff -urN glance-2012.1.orig/glance/store/swift.py.rej glance-2012.1/glance/store/swift.py.rej +--- glance-2012.1.orig/glance/store/swift.py.rej 1970-01-01 01:00:00.000000000 +0100 ++++ glance-2012.1/glance/store/swift.py.rej 2012-03-28 17:48:31.000000000 +0200 +@@ -0,0 +1,16 @@ ++*************** ++*** 192,197 **** ++ cfg.StrOpt('swift_store_auth_address'), ++ cfg.StrOpt('swift_store_user', secret=True), ++ cfg.StrOpt('swift_store_key', secret=True), ++ cfg.StrOpt('swift_store_container', ++ default=DEFAULT_CONTAINER), ++ cfg.IntOpt('swift_store_large_object_size', ++--- 192,198 ---- ++ cfg.StrOpt('swift_store_auth_address'), ++ cfg.StrOpt('swift_store_user', secret=True), ++ cfg.StrOpt('swift_store_key', secret=True), +++ cfg.StrOpt('swift_store_auth_version', default='2'), ++ cfg.StrOpt('swift_store_container', ++ default=DEFAULT_CONTAINER), ++ cfg.IntOpt('swift_store_large_object_size', +diff -urN glance-2012.1.orig/glance/tests/unit/test_swift_store.py glance-2012.1/glance/tests/unit/test_swift_store.py +--- glance-2012.1.orig/glance/tests/unit/test_swift_store.py 2012-03-21 10:51:12.000000000 +0100 ++++ glance-2012.1/glance/tests/unit/test_swift_store.py 2012-03-28 17:48:31.000000000 +0200 +@@ -52,7 +52,7 @@ + # We stub out as little as possible to ensure that the code paths + # between glance.store.swift and swift.common.client are tested + # thoroughly +-def stub_out_swift_common_client(stubs): ++def stub_out_swift_common_client(stubs, conf): + + fixture_containers = ['glance'] + fixture_headers = {'glance/%s' % FAKE_UUID: +@@ -158,9 +158,13 @@ + def fake_http_connection(*args, **kwargs): + return None + +- def fake_get_auth(url, *args, **kwargs): ++ def fake_get_auth(url, user, key, snet, auth_version, **kwargs): + if 'http' in url and '://' not in url: + raise ValueError('Invalid url %s' % url) ++ # Check the auth version against the configured value ++ if conf['swift_store_auth_version'] != auth_version: ++ msg = 'AUTHENTICATION failed (version mismatch)' ++ raise swift.common.client.ClientException(msg) + return None, None + + stubs.Set(swift.common.client, +@@ -181,17 +185,16 @@ + 'http_connection', fake_http_connection) + + +-class TestStore(unittest.TestCase): ++class SwiftTests(object): + +- def setUp(self): +- """Establish a clean test environment""" +- self.stubs = stubout.StubOutForTesting() +- stub_out_swift_common_client(self.stubs) +- self.store = Store(test_utils.TestConfigOpts(SWIFT_CONF)) +- +- def tearDown(self): +- """Clear the test environment""" +- self.stubs.UnsetAll() ++ def test_get_size(self): ++ """ ++ Test that we can get the size of an object in the swift store ++ """ ++ uri = "swift://user:key@auth_address/glance/%s" % FAKE_UUID ++ loc = get_location_from_uri(uri) ++ image_size = self.store.get_size(loc) ++ self.assertEqual(image_size, 5120) + + def test_get(self): + """Test a "normal" retrieval of an image in chunks""" +@@ -298,15 +301,14 @@ + expected_swift_contents = "*" * expected_swift_size + expected_checksum = \ + hashlib.md5(expected_swift_contents).hexdigest() +- new_conf = SWIFT_CONF.copy() +- new_conf['swift_store_auth_address'] = variation ++ self.conf['swift_store_auth_address'] = variation + + image_swift = StringIO.StringIO(expected_swift_contents) + + global SWIFT_PUT_OBJECT_CALLS + SWIFT_PUT_OBJECT_CALLS = 0 + +- self.store = Store(test_utils.TestConfigOpts(new_conf)) ++ self.store = Store(test_utils.TestConfigOpts(self.conf)) + location, size, checksum = self.store.add(image_id, image_swift, + expected_swift_size) + +@@ -328,11 +330,10 @@ + Tests that adding an image with a non-existing container + raises an appropriate exception + """ +- conf = SWIFT_CONF.copy() +- conf['swift_store_create_container_on_put'] = 'False' +- conf['swift_store_container'] = 'noexist' ++ self.conf['swift_store_create_container_on_put'] = 'False' ++ self.conf['swift_store_container'] = 'noexist' + image_swift = StringIO.StringIO("nevergonnamakeit") +- self.store = Store(test_utils.TestConfigOpts(conf)) ++ self.store = Store(test_utils.TestConfigOpts(self.conf)) + + global SWIFT_PUT_OBJECT_CALLS + SWIFT_PUT_OBJECT_CALLS = 0 +@@ -355,9 +356,8 @@ + Tests that adding an image with a non-existing container + creates the container automatically if flag is set + """ +- conf = SWIFT_CONF.copy() +- conf['swift_store_create_container_on_put'] = 'True' +- conf['swift_store_container'] = 'noexist' ++ self.conf['swift_store_create_container_on_put'] = 'True' ++ self.conf['swift_store_container'] = 'noexist' + expected_swift_size = FIVE_KB + expected_swift_contents = "*" * expected_swift_size + expected_checksum = hashlib.md5(expected_swift_contents).hexdigest() +@@ -369,7 +369,7 @@ + global SWIFT_PUT_OBJECT_CALLS + SWIFT_PUT_OBJECT_CALLS = 0 + +- self.store = Store(test_utils.TestConfigOpts(conf)) ++ self.store = Store(test_utils.TestConfigOpts(self.conf)) + location, size, checksum = self.store.add(expected_image_id, + image_swift, + expected_swift_size) +@@ -394,8 +394,7 @@ + and then verify that there have been a number of calls to + put_object()... + """ +- conf = SWIFT_CONF.copy() +- conf['swift_store_container'] = 'glance' ++ self.conf['swift_store_container'] = 'glance' + expected_swift_size = FIVE_KB + expected_swift_contents = "*" * expected_swift_size + expected_checksum = hashlib.md5(expected_swift_contents).hexdigest() +@@ -407,7 +406,7 @@ + global SWIFT_PUT_OBJECT_CALLS + SWIFT_PUT_OBJECT_CALLS = 0 + +- self.store = Store(test_utils.TestConfigOpts(conf)) ++ self.store = Store(test_utils.TestConfigOpts(self.conf)) + orig_max_size = self.store.large_object_size + orig_temp_size = self.store.large_object_chunk_size + try: +@@ -446,8 +445,7 @@ + + Bug lp:891738 + """ +- conf = SWIFT_CONF.copy() +- conf['swift_store_container'] = 'glance' ++ self.conf['swift_store_container'] = 'glance' + + # Set up a 'large' image of 5KB + expected_swift_size = FIVE_KB +@@ -463,7 +461,7 @@ + + # Temporarily set Swift MAX_SWIFT_OBJECT_SIZE to 1KB and add our image, + # explicitly setting the image_length to 0 +- self.store = Store(test_utils.TestConfigOpts(conf)) ++ self.store = Store(test_utils.TestConfigOpts(self.conf)) + orig_max_size = self.store.large_object_size + orig_temp_size = self.store.large_object_chunk_size + global MAX_SWIFT_OBJECT_SIZE +@@ -507,11 +505,10 @@ + FAKE_UUID, image_swift, 0) + + def _option_required(self, key): +- conf = SWIFT_CONF.copy() +- del conf[key] ++ del self.conf[key] + + try: +- self.store = Store(test_utils.TestConfigOpts(conf)) ++ self.store = Store(test_utils.TestConfigOpts(self.conf)) + return self.store.add == self.store.add_disabled + except: + return False +@@ -554,6 +551,32 @@ + self.assertRaises(exception.NotFound, self.store.delete, loc) + + ++class TestStoreAuthV1(unittest.TestCase, SwiftTests): ++ ++ def setUp(self): ++ """Establish a clean test environment""" ++ self.conf = SWIFT_CONF.copy() ++ self.conf['swift_store_auth_version'] = '1' ++ self.stubs = stubout.StubOutForTesting() ++ stub_out_swift_common_client(self.stubs, self.conf) ++ self.store = Store(test_utils.TestConfigOpts(self.conf)) ++ ++ def tearDown(self): ++ """Clear the test environment""" ++ self.stubs.UnsetAll() ++ ++ ++class TestStoreAuthV2(TestStoreAuthV1): ++ ++ def setUp(self): ++ """Establish a clean test environment""" ++ self.conf = SWIFT_CONF.copy() ++ self.conf['swift_store_auth_version'] = '2' ++ self.stubs = stubout.StubOutForTesting() ++ stub_out_swift_common_client(self.stubs, self.conf) ++ self.store = Store(test_utils.TestConfigOpts(self.conf)) ++ ++ + class TestChunkReader(unittest.TestCase): + + def test_read_all_data(self): diff --git a/app-admin/glance/files/glance.confd b/app-admin/glance/files/glance.confd new file mode 100644 index 0000000..4eb2893 --- /dev/null +++ b/app-admin/glance/files/glance.confd @@ -0,0 +1 @@ +PID_PATH=/var/run/glance diff --git a/app-admin/glance/files/glance.initd b/app-admin/glance/files/glance.initd new file mode 100644 index 0000000..1000e32 --- /dev/null +++ b/app-admin/glance/files/glance.initd @@ -0,0 +1,51 @@ +#!/sbin/runscript +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +depend() { + need net +} + +BASENAME=$(echo $SVCNAME | cut -d '-' -f 1) +SERVERNAME=$(echo $SVCNAME | cut -d '-' -f 2) + +checkconfig() { + if [ ! -r /etc/conf.d/$BASENAME ]; then + eerror "No glance conf.dfile found: /etc/conf.d/$BASENAME)" + return 1 + fi + if [ ! -r /etc/glance/${SVCNAME}.conf ]; then + eerror "No ${BASENAME} config file found: /etc/glance/${SVCNAME}.conf)" + return 1 + fi + return 0 +} + + +start() { + checkconfig || return $? + . /etc/conf.d/$BASENAME + + ebegin "Starting ${SVCNAME}" + + start-stop-daemon --start --quiet --pidfile "${PID_PATH}/${SVCENAME}.pid" \ + --exec /usr/bin/glance-control -- ${SERVERNAME} start + + eend $? "Failed to start ${SVCNAME}" +} + +stop() { + checkconfig || return $? + . /etc/conf.d/$BASENAME + + ebegin "Stopping ${SVCNAME}" + + start-stop-daemon --stop --quiet --pidfile "${PID_PATH}/${SVCNAME}.pid" \ + --exec /usr/bin/glance-control -- ${SERVERNAME} stop + eend $? "Failed to stop ${SVCNAME}" +} + +#restart() { +# +#} diff --git a/app-admin/glance/glance-2012.1.2.ebuild b/app-admin/glance/glance-2012.1.2.ebuild new file mode 100644 index 0000000..7ebcfd7 --- /dev/null +++ b/app-admin/glance/glance-2012.1.2.ebuild @@ -0,0 +1,44 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=3 +PYTHON_DEPENDS="2" +SUPPORT_PYTHON_ABIS="1" +RESTRICT_PYTHON_ABIS="3.*" + +inherit distutils + +DESCRIPTION="Provides services for discovering, registering, and retrieving +virtual machine images. Glance has a RESTful API that allows querying of VM +image metadata as well as retrieval of the actual image." +HOMEPAGE="https://launchpad.net/glance" +SRC_URI="http://launchpad.net/${PN}/essex/${PV}/+download/${P}.tar.gz" + +LICENSE="Apache-2.0" +SLOT="0" +KEYWORDS="~amd64" +IUSE="" + +DEPEND="dev-python/setuptools" +RDEPEND="${DEPEND} + dev-python/webob + dev-python/httplib2 + dev-python/routes + dev-python/paste + dev-python/pastedeploy + dev-python/pyxattr + dev-python/kombu" + +src_install() { + distutils_src_install + newconfd "${FILESDIR}/glance.confd" glance + newinitd "${FILESDIR}/glance.initd" glance + + for function in api registry scrubber; do + dosym /etc/init.d/glance /etc/init.d/glance-${function} + done + + diropts -m 0750 + dodir /var/run/glance /var/log/nova /var/lock/nova +} diff --git a/app-admin/glance/glance-9999.ebuild b/app-admin/glance/glance-9999.ebuild new file mode 100644 index 0000000..a7957fe --- /dev/null +++ b/app-admin/glance/glance-9999.ebuild @@ -0,0 +1,44 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=3 +PYTHON_DEPENDS="2" +SUPPORT_PYTHON_ABIS="1" +RESTRICT_PYTHON_ABIS="3.*" + +inherit git-2 distutils + +DESCRIPTION="Provides services for discovering, registering, and retrieving +virtual machine images. Glance has a RESTful API that allows querying of VM +image metadata as well as retrieval of the actual image." +HOMEPAGE="https://launchpad.net/glance" +EGIT_REPO_URI="https://github.com/openstack/glance.git" + +LICENSE="Apache-2.0" +SLOT="0" +KEYWORDS="~amd64" +IUSE="" + +DEPEND="dev-python/setuptools" +RDEPEND="${DEPEND} + dev-python/webob + dev-python/httplib2 + dev-python/routes + dev-python/paste + dev-python/pastedeploy + dev-python/pyxattr + dev-python/kombu" + +src_install() { + distutils_src_install + newconfd "${FILESDIR}/glance.confd" glance + newinitd "${FILESDIR}/glance.initd" glance + + for function in api registry scrubber; do + dosym /etc/init.d/glance /etc/init.d/glance-${function} + done + + diropts -m 0750 + dodir /var/run/glance /var/log/nova /var/lock/nova +} diff --git a/dev-python/nova-adminclient/Manifest b/dev-python/nova-adminclient/Manifest new file mode 100644 index 0000000..0510470 --- /dev/null +++ b/dev-python/nova-adminclient/Manifest @@ -0,0 +1,2 @@ +DIST nova-adminclient-0.1.8.tar.gz 8100 RMD160 531a272ce5b57a757ebf917e759344d819c65b61 SHA1 c718de783fac8598d1c587575b869e121474a9d7 SHA256 ebf1efac43b9cb0269d4a54583c1051fa59ea67c52f71c6b45e8d3cf6792a9b6 +EBUILD nova-adminclient-0.1.8.ebuild 563 RMD160 c07311928558ecb4da9fd825c8566b4062148685 SHA1 545c922291c7b78128eb67275ccf886879bc4e09 SHA256 029aca91ea7a22f7ff962e6902be31d92e68005da3c6811cb2eab25691a24fa6 diff --git a/dev-python/nova-adminclient/nova-adminclient-0.1.8.ebuild b/dev-python/nova-adminclient/nova-adminclient-0.1.8.ebuild new file mode 100644 index 0000000..6c1d3e4 --- /dev/null +++ b/dev-python/nova-adminclient/nova-adminclient-0.1.8.ebuild @@ -0,0 +1,25 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=3 +PYTHON_DEPEND=2 +SUPPORT_PYTHON_ABIS=1 +RESTRICT_PYTHON_ABIS="3.*" + +inherit distutils + +DESCRIPTION="This is a python client library for consuming the OpenStack Nova +admin API" +HOMEPAGE="https://launchpad.net/nova-adminclient" +SRC_URI="http://pypi.python.org/packages/source/${PN:0:1}/${PN}/${P}.tar.gz" + +LICENSE="Apache-2.0" +SLOT="0" +KEYWORDS="~amd64" +IUSE="" + +DEPEND="dev-python/setuptools + dev-python/boto" +RDEPEND="${DEPEND}" + diff --git a/dev-python/passlib/Manifest b/dev-python/passlib/Manifest new file mode 100644 index 0000000..fe8b762 --- /dev/null +++ b/dev-python/passlib/Manifest @@ -0,0 +1,2 @@ +DIST passlib-1.3.1.tar.gz 151494 SHA256 4cb312e18ee2c0f107a36799107dfd2e05c51faa54c5678397c38d89f35f1328 +EBUILD passlib-1.3.1.ebuild 685 SHA256 b62338ec3da7910242353a39338009dcdc2ff4f50731c0f525b8c10e74551b0d SHA512 75bf3f14e12071b006fa762e3f8da15dca60f00a9be16b6155df9a61c48c25962b0d06864c3beef92d44253ef97aa18e7b721d39d8925f9bd9c638c379d44e19 WHIRLPOOL 5258a5a8b564de99373e7e9b961ee3db18d24b84cdaac1f0b94b67d6166a91f303c9f586c205500d3d4dcde6e9054ea272b31cdade11f36f0218f030f03c39c5 diff --git a/dev-python/passlib/passlib-1.3.1.ebuild b/dev-python/passlib/passlib-1.3.1.ebuild new file mode 100644 index 0000000..eda6d5c --- /dev/null +++ b/dev-python/passlib/passlib-1.3.1.ebuild @@ -0,0 +1,34 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ +# Ebuild generated by g-pypi 0.2.2 (rev. 214) + +EAPI=3 +RESTRICT_PYTHON_ABIS="3.*" + +inherit distutils + + +DESCRIPTION="comprehensive password hashing framework supporting over 20 schemes" +HOMEPAGE="http://code.google.com/p/passlib/" +SRC_URI="mirror://pypi/${PN}/${P}.tar.gz" +LICENSE="BSD-2" +KEYWORDS="~amd64 ~x86" +SLOT="0" +IUSE="test doc" +DEPEND="dev-python/setuptools + test? ( dev-python/nose )" + + +src_install() { + distutils_src_install + if use doc; then + dodoc "${S}"/docs/* + fi + +} + +src_test() { + PYTHONPATH=. "${python}" setup.py nosetests || die "tests failed" +} + diff --git a/dev-python/python-cloudfiles/Manifest b/dev-python/python-cloudfiles/Manifest new file mode 100644 index 0000000..9861ec4 --- /dev/null +++ b/dev-python/python-cloudfiles/Manifest @@ -0,0 +1,2 @@ +EBUILD python-cloudfiles-1.7.10.ebuild 576 RMD160 918dff94ad32c76230b10deeedab2e1dad99af70 SHA1 f4c5eaf7ce9355016b13f69562b8f50b77b2d5b8 SHA256 6f72670e23237c08df920c7d7f180697c3c09170a961be4eee351f5b610b0682 +EBUILD python-cloudfiles-9999.ebuild 542 RMD160 8e1a75967e9562cb3475fd90f6f99b3cec450e9f SHA1 ac364dc7f2da20d004791f1fe6159d5e51d17a0e SHA256 6535c4c7a01bc348159668ace4bf2ec2baa7739cd2d90c5f041043a5d0f882b4 diff --git a/dev-python/python-cloudfiles/python-cloudfiles-1.7.10.ebuild b/dev-python/python-cloudfiles/python-cloudfiles-1.7.10.ebuild new file mode 100644 index 0000000..f40a2ed --- /dev/null +++ b/dev-python/python-cloudfiles/python-cloudfiles-1.7.10.ebuild @@ -0,0 +1,27 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=3 +PYTHON_DEPEND=2 +SUPPORT_PYTHON_ABIS=1 +RESTRICT_PYTHON_ABIS="3.*" + +inherit git-2 distutils + +DESCRIPTION="CloudFiles client library for Python" +HOMEPAGE="http://pypi.python.org/pypi/python-cloudfiles/" +EGIT_REPO_URI="https://github.com/rackspace/python-cloudfiles.git" +# 1.7.10 +EGIT_COMMIT="f420278622" + +LICENSE="MIT" +SLOT="0" +KEYWORDS="~amd64" +IUSE="" + +DEPEND="dev-python/setuptools + dev-python/nose + dev-python/epydoc" +RDEPEND="${DEPEND}" + diff --git a/dev-python/python-cloudfiles/python-cloudfiles-9999.ebuild b/dev-python/python-cloudfiles/python-cloudfiles-9999.ebuild new file mode 100644 index 0000000..de8c43b --- /dev/null +++ b/dev-python/python-cloudfiles/python-cloudfiles-9999.ebuild @@ -0,0 +1,25 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=3 +PYTHON_DEPEND=2 +SUPPORT_PYTHON_ABIS=1 +RESTRICT_PYTHON_ABIS="3.*" + +inherit git-2 distutils + +DESCRIPTION="CloudFiles client library for Python" +HOMEPAGE="http://pypi.python.org/pypi/python-cloudfiles/" +EGIT_REPO_URI="https://github.com/rackspace/python-cloudfiles.git" + +LICENSE="MIT" +SLOT="0" +KEYWORDS="~amd64" +IUSE="" + +DEPEND="dev-python/setuptools + dev-python/nose + dev-python/epydoc" +RDEPEND="${DEPEND}" + diff --git a/dev-python/python-keystoneclient/Manifest b/dev-python/python-keystoneclient/Manifest new file mode 100644 index 0000000..bf48d45 --- /dev/null +++ b/dev-python/python-keystoneclient/Manifest @@ -0,0 +1,7 @@ +DIST python-keystoneclient-2012.1.tar.gz 48335 RMD160 c62fe318d5c28c1441288200202791cedd83de7a SHA1 3dc7e248b7668278fa0a4a315a1ce18a3ecc2b29 SHA256 4ed73ac8bdaec01ccc1b9c6e740826324798565f2472ee3ff9d4a767d0993549 +DIST python-keystoneclient-2012.1~rc1.tar.gz 42487 RMD160 210b897ce7cac3599c2a254e0bf431e9153bbbd2 SHA1 7b041c0bf0480437b59e208d60ad926ebea1383f SHA256 bc8fc4d958ff6a680f30577cb7f2c43b90518d6f3e773c94b2b09b490c4f5a60 +DIST python-keystoneclient-2012.1~rc2.tar.gz 48335 RMD160 c62fe318d5c28c1441288200202791cedd83de7a SHA1 3dc7e248b7668278fa0a4a315a1ce18a3ecc2b29 SHA256 4ed73ac8bdaec01ccc1b9c6e740826324798565f2472ee3ff9d4a767d0993549 +EBUILD python-keystoneclient-2012.1.ebuild 943 RMD160 2214374697026577fce6c886e6ab498ea6ae15bd SHA1 79bb28d805ed814affe4621d9e318cdeafbc8880 SHA256 76364a286c48195470c2b114cce4491a3d4b167ed10b4fa77ab485866c86fb30 +EBUILD python-keystoneclient-2012.1_rc1.ebuild 978 RMD160 76eb127e00e4d6a7b45445c0f69853ce1d59bc82 SHA1 01df90e5ea7125e9a895d7e4170ffa0a4dc9ff79 SHA256 a06a52f158855749110ff23325f1fbfd1ec5239297fb40fa92d59a119004d5e8 +EBUILD python-keystoneclient-2012.1_rc2.ebuild 978 RMD160 af08516d48c00dff325b0d09e9ed05e462040c2f SHA1 94abc59d00f73b7e0dba8a3c41b4bc51a06e22d2 SHA256 f799ecacafce5bde28734c1be13014b311a9ffa2b8c42bcff4fa0f39052a3aef +EBUILD python-keystoneclient-9999.ebuild 967 RMD160 de8a0c747409226e5addf7c9c12040b3f9c1296e SHA1 535835a6f67087684a7f5f45f1e8be93f6fc00ad SHA256 b3dd1bce8f0270b0447cf01d6b505f94d4fa1ec39f8322b334b8dc946d0ba5fe diff --git a/dev-python/python-keystoneclient/python-keystoneclient-2012.1.ebuild b/dev-python/python-keystoneclient/python-keystoneclient-2012.1.ebuild new file mode 100644 index 0000000..566400d --- /dev/null +++ b/dev-python/python-keystoneclient/python-keystoneclient-2012.1.ebuild @@ -0,0 +1,35 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=3 +PYTHON_DEPEND=2 +SUPPORT_PYTHON_ABIS=1 +RESTRICT_PYTHON_ABIS="3.*" + +inherit distutils + +DESCRIPTION="This is a client for the OpenStack Keystone API. There's a Python +API (the keystoneclient module), and a command-line script (keystone). The +Keystone 2.0 API is still a moving target, so this module will remain in 'Beta' +status until the API is finalized and fully implemented." +HOMEPAGE="https://github.com/openstack/python-keystoneclient" +SRC_URI="http://launchpad.net/keystone/essex/${PV}/+download/${P}.tar.gz" + +LICENSE="Apache-2.0" +SLOT="0" +KEYWORDS="~amd64" +IUSE="" + +DEPEND="dev-python/setuptools + dev-python/argparse + dev-python/coverage + dev-python/httplib2 + dev-python/mock + dev-python/mox + dev-python/nose + dev-python/pep8 + dev-python/prettytable + dev-python/simplejson" +RDEPEND="${DEPEND}" + diff --git a/dev-python/python-keystoneclient/python-keystoneclient-2012.1_rc1.ebuild b/dev-python/python-keystoneclient/python-keystoneclient-2012.1_rc1.ebuild new file mode 100644 index 0000000..89392c5 --- /dev/null +++ b/dev-python/python-keystoneclient/python-keystoneclient-2012.1_rc1.ebuild @@ -0,0 +1,37 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=3 +PYTHON_DEPEND=2 +SUPPORT_PYTHON_ABIS=1 +RESTRICT_PYTHON_ABIS="3.*" + +inherit distutils + +DESCRIPTION="This is a client for the OpenStack Keystone API. There's a Python +API (the keystoneclient module), and a command-line script (keystone). The +Keystone 2.0 API is still a moving target, so this module will remain in 'Beta' +status until the API is finalized and fully implemented." +HOMEPAGE="https://github.com/openstack/python-keystoneclient" +SRC_URI="http://launchpad.net/keystone/essex/essex-rc1/+download/${P/_*/}~rc1.tar.gz" + +LICENSE="Apache-2.0" +SLOT="0" +KEYWORDS="~amd64" +IUSE="" + +DEPEND="dev-python/setuptools + dev-python/argparse + dev-python/coverage + dev-python/httplib2 + dev-python/mock + dev-python/mox + dev-python/nose + dev-python/pep8 + dev-python/prettytable + dev-python/simplejson" +RDEPEND="${DEPEND}" + +S=${WORKDIR}/${P/_*/} + diff --git a/dev-python/python-keystoneclient/python-keystoneclient-2012.1_rc2.ebuild b/dev-python/python-keystoneclient/python-keystoneclient-2012.1_rc2.ebuild new file mode 100644 index 0000000..ed13a64 --- /dev/null +++ b/dev-python/python-keystoneclient/python-keystoneclient-2012.1_rc2.ebuild @@ -0,0 +1,37 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=3 +PYTHON_DEPEND=2 +SUPPORT_PYTHON_ABIS=1 +RESTRICT_PYTHON_ABIS="3.*" + +inherit distutils + +DESCRIPTION="This is a client for the OpenStack Keystone API. There's a Python +API (the keystoneclient module), and a command-line script (keystone). The +Keystone 2.0 API is still a moving target, so this module will remain in 'Beta' +status until the API is finalized and fully implemented." +HOMEPAGE="https://github.com/openstack/python-keystoneclient" +SRC_URI="http://launchpad.net/keystone/essex/essex-rc2/+download/${P/_*/}~rc2.tar.gz" + +LICENSE="Apache-2.0" +SLOT="0" +KEYWORDS="~amd64" +IUSE="" + +DEPEND="dev-python/setuptools + dev-python/argparse + dev-python/coverage + dev-python/httplib2 + dev-python/mock + dev-python/mox + dev-python/nose + dev-python/pep8 + dev-python/prettytable + dev-python/simplejson" +RDEPEND="${DEPEND}" + +S=${WORKDIR}/${P/_*/} + diff --git a/dev-python/python-keystoneclient/python-keystoneclient-9999.ebuild b/dev-python/python-keystoneclient/python-keystoneclient-9999.ebuild new file mode 100644 index 0000000..81259f0 --- /dev/null +++ b/dev-python/python-keystoneclient/python-keystoneclient-9999.ebuild @@ -0,0 +1,36 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=3 +PYTHON_DEPEND=2 +SUPPORT_PYTHON_ABIS=1 +RESTRICT_PYTHON_ABIS="3.*" + +inherit git-2 distutils + +DESCRIPTION="This is a client for the OpenStack Keystone API. There's a Python +API (the keystoneclient module), and a command-line script (keystone). The +Keystone 2.0 API is still a moving target, so this module will remain in 'Beta' +status until the API is finalized and fully implemented." +HOMEPAGE="https://github.com/openstack/python-keystoneclient" +EGIT_REPO_URI="https://github.com/openstack/python-keystoneclient.git" + +LICENSE="Apache-2.0" +SLOT="0" +KEYWORDS="~amd64" +IUSE="" + +DEPEND="dev-python/setuptools + dev-python/argparse + dev-python/coverage + dev-python/httplib2 + dev-python/mock + dev-python/mox + dev-python/nose + dev-python/pep8 + dev-python/prettytable + dev-python/simplejson + !sys-auth/keystone" +RDEPEND="${DEPEND}" + diff --git a/dev-python/python-novaclient/Manifest b/dev-python/python-novaclient/Manifest new file mode 100644 index 0000000..877a227 --- /dev/null +++ b/dev-python/python-novaclient/Manifest @@ -0,0 +1,8 @@ +DIST python-novaclient-2012.1.tar.gz 85322 RMD160 980c009cc77210462eb4590c0fa9927d562023ab SHA1 afbeb4832f6742a650903563021a4652de0d523c SHA256 6b6cb8a806e1df78eda42e7d1030ed5435f417bfbbb122f790ad1b3fe8863143 +DIST python-novaclient-2012.1~rc1.tar.gz 80448 RMD160 34d71e8b6305c6cc83383d55d2eba0ed9fa6da10 SHA1 cfae4e0000f7219874a5a74044b01c1278169480 SHA256 a35122215c3c9c7608dda80929b37c1ebb5b1463eb916e3a32be16489aeb8447 +DIST python-novaclient-2012.1~rc3.tar.gz 85322 RMD160 980c009cc77210462eb4590c0fa9927d562023ab SHA1 afbeb4832f6742a650903563021a4652de0d523c SHA256 6b6cb8a806e1df78eda42e7d1030ed5435f417bfbbb122f790ad1b3fe8863143 +DIST python-novaclient-2012.1~rc4.tar.gz 85322 RMD160 980c009cc77210462eb4590c0fa9927d562023ab SHA1 afbeb4832f6742a650903563021a4652de0d523c SHA256 6b6cb8a806e1df78eda42e7d1030ed5435f417bfbbb122f790ad1b3fe8863143 +EBUILD python-novaclient-2012.1.ebuild 694 RMD160 bbed06d11b4bcd2a2718424f9778bed8d3ccc478 SHA1 79a6db5a604fcffdfda7bb17bfc93dc6906cc139 SHA256 4920ea5b1fbbcf4d511a8c84e5521071bcf26daf3db91ac7db2aaeb92b4401a3 +EBUILD python-novaclient-2012.1_rc1.ebuild 729 RMD160 6748836fad447a91960ee16ac25bb77a2ce80dd9 SHA1 4a598b0da5b424ace50dd610a37906a5a9dd4b37 SHA256 bb8109e7059f9339724833a0c0f75839ee7a2ca149051f9d652938bc797ccabb +EBUILD python-novaclient-2012.1_rc3.ebuild 729 RMD160 070b5f8c57b82533d7bdcdc934304521f533e72c SHA1 b6d789e7270398ed081e2f8a372e8269fe61ddc3 SHA256 4167ae00720a96a46750bb459fe0f126d445a4e249631ad1c0437e585f49ec43 +EBUILD python-novaclient-2012.1_rc4.ebuild 729 RMD160 7ae125ec8ec5070eae89f02bdd704148f3b47b36 SHA1 496befa02181d5fbe7e996c6ee38aa85132abf16 SHA256 64380123c746baa6ecda43e3d4bd1db7b071a8f63c8fed7c376b559df3b85439 diff --git a/dev-python/python-novaclient/python-novaclient-2012.1.ebuild b/dev-python/python-novaclient/python-novaclient-2012.1.ebuild new file mode 100644 index 0000000..f27502e --- /dev/null +++ b/dev-python/python-novaclient/python-novaclient-2012.1.ebuild @@ -0,0 +1,28 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=3 +PYTHON_DEPEND="2" +SUPPORT_PYTHON_ABIS="1" +RESTRICT_PYTHON_ABIS="3.*" + +inherit distutils + +DESCRIPTION="This is a client for the OpenStack Nova API. There's a Python API +(the novaclient module), and a command-line script (nova). Each implements 100% +of the OpenStack Nova API." +HOMEPAGE="https://launchpad.net/nova" +SRC_URI="http://launchpad.net/nova/essex/${PV}/+download/${P}.tar.gz" + +LICENSE="Apache-2.0" +SLOT="0" +KEYWORDS="~amd64" +IUSE="" + +DEPEND="dev-python/setuptools" +RDEPEND="${DEPEND} + dev-python/argparse + dev-python/httplib2 + dev-python/prettytable" + diff --git a/dev-python/python-novaclient/python-novaclient-2012.1_rc1.ebuild b/dev-python/python-novaclient/python-novaclient-2012.1_rc1.ebuild new file mode 100644 index 0000000..582c5d3 --- /dev/null +++ b/dev-python/python-novaclient/python-novaclient-2012.1_rc1.ebuild @@ -0,0 +1,30 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=3 +PYTHON_DEPEND="2" +SUPPORT_PYTHON_ABIS="1" +RESTRICT_PYTHON_ABIS="3.*" + +inherit distutils + +DESCRIPTION="This is a client for the OpenStack Nova API. There's a Python API +(the novaclient module), and a command-line script (nova). Each implements 100% +of the OpenStack Nova API." +HOMEPAGE="https://launchpad.net/nova" +SRC_URI="http://launchpad.net/nova/essex/essex-rc1/+download/${P/_*/}~rc1.tar.gz" + +LICENSE="Apache-2.0" +SLOT="0" +KEYWORDS="~amd64" +IUSE="" + +DEPEND="dev-python/setuptools" +RDEPEND="${DEPEND} + dev-python/argparse + dev-python/httplib2 + dev-python/prettytable" + +S=${WORKDIR}/${P/_*/} + diff --git a/dev-python/python-novaclient/python-novaclient-2012.1_rc3.ebuild b/dev-python/python-novaclient/python-novaclient-2012.1_rc3.ebuild new file mode 100644 index 0000000..c525aa6 --- /dev/null +++ b/dev-python/python-novaclient/python-novaclient-2012.1_rc3.ebuild @@ -0,0 +1,30 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=3 +PYTHON_DEPEND="2" +SUPPORT_PYTHON_ABIS="1" +RESTRICT_PYTHON_ABIS="3.*" + +inherit distutils + +DESCRIPTION="This is a client for the OpenStack Nova API. There's a Python API +(the novaclient module), and a command-line script (nova). Each implements 100% +of the OpenStack Nova API." +HOMEPAGE="https://launchpad.net/nova" +SRC_URI="http://launchpad.net/nova/essex/essex-rc3/+download/${P/_*/}~rc3.tar.gz" + +LICENSE="Apache-2.0" +SLOT="0" +KEYWORDS="~amd64" +IUSE="" + +DEPEND="dev-python/setuptools" +RDEPEND="${DEPEND} + dev-python/argparse + dev-python/httplib2 + dev-python/prettytable" + +S=${WORKDIR}/${P/_*/} + diff --git a/dev-python/python-novaclient/python-novaclient-2012.1_rc4.ebuild b/dev-python/python-novaclient/python-novaclient-2012.1_rc4.ebuild new file mode 100644 index 0000000..f8a1ae1 --- /dev/null +++ b/dev-python/python-novaclient/python-novaclient-2012.1_rc4.ebuild @@ -0,0 +1,30 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=3 +PYTHON_DEPEND="2" +SUPPORT_PYTHON_ABIS="1" +RESTRICT_PYTHON_ABIS="3.*" + +inherit distutils + +DESCRIPTION="This is a client for the OpenStack Nova API. There's a Python API +(the novaclient module), and a command-line script (nova). Each implements 100% +of the OpenStack Nova API." +HOMEPAGE="https://launchpad.net/nova" +SRC_URI="http://launchpad.net/nova/essex/essex-rc4/+download/${P/_*/}~rc4.tar.gz" + +LICENSE="Apache-2.0" +SLOT="0" +KEYWORDS="~amd64" +IUSE="" + +DEPEND="dev-python/setuptools" +RDEPEND="${DEPEND} + dev-python/argparse + dev-python/httplib2 + dev-python/prettytable" + +S=${WORKDIR}/${P/_*/} + diff --git a/dev-python/python-quantumclient/Manifest b/dev-python/python-quantumclient/Manifest new file mode 100644 index 0000000..ab9bca1 --- /dev/null +++ b/dev-python/python-quantumclient/Manifest @@ -0,0 +1 @@ +EBUILD python-quantumclient-9999.ebuild 652 RMD160 e8f902fce5a484215afa7a609fca435928bcff81 SHA1 b26feee2ea67e97a25f46164f0ee2811ab07b955 SHA256 2d5ccf8242d6ff88bf41f61e572b2a8f32a2a32a434a81e803fa093d66784162 diff --git a/dev-python/python-quantumclient/python-quantumclient-9999.ebuild b/dev-python/python-quantumclient/python-quantumclient-9999.ebuild new file mode 100644 index 0000000..6b10104 --- /dev/null +++ b/dev-python/python-quantumclient/python-quantumclient-9999.ebuild @@ -0,0 +1,30 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=3 + +PYTHON_DEPEND="2" + +inherit git-2 distutils + +DESCRIPTION="This is the client API library for Quantum." +HOMEPAGE="http://wiki.openstack.org/Quantum" +EGIT_REPO_URI="https://github.com/openstack/python-quantumclient.git" + +LICENSE="Apache-2.0" +SLOT="0" +KEYWORDS="~amd64" +IUSE="" + +DEPEND="dev-python/setuptools + dev-python/pep8 + dev-python/nosexcover + dev-python/nose + dev-python/coverage + dev-python/paste + dev-python/pastedeploy + dev-python/python-gflags + dev-python/webob + net-misc/quantum" +RDEPEND="${DEPEND}" diff --git a/dev-python/python-swift3/Manifest b/dev-python/python-swift3/Manifest new file mode 100644 index 0000000..d02d87f --- /dev/null +++ b/dev-python/python-swift3/Manifest @@ -0,0 +1 @@ +EBUILD python-swift3-1.5.0.ebuild 579 RMD160 1a1ffabf282299db741754cd819a6720f50adbbe SHA1 986c76557a0862b90bf9316d34d84ea175c19ac2 SHA256 8b6cb2eda30e0480af6caf1b968bfe0847a39811165064485d089f64f8ee496d diff --git a/dev-python/python-swift3/python-swift3-1.5.0.ebuild b/dev-python/python-swift3/python-swift3-1.5.0.ebuild new file mode 100644 index 0000000..b60ef8c --- /dev/null +++ b/dev-python/python-swift3/python-swift3-1.5.0.ebuild @@ -0,0 +1,27 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=3 +PYTHON_DEPEND=2 +SUPPORT_PYTHON_ABIS=1 +RESTRICT_PYTHON_ABIS="3.*" + +inherit git-2 distutils + +DESCRIPTION="Openstack Swift S3 library for Python" +HOMEPAGE="https://github.com/fujita/swift3" +#EGIT_REPO_URI="https://github.com/fujita/swift3.git" +EGIT_REPO_URI="https://github.com/hyves-org/swift3.git" +# 1.5.0 +EGIT_COMMIT="7f0b466" + +LICENSE="" +SLOT="0" +KEYWORDS="~amd64" +IUSE="" + +DEPEND="dev-python/setuptools + dev-python/nose" +RDEPEND="${DEPEND}" + diff --git a/net-dns/dnsmasq/Manifest b/net-dns/dnsmasq/Manifest new file mode 100644 index 0000000..a6d8427 --- /dev/null +++ b/net-dns/dnsmasq/Manifest @@ -0,0 +1,5 @@ +AUX dnsmasq-2.47-fbsd-config.patch 505 SHA256 4e05e46b59254e718550cda505986b9b572a0716636fb6a5405a54df25cfa84a SHA512 9d2476c60b87f4515473e5b790ca3c6dd96105ecbda55fa385ce88290acbe8a16b6c48f9a6cbcc535662765aa4f07d182c0f5ebb4ffff1c98bb0cf6a8f4dd528 WHIRLPOOL e314020c11bc902f1dc29464785098ef0d10ebf14d8092fc1b8b673cea3d64e5212f82b85597ffe2d2bc150fbf51f27f560744a7ea12f2359c698e5ca80898cb +AUX dnsmasq-init-r2 655 SHA256 6c8cf3c414a3eb3f57cc96a19ae24f228cd3a82c3fc7ae3504dd888848d777e8 SHA512 89f114a11a92ed31a5a59fe83844ef48b5f62c73444d9c657c84eccc7455d77899c6105f1daf1e97e97af03c2ab6c9909278606f928ff2fcb185c00bd8cedb25 WHIRLPOOL 3ac0e1fca4bcbe41d4460d47111cf8ca2f79849d24f93de18549cc82aa3303b05ff37ea31451dd72c7650a3ac5e36226f01f29dd6a2d1240e46da267d55ffd80 +AUX dnsmasq.confd-r1 170 SHA256 51c0672a70d5d6793d295d82db666d372fb081e8627318f67c88e48d08d254b5 SHA512 9a401bfc408bf1638645c61b8ca734bea0a09ef79fb36648ec7ef21666257234254bbe6c73c82cc23aa1779ddcdda0e6baa2c041866f16dfb9c4e0ba9133eab8 WHIRLPOOL 86f364adcb5576bfb2cc84d13dd087bef987cae70eee1ae7816f0febc58ec637a97fea357c506456781eab116e257d06b1e45f7e2bbd81849251c15067a347ab +DIST dnsmasq-2.63.tar.xz 378148 SHA256 f5eb1c2dfd47a2c75b0d40a60f85dce2e84c6af6d1cd5318fbe8cd69845ed2d8 SHA512 be057e19062b2eed46fd4677f1419048d4546e0de93a9b0b889417c240a5f7930329d659de41105670c23ca612ce53285875ed64ac56a0cf94ff01d522194cb1 WHIRLPOOL 7e1279efa347c8d69d56c240477f6acc1664b90f05de6a7053f8264d74200afad16389e33ea710e371c0c19c0d7ea9bfdec8d0089ca0fba341bf5e265d4ea783 +EBUILD dnsmasq-2.63.ebuild 2861 SHA256 8e8dbe6009cca25f19479b40ed6a0a5660893eb708538de845eb5a6a2a650fd1 SHA512 ea884df04668d7b39d1fa8465e63beedeb9551b8582ab2867af7b549ad5c495e0b1e742997058afe2b22cb9fd372eb69f810e9e91e19f43fceb4933b361f7fb4 WHIRLPOOL 65b328c0f5cca638d3e6bf79e04572c3629704f8818cd9ad9e71f25402b9cf9378a28a3729be6fa41d7a901f5552d2f452f6ad456f8c31a17d27751e98c2e08d diff --git a/net-dns/dnsmasq/dnsmasq-2.63.ebuild b/net-dns/dnsmasq/dnsmasq-2.63.ebuild new file mode 100644 index 0000000..7152fce --- /dev/null +++ b/net-dns/dnsmasq/dnsmasq-2.63.ebuild @@ -0,0 +1,129 @@ +# Copyright 1999-2012 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/net-dns/dnsmasq/dnsmasq-2.63.ebuild,v 1.7 2012/10/07 14:20:05 armin76 Exp $ + +EAPI=4 + +inherit eutils toolchain-funcs flag-o-matic user systemd + +DESCRIPTION="Small forwarding DNS server" +HOMEPAGE="http://www.thekelleys.org.uk/dnsmasq/" +SRC_URI="http://www.thekelleys.org.uk/dnsmasq/${P}.tar.xz" + +LICENSE="|| ( GPL-2 GPL-3 )" +SLOT="0" +KEYWORDS="alpha amd64 arm hppa ia64 ~mips ppc ppc64 s390 sh sparc x86 ~sparc-fbsd ~x86-fbsd" +IUSE="conntrack dbus +dhcp idn ipv6 lua nls script tftp" +DM_LINGUAS="de es fi fr id it no pl pt_BR ro" +for dm_lingua in ${DM_LINGUAS}; do + IUSE+=" linguas_${dm_lingua}" +done + +RDEPEND="dbus? ( sys-apps/dbus ) + idn? ( net-dns/libidn ) + lua? ( dev-lang/lua ) + conntrack? ( net-libs/libnetfilter_conntrack ) + nls? ( + sys-devel/gettext + net-dns/libidn + )" + +DEPEND="${RDEPEND} + virtual/pkgconfig + app-arch/xz-utils" + +REQUIRED_USE="lua? ( script )" + +use_have() { + local NO_ONLY="" + if [ $1 == '-n' ]; then + NO_ONLY=1 + shift + fi + + local UWORD=${2:-$1} + UWORD=${UWORD^^*} + + if ! use ${1}; then + echo " -DNO_${UWORD}" + elif [ -z "${NO_ONLY}" ]; then + echo " -DHAVE_${UWORD}" + fi +} + +pkg_setup() { + enewgroup dnsmasq + enewuser dnsmasq -1 -1 /dev/null dnsmasq +} + +src_prepare() { + # dnsmasq on FreeBSD wants the config file in a silly location, this fixes + epatch "${FILESDIR}/${PN}-2.47-fbsd-config.patch" + sed -i -r 's:lua5.[0-9]+:lua:' Makefile +} + +src_configure() { + COPTS="$(use_have conntrack)" + COPTS+="$(use_have dbus)" + COPTS+="$(use_have -n dhcp)" + COPTS+="$(use_have idn)" + COPTS+="$(use_have -n ipv6)" + COPTS+="$(use_have lua luascript)" + COPTS+="$(use_have -n script)" + COPTS+="$(use_have -n tftp)" + COPTS+="$(use ipv6 && use dhcp || echo " -DNO_DHCP6")" +} + +src_compile() { + emake \ + PREFIX=/usr \ + CC="$(tc-getCC)" \ + CFLAGS="${CFLAGS}" \ + LDFLAGS="${LDFLAGS}" \ + COPTS="${COPTS}" \ + all$(use nls && echo "-i18n") + + cd ${S}/contrib/wrt + emake \ + PREFIX=/usr \ + CC="$(tc-getCC)" \ + CFLAGS="${CFLAGS}" \ + COPTS="${COPTS}" \ + all$(use nls) +} + +src_install() { + emake \ + PREFIX=/usr \ + MANDIR=/usr/share/man \ + DESTDIR="${D}" \ + install$(use nls && echo "-i18n") + + exeinto /usr/sbin + doexe ${S}/contrib/wrt/dhcp_release + + local lingua + for lingua in ${DM_LINGUAS}; do + use linguas_${lingua} || rm -rf "${D}"/usr/share/locale/${lingua} + done + rmdir --ignore-fail-on-non-empty "${D}"/usr/share/locale/ + + dodoc CHANGELOG CHANGELOG.archive FAQ + dodoc -r logo + + dodoc CHANGELOG FAQ + dohtml *.html + + newinitd "${FILESDIR}"/dnsmasq-init-r2 dnsmasq + newconfd "${FILESDIR}"/dnsmasq.confd-r1 dnsmasq + + insinto /etc + newins dnsmasq.conf.example dnsmasq.conf + + if use dbus ; then + insinto /etc/dbus-1/system.d + doins dbus/dnsmasq.conf + fi + + systemd_dounit "${FILESDIR}"/dnsmasq.service +} diff --git a/net-dns/dnsmasq/files/dnsmasq-2.47-fbsd-config.patch b/net-dns/dnsmasq/files/dnsmasq-2.47-fbsd-config.patch new file mode 100644 index 0000000..38a3679 --- /dev/null +++ b/net-dns/dnsmasq/files/dnsmasq-2.47-fbsd-config.patch @@ -0,0 +1,16 @@ +diff -ur dnsmasq-2.47.orig/src/config.h dnsmasq-2.47/src/config.h +--- dnsmasq-2.47.orig/src/config.h 2009-02-05 07:14:24.000000000 -0500 ++++ dnsmasq-2.47/src/config.h 2009-03-30 00:04:52.000000000 -0400 +@@ -50,11 +50,7 @@ + #endif + + #ifndef CONFFILE +-# if defined(__FreeBSD__) +-# define CONFFILE "/usr/local/etc/dnsmasq.conf" +-# else +-# define CONFFILE "/etc/dnsmasq.conf" +-# endif ++# define CONFFILE "/etc/dnsmasq.conf" + #endif + + #define DEFLEASE 3600 /* default lease time, 1 hour */ diff --git a/net-dns/dnsmasq/files/dnsmasq-init-r2 b/net-dns/dnsmasq/files/dnsmasq-init-r2 new file mode 100644 index 0000000..08e747d --- /dev/null +++ b/net-dns/dnsmasq/files/dnsmasq-init-r2 @@ -0,0 +1,25 @@ +#!/sbin/runscript +# Copyright 1999-2012 Gentoo Foundation +# Distributed under the terms of the GNU General Public License, v2 or later +# $Header: /var/cvsroot/gentoo-x86/net-dns/dnsmasq/files/dnsmasq-init-r2,v 1.1 2012/03/07 21:59:19 chutzpah Exp $ + +extra_started_commands="reload" + +pidfile="/var/run/dnsmasq.pid" +command="/usr/sbin/dnsmasq" +command_args="-x ${pidfile} ${DNSMASQ_OPTS}" +start_stop_daemon_args="--retry TERM/3/TERM/5" + +depend() { + provide dns + need localmount net + after bootmisc + use logger +} + +reload() { + ebegin "Reloading ${SVCNAME}" + start-stop-daemon --stop --oknodo --signal HUP \ + --exec ${command} --pidfile ${pidfile} + eend $? +} diff --git a/net-dns/dnsmasq/files/dnsmasq.confd-r1 b/net-dns/dnsmasq/files/dnsmasq.confd-r1 new file mode 100644 index 0000000..0e94463 --- /dev/null +++ b/net-dns/dnsmasq/files/dnsmasq.confd-r1 @@ -0,0 +1,4 @@ +# /etc/conf.d/dnsmasq: config file for /etc/init.d/dnsmasq + +# See the dnsmasq(8) man page for possible options to put here. +DNSMASQ_OPTS="--user=dnsmasq --group=dnsmasq" diff --git a/net-misc/quantum/Manifest b/net-misc/quantum/Manifest new file mode 100644 index 0000000..3ea61ef --- /dev/null +++ b/net-misc/quantum/Manifest @@ -0,0 +1,4 @@ +AUX quantum-server.confd 52 RMD160 346646e4e57f49c5f122702bd9c6a00355716c61 SHA1 e74578ef4be722bf7a3df9d566a99a592b6d47c3 SHA256 1a7ca03a655e34f82bccd9fc695f614b60a2bbdc3d2606e4535fcb8891456d39 +AUX quantum-server.initd 917 RMD160 e4ac130a281893414ccb7730bc42dbd95614e807 SHA1 5dd1a7b0950046127f105ca4baa3fdc31fb46a32 SHA256 d6bddd3ab93cc98b9fbb550f4e8828e4f7c46b19d4d0cd7201eb6dcc2d67ac44 +AUX server-setup-disable-initd-install.patch 762 RMD160 d5199ad5a8b61a5edd2d0b56bf85699de7d01001 SHA1 c798697bfbcebc5e086b6b18ec8fbb9dd301869c SHA256 4be67baa17793ff647cdfdde8de9fbffd0be031539cc7349858cf7a0a1d60450 +EBUILD quantum-9999.ebuild 1164 RMD160 4a4a933e363a6e85e80a3b0de84dc6ca0a07ce7d SHA1 e145a11db25cc3f532bcca4283edf307223b99d4 SHA256 56f788bc05989afd745de897ba5c6f560be2654d155e403d8260ebc527282b20 diff --git a/net-misc/quantum/files/quantum-server.confd b/net-misc/quantum/files/quantum-server.confd new file mode 100644 index 0000000..eb78930 --- /dev/null +++ b/net-misc/quantum/files/quantum-server.confd @@ -0,0 +1,2 @@ +PID_PATH=/var/run/quantum +LOG_PATH=/var/log/quantum diff --git a/net-misc/quantum/files/quantum-server.initd b/net-misc/quantum/files/quantum-server.initd new file mode 100644 index 0000000..f4319d5 --- /dev/null +++ b/net-misc/quantum/files/quantum-server.initd @@ -0,0 +1,43 @@ +#!/sbin/runscript +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +depend() { + need net +} + +checkconfig() { + if [ ! -r /etc/conf.d/quantum-server ]; then + eerror "No Quantum Config found: /etc/conf.d/quantum-server)" + return 1 + fi + # FIXME: might be nice to add some checks for proper /etc/quantum config files + return 0 +} + + +start() { + checkconfig || return $? + ebegin "Starting ${SVCNAME}" + + start-stop-daemon --start --background --make-pidfile \ + --pidfile "${PID_PATH}/${SVCNAME}.pid" \ + --exec /usr/bin/${SVCNAME} -- \ + --log-file=${LOG_PATH}/${SVCNAME}.log + + eend $? "Failed to start ${SVCNAME}" +} + +stop() { + checkconfig || return $? + ebegin "Stopping ${SVCNAME}" + + start-stop-daemon --stop --pidfile "${PID_PATH}/${SVCNAME}.pid" \ + --exec /usr/bin/${SVCNAME} + eend $? "Failed to stop ${SVCNAME}" +} + +#restart() { +# +#} diff --git a/net-misc/quantum/files/server-setup-disable-initd-install.patch b/net-misc/quantum/files/server-setup-disable-initd-install.patch new file mode 100644 index 0000000..83a05b8 --- /dev/null +++ b/net-misc/quantum/files/server-setup-disable-initd-install.patch @@ -0,0 +1,21 @@ +--- setup.py.orig 2012-02-02 12:26:50.000000000 +0100 ++++ setup.py 2012-02-02 13:05:46.000000000 +0100 +@@ -66,15 +66,13 @@ + ProjectScripts = [ + ] + +-config_path = 'etc/quantum/' +-init_path = 'etc/init.d' +-ovs_plugin_config_path = 'etc/quantum/plugins/openvswitch' +-cisco_plugin_config_path = 'etc/quantum/plugins/cisco' ++config_path = '/etc/quantum/' ++ovs_plugin_config_path = '/etc/quantum/plugins/openvswitch' ++cisco_plugin_config_path = '/etc/quantum/plugins/cisco' + + DataFiles = [ + (config_path, + ['etc/quantum.conf', 'etc/quantum.conf.test', 'etc/plugins.ini']), +- (init_path, ['etc/init.d/quantum-server']), + (ovs_plugin_config_path, + ['etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini']), + (cisco_plugin_config_path, diff --git a/net-misc/quantum/quantum-9999.ebuild b/net-misc/quantum/quantum-9999.ebuild new file mode 100644 index 0000000..00949fa --- /dev/null +++ b/net-misc/quantum/quantum-9999.ebuild @@ -0,0 +1,51 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=3 + +PYTHON_DEPEND="2" + +inherit git-2 distutils eutils + +DESCRIPTION="Quantum is an incubated OpenStack project to provide 'network +connectivity as a service' between interface devices (e.g., vNICs) managed by +other Openstack services (e.g., nova). " +HOMEPAGE="http://wiki.openstack.org/Quantum" +EGIT_REPO_URI="https://github.com/openstack/quantum.git" + +LICENSE="Apache-2.0" +SLOT="0" +KEYWORDS="~amd64" +IUSE="" + +DEPEND="dev-python/setuptools + dev-python/pep8 + dev-python/nosexcover + dev-python/eventlet + dev-python/routes + dev-python/paste + dev-python/pastedeploy + dev-python/python-gflags + dev-python/simplejson + dev-python/sqlalchemy + dev-python/webob + dev-python/webtest + dev-python/pip" +RDEPEND="${DEPEND}" + +src_prepare() { + epatch "${FILESDIR}/server-setup-disable-initd-install.patch" +} + +src_install() { + distutils_src_install + + newconfd "${FILESDIR}/quantum-server.confd" quantum-server + newinitd "${FILESDIR}/quantum-server.initd" quantum-server + + diropts -m 0750 + dodir /var/run/quantum /var/log/quantum + + dodoc README +} diff --git a/sys-auth/keystone/Manifest b/sys-auth/keystone/Manifest new file mode 100644 index 0000000..96ef3b2 --- /dev/null +++ b/sys-auth/keystone/Manifest @@ -0,0 +1,13 @@ +AUX keystone.confd 67 RMD160 c4555c0fe6772a087b2d72f6c31099dff50e3d1f SHA1 1dac9f842554f9a1a794acbd750b906a78e88d25 SHA256 8faa32d3354df30b1d1c98cf481be162c27583b84e387f8da57611b689bc2448 +AUX keystone.initd 1069 RMD160 1c1c70442c424f859fc3bc8da099b3b1750fd9c8 SHA1 50a7c4f031d6e8b2d48b5523ebe4ffb0c3523458 SHA256 70cbe2d37f139f4e7d99ac128b89d399e291cabd38b9db6e25e9d462f61b3602 +DIST keystone-2011.3.tar.gz 1582804 RMD160 f0abe18c59784232985dcfe82396997fd0a35a7c SHA1 7c8df4086ba075c7cadab84d1b20158977ed5062 SHA256 771c27440e6c55d72834db187ee114af54cf91fc49cd05ac7497653115e943f5 +DIST keystone-2012.1.2.tar.gz 447876 RMD160 02696e814a58c94feac1c14108121578d2047140 SHA1 093d05618943da9adf073b87797ad96b1a9ddb59 SHA256 0634eac122f38af11f73e7e8ef67d4dbb27e4179a23e78682f6b5212f6619c90 +DIST keystone-2012.1.tar.gz 186851 RMD160 89a1448c68015e32e7fa809c825e5fae76637531 SHA1 7fcca1e145372a2d454aaff8669447d28fac99ad SHA256 c480a28be3d3f0425a25a6aec141b5b505b8cf5a25b8883a20b89b0561c5dbe0 +DIST keystone-2012.1~rc1.tar.gz 184724 RMD160 e921de53d13849c84bf5022b985986b991371e94 SHA1 f7ff7fc4e0b623b596297f89b5140aed28a7f14f SHA256 f854a70a78c3977f87e64a53fc8787af17e215b12129e07a1d1a3ab56ad2c546 +DIST keystone-2012.1~rc2.tar.gz 186851 RMD160 89a1448c68015e32e7fa809c825e5fae76637531 SHA1 7fcca1e145372a2d454aaff8669447d28fac99ad SHA256 c480a28be3d3f0425a25a6aec141b5b505b8cf5a25b8883a20b89b0561c5dbe0 +EBUILD keystone-2011.3.ebuild 841 RMD160 f302428fc4e72c495e22b1ad771dab2c3cf905fb SHA1 b993869c60515e30f253d9a34eeb9fa97f1a752e SHA256 10b3d849baa5f0666e0ce7590f8ced78c5c3f846a25f266b21a16b9b1ea1be08 +EBUILD keystone-2012.1.2.ebuild 971 RMD160 f4fb9135edae8a4aa7d0bd037355c9200c191334 SHA1 4c991ce5bf035eedbe9a5552fe5e96046be4c5ba SHA256 1eaa61ec485d75546468656142978ac44b392756baec363f4df621d239cb3255 +EBUILD keystone-2012.1.ebuild 971 RMD160 f4fb9135edae8a4aa7d0bd037355c9200c191334 SHA1 4c991ce5bf035eedbe9a5552fe5e96046be4c5ba SHA256 1eaa61ec485d75546468656142978ac44b392756baec363f4df621d239cb3255 +EBUILD keystone-2012.1_rc1.ebuild 1006 RMD160 b02a82fd2403b063b5954600cb21653b53b3590a SHA1 3ae390184688d3204f57cee279c4c6ccc0660a0b SHA256 7a942dd272903ecc0c2b8701df3138e692df34a8feaa3cdc47d0424d2a124538 +EBUILD keystone-2012.1_rc2.ebuild 1006 RMD160 03155be1c36b1476e2df74bbcc3c054c60db1aec SHA1 c0e13d439c80cc70e1e0ab398a12663624ea92c7 SHA256 0560a5076eb9cc2e67d991fb3200854d383fe1f195aa44925ba5aa88bed1406a +EBUILD keystone-9999.ebuild 794 RMD160 3c88e71b4fa32e3ae88e989b751d16162ff788eb SHA1 50d2ee919a98853998942f0baa0b8209c2a34e47 SHA256 fdf7b485f6aeb7903b3a454f69ba5deb06227354ac3514cbaa60d57c8a9fc7bd diff --git a/sys-auth/keystone/files/keystone.confd b/sys-auth/keystone/files/keystone.confd new file mode 100644 index 0000000..7bc6565 --- /dev/null +++ b/sys-auth/keystone/files/keystone.confd @@ -0,0 +1,2 @@ +CONFIG_FILE=/etc/keystone/keystone.conf +PID_PATH=/var/run/keystone diff --git a/sys-auth/keystone/files/keystone.initd b/sys-auth/keystone/files/keystone.initd new file mode 100644 index 0000000..dde18b0 --- /dev/null +++ b/sys-auth/keystone/files/keystone.initd @@ -0,0 +1,53 @@ +#!/sbin/runscript +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +depend() { + need net +} + +BASENAME=$(echo $SVCNAME | cut -d '-' -f 1) + +checkconfig() { + if [ ! -r /etc/conf.d/$BASENAME ]; then + eerror "No keystone service confd file found: /etc/conf.d/$BASENAME)" + return 1 + fi + . /etc/conf.d/$BASENAME + + if [ ! -r ${CONFIG_FILE} ]; then + eerror "No keystone config file found: ${CONFIG_FILE})" + return 1 + fi + + return 0 +} + + +start() { + checkconfig || return $? + . /etc/conf.d/$BASENAME + + ebegin "Starting ${SVCNAME}" + + start-stop-daemon --start --quiet --make-pidfile --pidfile "${PID_PATH}/${SVCNAME}.pid" \ + --exec /usr/bin/${SVCNAME}-all --background -- --config-file=${CONFIG_FILE} + + eend $? "Failed to start ${SVCNAME}" +} + +stop() { + checkconfig || return $? + . /etc/conf.d/$BASENAME + + ebegin "Stopping ${SVCNAME}" + + start-stop-daemon --stop --pidfile "${PID_PATH}/${SVCNAME}.pid" \ + --exec /usr/bin/${SVCNAME}-all + eend $? "Failed to stop ${SVCNAME}" +} + +#restart() { +# +#} diff --git a/sys-auth/keystone/keystone-2012.1.2.ebuild b/sys-auth/keystone/keystone-2012.1.2.ebuild new file mode 100644 index 0000000..582510c --- /dev/null +++ b/sys-auth/keystone/keystone-2012.1.2.ebuild @@ -0,0 +1,40 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=3 + +PYTHON_DEPEND="2" +SUPPORT_PYTHON_ABIS="1" +RESTRICT_PYTHON_ABIS="3.*" + +inherit distutils + +DESCRIPTIOn="Keystone is a cloud identity service written in Python, which +provides authentication, authorization, and an OpenStack service catalog. It +implements OpenStac's Identity API." +HOMEPAGE="https://launchpad.net/keystone" +SRC_URI="http://launchpad.net/${PN}/essex/${PV}/+download/${P}.tar.gz" + +LICENSE="Apache-2.0" +SLOT="0" +KEYWORDS="~amd64" +IUSE="" + +DEPEND="dev-python/setuptools + dev-python/pep8 + dev-python/lxml + dev-python/python-daemon" +RDEPEND="${DEPEND} + dev-python/python-novaclient + dev-python/python-ldap + dev-python/passlib" + +src_install() { + distutils_src_install + newconfd "${FILESDIR}/keystone.confd" keystone + newinitd "${FILESDIR}/keystone.initd" keystone + + diropts -m 0750 + dodir /var/run/keystone /var/log/keystone +} diff --git a/sys-auth/keystone/keystone-9999.ebuild b/sys-auth/keystone/keystone-9999.ebuild new file mode 100644 index 0000000..a09d3d9 --- /dev/null +++ b/sys-auth/keystone/keystone-9999.ebuild @@ -0,0 +1,32 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=3 + +PYTHON_DEPEND="2" +SUPPORT_PYTHON_ABIS="1" +RESTRICT_PYTHON_ABIS="3.*" + +inherit git-2 distutils + +DESCRIPTIOn="Keystone is a cloud identity service written in Python, which +provides authentication, authorization, and an OpenStack service catalog. It +implements OpenStac's Identity API." +HOMEPAGE="https://launchpad.net/keystone" +EGIT_REPO_URI="https://github.com/openstack/keystone.git" + +LICENSE="Apache-2.0" +SLOT="0" +KEYWORDS="~amd64" +IUSE="" + +DEPEND="dev-python/setuptools + dev-python/pep8 + dev-python/lxml + dev-python/python-daemon + !dev-python/keystoneclient" +RDEPEND="${DEPEND} + dev-python/python-novaclient + dev-python/python-ldap + dev-python/passlib" diff --git a/sys-auth/swift-keystone2/Manifest b/sys-auth/swift-keystone2/Manifest new file mode 100644 index 0000000..7e3053c --- /dev/null +++ b/sys-auth/swift-keystone2/Manifest @@ -0,0 +1 @@ +EBUILD swift-keystone2-9999.ebuild 616 RMD160 cce917936402a8700e29a39a18f29c555c07bfd5 SHA1 66fbffdac52cb2996dda774b8184f7646bae94c5 SHA256 4cbaf92edca02ba91aeb6ad24da9a89ae1c8c7326a0c785b9bd4c9dc42bf0280 diff --git a/sys-auth/swift-keystone2/swift-keystone2-9999.ebuild b/sys-auth/swift-keystone2/swift-keystone2-9999.ebuild new file mode 100644 index 0000000..97c7908 --- /dev/null +++ b/sys-auth/swift-keystone2/swift-keystone2-9999.ebuild @@ -0,0 +1,26 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=3 + +PYTHON_DEPEND="2" +SUPPORT_PYTHON_ABIS="1" +RESTRICT_PYTHON_ABIS="3.*" + +inherit git-2 distutils + +DESCRIPTION="Keystone to Swift authentication and authorization system." +HOMEPAGE="https://launchpad.net/swift" +EGIT_REPO_URI="https://github.com/cloudbuilders/swift-keystone2.git" + +LICENSE="Apache-2.0" +SLOT="0" +KEYWORDS="~amd64" +IUSE="" + +DEPEND="sys-cluster/swift" +RDEPEND="${DEPEND}" + +# Can only use this when python.eclass is using EAPI4 +#REQUIRED_USE="|| ( storage-server proxy-server )" diff --git a/sys-cluster/nova/Manifest b/sys-cluster/nova/Manifest new file mode 100644 index 0000000..dbaaf4c --- /dev/null +++ b/sys-cluster/nova/Manifest @@ -0,0 +1,16 @@ +AUX nova.confd 108 RMD160 e6ca2fa9454983ae2760a8474271d5829f140957 SHA1 157215430039e3c2da2f04c1fb8818c1ec690cb7 SHA256 b23978f2d41ac014e7ec7315608e3b3bdc2f4ea834c42a526784eb2fa7f97014 +AUX nova.initd 1152 RMD160 5764d66dfc94ee435276d63346ab0165e2a70a91 SHA1 066ae8198d52c7283cd2259d78401fdd464b5158 SHA256 0a6c7cd12b412a52048c99bbb89e23c10d27358b1269c4ac121078107f8e253c +DIST nova-2011.3.tar.gz 3865204 RMD160 cbc336aa8da0a9ec1c635922139e400ef17d6488 SHA1 e6851c0adf97c3772e576c534c6c3ab7177a121f SHA256 3eeb9a1ee9bdcd52ca0c937bd4f83dd8b52e8f71b82753ba3f2f98f7859ef321 +DIST nova-2012.1.2.tar.gz 5754615 RMD160 839bc0b7f2158e67d91180cedc3289c316de03c8 SHA1 509ba09c4ecdce460da9e055de4d121f44a070df SHA256 b8383e4bc40facf0c50fe181702bcfb9cff053ad79979ca07134882e5b85eb5b +DIST nova-2012.1.tar.gz 4359338 RMD160 ee86d911a1027d7d4df48461fd610ff5067d3931 SHA1 ff3c35561be362382218edfe4411b2b8279fb24e SHA256 2784292f8e7255a5246835382f745651a944407f15c2b77911072207dbadd24e +DIST nova-2012.1~rc1.tar.gz 4247946 RMD160 a3e0b1b49bf5da6ca13aa4c6b01174ef8b210ca8 SHA1 9bc6f8efe7513ae7b645200d351a07119afffbd6 SHA256 10f1cc26909343fa425d89221c3b13aa45157921f6611d2fb52db9a7ce33af6b +DIST nova-2012.1~rc3.tar.gz 4300506 RMD160 480ff0ff37b22f82c363aed8b7e7a168279b72e3 SHA1 fc2c61b4a1df2b7f3cec88cee7f7677276d69a1c SHA256 7f64933de717872854563926bfcda85be199cb7c3f015fbeb1edfce40bde1ad8 +DIST nova-2012.1~rc4.tar.gz 4359338 RMD160 ee86d911a1027d7d4df48461fd610ff5067d3931 SHA1 ff3c35561be362382218edfe4411b2b8279fb24e SHA256 2784292f8e7255a5246835382f745651a944407f15c2b77911072207dbadd24e +EBUILD nova-2011.3.ebuild 1080 RMD160 1fb972e75b954e458df3f46d686f966e23f38b2d SHA1 f1898a8aa385cc897d6eacb957a20f473a45b561 SHA256 d4c3664035b1640f8c6a645bd925297de2c89c658bcb32370288dfc099595329 +EBUILD nova-2012.1.2.ebuild 1708 RMD160 d2981d9659cc5245e02bfa9a4099e76b6ef3fc8d SHA1 fdcc99a358e6741f0078626612b046aa483e64a3 SHA256 33716b05608f2d4375fe73b17d5bf17f23210e222d0022a5cd25b65cae06ee88 +EBUILD nova-2012.1.ebuild 1708 RMD160 d2981d9659cc5245e02bfa9a4099e76b6ef3fc8d SHA1 fdcc99a358e6741f0078626612b046aa483e64a3 SHA256 33716b05608f2d4375fe73b17d5bf17f23210e222d0022a5cd25b65cae06ee88 +EBUILD nova-2012.1_rc1-r1.ebuild 1746 RMD160 fb200cf353591461978614bc8a047824b25a4ac5 SHA1 9297fd864bb252bf424fb45d577372ee8a4fe19a SHA256 31ec14e86c02e024bd4967e6d6b1f1316da4322219a24060564131eb80df8f67 +EBUILD nova-2012.1_rc1.ebuild 1741 RMD160 f26a291775a69a13eee31edc4a1ba93b71c899c6 SHA1 5f20ca04b5fd3986e5b0189d13887a86b262d782 SHA256 4d569d1509da8a4cec96ca9f51681e7f36e1ee996199faa269a5fe1760d3e311 +EBUILD nova-2012.1_rc3.ebuild 1746 RMD160 e86d10e3e2130b70460584af5686eb53b71f89e4 SHA1 a2a6aa4e0bee014c487974f2b9b7f357f1908c3c SHA256 a4ae621c430894b784c80d84ee4f064cdf1d00bdc79738f2295543aadb2d57b3 +EBUILD nova-2012.1_rc4.ebuild 1746 RMD160 ad3c29503dfa7d9ff5e9a4c6767c53ce8bc2b318 SHA1 a766fe879affe3e47159dde1d7392ac6bca4711e SHA256 63ca458ae408bac95119258255eef6d90db92264bf75c2a4f098b1066c287d7e +EBUILD nova-9999.ebuild 1508 RMD160 a62b346967bfd093eff6d5798fa7f763f41443f2 SHA1 0dca417970547da571253d6e5a968d9abe0fe388 SHA256 70bd4ba85b57f74126754a9d1521760c0398dafff00905a054fda90f2c8552d2 diff --git a/sys-cluster/nova/files/nova.confd b/sys-cluster/nova/files/nova.confd new file mode 100644 index 0000000..ed3bc5c --- /dev/null +++ b/sys-cluster/nova/files/nova.confd @@ -0,0 +1,4 @@ +FLAG_FILE=/etc/nova/nova.conf +PID_PATH=/var/run/nova +LOG_PATH=/var/log/nova +NOVA_TMP_PATH=/var/lib/nova/tmp diff --git a/sys-cluster/nova/files/nova.initd b/sys-cluster/nova/files/nova.initd new file mode 100644 index 0000000..b115c48 --- /dev/null +++ b/sys-cluster/nova/files/nova.initd @@ -0,0 +1,54 @@ +#!/sbin/runscript +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +depend() { + need net +} + +BASENAME=$(echo $SVCNAME | cut -d '-' -f 1) + +checkconfig() { + if [ ! -r /etc/conf.d/$BASENAME ]; then + eerror "No nova flagfile found: /etc/conf.d/$BASENAME)" + return 1 + fi + if [ ${SVCNAME} == "nova-api" ]; then + if [ ! -r /etc/nova/api-paste.ini ]; then + eerror "No api-paste file found: /etc/nova/api-paste.ini)" + return 1 + fi + fi + return 0 +} + + +start() { + checkconfig || return $? + . /etc/conf.d/$BASENAME + + ebegin "Starting ${SVCNAME}" + + export TMPDIR=${NOVA_TMP_PATH} + start-stop-daemon --start --quiet --make-pidfile --pidfile "${PID_PATH}/${SVCNAME}.pid" \ + --exec /usr/bin/${SVCNAME} --background -- --flagfile=${FLAG_FILE} \ + --logfile=${LOG_PATH}/${SVCNAME}.log + + eend $? "Failed to start ${SVCNAME}" +} + +stop() { + checkconfig || return $? + . /etc/conf.d/$BASENAME + + ebegin "Stopping ${SVCNAME}" + + start-stop-daemon --stop --pidfile "${PID_PATH}/${SVCNAME}.pid" \ + --exec /usr/bin/${SVCNAME} + eend $? "Failed to stop ${SVCNAME}" +} + +#restart() { +# +#} diff --git a/sys-cluster/nova/nova-2012.1.2.ebuild b/sys-cluster/nova/nova-2012.1.2.ebuild new file mode 100644 index 0000000..ef846cb --- /dev/null +++ b/sys-cluster/nova/nova-2012.1.2.ebuild @@ -0,0 +1,64 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=3 + +PYTHON_DEPEND="2" +SUPPORT_PYTHON_ABIS="1" +RESTRICT_PYTHON_ABIS="3.*" + +inherit distutils + +DESCRIPTION="Nova is a cloud computing fabric controller (the main part of an +IaaS system). It is written in Python." +HOMEPAGE="https://launchpad.net/nova" +SRC_URI="http://launchpad.net/${PN}/essex/${PV}/+download/${P}.tar.gz" + +LICENSE="Apache-2.0" +SLOT="0" +KEYWORDS="~amd64" +IUSE="controller" + +DEPEND="dev-python/setuptools + dev-python/lockfile + dev-python/netaddr + dev-python/eventlet + dev-python/python-gflags + dev-python/nosexcover + dev-python/sqlalchemy-migrate + dev-python/pylint + dev-python/mox + dev-python/pep8 + dev-python/cheetah + dev-python/carrot + dev-python/lxml + dev-python/python-daemon + dev-python/wsgiref + dev-python/sphinx + dev-python/suds + dev-python/paramiko + dev-python/feedparser" +RDEPEND="${DEPEND} + dev-python/m2crypto + app-admin/glance + dev-python/python-novaclient + dev-python/nova-adminclient + dev-python/boto + dev-python/prettytable + dev-python/mysql-python + dev-python/iso8601 + controller? ( net-misc/rabbitmq-server )" + +src_install() { + distutils_src_install + newconfd "${FILESDIR}/nova.confd" nova + newinitd "${FILESDIR}/nova.initd" nova + + for function in api cert compute consoleauth network objectstore scheduler volume xvpvncproxy; do + dosym /etc/init.d/nova /etc/init.d/nova-${function} + done + + diropts -m 0750 + dodir /var/run/nova /var/log/nova /var/lock/nova +} diff --git a/sys-cluster/nova/nova-9999.ebuild b/sys-cluster/nova/nova-9999.ebuild new file mode 100644 index 0000000..ca8a101 --- /dev/null +++ b/sys-cluster/nova/nova-9999.ebuild @@ -0,0 +1,63 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=3 + +PYTHON_DEPEND="2" +SUPPORT_PYTHON_ABIS="1" +RESTRICT_PYTHON_ABIS="3.*" + +inherit git-2 distutils + +DESCRIPTION="Nova is a cloud computing fabric controller (the main part of an +IaaS system). It is written in Python." +HOMEPAGE="https://launchpad.net/nova" +EGIT_REPO_URI="https://github.com/openstack/nova.git" + +LICENSE="Apache-2.0" +SLOT="0" +KEYWORDS="~amd64" +IUSE="controller" + +DEPEND="dev-python/setuptools + dev-python/lockfile + dev-python/netaddr + dev-python/eventlet + dev-python/python-gflags + dev-python/nosexcover + dev-python/sqlalchemy-migrate + dev-python/pylint + dev-python/mox + dev-python/pep8 + dev-python/cheetah + dev-python/carrot + dev-python/lxml + dev-python/python-daemon + dev-python/wsgiref + dev-python/sphinx + dev-python/suds + dev-python/paramiko + dev-python/feedparser" +RDEPEND="${DEPEND} + dev-python/m2crypto + app-admin/glance + dev-python/python-novaclient + dev-python/nova-adminclient + dev-python/boto + dev-python/prettytable + dev-python/mysql-python + controller? ( net-misc/rabbitmq-server )" + +src_install() { + distutils_src_install + newconfd "${FILESDIR}/nova.confd" nova + newinitd "${FILESDIR}/nova.initd" nova + + for function in api compute network objectstore scheduler volume xvpvncproxy; do + dosym /etc/init.d/nova /etc/init.d/nova-${function} + done + + diropts -m 0750 + dodir /var/run/nova /var/log/nova /var/lock/nova +} diff --git a/sys-cluster/swift/Manifest b/sys-cluster/swift/Manifest new file mode 100644 index 0000000..ceb8496 --- /dev/null +++ b/sys-cluster/swift/Manifest @@ -0,0 +1,15 @@ +AUX swift-1.5.0-client-authv2.patch 866 RMD160 60577406c1dc2f44cfddd0a1d7f86039c732a746 SHA1 081e4cf2243a68110c9bfbfec3653caaedcca78b SHA256 e7d422ccc5cbfcd19acf65727b62a8e5a4295ca081abfd0bae1893ff8bee4742 +AUX swift-proxy-server.initd 1491 RMD160 3e7869beb28f32106385cfff211e494a6dffd0d3 SHA1 54059efecf34bda8acb9ceb01f0c3ee20b109fa3 SHA256 6c6de4c0f320ad23f337b2df57db3f457f4ad90731f4f458ad37861baa3a34fd +AUX swift-storage-server.confd 182 RMD160 6b0a6c3c539c06af077932cfc5ca4d33640413ec SHA1 90cf5c560e7e1a3b6c5c3ebd0bccbef74de939f5 SHA256 4a6d5cecadcf3e915ff88266b99b3d9c008daf88d0a940753be590eb4271c4d1 +AUX swift-storage-server.initd 1497 RMD160 c0ae10d9946413ab6ec9eed75339c60032d22092 SHA1 64ea41e023d188b5fa4c9739689953c9d4ace191 SHA256 1026950280b5e9894a8b81f81a8b3ecc09aeaec79a61fb3a228cc10a58eeba41 +DIST swift-1.4.3.tar.gz 355583 RMD160 5eeedc56647596baa07866c00e2c63f9f5b656d7 SHA1 1a1e7b49568251fbb4f45bee9f58b60c52e03caf SHA256 1638e8c0806b54aabfe58a3a618c5af33a9830ada7c2e820e9abdbbcda0e4da2 +DIST swift-1.4.5.tar.gz 391111 RMD160 09f74ff6afbb88bd1aed2888c5e40cf0b0eb6291 SHA1 cb74a1dffd49d3fb49861cce6fdab531f9e2ed19 SHA256 d6b1501f7ab6c53a361823211d576f1a7d4c81f14069919e3a33f581707c6451 +DIST swift-1.4.7.tar.gz 416927 RMD160 0607287549fd0a05e1b6eb5cd78f1c40daa74239 SHA1 00ef158427c35c7e2541e60b74fe4360c8c18e3f SHA256 7c72be0e0ae3e6db44764120b9e03eb0b5769a2ecd5c8bd79b216ca591c80360 +DIST swift-1.4.8.tar.gz 421496 RMD160 d4eab57d851c18ecfa8e016b64ceb82ff7a03823 SHA1 44d8d9cd96b94d80097eab34da6d1ed7268bb693 SHA256 9663dcf984725d31684291339c42892ab727aff83bfd8eb05169bb881806e7e4 +DIST swift-1.5.0.tar.gz 458825 RMD160 47c2daa47498732efc6f771c8587b21b674f11f1 SHA1 c77a12368b6be34752228db0f658aba02de8a1d5 SHA256 7edcc240609df677c9763867a2ec40711114190688e338b1a2b2dab4caca3844 +EBUILD swift-1.4.3.ebuild 650 RMD160 ddc210e288decd3180a64b2b0f313cc95b1c5405 SHA1 393eb54c73a872dbba87578327ee192fc5c176c3 SHA256 b6968a3c33be6bea6f9df464f992d982face1468fd73f4ea2b79baeb5ecb2443 +EBUILD swift-1.4.5.ebuild 1129 RMD160 b9e7240a3b85fe0dc2879beda1c30f75cd48da77 SHA1 87893f36cb7142301352f88429ae480725f2fba6 SHA256 391aa1bcf7b3aaeb54a0f164eaa8e01ae6a0d310ad7d682a468560de0a4e3bfa +EBUILD swift-1.4.7.ebuild 1129 RMD160 b9e7240a3b85fe0dc2879beda1c30f75cd48da77 SHA1 87893f36cb7142301352f88429ae480725f2fba6 SHA256 391aa1bcf7b3aaeb54a0f164eaa8e01ae6a0d310ad7d682a468560de0a4e3bfa +EBUILD swift-1.4.8.ebuild 1129 RMD160 b9e7240a3b85fe0dc2879beda1c30f75cd48da77 SHA1 87893f36cb7142301352f88429ae480725f2fba6 SHA256 391aa1bcf7b3aaeb54a0f164eaa8e01ae6a0d310ad7d682a468560de0a4e3bfa +EBUILD swift-1.5.0.ebuild 1203 RMD160 74fa282bfc101f21bc6400f8b1e7c2898a77b516 SHA1 891e51570eec0df48d58533ff114c156c350e2c2 SHA256 7ac2a656d9bc9456d424bba2169ebdd723792938982e10c298a3de35e96bf9b9 +EBUILD swift-9999.ebuild 1149 RMD160 cd93c0c9c1c090fb9af8eecc881a7d676e46fd44 SHA1 fe21cf775640efaa6366649615ac874ab7697816 SHA256 6c64e83916d13a710fac48b74ae69af165d510477a2a80034c30520b7aff4b75 diff --git a/sys-cluster/swift/files/swift-1.5.0-client-authv2.patch b/sys-cluster/swift/files/swift-1.5.0-client-authv2.patch new file mode 100644 index 0000000..5fd7072 --- /dev/null +++ b/sys-cluster/swift/files/swift-1.5.0-client-authv2.patch @@ -0,0 +1,22 @@ +--- swift-1.5.0.org/swift/common/client.py 2012-06-19 12:40:25.000000000 +0200 ++++ swift-1.5.0/swift/common/client.py 2012-06-19 12:39:51.000000000 +0200 +@@ -187,6 +187,10 @@ + + + def _get_auth_v2_0(url, user, tenant_name, key, snet): ++ if not tenant_name and ':' in user: ++ tenant_name, user = user.split(':', 1) ++ if not tenant_name: ++ raise ClientException('No tenant specified') + body = {'auth': {'passwordCredentials': + {'password': key, 'username': user}, + 'tenantName': tenant_name}} +@@ -238,8 +242,6 @@ + if auth_version in ["1.0", "1"]: + return _get_auth_v1_0(url, user, key, snet) + elif auth_version in ["2.0", "2"]: +- if not tenant_name: +- raise ClientException('No tenant specified') + return _get_auth_v2_0(url, user, tenant_name, key, snet) + + diff --git a/sys-cluster/swift/files/swift-proxy-server.initd b/sys-cluster/swift/files/swift-proxy-server.initd new file mode 100755 index 0000000..705d1e5 --- /dev/null +++ b/sys-cluster/swift/files/swift-proxy-server.initd @@ -0,0 +1,64 @@ +#!/sbin/runscript +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ +# +# Author: Cor Cornelisse + +depend() { + need net +} + +opts="reload" + +BASENAME=$(echo $SVCNAME | cut -d '-' -f 1) +SERVERNAME=$(echo $SVCNAME | cut -c 7-) + +checkconfig() { + if [ ! -r /etc/${BASENAME}/${SERVICENAME} ]; then + eerror "No config file found: /etc/${BASENAME}/${SERVICENAME}" + return 1 + fi + return 0 +} + + +start() { + checkconfig || return $? + + ebegin "Starting ${SVCNAME}" + start-stop-daemon --start --pidfile "/var/run/${BASENAME}/${SERVERNAME}.pid" \ + --exec /usr/bin/${BASENAME}-init -- ${SERVERNAME} start + eend $? "Failed to start ${SVCNAME}" +} + +stop() { + checkconfig || return $? + + ebegin "Stopping ${SVCNAME}" + start-stop-daemon --stop --pidfile "/var/run/${BASENAME}/${SERVERNAME}.pid" \ + --exec /usr/bin/${BASENAME}-init -- ${SERVERNAME} stop + eend $? "Failed to stop ${SVCNAME}" +} + +reload() { + checkconfig || return $? + + ebegin "Reloading ${SVCNAME}" + start-stop-daemon --exec /usr/bin/${BASENAME}-init -- ${SERVERNAME} reload + eend $? "Failed to reload ${SVCNAME}" +} + +restart() { + checkconfig || return $? + + ebegin "Restarting ${SVCNAME}" + start-stop-daemon --exec /usr/bin/${BASENAME}-init -- ${SERVERNAME} restart + eend $? "Failed to restart ${SVCNAME}" +} + +status() { + start-stop-daemon --exec /usr/bin/${BASENAME}-init -- ${SERVERNAME} status + eend $? "Failed to get status for ${SVCNAME}" +} + diff --git a/sys-cluster/swift/files/swift-storage-server.confd b/sys-cluster/swift/files/swift-storage-server.confd new file mode 100644 index 0000000..8735b99 --- /dev/null +++ b/sys-cluster/swift/files/swift-storage-server.confd @@ -0,0 +1,5 @@ +SERVERS="account container object" + +ACCOUNTSERVICE="server replicator auditor" +CONTAINERSERVICE="server replicator updater auditor" +OBJECTSERVICE="server replicator updater auditor" diff --git a/sys-cluster/swift/files/swift-storage-server.initd b/sys-cluster/swift/files/swift-storage-server.initd new file mode 100755 index 0000000..58d1251 --- /dev/null +++ b/sys-cluster/swift/files/swift-storage-server.initd @@ -0,0 +1,60 @@ +#!/sbin/runscript +# Copyright 1999-2012 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ +# +# Author: Cor Cornelisse + +depend() { + need net +} + +BASENAME=$(echo $SVCNAME | cut -d '-' -f 1) + +checkconfig() { + if [ ! -r /etc/${BASENAME}/${BASENAME}.conf ]; then + eerror "Missing required config file: /etc/${BASENAME}/${BASENAME}.conf" + return 1 + fi + for server in ${SERVERS}; do + if [ ! -r /etc/${BASENAME}/${server}-server.conf ]; then + eerror "Missing required config file: /etc/${BASENAME}/${SERVER}-server.conf" + return 1 + fi + done + return 0 +} + +start() { + checkconfig || return $? + + einfo "Starting all ${BASENAME} services:" + + for server in ${SERVERS}; do + for service in $(eval "echo \$${server^^}SERVICE"); do + ebegin "Starting $server-$service" + start-stop-daemon --start --pidfile \ + "/var/run/${BASENAME}/$server-$service.pid" \ + --exec /usr/bin/${BASENAME}-init \ + -- $server-$service start + eend $? "Failed to start $server-$service" + done + done +} + +stop() { + checkconfig || return $? + + einfo "Stopping all ${BASENAME} services:" + + for server in ${SERVERS}; do + for service in $(eval "echo \$${server^^}SERVICE"); do + ebegin "Stopping $server-$service" + start-stop-daemon --stop --pidfile \ + "/var/run/${BASENAME}/$server-$service.pid" \ + --exec /usr/bin/${BASENAME}-init \ + -- $server-$service stop + eend $? "Failed to stop $server-$service" + done + done +} diff --git a/sys-cluster/swift/swift-1.5.0.ebuild b/sys-cluster/swift/swift-1.5.0.ebuild new file mode 100644 index 0000000..374639b --- /dev/null +++ b/sys-cluster/swift/swift-1.5.0.ebuild @@ -0,0 +1,52 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=3 + +PYTHON_DEPEND="2" +SUPPORT_PYTHON_ABIS="1" +RESTRICT_PYTHON_ABIS="3.*" + +inherit distutils eutils + +DESCRIPTION="Swift is a highly available, distributed, eventually consistent +object/blob store" +HOMEPAGE="https://launchpad.net/swift" +SRC_URI="http://launchpad.net/${PN}/folsom/${PV}/+download/${P}.tar.gz" + +LICENSE="Apache-2.0" +SLOT="0" +KEYWORDS="~amd64" +IUSE="storage-server proxy-server" + +DEPEND="dev-python/setuptools" +RDEPEND="${DEPEND} + dev-python/netifaces + dev-python/eventlet + dev-python/webob + dev-python/pastedeploy + dev-python/pyxattr" + +# Can only use this when python.eclass is using EAPI4 +#REQUIRED_USE="|| ( storage-server proxy-server )" + +src_prepare() { + epatch "${FILESDIR}/${P}-client-authv2.patch" +} + +src_install() +{ + distutils_src_install + + dodir "/var/run/swift" + + if use proxy-server; then + newinitd "${FILESDIR}/swift-proxy-server.initd" swift-proxy-server + fi + + if use storage-server; then + newinitd "${FILESDIR}/swift-storage-server.initd" swift-storage-server + newconfd "${FILESDIR}/swift-storage-server.confd" swift-storage-server + fi +} diff --git a/sys-cluster/swift/swift-9999.ebuild b/sys-cluster/swift/swift-9999.ebuild new file mode 100644 index 0000000..9b78a76 --- /dev/null +++ b/sys-cluster/swift/swift-9999.ebuild @@ -0,0 +1,48 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=3 + +PYTHON_DEPEND="2" +SUPPORT_PYTHON_ABIS="1" +RESTRICT_PYTHON_ABIS="3.*" + +inherit git-2 distutils + +DESCRIPTION="Swift is a highly available, distributed, eventually consistent +object/blob store" +HOMEPAGE="https://launchpad.net/swift" +EGIT_REPO_URI="https://github.com/openstack/swift.git" + +LICENSE="Apache-2.0" +SLOT="0" +KEYWORDS="~amd64" +IUSE="storage-server proxy-server" + +DEPEND="dev-python/setuptools" +RDEPEND="${DEPEND} + dev-python/netifaces + dev-python/eventlet + dev-python/webob + dev-python/pastedeploy + dev-python/pyxattr" + +# Can only use this when python.eclass is using EAPI4 +#REQUIRED_USE="|| ( storage-server proxy-server )" + +src_install() +{ + distutils_src_install + + dodir "/var/run/swift" + + if use proxy-server; then + newinitd "${FILESDIR}/swift-proxy-server.initd" swift-proxy-server + fi + + if use storage-server; then + newinitd "${FILESDIR}/swift-storage-server.initd" swift-storage-server + newconfd "${FILESDIR}/swift-storage-server.confd" swift-storage-server + fi +} diff --git a/www-apps/horizon/Manifest b/www-apps/horizon/Manifest new file mode 100644 index 0000000..45b153f --- /dev/null +++ b/www-apps/horizon/Manifest @@ -0,0 +1,12 @@ +AUX horizon_vhost.conf 529 RMD160 b2e7ecd9c9ec8dcbe90aa500edf0f4c5381a81fd SHA1 d468e6c5ad59d473a1c60c0ccf945f47e5a0caa3 SHA256 9e74616a632e153a88c6d4c2d58c4c4e86e1a3526cccd41643dd27fe2e175d8d +AUX revert-bugfix-974916.patch 6011 RMD160 60b833032eea86723e8733517fe3eb139247257e SHA1 3b2609ba55b6e54c8a3297a4d04cadff6b044d13 SHA256 c232929fc3862334e3cbf199de4ac841bd90feeccbc8aafdd470b42c9bdc483f +DIST horizon-2012.1.1.tar.gz 609478 RMD160 17385003e281bf3e098601bf546522dce95a8bc0 SHA1 caf88a1b915d298799fa71b41ecd2583d2d299ea SHA256 9313c01f3f0ef87941f0f49ebea9ccfe68385bf8bed625eb3fe36284d41fd74a +DIST horizon-2012.1.tar.gz 606289 RMD160 908b4688bb8df6a652dbc1a05cd427e9781f2ce6 SHA1 6ce163482981e8151a4dbfb8584df662387a673f SHA256 68752c6a3d793c0fdc232dfe2a11c1702db9d8c1097f4d9211a3adafe82c445b +DIST horizon-2012.1~rc1.tar.gz 585720 RMD160 5abb143d68c9f9bea5fdef9b1efa31f7beea5983 SHA1 40c6801961ba5a8e68b35b24c5869d35a9ac7070 SHA256 4b7b141997d0e0ed544a1c1b5c72d49b6089240d6e865d44a2904b9cc91c917d +DIST horizon-2012.1~rc2.tar.gz 606289 RMD160 908b4688bb8df6a652dbc1a05cd427e9781f2ce6 SHA1 6ce163482981e8151a4dbfb8584df662387a673f SHA256 68752c6a3d793c0fdc232dfe2a11c1702db9d8c1097f4d9211a3adafe82c445b +EBUILD horizon-2012.1.1-r1.ebuild 2044 RMD160 f67a4f13211d44adc60eea644c91b930e8d730c2 SHA1 14a949af3e12d212d3e5a5eaeb4cf87429127d43 SHA256 a6bc153df585cc517630c4db642a63e1ee5b6276b07e0013d8cbea6f5efdfa85 +EBUILD horizon-2012.1.1.ebuild 1976 RMD160 5e3118b0c5b0d66674e38b3a3383a8c084a7301b SHA1 8b78c7d3ce85790d54559593cbe113f8ef17da2b SHA256 6a2542d79dbfb0062fb1140dc7632c892978af89fef3a85c771c64ebc4422a5a +EBUILD horizon-2012.1.ebuild 1975 RMD160 2a070d9b414e77406e19cad2d5f9a964e54d15a5 SHA1 7c6ef6a435717db510a61fbaeff20862c4a771e8 SHA256 4fb11b5e083f25e25284be6ddcbe3d3be6349547d2bd3ef96e4c5ff68c2eaa3a +EBUILD horizon-2012.1_rc1.ebuild 2007 RMD160 fd992f0be7ba9bc2c03b938775e739a84f60726b SHA1 8b7a713ff58f8c6ce6fd2eff77b06826dfb08afd SHA256 57d3caa1cddb56bb8750fb05ffe0a0ae5ba62d402df83c78ab232f592bb7b431 +EBUILD horizon-2012.1_rc2.ebuild 2010 RMD160 7210975e3bb1ceeedb33a4905762554f0f84b727 SHA1 bbf97aef72f14ea13cce3c20350e0c192bb01b86 SHA256 303deb4e7645a55c95aa7da22c0e746a5176b67c425df2a26e5426efe20560ac +EBUILD horizon-9999.ebuild 1513 RMD160 88417143b72bd0bd7806b648f01ecb992f193b73 SHA1 7adf76bf15b3873ad87f33d62a5620cd74503559 SHA256 ea79e41a993731592e43dc4e3690ec4fbc3d1638e651a855babffe9f603c03d3 diff --git a/www-apps/horizon/files/horizon_vhost.conf b/www-apps/horizon/files/horizon_vhost.conf new file mode 100644 index 0000000..45df6ec --- /dev/null +++ b/www-apps/horizon/files/horizon_vhost.conf @@ -0,0 +1,14 @@ +Listen 8000 +WSGIPythonPath /usr/lib64/python2.7/site-packages/horizon +WSGIPythonPath /usr/lib64/python2.7/site-packages + + ServerName localhost + WSGIScriptAlias / /usr/lib64/python2.7/site-packages/openstack_dashboard/wsgi/django.wsgi + Alias /media/admin/ /usr/lib64/python2.7/site-packages/django/contrib/admin/media/ + + AllowOverride None + Options None + Order allow,deny + Allow from all + + diff --git a/www-apps/horizon/files/revert-bugfix-974916.patch b/www-apps/horizon/files/revert-bugfix-974916.patch new file mode 100644 index 0000000..70a6ac5 --- /dev/null +++ b/www-apps/horizon/files/revert-bugfix-974916.patch @@ -0,0 +1,125 @@ +diff -urN horizon-2012.1.1.orig/horizon/dashboards/nova/instances_and_volumes/tests.py horizon-2012.1.1/horizon/dashboards/nova/instances_and_volumes/tests.py +--- horizon-2012.1.1.orig/horizon/dashboards/nova/instances_and_volumes/tests.py 2012-09-17 14:42:01.691620470 +0200 ++++ horizon-2012.1.1/horizon/dashboards/nova/instances_and_volumes/tests.py 2012-09-17 14:43:11.002618777 +0200 +@@ -18,7 +18,6 @@ + # License for the specific language governing permissions and limitations + # under the License. + +-from copy import deepcopy + from django import http + from django.core.urlresolvers import reverse + from mox import IsA +@@ -43,50 +42,7 @@ + self.assertTemplateUsed(res, + 'nova/instances_and_volumes/index.html') + instances = res.context['instances_table'].data +- volumes = res.context['volumes_table'].data +- + self.assertItemsEqual(instances, self.servers.list()) +- self.assertItemsEqual(volumes, self.volumes.list()) +- +- def test_attached_volume(self): +- volumes = deepcopy(self.volumes.list()) +- attached_volume = deepcopy(self.volumes.list()[0]) +- attached_volume.id = "2" +- attached_volume.display_name = "Volume2 name" +- attached_volume.size = "80" +- attached_volume.status = "in-use" +- attached_volume.attachments = [{"server_id": "1", +- "device": "/dev/hdn"}] +- volumes.append(attached_volume) +- +- self.mox.StubOutWithMock(api, 'server_list') +- self.mox.StubOutWithMock(api, 'volume_list') +- api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) +- api.volume_list(IsA(http.HttpRequest)).AndReturn(volumes) +- +- self.mox.ReplayAll() +- +- res = self.client.get( +- reverse('horizon:nova:instances_and_volumes:index')) +- +- self.assertTemplateUsed(res, +- 'nova/instances_and_volumes/index.html') +- instances = res.context['instances_table'].data +- resp_volumes = res.context['volumes_table'].data +- +- self.assertItemsEqual(instances, self.servers.list()) +- self.assertItemsEqual(resp_volumes, volumes) +- +- self.assertContains(res, ">Volume name<", 1, 200) +- self.assertContains(res, ">40 GB<", 1, 200) +- self.assertContains(res, ">Available<", 1, 200) +- +- self.assertContains(res, ">Volume2 name<", 1, 200) +- self.assertContains(res, ">80 GB<", 1, 200) +- self.assertContains(res, ">In-Use<", 1, 200) +- self.assertContains(res, +- ">Instance server_1 (1) on /dev/hdn", +- 1, 200) + + def test_index_server_list_exception(self): + self.mox.StubOutWithMock(api, 'server_list') +@@ -94,7 +50,6 @@ + exception = novaclient_exceptions.ClientException('apiException') + api.server_list(IsA(http.HttpRequest)).AndRaise(exception) + api.volume_list(IsA(http.HttpRequest)).AndReturn(self.volumes.list()) +- api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) + + self.mox.ReplayAll() + +diff -urN horizon-2012.1.1.orig/horizon/dashboards/nova/instances_and_volumes/views.py horizon-2012.1.1/horizon/dashboards/nova/instances_and_volumes/views.py +--- horizon-2012.1.1.orig/horizon/dashboards/nova/instances_and_volumes/views.py 2012-09-17 14:42:01.690620470 +0200 ++++ horizon-2012.1.1/horizon/dashboards/nova/instances_and_volumes/views.py 2012-09-17 14:44:19.782617090 +0200 +@@ -46,7 +46,7 @@ + def get_instances_data(self): + # Gather our instances + try: +- instances = self._get_instances() ++ instances = api.server_list(self.request) + except: + instances = [] + exceptions.handle(self.request, _('Unable to retrieve instances.')) +@@ -67,18 +67,8 @@ + # Gather our volumes + try: + volumes = api.volume_list(self.request) +- instances = SortedDict([(inst.id, inst) for inst in +- self._get_instances()]) +- for volume in volumes: +- for att in volume.attachments: +- att['instance'] = instances[att['server_id']] + except novaclient_exceptions.ClientException, e: + volumes = [] + LOG.exception("ClientException in volume index") + messages.error(self.request, _('Unable to fetch volumes: %s') % e) + return volumes +- +- def _get_instances(self): +- if not hasattr(self, "_instances_list"): +- self._instances_list = api.server_list(self.request) +- return self._instances_list +diff -urN horizon-2012.1.1.orig/horizon/dashboards/nova/instances_and_volumes/volumes/tables.py horizon-2012.1.1/horizon/dashboards/nova/instances_and_volumes/volumes/tables.py +--- horizon-2012.1.1.orig/horizon/dashboards/nova/instances_and_volumes/volumes/tables.py 2012-09-17 14:42:01.691620470 +0200 ++++ horizon-2012.1.1/horizon/dashboards/nova/instances_and_volumes/volumes/tables.py 2012-09-17 14:45:45.039615013 +0200 +@@ -85,16 +85,16 @@ + + def get_attachment(volume): + attachments = [] +- link = 'Instance %(name)s (%(instance)s) ' \ +- 'on %(dev)s' ++ link = 'Instance %(instance)s ' \ ++ '(%(dev)s)' + # Filter out "empty" attachments which the client returns... + for attachment in [att for att in volume.attachments if att]: + url = reverse("%s:instances:detail" % URL_PREFIX, + args=(attachment["server_id"],)) + # TODO(jake): Make "instance" the instance name + vals = {"url": url, +- "name": attachment["instance"].name, +- "instance": attachment["server_id"], ++ ++ "instance": attachment["server_id"], + "dev": attachment["device"]} + attachments.append(link % vals) + return safestring.mark_safe(", ".join(attachments)) diff --git a/www-apps/horizon/horizon-2012.1.1-r1.ebuild b/www-apps/horizon/horizon-2012.1.1-r1.ebuild new file mode 100644 index 0000000..e4cecc1 --- /dev/null +++ b/www-apps/horizon/horizon-2012.1.1-r1.ebuild @@ -0,0 +1,74 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=3 + +PYTHON_DEPEND="2" + +inherit distutils eutils + +DESCRIPTION="The OpenStack Dashboard (Horizon) provides a baseline user +interface for managing OpenStack services. It is a reference implementation +built using the django-openstack project which contains all of the core +functionality needed to develop a site-specific implementation." +HOMEPAGE="http://wiki.openstack.org/OpenStackDashboard" +SRC_URI="http://launchpad.net/${PN}/essex/${PV}/+download/${P}.tar.gz" + +LICENSE="Apache-2.0" +SLOT="0" +KEYWORDS="~amd64" +IUSE="" + +DEPEND=">=dev-python/django-1.3.1 + dev-python/python-dateutil + dev-python/sphinx + dev-python/cherrypy + dev-python/coverage + dev-python/nose + dev-python/mox + dev-python/pep8 + dev-python/pylint + dev-python/pastedeploy + dev-python/eventlet + dev-python/kombu + dev-python/pycrypto + dev-python/routes + dev-python/sqlalchemy + dev-python/sqlalchemy-migrate + dev-python/webob + dev-python/pyxattr + dev-python/python-gflags + dev-python/python-keystoneclient + dev-python/python-novaclient + dev-python/python-cloudfiles + app-admin/glance + dev-python/setuptools + www-apps/noVNC" + +RDEPEND="${DEPEND}" + +src_prepare() { + epatch ${FILESDIR}"/revert-bugfix-974916.patch" +} + +src_install() { + distutils_src_install + dodoc ${FILESDIR}"/horizon_vhost.conf" + dodir /etc/horizon + insinto /etc/horizon + doins openstack_dashboard/local/local_settings.py.example + # Little dirty this way, but get's the job done bro + dosym /etc/horizon/local_settings.py /usr/lib64/python2.7/site-packages/openstack_dashboard/local/local_settings.py +} + +pkg_postinst() { + elog + elog "A vhost configuration example for apache2 with mod_wsgi can be found" + elog "in /usr/share/doc/${PF}/horizon_vhost.conf" + elog "Adapt it to suite your needs, and install it in /etc/apache/vhosts.d/" + elog "Replace localhost by the real servername" + elog + elog "The dashboard can be configured through /etc/horizon/settings.py" + elog +} diff --git a/www-apps/horizon/horizon-9999.ebuild b/www-apps/horizon/horizon-9999.ebuild new file mode 100644 index 0000000..71a967a --- /dev/null +++ b/www-apps/horizon/horizon-9999.ebuild @@ -0,0 +1,59 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=3 + +PYTHON_DEPEND="2" + +inherit git-2 distutils eutils + +DESCRIPTION="The OpenStack Dashboard (Horizon) provides a baseline user +interface for managing OpenStack services. It is a reference implementation +built using the django-openstack project which contains all of the core +functionality needed to develop a site-specific implementation." +HOMEPAGE="http://wiki.openstack.org/OpenStackDashboard" +EGIT_REPO_URI="https://github.com/openstack/horizon" + +LICENSE="Apache-2.0" +SLOT="0" +KEYWORDS="~amd64" +IUSE="" + +DEPEND="=dev-python/django-1.3.1 + dev-python/python-dateutil + dev-python/sphinx + dev-python/cherrypy + dev-python/coverage + dev-python/nose + dev-python/mox + dev-python/pep8 + dev-python/pylint + dev-python/pastedeploy + dev-python/eventlet + dev-python/kombu + dev-python/pycrypto + dev-python/routes + dev-python/sqlalchemy + dev-python/sqlalchemy-migrate + dev-python/webob + dev-python/pyxattr + dev-python/python-gflags + dev-python/python-novaclient + dev-python/python-cloudfiles + app-admin/glance + dev-python/setuptools" +RDEPEND="${DEPEND}" + +DISTUTILS_SETUP_FILES=("horizon/setup.py" "openstack-dashboard/setup.py") + +src_install() { + distutils_src_install + + #newconfd "${FILESDIR}/openstack-dashboard.confd" openstack-dashboard + #newinitd "${FILESDIR}/openstack-dashboard.initd" openstack-dashboard + + #diropts -m 0750 + #dodir /var/run/quantum /var/log/quantum +} + diff --git a/www-apps/noVNC/Manifest b/www-apps/noVNC/Manifest new file mode 100644 index 0000000..b9f5a70 --- /dev/null +++ b/www-apps/noVNC/Manifest @@ -0,0 +1,3 @@ +AUX noVNC.confd 104 RMD160 39e7784520afe42c61a1baa35b6b8f69ad7e3287 SHA1 1664a089d8e981910550c6cf5ce016d7ceacedb1 SHA256 f6b072f2292701ded2c9acdc6a2a55d1d2c9b43c6db41ed99a7993d823b51512 +AUX noVNC.initd 1083 RMD160 94044557dc720f266d22a3193b6edde51c72279d SHA1 a2aee95688afcebebf52f20980073a44b085b01a SHA256 897664e68e406ea8feaa6d6fc4b3cd6e0710a377b83c2876d18f6e8cba3777d0 +EBUILD noVNC-9999.ebuild 1288 RMD160 763d8863994e07c3a868b4f6c38bcb459eebed57 SHA1 7d84c0f5fc60cb158098310186ed47dd9bd63b35 SHA256 fd7c513e89d4dc8848d16c5048c6fe57cdca53cbfff983efe66587cb462220ee diff --git a/www-apps/noVNC/files/noVNC.confd b/www-apps/noVNC/files/noVNC.confd new file mode 100644 index 0000000..50ddb5c --- /dev/null +++ b/www-apps/noVNC/files/noVNC.confd @@ -0,0 +1,4 @@ +FLAG_FILE=/etc/nova/nova.conf +WEB_ROOT=/opt/noVNC +LOG_PATH=/var/log/noVNC +CERT_FILE=/opt/noVNC/self.pem diff --git a/www-apps/noVNC/files/noVNC.initd b/www-apps/noVNC/files/noVNC.initd new file mode 100755 index 0000000..f3b88a2 --- /dev/null +++ b/www-apps/noVNC/files/noVNC.initd @@ -0,0 +1,49 @@ +#!/sbin/runscript +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ +# +# Author: Cor Cornelisse + +depend() { + need net +} + +checkconfig() { + if [ ! -r /etc/conf.d/${SVCNAME} ]; then + eerror "No config file found: /etc/conf.d/${SVCNAME}" + return 1 + fi + return 0 +} + + +start() { + checkconfig || return $? + . /etc/conf.d/${SVCNAME} + + ebegin "Starting ${SVCNAME}" + + start-stop-daemon --start --quiet --make-pidfile --pidfile \ + "/var/run/${SVCNAME}.pid" --background \ + --stdout ${LOG_PATH}/${SVCNAME}.log \ + --stderr ${LOG_PATH}/${SVCNAME}.err --exec \ + /opt/noVNC/utils/nova-novncproxy -- \ + --flagfile=${FLAG_FILE} --cert=${CERT_FILE} \ + --web ${WEB_ROOT} + + + eend $? "Failed to start ${SVCNAME}" +} + +stop() { + checkconfig || return $? + . /etc/conf.d/${SVCNAME} + + ebegin "Stopping ${SVCNAME}" + + start-stop-daemon --stop --pidfile "/var/run/${SVCNAME}.pid" \ + --exec /opt/noVNC/utils/nova-novncproxy + eend $? "Failed to stop ${SVCNAME}" +} + diff --git a/www-apps/noVNC/noVNC-9999.ebuild b/www-apps/noVNC/noVNC-9999.ebuild new file mode 100644 index 0000000..7f26209 --- /dev/null +++ b/www-apps/noVNC/noVNC-9999.ebuild @@ -0,0 +1,63 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=3 + +inherit git-2 + +DESCRIPTION="noVNC is a VNC client implemented using HTML5 technologies, +specifically Canvas and WebSockets (supports 'wss://' encryption). noVNC is +licensed under the LGPLv3." +HOMEPAGE="http://kanaka.github.com/noVNC/" +EGIT_REPO_URI="https://github.com/cloudbuilders/noVNC" + +LICENSE="LGPL-3" +SLOT="0" +KEYWORDS="~amd64" +IUSE="" + +DEPEND="" +RDEPEND="${DEPEND} + dev-python/numpy + www-misc/websockify" + + +src_compile() { + cd ${S}/utils + emake +} + +src_install() { + dodir /opt/noVNC + dodir /opt/noVNC/utils + dodir /opt/noVNC/include + dodir /opt/noVNC/images + + exeinto /opt/noVNC/utils + doexe utils/json2graph.py + doexe utils/launch.sh + doexe utils/nova-novncproxy + doexe utils/rebind + doexe utils/rebind.so + doexe utils/u2x11 + doexe utils/web.py + doexe utils/wsproxy.py + doexe utils/websocket.py + + docinto /opt/noVNC/docs + dodoc README.md + dodoc LICENSE.txt + + dosym /opt/noVNC/images/favicon.ico /opt/noVNC/ + cp -pPR *.html ${D}/opt/noVNC/ + cp -pPR include/* ${D}/opt/noVNC/include + cp -pPR images/* ${D}/opt/noVNC/images + + newconfd "${FILESDIR}/noVNC.confd" noVNC + newinitd "${FILESDIR}/noVNC.initd" noVNC + + diropts -m 0750 + dodir /var/log/noVNC +} + diff --git a/www-misc/websockify/Manifest b/www-misc/websockify/Manifest new file mode 100644 index 0000000..5fbb29d --- /dev/null +++ b/www-misc/websockify/Manifest @@ -0,0 +1 @@ +EBUILD websockify-9999.ebuild 620 RMD160 baf9a6f6104264150f1664cb5f6c76c789d7495a SHA1 78907b81255efbbb795463c143010a4a264ee07d SHA256 6fef5d7f9db4f4a36dd8e8d35d436ae1a9da1c13acdb039b70c38fc28654b86a diff --git a/www-misc/websockify/websockify-9999.ebuild b/www-misc/websockify/websockify-9999.ebuild new file mode 100644 index 0000000..0d29d01 --- /dev/null +++ b/www-misc/websockify/websockify-9999.ebuild @@ -0,0 +1,25 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=3 + +PYTHON_DEPEND="2" + +inherit git-2 distutils + +DESCRIPTION="At the most basic level, websockify just translates WebSockets +traffic to normal socket traffic. Websockify accepts the WebSockets handshake, +parses it, and then begins forwarding traffic between the client and the target +in both directions." +HOMEPAGE="https://github.com/kanaka/websockify/wiki" +EGIT_REPO_URI="https://github.com/kanaka/websockify" + +LICENSE="LGPL-3" +SLOT="0" +KEYWORDS="~amd64" +IUSE="" + +DEPEND="" +RDEPEND="${DEPEND}" +