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", ), )
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', ))
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, )
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