From 08a53cb130b63a6a4f9d4263387060e39e9e3dcf Mon Sep 17 00:00:00 2001 From: Steven Armstrong Date: Wed, 23 Mar 2011 13:18:13 +0100 Subject: [PATCH] new type: __apt_ppa Signed-off-by: Steven Armstrong --- conf/type/__apt_ppa/explorer/state | 28 +++++++++++ .../type/__apt_ppa/files/check-apt-repository | 42 +++++++++++++++++ .../__apt_ppa/files/remove-apt-repository | 42 +++++++++++++++++ conf/type/__apt_ppa/gencode-remote | 35 ++++++++++++++ conf/type/__apt_ppa/man.text | 47 +++++++++++++++++++ conf/type/__apt_ppa/manifest | 33 +++++++++++++ conf/type/__apt_ppa/parameter/required | 1 + 7 files changed, 228 insertions(+) create mode 100755 conf/type/__apt_ppa/explorer/state create mode 100755 conf/type/__apt_ppa/files/check-apt-repository create mode 100755 conf/type/__apt_ppa/files/remove-apt-repository create mode 100755 conf/type/__apt_ppa/gencode-remote create mode 100644 conf/type/__apt_ppa/man.text create mode 100755 conf/type/__apt_ppa/manifest create mode 100644 conf/type/__apt_ppa/parameter/required diff --git a/conf/type/__apt_ppa/explorer/state b/conf/type/__apt_ppa/explorer/state new file mode 100755 index 00000000..c50af3f0 --- /dev/null +++ b/conf/type/__apt_ppa/explorer/state @@ -0,0 +1,28 @@ +#!/bin/sh +# +# 2011 Steven Armstrong (steven-cdist at armstrong.cc) +# +# This file is part of cdist. +# +# cdist is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# cdist is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with cdist. If not, see . +# +# +# Get the current state of the ppa. +# + +name="$__object_id" + +# FIXME: on first run check-apt-repository may not be installed +check-apt-repository "$name" && echo enabled || echo disabled + diff --git a/conf/type/__apt_ppa/files/check-apt-repository b/conf/type/__apt_ppa/files/check-apt-repository new file mode 100755 index 00000000..4f4252c1 --- /dev/null +++ b/conf/type/__apt_ppa/files/check-apt-repository @@ -0,0 +1,42 @@ +#!/usr/bin/env python +# +# Check if the given apt repository is installed or not. +# Exit with: +# 0: if it is installed +# 1: if not +# 2: on error +# + +import sys +from aptsources import distro, sourceslist +from softwareproperties import ppa + + +def is_repository_installed(repository): + #print 'repository:', repository + codename = distro.get_distro().codename + #print 'codename:', codename + (line, file) = ppa.expand_ppa_line(repository.strip(), codename) + #print 'line:', line + #print 'file:', file + sources_list = sourceslist.SourcesList() + source_entry = sourceslist.SourceEntry(line, file) + + if source_entry in sources_list: + #print 'yes' + return True + else: + #print 'no' + return False + +if __name__ == '__main__': + if (len(sys.argv) != 2): + print 'Error: need a repository as argument' + sys.exit(2) + #repository = 'ppa:freenx-team' + repository = sys.argv[1] + if is_repository_installed(repository): + sys.exit(0) + else: + sys.exit(1) + diff --git a/conf/type/__apt_ppa/files/remove-apt-repository b/conf/type/__apt_ppa/files/remove-apt-repository new file mode 100755 index 00000000..b57a07f6 --- /dev/null +++ b/conf/type/__apt_ppa/files/remove-apt-repository @@ -0,0 +1,42 @@ +#!/usr/bin/env python +# +# Remove the given apt repository. +# +# Exit with: +# 0: if it worked +# 1: if not +# 2: on other error + + +import sys +from aptsources import distro, sourceslist +from softwareproperties import ppa +from softwareproperties.SoftwareProperties import SoftwareProperties + + +def remove_repository(repository): + #print 'repository:', repository + codename = distro.get_distro().codename + #print 'codename:', codename + (line, file) = ppa.expand_ppa_line(repository.strip(), codename) + #print 'line:', line + #print 'file:', file + source_entry = sourceslist.SourceEntry(line, file) + + try: + sp = SoftwareProperties() + sp.remove_source(source_entry) + return True + except ValueError: + print >> sys.stderr, "Error: '%s' doesn't exists in a sourcelist file" % line + return False + +if __name__ == '__main__': + if (len(sys.argv) != 2): + print >> sys.stderr, 'Error: need a repository as argument' + sys.exit(2) + repository = sys.argv[1] + if remove_repository(repository): + sys.exit(0) + else: + sys.exit(1) diff --git a/conf/type/__apt_ppa/gencode-remote b/conf/type/__apt_ppa/gencode-remote new file mode 100755 index 00000000..0e7fe163 --- /dev/null +++ b/conf/type/__apt_ppa/gencode-remote @@ -0,0 +1,35 @@ +#!/bin/sh +# +# 2011 Steven Armstrong (steven-cdist at armstrong.cc) +# +# This file is part of cdist. +# +# cdist is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# cdist is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with cdist. If not, see . +# + +name="$__object_id" +state_should="$(cat "$__object/parameter/state")" +state_is="$(cat "$__object/explorer/state")" + +if [ "$state_should" != "$state_is" ]; then + case "$state_should" in + enabled) + echo add-apt-repository \"$name\" + ;; + disabled) + echo remove-apt-repository \"$name\" + ;; + esac +fi + diff --git a/conf/type/__apt_ppa/man.text b/conf/type/__apt_ppa/man.text new file mode 100644 index 00000000..73fabc7f --- /dev/null +++ b/conf/type/__apt_ppa/man.text @@ -0,0 +1,47 @@ +cdist-type__apt_ppa(7) +========================== +Steven Armstrong + + +NAME +---- +cdist-type__apt_ppa - Manage ppa repositories + + +DESCRIPTION +----------- +This cdist type allows manage ubuntu ppa repositories. + + +REQUIRED PARAMETERS +------------------- +state:: + The state the ppa should be in, either "enabled" or "disabled". + + +OPTIONAL PARAMETERS +------------------- +None. + + +EXAMPLES +-------- + +-------------------------------------------------------------------------------- +# Enable a ppa repository +__apt_ppa ppa:sans-intern/missing-bits --state enabled + +# Disable a ppa repository +__apt_ppa ppa:sans-intern/missing-bits --state disabled +-------------------------------------------------------------------------------- + + +SEE ALSO +-------- +- cdist-type(7) + + +COPYING +------- +Copyright \(C) 2011 Steven Armstrong. Free use of this software is +granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/conf/type/__apt_ppa/manifest b/conf/type/__apt_ppa/manifest new file mode 100755 index 00000000..a97ced75 --- /dev/null +++ b/conf/type/__apt_ppa/manifest @@ -0,0 +1,33 @@ +#!/bin/sh +# +# 2011 Steven Armstrong (steven-cdist at armstrong.cc) +# +# This file is part of cdist. +# +# cdist is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# cdist is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with cdist. If not, see . +# + + +__package python-software-properties --state installed + +require="__package/python-software-properties" \ + __file /usr/local/bin/check-apt-repository \ + --source "$__type/files/check-apt-repository" \ + --mode 0755 + +require="__package/python-software-properties" \ + __file /usr/local/bin/remove-apt-repository \ + --source "$__type/files/remove-apt-repository" \ + --mode 0755 + diff --git a/conf/type/__apt_ppa/parameter/required b/conf/type/__apt_ppa/parameter/required new file mode 100644 index 00000000..ff72b5c7 --- /dev/null +++ b/conf/type/__apt_ppa/parameter/required @@ -0,0 +1 @@ +state