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:[email protected]]
Sent: Monday, July 31, 2017 10:22 PM
To: [email protected]
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 <[email protected]
> 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:[email protected]]
> Sent: Monday, July 31, 2017 6:08 PM
> To: [email protected]
> 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
> <[email protected]>
> 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:[email protected]]
> > Sent: Sunday, July 30, 2017 7:37 PM
> > To: [email protected]
> > 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 <[email protected]> wrote:
> >
> > > Not entirely sure about that actually, let me double check that.
> > >
> > > On Tue, Jul 25, 2017 at 7:37 PM, Tal Liron <[email protected]> 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 <[email protected]>
> 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 <
> > >> > [email protected]
> > >> > > 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:[email protected]]
> > >> > > Sent: Tuesday, July 25, 2017 11:23 AM
> > >> > > To: [email protected]
> > >> > > 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:[email protected]]
> > >> > > Sent: Tuesday, July 25, 2017 12:14 AM
> > >> > > To: [email protected]
> > >> > > 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
> > >> > > <[email protected]>
> > >> 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 <
> > >> > > > [email protected]
> > >> > > > > 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
> > >> > > > >
> > >> > > > >
> > >> > > > >
> > >> > > > >
> > >> > > >
> > >> > >
> > >> >
> > >>
> > >
> > >
> >
>