コード例 #1
0
def main():
    """The main function."""
    module = AnsibleModule(
        argument_spec=dict(
            name=dict(aliases=['pkg'], type='list'),
            state=dict(
                default='installed',
                choices=[
                    'absent', 'present', 'installed', 'removed', 'latest']),
            enablerepo=dict(type='list', default=[]),
            disablerepo=dict(type='list', default=[]),
            list=dict(),
            conf_file=dict(default=None),
            disable_gpg_check=dict(default=False, type='bool'),
        ),
        required_one_of=[['name', 'list']],
        mutually_exclusive=[['name', 'list']],
        supports_check_mode=True)
    params = module.params
    if params['list']:
        base = _base(
            module, params['conf_file'], params['disable_gpg_check'],
            params['disablerepo'], params['enablerepo'])
        list_items(module, base, params['list'])
    else:
        # Note: base takes a long time to run so we want to check for failure
        # before running it.
        if not util.am_i_root():
            module.fail_json(msg="This command has to be run under the root user.")
        base = _base(
            module, params['conf_file'], params['disable_gpg_check'],
            params['disablerepo'], params['enablerepo'])

        ensure(module, base, params['state'], params['name'])
コード例 #2
0
ファイル: dnf.py プロジェクト: RajeevNambiar/temp
def main():
    """The main function."""
    module = AnsibleModule(
        argument_spec=dict(
            name=dict(aliases=['pkg'], type='list'),
            state=dict(
                default='installed',
                choices=[
                    'absent', 'present', 'installed', 'removed', 'latest']),
            enablerepo=dict(type='list', default=[]),
            disablerepo=dict(type='list', default=[]),
            list=dict(),
            conf_file=dict(default=None),
            disable_gpg_check=dict(default=False, type='bool'),
        ),
        required_one_of=[['name', 'list']],
        mutually_exclusive=[['name', 'list']],
        supports_check_mode=True)
    params = module.params
    if params['list']:
        base = _base(
            module, params['conf_file'], params['disable_gpg_check'],
            params['disablerepo'], params['enablerepo'])
        list_items(module, base, params['list'])
    else:
        # Note: base takes a long time to run so we want to check for failure
        # before running it.
        if not util.am_i_root():
            module.fail_json(msg="This command has to be run under the root user.")
        base = _base(
            module, params['conf_file'], params['disable_gpg_check'],
            params['disablerepo'], params['enablerepo'])

        ensure(module, base, params['state'], params['name'])
コード例 #3
0
ファイル: __init__.py プロジェクト: hiddenk/dnf
    def _make_ready(self):
        if self._ready:
            return

        self._ready = True
        self._system_cachedir = self.prefix
        if util.am_i_root():
            self._cachedir = self._system_cachedir
        else:
            try:
                user_prefix = misc.getCacheDir()
                self._cachedir = user_prefix
            except (IOError, OSError) as e:
                logger.critical(_('Could not set cachedir: %s'), ucd(e))
コード例 #4
0
ファイル: __init__.py プロジェクト: whydoubt/dnf
    def _make_ready(self):
        if self._ready:
            return

        self._ready = True
        self._system_cachedir = self.prefix
        if util.am_i_root():
            self._cachedir = self._system_cachedir
        else:
            try:
                user_prefix = misc.getCacheDir()
                self._cachedir = user_prefix
            except (IOError, OSError) as e:
                logger.critical(_('Could not set cachedir: %s'), ucd(e))
