[
https://issues.apache.org/jira/browse/ARIA-105?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15901382#comment-15901382
]
ASF GitHub Bot commented on ARIA-105:
-------------------------------------
Github user mxmrlv commented on a diff in the pull request:
https://github.com/apache/incubator-ariatosca/pull/72#discussion_r104932505
--- Diff: aria/modeling/service.py ---
@@ -0,0 +1,1529 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# pylint: disable=no-self-argument, no-member, abstract-method
+
+from sqlalchemy import (
+ Column,
+ Text,
+ Integer
+)
+from sqlalchemy import DateTime
+from sqlalchemy.ext.associationproxy import association_proxy
+from sqlalchemy.ext.declarative import declared_attr
+
+from .bases import InstanceModelMixin
+from ..parser import validation
+from ..utils import collections, formatting, console
+
+from . import (
+ utils,
+ types as modeling_types
+)
+
+
+class ServiceBase(InstanceModelMixin): # pylint:
disable=too-many-public-methods
+ """
+ A service is usually an instance of a :class:`ServiceTemplate`.
+
+ You will usually not create it programmatically, but instead
instantiate it from a service
+ template.
+
+ :ivar name: Name (unique for this ARIA installation)
+ :vartype name: basestring
+ :ivar service_template: Template from which this service was
instantiated (optional)
+ :vartype service_template: :class:`ServiceTemplate`
+ :ivar description: Human-readable description
+ :vartype description: string
+ :ivar meta_data: Custom annotations
+ :vartype meta_data: {basestring: :class:`Metadata`}
+ :ivar node: Nodes
+ :vartype node: [:class:`Node`]
+ :ivar groups: Groups of nodes
+ :vartype groups: [:class:`Group`]
+ :ivar policies: Policies
+ :vartype policies: [:class:`Policy`]
+ :ivar substitution: The entire service can appear as a node
+ :vartype substitution: :class:`Substitution`
+ :ivar inputs: Externally provided parameters
+ :vartype inputs: {basestring: :class:`Parameter`}
+ :ivar outputs: These parameters are filled in after service
installation
+ :vartype outputs: {basestring: :class:`Parameter`}
+ :ivar operations: Custom operations that can be performed on the
service
+ :vartype operations: {basestring: :class:`Operation`}
+ :ivar plugins: Plugins required to be installed
+ :vartype plugins: {basestring: :class:`Plugin`}
+ :ivar created_at: Creation timestamp
+ :vartype created_at: :class:`datetime.datetime`
+ :ivar updated_at: Update timestamp
+ :vartype updated_at: :class:`datetime.datetime`
+
+ :ivar permalink: ??
+ :vartype permalink: basestring
+ :ivar scaling_groups: ??
+ :vartype scaling_groups: {}
+
+ :ivar modifications: Modifications of this service
+ :vartype modifications: [:class:`ServiceModification`]
+ :ivar updates: Updates of this service
+ :vartype updates: [:class:`ServiceUpdate`]
+ :ivar executions: Executions on this service
+ :vartype executions: [:class:`Execution`]
+ """
+
+ __tablename__ = 'service'
+
+ @declared_attr
+ def service_template(cls):
+ return cls.many_to_one_relationship('service_template')
+
+ description = Column(Text)
+
+ @declared_attr
+ def meta_data(cls):
+ # Warning! We cannot use the attr name "metadata" because it's
used by SqlAlchemy!
+ return cls.many_to_many_relationship('metadata', dict_key='name')
+
+ @declared_attr
+ def nodes(cls):
+ return cls.one_to_many_relationship('node')
+
+ @declared_attr
+ def groups(cls):
+ return cls.one_to_many_relationship('group')
+
+ @declared_attr
+ def policies(cls):
+ return cls.one_to_many_relationship('policy')
+
+ @declared_attr
+ def substitution(cls):
+ return cls.one_to_one_relationship('substitution')
+
+ @declared_attr
+ def inputs(cls):
+ return cls.many_to_many_relationship('parameter',
table_prefix='inputs',
+ dict_key='name')
+
+ @declared_attr
+ def outputs(cls):
+ return cls.many_to_many_relationship('parameter',
table_prefix='outputs',
+ dict_key='name')
+
+ @declared_attr
+ def operations(cls):
+ return cls.one_to_many_relationship('operation', dict_key='name')
+
+ @declared_attr
+ def plugins(cls):
+ return cls.many_to_many_relationship('plugin')
+
+ created_at = Column(DateTime, nullable=False, index=True)
+ updated_at = Column(DateTime)
+
+ # region orchestration
+
+ permalink = Column(Text)
+ scaling_groups = Column(modeling_types.Dict)
+
+ # endregion
+
+ # region foreign keys
+
+ __private_fields__ = ['substituion_fk',
+ 'service_template_fk']
+
+ # Service one-to-one to Substitution
+ @declared_attr
+ def substitution_fk(cls):
+ return cls.foreign_key('substitution', nullable=True)
+
+ # Service many-to-one to ServiceTemplate
+ @declared_attr
+ def service_template_fk(cls):
+ return cls.foreign_key('service_template', nullable=True)
+
+ # endregion
+
+ def satisfy_requirements(self, context):
+ satisfied = True
+ for node in self.nodes:
+ if not node.satisfy_requirements(context):
+ satisfied = False
+ return satisfied
+
+ def validate_capabilities(self, context):
+ satisfied = True
+ for node in self.nodes:
+ if not node.validate_capabilities(context):
+ satisfied = False
+ return satisfied
+
+ def find_nodes(self, node_template_name):
+ nodes = []
+ for node in self.nodes:
+ if node.node_template.name == node_template_name:
+ nodes.append(node)
+ return collections.FrozenList(nodes)
+
+ def get_node_ids(self, node_template_name):
--- End diff --
ditto
> Integrate new models into parser
> --------------------------------
>
> Key: ARIA-105
> URL: https://issues.apache.org/jira/browse/ARIA-105
> Project: AriaTosca
> Issue Type: Task
> Reporter: Ran Ziv
> Assignee: Tal Liron
>
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)