summaryrefslogtreecommitdiffstats
path: root/INFO
blob: 8acaf875e0f92550be76b185bd647c6b89eba300 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Project: L2/L3 forwarding performance toolkit for NFVi (NFVbench)
Project Creation Date: May 2nd 2017
Project Category:
Lifecycle State:
Primary Contact: Alec Hothan (ahothan@cisco.com)
Project Lead: Alec Hothan (ahothan@cisco.com)
Jira Project Name: L2 L3 forwarding performance toolkit for NFVi
Jira Project Prefix: NFVBENCH
Mailing list tag: [nfvbench]
IRC: Server:
Repository: nfvbench

Committers:
Alec Hothan (ahothan@cisco.com)
Carsten Rossenhövel (cross@eantc.com)
Frank Brockners (fbrockne@cisco.com)
Yichen Wang (yicwang@cisco.com)
Al Morton (acmorton@att.com)

Link to TSC approval of the project:

Acknowledgements
The development of NFVbench started in Summer 2016 at Cisco by this small team of dedicated people
before being open sourced in Spring 2017 to OPNFV following more than 500 commits:
 Jan Balaz (aka Johnny)
 Stefano Chiesa Suryanto
 Yichen Wang
 Alec Hothan
id='n346' href='#n346'>346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423
heat_template_version: 2015-04-30
description: 'OpenStack swift storage node configured by Puppet'
parameters:
  Flavor:
    description: Flavor for Swift storage nodes to request when deploying.
    type: string
    constraints:
      - custom_constraint: nova.flavor
  HashSuffix:
    description: A random string to be used as a salt when hashing to determine mappings
      in the ring.
    hidden: true
    type: string
  Image:
    default: overcloud-swift-storage
    type: string
  KeyName:
    default: default
    description: Name of an existing Nova key pair to enable SSH access to the instances
    type: string
  MountCheck:
    default: 'false'
    description: Value of mount_check in Swift account/container/object -server.conf
    type: boolean
  MinPartHours:
    type: number
    default: 1
    description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
  PartPower:
    default: 10
    description: Partition Power to use when building Swift rings
    type: number
  RingBuild:
    default: true
    description: Whether to manage Swift rings or not
    type: boolean
  Replicas:
    type: number
    default: 3
    description: How many replicas to use in the swift rings.
  SnmpdReadonlyUserName:
    default: ro_snmp_user
    description: The user name for SNMPd with readonly rights running on all Overcloud nodes
    type: string
  SnmpdReadonlyUserPassword:
    description: The user password for SNMPd with readonly rights running on all Overcloud nodes
    type: string
    hidden: true
  NtpServer:
    default: ''
    description: Comma-separated list of ntp servers
    type: comma_delimited_list
  EnablePackageInstall:
    default: 'false'
    description: Set to true to enable package installation via Puppet
    type: boolean
  UpdateIdentifier:
    default: ''
    type: string
    description: >
      Setting to a previously unused value during stack-update will trigger
      package update on all nodes
  ServiceNetMap:
    default: {}
    description: Mapping of service_name -> network name. Typically set
                 via parameter_defaults in the resource registry.
    type: json
  TimeZone:
    default: 'UTC'
    description: The timezone to be set on Ceph nodes.
    type: string
  Hostname:
    type: string
    default: '' # Defaults to Heat created hostname
  HostnameMap:
    type: json
    default: {}
    description: Optional mapping to override hostnames
  ExtraConfig:
    default: {}
    description: |
      Additional hiera configuration to inject into the cluster. Note
      that ObjectStorageExtraConfig takes precedence over ExtraConfig.
    type: json
  ObjectStorageExtraConfig:
    default: {}
    description: |
      Role specific additional hiera configuration to inject into the cluster.
    type: json
  SwiftStorageIPs:
    default: {}
    type: json
  NetworkDeploymentActions:
    type: comma_delimited_list
    description: >
      Heat action when to apply network configuration changes
    default: ['CREATE']
  SoftwareConfigTransport:
    default: POLL_SERVER_CFN
    description: |
      How the server should receive the metadata required for software configuration.
    type: string
    constraints:
    - allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
  CloudDomain:
    default: ''
    type: string
    description: >
      The DNS domain used for the hosts. This should match the dhcp_domain
      configured in the Undercloud neutron. Defaults to localdomain.
  ServerMetadata:
    default: {}
    description: >
      Extra properties or metadata passed to Nova for the created nodes in
      the overcloud. It's accessible via the Nova metadata API.
    type: json
  SchedulerHints:
    type: json
    description: Optional scheduler hints to pass to nova
    default: {}
  NodeIndex:
    type: number
    default: 0

