Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Openstack volumes #44

Open
wants to merge 14 commits into
base: master
Choose a base branch
from
6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,15 @@ ansible-hosts
# Testing examples
tosca-server-example-output*
tosca-network-and-port-example-output*
tosca-volume-output*

# Clouni output
artifacts/contains.yaml
artifacts/equals.yaml

venv
my_definitions
my_examples
my_templates

test
artifacts
118 changes: 118 additions & 0 deletions examples/tosca-volume-correct.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
- name: 'Delete OpenStack component openstack cluster: server_kube_master_server:delete'
hosts: localhost
tasks:
- include_vars: /mnt/d/source/repos/pyth/ispraas/clouni/id_vars_test.yaml
- name: Delete OpenStack component server
os_server:
name: '{{ server_kube_master_server_delete }}'
state: absent
when: server_kube_master_server_delete is defined
register: server_kube_master_server_var
- set_fact: server_kube_master_server='{{ server_kube_master_server_var }}'
when: server_kube_master_server_var.changed
- name: Delete OpenStack component server
os_server:
name: '{{ item }}'
state: absent
when: server_kube_master_server_ids is defined
loop: '{{ server_kube_master_server_ids | flatten(levels=1) }}'
register: server_kube_master_server_var
- set_fact: server_kube_master_server='{{ server_kube_master_server_var }}'
when: server_kube_master_server_var.changed
- name: Delete OpenStack component server
os_server: '{{ item }}'
loop: '{{ server_kube_master_server_dicts }}'
when: server_kube_master_server_dicts is defined
register: server_kube_master_server_var
- set_fact: server_kube_master_server='{{ server_kube_master_server_var }}'
when: server_kube_master_server_var.changed
- name: 'Delete OpenStack component openstack cluster: server_kube_master_keypair:delete'
hosts: localhost
tasks:
- include_vars: /mnt/d/source/repos/pyth/ispraas/clouni/id_vars_test.yaml
- name: Delete OpenStack component keypair
os_keypair:
name: '{{ server_kube_master_keypair_delete }}'
state: absent
when: server_kube_master_keypair_delete is defined
register: server_kube_master_keypair_var
- set_fact: server_kube_master_keypair='{{ server_kube_master_keypair_var }}'
when: server_kube_master_keypair_var.changed
- name: Delete OpenStack component keypair
os_keypair:
name: '{{ item }}'
state: absent
when: server_kube_master_keypair_ids is defined
loop: '{{ server_kube_master_keypair_ids | flatten(levels=1) }}'
register: server_kube_master_keypair_var
- set_fact: server_kube_master_keypair='{{ server_kube_master_keypair_var }}'
when: server_kube_master_keypair_var.changed
- name: Delete OpenStack component keypair
os_keypair: '{{ item }}'
loop: '{{ server_kube_master_keypair_dicts }}'
when: server_kube_master_keypair_dicts is defined
register: server_kube_master_keypair_var
- set_fact: server_kube_master_keypair='{{ server_kube_master_keypair_var }}'
when: server_kube_master_keypair_var.changed
- name: 'Delete OpenStack component openstack cluster: disk_c_volume:delete'
hosts: localhost
tasks:
- include_vars: /mnt/d/source/repos/pyth/ispraas/clouni/id_vars_test.yaml
- name: Delete OpenStack component volume
os_volume:
name: '{{ disk_c_volume_delete }}'
state: absent
when: disk_c_volume_delete is defined
register: disk_c_volume_var
- set_fact: disk_c_volume='{{ disk_c_volume_var }}'
when: disk_c_volume_var.changed
- name: Delete OpenStack component volume
os_volume:
name: '{{ item }}'
state: absent
when: disk_c_volume_ids is defined
loop: '{{ disk_c_volume_ids | flatten(levels=1) }}'
register: disk_c_volume_var
- set_fact: disk_c_volume='{{ disk_c_volume_var }}'
when: disk_c_volume_var.changed
- name: Delete OpenStack component volume
os_volume: '{{ item }}'
loop: '{{ disk_c_volume_dicts }}'
when: disk_c_volume_dicts is defined
register: disk_c_volume_var
- set_fact: disk_c_volume='{{ disk_c_volume_var }}'
when: disk_c_volume_var.changed
- name: 'Delete OpenStack component openstack cluster: disk_d_volume:delete'
hosts: localhost
tasks:
- include_vars: /mnt/d/source/repos/pyth/ispraas/clouni/id_vars_test.yaml
- name: Delete OpenStack component volume
os_volume:
name: '{{ disk_d_volume_delete }}'
state: absent
when: disk_d_volume_delete is defined
register: disk_d_volume_var
- set_fact: disk_d_volume='{{ disk_d_volume_var }}'
when: disk_d_volume_var.changed
- name: Delete OpenStack component volume
os_volume:
name: '{{ item }}'
state: absent
when: disk_d_volume_ids is defined
loop: '{{ disk_d_volume_ids | flatten(levels=1) }}'
register: disk_d_volume_var
- set_fact: disk_d_volume='{{ disk_d_volume_var }}'
when: disk_d_volume_var.changed
- name: Delete OpenStack component volume
os_volume: '{{ item }}'
loop: '{{ disk_d_volume_dicts }}'
when: disk_d_volume_dicts is defined
register: disk_d_volume_var
- set_fact: disk_d_volume='{{ disk_d_volume_var }}'
when: disk_d_volume_var.changed
- name: Renew id_vars_example.yaml
hosts: localhost
tasks:
- file:
path: /mnt/d/source/repos/pyth/ispraas/clouni/id_vars_test.yaml
state: absent
34 changes: 34 additions & 0 deletions examples/tosca-volume-example.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
tosca_definitions_version: tosca_simple_yaml_1_0

