diff options
Diffstat (limited to 'library/packaging/svr4pkg')
-rw-r--r-- | library/packaging/svr4pkg | 234 |
1 files changed, 0 insertions, 234 deletions
diff --git a/library/packaging/svr4pkg b/library/packaging/svr4pkg deleted file mode 100644 index e95d4d8643..0000000000 --- a/library/packaging/svr4pkg +++ /dev/null @@ -1,234 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- - -# (c) 2012, Boyd Adamson <boyd () boydadamson.com> -# -# This file is part of Ansible -# -# Ansible 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. -# -# Ansible 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 Ansible. If not, see <http://www.gnu.org/licenses/>. -# - -DOCUMENTATION = ''' ---- -module: svr4pkg -short_description: Manage Solaris SVR4 packages -description: - - Manages SVR4 packages on Solaris 10 and 11. - - These were the native packages on Solaris <= 10 and are available - as a legacy feature in Solaris 11. - - Note that this is a very basic packaging system. It will not enforce - dependencies on install or remove. -version_added: "0.9" -author: Boyd Adamson -options: - name: - description: - - Package name, e.g. C(SUNWcsr) - required: true - - state: - description: - - Whether to install (C(present)), or remove (C(absent)) a package. - - If the package is to be installed, then I(src) is required. - - The SVR4 package system doesn't provide an upgrade operation. You need to uninstall the old, then install the new package. - required: true - choices: ["present", "absent"] - - src: - description: - - Specifies the location to install the package from. Required when C(state=present). - - "Can be any path acceptable to the C(pkgadd) command's C(-d) option. e.g.: C(somefile.pkg), C(/dir/with/pkgs), C(http:/server/mypkgs.pkg)." - - If using a file or directory, they must already be accessible by the host. See the M(copy) module for a way to get them there. - proxy: - description: - - HTTP[s] proxy to be used if C(src) is a URL. - response_file: - description: - - Specifies the location of a response file to be used if package expects input on install. (added in Ansible 1.4) - required: false - zone: - description: - - Whether to install the package only in the current zone, or install it into all zones. - - The installation into all zones works only if you are working with the global zone. - required: false - default: "all" - choices: ["current", "all"] - version_added: "1.6" - category: - description: - - Install/Remove category instead of a single package. - required: false - choices: ["true", "false"] - version_added: "1.6" -''' - -EXAMPLES = ''' -# Install a package from an already copied file -- svr4pkg: name=CSWcommon src=/tmp/cswpkgs.pkg state=present - -# Install a package directly from an http site -- svr4pkg: name=CSWpkgutil src=http://get.opencsw.org/now state=present zone=current - -# Install a package with a response file -- svr4pkg: name=CSWggrep src=/tmp/third-party.pkg response_file=/tmp/ggrep.response state=present - -# Ensure that a package is not installed. -- svr4pkg: name=SUNWgnome-sound-recorder state=absent - -# Ensure that a category is not installed. -- svr4pkg: name=FIREFOX state=absent category=true -''' - - -import os -import tempfile - -def package_installed(module, name, category): - cmd = [module.get_bin_path('pkginfo', True)] - cmd.append('-q') - if category: - cmd.append('-c') - cmd.append(name) - rc, out, err = module.run_command(' '.join(cmd)) - if rc == 0: - return True - else: - return False - -def create_admin_file(): - (desc, filename) = tempfile.mkstemp(prefix='ansible_svr4pkg', text=True) - fullauto = ''' -mail= -instance=unique -partial=nocheck -runlevel=quit -idepend=nocheck -rdepend=nocheck -space=quit -setuid=nocheck -conflict=nocheck -action=nocheck -networktimeout=60 -networkretries=3 -authentication=quit -keystore=/var/sadm/security -proxy= -basedir=default -''' - os.write(desc, fullauto) - os.close(desc) - return filename - -def run_command(module, cmd): - progname = cmd[0] - cmd[0] = module.get_bin_path(progname, True) - return module.run_command(cmd) - -def package_install(module, name, src, proxy, response_file, zone, category): - adminfile = create_admin_file() - cmd = [ 'pkgadd', '-n'] - if zone == 'current': - cmd += [ '-G' ] - cmd += [ '-a', adminfile, '-d', src ] - if proxy is not None: - cmd += [ '-x', proxy ] - if response_file is not None: - cmd += [ '-r', response_file ] - if category: - cmd += [ '-Y' ] - cmd.append(name) - (rc, out, err) = run_command(module, cmd) - os.unlink(adminfile) - return (rc, out, err) - -def package_uninstall(module, name, src, category): - adminfile = create_admin_file() - if category: - cmd = [ 'pkgrm', '-na', adminfile, '-Y', name ] - else: - cmd = [ 'pkgrm', '-na', adminfile, name] - (rc, out, err) = run_command(module, cmd) - os.unlink(adminfile) - return (rc, out, err) - -def main(): - module = AnsibleModule( - argument_spec = dict( - name = dict(required = True), - state = dict(required = True, choices=['present', 'absent']), - src = dict(default = None), - proxy = dict(default = None), - response_file = dict(default = None), - zone = dict(required=False, default = 'all', choices=['current','all']), - category = dict(default=False, type='bool') - ), - supports_check_mode=True - ) - state = module.params['state'] - name = module.params['name'] - src = module.params['src'] - proxy = module.params['proxy'] - response_file = module.params['response_file'] - zone = module.params['zone'] - category = module.params['category'] - rc = None - out = '' - err = '' - result = {} - result['name'] = name - result['state'] = state - - if state == 'present': - if src is None: - module.fail_json(name=name, - msg="src is required when state=present") - if not package_installed(module, name, category): - if module.check_mode: - module.exit_json(changed=True) - (rc, out, err) = package_install(module, name, src, proxy, response_file, zone, category) - # Stdout is normally empty but for some packages can be - # very long and is not often useful - if len(out) > 75: - out = out[:75] + '...' - - elif state == 'absent': - if package_installed(module, name, category): - if module.check_mode: - module.exit_json(changed=True) - (rc, out, err) = package_uninstall(module, name, src, category) - out = out[:75] - - # Success, Warning, Interruption, Reboot all, Reboot this return codes - if rc in (0, 2, 3, 10, 20): - result['changed'] = True - # no install nor uninstall, or failed - else: - result['changed'] = False - - # Fatal error, Administration, Administration Interaction return codes - if rc in (1, 4 , 5): - result['failed'] = True - else: - result['failed'] = False - - if out: - result['stdout'] = out - if err: - result['stderr'] = err - - module.exit_json(**result) - -# import module snippets -from ansible.module_utils.basic import * -main() |