Forcing get_node_name to continue searching for a node name if the returned list of nodes doesn't include this one.
There was a race condition where the kubelet was restarting and we were querying the api server for this node.
This commit is contained in:
		| @@ -979,31 +979,30 @@ def get_node_name(): | |||||||
|     while time.time() < deadline: |     while time.time() < deadline: | ||||||
|         try: |         try: | ||||||
|             raw = check_output(cmd) |             raw = check_output(cmd) | ||||||
|             break |  | ||||||
|         except CalledProcessError: |         except CalledProcessError: | ||||||
|             hookenv.log('Failed to get node name for node %s.' |             hookenv.log('Failed to get node name for node %s.' | ||||||
|                         ' Will retry.' % (gethostname())) |                         ' Will retry.' % (gethostname())) | ||||||
|             time.sleep(1) |             time.sleep(1) | ||||||
|     else: |             continue | ||||||
|         msg = 'Failed to get node name for node %s' % gethostname() |  | ||||||
|         raise GetNodeNameFailed(msg) |  | ||||||
|  |  | ||||||
|     result = json.loads(raw.decode('utf-8')) |         result = json.loads(raw.decode('utf-8')) | ||||||
|     if 'items' in result: |         if 'items' in result: | ||||||
|         for node in result['items']: |             for node in result['items']: | ||||||
|             if 'status' not in node: |                 if 'status' not in node: | ||||||
|                 continue |                     continue | ||||||
|             if 'addresses' not in node['status']: |                 if 'addresses' not in node['status']: | ||||||
|                 continue |                     continue | ||||||
|  |  | ||||||
|             # find the hostname |                 # find the hostname | ||||||
|             for address in node['status']['addresses']: |                 for address in node['status']['addresses']: | ||||||
|                 if address['type'] == 'Hostname': |                     if address['type'] == 'Hostname': | ||||||
|                     if address['address'] == gethostname(): |                         if address['address'] == gethostname(): | ||||||
|                         return node['metadata']['name'] |                             return node['metadata']['name'] | ||||||
|  |  | ||||||
|  |                         # if we didn't match, just bail to the next node | ||||||
|  |                         break | ||||||
|  |         time.sleep(1) | ||||||
|  |  | ||||||
|                     # if we didn't match, just bail to the next node |  | ||||||
|                     break |  | ||||||
|     msg = 'Failed to get node name for node %s' % gethostname() |     msg = 'Failed to get node name for node %s' % gethostname() | ||||||
|     raise GetNodeNameFailed(msg) |     raise GetNodeNameFailed(msg) | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Mike Wilson
					Mike Wilson