Again, there's a difference between the "required" validation and the actual runtime validation. the runtime one cannot be done during instantiation phase, which is why there are two separate validations.
I do not know how come Tal's branch (which by now has been merged to master) helped fixing your issue, so I might have misunderstood something about your problem :) Ran On Thu, Jun 1, 2017 at 2:11 PM, D Jayachandran <[email protected]> wrote: > Hi Tal, > > I did test your branch https://github.com/apache/ > incubator-ariatosca/tree/ARIA-149-functions-in-operation-configuration > and it seems to have the fix for operation/interface inputs. > > Regards, > DJ > -----Original Message----- > From: D Jayachandran > Sent: Thursday, June 01, 2017 4:40 PM > To: [email protected] > Subject: RE: Query on operation inputs > > Hi Ran, > > The validation of operation inputs is also done during instantiation. > Please find below. > > [root@DJ-DEV tal-test]# python > /root/tal-test/incubator-ariatosca/aria/cli/main.py > service-templates store /root/tosca_simple_yaml_ > plugin/kubernetes-deployment.yaml st-3 Storing service template st-3... > Validation issues: > 4: interface definition "Standard" does not assign a value to a required > operation input "create.name" in "web_app" > @"/root/tosca_simple_yaml_plugin/kubernetes-deployment.yaml":64:25 > Failed to parse service template > > > I think the branch Tal provided https://github.com/apache/ > incubator-ariatosca/tree/ARIA-149-functions-in-operation-configuration > has fixed the issue on operation inputs. > > Regards, > DJ > > -----Original Message----- > From: Ran Ziv [mailto:[email protected]] > Sent: Thursday, June 01, 2017 2:27 PM > To: [email protected] > Subject: Re: Query on operation inputs > > I think there's some confusion about different types of inputs. The > validation on inputs that is done during parsing (actually "instantiation") > stage is for the service's inputs, not operations. > Execution and operation inputs (or more broadly, arguments) are validated > before an execution is run. > > > On Tue, May 30, 2017 at 8:48 AM, D Jayachandran < > [email protected] > > wrote: > > > Hi Ran, > > > > I think Tal as updated, it might be possibly a bug here. May be we all > > should come to common understanding. > > > > As I updated earlier, since the inputs validation are completing > > during parsing stage, I don’t feel why the validation is required > > again during orchestration time ? > > Does the TOSCA spec actually refers the 2nd points of yours ? (The > > operation inputs must either have a default value in the type > > definition or be supplied with a value in the actual operation > > definition) > > > > > > Regards, > > DJ > > > > -----Original Message----- > > From: Ran Ziv [mailto:[email protected]] > > Sent: Sunday, May 28, 2017 6:14 PM > > To: [email protected] > > Subject: Re: Query on operation inputs > > > > I've reviewed your example, and I think either I'm missing something > > or my original explanation still applies: > > > > 1. The validation at orchestration time for whether required inputs > > have been specified does not deal with the "required" flag at all > > (actually, the flag never makes it past the parsing stage and into the > storage models). > > > > 2. For operation inputs to validate successfully, each input must > > either have a default value in the type definition or be supplied with > > a value in the actual operation definition. In your case, both > > "labels" and "isService" for example didn't have a default value set > > in the type definition (as opposed to "target_host" for example) - > However, "isService" > > was set to "true" in the actual operation definition, while "labels" > > wasn't assigned with any such value - Which is why you received the > > validation error for a missing required input over the "labels" > > operation input. > > > > > > Does this make sense? > > > > > > On Fri, May 26, 2017 at 7:26 PM, Tal Liron <[email protected]> wrote: > > > > > OK, I see now -- the error you are getting is about the operation > > > inputs, not the topology inputs which are different. > > > > > > You may have discovered a bug here. It seems like you're doing the > > > right thing and giving values to all these inputs, so it should not > > > be complaining. > > > > > > I am actually working on a PR right now that makes some significant > > > changes to this mechanism, but it's not merged yet. I don't mean to > > > waste your time, but I would appreciate if you could test it out for > > > me in your environment. Here is the branch to use: > > > > > > https://github.com/apache/incubator-ariatosca/tree/ARIA- > > > 149-functions-in-operation-configuration > > > > > > > > > On Fri, May 26, 2017 at 4:53 AM, D Jayachandran < > > > [email protected] > > > > wrote: > > > > > > > Hi Tal, > > > > > > > > Thanks for your email. > > > > > > > > With the same example you took with my inputs "isService" & "image". > > > > ARIA has a problem when I don’t specify "isService" which is > > > > defined as > > > > required: false. > > > > > > > > Please find just the different inputs used in my example ( > > > > topology, node type and node template) > > > > > > > > TOPOLOGY INPUTS > > > > > > > > inputs: > > > > web_app_name: > > > > type: string > > > > value: tosca-webapp > > > > > > > > web_app_image: > > > > type: string > > > > value: kuber-master:5000/webwithdbinput > > > > > > > > web_app_port: > > > > type: integer > > > > value: 80 > > > > > > > > db_name: > > > > type: string > > > > value: tosca-database > > > > > > > > db_image: > > > > type: string > > > > value: kuber-master:5000/dbforweb > > > > > > > > db_port: > > > > type: integer > > > > value: 3306 > > > > > > > > > > > > NODE-TYPE INPUTS > > > > > > > > create: > > > > inputs: > > > > name: > > > > type: string > > > > required: true > > > > image: > > > > type: string > > > > required: true > > > > exposed_port: > > > > type: integer > > > > required: false > > > > target_port: > > > > type: integer > > > > required: false > > > > default: 8080 > > > > target_host: > > > > type: string > > > > required: false > > > > default: test > > > > labels: > > > > type: string > > > > required: false > > > > isService: > > > > type: boolean > > > > required: false > > > > > > > > NODE-TEMPLATE INPUTS > > > > > > > > interfaces: > > > > Standard: > > > > create: > > > > inputs: > > > > name: { get_input: web_app_name } > > > > image: { get_property: [ web_app, image] > } > > > > exposed_port: { get_property: [ > > > > web_app, > > > port] > > > > } > > > > target_host: { get_property: [ > > > > database, > > > name] > > > > } > > > > target_port: { get_property: [ > > > > database, > > > port] > > > > } > > > > isService: true > > > > > > > > All my TOPOLOGY templates have a value, so it's not an issue in my > > case. > > > > Only "name" and "image" from my NODE-TYPE have the required > > > > definition as "true". So I Must mandatory have these input > > > > specified in my > > > NODE-TEMPLATE > > > > which I have specified. > > > > Remaining NODE-TYPE inputs "exposed_port", "target_port", > > > > "target_host", > > > " > > > > labels" and "isService" have the required definition as "false". > > > > Hence > > > I > > > > may or may not specify them in my NODE-TEMPLATE input section. > > > > Except "labels" I have metioned all my optional outputs. I expect > > > > my service to be started without any issue but it fails with the > > > > error > > > "label" > > > > is not specified. This is why I find ARIA is having a problem. > > > > > > > > > > > > # python /root/incubator-ariatosca/aria/cli/main.py executions > > > > start -s > > > > demo-sr-1 install > > > > Required inputs [u'labels'] have not been specified - expected > inputs: > > > > [u'isService', u'name', u'exposed_port', u'image', u'labels', > > > > u'target_port', u'target_host'] > > > > > > > > > > > > Regards, > > > > DJ > > > > -----Original Message----- > > > > From: Tal Liron [mailto:[email protected]] > > > > Sent: Thursday, May 25, 2017 11:19 PM > > > > To: [email protected] > > > > Subject: Re: Query on operation inputs > > > > > > > > Hi DJ, let's try to look at these issues one at a time. > > > > > > > > I got your YAML to parse OK, but had to change it around a bit... > > > > it > > > would > > > > help if you used a complete example here, and also if it would be > > > > much shorter to demonstrate the specific issue you are asking about. > > > > There's a lot going on in this example and you are asking a few > > > > different > > > questions. > > > > > > > > The error message you are getting is not about operation inputs, > > > > but > > > about > > > > topology template inputs. I can't help much here unless I see > > > > those input > > > > definitions: they do not appear in your YAML fragment. In general, > > > > see section 3.8.2.1 in the TOSCA spec. Values for topology > > > > template inputs > > > must > > > > come from an external source, and indeed in this case you are > > > > providing them via the CLI. ARIA makes sure that all required > > > > topology template inputs have a value, and that it is a valid > > > > value for the type. So, > > > that's > > > > the error you are seeing. > > > > > > > > The inputs we *do* see in your YAML fragment are input definitions > > > > at the node type and input assignments at the node template. These > > > > work differently from topology template inputs, because their > > > > values do not > > > come > > > > from an external source directly (though this can be indirect via > > > get_input > > > > and other intrinsic functions). > > > > > > > > According to the spec you quote (3.5.8.2) , the key "required" is > > > optional > > > > in YAML, meaning that you do not have to specify it. Its default > > > > value is "true". So, unless you specify "required: false", that > > > > property is required. So actually all your "required" true" lines > > > > are redundant (informative, but don't change functionality). > > > > > > > > So, let's look at your "isService" input. At the node type, it is > > > > defined as required: false. And indeed, if at the node template I > > > > don't assign a value to it, ARIA has no problem. However, if you > > > > do not assign a value > > > to > > > > a required input, say "image", then ARIA would be unhappy. > > > > > > > > I hope this is clear, though I have a feeling you are asking about > > > > something else which I'm not quite understanding. Again, a shorter > > > > and complete example would help demonstrate what you mean. > > > > > > > > > > > > On Thu, May 25, 2017 at 9:56 AM, D Jayachandran < > > > > [email protected] > > > > > wrote: > > > > > > > > > Hi Ran, > > > > > > > > > > When I refer the TOSCA spec, it says > > > > > > > > > > " An optional key that declares a property as required (true) or > > > > > not (false)." > > > > > property_required: represents an optional boolean value (true or > > > > > false) indicating whether or not the property is required. If > > > > > this keyname is not present on a property definition, then the > > > > > property SHALL be considered required (i.e., true) by default. > > > > > > > > > > It is not clear to whom this property is required or not ? > > > > > > > > > > With your argument, it seems we always need to provide a default > > > > > value to an input, when we don’t declare in my service template. > > > > > Is my understanding correct here ? > > > > > But the TOSCA spec says the default value is always an optional > one. > > > > > Also since the parser validates the service template inputs > > > > > according to the "required" field am not sure why we need > > > > > another validation during the execution ? > > > > > > > > > > I also don’t find any reference in TOSCA spec which says, all > > > > > inputs defined in node type be declared in node template to be > > > > > used by any operation. Could you please help me with that > > > > > reference > > in TOSCA spec ? > > > > > > > > > > > > > > > Regards, > > > > > DJ > > > > > > > > > > -----Original Message----- > > > > > From: Ran Ziv [mailto:[email protected]] > > > > > Sent: Thursday, May 25, 2017 5:16 PM > > > > > To: [email protected] > > > > > Subject: Re: Query on operation inputs > > > > > > > > > > Yes, I understand the confusion here. The issue is that, despite > > > > > its name, the "required" field isn't what defines whether an > > > > > input is optional or not > > > > > - it is only relevant during the parsing phase (This is > > > > > according to our understanding of the TOSCA spec. Tal could > > > > > probably expand more on > > > > this). > > > > > What's relevant for deciding whether an input is required or not > > > > > for actual execution is whether it has a default value - so all > > > > > inputs would have a value when the actual execution takes place. > > > > > > > > > > I hope this helps clearing this confusing issue.. > > > > > > > > > > Ran > > > > > > > > > > On Thu, May 25, 2017 at 2:08 PM, D Jayachandran < > > > > > [email protected] > > > > > > wrote: > > > > > > > > > > > Hi Ran, > > > > > > > > > > > > Thanks for your response. > > > > > > > > > > > > In my case, I have defined the inputs as optional under the > > > > > > create operation of my custom node type. > > > > > > Since it is an optional input, I haven't declared it in my > > > > node-template. > > > > > > I assume optional input may or may not be declared in a > > > > > > service template > > > > > ? > > > > > > Am I missing something here ? > > > > > > > > > > > > Please find below the node type and node template in my case. > > > > > > > > > > > > # python /root/incubator-ariatosca/aria/cli/main.py executions > > > > > > start -s > > > > > > demo-sr-1 install > > > > > > Required inputs [u'labels'] have not been specified - expected > > > inputs: > > > > > > [u'isService', u'name', u'exposed_port', u'image', u'labels', > > > > > > u'target_port', u'target_host'] > > > > > > > > > > > > Node-type > > > > > > > > > > > > node_types: > > > > > > test.nodes.Container.Application: > > > > > > derived_from: tosca.nodes.Root > > > > > > properties: > > > > > > name: > > > > > > type: string > > > > > > required: true > > > > > > image: > > > > > > type: string > > > > > > required: true > > > > > > port: > > > > > > type: integer > > > > > > required: false > > > > > > interfaces: > > > > > > Standard: > > > > > > type: tosca.interfaces.node.lifecycle.Standard > > > > > > create: > > > > > > inputs: > > > > > > name: > > > > > > type: string > > > > > > required: true > > > > > > image: > > > > > > type: string > > > > > > required: true > > > > > > exposed_port: > > > > > > type: integer > > > > > > required: false > > > > > > target_port: > > > > > > type: integer > > > > > > required: false > > > > > > target_host: > > > > > > type: integer > > > > > > required: false > > > > > > labels: > > > > > > type: string > > > > > > required: false > > > > > > isService: > > > > > > type: boolean > > > > > > required: false > > > > > > implementation: > > > > > > primary: sample > > > > > > > sample.samplemethod > > > > > > > > > > > > Node template: > > > > > > > > > > > > web_app: > > > > > > type: test.nodes.Container.Application > > > > > > properties: > > > > > > name: { get_input: web_app_name } > > > > > > image: { get_input: web_app_image } > > > > > > port: { get_input: web_app_port } > > > > > > requirements: > > > > > > - dependency: > > > > > > node: database > > > > > > relationship: > > > > > > type: tosca.relationships.DependsOn > > > > > > interfaces: > > > > > > Standard: > > > > > > create: > > > > > > inputs: > > > > > > name: { get_input: web_app_name } > > > > > > image: { get_property: [ web_app, > > > > > > image] > > > } > > > > > > exposed_port: { get_property: [ > > > > > > web_app, port] } > > > > > > target_host: { get_property: [ > > > > > > database, name] } > > > > > > target_port: { get_property: [ > > > > > > database, port] } > > > > > > isService: true > > > > > > > > > > > > Regards, > > > > > > DJ > > > > > > > > > > > > -----Original Message----- > > > > > > From: Ran Ziv [mailto:[email protected]] > > > > > > Sent: Thursday, May 25, 2017 4:07 PM > > > > > > To: [email protected] > > > > > > Subject: Re: Query on operation inputs > > > > > > > > > > > > Hi, > > > > > > > > > > > > Weird, I remember responding to this mail before, but it > > > > > > doesn't seem like I have. > > > > > > In any case, it is indeed our intention that no inputs may be > > > > > > passed into operations unless they have been clearly declared > > > > > > in the > > > > > service-template. > > > > > > ARIA opts to be a strict implementation of TOSCA wherever > possible. > > > > > > > > > > > > Ran > > > > > > > > > > > > On Thu, May 25, 2017 at 1:22 PM, D Jayachandran < > > > > > > [email protected] > > > > > > > wrote: > > > > > > > > > > > > > Hi, > > > > > > > > > > > > > > The latest Apache-aria is throwing a validation error during > > > > > > > the execution of a service. > > > > > > > It demands all the operation inputs defined in a node type > > > > > > > be declared in the service template though they are optional > inputs. > > > > > > > Could you please let us know if this change was intentional ? > > > > > > > > > > > > > > > > > > > > > Regards, > > > > > > > DJ(D Jayachandran) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > Tal Liron > > > > Senior Engineer > > > > [email protected] | +1 (773) 828-9339 Cloudify | > > > > http://getcloudify.org > > > > <http://getcloudify.org?utm_source=signaturesatori&utm_ > > > > medium=email&utm_campaign=general_signature> > > > > > > > > <https://twitter.com/CloudifySource> > > > > <https://www.linkedin.com/groups/8467478> > > > > <https://github.com/cloudify-cosmo> <https://github.com/cloudify- > > cosmo > > > > > > > > [image: Azure Webinar] > > > > <http://getcloudify.org/webinars/Azure-plugin-for- > > > > cloudify-webinar.html?utm_source=signaturesatori&utm_ > > > > medium=email&utm_campaign=general_signature> > > > > > > > > > > > > > > > > -- > > > Tal Liron > > > Senior Engineer > > > [email protected] | +1 (773) 828-9339 Cloudify | > > > http://getcloudify.org > > > <http://getcloudify.org?utm_source=signaturesatori&utm_ > > > medium=email&utm_campaign=general_signature> > > > > > > <https://twitter.com/CloudifySource> > > > <https://www.linkedin.com/groups/8467478> > > > <https://github.com/cloudify-cosmo> <https://github.com/cloudify- > cosmo > > > > > > [image: Azure Webinar] > > > <http://getcloudify.org/webinars/Azure-plugin-for- > > > cloudify-webinar.html?utm_source=signaturesatori&utm_ > > > medium=email&utm_campaign=general_signature> > > > > > >
