[re2o_lookup] Adapt get_role from bcfg2/ip.py
							parent
							
								
									2dbe3c50b9
								
							
						
					
					
						commit
						a44eb7ea54
					
				| 
						 | 
					@ -12,6 +12,7 @@ import datetime
 | 
				
			||||||
import requests
 | 
					import requests
 | 
				
			||||||
import stat
 | 
					import stat
 | 
				
			||||||
import json
 | 
					import json
 | 
				
			||||||
 | 
					import collections
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from ansible.module_utils._text import to_native
 | 
					from ansible.module_utils._text import to_native
 | 
				
			||||||
from ansible.plugins.lookup import LookupBase
 | 
					from ansible.plugins.lookup import LookupBase
 | 
				
			||||||
| 
						 | 
					@ -309,6 +310,10 @@ class LookupModule(LookupBase):
 | 
				
			||||||
       - dnszones: Queries the re2o API and returns the list of all dns zones
 | 
					       - dnszones: Queries the re2o API and returns the list of all dns zones
 | 
				
			||||||
                   nicely formatted to be rendered in a template.
 | 
					                   nicely formatted to be rendered in a template.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					       - get_role, role_name: Works in pair. Fails if role_name not provided.
 | 
				
			||||||
 | 
					                              Queries the re2o API and returns the list of
 | 
				
			||||||
 | 
					                              all machines whose role_type is role_name.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    If a term is not in the previous list, make a raw query to the API
 | 
					    If a term is not in the previous list, make a raw query to the API
 | 
				
			||||||
    with endpoint term.
 | 
					    with endpoint term.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -361,10 +366,25 @@ class LookupModule(LookupBase):
 | 
				
			||||||
                            api_password, use_tls=True)
 | 
					                            api_password, use_tls=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        res = []
 | 
					        res = []
 | 
				
			||||||
        for term in terms:
 | 
					        dterms = collections.deque(terms)
 | 
				
			||||||
 | 
					        machines_roles = None # TODO : Cache this.
 | 
				
			||||||
 | 
					        display.vvv("Lookup terms are {}".format(terms))
 | 
				
			||||||
 | 
					        while dterms:
 | 
				
			||||||
 | 
					            term = dterms.popleft()
 | 
				
			||||||
            display.v("\nLookup for {} \n".format(term))
 | 
					            display.v("\nLookup for {} \n".format(term))
 | 
				
			||||||
            if term == 'dnszones':
 | 
					            if term == 'dnszones':
 | 
				
			||||||
                res.append(self._getzones(api_client))
 | 
					                res.append(self._getzones(api_client))
 | 
				
			||||||
 | 
					            elif term == 'get_role':
 | 
				
			||||||
 | 
					                try:
 | 
				
			||||||
 | 
					                    role_name = dterms.popleft()
 | 
				
			||||||
 | 
					                    roles, machines_roles = self._get_role(api_client,
 | 
				
			||||||
 | 
					                                                           role_name,
 | 
				
			||||||
 | 
					                                                           machines_roles,
 | 
				
			||||||
 | 
					                                                           )
 | 
				
			||||||
 | 
					                    res.append(roles)
 | 
				
			||||||
 | 
					                except IndexError:
 | 
				
			||||||
 | 
					                    display.v("Error in re2oapi : No role_name provided")
 | 
				
			||||||
 | 
					                    raise AnsibleError("role_name not found in arguments.")
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                try:
 | 
					                try:
 | 
				
			||||||
                    res.append(self._rawquery(api_client, term))
 | 
					                    res.append(self._rawquery(api_client, term))
 | 
				
			||||||
| 
						 | 
					@ -384,3 +404,9 @@ class LookupModule(LookupBase):
 | 
				
			||||||
    def _rawquery(self, api_client, endpoint):
 | 
					    def _rawquery(self, api_client, endpoint):
 | 
				
			||||||
        display.v("Make a raw query to endpoint {}".format(endpoint))
 | 
					        display.v("Make a raw query to endpoint {}".format(endpoint))
 | 
				
			||||||
        return api_client.list(endpoint)
 | 
					        return api_client.list(endpoint)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def _get_role(self, api_client, role_name, machines_roles):
 | 
				
			||||||
 | 
					        if machines_roles is None:
 | 
				
			||||||
 | 
					            machines_roles = api_client.list("machines/role")
 | 
				
			||||||
 | 
					        return list(filter(lambda machine: machine["role_type"] == role_name,
 | 
				
			||||||
 | 
					                           machines_roles)), machines_roles
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue