Ejemplo n.º 1
0
def repo(src, present=True, filename=None):
    """
    Add/remove apt repositories.

    + src: apt source string eg ``deb http://X hardy main``
    + present: whether the repo should exist on the system
    + filename: optional filename to use ``/etc/apt/sources.list.d/<filename>.list``. By
      default uses ``/etc/apt/sources.list``.

    **Example:**

    .. code:: python

        apt.repo(
            name="Install VirtualBox repo",
            src="deb https://download.virtualbox.org/virtualbox/debian bionic contrib",
        )
    """

    # Get the target .list file to manage
    if filename:
        filename = "/etc/apt/sources.list.d/{0}.list".format(filename)
    else:
        filename = "/etc/apt/sources.list"

    # Work out if the repo exists already
    apt_sources = host.get_fact(AptSources)

    is_present = False
    repo = parse_apt_repo(src)
    if repo and repo in apt_sources:
        is_present = True

    # Doesn't exist and we want it
    if not is_present and present:
        yield from files.line(
            filename,
            src,
            escape_regex_characters=True,
        )
        apt_sources.append(repo)

    # Exists and we don't want it
    elif is_present and not present:
        yield from files.line(
            filename,
            src,
            present=False,
            assume_present=True,
            escape_regex_characters=True,
        )
        apt_sources.remove(repo)

    else:
        host.noop(
            'apt repo "{0}" {1}'.format(
                src,
                "exists" if present else "does not exist",
            ), )
Ejemplo n.º 2
0
def repo(src, present=True, filename=None, state=None, host=None):
    '''
    Add/remove apt repositories.

    + src: apt source string eg ``deb http://X hardy main``
    + present: whether the repo should exist on the system
    + filename: optional filename to use ``/etc/apt/sources.list.d/<filename>.list``. By
      default uses ``/etc/apt/sources.list``.

    Example:

    .. code:: python

        apt.repo(
            name='Install VirtualBox repo',
            src='deb https://download.virtualbox.org/virtualbox/debian bionic contrib',
        )
    '''

    # Get the target .list file to manage
    if filename:
        filename = '/etc/apt/sources.list.d/{0}.list'.format(filename)
    else:
        filename = '/etc/apt/sources.list'

    # Work out if the repo exists already
    apt_sources = host.fact.apt_sources

    is_present = False
    repo = parse_apt_repo(src)
    if repo and repo in apt_sources:
        is_present = True

    # Doesn't exist and we want it
    if not is_present and present:
        yield files.line(filename, src, state=state, host=host)
        apt_sources.append(repo)

    # Exists and we don't want it
    elif is_present and not present:
        yield files.line(
            filename,
            src,
            present=False,
            assume_present=True,
            state=state,
            host=host,
        )
        apt_sources.remove(repo)

    else:
        host.noop('apt repo "{0}" {1}'.format(
            src,
            'exists' if present else 'does not exist',
        ))
Ejemplo n.º 3
0
Archivo: apt.py Proyecto: ge-fa/pyinfra
def repo(state, host, name, present=True, filename=None):
    '''
    Manage apt repositories.

    + name: apt source string eg ``deb http://X hardy main``
    + present: whether the repo should exist on the system
    + filename: optional filename to use ``/etc/apt/sources.list.d/<filename>.list``. By
      default uses ``/etc/apt/sources.list``.
    '''

    # Get the target .list file to manage
    if filename:
        filename = '/etc/apt/sources.list.d/{0}.list'.format(filename)
    else:
        filename = '/etc/apt/sources.list'

    # Work out if the repo exists already
    apt_sources = host.fact.apt_sources

    is_present = False
    repo = parse_apt_repo(name)
    if repo and repo in apt_sources:
        is_present = True

    # Doesn't exist and we want it
    if not is_present and present:
        yield files.line(
            state,
            host,
            filename,
            name,
        )

    # Exists and we don't want it
    if is_present and not present:
        yield files.line(
            state,
            host,
            filename,
            name,
            present=False,
        )
Ejemplo n.º 4
0
def repo(state, host, name, present=True, filename=None):
    '''
    Manage apt repositories.

    + name: apt source string eg ``deb http://X hardy main``
    + present: whether the repo should exist on the system
    + filename: optional filename to use ``/etc/apt/sources.list.d/<filename>.list``. By
      default uses ``/etc/apt/sources.list``.
    '''

    commands = []

    apt_sources = host.fact.apt_sources

    # Get the target .list file to manage
    if filename:
        filename = '/etc/apt/sources.list.d/{0}.list'.format(filename)
    else:
        filename = '/etc/apt/sources.list'

    # Parse out the URL from the name if available
    repo_url = name
    repo = parse_apt_repo(name)
    if repo:
        repo_url, _ = repo

    is_present = repo_url in apt_sources

    # Doesn't exist and we want it
    if not is_present and present:
        commands.extend(files.line(
            state, host, filename, name
        ))

    # Exists and we don't want it
    if is_present and not present:
        commands.extend(files.line(
            state, host, filename, name, present=False
        ))

    return commands