Exemple #1
0
 def manual(self):
     # Pull all the device name keys
     response = Ext.FormResponse()
     devs = filter(lambda x: x.startswith('device_'),
                   self.request.form.keys())
     # Make sure we have at least one device name
     devnames = filter(lambda x: bool(self.request.form.get(x)), devs)
     if not devnames:
         response.error('device_0',
                        'You must enter at least one hostname/IP.')
         return response
     # Create jobs based on info passed
     for k in devs:
         # Ignore empty device names
         if not self.request.form.get(k): continue
         idx = k.split('_')[1]
         devclass, type_ = self.request.form.get('deviceclass_%s' %
                                                 idx).split('_')
         collector = self.request.form.get('collector_' + str(idx),
                                           'localhost')
         # Set zProps based on type
         if type_ == 'ssh':
             zProps = {
                 'zCommandUsername':
                 self.request.form.get('sshuser_%s' % idx),
                 'zCommandPassword':
                 self.request.form.get('sshpass_%s' % idx),
             }
         elif type_ == 'win':
             zProps = {
                 'zWinRMUser': self.request.form.get('winuser_%s' % idx),
                 'zWinRMPassword':
                 self.request.form.get('winpass_%s' % idx),
             }
         elif type_ == 'snmp':
             zProps = {
                 'zSnmpCommunities':
                 self.request.form.get('snmpcomm_%s' % idx).splitlines()
             }
         deviceName = self.request.form.get(k)
         perfConf = self.context.Monitors.getPerformanceMonitor(collector)
         perfConf.addCreateDeviceJob(deviceName=deviceName,
                                     performanceMonitor=collector,
                                     devicePath=devclass,
                                     zProperties=zProps,
                                     discoverProto='auto')
         deviceClassUid = '/Devices' + devclass
         deviceUid = '/'.join([deviceClassUid, 'devices', deviceName])
         audit('UI.Device.Add',
               deviceUid,
               deviceClass=deviceClassUid,
               model=True)
     devnames = [self.request.form.get(dev) for dev in devs]
     IMessageSender(self.context).sendToUser(
         'Devices Added',
         'Modeling of the following devices has been scheduled: %s' %
         (cgi.escape(', '.join(filter(None, devnames)))))
     response.redirect('/zport/dmd')
     return response
 def autodiscovery(self):
     response = Ext.FormResponse()
     submitted = self.request.form.get('network', [])
     if isinstance(submitted, basestring):
         submitted = [submitted]
     zProperties = {
         'zCommandUsername':
         self.request.form.get('sshusername'),
         'zCommandPassword':
         self.request.form.get('sshpass'),
         'zWinUser':
         self.request.form.get('winusername'),
         'zWinPassword':
         self.request.form.get('winpass'),
         'zSnmpCommunities':
         self.request.form.get('snmpcommunities').splitlines()
     }
     collector = self.request.form.get('autodiscovery_collector',
                                       'localhost')
     # Split rows into networks and ranges
     nets = []
     ranges = []
     for row in submitted:
         if _is_network(row): nets.append(row)
         elif _is_range(row): ranges.append(row)
     if not nets and not ranges:
         response.error('network',
                        'You must enter at least one network or IP range.')
     if nets:
         for net in nets:
             # Make the network if it doesn't exist, so zendisc has
             # something to discover
             _n = self.context.dmd.Networks.createNet(net)
         try:
             netdesc = ("network %s" %
                        nets[0] if len(nets) == 1 else "%s networks" %
                        len(nets))
             self.context.JobManager.addJob(
                 AutoDiscoveryJob,
                 description="Discover %s" % netdesc,
                 kwargs=dict(nets=nets,
                             zProperties=zProperties,
                             collector=collector))
         except Exception, e:
             log.exception(e)
             response.error(
                 'network', 'There was an error scheduling this '
                 'job. Please check your installation and try '
                 'again.')
         else:
             IMessageSender(self.context).sendToUser(
                 'Autodiscovery Task Created',
                 'Discovery of the following networks is in progress: %s' %
                 (', '.join(nets)))
    def createUser(self):
        """
        Handles form submission for setting the admin password and creating
        an initial user.
        """
        response = Ext.FormResponse()

        adminPassword = self.request.form.get("admin-password1")
        userName = self.request.form.get("username")
        userPassword = self.request.form.get("password1")
        emailAddress = self.request.form.get("emailAddress")

        zenUsers = getToolByName(self.context, 'ZenUsers')

        # Set admin password
        try:
            admin = zenUsers.getUserSettings('admin')
            admin.manage_editUserSettings(password=adminPassword,
                                          sndpassword=adminPassword,
                                          roles=('ZenManager', 'Manager'),
                                          oldpassword='******')
        except Exception:
            log.exception("Failed to set admin password")
            response.error('admin-password1',
                           "There was a problem setting the admin password.")

        if not zenUsers.checkValidId(userName) == True:
            response.error('username', 'That username already exists.')
        else:
            ret = zenUsers.manage_addUser(userName,
                                          userPassword, ('Manager', ),
                                          REQUEST=None,
                                          email=emailAddress)
            if ret is None:
                response.error(
                    'username', 'We were unable to add a user at this time.'
                    ' Check your installation.')

        if not response.has_errors():
            # Log out, so the form can log us in as the new user
            acl_users = self.context.getPhysicalRoot().acl_users
            self.context.acl_users.resetCredentials(self.request,
                                                    self.request.response)

        # Don't run the quickstart next time
        self.context.dmd._rq = True

        # Send us on our way
        nextStep = getTopQuickstartStep(self.context.dmd)
        response.redirect(nextStep)
        return response