Sorry for the broken email, it seems my markup translator has some funky
behavior. The code block is:

from aria import operation

@operation
def samplemethod(ctx=None, **inputs):
  print "ctx -->",ctx
  print "inputs -->",inputs
  ctx.node.attributes['test'] = "abc"


On Tue, Aug 1, 2017 at 1:48 PM Maxim Orlov <ma...@cloudify.co> wrote:

> Oh, i see. For each method which represents an operation, you should use
> the @operation decorator. Thus samplemethod would look like this:
>
> from aria import operation
> @operation
>
> def samplemethod(ctx=None, **inputs):
>     print "ctx -->",ctx
>     print "inputs -->",inputs
>     ctx.node.attributes['test'] = "abc"
>
> It is actually this decorator which wraps the attribute model for you.
>
> p.s.
> the ctx comes with its own logger, thus using ctx.logger.info("ctx -->
> {0}".format(ctx)) instead of print "ctx -->", ctx. This will persist your
> logs, and in case of remote execution, print your logs to the local
> terminal.
> ​
>
> On Tue, Aug 1, 2017 at 11:30 AM D Jayachandran <
> d.jayachand...@ericsson.com> wrote:
>
>> Hi Max,
>>
>> I have a service template with just node templates web_app and database
>> with a depends on Relationship. Both use the same custom node type derived
>> from "tosca:Root".
>> I just have the create operation defined where the implementation points
>> to a plugin module. Am trying to set the attribute value in the plugin.
>> Please find below service template and node types
>>
>> SERVICE TEMPLATE
>>
>> tosca_definitions_version: tosca_simple_yaml_1_0
>>
>> imports:
>>   - types/kubernetes_type.yaml
>>   - aria-1.0
>>
>> topology_template:
>>
>>     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
>>
>>
>>     policies:
>>       testplugin:
>>         type: aria.Plugin
>>         description: policy_description
>>         properties:
>>                 version: 1.2.0
>>                 enabled: true
>>
>>     node_templates:
>>         web_app:
>>             type: nodes.Container.Application.Kubernetes
>>             properties:
>>                 name: { get_input: web_app_name }
>>                 image: { get_input: web_app_image }
>>                 port: { get_input: web_app_port }
>>             attributes:
>>                 test: abc
>>             requirements:
>>                 - dependency:
>>                       node: database
>>                       relationship:
>>                           type: tosca.relationships.DependsOn
>>             interfaces:
>>                 Standard:
>>                     inputs:
>>                         name: { get_property: [ 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
>>                     create:
>>                         inputs:
>>                             name: { get_property: [ 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] }
>>                             target_port: 8888
>>                             isService: false
>>
>>         database:
>>             type: nodes.Container.Application.Kubernetes
>>             properties:
>>                 name: { get_input: db_name }
>>                 image: { get_input: db_image }
>>                 port: { get_input: db_port }
>>             interfaces:
>>                 Standard:
>>                     inputs:
>>                         name: { get_property: [ database, name] }
>>                         image: { get_property: [ database, image] }
>>                         exposed_port: { get_property: [ database, port] }
>>                         isService: true
>>                     create:
>>                         inputs:
>>                             name: { get_property: [ database, name] }
>>                             image: { get_property: [ database, image] }
>>                             exposed_port: { get_property: [ database,
>> port] }
>>                             isService: true
>>
>> NODE TYPES
>>
>> node_types:
>>     nodes.Container.Application.Kubernetes:
>>         derived_from: tosca.nodes.Root
>>             #derived_from: tosca:Root
>>         properties:
>>             name:
>>               type: string
>>               required: true
>>             image:
>>               type: string
>>               required: true
>>             port:
>>               type: integer
>>               required: false
>>         attributes:
>>             test:
>>               type: string
>>         interfaces:
>>             Standard:
>>                 type: tosca.interfaces.node.lifecycle.Standard
>>                 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: None
>>                     labels:
>>                         type: string
>>                         required: false
>>                         default: test
>>                     isService:
>>                         type: boolean
>>                         required: false
>>                 create:
>>                     implementation:
>>                         primary: testplugin > sample.samplemethod
>>
>>
>> PLUGIN
>>
>> def main():
>>     """Entry point for the application script"""
>>     print("Call your main application code here")
>>
>> def samplemethod(ctx=None, **inputs):
>>     print "ctx -->",ctx
>>     print "inputs -->",inputs
>>     ctx.node.attributes['test'] = "abc"
>>
>>
>>
>> Regards,
>> DJ
>>
>>
>>
>> -----Original Message-----
>> From: Maxim Orlov [mailto:ma...@cloudify.co]
>> Sent: Monday, July 31, 2017 10:22 PM
>> To: dev@ariatosca.incubator.apache.org
>> Subject: Re: Inputs and Node object context for python and shell scripts
>>
>> Interesting, can you describe exactly the scenario? including the service
>> template and the operation you are trying to run
>>
>> On Mon, Jul 31, 2017 at 6:12 PM, D Jayachandran <
>> d.jayachand...@ericsson.com
>> > wrote:
>>
>> > Hi,
>> >
>> > I got the below error when I tried assigning values as like a dict.
>> > It seems to fail when it tries to remove the existing value and
>> > triggering a change event.
>> >
>> > ObjectDereferencedError: Can't emit change event for attribute
>> > 'Node.attributes' - parent object of type <Node> has been garbage
>> > collected
>> >
>> >
>> > Regards,
>> > DJ
>> >
>> > -----Original Message-----
>> > From: Maxim Orlov [mailto:ma...@cloudify.co]
>> > Sent: Monday, July 31, 2017 6:08 PM
>> > To: dev@ariatosca.incubator.apache.org
>> > Subject: Re: Inputs and Node object context for python and shell
>> > scripts
>> >
>> > From within any operation or workflow you don't need to use the ".value"
>> > notation. In order to access the attribute use
>> > ctx.node.attributes['test'], and in order to assign the attribute just
>> > use ctx.node.attributes['test'] = "abc". Using this (hopefully
>> > simplified) notation does all the model related operations for you.
>> >
>> > On Mon, Jul 31, 2017, 15:02 D Jayachandran
>> > <d.jayachand...@ericsson.com>
>> > wrote:
>> >
>> > > Hi Max,
>> > >
>> > > Adding to this , I can access the attributes in my plugin only as
>> > > below. ( I have defined the attribute test in my node type )
>> > >
>> > > ctx.node.attributes['test'].value
>> > >
>> > > And to update the value
>> > >
>> > > ctx.node.attributes['test'].value = "abc"
>> > >
>> > > But this does not update the db. Am I missing something here
>> > > in-terms of the context usage ?
>> > >
>> > >
>> > > Regards,
>> > > DJ
>> > > -----Original Message-----
>> > > From: Maxim Orlov [mailto:ma...@cloudify.co]
>> > > Sent: Sunday, July 30, 2017 7:37 PM
>> > > To: dev@ariatosca.incubator.apache.org
>> > > Subject: Re: Inputs and Node object context for python and shell
>> > > scripts
>> > >
>> > > Sorry it took me so long to check it out, things have been kind of
>> > hectic.
>> > > Anyway, there is a JIRA issue opened just for that:
>> > > https://issues.apache.org/jira/browse/ARIA-263.
>> > >
>> > > On Tue, Jul 25, 2017 at 9:23 PM, Maxim Orlov <ma...@cloudify.co>
>> wrote:
>> > >
>> > > > Not entirely sure about that actually, let me double check that.
>> > > >
>> > > > On Tue, Jul 25, 2017 at 7:37 PM, Tal Liron <t...@cloudify.co> wrote:
>> > > >
>> > > >> It should be impossible in TOSCA to create an attribute that was
>> > > >> not declared at the type. Are we allowing users to create any ad
>> > > >> hoc attribute?
>> > > >>
>> > > >> On Tue, Jul 25, 2017 at 7:33 AM, Maxim Orlov <ma...@cloudify.co>
>> > wrote:
>> > > >>
>> > > >> > Indeed runtime_properties became attributes in ARIA . As for
>> > > >> > the
>> > > >> behavior,
>> > > >> > attributes behave just as a dict would (behind the scenes
>> > > >> > attributes translate to a proper Attribute TOSCA model).
>> > > >> > No need to define the attributes on the node-type level, if an
>> > > >> > attribute with that name exists in on the model, the value of
>> > > >> > that attribute
>> > > >> would be
>> > > >> > overridden, if you are creating a whole new attribute, a proper
>> > > >> Attribute
>> > > >> > model would be created for you.
>> > > >> >
>> > > >> > as for:
>> > > >> >
>> > > >> > ctx.node.attributes['map']['key'] = 'value'
>> > > >> >
>> > > >> > “map” is a name of an attribute which holds a dict, “key” is a
>> > > >> > key in
>> > > >> that
>> > > >> > dict.
>> > > >> > ​
>> > > >> >
>> > > >> > On Tue, Jul 25, 2017 at 3:07 PM, D Jayachandran <
>> > > >> > d.jayachand...@ericsson.com
>> > > >> > > wrote:
>> > > >> >
>> > > >> > > Hi Max,
>> > > >> > >
>> > > >> > > I see the runtime_properties have been replaced with
>> "attributes"
>> > > >> > > and there has been multiple changes with respect to attribute
>> > > handling.
>> > > >> > >
>> > > >> > > What do you refer by "map" in your below example, Is that a
>> > > >> > > keyword
>> > > ?
>> > > >> > > "ctx.node.attributes['map']['key'] = value"
>> > > >> > >
>> > > >> > > Also with runtime_properties plugins were able to update the
>> > > >> > > database
>> > > >> > with
>> > > >> > > new key=value. Can we achieve the same with attributes ?
>> > > >> > > Do we need to define the attributes in the node-types to be
>> > > >> > > able to
>> > > >> > update
>> > > >> > > them by the plugins ?
>> > > >> > >
>> > > >> > > Regards,
>> > > >> > > DJ
>> > > >> > >
>> > > >> > > -----Original Message-----
>> > > >> > > From: D Jayachandran [mailto:d.jayachand...@ericsson.com]
>> > > >> > > Sent: Tuesday, July 25, 2017 11:23 AM
>> > > >> > > To: dev@ariatosca.incubator.apache.org
>> > > >> > > Subject: RE: Inputs and Node object context for python and
>> > > >> > > shell
>> > > >> scripts
>> > > >> > >
>> > > >> > > Hi Max,
>> > > >> > >
>> > > >> > > Yes I can access the context ctx with a python plugin and
>> > > >> > > shell
>> > > >> script as
>> > > >> > > you have mentioned.
>> > > >> > > But with python script .py files under implementation, am not
>> > > >> > > sure if
>> > > >> the
>> > > >> > > ctx and inputs are passed as "globals". I will re-confirm this.
>> > > >> > > The inputs which I was referring here were the lifecycle
>> > > >> > > operation
>> > > >> > inputs.
>> > > >> > >
>> > > >> > >
>> > > >> > > Regards,
>> > > >> > > DJ
>> > > >> > >
>> > > >> > > -----Original Message-----
>> > > >> > > From: Maxim Orlov [mailto:ma...@gigaspaces.com]
>> > > >> > > Sent: Tuesday, July 25, 2017 12:14 AM
>> > > >> > > To: dev@ariatosca.incubator.apache.org
>> > > >> > > Subject: Re: Inputs and Node object context for python and
>> > > >> > > shell
>> > > >> scripts
>> > > >> > >
>> > > >> > > I'm not entirely sure to which inputs you are referring to,
>> > > >> > > but any
>> > > >> ctx
>> > > >> > > attribute or method accessible from a python script is
>> > > >> > > accessible form
>> > > >> > any
>> > > >> > > shell script. For example:
>> > > >> > >
>> > > >> > >    - "ctx.node.attributes['map']['key']" (in python) is "ctx
>> node
>> > > >> > >    attributes map.key" (under bash)
>> > > >> > >    - "ctx.node.attributes['map']['key'] = value" (in python)
>> > > >> > > is "ctx
>> > > >> > node
>> > > >> > >    attributes map.key value" (under bash)
>> > > >> > >    - "ctx.logger.info('some message')" (in python) is "ctx
>> > > >> > > logger
>> > > >> info
>> > > >> > >    'some message'" (under bash)
>> > > >> > >
>> > > >> > >
>> > > >> > > On Mon, Jul 24, 2017 at 8:47 PM, Tal Liron
>> > > >> > > <t...@gigaspaces.com>
>> > > >> wrote:
>> > > >> > >
>> > > >> > > > I'm pretty sure you can access the inputs via the ctx call.
>> > > >> > > > Can
>> > > >> anyone
>> > > >> > > > confirm how to do this?
>> > > >> > > >
>> > > >> > > > We really need to document ctx usage...
>> > > >> > > >
>> > > >> > > > On Mon, Jul 24, 2017 at 5:57 AM, D Jayachandran <
>> > > >> > > > d.jayachand...@ericsson.com
>> > > >> > > > > wrote:
>> > > >> > > >
>> > > >> > > > > Hi,
>> > > >> > > > >
>> > > >> > > > > With current ARIA implementation, the python and shell
>> > > >> > > > > scripts are being executed by the "execution plugin".
>> > > >> > > > >
>> > > >> > > > > The context object and inputs are not passed to passed to
>> > > >> > > > > python
>> > > >> > > scripts.
>> > > >> > > > > We would like this to be passed to the python scripts.
>> > > >> > > > > For shell scripts atleast the inputs needs to be passed.
>> > > >> > > > > The
>> > > >> context
>> > > >> > > > > object can be accessed via client.py with the SOCKET URL.
>> > > >> > > > > Kindly let us know if this can be added as a JIRA issue ?
>> > > >> > > > >
>> > > >> > > > >
>> > > >> > > > > Regards,
>> > > >> > > > > DJ
>> > > >> > > > >
>> > > >> > > > >
>> > > >> > > > >
>> > > >> > > > >
>> > > >> > > >
>> > > >> > >
>> > > >> >
>> > > >>
>> > > >
>> > > >
>> > >
>> >
>>
>

Reply via email to