Hi,
                I was trying to create a new network on a Xen server using 
RPC::XML calls.
To create network, network_record need to be passed to 
RPC::XML::Client::simple_request. I didn't want to manually create network 
record so I used a method call to get network_record and then used this record 
to create new network.

Here is the script which does the above

use Data::Dumper;
use RPC::XML;
use RPC::XML::Client;
use RPC::XML::Server;
my $xenhost = "xen_host";
my $user = "user";
my $passwd = "passwd";
my $xen = RPC::XML::Client->new("http://$xenhost:80";);
print "Coming here\n";
my $s = $xen->simple_request("session.login_with_password",$user,$passwd);
if (! $s) {
    print "error is $@ \n";
}

my $session = extractvalue($xen->simple_request("session.login_with_password",
              $user,$passwd));
if (! $session){
    print "connection failure : $xenhost\n";
    exit;
}

$net_ref = extractvalue($xen->simple_request("network.get_by_uuid", $session, 
"086e19b2-fe6a-69ed-47df-4c91bd5c5a15"));

$rec_ref = extractvalue($xen->simple_request("network.get_record", $session, 
$net_ref));

$net = extractvalue($xen->simple_request("network.create", $session, $rec_ref));

This is the error I got

$VAR1 = {
         'ErrorDescription' => [
                                'FIELD_TYPE_ERROR',
                                'mTU'
                              ],
          'Status' => 'Failure'
        };

This is how network record looks like

$VAR1 = {
          'Value' => {
                     'other_config' => {
                                       'automatic' => 'false'
                                     },
                     'blobs' => {},
                     'uuid' => '086e19b2-fe6a-69ed-47df-4c91bd5c5a15',
                     'bridge' => 'xenbr0',
                     'tags' => [],
                     'MTU' => '1500',
                     'VIFs' => [
                               'OpaqueRef:ad959f71-550f-f901-323a-f79b81e763f5',
                               'OpaqueRef:7e30f00a-66ee-1cc7-e68f-de3bccab2bea',
                               'OpaqueRef:502ca96f-ccbf-780d-8978-8c76be41c838'
                             ],
                     'PIFs' => [
                               'OpaqueRef:d88b32e6-6005-631b-c843-3281a45db361',
                               'OpaqueRef:35a95e44-7839-4546-8b02-02132fbfe9ad'
                             ],
                     'name_label' => 'Pool-wide network associated with eth0',
                     'name_description' => '',
                     'allowed_operations' => [],
                     'current_operations' => {}
                   },
          'Status' => 'Success'
        };


So I changed MTU to mTU in network record. It worked fine.

$rec_ref->{mTU} = 1500;
delete($rec_ref->{MTU};
$net = extractvalue($xen->simple_request("network.create", $session, $rec_ref));

And this is the output

$VAR1 = {
          'Value' => 'OpaqueRef:a53e5a07-dcc8-b5d5-196d-5e894b44ea7a',
          'Status' => 'Success'
        };

So field accepted by "network.create" is 'mTU' and not 'MTU' which is I think 
wrong because field return by "network.get_record" is 'MTU'.

Problem 2.
                I was trying to create a VIF the way I created network. This is 
the code that I used

$vif_ref = extractvalue($xen->simple_request("VIF.get_by_uuid", $session, 
"086e19b2-fe6a-69ed-47df-4c91bd5c5a15"));

$rec_ref = extractvalue($xen->simple_request("VIF.get_record", $session, 
$vif_ref));

$vif = extractvalue($xen->simple_request("VIF.create", $session, $rec_ref));

This is how VIF record looks like

$VAR1 = {
          'other_config' => {},
          'network' => 'OpaqueRef:c76e3a4d-ceb0-c66f-707d-a6fdd2e06839',
          'MAC_autogenerated' => 1,
          'VM' => 'OpaqueRef:76120c51-60d2-0ef6-dda6-99fb12d9ce27',
          'qos_algorithm_params' => {},
          'uuid' => '9e72c72e-6d23-b300-9a1d-a54e2d6a50ab',
          'qos_algorithm_type' => '',
          'metrics' => 'OpaqueRef:a343e74c-12b3-dd73-9f3e-ac0113fd17a3',
          'qos_supported_algorithms' => [],
          'status_code' => '0',
          'runtime_properties' => {},
          'mTU' => 1500,
          'MAC' => 'fe:13:d8:39:e5:6d',
          'device' => '',
          'MTU' => 1500,
          'currently_attached' => 1,
          'allowed_operations' => [
                                  'attach',
                                  'unplug'
                                ],
          'status_detail' => '',
          'current_operations' => {}
        };

When I ran above code this is the error I got

$VAR1 = {
          'ErrorDescription' => [
                                'FIELD_TYPE_ERROR',
                                'mTU'
                              ],
          'Status' => 'Failure'
        };

So I did the same thing that I did with "network.create", but it didn't work.

$VAR1 = {
          'ErrorDescription' => [
                                'INTERNAL_ERROR',
                                'Server_helpers.Dispatcher_FieldNotFound("MTU")'
                              ],
          'Status' => 'Failure'
        };

So I kept both mTU and MTU having the same value. Still didn't work

$VAR1 = {
          'ErrorDescription' => [
                                'FIELD_TYPE_ERROR',
                                'mTU'
                              ],
          'Status' => 'Failure'
        };

It looks like xen-api issue to me. Can someone please help me with this.

Regards,
Rawat

_______________________________________________
Xen-api mailing list
[email protected]
http://lists.xen.org/cgi-bin/mailman/listinfo/xen-api

Reply via email to