Exemple #1
0
def hardwareprofile():
    hwprofile = get_hardwareprofile()

    hwprofilenetwork = HardwareProfileNetwork()
    hwprofilenetwork.network = get_network()
    hwprofilenetwork.hardwareprofile = hwprofile

    hwprofile.hardwareprofilenetworks = [hwprofilenetwork]

    return hwprofile
Exemple #2
0
    def _addNic(self, session, nicName):
        # Get IP address and netmask using facter

        facterNicName = nicName.replace(':', '_').replace('.', '_')

        entries = [
            'ipaddress_%s' % (facterNicName),
            'netmask_%s' % (facterNicName),
            'macaddress_%s' % (facterNicName),
            'network_%s' % (facterNicName)
        ]

        d = self._getMultipleFacterEntries(entries)

        if not 'ipaddress_%s' % (facterNicName) in d or \
           not d['ipaddress_%s' % (facterNicName)]:
            if not self.getArgs().ipaddress:
                raise InvalidCliRequest(
                    'Unable to determine IP address, use command-line'
                    ' override')

            ipaddress = self.getArgs().ipaddress
        else:
            ipaddress = d['ipaddress_%s' % (facterNicName)]

        if not 'netmask_%s' % (facterNicName) in d or \
           not d['netmask_%s' % (facterNicName)]:
            if not self.getArgs().netmask:
                raise InvalidCliRequest(
                    'Unable to determine netmask, use command-line'
                    ' override')

            netmask = self.getArgs().netmask
        else:
            netmask = d['netmask_%s' % (facterNicName)]

        if not 'network_%s' % (facterNicName) in d or \
           not d['network_%s' % (facterNicName)]:
            if not self.getArgs().network:
                raise InvalidCliRequest(
                    'Unable to determine network, use command-line'
                    ' override')

            network = self.getArgs().network
        else:
            network = d['network_%s' % (facterNicName)]

        # Check if nic is the default gateway as well...
        self._check_default_gateway_nic(nicName)

        dbNetwork = None

        # Attempt to find matching network
        try:
            dbNetwork = session.query(Network).filter(
                and_(Network.address == network,
                     Network.netmask == netmask)).one()

            print('Found network [%s/%s]' %
                  (dbNetwork.address, dbNetwork.netmask))
        except NoResultFound:
            # Network is not known to Tortuga, add it
            pass

        if dbNetwork is None:
            print('Adding network [%s/%s]' % (network, netmask))

            dbNetwork = self._addNetwork(nicName, network, netmask, session)

        # Attempt to find entry in NetworkDevices
        dbNetworkDevice = self._getNetworkDevice(nicName, session)
        if not dbNetworkDevice:
            # Create network device
            print('Adding network device [%s] as provisioning NIC' % (nicName))

            dbNetworkDevice = self._addNetworkDevice(nicName, session)
        else:
            print('Found existing network device [%s]' % (nicName))

        dbNode = NodesDbHandler().getNode(session, self._cm.getInstaller())

        # Attempt to find Nics entry
        for dbNic in dbNode.nics:
            if dbNic.networkdevice.name == nicName.lower():
                print('Found existing NIC entry for [%s]' %
                      (dbNic.networkdevice.name))

                break
        else:
            print('Creating NIC entry for [%s]' % (dbNetworkDevice.name))

            dbNic = Nic()
            dbNic.networkdevice = dbNetworkDevice
            dbNic.ip = ipaddress
            dbNic.boot = True
            dbNic.network = dbNetwork

            dbNode.nics.append(dbNic)

        # Attempt to find NIC association with hardware profile (commonly
        # known as hardware profile provisioning NIC)
        for dbHwProfileNic in dbNode.hardwareprofile.nics:
            if dbHwProfileNic == dbNic:
                break
        else:
            print('Adding NIC [%s] to hardware profile [%s]' %
                  (dbNic.networkdevice.name, dbNode.hardwareprofile.name))

            dbNode.hardwareprofile.nics.append(dbNic)

        # Attempt to find 'HardwareProfileNetworks' entry
        for dbHardwareProfileNetwork in \
                dbNode.hardwareprofile.hardwareprofilenetworks:
            if dbHardwareProfileNetwork.network == dbNetwork and \
                dbHardwareProfileNetwork.networkdevice == dbNetworkDevice:
                print('Found existing hardware profile/network association')
                break
        else:
            dbHardwareProfileNetwork = HardwareProfileNetwork()

            dbHardwareProfileNetwork.network = dbNetwork
            dbHardwareProfileNetwork.networkdevice = dbNetworkDevice

            dbNode.hardwareprofile.hardwareprofilenetworks.append(
                dbHardwareProfileNetwork)

        session.commit()

        bUpdated = self._updateNetworkConfig(session, dbNode)

        if bUpdated and self.getArgs().bSync:
            print('Applying changes to Tortuga...')

            cmd = ('/opt/puppetlabs/bin/puppet agent --onetime'
                   ' --no-daemonize >/dev/null 2>&1')
            tortugaSubprocess.executeCommandAndIgnoreFailure(cmd)