heat_template_version: 2014-10-16 description: > This is a nested stack that defines a single Mesos master, This stack is included by a ResourceGroup resource in the parent template (mesoscluster.yaml). parameters: name: type: string description: server name server_image: type: string description: glance image used to boot the server master_flavor: type: string description: flavor to use when booting the server ssh_key_name: type: string description: name of ssh key to be provisioned on our server external_network: type: string description: uuid/name of a network to use for floating ip addresses fixed_network: type: string description: Network from which to allocate fixed addresses. fixed_subnet: type: string description: Subnet from which to allocate fixed addresses. secgroup_mesos_id: type: string description: ID of the security group for mesos master. api_pool_id: type: string description: ID of the load balancer pool of Marathon. openstack_ca: type: string hidden: true description: The OpenStack CA certificate to install on the node. nodes_server_group_id: type: string description: ID of the server group for kubernetes cluster nodes. resources: add_ext_ca_certs: type: OS::Heat::SoftwareConfig properties: group: script config: str_replace: template: {get_file: fragments/add-ext-ca-certs.sh} params: "@@CACERTS_CONTENT@@": {get_param: openstack_ca} mesos_master_init: type: OS::Heat::MultipartMime properties: parts: - config: {get_resource: add_ext_ca_certs} ###################################################################### # # Mesos master server. # # do NOT use "_" (underscore) in the Nova server name # it creates a mismatch between the generated Nova name and its hostname # which can lead to weird problems mesos-master: type: OS::Nova::Server properties: name: {get_param: name} image: {get_param: server_image} flavor: {get_param: master_flavor} key_name: {get_param: ssh_key_name} user_data_format: SOFTWARE_CONFIG user_data: {get_resource: mesos_master_init} networks: - port: {get_resource: mesos_master_eth0} scheduler_hints: { group: { get_param: nodes_server_group_id }} mesos_master_eth0: type: OS::Neutron::Port properties: network: {get_param: fixed_network} security_groups: - {get_param: secgroup_mesos_id} fixed_ips: - subnet: {get_param: fixed_subnet} replacement_policy: AUTO mesos_master_floating: type: OS::Neutron::FloatingIP properties: floating_network: {get_param: external_network} port_id: {get_resource: mesos_master_eth0} api_pool_member: type: Magnum::Optional::Neutron::LBaaS::PoolMember properties: pool: {get_param: api_pool_id} address: {get_attr: [mesos_master_eth0, fixed_ips, 0, ip_address]} subnet: { get_param: fixed_subnet } protocol_port: 8080 outputs: mesos_master_ip: value: {get_attr: [mesos_master_eth0, fixed_ips, 0, ip_address]} description: > This is the "private" address of the Mesos master node. mesos_master_external_ip: value: {get_attr: [mesos_master_floating, floating_ip_address]} description: > This is the "public" address of the Mesos master node. mesos_server_id: value: {get_resource: mesos-master} description: > This is the logical id of the Mesos master node.