# Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. Namespaces: =: io.murano.apps.docker.kubernetes std: io.murano res: io.murano.resources sys: io.murano.system Name: KubernetesMinionNode Extends: KubernetesNode Properties: exposeCAdvisor: Contract: $.bool().notNull() Default: false Methods: initialize: Body: - $._environment: $.find(std:Environment).require() - $._cluster: $.find(KubernetesCluster).require() deployInstance: Body: - If: not $.getAttr(instanceDeployed, false) Then: - $._environment.reporter.report($this, 'Creating Kubernetes Node {0}'.format($.instance.name)) - $.super($.deployInstance()) - $.setAttr(instanceDeployed, true) setupEtcd: Body: - If: not $.getAttr(etcdConfigured, false) Then: - $._environment.reporter.report($, 'Configuring etcd node {0}'.format($.instance.name)) - $resources: new(sys:Resources) - $template: $resources.yaml('EtcdAddMember.template').bind(dict( name => $.instance.name, ip => $.getIp() )) - $clusterConfig: $._cluster.masterNode.instance.agent.call($template, $resources) - $template: $resources.yaml('MemberEtcdSetup.template').bind(dict( name => $.instance.name, ip => $.getIp(), clusterConfig => $clusterConfig )) - $.instance.agent.call($template, $resources) - $.setAttr(etcdConfigured, true) setupNode: Body: - If: not $.getAttr(nodeConfigured, false) Then: - $._environment.reporter.report($this, 'Setup Flannel network on {0}'.format($.instance.name)) - $resources: new(sys:Resources) - $template: $resources.yaml('SetupFlannelNode.template') - $.instance.agent.call($template, $resources) - $securityGroupIngress: - ToPort: 4194 FromPort: 4194 IpProtocol: tcp External: $.exposeCAdvisor - $._environment.securityGroupManager.addGroupIngress($securityGroupIngress) - $._environment.reporter.report($, 'Setup Kubernetes Minion on {0}'.format($.instance.name)) - $template: $resources.yaml('KubeMinionSetup.template').bind(dict( name => $.instance.name, ip => $.getIp(), masterIp => $._cluster.masterNode.getIp(), dockerRegistry => $._cluster.dockerRegistry )) - $.instance.agent.call($template, $resources) - $._registerNode() - $.setAttr(nodeConfigured, true) - $msg: 'cAdvisor monitoring for Node {0} is now available at http://{1}:4194' - $ip: $.getIp() - If: $.exposeCAdvisor Then: - $ip: coalesce($.instance.floatingIpAddress, $.getIp()) - $._environment.reporter.report($this, $msg.format($.instance.name, $ip)) _registerNode: Body: - $nodeDefinition: kind: Node apiVersion: v1beta3 metadata: name: $.getIp() labels: name: $.instance.name spec: externalID: $.id() status: capacity: cpu: 200 memory: 4145438720 - $resources: new(sys:Resources) - $template: $resources.yaml('KubeRegisterNode.template').bind(dict( nodeDefinition => $nodeDefinition )) - $._cluster.masterNode.instance.agent.call($template, $resources) removeFromCluster: Body: - If: $.getAttr(nodeConfigured, false) Then: - $._environment.reporter.report($this, 'Deleting Kubernetes Minion') - $resources: new(sys:Resources) - $template: $resources.yaml('RemoveMinion.template').bind(dict( nodeId => $.getIp() )) - $._cluster.masterNode.instance.agent.call($template, $resources) - $._environment.reporter.report($this, 'Node {0} deleted'.format($.instance.name)) - $.setAttr(nodeConfigured, false)