DYDKA4 / TOPCA-Storage

4 stars 0 forks source link

Bug reports #1

Closed sadimer closed 2 years ago

sadimer commented 2 years ago

При попытке загрузки шаблона топологии вылетает 500 ошибка с таким логом:

Traceback (most recent call last):
  File "/home/ubuntu/.local/lib/python3.8/site-packages/flask/app.py", line 2463, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/ubuntu/.local/lib/python3.8/site-packages/flask/app.py", line 1760, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/ubuntu/.local/lib/python3.8/site-packages/flask/app.py", line 1758, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/ubuntu/.local/lib/python3.8/site-packages/flask/app.py", line 1734, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/ubuntu/flask_api/API_COURSE/app/views.py", line 32, in yaml_add
    template = service_template_definition_parser(cluster_name, file)
  File "/home/ubuntu/flask_api/API_COURSE/parser/parser/tosca_v_1_3/definitions/ServiceTemplateDefinition.py", line 174, in service_template_definition_parser
    service_template.set_template_definition(template_definition_parser(data))
  File "/home/ubuntu/flask_api/API_COURSE/parser/parser/tosca_v_1_3/definitions/TemplateDefinition.py", line 81, in template_definition_parser
    template.add_node_templates(node_template_parser(node_template_name, node_template_value))
  File "/home/ubuntu/flask_api/API_COURSE/parser/parser/tosca_v_1_3/others/NodeTemplate.py", line 116, in node_template_parser
    node_template.add_requirement(requirement_assignment_parser(requirement_name, requirement_value))
  File "/home/ubuntu/flask_api/API_COURSE/parser/parser/tosca_v_1_3/assignments/RequirementAssignment.py", line 89, in requirement_assignment_parser
    requirement.set_node_filter(node_filter_definition_parser(data.get('node_filter')))
  File "/home/ubuntu/flask_api/API_COURSE/parser/parser/tosca_v_1_3/definitions/NodeFilterDefinition.py", line 43, in node_filter_definition_parser
    node.add_properties(property_filter_definition_parser(property_filter_name, property_filter_value))
  File "/home/ubuntu/flask_api/API_COURSE/parser/parser/tosca_v_1_3/definitions/PropertyFilterDefinition.py", line 31, in property_filter_definition_parser
    property_filter.set_property_constraint(constraint_clause_parser(data))
  File "/home/ubuntu/flask_api/API_COURSE/parser/parser/tosca_v_1_3/others/ConstraintСlause.py", line 28, in constraint_clause_parser
    for operator, scalar_value in data.items():
AttributeError: 'str' object has no attribute 'items'
2022-08-26 09:22:59,439 INFO werkzeug Thread-35 : 10.10.10.105 - - [26/Aug/2022 09:22:59] "POST /yaml-template/?cluster_name=clouni HTTP/1.1" 500 -

Запрос: curl -X POST -F file=@dima_db.yaml http://10.100.151.115:5000/yaml-template/?cluster_name=clouni

