Exemple #1
0
    def handle(self, *args, **options):
        from chroma_core.lib import service_config
        from chroma_core.models import Bundle

        sc = service_config.ServiceConfig()
        sc._setup_rabbitmq_credentials()
        sc._setup_crypto()
        sc._syncdb()

        # default, works for --no-bundles
        profile_path = os.path.join(site_dir(), "../chroma-bundles/base_managed_RH7.profile")

        if options['no_bundles']:
            for bundle in ['lustre', 'lustre-client', 'iml-agent', 'e2fsprogs', 'robinhood', 'zfs']:
                Bundle.objects.get_or_create(bundle_name=bundle, location="/tmp/", description="Dummy bundle")
        else:
            # override the default path if we have unpacked a real archive
            repo_profile_path = os.path.join(settings.DEV_REPO_PATH, 'base_managed_RH7.profile')
            if os.path.isfile(repo_profile_path):
                profile_path = repo_profile_path

            with open(profile_path) as f:
                bundle_names = json.load(f)['bundles']
            missing_bundles = bundle_names

            bundle_files = glob.glob(os.path.join(settings.DEV_REPO_PATH, "*-bundle.tar.gz"))
            for bundle_file in bundle_files:
                archive = tarfile.open(bundle_file, "r:gz")
                meta = json.load(archive.extractfile("./meta"))
                repo = os.path.join(settings.DEV_REPO_PATH, meta['name'])

                if not os.path.exists(os.path.join(repo, 'meta')):
                    print "Extracting %s" % meta['name']
                    if not os.path.exists(repo):
                        os.makedirs(repo)

                    #archive.list()
                    archive.extractall(repo)
                    archive.close()

                if not Bundle.objects.filter(location=repo).exists():
                    service_config.bundle('register', repo)

                try:
                    missing_bundles.remove(meta['name'])
                except ValueError:
                    # Bundles not associated with a profile are OK
                    pass

            if len(missing_bundles):
                print """
Missing bundles: %(bundles)s

Package bundles are required for installation. In order to proceed, you
have 3 options:
    1. Download an installer from %(bundle_url)s and unpack it in %(repo_path)s
    2. Build an installer locally and unpack it in %(repo_path)s
    3. Run ./manage.py dev_setup --no-bundles to generate a set of fake
       bundles for simulated servers

Please note that the fake bundles can't be used to install real storage
servers -- you'll need to use one of the first two methods in order to make
that work.
    """ % {'bundle_url': "http://build.whamcloudlabs.com/job/chroma/arch=x86_64,distro=el6.4/lastSuccessfulBuild/artifact/chroma-bundles/", 'repo_path': settings.DEV_REPO_PATH, 'bundles': ", ".join(missing_bundles)}
                sys.exit(1)

        for profile_path in glob.glob(os.path.join(os.path.dirname(profile_path), '*.profile')):
            with open(profile_path) as profile_file:
                service_config.register_profile(profile_file)

        print """Great success:
 * run `./manage.py supervisor`
 * open %s""" % settings.SERVER_HTTP_URL
    def handle(self, *args, **options):
        from chroma_core.lib import service_config
        from chroma_core.models import Bundle

        sc = service_config.ServiceConfig()
        sc._setup_rabbitmq_credentials()
        sc._setup_crypto()
        sc._syncdb()

        # default, works for --no-bundles
        profile_path = os.path.join(
            site_dir(), "../chroma-bundles/base_managed_RH7.profile")

        if options["no_bundles"]:
            for bundle in ["iml-agent", "external"]:
                Bundle.objects.get_or_create(bundle_name=bundle,
                                             location="/tmp/",
                                             description="Dummy bundle")
        else:
            # override the default path if we have unpacked a real archive
            repo_profile_path = os.path.join(settings.DEV_REPO_PATH,
                                             "base_managed_RH7.profile")
            if os.path.isfile(repo_profile_path):
                profile_path = repo_profile_path

            with open(profile_path) as f:
                bundle_names = json.load(f)["bundles"]
            missing_bundles = bundle_names

            bundle_files = glob.glob(
                os.path.join(settings.DEV_REPO_PATH, "*-bundle.tar.gz"))
            for bundle_file in bundle_files:
                archive = tarfile.open(bundle_file, "r:gz")
                meta = json.load(archive.extractfile("./meta"))
                repo = os.path.join(settings.DEV_REPO_PATH, meta["name"])

                if not os.path.exists(os.path.join(repo, "meta")):
                    print("Extracting %s" % meta["name"])
                    if not os.path.exists(repo):
                        os.makedirs(repo)

                    archive.extractall(repo)
                    archive.close()

                if not Bundle.objects.filter(location=repo).exists():
                    service_config.bundle("register", repo)

                try:
                    missing_bundles.remove(meta["name"])
                except ValueError:
                    # Bundles not associated with a profile are OK
                    pass

            if len(missing_bundles):
                print(
                    """
Missing bundles: %(bundles)s

Package bundles are required for installation. In order to proceed, you
have 2 options:
    1. Download an installer from %(bundle_url)s and unpack it in %(repo_path)s
    2. Build an installer locally and unpack it in %(repo_path)s

Please note that the fake bundles can't be used to install real storage
servers -- you'll need to use one of the first two methods in order to make
that work.
    """ % {
                        "bundle_url":
                        "http://jenkins.lotus.hpdd.lab.intel.com/job/manager-for-lustre/arch=x86_64,distro=el7/lastSuccessfulBuild/artifact/chroma-bundles/",
                        "repo_path": settings.DEV_REPO_PATH,
                        "bundles": ", ".join(missing_bundles),
                    })
                sys.exit(1)

        for profile_path in glob.glob(
                os.path.join(os.path.dirname(profile_path), "*.profile")):
            with open(profile_path) as profile_file:
                service_config.register_profile(profile_file)

        print("""Great success:
 * run `systemctl start iml-manager.target`
 * open %s""" % settings.SERVER_HTTP_URL)