<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=us-ascii">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@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:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
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-GB" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">Hi Folks,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Now we have explicit control to limit the version of rpc methods that can be sent, but I’m wondering what I need to do now to make the next version of a call adding an additional parameter.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">It looks like the current code is really focused on the data types being passed, rather that the signature of the call (i.e do we pass an old or new style instance object).   So taking terminate_instance() as an example:
<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">    def terminate_instance(self, ctxt, instance, bdms, reservations=None):<o:p></o:p></p>
<p class="MsoNormal">        if self.can_send_version('2.35'):<o:p></o:p></p>
<p class="MsoNormal">            version = '2.35'<o:p></o:p></p>
<p class="MsoNormal">        else:<o:p></o:p></p>
<p class="MsoNormal">            version = '2.27'<o:p></o:p></p>
<p class="MsoNormal">            instance = jsonutils.to_primitive(instance)<o:p></o:p></p>
<p class="MsoNormal">        bdms_p = jsonutils.to_primitive(bdms)<o:p></o:p></p>
<p class="MsoNormal">        self.cast(ctxt, self.make_msg('terminate_instance',<o:p></o:p></p>
<p class="MsoNormal">                instance=instance, bdms=bdms_p,<o:p></o:p></p>
<p class="MsoNormal">                reservations=reservations),<o:p></o:p></p>
<p class="MsoNormal">                topic=_compute_topic(self.topic, ctxt, None, instance),<o:p></o:p></p>
<p class="MsoNormal">                version=version)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">If I want to add a parameter and bump this to version 2.36, do I just change the version checked in can_send_version – or should there now be specific handling for each new version:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">    def terminate_instance(self, ctxt, instance, bdms, reservations=None, clean_shutdown=False):<o:p></o:p></p>
<p class="MsoNormal">        <o:p></o:p></p>
<p class="MsoNormal">        bdms_p = jsonutils.to_primitive(bdms)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">        if self.can_send_version('2.36'):<o:p></o:p></p>
<p class="MsoNormal">            version = '2.36' <o:p></o:p></p>
<p class="MsoNormal">           msg = self.make_msg('terminate_instance',<o:p></o:p></p>
<p class="MsoNormal">                             instance=instance, bdms=bdms_p,<o:p></o:p></p>
<p class="MsoNormal">                             reservations=reservations,<o:p></o:p></p>
<p class="MsoNormal">                             clean_shutdown=clean_shutdown)<o:p></o:p></p>
<p class="MsoNormal">        elif self.can_send_version('2.35'):<o:p></o:p></p>
<p class="MsoNormal">            version = '2.35'<o:p></o:p></p>
<p class="MsoNormal">           msg = self.make_msg('terminate_instance',<o:p></o:p></p>
<p class="MsoNormal">                             instance=instance, bdms=bdms_p,<o:p></o:p></p>
<p class="MsoNormal">                             reservations=reservations)<o:p></o:p></p>
<p class="MsoNormal">        else:<o:p></o:p></p>
<p class="MsoNormal">            version = '2.27'<o:p></o:p></p>
<p class="MsoNormal">            instance = jsonutils.to_primitive(instance)<o:p></o:p></p>
<p class="MsoNormal">            msg = self.make_msg('terminate_instance',<o:p></o:p></p>
<p class="MsoNormal">                             instance=instance, bdms=bdms_p,<o:p></o:p></p>
<p class="MsoNormal">                             reservations=reservations)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">        self.cast(ctxt, msg,<o:p></o:p></p>
<p class="MsoNormal">                    topic=_compute_topic(self.topic, ctxt, None, instance),<o:p></o:p></p>
<p class="MsoNormal">                    version=version)<o:p></o:p></p>
</div>
</body>
</html>