コード例 #1
0
ファイル: download.py プロジェクト: d4s/lava-dispatcher
    def populate(self, parameters):
        self.internal_pipeline = Pipeline(parent=self,
                                          job=self.job,
                                          parameters=parameters)
        # Check if the device has a power command such as HiKey, Dragonboard,
        # etc. against device that doesn't like Nexus, etc.
        # This is required in order to power on the device so that when the
        # test job writer wants to perform some operation using a
        # lava-test-shell action that follows, this becomes mandatory. Think of
        # issuing any fastboot commands on the powered on device.
        #
        # NOTE: Add more power on strategies, if required for specific devices.
        if self.job.device.get('fastboot_via_uboot', False):
            self.internal_pipeline.add_action(ConnectDevice())
            self.internal_pipeline.add_action(UBootEnterFastbootAction())
        elif self.job.device.power_command:
            self.force_prompt = True
            self.internal_pipeline.add_action(ConnectDevice())
            self.internal_pipeline.add_action(ResetDevice())
        else:
            self.internal_pipeline.add_action(EnterFastbootAction())

        self.download_dir = self.mkdtemp()
        image_keys = sorted(parameters['images'].keys())
        for image in image_keys:
            if image != 'yaml_line':
                self.internal_pipeline.add_action(
                    DownloaderAction(image, self.download_dir))
        if self.test_needs_overlay(parameters):
            self.internal_pipeline.add_action(OverlayAction())
        self.internal_pipeline.add_action(CopyToLxcAction())
コード例 #2
0
ファイル: docker.py プロジェクト: d4s/lava-dispatcher
 def populate(self, parameters):
     self.internal_pipeline = Pipeline(parent=self,
                                       job=self.job,
                                       parameters=parameters)
     if self.test_needs_deployment(parameters):
         self.internal_pipeline.add_action(DeployDeviceEnvironment())
     if self.test_needs_overlay(parameters):
         self.internal_pipeline.add_action(OverlayAction())
コード例 #3
0
ファイル: nbd.py プロジェクト: d4s/lava-dispatcher
    def populate(self, parameters):
        self.tftp_dir = self.mkdtemp(override=tftpd_dir())
        self.internal_pipeline = Pipeline(parent=self,
                                          job=self.job,
                                          parameters=parameters)
        self.set_namespace_data(action=self.name,
                                label='tftp',
                                key='tftp_dir',
                                value=self.tftp_dir,
                                parameters=parameters)

        for key in ['initrd', 'kernel', 'dtb', 'nbdroot']:
            if key in parameters:
                download = DownloaderAction(key, path=self.tftp_dir)
                download.max_retries = 3  # overridden by failure_retry in the parameters, if set.
                self.internal_pipeline.add_action(download)
                if key == 'initrd':
                    self.set_namespace_data(action="tftp-deploy",
                                            label='tftp',
                                            key='ramdisk',
                                            value=True,
                                            parameters=parameters)
                    self.set_namespace_data(action=self.name,
                                            label='nbd',
                                            key='initrd',
                                            value=True,
                                            parameters=parameters)

        # prepare overlay
        self.internal_pipeline.add_action(OverlayAction())
        # setup values for protocol and later steps
        self.set_namespace_data(action=self.name,
                                label='nbd',
                                key='initrd',
                                value=True,
                                parameters=parameters)
        # store in parameters for protocol 'xnbd' to tear-down xnbd-server
        # and store in namespace for boot action
        # ip
        parameters['lava-xnbd'] = {}
        self.nbd_ip = dispatcher_ip(self.job.parameters['dispatcher'])
        parameters['lava-xnbd']['ip'] = self.nbd_ip
        self.set_namespace_data(action=self.name,
                                label='nbd',
                                key='nbd_server_ip',
                                value=self.nbd_ip,
                                parameters=parameters)
        # port
        self.nbd_port = get_free_port(self.job.parameters['dispatcher'])
        parameters['lava-xnbd']['port'] = self.nbd_port
        self.set_namespace_data(action=self.name,
                                label='nbd',
                                key='nbd_server_port',
                                value=self.nbd_port,
                                parameters=parameters)
        # handle XnbdAction next - bring-up xnbd-server
        self.internal_pipeline.add_action(XnbdAction())
