[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-API] perl Xen API How to



On 14/11/12 09:37, Rawat, Vishwanath wrote:
> Mike,
>       I try dumping the request that is sent to xen server. The Boolean 
> values that are passed are treated as RPC::XML::int.

Yeah, I think at this point you'll have to go to a Perl mailing list or
IRC channel for help. It would probably be pretty simple to hack on the
Perl library to get it to do the right thing with booleans. FWIW, the
Python xmlrpc library works very well with XenAPI (all of our internal
storage tools are written in Python using the built-in xmlrpc library).

Good luck!

Mike

> I tried other combination to send value as Boolean but RPC::XML always 
> treating as int.
> These are the combinations that I have tried
>       1. use boolean; 
>            my $resp = extractvalue($xen->simple_request("VM.start", $session, 
> $vm_ref->[0], true, false));
>       2. my $resp = extractvalue($xen->simple_request("VM.start", $session, 
> $vm_ref->[0], RPC::XML::boolean(1), RPC::XML::boolean(1))); 
>       3. my $resp = extractvalue($xen->simple_request("VM.start", $session, 
> $vm_ref->[0], 
> XMLRPC::PurePerl::boolean(1)->value(),XMLRPC::PurePerl::boolean(1)->value()));
> 
> Here is the script
> 
> use boolean;
> my $sp = RPC::XML::boolean->new(0);
> print "sp is ". Dumper($sp->value);
> my $s = $sp->value();
> my $resp = extractvalue($xen->simple_request("VM.start", $session, 
> $vm_ref->[0], true, false));
> 
> And here is the output
>   
> sp is $VAR1 = 0;
> $VAR1 = bless( {
>                  'name' => 'VM.start',
>                  'args' => [
>                              bless( do{\(my $o = 
> 'OpaqueRef:5c48d7da-a117-8873-45e0-7753cb5a4b83')}, 'RPC::XML::string' ),
>                              bless( do{\(my $o = 
> 'OpaqueRef:04969f9f-41f9-15e0-8821-93395c8d22ed')}, 'RPC::XML::string' ),
>                              bless( do{\(my $o = 1)}, 'RPC::XML::int' ),
>                              bless( do{\(my $o = 0)}, 'RPC::XML::int' )
>                            ]
>                }, 'RPC::XML::request' );
> $VAR1 = {
>           'ErrorDescription' => [
>                                 'FIELD_TYPE_ERROR',
>                                 'start_paused'
>                               ],
>           'Status' => 'Failure'
>         };
> 
> To dump the input request I modified RPC::XML::send_request (which is 
> internally called by simple_request) code.
> 
> Regards,
> Rawat
> 
> 
> -----Original Message-----
> From: Mike McClurg [mailto:mike.mcclurg@xxxxxxxxxx] 
> Sent: Monday, November 12, 2012 5:43 PM
> To: Rawat, Vishwanath
> Cc: xen-api@xxxxxxxxxxxxx
> Subject: Re: [Xen-API] perl Xen API How to
> 
>  12/11/12 10:58, Rawat, Vishwanath wrote:
>> Mike,
>>      It was Boolean before. But I wanted to test something else so made it 
>> double. 
>>
> 
> Is there a way you can get this library to return the XML request that it has 
> created for the VM.start call? If you could print that XML string out, we 
> could probably see where the problem is.
> 
> Mike
> 
>> Here is the code
>> $host_ref = extractvalue($xen->simple_request("session.get_this_host", 
>> $session, $session));
>>
>> my $vm = "vm9_WinXP_x86";
>> my $vm_ref = extractvalue($xen->simple_request("VM.get_by_name_label", 
>> $session, $vm)); print Dumper($vm_ref);
>>
>> my $sp = XMLRPC::PurePerl->boolean(1); print Dumper($sp); $s_p = 
>> $sp->value(); print "boolean start_paused  is " . $s_p . "\n";; 
>> $host_ref = extractvalue($xen->simple_request("VM.start", $session, 
>> $vm_ref->[0], $s_p, 0));
>>
>> sub extractvalue{
>>     my ($val) = @_;
>>     print Dumper ($val);
>>     if ($val->{'Status'} eq "Success"){
>>         return $val->{'Value'};
>>     } else {
>>         return undef;
>>     }
>> }
>>
>> And here is the output
>>
>> $VAR1 = {
>>           'Value' => [
>>                      'OpaqueRef:04969f9f-41f9-15e0-8821-93395c8d22ed'
>>                    ],
>>           'Status' => 'Success'
>>         };
>> $VAR1 = [
>>           'OpaqueRef:04969f9f-41f9-15e0-8821-93395c8d22ed'
>>         ];
>> $VAR1 = bless( {
>>                  'val' => 1,
>>                  'type' => 'boolean'
>>                }, 'XMLRPC::PurePerl::Type::boolean' ); boolean 
>> start_paused  is 1
>> $VAR1 = {
>>           'ErrorDescription' => [
>>                                 'FIELD_TYPE_ERROR',
>>                                 'start_paused'
>>                               ],
>>           'Status' => 'Failure'
>>         };
>>
>> Regards,
>> Rawat
>>
>>
>> -----Original Message-----
>> From: Mike McClurg [mailto:mike.mcclurg@xxxxxxxxxx]
>> Sent: Monday, November 12, 2012 3:56 PM
>> To: Rawat, Vishwanath
>> Cc: xen-api@xxxxxxxxxxxxx
>> Subject: Re: [Xen-API] perl Xen API How to
>>
>> On 12/11/12 09:28, Rawat, Vishwanath wrote:
>>> Yes I did that. I got the same error. Here is my code and its output.
>>>
>>> Code: 
>>>
>>> my $vm = "vm9_WinXP_x86";
>>> my $vm_ref = 
>>> extractvalue($xen->simple_request("VM.get_by_name_label",
>>> $session, $vm)); print Dumper($vm_ref);
>>>
>>> my $sp = XMLRPC::PurePerl->double(1);
>>
>> Why is this a double? start_paused should be a bool.
>>
>>> print Dumper($sp);
>>> $s_p = $sp->value();
>>> print "asdfa " . $s_p . "\n";;
>>> $host_ref = extractvalue($xen->simple_request("VM.start", $session, 
>>> $vm_ref->[0], $s_p, 0));
>>>
>>> sub extractvalue{
>>>     my ($val) = @_;
>>>     print Dumper ($val);
>>>     if ($val->{'Status'} eq "Success"){
>>>         return $val->{'Value'};
>>>     } else {
>>>         return undef;
>>>     }
>>> }
>>>
>>> Output
>>>
>>> $VAR1 = {
>>>           'Value' => [
>>>                      'OpaqueRef:04969f9f-41f9-15e0-8821-93395c8d22ed'
>>>                    ],
>>>           'Status' => 'Success'
>>>         };
>>> $VAR1 = [
>>>           'OpaqueRef:04969f9f-41f9-15e0-8821-93395c8d22ed'
>>>         ];
>>> $VAR1 = bless( {
>>>                  'val' => 1,
>>>                  'type' => 'double'
>>>                }, 'XMLRPC::PurePerl::Type::double' ); asdfa 1
>>> $VAR1 = {
>>>           'ErrorDescription' => [
>>>                                 'FIELD_TYPE_ERROR',
>>>                                 'start_paused'
>>>                               ],
>>>           'Status' => 'Failure'
>>>         };
>>>
>>> Regards,
>>> Rawat
>>>
>>> -----Original Message-----
>>> From: Mike McClurg [mailto:mike.mcclurg@xxxxxxxxxx]
>>> Sent: Monday, November 12, 2012 2:50 PM
>>> To: Rawat, Vishwanath
>>> Cc: xen-api@xxxxxxxxxxxxx
>>> Subject: Re: [Xen-API] perl Xen API How to
>>>
>>> On 12/11/12 09:15, Rawat, Vishwanath wrote:
>>>> Mike,
>>>>    I tried encoding value as Boolean using XMLRPC::PurePerl it didn't work.
>>>> For second part I tried passing int($min) instead of $min but still didn't 
>>>> work.
>>>>
>>>
>>> Did it give you a type error again? Is there any way you can ask the 
>>> library to encode the request so that you can then print it out and verify 
>>> that it's correct, without actually sending the request to the server?
>>>
>>> Mike
>>>
>>>> Regards,
>>>> Rawat
>>>>
>>>> -----Original Message-----
>>>> From: Mike McClurg [mailto:mike.mcclurg@xxxxxxxxxx]
>>>> Sent: Friday, November 09, 2012 5:30 PM
>>>> To: Rawat, Vishwanath
>>>> Cc: xen-api@xxxxxxxxxxxxx
>>>> Subject: Re: [Xen-API] perl Xen API How to
>>>>
>>>> On 09/11/12 11:38, Rawat, Vishwanath wrote:
>>>>> Hi,
>>>>>
>>>>>                 I am writing some perl scripts which will perform 
>>>>> some action on Xen server. I am using RPC::XML for that.
>>>>>
>>>>
>>>> <snip>
>>>>
>>>>> $xen->simple_request("VM.start", $session, $vm_ref, $start_paused, 
>>>>> $force);
>>>>>
>>>>>         Error displayed upon execution of above code is
>>>>>
>>>>>        $VAR1 = [
>>>>>
>>>>>            'FIELD_TYPE_ERROR',
>>>>>
>>>>>            'start_paused'
>>>>>
>>>>>         ];
>>>>>
>>>>>   start_paused option is of type Boolean so I tried all different 
>>>>> combination like True, TRUE, true, Yes, ON. Nothing seems to be working.
>>>>> Can someone let me know what is the correct way of passing Boolean 
>>>>> value to simple_request method.
>>>>>
>>>>
>>>> This looks like a Perl XMLRPC problem to me. See here:
>>>>
>>>> http://search.cpan.org/~rdietrich/xmlrpc-pureperl-0.03/lib/XMLRPC/PurePerl.pm#DATATYPES:
>>>>
>>>> You can use that to explicitly encode a value as a boolean. I'm not much 
>>>> of a Perl expert, so I don't know if that library is compatible with 
>>>> yours, but I guess that link should get you moving in the right direction.
>>>>
>>>> For your question below, those values are supposed to be integers. 
>>>> I'm not sure why you'd be getting a field error there; maybe Perl is 
>>>> treating 'min' as a string? (Everything in Perl is a string, right?
>>>> ;)
>>>> )
>>>>
>>>> You probably know this already, but make sure you have the XenAPI 
>>>> reference at hand when working with the API:
>>>> http://docs.vmd.citrix.com/XenServer/6.1.0/1.0/en_gb/api/
>>>>
>>>> Mike
>>>>
>>>>>  
>>>>>
>>>>> 2.       I was trying to set dynamic memory range of a VM. Code is
>>>>>
>>>>> $min = 1024*1024*1024; # (also tried 1g,1GiB)
>>>>>
>>>>> $max = 2*1024*1024*1024;  #(also tried 2g,2GiB)
>>>>>
>>>>> $vm_ref = <vm_opaque_ref>;
>>>>>
>>>>>       $xen->simple_request("VM.set_memory_dynamic_range", $session, 
>>>>> $vm_ref, $min, $max);
>>>>>
>>>>>   Getting same error as above
>>>>>
>>>>> $VAR1 = [
>>>>>
>>>>>            'FIELD_TYPE_ERROR',
>>>>>
>>>>>            'min'
>>>>>
>>>>>         ];
>>>>>
>>>>> Would like to know what is the correct way of passing these type of 
>>>>> values.
>>>>>
>>>>>  
>>>>>
>>>>> 3.       Was trying to create network on a given Xen server.
>>>>>
>>>>> $network_name = "some_network_xenbr";
>>>>>
>>>>> $xen->simple_request("network.create", $session, $network_name);
>>>>>
>>>>>   Getting the following error
>>>>>
>>>>> $VAR1 = [
>>>>>
>>>>>           'XMLRPC_UNMARSHAL_FAILURE',
>>>>>
>>>>>           'unbox: Element=string should contain \'struct\'',
>>>>>
>>>>>           '<string>name-label=NACL_Test_Xenbr1352382351</string>'
>>>>>
>>>>>         ];
>>>>>
>>>>> $network_name should be of type "network record", which I don't 
>>>>> know what it means. Can someone help me with this.
>>>>>
>>>>>  
>>>>>
>>>>> Thanks a lot in advance.
>>>>>
>>>>>  
>>>>>
>>>>> Regards,
>>>>>
>>>>> Rawat
>>>>>
>>>>>  
>>>>>
>>>>>  
>>>>>
>>>>
>>>
>>
> 


_______________________________________________
Xen-api mailing list
Xen-api@xxxxxxxxxxxxx
http://lists.xen.org/cgi-bin/mailman/listinfo/xen-api


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.