heat_template_version: 2013-05-23 description: > This is a nested stack that defines a single Kubernetes minion, based on a vanilla Fedora 20 cloud image. This stack is included by a ResourceGroup resource in the parent template (kubecluster.yaml). parameters: server_image: type: string default: centos-7-atomic-20150120 description: glance image used to boot the server server_flavor: type: string default: m1.small description: flavor to use when booting the server ssh_key_name: type: string description: name of ssh key to be provisioned on our server default: lars external_network_id: type: string description: uuid of a network to use for floating ip addresses kube_allow_priv: type: string description: > whether or not kubernetes should permit privileged containers. default: "false" constraints: - allowed_values: ["true", "false"] # The following are all generated in the parent template. kube_master_ip: type: string description: IP address of the Kubernetes master server. fixed_network: type: string description: Network from which to allocate fixed addresses. resources: node_wait_handle: type: "AWS::CloudFormation::WaitConditionHandle" node_wait_condition: type: "AWS::CloudFormation::WaitCondition" depends_on: - kube_node properties: Handle: get_resource: node_wait_handle Timeout: "6000" ###################################################################### # # software configs. these are components that are combined into # a multipart MIME user-data archive. # write_heat_params: type: "OS::Heat::SoftwareConfig" properties: group: ungrouped config: str_replace: template: {get_file: fragments/write-heat-params.yaml} params: "$KUBE_ALLOW_PRIV": {get_param: kube_allow_priv} "$KUBE_MASTER_IP": {get_param: kube_master_ip} "$WAIT_HANDLE": {get_resource: node_wait_handle} add_to_docker_group: type: "OS::Heat::SoftwareConfig" properties: group: ungrouped config: {get_file: fragments/add-to-docker-group.sh} configure_kubernetes_minion: type: "OS::Heat::SoftwareConfig" properties: group: ungrouped config: {get_file: fragments/configure-kubernetes-minion.sh} kube_user: type: "OS::Heat::SoftwareConfig" properties: group: ungrouped config: {get_file: fragments/kube-user.yaml} kube_examples: type: "OS::Heat::SoftwareConfig" properties: group: ungrouped config: {get_file: fragments/kube-examples.yaml} docker_service: type: "OS::Heat::SoftwareConfig" properties: group: ungrouped config: {get_file: fragments/docker.service.yaml} enable_services: type: "OS::Heat::SoftwareConfig" properties: group: ungrouped config: {get_file: fragments/enable-services-minion.sh} cfn_signal: type: "OS::Heat::SoftwareConfig" properties: group: ungrouped config: {get_file: fragments/cfn-signal.sh} disable_selinux: type: "OS::Heat::SoftwareConfig" properties: group: ungrouped config: {get_file: fragments/disable-selinux.sh} kube_node_init: type: "OS::Heat::MultipartMime" properties: parts: - config: {get_resource: disable_selinux} - config: {get_resource: write_heat_params} - config: {get_resource: kube_user} - config: {get_resource: kube_examples} - config: {get_resource: add_to_docker_group} - config: {get_resource: configure_kubernetes_minion} - config: {get_resource: docker_service} - config: {get_resource: enable_services} - config: {get_resource: cfn_signal} kube_node: type: "OS::Nova::Server" properties: image: get_param: server_image flavor: get_param: server_flavor key_name: get_param: ssh_key_name user_data_format: RAW user_data: {get_resource: kube_node_init} networks: - network: {get_param: fixed_network} kube_node_floating: type: "OS::Neutron::FloatingIP" properties: floating_network_id: get_param: external_network_id port_id: get_attr: [kube_node, addresses, {get_param: fixed_network}, 0, port] outputs: kube_node_ip: value: {get_attr: [kube_node, networks, private, 0]} kube_node_external_ip: value: {get_attr: [kube_node_floating, floating_ip_address]}