コード例 #4
0
ファイル: nbd.py プロジェクト: slawr/lava
    def populate(self, parameters):
        self.tftp_dir = self.mkdtemp(override=filesystem.tftpd_dir())
        self.pipeline = Pipeline(parent=self,
                                 job=self.job,
                                 parameters=parameters)
        self.set_namespace_data(
            action=self.name,
            label="tftp",
            key="tftp_dir",
            value=self.tftp_dir,
            parameters=parameters,
        )

        for key in ["initrd", "kernel", "dtb", "nbdroot"]:
            if key in parameters:
                download = DownloaderAction(key,
                                            path=self.tftp_dir,
                                            params=parameters[key])
                download.max_retries = (
                    3  # overridden by failure_retry in the parameters, if set.
                )
                self.pipeline.add_action(download)
                if key == "initrd":
                    self.set_namespace_data(
                        action="tftp-deploy",
                        label="tftp",
                        key="ramdisk",
                        value=True,
                        parameters=parameters,
                    )
                    self.set_namespace_data(
                        action=self.name,
                        label="nbd",
                        key="initrd",
                        value=True,
                        parameters=parameters,
                    )

        # prepare overlay
        self.pipeline.add_action(OverlayAction())
        if "kernel" in parameters and "type" in parameters["kernel"]:
            self.pipeline.add_action(PrepareKernelAction())
        # setup values for protocol and later steps
        self.set_namespace_data(
            action=self.name,
            label="nbd",
            key="initrd",
            value=True,
            parameters=parameters,
        )
        # store in parameters for protocol 'xnbd' to tear-down xnbd-server
        # and store in namespace for boot action
        # ip
        parameters["lava-xnbd"] = {}
        # handle XnbdAction next - bring-up xnbd-server
        self.pipeline.add_action(XnbdAction())
コード例 #5
0
 def populate(self, parameters):
     self.internal_pipeline = Pipeline(parent=self,
                                       job=self.job,
                                       parameters=parameters)
     path = self.mkdtemp()
     self.internal_pipeline.add_action(DownloaderAction('image', path=path))
     if self.test_needs_overlay(parameters):
         self.internal_pipeline.add_action(OverlayAction())
         self.internal_pipeline.add_action(ApplyOverlayImage())
         if self.test_needs_deployment(parameters):
             self.internal_pipeline.add_action(DeployDeviceEnvironment())
コード例 #6
0
ファイル: iso.py プロジェクト: sww0825521xy/lava-dispatcher
 def populate(self, parameters):
     self.preseed_path = self.mkdtemp(override=tftpd_dir())
     self.internal_pipeline = Pipeline(parent=self, job=self.job, parameters=parameters)
     self.internal_pipeline.add_action(IsoEmptyImage())
     # the preseed file needs to go into the dispatcher apache tmp directory.
     self.internal_pipeline.add_action(DownloaderAction('preseed', self.preseed_path))
     self.internal_pipeline.add_action(DownloaderAction('iso', self.mkdtemp()))
     self.internal_pipeline.add_action(IsoPullInstaller())
     self.internal_pipeline.add_action(QemuCommandLine())
     # prepare overlay at this stage - make it available after installation.
     self.internal_pipeline.add_action(OverlayAction())  # idempotent, includes testdef
     self.internal_pipeline.add_action(ApplyOverlayGuest())
     self.internal_pipeline.add_action(DeployDeviceEnvironment())