Файл:

  amazon.nodes.Group:
    capabilities:
      feature:
        occurrences:
        - 1
        - 1
        type: amazon.capabilities.Node
    description: 'The TOSCA root node all other TOSCA base node types derive from.

      '
    interfaces:
      Standard:
        type: tosca.interfaces.node.lifecycle.Standard
    properties:
      description:
        required: false
        type: string
      group_id:
        required: false
        type: string
      name:
        required: true
        type: string
      rules:
        entry_schema:
          type: amazon.datatypes.SecurityGroupRule
        required: false
        type: list
      rules_egress:
        entry_schema:
          type: amazon.datatypes.SecurityGroupRule
        required: false
        type: list
      state:
        description: "The state of the node instance. See section \u201CNode States\u201D\
          \ for allowed values.\n"
        required: false
        type: string
      tosca_id:
        description: 'A unique identifier of the realized instance of a Node Template
          that derives from any TOSCA normative type.

          '
        required: false
        type: string
      tosca_name:
        description: 'This attribute reflects the name of the Node Template as defined
          in the TOSCA service template.

          '
        required: false
        type: string
    requirements:
    - dependency:
        capability: tosca.capabilities.Node
        node: tosca.nodes.Root
        occurrences:
        - 0
        - UNBOUNDED
        relationship: tosca.relationships.DependsOn
    - dependency:
        capability: amazon.capabilities.Node
        node: amazon.nodes.Root
        occurrences:
        - 0
        - UNBOUNDED
        relationship: amazon.relationships.DependsOn
    - vpc_id:
        capability: amazon.capabilities.Node
        node: amazon.nodes.VpcNet
        occurrences:
        - 0
        - 1
        relationship: amazon.relationships.DependsOn
  amazon.nodes.Instance:
    capabilities:
      bind:
        occurrences:
        - 0
        - UNBOUNDED
        type: amazon.capabilities.network.Bindable
      feature:
        occurrences:
        - 1
        - 1
        type: amazon.capabilities.Node
    description: 'The TOSCA root node all other TOSCA base node types derive from.

      '
    interfaces:
      Standard:
        type: tosca.interfaces.node.lifecycle.Standard
    properties:
      image:
        required: false
        type: amazon.datatypes.Image
      instance_id:
        required: false
        type: string
      name:
        required: false
        type: string
      network:
        required: false
        type: amazon.datatypes.ElasticNeworkInterface
      public_ip_address:
        required: false
        type: string
      state:
        description: "The state of the node instance. See section \u201CNode States\u201D\
          \ for allowed values.\n"
        required: false
        type: string
      tags:
        required: false
        type: map
      tosca_id:
        description: 'A unique identifier of the realized instance of a Node Template
          that derives from any TOSCA normative type.

          '
        required: false
        type: string
      tosca_name:
        description: 'This attribute reflects the name of the Node Template as defined
          in the TOSCA service template.

          '
        required: false
        type: string
      vpc_subnet_id:
        required: false
        type: string
    requirements:
    - dependency:
        capability: tosca.capabilities.Node
        node: tosca.nodes.Root
        occurrences:
        - 0
        - UNBOUNDED
        relationship: tosca.relationships.DependsOn
    - dependency:
        capability: amazon.capabilities.Node
        node: amazon.nodes.Root
        occurrences:
        - 0
        - UNBOUNDED
        relationship: amazon.relationships.DependsOn
    - key_name:
        capability: amazon.capabilities.Node
        node: amazon.nodes.Key
        occurrences:
        - 0
        - 1
        relationship: amazon.relationships.DependsOn
    - instance_type:
        capability: amazon.capabilities.Node
        node: amazon.nodes.instanceType
        occurrences:
        - 1
        - 1
        relationship: amazon.relationships.DependsOn
    - image_id:
        capability: amazon.capabilities.Node
        node: amazon.nodes.Ami
        occurrences:
        - 1
        - 1
        relationship: amazon.relationships.DependsOn
    - network:
        capability: amazon.capabilities.Node
        node: amazon.nodes.Eni
        occurrences:
        - 0
        - UNBOUNDED
        relationship: amazon.relationships.DependsOn
    - security_groups:
        capability: amazon.capabilities.Node
        node: amazon.nodes.Group
        occurrences:
        - 0
        - UNBOUNDED
        relationship: amazon.relationships.DependsOn
    - vpc_subnet_id:
        capability: amazon.capabilities.Node
        node: amazon.nodes.VpcSubnet
        occurrences:
        - 0
        - 1
        relationship: amazon.relationships.DependsOn
  amazon.nodes.Key:
    capabilities:
      feature:
        occurrences:
        - 1
        - 1
        type: amazon.capabilities.Node
    description: 'The TOSCA root node all other TOSCA base node types derive from.

      '
    interfaces:
      Standard:
        type: tosca.interfaces.node.lifecycle.Standard
    properties:
      key_material:
        required: false
        type: string
      key_type:
        required: false
        type: string
      name:
        required: true
        type: string
      profile:
        required: false
        type: string
      state:
        description: "The state of the node instance. See section \u201CNode States\u201D\
          \ for allowed values.\n"
        required: false
        type: string
      tosca_id:
        description: 'A unique identifier of the realized instance of a Node Template
          that derives from any TOSCA normative type.

          '
        required: false
        type: string
      tosca_name:
        description: 'This attribute reflects the name of the Node Template as defined
          in the TOSCA service template.

          '
        required: false
        type: string
    requirements:
    - dependency:
        capability: tosca.capabilities.Node
        node: tosca.nodes.Root
        occurrences:
        - 0
        - UNBOUNDED
        relationship: tosca.relationships.DependsOn
    - dependency:
        capability: amazon.capabilities.Node
        node: amazon.nodes.Root
        occurrences:
        - 0
        - UNBOUNDED
        relationship: amazon.relationships.DependsOn
  tosca.nodes.SoftwareComponent:
    capabilities:
      feature:
        type: tosca.capabilities.Node
    description: 'The TOSCA SoftwareComponent node represents a generic software component
      that can be managed and run by a TOSCA Compute Node Type.

      '
    interfaces:
      Standard:
        type: tosca.interfaces.node.lifecycle.Standard
    properties:
      admin_credential:
        required: false
        type: tosca.datatypes.Credential
      component_version:
        description: 'Software component version.

          '
        required: false
        type: version
      state:
        description: "The state of the node instance. See section \u201CNode States\u201D\
          \ for allowed values.\n"
        required: false
        type: string
      tosca_id:
        description: 'A unique identifier of the realized instance of a Node Template
          that derives from any TOSCA normative type.

          '
        required: false
        type: string
      tosca_name:
        description: 'This attribute reflects the name of the Node Template as defined
          in the TOSCA service template.

          '
        required: false
        type: string
    requirements:
    - dependency:
        capability: tosca.capabilities.Node
        node: tosca.nodes.Root
        occurrences:
        - 0
        - UNBOUNDED
        relationship: tosca.relationships.DependsOn
    - host:
        capability: tosca.capabilities.Container
        node: tosca.nodes.Compute
        relationship: tosca.relationships.HostedOn