resources:

  SwiftStorage:
    type: OS::Nova::Server
    properties:
      image: {get_param: Image}
      flavor: {get_param: Flavor}
      key_name: {get_param: KeyName}
      networks:
        - network: ctlplane
      user_data_format: SOFTWARE_CONFIG
      user_data: {get_resource: UserData}
      name:
        str_replace:
            template: {get_param: Hostname}
            params: {get_param: HostnameMap}
      software_config_transport: {get_param: SoftwareConfigTransport}
      metadata: {get_param: ServerMetadata}
      scheduler_hints: {get_param: SchedulerHints}

  # Combine the NodeAdminUserData and NodeUserData mime archives
  UserData:
    type: OS::Heat::MultipartMime
    properties:
      parts:
      - config: {get_resource: NodeAdminUserData}
        type: multipart
      - config: {get_resource: NodeUserData}
        type: multipart

  # Creates the "heat-admin" user if configured via the environment
  # Should return a OS::Heat::MultipartMime reference via OS::stack_id
  NodeAdminUserData:
    type: OS::TripleO::NodeAdminUserData

  # For optional operator additional userdata
  # Should return a OS::Heat::MultipartMime reference via OS::stack_id
  NodeUserData:
    type: OS::TripleO::NodeUserData

  ExternalPort:
    type: OS::TripleO::SwiftStorage::Ports::ExternalPort
    properties:
      ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
      IPPool: {get_param: SwiftStorageIPs}
      NodeIndex: {get_param: NodeIndex}

  InternalApiPort:
    type: OS::TripleO::SwiftStorage::Ports::InternalApiPort
    properties:
      ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
      IPPool: {get_param: SwiftStorageIPs}
      NodeIndex: {get_param: NodeIndex}

  StoragePort:
    type: OS::TripleO::SwiftStorage::Ports::StoragePort
    properties:
      ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
      IPPool: {get_param: SwiftStorageIPs}
      NodeIndex: {get_param: NodeIndex}

  StorageMgmtPort:
    type: OS::TripleO::SwiftStorage::Ports::StorageMgmtPort
    properties:
      ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
      IPPool: {get_param: SwiftStorageIPs}
      NodeIndex: {get_param: NodeIndex}

  TenantPort:
    type: OS::TripleO::SwiftStorage::Ports::TenantPort
    properties:
      ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
      IPPool: {get_param: SwiftStorageIPs}
      NodeIndex: {get_param: NodeIndex}

  ManagementPort:
    type: OS::TripleO::SwiftStorage::Ports::ManagementPort
    properties:
      ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
      IPPool: {get_param: SwiftStorageIPs}
      NodeIndex: {get_param: NodeIndex}

  NetworkConfig:
    type: OS::TripleO::ObjectStorage::Net::SoftwareConfig
    properties:
      ControlPlaneIp: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
      ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
      InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
      StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
      StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
      TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
      ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}

  NetIpMap:
    type: OS::TripleO::Network::Ports::NetIpMap
    properties:
      ControlPlaneIp: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
      ExternalIp: {get_attr: [ExternalPort, ip_address]}
      ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
      InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
      InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
      StorageIp: {get_attr: [StoragePort, ip_address]}
      StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
      StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
      StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
      TenantIp: {get_attr: [TenantPort, ip_address]}
      TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
      ManagementIp: {get_attr: [ManagementPort, ip_address]}
      ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}

  NetworkDeployment:
    type: OS::TripleO::SoftwareDeployment
    properties:
      name: NetworkDeployment
      config: {get_resource: NetworkConfig}
      server: {get_resource: SwiftStorage}
      actions: {get_param: NetworkDeploymentActions}

  SwiftStorageHieraConfig:
    type: OS::Heat::StructuredConfig
    properties:
      group: os-apply-config
      config:
        hiera:
          hierarchy:
            - '"%{::uuid}"'
            - heat_config_%{::deploy_config_name}
            - object_extraconfig
            - extraconfig
            - object
            - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
            - all_nodes # provided by allNodesConfig
            - '"%{::osfamily}"'
            - common
          merge_behavior: deeper
          datafiles:
            common:
              raw_data: {get_file: hieradata/common.yaml}
            object_extraconfig:
              mapped_data: {get_param: ObjectStorageExtraConfig}
            extraconfig:
              mapped_data: {get_param: ExtraConfig}
            object:
              raw_data: {get_file: hieradata/object.yaml}
              mapped_data: # data supplied directly to this deployment configuration, etc
                swift::swift_hash_suffix: { get_input: swift_hash_suffix }
                tripleo::ringbuilder::build_ring: { get_input: swift_ring_build }
                tripleo::ringbuilder::part_power: { get_input: swift_part_power }
                tripleo::ringbuilder::replicas: {get_input: swift_replicas }
                swift::storage::all::storage_local_net_ip: {get_input: swift_management_network}
                swift_mount_check: {get_input: swift_mount_check }
                tripleo::ringbuilder::min_part_hours: { get_input: swift_min_part_hours }
                ntp::servers: {get_input: ntp_servers}
                timezone::timezone: {get_input: timezone}
                snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
                snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
                tripleo::packages::enable_install: {get_input: enable_package_install}
                tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}


  SwiftStorageHieraDeploy:
    type: OS::Heat::StructuredDeployment
    depends_on: NetworkDeployment
    properties:
      name: SwiftStorageHieraDeploy
      server: {get_resource: SwiftStorage}
      config: {get_resource: SwiftStorageHieraConfig}
      input_values:
        local_ip: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
        snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
        snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
        swift_hash_suffix: {get_param: HashSuffix}
        swift_mount_check: {get_param: MountCheck}
        swift_min_part_hours: {get_param: MinPartHours}
        swift_ring_build: {get_param: RingBuild}
        swift_part_power: {get_param: PartPower}
        swift_replicas: { get_param: Replicas}
        ntp_servers: {get_param: NtpServer}
        timezone: {get_param: TimeZone}
        enable_package_install: {get_param: EnablePackageInstall}
        enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
        swift_management_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}

  # Resource for site-specific injection of root certificate
  NodeTLSCAData:
    depends_on: SwiftStorageHieraDeploy
    type: OS::TripleO::NodeTLSCAData
    properties:
      server: {get_resource: SwiftStorage}

  # Hook for site-specific additional pre-deployment config,
  # applying to all nodes, e.g node registration/unregistration
  NodeExtraConfig:
    depends_on: NodeTLSCAData
    type: OS::TripleO::NodeExtraConfig
    properties:
        server: {get_resource: SwiftStorage}

  UpdateConfig:
    type: OS::TripleO::Tasks::PackageUpdate

  UpdateDeployment:
    type: OS::Heat::SoftwareDeployment
    properties:
      config: {get_resource: UpdateConfig}
      server: {get_resource: SwiftStorage}
      input_values:
        update_identifier:
          get_param: UpdateIdentifier