コード例 #7
0
ファイル: flasher.py プロジェクト: ivoire/lava
    def populate(self, parameters):
        self.internal_pipeline = Pipeline(
            parent=self, job=self.job, parameters=parameters
        )

        # Download the images
        self.path = self.mkdtemp()
        for image in parameters["images"].keys():
            self.internal_pipeline.add_action(DownloaderAction(image, self.path))

        if self.test_needs_deployment(parameters):
            self.internal_pipeline.add_action(DeployDeviceEnvironment())
        if self.test_needs_overlay(parameters):
            self.internal_pipeline.add_action(OverlayAction())
コード例 #8
0
ファイル: fvp.py プロジェクト: slawr/lava
 def populate(self, parameters):
     self.image_path = self.mkdtemp()
     self.pipeline = Pipeline(parent=self,
                              job=self.job,
                              parameters=parameters)
     if self.test_needs_overlay(parameters):
         self.pipeline.add_action(OverlayAction())
     uniquify = parameters.get("uniquify", True)
     if "images" in parameters:
         for k in sorted(parameters["images"].keys()):
             self.pipeline.add_action(
                 DownloaderAction(k,
                                  self.image_path,
                                  parameters["images"][k],
                                  uniquify=uniquify))
コード例 #9
0
ファイル: lxc.py プロジェクト: d4s/lava-dispatcher
 def populate(self, parameters):
     self.internal_pipeline = Pipeline(parent=self, job=self.job,
                                       parameters=parameters)
     self.internal_pipeline.add_action(LxcCreateAction())
     self.internal_pipeline.add_action(LxcCreateUdevRuleAction())
     if 'packages' in parameters:
         self.internal_pipeline.add_action(LxcStartAction())
         self.internal_pipeline.add_action(LxcAptUpdateAction())
         self.internal_pipeline.add_action(LxcAptInstallAction())
         self.internal_pipeline.add_action(LxcStopAction())
     if self.test_needs_deployment(parameters):
         self.internal_pipeline.add_action(DeployDeviceEnvironment())
     if self.test_needs_overlay(parameters):
         self.internal_pipeline.add_action(OverlayAction())
         self.internal_pipeline.add_action(ApplyLxcOverlay())
コード例 #10
0
    def populate(self, parameters):
        """
        The dispatcher does the first download as the first deployment is not guaranteed to
        have DNS resolution fully working, so we can use the IP address of the dispatcher
        to get it (with the advantage that the dispatcher decompresses it so that the ramdisk
        can pipe the raw image directly from wget to dd.
        This also allows the use of local file:// locations which are visible to the dispatcher
        but not the device.
        """
        self.image_path = self.mkdtemp()
        self.pipeline = Pipeline(parent=self,
                                 job=self.job,
                                 parameters=parameters)
        if self.test_needs_overlay(parameters):
            self.pipeline.add_action(
                OverlayAction())  # idempotent, includes testdef
        uniquify = parameters.get("uniquify", True)
        if "images" in parameters:
            for k in sorted(parameters["images"].keys()):
                self.pipeline.add_action(
                    DownloaderAction(
                        k,
                        path=self.image_path,
                        uniquify=uniquify,
                        params=parameters["images"][k],
                    ))
                if parameters["images"][k].get("apply-overlay", False):
                    if self.test_needs_overlay(parameters):
                        self.pipeline.add_action(ApplyOverlayImage())
            self.pipeline.add_action(DDAction())
        elif "image" in parameters:
            self.pipeline.add_action(
                DownloaderAction(
                    "image",
                    path=self.image_path,
                    uniquify=uniquify,
                    params=parameters["image"],
                ))
            if self.test_needs_overlay(parameters):
                self.pipeline.add_action(ApplyOverlayImage())
            self.pipeline.add_action(DDAction())

        # FIXME: could support tarballs too
        if self.test_needs_deployment(parameters):
            self.pipeline.add_action(DeployDeviceEnvironment())
