{% set image_name = "^(cirros.*-disk|TestVM)$" %}
{% set flavor_name = "m1.tiny" %}
---
  version: 2
  title: Task for gate-rally-dsvm-rally-cinder job
  description: Testing mostly cinder related plugins using Block Storage API v3
  subtasks:
    -
      title: CinderVolumes.create_volume tests
      workloads:
        -
          scenario:
            CinderVolumes.create_volume:
              size: 1
          runner:
            constant:
              times: 2
              concurrency: 2
          contexts:
            users:
              tenants: 2
              users_per_tenant: 2
        -
          scenario:
            CinderVolumes.create_volume:
              size:
                min: 1
                max: 2
          runner:
            constant:
              times: 2
              concurrency: 2
          contexts:
            users:
              tenants: 2
              users_per_tenant: 2
            api_versions:
              cinder:
                version: 3
                service_name: cinderv3
        -
          description: "Create a volume from the specified image."
          scenario:
            CinderVolumes.create_volume:
              size: 1
              image:
                name: {{image_name}}
          runner:
            constant:
              times: 2
              concurrency: 2
          contexts:
            users:
              tenants: 1
              users_per_tenant: 1
    -
      title: Authenticate.validate_cinder tests
      scenario:
        Authenticate.validate_cinder:
          repetitions: 2
      runner:
        constant:
          times: 10
          concurrency: 5
      contexts:
        users:
          tenants: 2
          users_per_tenant: 1
    -
      title: Quotas.cinder_update_and_delete tests
      scenario:
        Quotas.cinder_update_and_delete:
          max_quota: 1024
      runner:
        constant:
          times: 4
          concurrency: 1
      contexts:
        users:
          tenants: 2
          users_per_tenant: 1
    -
      title: Quotas.cinder_update test
      scenario:
        Quotas.cinder_update:
          max_quota: 1024
      runner:
        constant:
          times: 4
          concurrency: 1
      contexts:
        users:
          tenants: 2
          users_per_tenant: 2
    -
      title: Quotas.cinder_get tests
      scenario:
        Quotas.cinder_get: {}
      runner:
        constant:
          times: 6
          concurrency: 3
      contexts:
        users:
          tenants: 2
          users_per_tenant: 2
    -
      title: CinderVolumes.create_and_delete_volume tests
      workloads:
        -
          scenario:
            CinderVolumes.create_and_delete_volume:
              size: 1
          runner:
            constant:
              times: 2
              concurrency: 2
          contexts:
            users:
              tenants: 2
              users_per_tenant: 2
        -
          description: "Create a volume from specific image and delete it."
          scenario:
            CinderVolumes.create_and_delete_volume:
              size: 1
              image:
                name: {{image_name}}
          runner:
            constant:
              times: 2
              concurrency: 2
          contexts:
            users:
              tenants: 2
              users_per_tenant: 2
        -
          description: "Create a volume from image created by image context."
          scenario:
            CinderVolumes.create_and_delete_volume:
              size: 1
              image:
                name: "image-context-test"
          runner:
            constant:
              times: 2
              concurrency: 2
          contexts:
            users:
              tenants: 1
              users_per_tenant: 2
            roles:
              - admin
            images:
              image_url: "~/.rally/extra/fake-image.img"
              disk_format: "raw"
              container_format: "bare"
              images_per_tenant: 1
              image_name: "image-context-test"
              visibility: "public"
    -
      title: CinderVolumes.create_and_update_volume tests
      workloads:
        -
          scenario:
            CinderVolumes.create_and_update_volume:
              update_volume_kwargs:
                description: "desc_updated"
              size: 1
          runner:
            constant:
              times: 2
              concurrency: 2
          contexts:
            users:
              tenants: 2
              users_per_tenant: 2
        -
          description: "Create volume from image and update it."
          scenario:
            CinderVolumes.create_and_update_volume:
              update_volume_kwargs:
                description: "desc_updated"
              size: 1
              image:
                name: {{image_name}}
          runner:
            constant:
              times: 2
              concurrency: 2
          contexts:
            users:
              tenants: 2
              users_per_tenant: 2

    -
      title: CinderVolumes.create_volume_and_update_readonly_flag tests
      workloads:
        -
          scenario:
            CinderVolumes.create_volume_and_update_readonly_flag:
              size: 1
              read_only: true
          runner:
            constant:
              times: 2
              concurrency: 2
          contexts:
            users:
              tenants: 2
              users_per_tenant: 2
        -
          description: "Create volume from image and update read only flag."
          scenario:
            CinderVolumes.create_volume_and_update_readonly_flag:
              size: 1
              read_only: false
              image:
                name: {{image_name}}
          runner:
            constant:
              times: 2
              concurrency: 2
          contexts:
            users:
              tenants: 2
              users_per_tenant: 2

    -
      title: CinderVolumes.create_and_list_volume tests
      workloads:
        -
          scenario:
            CinderVolumes.create_and_list_volume:
              size: 1
              detailed: True
          runner:
            constant:
              times: 2
              concurrency: 2
          contexts:
            users:
              tenants: 1
              users_per_tenant: 1
        -
          scenario:
            CinderVolumes.create_and_list_volume:
              size:
                min: 1
                max: 2
              detailed: True
          runner:
            constant:
              times: 2
              concurrency: 2
          contexts:
            users:
              tenants: 1
              users_per_tenant: 1
        -
          description: "Create volume from image and list volumes."
          scenario:
            CinderVolumes.create_and_list_volume:
              size: 1
              detailed: True
              image:
                name: {{image_name}}
          runner:
            constant:
              times: 2
              concurrency: 2
          contexts:
            users:
              tenants: 1
              users_per_tenant: 1
    -
      title: CinderVolumes.create_and_get_volume tests
      workloads:
        -
          scenario:
            CinderVolumes.create_and_get_volume:
              size: 1
          runner:
            constant:
              times: 4
              concurrency: 2
          contexts:
            users:
              tenants: 2
              users_per_tenant: 2
        -
          scenario:
            CinderVolumes.create_and_get_volume:
              size:
                min: 1
                max: 2
          runner:
            constant:
              times: 2
              concurrency: 2
          contexts:
            users:
              tenants: 2
              users_per_tenant: 2
        -
          description: "Create volume from image and get it."
          scenario:
            CinderVolumes.create_and_get_volume:
              size: 1
              image:
                name: {{image_name}}
          runner:
            constant:
              times: 4
              concurrency: 2
          contexts:
            users:
              tenants: 2
              users_per_tenant: 2

    -
      title: CinderVolumes.list_volumes tests
      scenario:
        CinderVolumes.list_volumes:
          detailed: True
      runner:
        constant:
          times: 2
          concurrency: 2
      contexts:
        users:
          tenants: 2
          users_per_tenant: 1
        volumes:
          size: 1
          volumes_per_tenant: 2

    -
      title: CinderVolumes.list_types tests
      workloads:
    {% for s in ("true", "false") %}
        -
          scenario:
            CinderVolumes.list_types:
              is_public: {{s}}
          runner:
            constant:
              times: 10
              concurrency: 5
          contexts:
            users:
              tenants: 2
              users_per_tenant: 3
    {% endfor %}

    -
      title: CinderVolumes.create_and_accept_transfer tests
      workloads:
        -
          scenario:
            CinderVolumes.create_and_accept_transfer:
              size: 1
          runner:
            constant:
              times: 2
              concurrency: 2
          contexts:
            users:
              tenants: 2
              users_per_tenant: 2
        -
          description: "Create volume from image and accept transfer."
          scenario:
            CinderVolumes.create_and_accept_transfer:
              size: 1
              image:
                name: {{image_name}}
          runner:
            constant:
              times: 2
              concurrency: 2
          contexts:
            users:
              tenants: 2
              users_per_tenant: 2

    -
      title: CinderVolumes.create_and_extend_volume tests
      workloads:
        -
          scenario:
            CinderVolumes.create_and_extend_volume:
              size: 1
              new_size: 2
          runner:
            constant:
              times: 2
              concurrency: 2
          contexts:
            users:
              tenants: 1
              users_per_tenant: 1
        -
          scenario:
            CinderVolumes.create_and_extend_volume:
              size:
                min: 1
                max: 2
              new_size:
                min: 3
                max: 4
          runner:
            constant:
              times: 2
              concurrency: 2
          contexts:
            users:
              tenants: 1
              users_per_tenant: 1
    -
      title: CinderVolumes.create_from_volume_and_delete_volume test
      workloads:
        -
          scenario:
            CinderVolumes.create_from_volume_and_delete_volume:
              size: 1
          runner:
            constant:
              times: 2
              concurrency: 2
          contexts:
            users:
              tenants: 1
              users_per_tenant: 1
            volumes:
              size: 1
        -
          scenario:
            CinderVolumes.create_from_volume_and_delete_volume:
              size:
                min: 1
                max: 2
          runner:
            constant:
              times: 2
              concurrency: 2
          contexts:
            users:
              tenants: 1
              users_per_tenant: 1
            volumes:
              size: 1
    -
      title: CinderVolumes.create_and_attach_volume test
      scenario:
        CinderVolumes.create_and_attach_volume:
          size: 1
          image:
            name: {{image_name}}
          flavor:
            name: {{flavor_name}}
      runner:
        constant:
          times: 2
          concurrency: 2
      contexts:
        users:
          tenants: 2
          users_per_tenant: 2
    -
      title: CinderVolumes.create_snapshot_and_attach_volume tests
      workloads:
        -
          scenario:
            CinderVolumes.create_snapshot_and_attach_volume:
              volume_type: "lvmdriver-1"
              size: 1
              image:
                name: {{image_name}}
              flavor:
                name: {{flavor_name}}
          runner:
            constant:
              times: 2
              concurrency: 2
          contexts:
            users:
              tenants: 2
              users_per_tenant: 2
        -
          description: "Create a volume using volume type created in context."
          scenario:
            CinderVolumes.create_snapshot_and_attach_volume:
              volume_type: "test"
              size: 1
              image:
                name: {{image_name}}
              flavor:
                name: {{flavor_name}}
          runner:
            constant:
              times: 2
              concurrency: 2
          contexts:
            users:
              tenants: 2
              users_per_tenant: 2
            volume_types:
              - "test"
    -
      title: CinderVolumes.create_and_delete_snapshot tests
      scenario:
        CinderVolumes.create_and_delete_snapshot:
          force: false
      runner:
        constant:
          times: 2
          concurrency: 2
      contexts:
        users:
          tenants: 2
          users_per_tenant: 2
        volumes:
          size: 1
    -
      title: CinderVolumes.create_and_list_snapshots tests
      scenario:
        CinderVolumes.create_and_list_snapshots:
          force: False
          detailed: True
      runner:
        constant:
          times: 2
          concurrency: 2
      contexts:
        users:
          tenants: 1
          users_per_tenant: 1
        volumes:
          size: 1

    -
      title: CinderVolumes.create_and_upload_volume_to_image tests
      workloads:
        -
          scenario:
            CinderVolumes.create_and_upload_volume_to_image:
              size: 1
              image:
                name: {{image_name}}
          runner:
            constant:
              times: 1
              concurrency: 1
          contexts:
            users:
              tenants: 1
              users_per_tenant: 1
            api_versions:
              glance:
                version: 2
        -
          description: >
            Create a volume using type created by context & upload to image
          scenario:
            CinderVolumes.create_and_upload_volume_to_image:
              size: 1
              volume_type: test
              image:
                name: {{image_name}}
          runner:
            constant:
              times: 1
              concurrency: 1
          contexts:
            users:
              tenants: 1
              users_per_tenant: 1
            volume_types:
              - test
    -
      title: CinderVolumes.create_volume_backup tests
      workloads:
        -
          scenario:
            CinderVolumes.create_volume_backup:
              size: 1
              do_delete: True
          runner:
            constant:
              times: 2
              concurrency: 2
          contexts:
            users:
              tenants: 1
              users_per_tenant: 1
        -
          scenario:
            CinderVolumes.create_volume_backup:
              size: 1
              do_delete: False
          runner:
            constant:
              times: 2
              concurrency: 2
          contexts:
            users:
              tenants: 1
              users_per_tenant: 1
    -
      title: CinderVolumeBackups.create_incremental_volume_backup tests
      scenario:
        CinderVolumeBackups.create_incremental_volume_backup:
          size: 1
      runner:
        constant:
          times: 2
          concurrency: 2
      contexts:
        users:
          tenants: 2
          users_per_tenant: 2

    -
      title: CinderVolumes.create_and_restore_volume_backup tests
      workloads:
        -
          scenario:
            CinderVolumes.create_and_restore_volume_backup:
              size: 1
              do_delete: True
          runner:
            constant:
              times: 2
              concurrency: 2
          contexts:
            users:
              tenants: 1
              users_per_tenant: 1
        -
          scenario:
            CinderVolumes.create_and_restore_volume_backup:
              size: 1
              do_delete: False
          runner:
            constant:
              times: 2
              concurrency: 2
          contexts:
            users:
              tenants: 1
              users_per_tenant: 1
    -
      title: CinderVolumes.create_and_list_volume_backups tests
      workloads:
        -
          description: "Create volume backup and list, delete backup at the end."
          scenario:
            CinderVolumes.create_and_list_volume_backups:
              size: 1
              detailed: True
              do_delete: True
          runner:
            constant:
              times: 2
              concurrency: 2
          contexts:
            users:
              tenants: 1
              users_per_tenant: 1
        -
          description: "Create volume backup and list, don't delete backup."
          scenario:
            CinderVolumes.create_and_list_volume_backups:
              size: 1
              detailed: True
              do_delete: False
          runner:
            constant:
              times: 2
              concurrency: 2
          contexts:
            users:
              tenants: 1
              users_per_tenant: 1
    -
      title: CinderVolumes.create_nested_snapshots_and_attach_volume tests
      scenario:
        CinderVolumes.create_nested_snapshots_and_attach_volume:
          size:
              min: 1
              max: 1
          nested_level: 2
          image:
            name: {{image_name}}
          flavor:
            name: {{flavor_name}}
      runner:
        constant:
          times: 2
          concurrency: 2
      contexts:
        users:
          tenants: 2
          users_per_tenant: 1
      sla:
        failure_rate:
          max: 51
    -
      title: CinderVolumes.create_volume_and_clone tests
      workloads:
        -
          scenario:
            CinderVolumes.create_volume_and_clone:
              size: 1
          runner:
            constant:
              times: 2
              concurrency: 2
          contexts:
            users:
              tenants: 2
              users_per_tenant: 2
        -
          scenario:
            CinderVolumes.create_volume_and_clone:
              size:
                min: 1
                max: 1
              nested_level: 2
          runner:
            constant:
              times: 1
              concurrency: 1
          contexts:
            users:
              tenants: 2
              users_per_tenant: 2
    -
      title: CinderVolumeTypes.create_and_update_volume_type tests
      scenario:
        CinderVolumeTypes.create_and_update_volume_type:
          description: "test"
          update_description: "test update"
      runner:
        constant:
          times: 4
          concurrency: 2
      contexts:
        users:
          tenants: 2
          users_per_tenant: 2
    -
      title: CinderVolumes.create_volume_from_snapshot
      scenario:
        CinderVolumes.create_volume_from_snapshot:
          do_delete: true
      runner:
        constant:
          times: 2
          concurrency: 2
      contexts:
        users:
          tenants: 2
          users_per_tenant: 2
        volumes:
          size: 1
      sla:
        failure_rate:
          max: 51
    -
      title: CinderVolumeTypes.create_and_get_volume_type tests
      scenario:
        CinderVolumeTypes.create_and_get_volume_type:
          description: "rally tests creating types"
      runner:
        constant:
          times: 4
          concurrency: 2
      contexts:
        users:
          tenants: 2
          users_per_tenant: 2
    -
      title: CinderVolumeTypes.create_and_delete_volume_type tests
      scenario:
        CinderVolumeTypes.create_and_delete_volume_type:
          description: "rally tests creating types"
      runner:
        constant:
          times: 4
          concurrency: 2
      contexts:
        users:
          tenants: 2
          users_per_tenant: 2
    -
      title: CinderVolumeTypes.create_and_delete_encryption_type tests
      workloads:
        -
          scenario:
            CinderVolumeTypes.create_and_delete_encryption_type:
              provider: "LuksEncryptor"
              cipher: "aes-xts-plain64"
              key_size: 512
              control_location: "front-end"
          runner:
            constant:
              times: 4
              concurrency: 1
          contexts:
            users:
              tenants: 2
              users_per_tenant: 2
            volume_types: [
              "test_type1",
              "test_type2",
              "test_type3",
              "test_type4"
            ]
        -
          scenario:
            CinderVolumeTypes.create_and_delete_encryption_type:
              create_specs:
                provider: "LuksEncryptor"
                cipher: "aes-xts-plain64"
                key_size: 512
                control_location: "front-end"
          runner:
            constant:
              times: 1
              concurrency: 1
          contexts:
            users:
              tenants: 1
              users_per_tenant: 1
            volume_types: [
              "test_type1",
              "test_type2",
              "test_type3",
              "test_type4"
            ]

    -
      title: CinderVolumeTypes.create_and_list_volume_types tests
      scenario:
        CinderVolumeTypes.create_and_list_volume_types:
          description: "rally tests creating types"
      runner:
        constant:
          times: 4
          concurrency: 2
      contexts:
        users:
          tenants: 2
          users_per_tenant: 2

    -
      title: CinderVolumeTypes.create_volume_type_and_encryption_type tests
      workloads:
        -
          scenario:
            CinderVolumeTypes.create_volume_type_and_encryption_type:
              description: "rally tests creating types"
              provider: "LuksEncryptor"
              cipher: "aes-xts-plain64"
              key_size: 512
              control_location: "front-end"
          runner:
            constant:
              times: 4
              concurrency: 2
          contexts:
            users:
              tenants: 2
              users_per_tenant: 2
        -
          scenario:
            CinderVolumeTypes.create_volume_type_and_encryption_type:
              create_specs:
                provider: "LuksEncryptor"
                cipher: "aes-xts-plain64"
                key_size: 512
                control_location: "front-end"
          runner:
            constant:
              times: 1
              concurrency: 1
          contexts:
            users:
              tenants: 1
              users_per_tenant: 1

    -
      title: CinderVolumeTypes.create_and_list_encryption_type tests
      workloads:
        -
          scenario:
            CinderVolumeTypes.create_and_list_encryption_type:
              provider: "LuksEncryptor"
              cipher: "aes-xts-plain64"
              key_size: 512
              control_location: "front-end"
          runner:
            constant:
              times: 4
              concurrency: 2
          contexts:
            users:
              tenants: 2
              users_per_tenant: 2
            volume_types: [
              "test_type1",
              "test_type2",
              "test_type3",
              "test_type4"
            ]
        -
          scenario:
            CinderVolumeTypes.create_and_list_encryption_type:
              create_specs:
                provider: "LuksEncryptor"
                cipher: "aes-xts-plain64"
                key_size: 512
                control_location: "front-end"
          runner:
            constant:
              times: 1
              concurrency: 1
          contexts:
            users:
              tenants: 1
              users_per_tenant: 1
            volume_types: [
              "test_type1",
              "test_type2",
              "test_type3",
              "test_type4"
            ]
    -
      title: CinderVolumeTypes.create_and_set_volume_type_keys tests
      scenario:
        CinderVolumeTypes.create_and_set_volume_type_keys:
          description: "rally tests creating types"
          volume_type_key:
            volume_backend_name: "LVM_iSCSI"
      runner:
        constant:
          times: 4
          concurrency: 2
      contexts:
        users:
          tenants: 2
          users_per_tenant: 2
    -
      title: CinderVolumes.list_transfers tests
      scenario:
        CinderVolumes.list_transfers:
          detailed: true
      runner:
        constant:
          times: 3
          concurrency: 2
      contexts:
        users:
          tenants: 3
          users_per_tenant: 2

    -
      title: CinderQos.create_and_list_qos tests
      scenario:
        CinderQos.create_and_list_qos:
          consumer: "both"
          write_iops_sec: "10"
          read_iops_sec: "1000"
      runner:
        constant:
          times: 4
          concurrency: 2
      contexts:
        users:
          tenants: 2
          users_per_tenant: 2

    -
      title: CinderQos.create_and_get_qos tests
      scenario:
        CinderQos.create_and_get_qos:
          consumer: "both"
          write_iops_sec: "10"
          read_iops_sec: "1000"
      runner:
        constant:
          times: 4
          concurrency: 2
      contexts:
        users:
          tenants: 2
          users_per_tenant: 2

    -
      title: CinderQos.create_qos_associate_and_disassociate_type tests
      scenario:
        CinderQos.create_qos_associate_and_disassociate_type:
          consumer: "both"
          write_iops_sec: "10"
          read_iops_sec: "1000"
      runner:
        constant:
          times: 2
          concurrency: 1
      contexts:
        users:
          tenants: 1
          users_per_tenant: 1
        volume_types: [
          "test_type1",
          "test_type2"
        ]

    -
      title: CinderVolumeTypes.create_get_and_delete_encryption_type tests
      scenario:
        CinderVolumeTypes.create_get_and_delete_encryption_type:
          provider: "LuksEncryptor"
          cipher: "aes-xts-plain64"
          key_size: 512
          control_location: "front-end"
      runner:
        constant:
          times: 4
          concurrency: 2
      contexts:
        users:
          tenants: 2
          users_per_tenant: 2
        volume_types: [
          "test_type1",
          "test_type2",
          "test_type3",
          "test_type4"
        ]
    -
      title: CinderVolumeTypes.create_and_update_encryption_type tests
      scenario:
        CinderVolumeTypes.create_and_update_encryption_type:
          create_provider: "LuksEncryptor"
          create_cipher: "aes-xts-plain64"
          create_key_size: 512
          create_control_location: "front-end"
          update_provider: "CryptsetupEncryptor"
          update_cipher: "aes-xts-plain"
          update_key_size: 256
          update_control_location: "back-end"
      runner:
        constant:
          times: 4
          concurrency: 2
      contexts:
        users:
          tenants: 2
          users_per_tenant: 2
        volume_types: [
          "test_type1",
          "test_type2",
          "test_type3",
          "test_type4"
        ]

    -
      title: CinderQos.create_and_set_qos tests
      scenario:
        CinderQos.create_and_set_qos:
          consumer: "back-end"
          write_iops_sec: "10"
          read_iops_sec: "1000"
          set_consumer: "both"
          set_write_iops_sec: "11"
          set_read_iops_sec: "1001"
      runner:
        constant:
          times: 5
          concurrency: 2
      contexts:
        users:
          tenants: 2
          users_per_tenant: 2

    -
      title: CinderVolumeTypes.create_volume_type_add_and_list_type_access tests
      scenario:
        CinderVolumeTypes.create_volume_type_add_and_list_type_access:
          description: "rally tests creating types"
      runner:
        constant:
          times: 4
          concurrency: 2
      contexts:
        users:
          tenants: 2
          users_per_tenant: 2
