diff --git a/anvil/__main__.py b/anvil/__main__.py index 3ecfc6cb..931954e2 100644 --- a/anvil/__main__.py +++ b/anvil/__main__.py @@ -64,12 +64,21 @@ def run(args): if runner_cls.needs_sudo: ensure_perms() + # Check persona file exists persona_fn = args.pop('persona_fn') if not persona_fn: raise excp.OptionException("No persona file name specified!") if not sh.isfile(persona_fn): raise excp.OptionException("Invalid persona file %r specified!" % (persona_fn)) + # Check origin file exists + origins_fn = args.pop('origins_fn') + if not origins_fn: + raise excp.OptionException("No origin file name specified!") + if not sh.isfile(origins_fn): + raise excp.OptionException("Invalid origin file %r specified!" % (origins_fn)) + args['origins_fn'] = sh.abspth(origins_fn) + # Determine the root directory... root_dir = sh.abspth(args.pop("dir")) @@ -111,6 +120,7 @@ def run(args): colorizer.quote(action), colorizer.quote(utils.iso8601()), colorizer.quote(dist.name)) LOG.info("Using persona: %s", colorizer.quote(persona_fn)) + LOG.info("Using origins: %s", colorizer.quote(origins_fn)) LOG.info("In root directory: %s", colorizer.quote(root_dir)) start_time = time.time() diff --git a/anvil/components/base_install.py b/anvil/components/base_install.py index 5f7910e9..98052eb6 100644 --- a/anvil/components/base_install.py +++ b/anvil/components/base_install.py @@ -20,6 +20,7 @@ from anvil import settings from anvil import shell as sh from anvil import trace as tr from anvil import utils +import yaml from anvil.packaging.helpers import pip_helper @@ -35,34 +36,8 @@ class PkgInstallComponent(base.Component): self.tracewriter = tr.TraceWriter(trace_fn, break_if_there=False) self.configurator = conf.Configurator(self) - def _get_download_config(self): - return None - - def _get_download_location(self): - key = self._get_download_config() - if not key: - return (None, None) - uri = self.get_option(key, default_value='').strip() - if not uri: - raise ValueError(("Could not find uri in config to download " - "from option %s") % (key)) - return (uri, self.get_option('app_dir')) - def download(self): - (from_uri, target_dir) = self._get_download_location() - if not from_uri and not target_dir: - return [] - else: - uris = [from_uri] - utils.log_iterable(uris, logger=LOG, - header="Downloading from %s uris" % (len(uris))) - sh.mkdirslist(target_dir, tracewriter=self.tracewriter) - # This is used to delete what is downloaded (done before - # fetching to ensure its cleaned up even on download failures) - self.tracewriter.download_happened(target_dir, from_uri) - fetcher = down.GitDownloader(self.distro, from_uri, target_dir) - fetcher.download() - return uris + return [] def list_patches(self, section): what_patches = self.get_option('patches', section) @@ -82,7 +57,7 @@ class PkgInstallComponent(base.Component): def patch(self, section): canon_what_patches = self.list_patches(section) if canon_what_patches: - (_from_uri, target_dir) = self._get_download_location() + target_dir = self.get_option('app_dir') patcher.apply_patches(canon_what_patches, target_dir) def config_params(self, config_fn): @@ -165,9 +140,30 @@ class PythonInstallComponent(PkgInstallComponent): self.requires_files.append(sh.joinpths(app_dir, 'test-requirements.txt')) self._egg_info = None + self._origins_fn = kargs['origins_fn'] - def _get_download_config(self): - return 'get_from' + def download(self): + """Download sources needed to build the component, if any.""" + target_dir = self.get_option('app_dir') + with open(self._origins_fn, 'r') as fh: + download_cfg = yaml.safe_load(fh.read()).get(self.name, {}) + if not target_dir or not download_cfg: + return [] + + uri = download_cfg.pop('repo', None) + if not uri: + raise ValueError(("Could not find repo uri for %r component from the %r " + "config file." % (self.name, self._origins_fn))) + + uris = [uri] + utils.log_iterable(uris, logger=LOG, + header="Downloading from %s uris" % (len(uris))) + sh.mkdirslist(target_dir, tracewriter=self.tracewriter) + # This is used to delete what is downloaded (done before + # fetching to ensure its cleaned up even on download failures) + self.tracewriter.download_happened(target_dir, uri) + down.GitDownloader(uri, target_dir, **download_cfg).download() + return uris @property def egg_info(self): diff --git a/anvil/downloader.py b/anvil/downloader.py index 3f3c28c8..f6798d7f 100644 --- a/anvil/downloader.py +++ b/anvil/downloader.py @@ -19,7 +19,6 @@ import contextlib import functools import re import urllib2 -import urlparse import progressbar @@ -33,9 +32,9 @@ LOG = logging.getLogger(__name__) class Downloader(object): __metaclass__ = abc.ABCMeta - def __init__(self, uri, store_where): - self.uri = uri - self.store_where = store_where + def __init__(self, uri, dst): + self._uri = uri + self._dst = dst @abc.abstractmethod def download(self): @@ -43,47 +42,38 @@ class Downloader(object): class GitDownloader(Downloader): - def __init__(self, distro, uri, store_where): - Downloader.__init__(self, uri, store_where) - self.distro = distro + + def __init__(self, uri, dst, **kwargs): + Downloader.__init__(self, uri, dst) + self._branch = kwargs.get('branch', 'master') + self._tag = str(kwargs.get('tag')) def download(self): - branch = None - tag = None - uri = self.uri - if uri.find("?") != -1: - # If we use urlparser here it doesn't seem to work right?? - # TODO(harlowja), why?? - (uri, params) = uri.split("?", 1) - params = urlparse.parse_qs(params) - if 'branch' in params: - branch = params['branch'][0].strip() - if 'tag' in params: - tag = params['tag'][0].strip() - uri = uri.strip() - if not branch: - branch = 'master' - if tag: + branch = self._branch + tag = self._tag + if self._tag: # Avoid 'detached HEAD state' message by moving to a # $tag-anvil branch for that tag - new_branch = "%s-%s" % (tag, 'anvil') + new_branch = "%s-%s" % (self._tag, 'anvil') checkout_what = [tag, '-b', new_branch] else: # Set it up to track the remote branch correctly new_branch = branch checkout_what = ['-t', '-b', new_branch, 'origin/%s' % branch] - if sh.isdir(self.store_where) and sh.isdir(sh.joinpths(self.store_where, '.git')): - LOG.info("Existing git directory located at %s, leaving it alone.", colorizer.quote(self.store_where)) + if sh.isdir(self._dst) and sh.isdir(sh.joinpths(self._dst, '.git')): + LOG.info("Existing git directory located at %s, leaving it alone.", + colorizer.quote(self._dst)) # do git clean -xdfq and git reset --hard to undo possible changes cmd = ["git", "clean", "-xdfq"] - sh.execute(cmd, cwd=self.store_where) + sh.execute(cmd, cwd=self._dst) cmd = ["git", "reset", "--hard"] - sh.execute(cmd, cwd=self.store_where) + sh.execute(cmd, cwd=self._dst) cmd = ["git", "fetch", "origin"] - sh.execute(cmd, cwd=self.store_where) + sh.execute(cmd, cwd=self._dst) else: - LOG.info("Downloading %s (%s) to %s.", colorizer.quote(uri), branch, colorizer.quote(self.store_where)) - cmd = ["git", "clone", uri, self.store_where] + LOG.info("Downloading %s (%s) to %s.", colorizer.quote(self._uri), + branch, colorizer.quote(self._dst)) + cmd = ["git", "clone", self._uri, self._dst] sh.execute(cmd) if tag: LOG.info("Adjusting to tag %s.", colorizer.quote(tag)) @@ -93,35 +83,36 @@ class GitDownloader(Downloader): # newer git allows branch resetting: git checkout -B $new_branch # so, all these are for compatibility with older RHEL git cmd = ["git", "rev-parse", "HEAD"] - git_head = sh.execute(cmd, cwd=self.store_where)[0].strip() + git_head = sh.execute(cmd, cwd=self._dst)[0].strip() cmd = ["git", "checkout", git_head] - sh.execute(cmd, cwd=self.store_where) + sh.execute(cmd, cwd=self._dst) cmd = ["git", "branch", "-D", new_branch] - sh.execute(cmd, cwd=self.store_where, check_exit_code=False) + sh.execute(cmd, cwd=self._dst, check_exit_code=False) cmd = ["git", "checkout"] + checkout_what - sh.execute(cmd, cwd=self.store_where) + sh.execute(cmd, cwd=self._dst) # NOTE(aababilov): old openstack.common.setup reports all tag that # contain HEAD as project's version. It breaks all RPM building # process, so, we will delete all extra tags cmd = ["git", "tag", "--contains", "HEAD"] tag_names = [ i - for i in sh.execute(cmd, cwd=self.store_where)[0].splitlines() + for i in sh.execute(cmd, cwd=self._dst)[0].splitlines() if i and i != tag] # Making sure we are not removing tag with the same commit reference # as for a branch. Otherwise this will make repository broken. - cmd = ["git", "show-ref", "--tags", "--dereference"] + tag_names - for line in sh.execute(cmd, cwd=self.store_where)[0].splitlines(): - res = re.search("(.+)\s+refs/tags/(.+)\^\{\}$", line) - if res is None: - continue - ref, tag_name = res.groups() - if ref == git_head and tag_name in tag_names: - tag_names.remove(tag_name) + if tag_names: + cmd = ["git", "show-ref", "--tags", "--dereference"] + tag_names + for line in sh.execute(cmd, cwd=self._dst)[0].splitlines(): + res = re.search("(.+)\s+refs/tags/(.+)\^\{\}$", line) + if res is None: + continue + ref, tag_name = res.groups() + if ref == git_head and tag_name in tag_names: + tag_names.remove(tag_name) if tag_names: LOG.info("Removing tags: %s", colorizer.quote(" ".join(tag_names))) cmd = ["git", "tag", "-d"] + tag_names - sh.execute(cmd, cwd=self.store_where) + sh.execute(cmd, cwd=self._dst) class UrlLibDownloader(Downloader): @@ -140,7 +131,8 @@ class UrlLibDownloader(Downloader): return progressbar.ProgressBar(widgets=widgets, maxval=size) def download(self): - LOG.info('Downloading using urllib2: %s to %s.', colorizer.quote(self.uri), colorizer.quote(self.store_where)) + LOG.info('Downloading using urllib2: %s to %s.', + colorizer.quote(self._uri), colorizer.quote(self._dst)) p_bar = None def update_bar(progress_bar, bytes_down): @@ -148,7 +140,7 @@ class UrlLibDownloader(Downloader): progress_bar.update(bytes_down) try: - with contextlib.closing(urllib2.urlopen(self.uri, timeout=self.timeout)) as conn: + with contextlib.closing(urllib2.urlopen(self._uri, timeout=self.timeout)) as conn: c_len = conn.headers.get('content-length') if c_len is not None: try: @@ -156,9 +148,9 @@ class UrlLibDownloader(Downloader): p_bar.start() except ValueError: pass - with open(self.store_where, 'wb') as ofh: - return (self.store_where, sh.pipe_in_out(conn, ofh, - chunk_cb=functools.partial(update_bar, p_bar))) + with open(self._dst, 'wb') as ofh: + return (self._dst, sh.pipe_in_out(conn, ofh, + chunk_cb=functools.partial(update_bar, p_bar))) finally: if p_bar: p_bar.finish() diff --git a/anvil/opts.py b/anvil/opts.py index 6fc4bc80..5293a4fb 100644 --- a/anvil/opts.py +++ b/anvil/opts.py @@ -163,6 +163,14 @@ def parse(previous_settings=None): dest="action", metavar="ACTION", help="required action to perform: %s" % (_format_list(actions.names()))) + base_group.add_option("-o", "--origins", + action="store", + type="string", + dest="origins_fn", + default=sh.joinpths(settings.ORIGINS_DIR, 'master.yaml'), + metavar="FILE", + help="yaml file describing where to get openstack sources " + "from (default: %default)") base_group.add_option("-j", "--jobs", action="store", type="int", @@ -223,6 +231,7 @@ def parse(previous_settings=None): values['action'] = (options.action or "") values['jobs'] = options.jobs values['persona_fn'] = options.persona_fn + values['origins_fn'] = options.origins_fn values['verbose'] = options.verbose values['usr_only'] = options.usr_only values['prompt_for_passwords'] = options.prompt_for_passwords diff --git a/anvil/settings.py b/anvil/settings.py index 7517c8fc..7bcce809 100644 --- a/anvil/settings.py +++ b/anvil/settings.py @@ -21,6 +21,7 @@ import os CONFIG_DIR = 'conf' COMPONENT_CONF_DIR = os.path.join(CONFIG_DIR, "components") DISTRO_DIR = os.path.join(CONFIG_DIR, "distros") +MESSAGING_DIR = os.path.join(CONFIG_DIR, "messages") +ORIGINS_DIR = os.path.join(CONFIG_DIR, "origins") PERSONA_DIR = os.path.join(CONFIG_DIR, "personas") TEMPLATE_DIR = os.path.join(CONFIG_DIR, "templates") -MESSAGING_DIR = os.path.join(CONFIG_DIR, "messages") diff --git a/conf/components/ceilometer-client.yaml b/conf/components/ceilometer-client.yaml index 14df20c9..89cdc31c 100644 --- a/conf/components/ceilometer-client.yaml +++ b/conf/components/ceilometer-client.yaml @@ -1,7 +1,4 @@ # Settings for component ceilometer-client --- -# Where we download this from... -get_from: "git://github.com/openstack/python-ceilometerclient.git?branch=master" - ... diff --git a/conf/components/cinder-client.yaml b/conf/components/cinder-client.yaml index 12320264..9926d11b 100644 --- a/conf/components/cinder-client.yaml +++ b/conf/components/cinder-client.yaml @@ -1,7 +1,4 @@ # Settings for component cinder-client --- -# Where we download this from... -get_from: "git://github.com/openstack/python-cinderclient.git?branch=master" - ... diff --git a/conf/components/cinder.yaml b/conf/components/cinder.yaml index 230a7335..dd2ae8e7 100644 --- a/conf/components/cinder.yaml +++ b/conf/components/cinder.yaml @@ -1,13 +1,9 @@ # Settings for component cinder --- -# Where we download this from... -get_from: "git://github.com/openstack/cinder.git?branch=master" - # Host and ports for the different cinder services api_host: "$(auto:ip)" api_port: 8776 protocol: http - ... diff --git a/conf/components/db.yaml b/conf/components/db.yaml index 6892aeb0..b86f86a9 100644 --- a/conf/components/db.yaml +++ b/conf/components/db.yaml @@ -1,5 +1,6 @@ # Settings for component db --- + # Where you db is located at and how to access it. host: localhost port: 3306 diff --git a/conf/components/django-openstack-auth.yaml b/conf/components/django-openstack-auth.yaml index 18f67adb..89ad3f91 100644 --- a/conf/components/django-openstack-auth.yaml +++ b/conf/components/django-openstack-auth.yaml @@ -1,7 +1,4 @@ # Settings for component django-openstack-auth --- -# Where we download this from... -get_from: "git://github.com/openstack/django_openstack_auth.git?branch=master" - ... diff --git a/conf/components/general.yaml b/conf/components/general.yaml index 5503fd47..079a1e13 100644 --- a/conf/components/general.yaml +++ b/conf/components/general.yaml @@ -1,5 +1,6 @@ # Settings for component general --- + ip: "$(auto:ip)" # How many seconds to wait until a service comes online before using it. diff --git a/conf/components/glance-client.yaml b/conf/components/glance-client.yaml index 7b7a2d02..25d3cbdd 100644 --- a/conf/components/glance-client.yaml +++ b/conf/components/glance-client.yaml @@ -1,9 +1,6 @@ # Settings for component glance-client --- -# Where we download this from... -get_from: "git://github.com/openstack/python-glanceclient.git?branch=master" - # These seem to require swift, not always installed... exclude_tests: - "test_ssl_cert_mismatch" diff --git a/conf/components/glance.yaml b/conf/components/glance.yaml index c9592e3d..95b224fa 100644 --- a/conf/components/glance.yaml +++ b/conf/components/glance.yaml @@ -1,7 +1,5 @@ # Settings for component glance --- -# Where we download this from... -get_from: "git://github.com/openstack/glance.git?branch=master" host: "$(auto:ip)" api_port: 9292 @@ -30,4 +28,5 @@ image_cache_dir: "/usr/share/anvil/glance/images" # Used by install section in the specfile (conflicts with the client binary...) remove_file: "/bin/rm -rf %{buildroot}/usr/bin/glance" + ... diff --git a/conf/components/heat-client.yaml b/conf/components/heat-client.yaml index 73477691..0192a6e9 100644 --- a/conf/components/heat-client.yaml +++ b/conf/components/heat-client.yaml @@ -1,7 +1,4 @@ # Settings for component heat-client --- -# Where we download this from... -get_from: "git://github.com/openstack/python-heatclient.git?branch=master" - ... diff --git a/conf/components/horizon.yaml b/conf/components/horizon.yaml index 4df7a758..bd7ca4a2 100644 --- a/conf/components/horizon.yaml +++ b/conf/components/horizon.yaml @@ -1,6 +1,4 @@ # Settings for component horizon --- -# Where we download this from... -get_from: "git://github.com/openstack/horizon.git?branch=master" ... diff --git a/conf/components/keystone-client.yaml b/conf/components/keystone-client.yaml index c6730594..eb350390 100644 --- a/conf/components/keystone-client.yaml +++ b/conf/components/keystone-client.yaml @@ -1,9 +1,6 @@ # Settings for component keystone-client --- -# Where we download this from... -get_from: "git://github.com/openstack/python-keystoneclient.git?branch=master" - # This code is out of compliance, so skip it... use_pep8: False diff --git a/conf/components/keystone.yaml b/conf/components/keystone.yaml index 5997f64f..66b93267 100644 --- a/conf/components/keystone.yaml +++ b/conf/components/keystone.yaml @@ -1,7 +1,5 @@ # Settings for component keystone --- -# Where we download this from... -get_from: "git://github.com/openstack/keystone.git?branch=master" # Where is the keystone auth host at? auth_host: "$(auto:ip)" diff --git a/conf/components/neutron-client.yaml b/conf/components/neutron-client.yaml index b58d6592..739c5116 100644 --- a/conf/components/neutron-client.yaml +++ b/conf/components/neutron-client.yaml @@ -1,6 +1,4 @@ # Settings for component neutron-client --- -get_from: "git://github.com/openstack/python-neutronclient.git?branch=master" - ... diff --git a/conf/components/neutron.yaml b/conf/components/neutron.yaml index beb28208..f48d0b1e 100644 --- a/conf/components/neutron.yaml +++ b/conf/components/neutron.yaml @@ -1,9 +1,6 @@ # Settings for component neutron-client --- -# Where we download this from... -get_from: "git://github.com/openstack/neutron.git?branch=master" - # Host and ports for the different neutron services api_host: "$(auto:ip)" api_port: 9696 diff --git a/conf/components/nova-client.yaml b/conf/components/nova-client.yaml index 2bdfb548..67d521f4 100644 --- a/conf/components/nova-client.yaml +++ b/conf/components/nova-client.yaml @@ -1,7 +1,4 @@ # Settings for component nova-client --- -# Where we download this from... -get_from: "git://github.com/openstack/python-novaclient.git?branch=master" - ... diff --git a/conf/components/nova.yaml b/conf/components/nova.yaml index 2f12de81..aaf7fab6 100644 --- a/conf/components/nova.yaml +++ b/conf/components/nova.yaml @@ -1,9 +1,6 @@ # Settings for component nova --- -# Where we download this from... -get_from: "git://github.com/openstack/nova.git?branch=master" - # Host and ports for the different nova services api_host: "$(auto:ip)" api_port: 8774 diff --git a/conf/components/novnc.yaml b/conf/components/novnc.yaml index 1e8d1cec..c8d7ac0e 100644 --- a/conf/components/novnc.yaml +++ b/conf/components/novnc.yaml @@ -1,7 +1,4 @@ # Settings for component novnc --- -# Where we download this from... -get_from: "git://github.com/kanaka/noVNC.git?branch=master" - ... diff --git a/conf/components/openstack-client.yaml b/conf/components/openstack-client.yaml index 5d331a16..76f4a15e 100644 --- a/conf/components/openstack-client.yaml +++ b/conf/components/openstack-client.yaml @@ -1,6 +1,4 @@ # Settings for component openstack-client --- -get_from: "git://github.com/openstack/python-openstackclient.git?branch=master" - ... diff --git a/conf/components/oslo-config.yaml b/conf/components/oslo-config.yaml index 9e94fcf2..82c849ce 100644 --- a/conf/components/oslo-config.yaml +++ b/conf/components/oslo-config.yaml @@ -1,6 +1,4 @@ # Settings for component oslo.config --- -get_from: "git://github.com/openstack/oslo.config.git?branch=master" - ... diff --git a/conf/components/oslo-incubator.yaml b/conf/components/oslo-incubator.yaml index 48c01aa9..82c849ce 100644 --- a/conf/components/oslo-incubator.yaml +++ b/conf/components/oslo-incubator.yaml @@ -1,6 +1,4 @@ # Settings for component oslo.config --- -get_from: "git://github.com/openstack/oslo-incubator.git?branch=master" - ... diff --git a/conf/components/qpid.yaml b/conf/components/qpid.yaml index 84225afa..741d8cdd 100644 --- a/conf/components/qpid.yaml +++ b/conf/components/qpid.yaml @@ -1,5 +1,6 @@ # Settings for component qpid --- + # Where is qpid located? host: "$(auto:ip)" diff --git a/conf/components/rabbit-mq.yaml b/conf/components/rabbit-mq.yaml index ceecd642..8e33bf27 100644 --- a/conf/components/rabbit-mq.yaml +++ b/conf/components/rabbit-mq.yaml @@ -1,5 +1,6 @@ # Settings for component rabbit-mq --- + # Where is rabbit located? host: "$(auto:ip)" diff --git a/conf/components/swift-client.yaml b/conf/components/swift-client.yaml index 9683d6ea..ae275387 100644 --- a/conf/components/swift-client.yaml +++ b/conf/components/swift-client.yaml @@ -1,6 +1,4 @@ # Settings for component swift-client --- -get_from: "git://github.com/openstack/python-swiftclient.git?branch=master" - ... diff --git a/conf/components/trove-client.yaml b/conf/components/trove-client.yaml index 555f02ce..69ea979e 100644 --- a/conf/components/trove-client.yaml +++ b/conf/components/trove-client.yaml @@ -1,7 +1,4 @@ # Settings for component trove-client --- -# Where we download this from... -get_from: "git://github.com/openstack/python-troveclient.git?branch=master" - ... diff --git a/conf/components/trove.yaml b/conf/components/trove.yaml index 207f4209..4135e232 100644 --- a/conf/components/trove.yaml +++ b/conf/components/trove.yaml @@ -1,7 +1,4 @@ # Settings for component trove --- -# Where we download this from... -get_from: "git://github.com/openstack/trove.git?branch=master" - ... diff --git a/conf/origins/havana-1.yaml b/conf/origins/havana-1.yaml new file mode 100644 index 00000000..d14a2d42 --- /dev/null +++ b/conf/origins/havana-1.yaml @@ -0,0 +1,63 @@ +ceilometer-client: + repo: git://github.com/openstack/python-ceilometerclient.git + tag: 1.0.6 +cinder-client: + repo: git://github.com/openstack/python-cinderclient.git + tag: 1.0.6 +cinder: + repo: git://github.com/openstack/cinder.git + tag: 2013.2 +django-openstack-auth: + repo: git://github.com/openstack/django_openstack_auth.git + tag: 1.1.3 +glance-client: + repo: git://github.com/openstack/python-glanceclient.git + tag: 0.11.0 +glance: + repo: git://github.com/openstack/glance.git + tag: 2013.2 +heat-client: + repo: git://github.com/openstack/python-heatclient.git + tag: 0.2.5 +horizon: + repo: git://github.com/openstack/horizon.git + tag: 2013.2 +keystone-client: + repo: git://github.com/openstack/python-keystoneclient.git + tag: 0.4.1 +keystone: + repo: git://github.com/openstack/keystone.git + tag: 2013.2 +nova-client: + repo: git://github.com/openstack/python-novaclient.git + tag: 2.15.0 +nova: + repo: git://github.com/openstack/nova.git + tag: 2013.2 +novnc: + repo: git://github.com/kanaka/noVNC.git + branch: master +openstack-client: + repo: git://github.com/openstack/python-openstackclient.git + tag: 0.2.2 +oslo-config: + repo: git://github.com/openstack/oslo.config.git + tag: 1.2.1 +oslo-incubator: + repo: git://github.com/openstack/oslo-incubator.git + tag: 2013.2 +neutron-client: + repo: git://github.com/openstack/python-neutronclient.git + tag: 2.3.1 +neutron: + repo: git://github.com/openstack/neutron.git + tag: 2013.2 +swift-client: + repo: git://github.com/openstack/python-swiftclient.git + tag: 1.8.0 +trove-client: + repo: git://github.com/openstack/python-troveclient.git + tag: 1.0.3 +trove: + repo: git://github.com/openstack/trove.git + tag: 2013.2 diff --git a/conf/origins/havana.yaml b/conf/origins/havana.yaml new file mode 100644 index 00000000..c1ff46f8 --- /dev/null +++ b/conf/origins/havana.yaml @@ -0,0 +1,63 @@ +ceilometer-client: + repo: git://github.com/openstack/python-ceilometerclient.git + tag: 1.0.6 +cinder-client: + repo: git://github.com/openstack/python-cinderclient.git + tag: 1.0.6 +cinder: + repo: git://github.com/openstack/cinder.git + branch: stable/havana +django-openstack-auth: + repo: git://github.com/openstack/django_openstack_auth.git + tag: 1.1.3 +glance-client: + repo: git://github.com/openstack/python-glanceclient.git + tag: 0.11.0 +glance: + repo: git://github.com/openstack/glance.git + branch: stable/havana +heat-client: + repo: git://github.com/openstack/python-heatclient.git + tag: 0.2.5 +horizon: + repo: git://github.com/openstack/horizon.git + branch: stable/havana +keystone-client: + repo: git://github.com/openstack/python-keystoneclient.git + tag: 0.4.1 +keystone: + repo: git://github.com/openstack/keystone.git + branch: stable/havana +nova-client: + repo: git://github.com/openstack/python-novaclient.git + tag: 2.15.0 +nova: + repo: git://github.com/openstack/nova.git + branch: stable/havana +novnc: + repo: git://github.com/kanaka/noVNC.git + branch: master +openstack-client: + repo: git://github.com/openstack/python-openstackclient.git + tag: 0.2.2 +oslo-config: + repo: git://github.com/openstack/oslo.config.git + branch: stable/havana +oslo-incubator: + repo: git://github.com/openstack/oslo-incubator.git + branch: stable/havana +neutron-client: + repo: git://github.com/openstack/python-neutronclient.git + tag: 2.3.1 +neutron: + repo: git://github.com/openstack/neutron.git + branch: stable/havana +swift-client: + repo: git://github.com/openstack/python-swiftclient.git + tag: 1.8.0 +trove-client: + repo: git://github.com/openstack/python-troveclient.git + tag: 1.0.3 +trove: + repo: git://github.com/openstack/trove.git + branch: stable/havana diff --git a/conf/origins/master.yaml b/conf/origins/master.yaml new file mode 100644 index 00000000..0988f4ed --- /dev/null +++ b/conf/origins/master.yaml @@ -0,0 +1,63 @@ +ceilometer-client: + repo: git://github.com/openstack/python-ceilometerclient.git + branch: master +cinder-client: + repo: git://github.com/openstack/python-cinderclient.git + branch: master +cinder: + repo: git://github.com/openstack/cinder.git + branch: master +django-openstack-auth: + repo: git://github.com/openstack/django_openstack_auth.git + branch: master +glance-client: + repo: git://github.com/openstack/python-glanceclient.git + branch: master +glance: + repo: git://github.com/openstack/glance.git + branch: master +heat-client: + repo: git://github.com/openstack/python-heatclient.git + branch: master +horizon: + repo: git://github.com/openstack/horizon.git + branch: master +keystone-client: + repo: git://github.com/openstack/python-keystoneclient.git + branch: master +keystone: + repo: git://github.com/openstack/keystone.git + branch: master +nova-client: + repo: git://github.com/openstack/python-novaclient.git + branch: master +nova: + repo: git://github.com/openstack/nova.git + branch: master +novnc: + repo: git://github.com/kanaka/noVNC.git + branch: master +openstack-client: + repo: git://github.com/openstack/python-openstackclient.git + branch: master +oslo-config: + repo: git://github.com/openstack/oslo.config.git + branch: master +oslo-incubator: + repo: git://github.com/openstack/oslo-incubator.git + branch: master +neutron-client: + repo: git://github.com/openstack/python-neutronclient.git + branch: master +neutron: + repo: git://github.com/openstack/neutron.git + branch: master +swift-client: + repo: git://github.com/openstack/python-swiftclient.git + branch: master +trove-client: + repo: git://github.com/openstack/python-troveclient.git + branch: master +trove: + repo: git://github.com/openstack/trove.git + branch: master