コード例 #11
0
ファイル: image.py プロジェクト: yuhua-eric/lava
 def populate(self, parameters):
     self.internal_pipeline = Pipeline(parent=self, job=self.job, parameters=parameters)
     path = self.mkdtemp()
     if 'uefi' in parameters:
         uefi_path = self.mkdtemp()
         self.internal_pipeline.add_action(DownloaderAction('uefi', uefi_path))
         # uefi option of QEMU needs a directory, not the filename
         self.set_namespace_data(action=self.name, label='image', key='uefi_dir', value=uefi_path, parameters=parameters)
         # alternatively use the -bios option and standard image args
     for image in parameters['images'].keys():
         if image != 'yaml_line':
             self.internal_pipeline.add_action(DownloaderAction(image, path))
             if parameters['images'][image].get('format', '') == 'qcow2':
                 self.internal_pipeline.add_action(QCowConversionAction(image))
     self.internal_pipeline.add_action(ExtractNfsAction())
     self.internal_pipeline.add_action(OverlayAction())
     self.internal_pipeline.add_action(ApplyOverlayTftp())
     self.internal_pipeline.add_action(DeployDeviceEnvironment())
コード例 #12
0
    def populate(self, parameters):
        self.pipeline = Pipeline(parent=self, job=self.job, parameters=parameters)
        if self.test_needs_overlay(parameters):
            self.pipeline.add_action(OverlayAction())
        # Check if the device has a power command such as HiKey, Dragonboard,
        # etc. against device that doesn't like Nexus, etc.
        if self.job.device.get("fastboot_via_uboot", False):
            self.pipeline.add_action(ConnectDevice())
            self.pipeline.add_action(UBootEnterFastbootAction())
        elif self.job.device.hard_reset_command:
            self.force_prompt = True
            self.pipeline.add_action(ConnectDevice())
            if not is_lxc_requested(self.job):
                self.pipeline.add_action(PrePower())
            self.pipeline.add_action(ResetDevice())
        else:
            self.pipeline.add_action(EnterFastbootAction())

        fastboot_dir = self.mkdtemp()
        for image in sorted(parameters["images"].keys()):
            self.pipeline.add_action(
                DownloaderAction(
                    image, fastboot_dir, params=parameters["images"][image]
                )
            )
            if parameters["images"][image].get("apply-overlay", False):
                if self.test_needs_overlay(parameters):
                    if parameters["images"][image].get("sparse", True):
                        self.pipeline.add_action(ApplyOverlaySparseImage(image))
                    else:
                        use_root_part = parameters["images"][image].get(
                            "root_partition", False
                        )
                        self.pipeline.add_action(
                            ApplyOverlayImage(image, use_root_partition=use_root_part)
                        )

            if self.test_needs_overlay(parameters) and self.test_needs_deployment(
                parameters
            ):
                self.pipeline.add_action(DeployDeviceEnvironment())
        self.pipeline.add_action(FastbootFlashOrderAction())
コード例 #13
0
    def populate(self, parameters):
        self.pipeline = Pipeline(parent=self, job=self.job, parameters=parameters)
        namespace = parameters["namespace"]
        download_dir = Path(self.job.tmp_dir) / "downloads" / namespace
        for image in sorted(parameters["images"].keys()):
            self.pipeline.add_action(
                DownloaderAction(
                    image,
                    download_dir,
                    params=parameters["images"][image],
                    uniquify=parameters.get("uniquify", False),
                )
            )

        postprocess = parameters.get("postprocess")
        if postprocess:
            if postprocess.get("docker"):
                self.pipeline.add_action(PostprocessWithDocker(download_dir))

        if self.test_needs_overlay(parameters):
            self.pipeline.add_action(OverlayAction())
