You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@vcl.apache.org by Kevan Miller <ke...@gmail.com> on 2012/05/23 19:16:31 UTC

Re: svn commit: r1341871 - /incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Linux/ESXi.pm

A reminder that there is a "Grant license to ASF for inclusion in ASF works" radio button when attaching files to Jira. 

This is the clearest indication of a contributors intent. Please validate this when accepting patches…

--kevan

On May 23, 2012, at 10:10 AM, fapeeler@apache.org wrote:

> Author: fapeeler
> Date: Wed May 23 14:10:39 2012
> New Revision: 1341871
> 
> URL: http://svn.apache.org/viewvc?rev=1341871&view=rev
> Log:
> VCL-579
> 
> Based on contribtion from Dmitri Chebotarov, Thanks Dmitri
> 
> I added some addtional routines as placeholders for future code that might need to be addressed.
> 
> 
> 
> Modified:
>    incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Linux/ESXi.pm
> 
> Modified: incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Linux/ESXi.pm
> URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Linux/ESXi.pm?rev=1341871&r1=1341870&r2=1341871&view=diff
> ==============================================================================
> --- incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Linux/ESXi.pm (original)
> +++ incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Linux/ESXi.pm Wed May 23 14:10:39 2012
> @@ -100,6 +100,289 @@ sub post_load {
> 
> #/////////////////////////////////////////////////////////////////////////////
> 
> +=head2 reserve
> +
> + Parameters  :
> + Returns     :
> + Description :
> +
> +=cut
> +
> +sub reserve {
> +   my $self = shift;
> +   if (ref($self) !~ /VCL::Module/i) {
> +      notify($ERRORS{'CRITICAL'}, 0, "subroutine was called as a function, it must be called as a class method");
> +      return 0;
> +   }
> +   notify($ERRORS{'DEBUG'}, 0, "Enterered reserve() in the ESXi OS module");
> +  
> +   return 1;
> +}
> +
> +#/////////////////////////////////////////////////////////////////////////////
> +
> +=head2 grant_access
> +
> + Parameters  :
> + Returns     :
> + Description : this sub called when user clicks Connect button on web GUI
> +
> +=cut
> +
> +sub grant_access {
> +   my $self = shift;
> +   if (ref($self) !~ /VCL::Module/i) {
> +      notify($ERRORS{'CRITICAL'}, 0, "subroutine was called as a function, it must be called as a class method");
> +      return 0;
> +   }
> +
> +   my $esxi_storage_mount_command;
> +   my @commands;
> +
> +   my $computer_short_name   = $self->data->get_computer_short_name();
> +   my $computer_node_name = $self->data->get_computer_node_name();
> +   notify($ERRORS{'OK'}, 0, "$computer_short_name: processing with ESXi.pm::grant_access()");
> +
> +   my $username = $self->data->get_user_login_id();
> +   my $reservation_password = $self->data->get_reservation_password();
> +   my $management_node_keys = $self->data->get_management_node_keys();
> +
> +   my $vcld_config = &local_read_vcld_config("/etc/vcl/vcld.conf");
> +   my $esxi_storage_name_prefix = $vcld_config->{"ESXI_STORAGE_NAME_PREFIX"};
> +   my $esxi_storage_address = $vcld_config->{"ESXI_STORAGE_ADDRESS"};
> +   my $esxi_storage_volume = $vcld_config->{"ESXI_STORAGE_VOLUME"};
> +
> +   $esxi_storage_mount_command = "esxcfg-nas -a $esxi_storage_name_prefix-$username -o $esxi_storage_address -s $esxi_storage_volume/$username";
> +
> +   push(@commands,   "chmod +w /etc/pam.d/system-auth");
> +   push(@commands,   "echo s/min=8,8,8,7,6/min=8,8,8,7,6 enforce=none/g > /tmp/sed");
> +   push(@commands,   "sed -f /tmp/sed -i /etc/pam.d/system-auth");
> +   push(@commands,   "rm -f /tmp/sed");
> +   push(@commands,   "chmod -w /etc/pam.d/system-auth");
> +   push(@commands,   "useradd -M $username");
> +   push(@commands,   "groupadd root $username");
> +   push(@commands,   "echo $reservation_password \| passwd $username --stdin");
> +   push(@commands,   "vim-cmd vimsvc/auth/entity_permission_add vim.Folder:ha-folder-root root true Admin true");
> +   push(@commands,   $esxi_storage_mount_command) if ($esxi_storage_mount_command);
> +   push(@commands, "sleep 3");
> +   push(@commands, "echo /uuid.action/c > /tmp/sed");
> +   push(@commands, "echo \\\$ a uuid.action = \\\"keep\\\" >> /tmp/sed");
> +   push(@commands, "find /vmfs/volumes/$esxi_storage_name_prefix-$username/ -name *.vmx -exec sed -f /tmp/sed -i {} \\;");
> +   push(@commands, "rm -rf /tmp/sed");
> +   push(@commands,   "find /vmfs/volumes/$esxi_storage_name_prefix-$username/ -name *.vmx -exec vim-cmd solo/registervm {} \\;");
> +
> +   foreach my $command (@commands) {
> +      my ($exit_status, $output) = run_ssh_command($computer_node_name, $management_node_keys, $command, "root");
> +      if (!defined($output)) {
> +         notify($ERRORS{'WARNING'}, 0, "failed to run SSH command: $command");
> +      return;
> +      }
> +   }
> +   return 1;
> +
> +}
> +
> +#/////////////////////////////////////////////////////////////////////////////
> +
> +=head2 sanitize
> +
> + Parameters  :
> + Returns     :
> + Description : does ESXi need to reload? Check if user ever clicked connect button, if never then don't reload
> +
> +=cut
> +
> +sub sanitize {
> +   my $self = shift;
> +   if (ref($self) !~ /linux/i) {
> +      notify($ERRORS{'CRITICAL'}, 0, "subroutine was called as a function, it must be called as a class method");
> +      return;
> +   }
> +
> +   my $computer_short_name = $self->data->get_computer_short_name();
> +   my $computer_state_name = $self->data->get_computer_state_name();
> +
> +   if ($computer_state_name =~ /^(inuse)$/) {
> +      notify($ERRORS{'OK'}, 0, "$computer_short_name : need to reload.");
> +      return 0;
> +   } else {
> +      notify($ERRORS{'OK'}, 0, "$computer_short_name : user never connected. No need to reload.");
> +      return 1;
> +   }
> +}
> +#/////////////////////////////////////////////////////////////////////////////
> +=head2 local_read_vcld_config
> +
> + Parameters  : full path to vcld.conf
> + Returns     : vcld_config array with all vcld.conf values
> + Description : this is local sub to read vcld.conf file
> +
> +=cut
> +
> +sub local_read_vcld_config {
> +   my ($value,$config_file,$vcld_config);
> +   ($config_file) = @_;
> +   open (CONFIG,$config_file) or die "cannot open vcld.conf file";
> +   while (<CONFIG>) {
> +      chomp;
> +      s/#.*//;
> +      s/^\s+//;
> +      s/\s+$//;
> +      next unless length;
> +      my ($var,$value) = split(/\s*=\s*/,$_, 2);
> +      $vcld_config->{$var} = $value;
> +   }
> +   return $vcld_config;
> +}
> +
> +#/////////////////////////////////////////////////////////////////////////////
> +
> +=head2 get_public_ip_address
> +
> + Parameters  :
> + Returns     : public IP address (IP address on interface vmk1)
> + Description : retrive Public IP address from ESXi server. This should be vmk1 interface
> +
> +=cut
> +
> +sub get_public_ip_address {
> +	my $self = shift;
> +	if (ref($self) !~ /linux/i) {
> +      notify($ERRORS{'CRITICAL'}, 0, "subroutine was called as a function, it must be called as a class method");
> +      return;
> +   }
> +   my $public_ip_address;
> +
> +   my $command = "esxcfg-vmknic -l";
> +   my ($exit_status, $output) = $self->execute($command);
> +   if (!defined($output)) {
> +      notify($ERRORS{'WARNING'}, 0, "failed to run command to retrieve network configuration: $command");
> +      return;
> +   }
> +   for my $line (@$output) {
> +      if ($line =~ /vmk1/) {
> +         my @vmk1 = split(/ +/,$line);
> +         for my $vmk1_line (@vmk1) {
> +            if ($vmk1_line =~ /(\d+)(\.\d+){3}/) {
> +               $public_ip_address = $vmk1_line;
> +               last;
> +            }
> +         }
> +      }
> +   }
> +
> +   return $public_ip_address;
> +}
> +
> +
> +#/////////////////////////////////////////////////////////////////////////////
> +
> +=head2 enable_firewall_port
> +
> + Parameters  : $protocol, $port, $scope (optional)
> + Returns     : 1 if succeeded, 0 otherwise
> + Description : Enables a firewall port on the computer. The protocol and port
> +               arguments are required. An optional scope argument may supplied.
> +
> +# called by OS::process_connect_methods()
> +
> +=cut
> +
> +sub enable_firewall_port {
> +
> +	#TODO
> +   my $self = shift;
> +   if (ref($self) !~ /osx/i) {
> +      notify($ERRORS{'CRITICAL'}, 0, "subroutine was called as a function, it must be called as a class method");
> +      return;
> +   }
> +
> +	return 1;
> +}
> +
> +#/////////////////////////////////////////////////////////////////////////////
> +
> +=head2 get_cpu_core_count
> +
> + Parameters  : none
> + Returns     : integer
> + Description : Retrieves the number of CPU cores the computer has by querying
> +               the NUMBER_OF_PROCESSORS environment variable.
> +
> +# called by Provisioning::VMware:VMware.pm
> +#       Windows.pm only returns value from database
> +#       return $self->get_environment_variable_value('NUMBER_OF_PROCESSORS');
> +
> +=cut
> +
> +sub get_cpu_core_count {
> +	#TODO
> +   my $self = shift;
> +   if (ref($self) !~ /osx/i) {
> +      notify($ERRORS{'CRITICAL'}, 0, "subroutine was called as a function, it must be called as a class method");
> +      return;
> +   }
> +
> +        my $computer_node_name = $self->data->get_computer_node_name();
> +			return 1;
> +}
> +
> +#/////////////////////////////////////////////////////////////////////////////
> +
> +=head2 check_connection_on_port
> +
> + Parameters  : $port
> + Returns     : (connected|conn_wrong_ip|timeout|failed)
> + Description : uses netstat to see if any thing is connected to the provided port
> +
> +# called by OS.pm:is_user_connected()
> +
> +=cut
> +
> +sub check_connection_on_port {
> +	#TODO
> +   my $self = shift;
> +   if (ref($self) !~ /osx/i) {
> +      notify($ERRORS{'CRITICAL'}, 0, "subroutine was called as a function, it must be called as a class method");
> +      return;
> +   }
> +
> +   my $computer_node_name = $self->data->get_computer_node_name();
> +
> +   my $remote_ip                   = $self->data->get_reservation_remote_ip();
> +   my $computer_ip_address         = $self->data->get_computer_ip_address();
> +
> +   my $port = shift;
> +   if (!$port) {
> +      notify($ERRORS{'WARNING'}, 0, "port variable was not passed as an argument");
> +      return "failed";
> +   }
> +	return 1;
> +}
> +
> +#/////////////////////////////////////////////////////////////////////////////
> +
> +=head2 user_exists
> +
> + Parameters  :
> + Returns     :
> + Description :
> +
> +=cut
> +
> +sub user_exists {
> +	#TODO
> +   my $self = shift;
> +   if (ref($self) !~ /osx/i) {
> +      notify($ERRORS{'CRITICAL'}, 0, "subroutine was called as a function, it must be called as a class method");
> +      return;
> +   }
> +
> +        my $computer_node_name = $self->data->get_computer_node_name();
> +	return 1;
> +}
> +#/////////////////////////////////////////////////////////////////////////////
> +
> 1;
> __END__
> 
> 
> 


Re: svn commit: r1341871 - /incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Linux/ESXi.pm

Posted by Kevan Miller <ke...@gmail.com>.
On May 23, 2012, at 1:51 PM, Aaron Peeler wrote:

> Hi Kevan,
> 
> Thanks for point this out.
> 
> I think with the latest update of jira, there is/was an issue in
> displaying the logo in the primary issue view.
> 
> There is a thread on the infrastructure lists "Feather logo no longer
> present in Jira" discussing it.
> 
> On the issue, https://issues.apache.org/jira/browse/VCL-579
> 
> In the attachment section, click on the pull down on the right and
> select manage attachments. The logo is visible there.

Thanks Aaron. You're right. News to me… 

--kevan

Re: svn commit: r1341871 - /incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Linux/ESXi.pm

Posted by Aaron Peeler <fa...@ncsu.edu>.
Hi Kevan,

Thanks for point this out.

I think with the latest update of jira, there is/was an issue in
displaying the logo in the primary issue view.

There is a thread on the infrastructure lists "Feather logo no longer
present in Jira" discussing it.

On the issue, https://issues.apache.org/jira/browse/VCL-579

In the attachment section, click on the pull down on the right and
select manage attachments. The logo is visible there.

Aaron

On Wed, May 23, 2012 at 1:16 PM, Kevan Miller <ke...@gmail.com> wrote:
> A reminder that there is a "Grant license to ASF for inclusion in ASF works" radio button when attaching files to Jira.
>
> This is the clearest indication of a contributors intent. Please validate this when accepting patches…
>
> --kevan
>
> On May 23, 2012, at 10:10 AM, fapeeler@apache.org wrote:
>
>> Author: fapeeler
>> Date: Wed May 23 14:10:39 2012
>> New Revision: 1341871
>>
>> URL: http://svn.apache.org/viewvc?rev=1341871&view=rev
>> Log:
>> VCL-579
>>
>> Based on contribtion from Dmitri Chebotarov, Thanks Dmitri
>>
>> I added some addtional routines as placeholders for future code that might need to be addressed.
>>
>>
>>
>> Modified:
>>    incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Linux/ESXi.pm
>>
>> Modified: incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Linux/ESXi.pm
>> URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Linux/ESXi.pm?rev=1341871&r1=1341870&r2=1341871&view=diff
>> ==============================================================================
>> --- incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Linux/ESXi.pm (original)
>> +++ incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Linux/ESXi.pm Wed May 23 14:10:39 2012
>> @@ -100,6 +100,289 @@ sub post_load {
>>
>> #/////////////////////////////////////////////////////////////////////////////
>>
>> +=head2 reserve
>> +
>> + Parameters  :
>> + Returns     :
>> + Description :
>> +
>> +=cut
>> +
>> +sub reserve {
>> +   my $self = shift;
>> +   if (ref($self) !~ /VCL::Module/i) {
>> +      notify($ERRORS{'CRITICAL'}, 0, "subroutine was called as a function, it must be called as a class method");
>> +      return 0;
>> +   }
>> +   notify($ERRORS{'DEBUG'}, 0, "Enterered reserve() in the ESXi OS module");
>> +
>> +   return 1;
>> +}
>> +
>> +#/////////////////////////////////////////////////////////////////////////////
>> +
>> +=head2 grant_access
>> +
>> + Parameters  :
>> + Returns     :
>> + Description : this sub called when user clicks Connect button on web GUI
>> +
>> +=cut
>> +
>> +sub grant_access {
>> +   my $self = shift;
>> +   if (ref($self) !~ /VCL::Module/i) {
>> +      notify($ERRORS{'CRITICAL'}, 0, "subroutine was called as a function, it must be called as a class method");
>> +      return 0;
>> +   }
>> +
>> +   my $esxi_storage_mount_command;
>> +   my @commands;
>> +
>> +   my $computer_short_name   = $self->data->get_computer_short_name();
>> +   my $computer_node_name = $self->data->get_computer_node_name();
>> +   notify($ERRORS{'OK'}, 0, "$computer_short_name: processing with ESXi.pm::grant_access()");
>> +
>> +   my $username = $self->data->get_user_login_id();
>> +   my $reservation_password = $self->data->get_reservation_password();
>> +   my $management_node_keys = $self->data->get_management_node_keys();
>> +
>> +   my $vcld_config = &local_read_vcld_config("/etc/vcl/vcld.conf");
>> +   my $esxi_storage_name_prefix = $vcld_config->{"ESXI_STORAGE_NAME_PREFIX"};
>> +   my $esxi_storage_address = $vcld_config->{"ESXI_STORAGE_ADDRESS"};
>> +   my $esxi_storage_volume = $vcld_config->{"ESXI_STORAGE_VOLUME"};
>> +
>> +   $esxi_storage_mount_command = "esxcfg-nas -a $esxi_storage_name_prefix-$username -o $esxi_storage_address -s $esxi_storage_volume/$username";
>> +
>> +   push(@commands,   "chmod +w /etc/pam.d/system-auth");
>> +   push(@commands,   "echo s/min=8,8,8,7,6/min=8,8,8,7,6 enforce=none/g > /tmp/sed");
>> +   push(@commands,   "sed -f /tmp/sed -i /etc/pam.d/system-auth");
>> +   push(@commands,   "rm -f /tmp/sed");
>> +   push(@commands,   "chmod -w /etc/pam.d/system-auth");
>> +   push(@commands,   "useradd -M $username");
>> +   push(@commands,   "groupadd root $username");
>> +   push(@commands,   "echo $reservation_password \| passwd $username --stdin");
>> +   push(@commands,   "vim-cmd vimsvc/auth/entity_permission_add vim.Folder:ha-folder-root root true Admin true");
>> +   push(@commands,   $esxi_storage_mount_command) if ($esxi_storage_mount_command);
>> +   push(@commands, "sleep 3");
>> +   push(@commands, "echo /uuid.action/c > /tmp/sed");
>> +   push(@commands, "echo \\\$ a uuid.action = \\\"keep\\\" >> /tmp/sed");
>> +   push(@commands, "find /vmfs/volumes/$esxi_storage_name_prefix-$username/ -name *.vmx -exec sed -f /tmp/sed -i {} \\;");
>> +   push(@commands, "rm -rf /tmp/sed");
>> +   push(@commands,   "find /vmfs/volumes/$esxi_storage_name_prefix-$username/ -name *.vmx -exec vim-cmd solo/registervm {} \\;");
>> +
>> +   foreach my $command (@commands) {
>> +      my ($exit_status, $output) = run_ssh_command($computer_node_name, $management_node_keys, $command, "root");
>> +      if (!defined($output)) {
>> +         notify($ERRORS{'WARNING'}, 0, "failed to run SSH command: $command");
>> +      return;
>> +      }
>> +   }
>> +   return 1;
>> +
>> +}
>> +
>> +#/////////////////////////////////////////////////////////////////////////////
>> +
>> +=head2 sanitize
>> +
>> + Parameters  :
>> + Returns     :
>> + Description : does ESXi need to reload? Check if user ever clicked connect button, if never then don't reload
>> +
>> +=cut
>> +
>> +sub sanitize {
>> +   my $self = shift;
>> +   if (ref($self) !~ /linux/i) {
>> +      notify($ERRORS{'CRITICAL'}, 0, "subroutine was called as a function, it must be called as a class method");
>> +      return;
>> +   }
>> +
>> +   my $computer_short_name = $self->data->get_computer_short_name();
>> +   my $computer_state_name = $self->data->get_computer_state_name();
>> +
>> +   if ($computer_state_name =~ /^(inuse)$/) {
>> +      notify($ERRORS{'OK'}, 0, "$computer_short_name : need to reload.");
>> +      return 0;
>> +   } else {
>> +      notify($ERRORS{'OK'}, 0, "$computer_short_name : user never connected. No need to reload.");
>> +      return 1;
>> +   }
>> +}
>> +#/////////////////////////////////////////////////////////////////////////////
>> +=head2 local_read_vcld_config
>> +
>> + Parameters  : full path to vcld.conf
>> + Returns     : vcld_config array with all vcld.conf values
>> + Description : this is local sub to read vcld.conf file
>> +
>> +=cut
>> +
>> +sub local_read_vcld_config {
>> +   my ($value,$config_file,$vcld_config);
>> +   ($config_file) = @_;
>> +   open (CONFIG,$config_file) or die "cannot open vcld.conf file";
>> +   while (<CONFIG>) {
>> +      chomp;
>> +      s/#.*//;
>> +      s/^\s+//;
>> +      s/\s+$//;
>> +      next unless length;
>> +      my ($var,$value) = split(/\s*=\s*/,$_, 2);
>> +      $vcld_config->{$var} = $value;
>> +   }
>> +   return $vcld_config;
>> +}
>> +
>> +#/////////////////////////////////////////////////////////////////////////////
>> +
>> +=head2 get_public_ip_address
>> +
>> + Parameters  :
>> + Returns     : public IP address (IP address on interface vmk1)
>> + Description : retrive Public IP address from ESXi server. This should be vmk1 interface
>> +
>> +=cut
>> +
>> +sub get_public_ip_address {
>> +     my $self = shift;
>> +     if (ref($self) !~ /linux/i) {
>> +      notify($ERRORS{'CRITICAL'}, 0, "subroutine was called as a function, it must be called as a class method");
>> +      return;
>> +   }
>> +   my $public_ip_address;
>> +
>> +   my $command = "esxcfg-vmknic -l";
>> +   my ($exit_status, $output) = $self->execute($command);
>> +   if (!defined($output)) {
>> +      notify($ERRORS{'WARNING'}, 0, "failed to run command to retrieve network configuration: $command");
>> +      return;
>> +   }
>> +   for my $line (@$output) {
>> +      if ($line =~ /vmk1/) {
>> +         my @vmk1 = split(/ +/,$line);
>> +         for my $vmk1_line (@vmk1) {
>> +            if ($vmk1_line =~ /(\d+)(\.\d+){3}/) {
>> +               $public_ip_address = $vmk1_line;
>> +               last;
>> +            }
>> +         }
>> +      }
>> +   }
>> +
>> +   return $public_ip_address;
>> +}
>> +
>> +
>> +#/////////////////////////////////////////////////////////////////////////////
>> +
>> +=head2 enable_firewall_port
>> +
>> + Parameters  : $protocol, $port, $scope (optional)
>> + Returns     : 1 if succeeded, 0 otherwise
>> + Description : Enables a firewall port on the computer. The protocol and port
>> +               arguments are required. An optional scope argument may supplied.
>> +
>> +# called by OS::process_connect_methods()
>> +
>> +=cut
>> +
>> +sub enable_firewall_port {
>> +
>> +     #TODO
>> +   my $self = shift;
>> +   if (ref($self) !~ /osx/i) {
>> +      notify($ERRORS{'CRITICAL'}, 0, "subroutine was called as a function, it must be called as a class method");
>> +      return;
>> +   }
>> +
>> +     return 1;
>> +}
>> +
>> +#/////////////////////////////////////////////////////////////////////////////
>> +
>> +=head2 get_cpu_core_count
>> +
>> + Parameters  : none
>> + Returns     : integer
>> + Description : Retrieves the number of CPU cores the computer has by querying
>> +               the NUMBER_OF_PROCESSORS environment variable.
>> +
>> +# called by Provisioning::VMware:VMware.pm
>> +#       Windows.pm only returns value from database
>> +#       return $self->get_environment_variable_value('NUMBER_OF_PROCESSORS');
>> +
>> +=cut
>> +
>> +sub get_cpu_core_count {
>> +     #TODO
>> +   my $self = shift;
>> +   if (ref($self) !~ /osx/i) {
>> +      notify($ERRORS{'CRITICAL'}, 0, "subroutine was called as a function, it must be called as a class method");
>> +      return;
>> +   }
>> +
>> +        my $computer_node_name = $self->data->get_computer_node_name();
>> +                     return 1;
>> +}
>> +
>> +#/////////////////////////////////////////////////////////////////////////////
>> +
>> +=head2 check_connection_on_port
>> +
>> + Parameters  : $port
>> + Returns     : (connected|conn_wrong_ip|timeout|failed)
>> + Description : uses netstat to see if any thing is connected to the provided port
>> +
>> +# called by OS.pm:is_user_connected()
>> +
>> +=cut
>> +
>> +sub check_connection_on_port {
>> +     #TODO
>> +   my $self = shift;
>> +   if (ref($self) !~ /osx/i) {
>> +      notify($ERRORS{'CRITICAL'}, 0, "subroutine was called as a function, it must be called as a class method");
>> +      return;
>> +   }
>> +
>> +   my $computer_node_name = $self->data->get_computer_node_name();
>> +
>> +   my $remote_ip                   = $self->data->get_reservation_remote_ip();
>> +   my $computer_ip_address         = $self->data->get_computer_ip_address();
>> +
>> +   my $port = shift;
>> +   if (!$port) {
>> +      notify($ERRORS{'WARNING'}, 0, "port variable was not passed as an argument");
>> +      return "failed";
>> +   }
>> +     return 1;
>> +}
>> +
>> +#/////////////////////////////////////////////////////////////////////////////
>> +
>> +=head2 user_exists
>> +
>> + Parameters  :
>> + Returns     :
>> + Description :
>> +
>> +=cut
>> +
>> +sub user_exists {
>> +     #TODO
>> +   my $self = shift;
>> +   if (ref($self) !~ /osx/i) {
>> +      notify($ERRORS{'CRITICAL'}, 0, "subroutine was called as a function, it must be called as a class method");
>> +      return;
>> +   }
>> +
>> +        my $computer_node_name = $self->data->get_computer_node_name();
>> +     return 1;
>> +}
>> +#/////////////////////////////////////////////////////////////////////////////
>> +
>> 1;
>> __END__
>>
>>
>>
>



-- 
Aaron Peeler
Program Manager
Virtual Computing Lab
NC State University

All electronic mail messages in connection with State business which
are sent to or received by this account are subject to the NC Public
Records Law and may be disclosed to third parties.