コード例 #5
0
def do_set(inp):
    if not util.am_i_root():
        return {
            "error": {
                "message": "only the root user can make package changes",
                "kind": "failed"
            } }
    try:
        upds=inp["updates"]
        noop=inp["ral"]["noop"]
        base=dnf_base()
        was = {}

        for upd in upds:
            name=upd["name"]
            ensure=upd["should"]["ensure"]

            is_pkg=find_installed(base, name)
            if is_pkg:
                was[name]=is_pkg.evr
            else:
                was[name]="absent"

            if ensure == "present" or ensure == "installed":
              if not is_pkg:
                  base.install(name)
            elif ensure == "absent" or ensure == "purged":
              if is_pkg:
                  base.remove(name)
            elif ensure == "held":
              # No idea what this is supposed to do
              return { "error": { "message": "not implemented",
                                  "kind": "failed" }}
            elif ensure == "latest":
              if is_pkg:
                  base.upgrade(name)
              else:
                  base.install(name)
            else:
              # ensure must be a version number
              target=("%s-%s" % (name, ensure))
              if is_pkg:
                  base.upgrade(target)
              else:
                  base.install(target)

        # Run the transaction
        base.resolve()
        if not noop:
            base.download_packages(base.transaction.install_set)
            base.do_transaction()

        # Generate changes
        result = { "changes": [], "derive": False }
        names = [ upd["name"] for upd in upds ]
        pkgs=[p for p in base.transaction.install_set if p.name in names]
        for pkg in pkgs:
            change={
                "name": pkg.name,
                "ensure": {  "is": pkgs[0].evr, "was": was[pkg.name] } }
            result["changes"].append(change)

        pkgs=[p for p in base.transaction.remove_set if p.name in names]
        for pkg in pkgs:
            change={
                "name": pkg.name,
                "ensure": { "is": "absent", "was": was[p.name] } }
            result["changes"].append(change)

        return result
    except exceptions.Error as e:
        return { "error": { "message": str(e), "kind": "failed" } }
    finally:
        base.close()
コード例 #6
0
ファイル: dnf.py プロジェクト: damhau/ansible-elk
def ensure(module, base, state, names):
    if not util.am_i_root():
        module.fail_json(msg="This command has to be run under the root user.")

    if names == ['*'] and state == 'latest':
        base.upgrade_all()
    else:
        pkg_specs, group_specs, filenames = cli.commands.parse_spec_group_file(
            names)
        if group_specs:
            base.read_comps()

        groups = []
        for group_spec in group_specs:
            group = base.comps.group_by_pattern(group_spec)
            if group:
                groups.append(group)
            else:
                module.fail_json(
                    msg="No group {} available.".format(group_spec))

        if state in ['installed', 'present']:
            # Install files.
            for filename in filenames:
                base.package_install(base.add_remote_rpm(filename))
            # Install groups.
            for group in groups:
                base.group_install(group, const.GROUP_PACKAGE_TYPES)
            # Install packages.
            for pkg_spec in pkg_specs:
                _mark_package_install(module, base, pkg_spec)

        elif state == 'latest':
            # "latest" is same as "installed" for filenames.
            for filename in filenames:
                base.package_install(base.add_remote_rpm(filename))
            for group in groups:
                try:
                    base.group_upgrade(group)
                except exceptions.CompsError:
                    # If not already installed, try to install.
                    base.group_install(group, const.GROUP_PACKAGE_TYPES)
            for pkg_spec in pkg_specs:
                try:
                    base.upgrade(pkg_spec)
                except dnf.exceptions.MarkingError:
                    # If not already installed, try to install.
                    _mark_package_install(module, base, pkg_spec)

        else:
            if filenames:
                module.fail_json(
                    msg="Cannot remove paths -- please specify package name.")

            installed = base.sack.query().installed()
            for group in groups:
                if installed.filter(name=group.name):
                    base.group_remove(group)
            for pkg_spec in pkg_specs:
                if installed.filter(name=pkg_spec):
                    base.remove(pkg_spec)

    if not base.resolve():
        module.exit_json(msg="Nothing to do")
    else:
        if module.check_mode:
            module.exit_json(changed=True)
        base.download_packages(base.transaction.install_set)
        base.do_transaction()
        response = {'changed': True, 'results': []}
        for package in base.transaction.install_set:
            response['results'].append("Installed: {}".format(package))
        for package in base.transaction.remove_set:
            response['results'].append("Removed: {}".format(package))

        module.exit_json(**response)