Exemple #1
0
        def cbCreateTargets(fbmirrors,
                            mirrors,
                            schedulers,
                            session,
                            push_pull=True):
            # For each command, we prepare the targets list
            # There is one targets list per command because the root package
            # path may change according to the package
            for command in commands:
                targets_to_insert = []
                root = command['root']
                if root == None:
                    root = self.config.repopath
                for i in range(len(targets)):
                    if push_pull:
                        # FIXME: we only take the the first mirrors
                        mirror = mirrors[i]
                        fallback = fbmirrors[i]
                        uri = '%s://%s:%s%s' % (mirror['protocol'],
                                                mirror['server'],
                                                str(mirror['port']),
                                                mirror['mountpoint']) + \
                              '||' + '%s://%s:%s%s' % (fallback['protocol'],
                                                       fallback['server'],
                                                       str(fallback['port']),
                                                       fallback['mountpoint'])
                    else:
                        uri = '%s://%s' % ('file', root)

                    targetsdata[i]['mirrors'] = uri
                    # Keep not blacklisted target name for commands_on_host
                    # creation.
                    targets_name.append(targets[i][1])
                    # Maybe could be done in prepareTarget
                    targetsdata[i] = self.blacklistTargetHostname(
                        targetsdata[i])
                    targets_to_insert.append(
                        (dict(targetsdata[i]), targets[i][1], schedulers[i]))
                targets_to_insert_list.append(targets_to_insert)

            if session == None:
                session = create_session(transactional=True)
            session.begin()
            ret = []
            for cmd, targets_to_insert in zip(commands,
                                              targets_to_insert_list):

                time_defaults = self.__getTimeDefaults(cmd["start_date"],
                                                       cmd["end_date"])
                cmd["start_date"], cmd["end_date"], cmd[
                    "max_connection_attempt"] = time_defaults

                cobj = self.createCommand(
                    session, cmd['package_id'], cmd['start_file'],
                    cmd['parameters'], cmd['files'], cmd['start_script'],
                    cmd['clean_on_success'], cmd['start_date'],
                    cmd['end_date'], cmd['connect_as'], ctx.userid,
                    cmd['title'], cmd['issue_halt_to'], cmd['do_reboot'],
                    cmd['do_wol'], cmd['next_connection_delay'],
                    cmd['max_connection_attempt'], cmd['do_inventory'],
                    cmd['maxbw'], cmd['deployment_intervals'],
                    cmd['fk_bundle'], cmd['order_in_bundle'], cmd['proxies'],
                    cmd['proxy_mode'], cmd['state'])
                session.flush()
                ret.append(cobj.getId())

                for atarget, target_name, ascheduler in targets_to_insert:
                    order_in_proxy = None
                    max_clients_per_proxy = 0

                    target = Target()
                    target.target_macaddr = atarget["target_macaddr"]
                    target.id_group = atarget["id_group"]
                    target.target_uuid = atarget["target_uuid"]
                    target.target_bcast = atarget["target_bcast"]
                    target.target_name = atarget["target_name"]
                    target.target_ipaddr = atarget["target_ipaddr"]
                    target.mirrors = atarget["mirrors"]
                    target.target_network = atarget["target_network"]

                    session.add(target)
                    session.flush()
                    if hasattr(session, "refresh"):
                        session.refresh(target)

                    try:
                        candidates = filter(
                            lambda (x): x['uuid'] == atarget["target_uuid"],
                            cmd['proxies'])
                        if len(candidates) == 1:
                            max_clients_per_proxy = candidates[0][
                                'max_clients']
                            order_in_proxy = candidates[0]['priority']
                    except ValueError:
                        self.logger.warn(
                            "Failed to get values 'order_in_proxy' or 'max_clients'"
                        )
                    coh_to_insert.append(
                        self.createCommandsOnHost(
                            cobj.getId(), atarget, target.id, target_name,
                            cmd['max_connection_attempt'], cmd['start_date'],
                            cmd['end_date'], ascheduler, order_in_proxy,
                            max_clients_per_proxy))

            session.execute(self.commands_on_host.insert(), coh_to_insert)
            session.commit()

            return ret
