Esempio n. 1
0
    def serialize_pre_provision_tasks(cls, cluster):
        tasks = []
        attrs = objects.Attributes.merged_attrs_values(cluster.attributes)

        is_build_images = all([
            cluster.release.operating_system == consts.RELEASE_OS.ubuntu,
            attrs['provision']['method'] == consts.PROVISION_METHODS.image
        ])

        if is_build_images:
            tasks.append(
                tasks_templates.make_provisioning_images_task(
                    [consts.MASTER_ROLE], attrs['repo_setup']['repos'],
                    attrs['provision'], cluster.id))

        # NOTE(kozhukalov): This pre-provision task is going to be
        # removed by 7.0 because we need this only for classic way of
        # provision and only until we get rid of it. We are going
        # to download debian-installer initrd and kernel just before
        # starting actual provisioning.
        is_download_debian_installer = all([
            cluster.release.operating_system == consts.RELEASE_OS.ubuntu,
            attrs['provision']['method'] == consts.PROVISION_METHODS.cobbler
        ])

        if is_download_debian_installer:
            tasks.append(
                tasks_templates.make_download_debian_installer_task(
                    [consts.MASTER_ROLE], attrs['repo_setup']['repos'],
                    attrs['repo_setup']['installer_kernel'],
                    attrs['repo_setup']['installer_initrd']))

        PriorityStrategy().one_by_one(tasks)
        return tasks
Esempio n. 2
0
    def test_make_provisioning_images_task(self):
        result = tasks_templates.make_provisioning_images_task(
            [1, 2, 3],
            repos=[{"name": "repo", "uri": "http://some"}],
            provision_data={"codename": "trusty", "image_data": {"/mount": {"format": "ext4", "uri": "http://uri"}}},
            cid=123,
        )

        fuel_image_conf = {
            "image_data": {"/mount": {"uri": "http://uri", "format": "ext4"}},
            "output": "/var/www/nailgun/targetimages",
            "repos": [{"name": "repo", "uri": "http://some"}],
            "codename": "trusty",
        }

        self.assertEqual(result["type"], "shell")
        self.assertEqual(result["uids"], [1, 2, 3])
        params = result["parameters"].copy()
        del params["cmd"]
        self.assertEqual(
            params, {"timeout": settings.PROVISIONING_IMAGES_BUILD_TIMEOUT, "retries": 1, "interval": 1, "cwd": "/"}
        )
        cmd = (
            result["parameters"]["cmd"]
            .lstrip(
                "fa_build_image --image_build_dir /var/lib/fuel/ibp "
                "--log-file /var/log/fuel-agent-env-123.log "
                "--data_driver nailgun_build_image --input_data '"
            )
            .rstrip("'")
        )
        self.assertEqual(jsonutils.loads(cmd), fuel_image_conf)
    def serialize_pre_provision_tasks(cls, cluster):
        tasks = []
        attrs = objects.Attributes.merged_attrs_values(cluster.attributes)

        is_build_images = all([
            cluster.release.operating_system == consts.RELEASE_OS.ubuntu,
            attrs['provision']['method'] == consts.PROVISION_METHODS.image])

        if is_build_images:
            tasks.append(
                tasks_templates.make_provisioning_images_task(
                    [consts.MASTER_ROLE],
                    attrs['repo_setup']['repos'],
                    attrs['provision'],
                    cluster.id))

        # NOTE(kozhukalov): This pre-provision task is going to be
        # removed by 7.0 because we need this only for classic way of
        # provision and only until we get rid of it. We are going
        # to download debian-installer initrd and kernel just before
        # starting actual provisioning.
        is_download_debian_installer = all([
            cluster.release.operating_system == consts.RELEASE_OS.ubuntu,
            attrs['provision']['method'] == consts.PROVISION_METHODS.cobbler])

        if is_download_debian_installer:
            tasks.append(
                tasks_templates.make_download_debian_installer_task(
                    [consts.MASTER_ROLE],
                    attrs['repo_setup']['repos'],
                    attrs['repo_setup']['installer_kernel'],
                    attrs['repo_setup']['installer_initrd']))

        PriorityStrategy().one_by_one(tasks)
        return tasks
