コード例 #1
0
    def get_existing_machines(self, nodearray_definitions):
        '''
            Queries pbsnodes and CycleCloud to get a sane set of cyclecloud.machine.Machine instances that represent the current state of the cluster.
        '''
        pbsnodes = self.driver.pbsnodes().get(None)
        existing_machines = []

        booting_instance_ids = autoscale_util.nodes_by_instance_id(
            self.clusters_api, nodearray_definitions)

        instance_ids_to_shutdown = Record()

        nodes_by_instance_id = Record()

        for pbsnode in pbsnodes.values():
            inst = self.process_pbsnode(pbsnode, instance_ids_to_shutdown,
                                        nodearray_definitions)
            if not inst:
                continue
            existing_machines.append(inst)

            # we found the pbsnode that matches the cyclecloud node, so let's remove the duplicate
            instance_id = inst.get_attr("instance_id", "")
            if instance_id in booting_instance_ids:
                booting_instance_ids.pop(instance_id)
            nodes_by_instance_id[instance_id] = pbsnode

        for instance_id, node in list(booting_instance_ids.iteritems()):
            nodearray_name = node["Template"]
            machinetype_name = node["MachineType"]

            try:
                machinetype = nodearray_definitions.get_machinetype(
                    nodearray_name, machinetype_name,
                    node.get("PlacementGroupId"))
            except KeyError as e:
                raise ValueError(
                    "machine is %s, key is %s, rest is %s" %
                    (nodearray_name, str(e), nodearray_definitions))

            inst = machine.new_machine_instance(
                machinetype,
                hostname=node.get("hostname"),
                instance_id=node.get("InstanceId"),
                group_id=node.get("placementGroupId"))
            existing_machines.append(inst)
            nodes_by_instance_id[instance_id] = node

        return pbsnodes, existing_machines, nodes_by_instance_id, instance_ids_to_shutdown
コード例 #2
0
 def get_existing_machines(self, nodearray_definitions):
     '''
         Queries pbsnodes and CycleCloud to get a sane set of cyclecloud.machine.Machine instances that represent the current state of the cluster.
     '''
     pbsnodes = self.driver.pbsnodes().get(None)
     existing_machines = []
     
     booting_instance_ids = autoscale_util.nodes_by_instance_id(self.clusters_api, nodearray_definitions)
     
     instance_ids_to_shutdown = Record()
     
     nodes_by_instance_id = Record()
     
     for pbsnode in pbsnodes.values():
         instance_id = pbsnode["resources_available"].get("instance_id", "")
         # use this opportunity to set some things that can change during the runtime (keepalive) or are not always set
         # by previous versions (machinetype/nodearray)
         if instance_id and booting_instance_ids.get(instance_id):
             node = booting_instance_ids.get(instance_id)
             pbsnode["resources_available"]["keep_alive"] = node.get("KeepAlive", False)
             pbsnode["resources_available"]["machinetype"] = pbsnode["resources_available"].get("machinetype") or node.get("MachineType")
             pbsnode["resources_available"]["nodearray"] = pbsnode["resources_available"].get("nodearray") or node.get("Template")
             
         inst = self.process_pbsnode(pbsnode, instance_ids_to_shutdown, nodearray_definitions)
         if not inst:
             continue
         existing_machines.append(inst)
         
         # we found the pbsnode that matches the cyclecloud node, so let's remove the duplicate 
         instance_id = inst.get_attr("instance_id", "")
         if instance_id in booting_instance_ids:
             booting_instance_ids.pop(instance_id)
         nodes_by_instance_id[instance_id] = pbsnode
     
     for instance_id, node in list(booting_instance_ids.items()):
         nodearray_name = node["Template"]
         machinetype_name = node["MachineType"]
         
         try:
             machinetype = nodearray_definitions.get_machinetype(nodearray_name, machinetype_name, node.get("PlacementGroupId"))
         except KeyError as e:
             raise ValueError("machine is %s, key is %s, rest is %s" % (nodearray_name, str(e), nodearray_definitions))
         
         inst = machine.new_machine_instance(machinetype, hostname=node.get("hostname"), instance_id=node.get("InstanceId"), group_id=node.get("placementGroupId"), keep_alive=node.get("KeepAlive", False))
         existing_machines.append(inst)
         nodes_by_instance_id[instance_id] = node
     
     return pbsnodes, existing_machines, nodes_by_instance_id, instance_ids_to_shutdown