コード例 #14
0
ファイル: apply_overlay.py プロジェクト: jubing13/lava
 def populate(self, parameters):
     self.pipeline = Pipeline(parent=self,
                              job=self.job,
                              parameters=parameters)
     self.pipeline.add_action(
         ExtractNfsRootfs())  # idempotent, checks for nfsrootfs parameter
     self.pipeline.add_action(
         OverlayAction())  # idempotent, includes testdef
     self.pipeline.add_action(
         ExtractRamdisk())  # idempotent, checks for a ramdisk parameter
     self.pipeline.add_action(
         ExtractModules())  # idempotent, checks for a modules parameter
     self.pipeline.add_action(ApplyOverlayTftp())
     if "kernel" in parameters and "type" in parameters["kernel"]:
         self.pipeline.add_action(PrepareKernelAction())
     self.pipeline.add_action(ConfigurePreseedFile(
     ))  # idempotent, checks for a preseed parameter
     self.pipeline.add_action(
         CompressRamdisk())  # idempotent, checks for a ramdisk parameter
     if "depthcharge" in self.job.device["actions"]["boot"]["methods"]:
         self.pipeline.add_action(PrepareKernelAction())
コード例 #15
0
ファイル: apply_overlay.py プロジェクト: d4s/lava-dispatcher
 def populate(self, parameters):
     self.internal_pipeline = Pipeline(parent=self,
                                       job=self.job,
                                       parameters=parameters)
     self.internal_pipeline.add_action(
         ExtractNfsRootfs())  # idempotent, checks for nfsrootfs parameter
     self.internal_pipeline.add_action(
         OverlayAction())  # idempotent, includes testdef
     self.internal_pipeline.add_action(
         ExtractRamdisk())  # idempotent, checks for a ramdisk parameter
     self.internal_pipeline.add_action(
         ExtractModules())  # idempotent, checks for a modules parameter
     self.internal_pipeline.add_action(ApplyOverlayTftp())
     if 'kernel' in parameters and 'type' in parameters['kernel']:
         self.internal_pipeline.add_action(PrepareKernelAction())
     self.internal_pipeline.add_action(ConfigurePreseedFile(
     ))  # idempotent, checks for a preseed parameter
     self.internal_pipeline.add_action(
         CompressRamdisk())  # idempotent, checks for a ramdisk parameter
     if 'depthcharge' in self.job.device['actions']['boot']['methods']:
         self.internal_pipeline.add_action(PrepareKernelAction())
コード例 #16
0
    def populate(self, parameters):
        self.internal_pipeline = Pipeline(parent=self,
                                          job=self.job,
                                          parameters=parameters)
        if self.test_needs_overlay(parameters):
            self.internal_pipeline.add_action(OverlayAction())
        # Check if the device has a power command such as HiKey, Dragonboard,
        # etc. against device that doesn't like Nexus, etc.
        if self.job.device.get('fastboot_via_uboot', False):
            self.internal_pipeline.add_action(ConnectDevice())
            self.internal_pipeline.add_action(UBootEnterFastbootAction())
        elif self.job.device.hard_reset_command:
            self.force_prompt = True
            self.internal_pipeline.add_action(ConnectDevice())
            self.internal_pipeline.add_action(ResetDevice())
        else:
            self.internal_pipeline.add_action(EnterFastbootAction())

        fastboot_dir = self.mkdtemp()
        image_keys = sorted(parameters['images'].keys())
        for image in image_keys:
            if image != 'yaml_line':
                self.internal_pipeline.add_action(
                    DownloaderAction(image, fastboot_dir))
                if parameters['images'][image].get('apply-overlay', False):
                    if self.test_needs_overlay(parameters):
                        if parameters['images'][image].get('sparse', True):
                            self.internal_pipeline.add_action(
                                ApplyOverlaySparseImage(image))
                        else:
                            self.internal_pipeline.add_action(
                                ApplyOverlayImage(image,
                                                  use_root_partition=False))
                if self.test_needs_overlay(parameters) and \
                   self.test_needs_deployment(parameters):
                    self.internal_pipeline.add_action(
                        DeployDeviceEnvironment())
        self.internal_pipeline.add_action(FastbootFlashOrderAction())