Esempio n. 4
0
    def test_make_provisioning_images_task(self):
        packages = [
            'linux-firmware',
            'linux-firmware-nonfree',
            'linux-headers-generic-lts-trusty',
            'linux-image-generic-lts-trusty',
        ]
        result = tasks_templates.make_provisioning_images_task(
            [1, 2, 3],
            repos=[
                {'name': 'repo', 'uri': 'http://some'}
            ],
            provision_data={
                'codename': 'trusty',
                'image_data': {
                    '/mount': {
                        'format': 'ext4',
                        'uri': 'http://uri'
                    }
                }},
            cid=123,
            packages=packages
        )

        fuel_image_conf = {
            "image_data": {
                "/mount": {
                    "uri": "http://uri",
                    "format": "ext4"
                }
            },
            "output": "/var/www/nailgun/targetimages",
            "repos": [
                {
                    "name": "repo",
                    "uri": "http://some"
                }
            ],
            "codename": "trusty",
            "packages": packages
        }

        self.assertEqual(result["type"], "shell")
        self.assertEqual(result["uids"], [1, 2, 3])
        params = result["parameters"].copy()
        del params["cmd"]
        self.assertEqual(
            params,
            {
                'timeout': settings.PROVISIONING_IMAGES_BUILD_TIMEOUT,
                'retries': 1,
                'interval': 1,
                'cwd': '/',
            }
        )
        cmd = result["parameters"]["cmd"].lstrip(
            "fa_build_image --image_build_dir /var/lib/fuel/ibp "
            "--log-file /var/log/fuel-agent-env-123.log "
            "--data_driver nailgun_build_image --input_data '").rstrip("'")
        self.assertEqual(jsonutils.loads(cmd), fuel_image_conf)
    def test_make_provisioning_images_task(self):
        packages = [
            'linux-firmware',
            'linux-firmware-nonfree',
            'linux-headers-generic-lts-trusty',
            'linux-image-generic-lts-trusty',
        ]
        result = tasks_templates.make_provisioning_images_task(
            [1, 2, 3],
            repos=[{
                'name': 'repo',
                'uri': 'http://some'
            }],
            provision_data={
                'codename': 'trusty',
                'image_data': {
                    '/mount': {
                        'format': 'ext4',
                        'uri': 'http://uri'
                    }
                }
            },
            cid=123,
            packages=packages)

        fuel_image_conf = {
            "image_data": {
                "/mount": {
                    "uri": "http://uri",
                    "format": "ext4"
                }
            },
            "output": "/var/www/nailgun/targetimages",
            "repos": [{
                "name": "repo",
                "uri": "http://some"
            }],
            "codename": "trusty",
            "packages": packages
        }

        self.assertEqual(result["type"], "shell")
        self.assertEqual(result["uids"], [1, 2, 3])
        params = result["parameters"].copy()
        del params["cmd"]
        self.assertEqual(
            params, {
                'timeout': settings.PROVISIONING_IMAGES_BUILD_TIMEOUT,
                'retries': 1,
                'interval': 1,
                'cwd': '/',
            })
        cmd = result["parameters"]["cmd"].lstrip(
            "fa_build_image --image_build_dir /var/lib/fuel/ibp "
            "--log-file /var/log/fuel-agent-env-123.log "
            "--data_driver nailgun_build_image --input_data '").rstrip("'")
        self.assertEqual(jsonutils.loads(cmd), fuel_image_conf)
Esempio n. 6
0
    def serialize_pre_provision_tasks(cls, cluster):
        tasks = []
        attrs = objects.Attributes.merged_attrs_values(cluster.attributes)

        is_build_images = all([
            cluster.release.operating_system == consts.RELEASE_OS.ubuntu,
            attrs['provision']['method'] == consts.PROVISION_METHODS.image
        ])

        if is_build_images:
            packages = cls._make_provisioning_package_list(attrs['provision'])
            tasks.append(
                tasks_templates.make_provisioning_images_task(
                    [consts.MASTER_NODE_UID], attrs['repo_setup']['repos'],
                    attrs['provision'], cluster.id, packages))

        PriorityStrategy().one_by_one(tasks)
        return tasks
    def serialize_pre_provision_tasks(cls, cluster):
        tasks = []
        attrs = objects.Attributes.merged_attrs_values(cluster.attributes)

        is_build_images = all([
            cluster.release.operating_system == consts.RELEASE_OS.ubuntu,
            attrs['provision']['method'] == consts.PROVISION_METHODS.image])

        if is_build_images:
            packages = cls._make_provisioning_package_list(attrs['provision'])
            tasks.append(
                tasks_templates.make_provisioning_images_task(
                    [consts.MASTER_NODE_UID],
                    attrs['repo_setup']['repos'],
                    attrs['provision'],
                    cluster.id,
                    packages))

        PriorityStrategy().one_by_one(tasks)
        return tasks
Esempio n. 8
0
def execute():
    """Function to prepare shell script to generate target image"""
    import sys

    import six

    from nailgun.settings import NailgunSettings
    from nailgun.objects.release import Release
    from nailgun import consts
    from nailgun.orchestrator import tasks_templates

    settings = NailgunSettings()
    master_ip = settings.config['MASTER_IP']
    release_id = sys.argv[1]

    rel = Release.get_by_uid(release_id)

    packages_str = \
        rel.attributes_metadata['editable']['provision']['packages']['value']
    packages = list(
        six.moves.filter(bool, (s.strip() for s in packages_str.split('\n'))))
    task = tasks_templates.make_provisioning_images_task(
        [consts.MASTER_NODE_UID],
        rel.attributes_metadata['editable']['repo_setup']['repos']['value'],
        rel.attributes_metadata['generated']['provision'],
        'prepare_release_ubuntu',
        packages)

    release_str = 'release_{release_id}'.format(release_id=release_id)
    with open('build_image.sh', 'w') as cmd_file:
        cmd_file.write(task['parameters']['cmd'].replace(
            "{cluster.release.environment_version}",
            rel.environment_version).replace(
                '{cluster.release.version}',
                rel.version).replace(
                    '{settings.MASTER_IP}',
                    master_ip).replace(
                        "{cluster.id}",
                        release_str))