def hardwareprofile(): hwprofile = get_hardwareprofile() hwprofilenetwork = HardwareProfileNetwork() hwprofilenetwork.network = get_network() hwprofilenetwork.hardwareprofile = hwprofile hwprofile.hardwareprofilenetworks = [hwprofilenetwork] return hwprofile
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)