mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-11-03 21:02:34 +00:00 
			
		
		
		
	Merge pull request #3793 from whowutwut/openbmc_rspcfg_hostname
Add Support for rspconfig to set/get hostname of the BMC
This commit is contained in:
		@@ -47,7 +47,7 @@ OpenBMC specific:
 | 
			
		||||
=================
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
\ **rspconfig**\  \ *noderange*\  {\ **ip | netmask | gateway | vlan | sshcfg**\ }
 | 
			
		||||
\ **rspconfig**\  \ *noderange*\  {\ **ip | netmask | gateway | hostname | vlan | sshcfg**\ }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
MPA specific:
 | 
			
		||||
@@ -394,6 +394,12 @@ OPTIONS
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
\ **hostname**\ 
 | 
			
		||||
 
 | 
			
		||||
 Get or set hostname on the service processor.
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
\ **vlan**\ 
 | 
			
		||||
 
 | 
			
		||||
 Get or set vlan ID. For get vlan ID, if vlan is not enabled, 'BMC VLAN disabled' will be outputed. For set vlan ID, the valid value are [1-4096].
 | 
			
		||||
 
 | 
			
		||||
@@ -143,7 +143,7 @@ my %usage = (
 | 
			
		||||
       rspconfig <noderange> [garp=<number of 1/2 second>]
 | 
			
		||||
       rspconfig <noderange> [userid=<userid> username=<username> password=<password>]
 | 
			
		||||
   OpenBMC specific:
 | 
			
		||||
       rspconfig <noderange> [ip|netmask|gateway|vlan]
 | 
			
		||||
       rspconfig <noderange> [ip|netmask|gateway|hostname|vlan]
 | 
			
		||||
   iDataplex specific:
 | 
			
		||||
       rspconfig <noderange> [thermprofile]
 | 
			
		||||
       rspconfig <noderange> [thermprofile=<two digit number from chassis>]
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,7 @@ B<rspconfig> I<noderange> B<garp>=I<time>
 | 
			
		||||
 | 
			
		||||
=head2 OpenBMC specific:
 | 
			
		||||
 | 
			
		||||
B<rspconfig> I<noderange> {B<ip>|B<netmask>|B<gateway>|B<vlan>|B<sshcfg>}
 | 
			
		||||
B<rspconfig> I<noderange> {B<ip>|B<netmask>|B<gateway>|B<hostname>|B<vlan>|B<sshcfg>}
 | 
			
		||||
 | 
			
		||||
=head2 MPA specific:
 | 
			
		||||
 | 
			
		||||
@@ -300,6 +300,10 @@ Set CEC/BPA system names to the names in xCAT DB or the input name.
 | 
			
		||||
 | 
			
		||||
Select the policy for I/O Adapter Enlarged Capacity. This option controls the size of PCI memory space allocated to each PCI slot.
 | 
			
		||||
 | 
			
		||||
=item B<hostname>
 | 
			
		||||
 | 
			
		||||
Get or set hostname on the service processor.   
 | 
			
		||||
 | 
			
		||||
=item B<vlan>
 | 
			
		||||
 | 
			
		||||
Get or set vlan ID. For get vlan ID, if vlan is not enabled, 'BMC VLAN disabled' will be outputed. For set vlan ID, the valid value are [1-4096].
 | 
			
		||||
 
 | 
			
		||||
@@ -279,9 +279,9 @@ my %status_info = (
 | 
			
		||||
        process        => \&rspconfig_response,
 | 
			
		||||
    },
 | 
			
		||||
    RSPCONFIG_SET_REQUEST => {
 | 
			
		||||
        method         => "POST",
 | 
			
		||||
        init_url       => "",
 | 
			
		||||
        data           => "",
 | 
			
		||||
        method         => "PUT",
 | 
			
		||||
        init_url       => "$openbmc_project_url/network",
 | 
			
		||||
        data           => "[]",
 | 
			
		||||
    },
 | 
			
		||||
    RSPCONFIG_SET_RESPONSE => {
 | 
			
		||||
        process        => \&rspconfig_response,
 | 
			
		||||
@@ -571,17 +571,13 @@ sub parse_args {
 | 
			
		||||
            return ([ 1, "Unsupported command: $command $subcommand" ]);
 | 
			
		||||
        }
 | 
			
		||||
    } elsif ($command eq "rspconfig") {
 | 
			
		||||
        #
 | 
			
		||||
        # disable function until fully tested
 | 
			
		||||
        #
 | 
			
		||||
        $check = unsupported($callback); if (ref($check) eq "ARRAY") { return $check; }
 | 
			
		||||
        my $setorget;
 | 
			
		||||
        foreach $subcommand (@ARGV) {
 | 
			
		||||
            if ($subcommand =~ /^(\w+)=(.*)/) {
 | 
			
		||||
                return ([ 1, "Can not configure and display nodes' value at the same time" ]) if ($setorget and $setorget eq "get");
 | 
			
		||||
                my $key = $1;
 | 
			
		||||
                my $value = $2;
 | 
			
		||||
                return ([ 1, "Unsupported command: $command $key" ]) unless ($key =~ /^ip$|^netmask$|^gateway$|^vlan$/);
 | 
			
		||||
                return ([ 1, "Unsupported command: $command $key" ]) unless ($key =~ /^ip$|^netmask$|^gateway$|^hostname$|^vlan$/);
 | 
			
		||||
 | 
			
		||||
                my $nodes_num = @$noderange;
 | 
			
		||||
                return ([ 1, "Invalid parameter for option $key" ]) unless ($value);
 | 
			
		||||
@@ -593,10 +589,22 @@ sub parse_args {
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                $setorget = "set";
 | 
			
		||||
                #
 | 
			
		||||
                # disable function until fully tested
 | 
			
		||||
                #
 | 
			
		||||
                unless ($key eq "ip" or !($subcommand =~ /^hostname$/)) {
 | 
			
		||||
                    $check = unsupported($callback); if (ref($check) eq "ARRAY") { return $check; }
 | 
			
		||||
                }
 | 
			
		||||
                if (ref($check) eq "ARRAY") { return $check; }
 | 
			
		||||
            } elsif ($subcommand =~ /^ip$|^netmask$|^gateway$|^vlan$/) {
 | 
			
		||||
            } elsif ($subcommand =~ /^ip$|^netmask$|^gateway$|^hostname$|^vlan$/) {
 | 
			
		||||
                return ([ 1, "Can not configure and display nodes' value at the same time" ]) if ($setorget and $setorget eq "set");
 | 
			
		||||
                $setorget = "get";
 | 
			
		||||
                #
 | 
			
		||||
                # disable function until fully tested
 | 
			
		||||
                #
 | 
			
		||||
                unless ($subcommand =~ /^hostname$/) {
 | 
			
		||||
                    $check = unsupported($callback); if (ref($check) eq "ARRAY") { return $check; }
 | 
			
		||||
                }
 | 
			
		||||
                if (ref($check) eq "ARRAY") { return $check; }
 | 
			
		||||
            } elsif ($subcommand =~ /^sshcfg$/) {
 | 
			
		||||
                $setorget = ""; # SSH Keys are copied using a RShellAPI, not REST API
 | 
			
		||||
@@ -805,7 +813,7 @@ sub parse_command_status {
 | 
			
		||||
    if ($command eq "rspconfig") {
 | 
			
		||||
        my @options = ();
 | 
			
		||||
        foreach $subcommand (@$subcommands) {
 | 
			
		||||
            if ($subcommand =~ /^ip$|^netmask$|^gateway$|^vlan$/) {
 | 
			
		||||
            if ($subcommand =~ /^ip$|^netmask$|^gateway$|^hostname$|^vlan$/) {
 | 
			
		||||
                $next_status{LOGIN_RESPONSE} = "RSPCONFIG_GET_REQUEST";
 | 
			
		||||
                $next_status{RSPCONFIG_GET_REQUEST} = "RSPCONFIG_GET_RESPONSE";
 | 
			
		||||
                push @options, $subcommand;
 | 
			
		||||
@@ -825,6 +833,16 @@ sub parse_command_status {
 | 
			
		||||
                    $next_status{RSPCONFIG_DHCP_RESPONSE} = "RPOWER_BMCREBOOT_REQUEST";
 | 
			
		||||
                    $next_status{RPOWER_BMCREBOOT_REQUEST} = "RPOWER_RESET_RESPONSE";
 | 
			
		||||
                    $status_info{RPOWER_RESET_RESPONSE}{argv} = "bmcreboot";
 | 
			
		||||
                } elsif ($key =~ /^hostname$/) {
 | 
			
		||||
                    $next_status{LOGIN_RESPONSE} = "RSPCONFIG_SET_REQUEST";
 | 
			
		||||
                    $next_status{RSPCONFIG_SET_REQUEST} = "RSPCONFIG_SET_RESPONSE";
 | 
			
		||||
                    $next_status{RSPCONFIG_SET_RESPONSE} = "RSPCONFIG_GET_REQUEST";
 | 
			
		||||
                    $next_status{RSPCONFIG_GET_REQUEST} = "RSPCONFIG_GET_RESPONSE";
 | 
			
		||||
 | 
			
		||||
                    $status_info{RSPCONFIG_SET_REQUEST}{data} = "$value"; 
 | 
			
		||||
                    $status_info{RSPCONFIG_SET_REQUEST}{init_url} .= "/config/attr/HostName";
 | 
			
		||||
                    push @options, $key;
 | 
			
		||||
                    
 | 
			
		||||
                } else {
 | 
			
		||||
                    $next_status{LOGIN_RESPONSE} = "RSPCONFIG_SET_REQUEST";
 | 
			
		||||
                    $next_status{RSPCONFIG_SET_REQUEST} = "RSPCONFIG_SET_RESPONSE";
 | 
			
		||||
@@ -1256,8 +1274,7 @@ sub rpower_response {
 | 
			
		||||
    if ($node_info{$node}{cur_status} eq "RPOWER_RESET_RESPONSE") {
 | 
			
		||||
        if ($response_info->{'message'} eq $::RESPONSE_OK) {
 | 
			
		||||
            if (defined $status_info{RPOWER_RESET_RESPONSE}{argv} and $status_info{RPOWER_RESET_RESPONSE}{argv} =~ /bmcreboot$/) {
 | 
			
		||||
                my $bmc_node = "$node BMC";
 | 
			
		||||
                xCAT::SvrUtils::sendmsg("$::POWER_STATE_REBOOT", $callback, $bmc_node);
 | 
			
		||||
                xCAT::SvrUtils::sendmsg("BMC $::POWER_STATE_REBOOT", $callback, $node);
 | 
			
		||||
            } else {
 | 
			
		||||
                xCAT::SvrUtils::sendmsg("$::POWER_STATE_RESET", $callback, $node);
 | 
			
		||||
            }
 | 
			
		||||
@@ -1290,9 +1307,8 @@ sub rpower_response {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (defined $status_info{RPOWER_STATUS_RESPONSE}{argv} and $status_info{RPOWER_STATUS_RESPONSE}{argv} =~ /bmcstate$/) { 
 | 
			
		||||
            my $bmc_node = "$node BMC";
 | 
			
		||||
            my $bmc_short_state = (split(/\./, $bmc_state))[-1];
 | 
			
		||||
            xCAT::SvrUtils::sendmsg($bmc_short_state, $callback, $bmc_node);
 | 
			
		||||
            xCAT::SvrUtils::sendmsg("BMC $bmc_short_state", $callback, $node);
 | 
			
		||||
        } else {
 | 
			
		||||
            if ($chassis_state =~ /Off$/) {
 | 
			
		||||
                xCAT::SvrUtils::sendmsg("$::POWER_STATE_OFF", $callback, $node);
 | 
			
		||||
@@ -1663,6 +1679,7 @@ sub rspconfig_response {
 | 
			
		||||
        my $gateway         = "n/a";
 | 
			
		||||
        my $prefix          = "n/a";
 | 
			
		||||
        my $vlan            = "n/a";
 | 
			
		||||
        my $hostname        = "";
 | 
			
		||||
        my $default_gateway = "n/a";
 | 
			
		||||
        my $adapter_id      = "n/a";
 | 
			
		||||
        my $error;
 | 
			
		||||
@@ -1676,6 +1693,9 @@ sub rspconfig_response {
 | 
			
		||||
                if (defined($content{DefaultGateway}) and $content{DefaultGateway}) {
 | 
			
		||||
                    $default_gateway = $content{DefaultGateway};
 | 
			
		||||
                }
 | 
			
		||||
                if (defined($content{HostName}) and $content{HostName}) {
 | 
			
		||||
                    $hostname = $content{HostName};
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -1721,15 +1741,22 @@ sub rspconfig_response {
 | 
			
		||||
            if ($grep_string =~ "vlan") {
 | 
			
		||||
                push @output, "BMC VLAN ID enabled: $vlan";
 | 
			
		||||
            }
 | 
			
		||||
            if ($grep_string =~ "hostname") {
 | 
			
		||||
                push @output, "BMC Hostname: $hostname";
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        xCAT::SvrUtils::sendmsg("$_", $callback, $node) foreach (@output);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ($node_info{$node}{cur_status} eq "RSPCONFIG_SET_RESPONSE") {
 | 
			
		||||
        if ($response_info->{'message'} eq $::RESPONSE_OK) {
 | 
			
		||||
            xCAT::SvrUtils::sendmsg("BMC Setting Hostname (requires bmcreboot to take effect)...", $callback, $node);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    if ($node_info{$node}{cur_status} eq "RSPCONFIG_DHCP_RESPONSE") {
 | 
			
		||||
        if ($response_info->{'message'} eq $::RESPONSE_OK) {
 | 
			
		||||
            my $bmc_node = "$node BMC";
 | 
			
		||||
            xCAT::SvrUtils::sendmsg("Setting IP to DHCP...", $callback, $bmc_node);
 | 
			
		||||
            xCAT::SvrUtils::sendmsg("BMC Setting IP to DHCP...", $callback, $node);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user