outputs:
  hosts_entry:
    value:
      str_replace:
        template: |
          PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
          EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
          INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
          STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
          STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
          TENANTIP TENANTHOST.DOMAIN TENANTHOST
          MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
        params:
          PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ObjectStorageHostnameResolveNetwork]}]}
          DOMAIN: {get_param: CloudDomain}
          PRIMARYHOST: {get_attr: [SwiftStorage, name]}
          EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
          EXTERNALHOST:
            list_join:
            - '.'
            - - {get_attr: [SwiftStorage, name]}
              - external
          INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
          INTERNAL_APIHOST:
            list_join:
            - '.'
            - - {get_attr: [SwiftStorage, name]}
              - internalapi
          STORAGEIP: {get_attr: [StoragePort, ip_address]}
          STORAGEHOST:
            list_join:
            - '.'
            - - {get_attr: [SwiftStorage, name]}
              - storage
          STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
          STORAGE_MGMTHOST:
            list_join:
            - '.'
            - - {get_attr: [SwiftStorage, name]}
              - storagemgmt
          TENANTIP: {get_attr: [TenantPort, ip_address]}
          TENANTHOST:
            list_join:
            - '.'
            - - {get_attr: [SwiftStorage, name]}
              - tenant
          MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
          MANAGEMENTHOST:
            list_join:
            - '.'
            - - {get_attr: [SwiftStorage, name]}
              - management
  nova_server_resource:
    description: Heat resource handle for the swift storage server
    value:
      {get_resource: SwiftStorage}
  swift_device:
    description: Swift device formatted for swift-ring-builder
    value:
      str_replace:
        template: 'r1z1-IP:%PORT%/d1'
        params:
          IP: {get_attr: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
  external_ip_address:
    description: IP address of the server in the external network
    value: {get_attr: [ExternalPort, ip_address]}
  internal_api_ip_address:
    description: IP address of the server in the internal_api network
    value: {get_attr: [InternalApiPort, ip_address]}
  storage_ip_address:
    description: IP address of the server in the storage network
    value: {get_attr: [StoragePort, ip_address]}
  storage_mgmt_ip_address:
    description: IP address of the server in the storage_mgmt network
    value: {get_attr: [StorageMgmtPort, ip_address]}
  tenant_ip_address:
    description: IP address of the server in the tenant network
    value: {get_attr: [TenantPort, ip_address]}
  management_ip_address:
    description: IP address of the server in the management network
    value: {get_attr: [ManagementPort, ip_address]}
  config_identifier:
    description: identifier which changes if the node configuration may need re-applying
    value:
      list_join:
        - ','
        - - {get_attr: [SwiftStorageHieraDeploy, deploy_stdout]}
          - {get_attr: [NodeTLSCAData, deploy_stdout]}
          - {get_param: UpdateIdentifier}