ispras / clouni

Cloud Unifier Tool for Service Orchestration
Apache License 2.0
5 stars 8 forks source link

Mapping default values to ansible dont working #29

Closed sadimer closed 2 years ago

sadimer commented 2 years ago

Clouni CLI command which was executed clouni --template-file issue.yaml --provider openstack --extra ignore_errors=true --cluster-name example --configuration-tool ansible --output-file issue_res.yaml --debug

Input TOSCA template

tosca_definitions_version: tosca_simple_yaml_1_0
topology_template:
  node_templates:
    my_network:
      type: tosca.nodes.network.Network
      properties:
        network_name: test_network
        cidr: 192.168.56.0/24
        start_ip: 192.168.56.50
        end_ip: 192.168.56.200
        gateway_ip: 192.168.56.1
        network_type: geneve

Current result

- name: Create OpenStack component openstack cluster
  hosts: localhost
  tasks:
  - file:
      path: '{{ playbook_dir }}/id_vars_example.yaml'
      state: absent
  - file:
      path: '{{ playbook_dir }}/id_vars_example.yaml'
      state: touch
  - name: Create OpenStack component network
    os_network:
      provider_network_type: geneve
      name: test_network
    register: my_network_network
    ignore_errors: 'true'
  - set_fact:
      my_network_network_list: '{{ my_network_network_list | default([]) }} + [ "{{
        item.id }}" ]'
    loop: '{{ my_network_network.results | flatten(levels=1)  }}'
    when: item.id  is defined
  - set_fact:
      my_network_network_list:
        my_network_network_ids: '{{ my_network_network_list }}'
    when: my_network_network_list is defined
  - lineinfile:
      path: '{{ playbook_dir }}/id_vars_example.yaml'
      line: 'my_network_network_delete: {{ my_network_network.id }}'
    when: my_network_network.id is defined
  - lineinfile:
      path: '{{ playbook_dir }}/id_vars_example.yaml'
      line: '{{ my_network_network_list | to_nice_yaml }}'
    when: my_network_network_list is defined
  - fail:
      msg: Variable my_network_network is undefined! So it will not be deleted
    when: my_network_network_list is undefined and my_network_network.id is undefined
    ignore_errors: true
  - name: Create OpenStack component subnet
    os_subnet:
      allocation_pool_end: 192.168.56.200
      allocation_pool_start: 192.168.56.50
      cidr: 192.168.56.0/24
      gateway_ip: 192.168.56.1
      name: test_network
      network_name: test_network
    register: my_network_subnet
    ignore_errors: 'true'
  - set_fact:
      my_network_subnet_list: '{{ my_network_subnet_list | default([]) }} + [ "{{
        item.id }}" ]'
    loop: '{{ my_network_subnet.results | flatten(levels=1)  }}'
    when: item.id  is defined
  - set_fact:
      my_network_subnet_list:
        my_network_subnet_ids: '{{ my_network_subnet_list }}'
    when: my_network_subnet_list is defined
  - lineinfile:
      path: '{{ playbook_dir }}/id_vars_example.yaml'
      line: 'my_network_subnet_delete: {{ my_network_subnet.id }}'
    when: my_network_subnet.id is defined
  - lineinfile:
      path: '{{ playbook_dir }}/id_vars_example.yaml'
      line: '{{ my_network_subnet_list | to_nice_yaml }}'
    when: my_network_subnet_list is defined
  - fail:
      msg: Variable my_network_subnet is undefined! So it will not be deleted
    when: my_network_subnet_list is undefined and my_network_subnet.id is undefined
    ignore_errors: true

Expected result Создание сети с заданными параметрами

Describe the bug В /clouni/toscatranslator/providers/openstack/TOSCA_openstack_definition_1_0.yaml есть параметры, помеченные как default, например:

openstack.nodes.Network: # os_network, os_networks_facts
    derived_from: openstack.nodes.Root
    properties:
      admin_state_up:
        type: boolean
        default: true
...
      shared:
        type: boolean
        default: false

  openstack.nodes.Subnet: # os_subnet, os_subnets_facts
    derived_from: openstack.nodes.Root
    properties:
...
      enable_dhcp:
        type: boolean
        default: true
...
      ip_version:
        type: integer
        default: 4

Но при трансляции их в ансибл эти параметры игнорируются, как будто их не существует (если их явно не указать), а должны транслироваться с дефолтными значениями (как и было раньше):

- name: Create OpenStack component network
    os_network:
      name: test_network
      shared: false
      provider_network_type: geneve
    register: my_network_network

- name: Create OpenStack component subnet
    os_subnet:
      allocation_pool_end: 192.168.56.200
      allocation_pool_start: 192.168.56.50
      cidr: 192.168.56.0/24
      enable_dhcp: true
      gateway_ip: 192.168.56.1
      ip_version: 4
      name: test_network
      network_name: test_network
    register: my_network_subnet

Additional context