<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
span.EmailStyle18
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.EmailStyle20
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:70.85pt 85.05pt 70.85pt 85.05pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal">Good morning, Tânia.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Somebody else can correct me if I’m wrong, but IIRC, 'system.config.addChannels' is referring to a configuration channel.  That’s not a child channel, those are different constructs.  Config channels contain configuration files, child channels
 contain RPMs and are subordinate to base distribution channels.  I suspect the function call you’re really looking for is system.setChildChannels.  That will also require getting the set from system.getChildChannels and add your new value to the set.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Secondly, that sort of error usually indicates that there’s an error in arguments.  The function call processing uses argument types to route function calls based on arguments lists.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">$systemInChanel = $client->call('system.config.addChannels', $session, $record, $chanel, $client->boolean($isDir));<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Arg1 is good, that’s your basic function call.<o:p></o:p></p>
<p class="MsoNormal">Arg2 is your session set, also good.<o:p></o:p></p>
<p class="MsoNormal">Arg3… based on the docs I’m looking at, it should be an array, ot a solitary value, of system IDs.<o:p></o:p></p>
<p class="MsoNormal">Arg4… also should be an array, of configuration channel labels.<o:p></o:p></p>
<p class="MsoNormal">Arg5, good, Boolean value.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Try this:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">$systemInChanel = $client->call('system.config.addChannels', $session, ( $record ), ( $chanel ), $client->boolean($isDir));<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">to set arg3 and arg4 into a list prior to passing the argument list.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Jeff Kalchik<o:p></o:p></p>
<p class="MsoNormal">Systems Engineering<o:p></o:p></p>
<p class="MsoNormal">Land O’Lakes<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> spacewalk-list-bounces@redhat.com [mailto:spacewalk-list-bounces@redhat.com]
<b>On Behalf Of </b>Tânia Agulhas Marques Valente [EE] (SSI)<br>
<b>Sent:</b> Monday, December 18, 2017 4:48 AM<br>
<b>To:</b> spacewalk-list@redhat.com<br>
<b>Subject:</b> [Spacewalk-list] Question about perl with API<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Hello<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I am trying to make a perl script to add a child channel to a client system in Spacewalk.<o:p></o:p></p>
<p class="MsoNormal">I am relatively new with perl , managed to already make some that really help me a lot and I wanted to go further.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">But I am getting an error and it seems I am not getting nowhere. Maybe someone can help me.
<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">The script is:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">#!/usr/bin/perl<o:p></o:p></p>
<p class="MsoNormal">use Frontier::Client;<o:p></o:p></p>
<p class="MsoNormal">use Data::Dumper;<o:p></o:p></p>
<p class="MsoNormal">use warnings;<o:p></o:p></p>
<p class="MsoNormal">use 5.010;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">my $num_args = $#ARGV + 1;<o:p></o:p></p>
<p class="MsoNormal">if ( $num_args < 2 ){<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">print "\nInsufficient Arguments !AddSystemToChannel.pl ficheiro_com_systems_IDs channel\n" ;<o:p></o:p></p>
<p class="MsoNormal">exit;<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">my $HOST = 'spaceserver';<o:p></o:p></p>
<p class="MsoNormal">my $user = 'username';<o:p></o:p></p>
<p class="MsoNormal">my $pass = 'user_pass';<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">my $file=$ARGV[0];<o:p></o:p></p>
<p class="MsoNormal">my $channel=$ARGV[1];<o:p></o:p></p>
<p class="MsoNormal">my $client = new Frontier::Client(url => "<a href="http://$HOST/rpc/api">http://$HOST/rpc/api</a>");<o:p></o:p></p>
<p class="MsoNormal">my $session = $client->call('auth.login',$user, $pass);<o:p></o:p></p>
<p class="MsoNormal">my $isDir = 1;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">open (FILE, $file) or print "O ficheiro $file não existe";<o:p></o:p></p>
<p class="MsoNormal">open (FILE2, $channel) or print "O ficheiro $channel não existe";<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">while (!eof(FILE) and !eof(FILE2)) {<o:p></o:p></p>
<p class="MsoNormal">my $record = <FILE>;<o:p></o:p></p>
<p class="MsoNormal">my $chanel = <FILE2>;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">#$bb = $client->call('channel.listMyChannels', $session);<o:p></o:p></p>
<p class="MsoNormal">#foreach my $chanelsAll (@$bb) {<o:p></o:p></p>
<p class="MsoNormal">#my $label = $chanelsAll->{'label'};<o:p></o:p></p>
<p class="MsoNormal">#my $idchanels = $chanelsAll->{'id'};<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">$systemInChanel = $client->call('system.config.addChannels', $session, $record, $chanel, $client->boolean($isDir));<o:p></o:p></p>
<p class="MsoNormal">&checkRetVal("Set config channel (s): $record",$systemInChanel);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal">$client->call('auth.logout', $session);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I pass two arguments, that are files. Just for test “file” has a client ID (1000010378) and “file2” has the name of the chilchanel (spacewalk_cli2.6_rh6_64).<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">The error I get is:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Fault returned from XML RPC Server, fault code -1: com.redhat.rhn.common.translation.TranslationException: Could not find translator for class java.lang.String to interface java.util.List<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I assumed there is something wrong with $chanel, since that is the string and $record is an integer. Both must be arrays, and that’s why I make a list in a file and pass it on command line (even though this test only have an entry on each
 file/list), I have used this before in other scripts and it worked, so I am getting to a dead end I believe because of my lack of knowledge in perl. But you must have an objective to write a script so I am learning when I need it.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Maybe someone already used this API call and can help me.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thank you<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Arial",sans-serif;color:#1F497D"><o:p> </o:p></span></b></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
This message may contain confidential material from Land O'Lakes, Inc. (or its subsidiary) for the sole use of the intended recipient(s) and may not be reviewed, disclosed, copied, distributed or used by anyone other than the intended recipient(s). If you are
 not the intended recipient, please contact the sender by reply email and delete all copies of this message.
</body>
</html>