Exemple #2
0
        def cbCreateTargets(fbmirrors, mirrors, schedulers, push_pull=True):

            for i in range(len(targets)):
                if push_pull:
                    # FIXME: we only take the the first mirrors
                    mirror = mirrors[i]
                    fallback = fbmirrors[i]
                    uri = '%s://%s:%s%s' % (mirror['protocol'],
                                            mirror['server'],
                                            str(mirror['port']),
                                            mirror['mountpoint']) \
                        + '||' + '%s://%s:%s%s' % (fallback['protocol'],
                                                   fallback['server'],
                                                   str(fallback['port']),
                                                   fallback['mountpoint'])
                else:
                    uri = '%s://%s' % ('file', root)

                targetsdata[i]['mirrors'] = uri
                # Keep not blacklisted target name for commands_on_host
                # creation.
                targets_name.append(targets[i][1])
                # Maybe could be done in prepareTarget
                targetsdata[i] = self.blacklistTargetHostname(targetsdata[i])

                targets_to_insert.append(
                    (targetsdata[i], targets[i][1], schedulers[i]))
            session = create_session()
            session.begin()
            cmd = self.createCommand(
                session, package_id, start_file, parameters, files,
                start_script, clean_on_success, start_date, end_date,
                connect_as, ctx.userid, title, do_halt, do_reboot, do_wol,
                next_connection_delay, max_connection_attempt, do_inventory,
                maxbw, deployment_intervals, fk_bundle, order_in_bundle,
                proxies, proxy_mode, state)
            session.flush()

            for atarget, target_name, ascheduler in targets_to_insert:
                target = Target()
                target.target_macaddr = atarget["target_macaddr"]
                target.id_group = atarget["id_group"]
                target.target_uuid = atarget["target_uuid"]
                target.target_bcast = atarget["target_bcast"]
                target.target_name = atarget["target_name"]
                target.target_ipaddr = atarget["target_ipaddr"]
                target.mirrors = atarget["mirrors"]
                target.target_network = atarget["target_network"]

                session.add(target)
                session.flush()
                if hasattr(session, "refresh"):
                    session.refresh(target)

                order_in_proxy = None
                max_clients_per_proxy = 0
                try:
                    candidates = filter(
                        lambda (x): x['uuid'] == atarget["target_uuid"],
                        proxies)
                    if len(candidates) == 1:
                        max_clients_per_proxy = candidates[0]['max_clients']
                        order_in_proxy = candidates[0]['priority']
                except ValueError:
                    self.logger.warn(
                        "Failed to get values 'order_in_proxy' or 'max_clients'"
                    )
                coh_to_insert.append(
                    self.createCommandsOnHost(cmd.getId(), atarget, target.id,
                                              target_name,
                                              max_connection_attempt,
                                              start_date, end_date, ascheduler,
                                              order_in_proxy,
                                              max_clients_per_proxy))
            session.execute(self.commands_on_host.insert(), coh_to_insert)
            session.commit()

            return cmd.getId()
Exemple #3
0
        def cbCreateTargets(fbmirrors, mirrors, schedulers, push_pull=True):
            for i in range(len(targets)):
                if push_pull:
                    # FIXME: we only take the the first mirrors
                    mirror = mirrors[i]
                    fallback = fbmirrors[i]
                    uri = '%s://%s:%s%s' % (mirror['protocol'],
                                            mirror['server'],
                                            str(mirror['port']),
                                            mirror['mountpoint']) \
                        + '||' + '%s://%s:%s%s' % (fallback['protocol'],
                                                   fallback['server'],
                                                   str(fallback['port']),
                                                   fallback['mountpoint'])
                else:
                    uri = '%s://%s' % ('file', root)

                targetsdata[i]['mirrors'] = uri
                # Keep not blacklisted target name for commands_on_host
                # creation.
                targets_name.append(targets[i][1])
                # Maybe could be done in prepareTarget
                targetsdata[i] = self.blacklistTargetHostname(targetsdata[i])

                targets_to_insert.append(
                    (targetsdata[i], targets[i][1], schedulers[i]))
            session = create_session()
            session.begin()

            for atarget, target_name, ascheduler in targets_to_insert:
                target = Target()
                target.target_macaddr = atarget["target_macaddr"]
                target.id_group = atarget["id_group"]
                target.target_uuid = atarget["target_uuid"]
                target.target_bcast = atarget["target_bcast"]
                target.target_name = atarget["target_name"]
                target.target_ipaddr = atarget["target_ipaddr"]
                target.mirrors = atarget["mirrors"]
                target.target_network = atarget["target_network"]

                session.add(target)
                session.flush()
                if hasattr(session, "refresh"):
                    session.refresh(target)

                order_in_proxy = None
                max_clients_per_proxy = 0
                try:
                    candidates = filter(
                        lambda (x): x['uuid'] == atarget["target_uuid"],
                        proxies)
                    if len(candidates) == 1:
                        max_clients_per_proxy = candidates[0]['max_clients']
                        order_in_proxy = candidates[0]['priority']
                except ValueError:
                    self.logger.warn(
                        "Failed to get values 'order_in_proxy' or 'max_clients'"
                    )
                coh_to_insert.append(
                    self.createCommandsOnHost(cmd_id, atarget, target.id,
                                              target_name,
                                              cmd.max_connection_attempt,
                                              cmd.start_date, cmd.end_date,
                                              ascheduler, order_in_proxy,
                                              max_clients_per_proxy))
            session.execute(self.commands_on_host.insert(), coh_to_insert)

            cohs = [
                coh for coh in cmd.getCohIds(target_uuids=target_uuids)
                if coh.id not in existing_coh_ids
            ]

            def _get_phase(name):
                return phases.get(name,
                                  False) == 'on' and 'enable' or 'disable'

            self._createPhases(session,
                               cohs,
                               cmd.do_imaging_menu,
                               _get_phase('do_wol'),
                               cmd.files,
                               _get_phase('start_script'),
                               _get_phase('clean_on_success'),
                               _get_phase('do_inventory'),
                               _get_phase('do_halt'),
                               _get_phase('do_reboot'),
                               _get_phase('do_windows_update'),
                               is_quick_action=False)
            session.commit()
            self._force_command_type(cmd_id, 2)
            self._set_command_ready(cmd_id)
            return cmd_id