topology_template:
node_templates:
server_kube_master:
type: tosca.nodes.Compute
# properties:
# networks:
# default:
# network_name: net-for-intra-sandbox
capabilities:
host:
properties:
num_cpus: 1
disk_size: 10 GiB
mem_size: 1 GiB
os:
properties:
type: ubuntu
distribution: xenial
version: 16.04
requirements:
- local_storage:
capability:
type: tosca.capabilities.Attachment
node: disk_d
disk_c:
type: tosca.nodes.BlockStorage
properties:
size: 10 GiB
disk_d:
type: tosca.nodes.BlockStorage
properties:
size: 10 GiB
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
netaddr==0.7.19 # for using 'ipaddr' in ip_contains.yaml Ansible artifact
pyyaml
pyyaml==5.3
six
graphlib_backport
9 changes: 9 additions & 0 deletions testing/test_openstack.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,15 @@ def test_delete_full_translating_network(self):
file_diff_path = os.path.join('examples', 'tosca-network-and-port-example-ansible-delete-openstack.yaml')
self.diff_files(file_output_path, file_diff_path)

def test_volume_validation(self):
file_path = os.path.join('examples', 'tosca-volume-example.yaml')
file_output = os.path.join('examples', 'tosca-volume-output.yaml')
shell.main(
['--template-file', file_path, '--cluster-name', 'test', '--provider', self.PROVIDER, '--output-file',
file_output, '--delete', '--debug'])
file_diff_path = os.path.join('examples', 'tosca-volume-correct.yaml')
self.diff_files(file_output, file_diff_path)