topology_template:
  node_templates:
    software_for_cumulus_software_component:
      interfaces:
        Standard:
          create:
            implementation: ansible-operation-example.yaml
      requirements:
      - host:
          node: testing_tosca_instance
          node_filter:
            properties:
            - name: testing_tosca_{{ item }}
            - network:
                assign_public_ip: true
            - tags:
                metadata: cube_master=true
            - id: '{{ testing_tosca_instance_delete }}'
      - dependency:
          node: testing_tosca_instance
          node_filter:
            properties:
            - name: testing_tosca_{{ item }}
            - network:
                assign_public_ip: true
            - tags:
                metadata: cube_master=true
            - id: '{{ testing_tosca_instance_delete }}'
      - dependency:
          node: testing_tosca_key
          node_filter:
            properties:
            - key_material: '{{ lookup(''file'', ''~/.ssh/id_rsa.pub'') }}'
            - name: testing_tosca_key
            - id: '{{ testing_tosca_key_delete }}'
      - dependency:
          node: testing_tosca_group
          node_filter:
            properties:
            - description: testing_tosca_group
            - name: testing_tosca_group
            - rules:
              - cidr_ip: 0.0.0.0
                ports:
                - 22
                proto: tcp
              - cidr_ip: 0.0.0.0
            - rules_egress:
              - cidr_ip: 0.0.0.0
            - id: '{{ testing_tosca_group_delete }}'
      type: tosca.nodes.SoftwareComponent
    testing_tosca_group:
      properties:
        description: testing_tosca_group
        name: testing_tosca_group
        rules:
        - cidr_ip: 0.0.0.0
          ports:
          - 22
          proto: tcp
        - cidr_ip: 0.0.0.0
        rules_egress:
        - cidr_ip: 0.0.0.0
      type: amazon.nodes.Group
    testing_tosca_instance:
      interfaces:
        Standard:
          create:
            implementation: add_host.yaml
            inputs:
              ansible_user: xenial
              group: testing_tosca_instance_public_address
              host_ip: '{{ host_ip | default([]) + [[ "testing_tosca_public_address_"
                + item, testing_tosca_instance.results[item | int - 1].instances[0].public_ip_address
                ]] }}'
      properties:
        name: testing_tosca_{{ item }}
        network:
          assign_public_ip: true
        tags:
          metadata: cube_master=true
      requirements:
      - key_name:
          node: testing_tosca_key
      - vpc_subnet_id:
          node_filter:
            properties:
            - id: not implemented yet
      - instance_type:
          node_filter:
            properties:
            - vcpus: 1
            - storage: 5.0
            - memory: 1.0
      - security_groups:
          node: testing_tosca_group
          node_filter:
            properties:
            - description: testing_tosca_group
            - name: testing_tosca_group
            - rules:
              - cidr_ip: 0.0.0.0
                ports:
                - 22
                proto: tcp
              - cidr_ip: 0.0.0.0
            - rules_egress:
              - cidr_ip: 0.0.0.0
            - id: '{{ testing_tosca_group_delete }}'
      - image_id:
          node_filter:
            properties:
            - image_id: not implemented yet
      type: amazon.nodes.Instance
    testing_tosca_key:
      properties:
        key_material: '{{ lookup(''file'', ''~/.ssh/id_rsa.pub'') }}'
        name: testing_tosca_key
      type: amazon.nodes.Key
tosca_definitions_version: tosca_simple_yaml_1_3

Ожидаемое поведение - загрузка данного шаблона в базу

DYDKA4 commented 2 years ago

Ошибка исправлена. Шаблон остается не валидным из-за явного отсутвия описаниия data_type: amazon.datatypes.SecurityGroupRule