[Wapt] Gestion des hosts et des groupes
Hubert TOUVET
htouvet at tranquil.it
Fri Jul 3 10:43:55 CEST 2015
il y a un script (éventuellement à customiser) qui peut faire ça plus
rapidement que la console.
voir en pièce jointe (script à mettre sur ta machine management dans
c:\wapt et à lancer avec c:\wapt\waptpython c:\wapt\update_all_hosts.py )
mais c'est toujours en ajoutant un groupe dans les dépendances du poste
que ça marche.
Le 03/07/2015 10:36, David MONTAIGNE a écrit :
> Bonjour,
> Je suis en train de faire un peu de rangement en fin d'année scolaire
> et je remarque qu'un certain nombre de machines de mon parc n'ont pas
> de groupe.
> Y a-t-il un moyen d'éditer le groupe et de rajouter les machines
> dedans plutôt que d'éditer chaque machine afin de lui rajouter un
> groupe ?
> Cordialement,
> David MONTAIGNE
> Lycée LIVET
> _______________________________________________
> WAPT mailing list
> WAPT at lists.tranquil.it
> http://lists.tranquil.it/listinfo/wapt
-------------- next part --------------
#!/usr/bin/python
# -*- coding: utf-8 -*-
# -----------------------------------------------------------------------
# This file is part of WAPT
# Copyright (C) 2013 Tranquil IT Systems http://www.tranquil.it
# WAPT aims to help Windows systems administrators to deploy
# setup and update applications on users PC.
#
# WAPT 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.
#
# WAPT 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 WAPT. If not, see <http://www.gnu.org/licenses/>.
#
# ---------------------------------------------------------------------
#
# Sample script which updates dependencies of all hosts registered on waptserver
# - append a list of basic packages that all hosts should install
# - query active directory for the groups of each host.
# if the CN of the group match a wapt package, the package is appended as dependency
#
# This allows to install packages based on computers active directory memberships
#------------------------------------------------
"""
Sample script which updates dependencies of all hosts registered on waptserver
- append a list of basic packages that all hosts should install
- query active directory for the groups of each host.
if the CN of the group match a wapt package, the package is appended as dependency
This allows to install packages based on computers active directory memberships
"""
import sys,os
from common import *
from waptpackage import *
from tempfile import mkdtemp
from shutil import rmtree
from getpass import getpass
import active_directory
from optparse import OptionParser
def ensure_list(csv_or_list,ignore_empty_args=True):
"""if argument is not a list, return a list from a csv string"""
if csv_or_list is None:
return []
if isinstance(csv_or_list,tuple):
return list(csv_or_list)
elif not isinstance(csv_or_list,list):
if ignore_empty_args:
return [s.strip() for s in csv_or_list.split(',') if s.strip() != '']
else:
return [s.strip() for s in csv_or_list.split(',')]
else:
return csv_or_list
def get_computer_groups(computername):
"""Try to finc the computer in the Active Directory
and return the list of groups
"""
groups = []
computer = active_directory.find_computer(computername)
if computer:
computer_groups = computer.memberOf
if computer_groups:
computer_groups = ensure_list(computer_groups)
for group in computer_groups:
# extract first component of group's DN
cn = group.split(',')[0].split('=')[1]
groups.append(cn)
return groups
if __name__ == '__main__':
parser=OptionParser(usage=__doc__)
parser.add_option("-g","--groups", dest="groups", default='', help="List of packages to append to all hosts (default: %default)")
parser.add_option("-c","--config", dest="config", default=os.path.join(os.path.dirname(sys.argv[0]),'wapt-get.ini') , help="Config file full path (default: %default)")
parser.add_option("-d","--dry-run", dest="dry_run", default=False, action='store_true', help="Dry run (default: %default)")
(options,args) = parser.parse_args()
# put at least these packages to all computers
base_packages = ensure_list(options.groups)
server_password = getpass('Please input wapt server admin password:')
# initialise wapt api with local config file
wapt = Wapt(config_filename = options.config)
wapt.dbpath=':memory:'
# get current packages status from repositories
wapt.update()
for package in base_packages:
if not wapt.is_available(package):
raise Exception('Package %s is not available in your repository.'%package)
# get the collection of hosts from waptserver inventory
hosts = wapt.waptserver.get('api/v1/hosts',auth=('admin',server_password))
for h in hosts['result']:
try:
hostname = h['host']['computer_fqdn']
print 'Computer %s... ' % hostname,
groups = base_packages + get_computer_groups(h['host']['computer_name'])
# try to get comp
# now update the host package : download and append missing packages
tmpdir = mkdtemp()
try:
package = wapt.edit_host(hostname,target_directory = tmpdir, use_local_sources=False)
control = package['package']
depends = ensure_list(control.depends)
additional = [ group for group in groups if not group in depends and wapt.is_available(group) ]
#there ara additional packages to add as dependencies to host package
if additional:
control.depends = ','.join(depends+additional)
control.save_control_to_wapt(package['source_dir'])
# build and post the new wapt package
if options.dry_run:
result = wapt.build_package(package['source_dir'])
else:
result = wapt.build_upload(package['source_dir'], wapt_server_user='admin', wapt_server_passwd=server_password,inc_package_release=True)[0]
print " done, new packages: %s" % (','.join(additional))
if os.path.isfile(result['filename']):
os.remove(result['filename'])
else:
print " skipped, current packages: %s" % (','.join(depends))
finally:
# cleanup of temporary
if os.path.isdir(tmpdir):
rmtree(tmpdir)
except Exception as e:
print " error %s" % e
raise
More information about the WAPT
mailing list