mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-10-31 11:22:27 +00:00 
			
		
		
		
	Checking nodetype to distinguish between node/switch discovery
This commit is contained in:
		| @@ -288,6 +288,10 @@ sub dump_mac_info { | ||||
|         $self->{callback}          = $callback; | ||||
|     } | ||||
|     my $community         = "public"; | ||||
|     my @snmpcs = xCAT::TableUtils->get_site_attribute("snmpc"); | ||||
|     my $tmp    = $snmpcs[0]; | ||||
|     if (defined($tmp)) { $community = $tmp } | ||||
|  | ||||
|     my $dump_all_switches = 0; | ||||
|     my %switches_to_dump  = (); | ||||
|     if (!defined($noderange)) { | ||||
| @@ -366,6 +370,7 @@ sub find_mac { | ||||
|     my $self       = shift; | ||||
|     my $mac        = shift; | ||||
|     my $cachedonly = shift; | ||||
|     my $discover_switch=shift; | ||||
|  | ||||
|     # For now HARDCODE (TODO, configurable?) a cache as stale after five minutes | ||||
|     # Also, if things are changed in the config, our cache could be wrong, | ||||
| @@ -390,7 +395,7 @@ sub find_mac { | ||||
|     #If requesting a cache only check or the cache is a mere 20 seconds old | ||||
|     #don't bother querying switches | ||||
|     if ($cachedonly or ($self->{timestamp} > (time() - 20))) { return undef; } | ||||
|     $self->refresh_table;    #not cached or stale cache, refresh | ||||
|     $self->refresh_table($discover_switch);    #not cached or stale cache, refresh | ||||
|     if ($self->{mactable}->{ lc($mac) }) { | ||||
|         return $self->{mactable}->{ lc($mac) }; | ||||
|     } | ||||
| @@ -426,6 +431,7 @@ sub fill_switchparms { | ||||
|  | ||||
| sub refresh_table { | ||||
|     my $self = shift; | ||||
|     my $discover_switch = shift; | ||||
|     my $curswitch; | ||||
|     $self->{mactable}    = {}; | ||||
|     $self->{switchtab}   = xCAT::Table->new('switch', -create => 1); | ||||
| @@ -469,7 +475,22 @@ sub refresh_table { | ||||
|  | ||||
|     #Build hash of switch port names per switch | ||||
|     $self->{switches} = {}; | ||||
|      | ||||
|     #get nodetype from nodetype | ||||
|     my $ntable = xCAT::Table->new('nodetype'); | ||||
|     my @typeentries = $ntable->getAllNodeAttribs(['node', 'nodetype']); | ||||
|     foreach my $ntnode (@typeentries) { | ||||
|         if ($ntnode->{nodetype} eq "switch") { | ||||
|             $self->{switches}->{$ntnode->{node} }->{nodetype}  = $ntnode->{nodetype}; | ||||
|             xCAT::MsgUtils->message("S", "refresh_table: $ntnode->{node} is $self->{switches}->{$ntnode->{node} }->{nodetype}"); | ||||
|         } | ||||
|     } | ||||
|     foreach my $entry (@entries) { | ||||
|         if ( (($discover_switch) and ($self->{switches}->{$entry->{node}}->{nodetype} ne "switch")) | ||||
|             or ( !($discover_switch) and ($self->{switches}->{$entry->{node}}->{nodetype} eq "switch")) ){ | ||||
|             xCAT::MsgUtils->message("S", "refresh_table: skip $entry->{node} and $entry->{switch}"); | ||||
|             next; | ||||
|         } | ||||
|         if (defined($entry->{switch}) and $entry->{switch} ne "" and defined($entry->{port}) and $entry->{port} ne "") { | ||||
|  | ||||
|             if (!$self->{switches}->{ $entry->{switch} }->{ $entry->{port} }) | ||||
|   | ||||
| @@ -1383,7 +1383,7 @@ sub switchsetup { | ||||
|         # issue makehosts so we can use xdsh | ||||
|         my $dswitch = get_hostname($outhash->{$mac}->{name}, $ip); | ||||
|  | ||||
|         my $node = $macmap->find_mac($mac,0); | ||||
|         my $node = $macmap->find_mac($mac,0,1); | ||||
|         if (!$node) { | ||||
|             send_msg($request, 0, "NO predefined switch matched this switch $dswitch with ip address $ip and mac address $mac"); | ||||
|             next; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user