コード例 #17
0
ファイル: uuu.py プロジェクト: iwamatsu/lava
    def populate(self, parameters):
        self.parameters = parameters
        self.pipeline = Pipeline(parent=self,
                                 job=self.job,
                                 parameters=parameters)
        if self.test_needs_overlay(parameters):
            self.pipeline.add_action(OverlayAction())
        path = self.mkdtemp()
        self.set_namespace_data(action="uuu-deploy",
                                label="uuu-images",
                                key="root_location",
                                value=path)

        images_param = dict(parameters["images"])
        images = list(images_param.keys())

        self.set_namespace_data(action="uuu-deploy",
                                label="uuu-images",
                                key="images_names",
                                value=images)

        for image in images:
            self.pipeline.add_action(
                DownloaderAction(image,
                                 path=path,
                                 params=parameters["images"][image]))
            if images_param[image].get("apply-overlay", False):
                if self.test_needs_overlay(parameters):
                    use_root_part = (images_param[image].get("root_partition")
                                     is not None)
                    if images_param[image].get("sparse", False):
                        self.pipeline.add_action(
                            ApplyOverlaySparseImage(image_key=image))
                    else:
                        self.pipeline.add_action(
                            ApplyOverlayImage(
                                image_key=image,
                                use_root_partition=use_root_part))
コード例 #18
0
 def populate(self, parameters):
     self.preseed_path = self.mkdtemp(override=filesystem.tftpd_dir())
     self.pipeline = Pipeline(parent=self,
                              job=self.job,
                              parameters=parameters)
     self.pipeline.add_action(IsoEmptyImage())
     # the preseed file needs to go into the dispatcher apache tmp directory.
     self.pipeline.add_action(
         DownloaderAction("preseed",
                          self.preseed_path,
                          params=parameters["images"]["preseed"]))
     self.pipeline.add_action(
         DownloaderAction("iso",
                          self.mkdtemp(),
                          params=parameters["images"]["iso"]))
     self.pipeline.add_action(IsoPullInstaller())
     self.pipeline.add_action(QemuCommandLine())
     # prepare overlay at this stage - make it available after installation.
     if self.test_needs_overlay(parameters):
         self.pipeline.add_action(
             OverlayAction())  # idempotent, includes testdef
         self.pipeline.add_action(ApplyOverlayGuest())
     if self.test_needs_deployment(parameters):
         self.pipeline.add_action(DeployDeviceEnvironment())
コード例 #19
0
def test_export_data(data, prefix, result):
    action = OverlayAction()
    fout = Recorder()
    action._export_data(fout, data, prefix)
    assert sorted(fout.data.strip("\n").split("\n")) == result
コード例 #20
0
def test_export_data():
    action = OverlayAction()
    fout = Recorder()

    tests_data = [
        ({}, "", [""]),
        ({
            "hello": "world"
        }, "", ["export hello='world'"]),
        (
            {
                "hello": "world",
                "something": "to say",
                "an_int": 1
            },
            "",
            [
                "export an_int=1", "export hello='world'",
                "export something='to say'"
            ],
        ),
        (
            [
                {
                    "board_id": "49EBE14005DA77C"
                },
                {
                    "parent": True,
                    "usb_vendor_id": "12d1",
                    "usb_product_id": "3609"
                },
            ],
            "DEVICE_INFO",
            [
                "export DEVICE_INFO_0_board_id='49EBE14005DA77C'",
                "export DEVICE_INFO_1_parent=1",
                "export DEVICE_INFO_1_usb_product_id='3609'",
                "export DEVICE_INFO_1_usb_vendor_id='12d1'",
            ],
        ),
        (
            [{
                "board_id": "S_NO81730000"
            }, {
                "board_id": "S_NO81730001"
            }],
            "STATIC_INFO",
            [
                "export STATIC_INFO_0_board_id='S_NO81730000'",
                "export STATIC_INFO_1_board_id='S_NO81730001'",
            ],
        ),
        (
            [{
                "SATA":
                "/dev/disk/by-id/ata-SanDisk_SSD_PLUS_120GB_190504A00573"
            }],
            "STORAGE_INFO",
            [
                "export STORAGE_INFO_0_SATA='/dev/disk/by-id/ata-SanDisk_SSD_PLUS_120GB_190504A00573'"
            ],
        ),
    ]
    for (data, prefix, result) in tests_data:
        action._export_data(fout, data, prefix)
        assert sorted(fout.data.strip("\n").split("\n")) == result
        fout.clean()