def test_network_with_compute(self):
file_path = os.path.join('examples', 'tosca-network-and-server-example.yaml')
template = self.read_template(file_path)
Expand Down
2 changes: 2 additions & 0 deletions toscatranslator/common/translator_to_configuration_dsl.py
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,8 @@ def translate(template_file, validate_only, provider, configuration_tool, cluste
tosca = ProviderToscaTemplate(tosca_parser_template_object, provider, configuration_tool, cluster_name,
host_ip_parameter, public_key_path, is_delete, common_map_files=default_map_files)

# To see intermediate provider specific template do -> print(tosca.__repr__())
# print(tosca.__repr__())
# Init configuration tool class
tool = get_configuration_tool_class(configuration_tool)(tosca.provider)

Expand Down
4 changes: 2 additions & 2 deletions toscatranslator/providers/common/python_sources.py
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
'EB': 7, 'E': 7, 'EIB': 7, 'EI': 7}


def transform_units(source_value, target_unit=None, is_only_numb=False, is_without_b=False):
def transform_units(source_value, target_unit=None, is_only_numb=False, is_without_b=False, is_floor_to_int=False):
regex = re.compile(r'([0-9.]+)\s*(\w+)')
result = regex.match(str(source_value)).groups()
source_value = result[0]
Expand All @@ -27,7 +27,7 @@ def transform_units(source_value, target_unit=None, is_only_numb=False, is_witho
else:
target_value += source_value
if is_only_numb:
return float(target_value)
return int(float(target_value)) if is_floor_to_int else float(target_value)
if is_without_b:
target_unit = target_unit[:-1] if target_unit is not None else source_unit[:-1]
return target_value + ' ' + target_unit
Expand Down
12 changes: 12 additions & 0 deletions toscatranslator/providers/common/tosca_template.py
Original file line number Diff line number Diff line change
Expand Up @@ -608,6 +608,18 @@ def make_extended_notations(self):
INPUTS: []
}

def __repr__(self):
s = "tosca_definitions_version: tosca_simple_yaml_1_0\n\n" + "topology_template:\n" + " node_templates:\n"
if len(self.node_templates) == 0:
return s

for (k, v) in self.node_templates[0].templates.items():
s += " - " + k + ":\n "
one = yaml.dump(v)
one = one.replace('\n', '\n ')
s += one + "\n"
return s

def _get_full_defintion(self, definition, def_type, ready_set):
if def_type in ready_set:
return definition, def_type in self.software_types
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -579,7 +579,7 @@ node_types:
type: string
required: false
size:
type: scalar-unit.size
type: integer # scalar-unit.size
required: false
volume_type:
type: string
Expand Down
29 changes: 25 additions & 4 deletions toscatranslator/providers/openstack/tosca_elements_map_to_openstack.yaml
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ tosca.nodes.Compute:
value: "{self[name]}_port_0"
- parameter: openstack.nodes.Server.properties.nics
value:
- port-name: "{self[name]}_port_0"
- port-name: "{self[name]}_port_0"
public_address:
- parameter: openstack.nodes.FloatingIp.requirements
value:
Expand Down Expand Up @@ -411,10 +411,31 @@ tosca.nodes.Compute:
value: "start=1 end={self[value]} format=%d"
- parameter: openstack.nodes.Server.properties.name
value: "{self[name]}_\\{\\{ item \\}\\}"
requirements.local_storage:
error: true
reason: Bad description in TOSCA Profile YAML v1.0
interfaces: openstack.nodes.Server.interfaces
# - requirements.local_storage.node: TODO: ТАК НАДО
# parameter: openstack.nodes.Server.requirements
# value:
# - parameter: volumes
# value: "{self[value]}_volume"
requirements.local_storage.node:
parameter: openstack.nodes.Server.requirements.volumes
value: "{self[value]}_volume"

tosca.nodes.BlockStorage:
- properties:
size:
- parameter: openstack.nodes.Volume.properties.size
value:
source: transform_units
executor: python
parameters:
source_value: "{self[value]}"
target_unit: GiB
is_only_numb: true
is_floor_to_int: true
value: default_tmp
- parameter: openstack.nodes.Volume.properties.display_name
value: "{self[name]}"

tosca.nodes.network.Network:
- interfaces: openstack.nodes.Network.interfaces
Expand Down