summaryrefslogtreecommitdiffstats
path: root/network/storage.yaml
blob: 35dae17a35fe989fbc02525712735b3d29a68658 (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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
heat_template_version: 2015-04-30

description: >
  Storage network.

parameters:
  # the defaults here work for static IP assignment (IPAM) only
  StorageNetCidr:
    default: '172.16.1.0/24'
    description: Cidr for the storage network.
    type: string
  StorageNetValueSpecs:
    default: {'provider:physical_network': 'storage', 'provider:network_type': 'flat'}
    description: Value specs for the storage network.
    type: json
  StorageNetAdminStateUp:
    default: false
    description: This admin state of the network.
    type: boolean
  StorageNetEnableDHCP:
    default: false
    description: Whether to enable DHCP on the associated subnet.
    type: boolean
  StorageNetShared:
    default: false
    description: Whether this network is shared across all tenants.
    type: boolean
  StorageNetName:
    default: storage
    description: The name of the storage network.
    type: string
  StorageSubnetName:
    default: storage_subnet
    description: The name of the storage subnet in Neutron.
    type: string
  StorageAllocationPools:
    default: [{'start': '172.16.1.4', 'end': '172.16.1.250'}]
    description: Ip allocation pool range for the storage network.
    type: json

resources:
  StorageNetwork:
    type: OS::Neutron::Net
    properties:
      admin_state_up: {get_param: StorageNetAdminStateUp}
      name: {get_param: StorageNetName}
      shared: {get_param: StorageNetShared}
      value_specs: {get_param: StorageNetValueSpecs}

  StorageSubnet:
    type: OS::Neutron::Subnet
    properties:
      cidr: {get_param: StorageNetCidr}
      enable_dhcp: {get_param: StorageNetEnableDHCP}
      name: {get_param: StorageSubnetName}
      network: {get_resource: StorageNetwork}
      allocation_pools: {get_param: StorageAllocationPools}
      gateway_ip: null

outputs:
  OS::stack_id:
    description: Neutron storage network
    value: {get_resource: StorageNetwork}
hlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */ .highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ .highlight .gr { color: #aa0000 } /* Generic.Error */ .highlight .gh { color: #333333 } /* Generic.Heading */ .highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ .highlight .go { color: #888888 } /* Generic.Output */ .highlight .gp { color: #555555 } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #666666 } /* Generic.Subheading */ .highlight .gt { color: #aa0000 } /* Generic.Traceback */ .highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008800 } /* Keyword.Pseudo */ .highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */ }
heat_template_version: 2015-04-30

description: >
  OpenStack hypervisor node. Can be wrapped in a ResourceGroup for scaling.

parameters:
  AdminPassword:
    default: unset
    description: The password for the keystone admin account, used for monitoring, querying neutron etc.
    type: string
    hidden: true
  CeilometerComputeAgent:
    description: Indicates whether the Compute agent is present and expects nova-compute to be configured accordingly
    type: string
    default: ''
    constraints:
    - allowed_values: ['', Present]
  CeilometerMeteringSecret:
    default: unset
    description: Secret shared by the ceilometer services.
    type: string
    hidden: true
  CeilometerPassword:
    default: unset
    description: The password for the ceilometer service account.
    type: string
    hidden: true
  Debug:
    default: ''
    description: Set to True to enable debugging on all services.
    type: string
  ExtraConfig:
    default: {}
    description: |
      Additional configuration to inject into the cluster. The JSON should have
      the following structure:
        {"FILEKEY":
          {"config":
            [{"section": "SECTIONNAME",
              "values":
                [{"option": "OPTIONNAME",
                  "value": "VALUENAME"
                 }
                ]
             }
            ]
          }
        }
      For instance:
        {"nova":
          {"config":
            [{"section": "default",
              "values":
                [{"option": "force_config_drive",
                  "value": "always"
                 }
                ]
             },
             {"section": "cells",
              "values":
                [{"option": "driver",
                  "value": "nova.cells.rpc_driver.CellsRPCDriver"
                 }
                ]
             }
            ]
          }
        }
    type: json
  Flavor:
    description: Flavor for the nova compute node
    type: string
    constraints:
      - custom_constraint: nova.flavor
  GlanceHost:
    type: string
    default: ''  # Has to be here because of the ignored empty value bug
  GlancePort:
    default: "9292"
    description: Glance port.
    type: string
  GlanceProtocol:
    default: http
    description: Protocol to use when connecting to glance, set to https for SSL.
    type: string
  Image:
    type: string
    default: overcloud-compute
    constraints:
      - custom_constraint: glance.image
  ImageUpdatePolicy:
    default: 'REBUILD_PRESERVE_EPHEMERAL'
    description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
    type: string
  KeyName:
    description: Name of an existing EC2 KeyPair to enable SSH access to the instances
    type: string
    default: default
    constraints:
      - custom_constraint: nova.keypair
  KeystoneHost:
    type: string
    default: ''
  NeutronBridgeMappings:
    description: >
      The OVS logical->physical bridge mappings to use. See the Neutron
      documentation for details. Defaults to mapping br-ex - the external
      bridge on hosts - to a physical name 'datacentre' which can be used
      to create provider networks (and we use this for the default floating
      network) - if changing this either use different post-install network
      scripts or be sure to keep 'datacentre' as a mapping network name.
    type: string
    default: "datacentre:br-ex"
  NeutronEnableTunnelling:
    type: string
    default: "True"
  NeutronFlatNetworks:
    type: string
    default: 'datacentre'
    description: >
      If set, flat networks to configure in neutron plugins.
  NeutronHost:
    type: string
    default: ''  # Has to be here because of the ignored empty value bug
  NeutronNetworkType:
    type: string
    description: The tenant network type for Neutron, either gre or vxlan.
    default: 'gre'
  NeutronNetworkVLANRanges:
    default: 'datacentre'
    description: >
      The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
      Neutron documentation for permitted values. Defaults to permitting any
      VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
    type: string
  NeutronPassword:
    default: unset
    description: The password for the neutron service account, used by neutron agents.
    type: string
    hidden: true
  NeutronPhysicalBridge:
    default: ''
    description: An OVS bridge to create for accessing external networks.
    type: string
  NeutronPublicInterface:
    default: nic1
    description: A port to add to the NeutronPhysicalBridge.
    type: string
  NeutronTunnelTypes:
    type: string
    description: |
        The tunnel types for the Neutron tenant network. To specify multiple
        values, use a comma separated string, like so: 'gre,vxlan'
    default: 'gre'
  NeutronPublicInterfaceRawDevice:
    default: ''
    type: string
  NeutronDVR:
    default: 'False'
    type: string
  NeutronMetadataProxySharedSecret:
    default: 'unset'
    description: Shared secret to prevent spoofing
    type: string
  NeutronMechanismDrivers:
    default: 'openvswitch'
    description: |
        The mechanism drivers for the Neutron tenant network. To specify multiple
        values, use a comma separated string, like so: 'openvswitch,l2_population'
    type: string
  # Not relevant for Computes, should be removed
  NeutronAllowL3AgentFailover:
    default: 'True'
    description: Allow automatic l3-agent failover
    type: string
  # Not relevant for Computes, should be removed
  NeutronL3HA:
    default: 'False'
    description: Whether to enable l3-agent HA
    type: string
  NeutronAgentMode:
    default: 'dvr_snat'
    description: Agent mode for the neutron-l3-agent on the controller hosts
    type: string
  NovaApiHost:
    type: string
    default: ''  # Has to be here because of the ignored empty value bug
  NovaComputeDriver:
    type: string
    default: libvirt.LibvirtDriver
  NovaComputeExtraConfig:
    default: {}
    description: |
      NovaCompute specific configuration to inject into the cluster. Same
      structure as ExtraConfig.
    type: json
  NovaComputeLibvirtType:
    type: string
    default: ''
  NovaEnableRbdBackend:
    default: false
    description: Whether to enable or not the Rbd backend for Nova
    type: boolean
  NovaPassword:
    default: unset
    description: The password for the nova service account, used by nova-api.
    type: string
    hidden: true
  NovaPublicIP:
    type: string
    default: ''  # Has to be here because of the ignored empty value bug
  NtpServer:
    type: string
    default: ''
  RabbitHost:
    type: string
    default: ''  # Has to be here because of the ignored empty value bug
  RabbitPassword:
    default: guest
    description: The password for RabbitMQ
    type: string
    hidden: true
  RabbitUserName:
    default: guest
    description: The username for RabbitMQ
    type: string
  RabbitClientUseSSL:
    default: false
    description: >
        Rabbit client subscriber parameter to specify
        an SSL connection to the RabbitMQ host.
    type: string
  RabbitClientPort:
    default: 5672
    description: Set rabbit subscriber port, change this if using SSL
    type: number
  SnmpdReadonlyUserName:
    default: ro_snmp_user
    description: The user name for SNMPd with readonly rights running on all Overcloud nodes
    type: string
  SnmpdReadonlyUserPassword:
    default: unset
    description: The user password for SNMPd with readonly rights running on all Overcloud nodes
    type: string
    hidden: true


resources:

  NovaCompute:
    type: OS::Nova::Server
    properties:
      image:
        {get_param: Image}
      image_update_policy:
        get_param: ImageUpdatePolicy
      flavor: {get_param: Flavor}
      key_name: {get_param: KeyName}
      networks:
        - network: ctlplane
      user_data_format: SOFTWARE_CONFIG
      user_data: {get_resource: NodeUserData}

  NodeUserData:
    type: OS::TripleO::NodeUserData

  InternalApiPort:
    type: OS::TripleO::Compute::Ports::InternalApiPort
    properties:
      ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}

  StoragePort:
    type: OS::TripleO::Compute::Ports::StoragePort
    properties:
      ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}

  TenantPort:
    type: OS::TripleO::Compute::Ports::TenantPort
    properties:
      ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}

  NetworkConfig:
    type: OS::TripleO::Compute::Net::SoftwareConfig
    properties:
      InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
      StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
      TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}

  NetworkDeployment:
    type: OS::TripleO::SoftwareDeployment
    properties:
      signal_transport: NO_SIGNAL
      config: {get_resource: NetworkConfig}
      server: {get_resource: NovaCompute}
      input_values:
        bridge_name: {get_param: NeutronPhysicalBridge}
        interface_name: {get_param: NeutronPublicInterface}

  NovaComputeConfig:
    type: OS::Heat::StructuredConfig
    properties:
      group: os-apply-config
      config:
        nova:
          compute_driver: { get_input: nova_compute_driver }
          compute_libvirt_type: { get_input: nova_compute_libvirt_type }
          debug: {get_input: debug}
          host: {get_input: nova_api_host}
          public_ip: {get_input: nova_public_ip}
          service-password: {get_input: nova_password}
        ceilometer:
          debug: {get_input: debug}
          metering_secret: {get_input: ceilometer_metering_secret}
          service-password: {get_input: ceilometer_password}
          compute_agent: {get_input: ceilometer_compute_agent}
        snmpd:
          export_MIB: UCD-SNMP-MIB
          readonly_user_name: {get_input: snmpd_readonly_user_name}
          readonly_user_password: {get_input: snmpd_readonly_user_password}
        glance:
          debug: {get_input: debug}
          host: {get_input: glance_host}
          port: {get_input: glance_port}
          protocol: {get_input: glance_protocol}
        keystone:
          debug: {get_input: debug}
          host: {get_input: keystone_host}
        neutron:
          debug: {get_input: debug}
          flat-networks: {get_input: neutron_flat_networks}
          host: {get_input: neutron_host}
          router_distributed: {get_input: neutron_router_distributed}
          agent_mode: {get_input: neutron_agent_mode}
          ovs_db: {get_input: neutron_dsn}
          metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
          mechanism_drivers: {get_input: neutron_mechanism_drivers}
          allow_automatic_l3agent_failover: {get_input: neutron_allow_l3agent_failover}
          l3_ha: {get_input: neutron_l3_ha}
          ovs:
            local_ip: {get_input: neutron_local_ip}
            tenant_network_type: {get_input: neutron_tenant_network_type}
            tunnel_types: {get_input: neutron_tunnel_types}
            network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
            bridge_mappings: {get_input: neutron_bridge_mappings}
            enable_tunneling: {get_input: neutron_enable_tunneling}
            physical_bridge: {get_input: neutron_physical_bridge}
            public_interface: {get_input: neutron_public_interface}
            public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
          service-password: {get_input: neutron_password}
        admin-password: {get_input: admin_password}
        rabbit:
          host: {get_input: rabbit_host}
          username: {get_input: rabbit_username}
          password: {get_input: rabbit_password}
        ntp:
          servers:
              - {server: {get_input: ntp_server}}

  NovaComputeDeployment:
    type: OS::TripleO::SoftwareDeployment
    properties:
      signal_transport: NO_SIGNAL
      config: {get_resource: NovaComputeConfig}
      server: {get_resource: NovaCompute}
      input_values:
        debug: {get_param: Debug}
        nova_compute_driver: {get_param: NovaComputeDriver}
        nova_compute_libvirt_type: {get_param: NovaComputeLibvirtType}
        nova_public_ip: {get_param: NovaPublicIP}
        nova_api_host: {get_param: NovaApiHost}
        nova_password: {get_param: NovaPassword}
        ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
        ceilometer_password: {get_param: CeilometerPassword}
        ceilometer_compute_agent: {get_param: CeilometerComputeAgent}
        snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
        snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
        glance_host: {get_param: GlanceHost}
        glance_port: {get_param: GlancePort}
        glance_protocol: {get_param: GlanceProtocol}
        keystone_host: {get_param: KeystoneHost}
        neutron_flat_networks: {get_param: NeutronFlatNetworks}
        neutron_host: {get_param: NeutronHost}
        neutron_local_ip: {get_attr: [NovaCompute, networks, ctlplane, 0]}
        neutron_tenant_network_type: {get_param: NeutronNetworkType}
        neutron_tunnel_types: {get_param: NeutronTunnelTypes}
        neutron_network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
        neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
        neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
        neutron_physical_bridge: {get_param: NeutronPhysicalBridge}
        neutron_public_interface: {get_param: NeutronPublicInterface}
        neutron_password: {get_param: NeutronPassword}
        neutron_agent_mode: {get_param: NeutronAgentMode}
        neutron_router_distributed: {get_param: NeutronDVR}
        neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
        neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
        neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
        neutron_l3_ha: {get_param: NeutronL3HA}
        neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
        admin_password: {get_param: AdminPassword}
        rabbit_host: {get_param: RabbitHost}
        rabbit_username: {get_param: RabbitUserName}
        rabbit_password: {get_param: RabbitPassword}
        ntp_server: {get_param: NtpServer}

  NovaComputePassthrough:
    type: OS::Heat::StructuredConfig
    properties:
      group: os-apply-config
      config: {get_input: passthrough_config}

  NovaComputePassthroughSpecific:
    type: OS::Heat::StructuredConfig
    properties:
      group: os-apply-config
      config: {get_input: passthrough_config_specific}

  NovaComputePassthroughDeployment:
    depends_on: [NovaComputeDeployment]
    type: OS::Heat::StructuredDeployment
    properties:
      config: {get_resource: NovaComputePassthrough}
      server: {get_resource: NovaCompute}
      signal_transport: NO_SIGNAL
      input_values:
        passthrough_config: {get_param: ExtraConfig}

  NovaComputePassthroughDeploymentSpecific:
    depends_on: [NovaComputePassthroughDeployment]
    type: OS::Heat::StructuredDeployment
    properties:
      config: {get_resource: NovaComputePassthroughSpecific}
      server: {get_resource: NovaCompute}
      signal_transport: NO_SIGNAL
      input_values:
        passthrough_config_specific: {get_param: NovaComputeExtraConfig}

outputs:
  ip_address:
    description: IP address of the server in the ctlplane network
    value: {get_attr: [NovaCompute, networks, ctlplane, 0]}
  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]}
  tenant_ip_address:
    description: IP address of the server in the tenant network
    value: {get_attr: [TenantPort, ip_address]}
  hostname:
    description: Hostname of the server
    value: {get_attr: [NovaCompute, name]}
  hosts_entry:
    description: >
      Server's IP address and hostname in the /etc/hosts format
    value:
      str_replace:
        template: "IP HOST"
        params:
          IP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
          HOST: {get_attr: [NovaCompute, name]}
  nova_server_resource:
    description: Heat resource handle for the Nova compute server
    value:
      {get_resource: NovaCompute}