コード例 #21
0
    def populate(self, parameters):
        self.internal_pipeline = Pipeline(parent=self,
                                          job=self.job,
                                          parameters=parameters)
        image_keys = list(parameters['images'].keys())
        if self.test_needs_overlay(parameters):
            self.logger.debug("[SEOJI] add OverlayAction")
            self.internal_pipeline.add_action(OverlayAction())
        # Check if the device has a power command such as HiKey, Dragonboard,
        # etc. against device that doesn't like Nexus, etc.
        if self.job.device.get('fastboot_via_uboot', False):
            self.internal_pipeline.add_action(ConnectDevice())
            self.internal_pipeline.add_action(UBootEnterFastbootAction())
        elif self.job.device.hard_reset_command:
            self.force_prompt = True
            self.internal_pipeline.add_action(ConnectDevice())
            if not is_lxc_requested(self.job):
                self.internal_pipeline.add_action(PrePower())
            self.internal_pipeline.add_action(ResetDevice())
        elif 'nexell_ext' in image_keys:
            # Nexell extension
            #self.internal_pipeline.add_action(OverlayAction())

            # download build result
            if 'url' in parameters['images']['nexell_ext']:
                self.logger.debug(
                    "[SEOJI] url:" +
                    str(parameters['images']['nexell_ext']['url']))
                self.path = '/opt/share'
                self.internal_pipeline.add_action(
                    DownloaderAction('nexell_ext', self.path))
                #if 'compression' in parameters['images']['nexell_ext]:
                #self.logger.debug("[SEOJI] yes compression param exist")

            self.logger.debug("SUKER: parameters in deploy/fastboot.py : " +
                              str(parameters))
            self.internal_pipeline.add_action(
                EnterNexellFastbootAction(parameters, 'deploy_script',
                                          'deploy_command1', 'dir_name'))
            self.internal_pipeline.add_action(
                ApplyNexellDeployAction(parameters, 'deploy_script',
                                        'deploy_command2', 'dir_name'))
        else:
            self.internal_pipeline.add_action(EnterFastbootAction())

        fastboot_dir = self.mkdtemp()
        image_keys = sorted(parameters['images'].keys())
        # Nexell extension
        if 'nexell_ext' in image_keys:
            self.logger.debug("[SEOJI] pass adding DownloaderAction")
            #self.internal_pipeline.add_action(DeployDeviceEnvironment())
        else:
            for image in image_keys:
                if image != 'yaml_line':
                    self.internal_pipeline.add_action(
                        DownloaderAction(image, fastboot_dir))
                    if parameters['images'][image].get('apply-overlay', False):
                        if self.test_needs_overlay(parameters):
                            if parameters['images'][image].get('sparse', True):
                                self.internal_pipeline.add_action(
                                    ApplyOverlaySparseImage(image))
                            else:
                                self.internal_pipeline.add_action(
                                    ApplyOverlayImage(
                                        image, use_root_partition=False))
                    if self.test_needs_overlay(parameters) and \
                       self.test_needs_deployment(parameters):
                        self.internal_pipeline.add_action(
                            DeployDeviceEnvironment())
            self.internal_pipeline.add_action(FastbootFlashOrderAction())
        '''