{% set floating_network = floating_network or "public" %}
{% set image_name = "^(cirros.*-disk|TestVM)$" %}
{% set flavor_name = "m1.tiny" %}

---
  version: 2
  title: Rally Task for OpenStack Neutron CI
  description: >
    The task contains various scenarios to prevent concurrency issues
  subtasks:
    -
      title: Network related workloads.
      workloads:
        -
          description: Check performance of list_networks action and ensure >
            network quotas are not exceeded
          scenario:
            NeutronNetworks.create_and_list_networks: {}
          runner:
            constant:
              times: 100
              concurrency: 20
          contexts:
            users:
              tenants: 1
              users_per_tenant: 1
            quotas:
              neutron:
                 # worst case is other 19 writers have created
                 # resources, but quota reservation hasn't cleared
                 # yet on any of them. This value could be 100
                 # without concurrency. see bug/1623390
                 network: 119
          sla:
            max_avg_duration_per_atomic:
              neutron.list_networks: 15  # reduce as perf is fixed

            failure_rate:
              max: 0
        -
          description: Check network update action
          scenario:
            NeutronNetworks.create_and_update_networks:
              network_create_args: {}
              network_update_args:
                  admin_state_up: False
                  name: "_updated"
          runner:
            constant:
              times: 40
              concurrency: 20
          contexts:
            users:
              tenants: 1
              users_per_tenant: 1
            quotas:
              neutron:
                network: -1
        -
          scenario:
            NeutronNetworks.create_and_delete_networks: {}
          runner:
            constant:
              times: 40
              concurrency: 20
          contexts:
            users:
              tenants: 1
              users_per_tenant: 1
            quotas:
              neutron:
                network: -1
                subnet: -1
    -
      title: Subnet related workloads.
      workloads:
        -
          scenario:
            NeutronNetworks.create_and_list_subnets:
              subnets_per_network: 2
          runner:
            constant:
              times: 40
              concurrency: 20
          contexts:
            users:
              tenants: 1
              users_per_tenant: 1
            quotas:
              neutron:
                 subnet: -1
                 network: -1
        -
          scenario:
            NeutronNetworks.create_and_update_subnets:
              network_create_args: {}
              subnet_create_args: {}
              subnet_cidr_start: "1.4.0.0/16"
              subnets_per_network: 2
              subnet_update_args:
                  enable_dhcp: True
                  name: "_subnet_updated"
          runner:
            constant:
              times: 100
              concurrency: 20
          contexts:
            users:
              tenants: 1
              users_per_tenant: 5
            quotas:
              neutron:
                network: -1
                subnet: -1
                port: -1
        -
          scenario:
            NeutronNetworks.create_and_delete_subnets:
              network_create_args: {}
              subnet_create_args: {}
              subnet_cidr_start: "1.1.0.0/30"
              subnets_per_network: 2
          runner:
            constant:
              times: 40
              concurrency: 20
          contexts:
            users:
              tenants: 1
              users_per_tenant: 1
            quotas:
              neutron:
                network: -1
                subnet: -1
    -
      title: Routers related workloads.
      workloads:
        -
          scenario:
            NeutronNetworks.create_and_list_routers:
              network_create_args:
              subnet_create_args:
              subnet_cidr_start: "1.1.0.0/30"
              subnets_per_network: 2
              router_create_args:
          runner:
            constant:
              times: 40
              concurrency: 20
          contexts:
            users:
              tenants: 1
              users_per_tenant: 1
            quotas:
              neutron:
                 network: -1
                 subnet: -1
                 router: -1
        -
          scenario:
            NeutronNetworks.create_and_update_routers:
              network_create_args: {}
              subnet_create_args: {}
              subnet_cidr_start: "1.1.0.0/30"
              subnets_per_network: 2
              router_create_args: {}
              router_update_args:
                  admin_state_up: False
                  name: "_router_updated"
          runner:
            constant:
              times: 40
              concurrency: 20
          contexts:
            users:
              tenants: 1
              users_per_tenant: 1
            quotas:
              neutron:
                network: -1
                subnet: -1
                router: -1
        -
          scenario:
            NeutronNetworks.create_and_delete_routers:
              network_create_args: {}
              subnet_create_args: {}
              subnet_cidr_start: "1.1.0.0/30"
              subnets_per_network: 2
              router_create_args: {}
          runner:
            constant:
              times: 40
              concurrency: 20
          contexts:
            users:
              tenants: 1
              users_per_tenant: 1
            quotas:
              neutron:
                network: -1
                subnet: -1
                router: -1
    -
      title: Ports related workloads.
      workloads:
        -
          description: Check performance of list ports action and ensure >
            network quotas are not exceeded
          scenario:
            NeutronNetworks.create_and_list_ports:
              network_create_args:
              port_create_args:
              ports_per_network: 50
          runner:
            constant:
              times: 8
              concurrency: 4
          contexts:
            users:
              tenants: 1
              users_per_tenant: 1
            quotas:
              neutron:
                 network: -1
                 subnet: -1
                 router: -1
                 # ((ports per net + 1 dhcp) * times) + (concurrency-1)
                 # see bug/1623390 for concurrency explanation
                 port: 811
          sla:
            max_avg_duration_per_atomic:
              neutron.list_ports: 15  # reduce as perf is fixed
            failure_rate:
              max: 0
        -
          scenario:
            NeutronNetworks.create_and_update_ports:
              network_create_args: {}
              port_create_args: {}
              ports_per_network: 5
              port_update_args:
                  admin_state_up: False
                  device_id: "dummy_id"
                  device_owner: "dummy_owner"
                  name: "_port_updated"
          runner:
            constant:
              times: 40
              concurrency: 20
          contexts:
            users:
              tenants: 1
              users_per_tenant: 1
            quotas:
              neutron:
                network: -1
                port: -1
        -
          scenario:
            NeutronNetworks.create_and_bind_ports:
              ports_per_network: 5
          runner:
            constant:
              times: 3
              concurrency: 2
          contexts:
            users:
              tenants: 1
              users_per_tenant: 1
            roles:
              - admin
            quotas:
              neutron:
                network: -1
                subnet: -1
                port: -1
            network: {}
            networking_agents: {}
        -
          scenario:
            NeutronNetworks.create_and_delete_ports:
              network_create_args: {}
              port_create_args: {}
              ports_per_network: 5
          runner:
            constant:
              times: 40
              concurrency: 20
          contexts:
            users:
              tenants: 1
              users_per_tenant: 1
            quotas:
              neutron:
                network: -1
                port: -1
    -
      title: Quotas update check
      scenario:
        Quotas.neutron_update:
          max_quota: 1024
      runner:
        constant:
          times: 40
          concurrency: 20
      contexts:
        users:
          tenants: 20
          users_per_tenant: 1
    -
      title: Trunks related workload
      scenario:
        NeutronTrunks.create_and_list_trunks:
          subport_count: 125
      runner:
        constant:
          times: 4
          concurrency: 4
      contexts:
        users:
          tenants: 1
          users_per_tenant: 1
        quotas:
          neutron:
            network: -1
            port: 1000
    -
      title: Floating IP related workloads
      workloads:
        -
          scenario:
            NeutronNetworks.create_and_delete_floating_ips:
              floating_network: {{ floating_network }}
              floating_ip_args: {}
          runner:
            constant:
              times: 10
              concurrency: 5
          contexts:
            users:
              tenants: 2
              users_per_tenant: 3
            quotas:
              neutron:
                floatingip: -1
        -
          scenario:
            NeutronNetworks.create_and_list_floating_ips:
              floating_network: {{ floating_network }}
              floating_ip_args: {}
          runner:
            constant:
              times: 10
              concurrency: 5
          contexts:
            users:
              tenants: 2
              users_per_tenant: 3
            quotas:
              neutron:
                floatingip: -1
        -
          scenario:
            NeutronNetworks.associate_and_dissociate_floating_ips:
              floating_network: {{ floating_network }}
          runner:
            constant:
              times: 10
              concurrency: 5
          contexts:
            users:
              tenants: 2
              users_per_tenant: 3
            quotas:
              neutron:
                floatingip: -1
    -
      title: Security Group Related Scenarios
      workloads:
        -
          scenario:
            NeutronSecurityGroup.create_and_delete_security_group_rule:
              security_group_args: {}
              security_group_rule_args: {}
          runner:
            constant:
              times: 50
              concurrency: 10
          contexts:
            users:
              tenants: 2
              users_per_tenant: 3
            quotas:
              neutron:
                security_group: -1
                security_group_rule: -1
        -
          scenario:
            NeutronSecurityGroup.create_and_delete_security_groups:
              security_group_create_args: {}
          runner:
            constant:
              times: 50
              concurrency: 10
          contexts:
            users:
              tenants: 2
              users_per_tenant: 3
            quotas:
              neutron:
                security_group: -1
        -
          scenario:
            NeutronSecurityGroup.create_and_list_security_group_rules:
              security_group_args: {}
              security_group_rule_args: {}
              security_group_rules_count: 20
          runner:
            constant:
              times: 50
              concurrency: 10
          contexts:
            users:
              tenants: 2
              users_per_tenant: 3
            quotas:
              neutron:
                security_group: -1
                security_group_rule: -1
        -
          scenario:
            NeutronSecurityGroup.create_and_list_security_groups:
              security_group_create_args: {}
          runner:
            constant:
              times: 50
              concurrency: 10
          contexts:
            users:
              tenants: 2
              users_per_tenant: 3
            quotas:
              neutron:
                security_group: -1
        -
          scenario:
            NeutronSecurityGroup.create_and_show_security_group_rule:
              security_group_args: {}
              security_group_rule_args: {}
          runner:
            constant:
              times: 50
              concurrency: 10
          contexts:
            users:
              tenants: 2
              users_per_tenant: 3
            quotas:
              neutron:
                security_group: -1
                security_group_rule: -1
        -
          scenario:
            NeutronSecurityGroup.create_and_show_security_group:
              security_group_create_args: {}
          runner:
            constant:
              times: 50
              concurrency: 10
          contexts:
            users:
              tenants: 2
              users_per_tenant: 3
            quotas:
              neutron:
                security_group: -1
        -
          scenario:
            NeutronSecurityGroup.create_and_update_security_groups:
              security_group_create_args: {}
              security_group_update_args: {}
          runner:
            constant:
              times: 50
              concurrency: 10
          contexts:
            users:
              tenants: 2
              users_per_tenant: 3
            quotas:
              neutron:
                security_group: -1
    -
      title: VM booting workloads
      workloads:
        -
          scenario:
            NovaServers.boot_and_delete_server:
              flavor:
                name: {{flavor_name}}
              image:
                name: {{image_name}}
              auto_assign_nic: true
          runner:
            constant:
              times: 2
              concurrency: 2
          contexts:
            users:
              tenants: 2
              users_per_tenant: 2
            network: {}
          sla:
            # NovaServers.boot_and_delete_server is unstable and frequently
            # times out when waiting for the VM to become ACTIVE. We run this
            # scenario for the osprofiler report and we ignore the rally
            # scenario outcome. Ideally we should eliminate the cause of the
            # timeouts, but even until then we'll get usable osprofiler
            # results.
            failure_rate:
              max: 100