Locally Tested
This commit is contained in:
parent
c48c943455
commit
a5e24400ce
|
@ -0,0 +1,5 @@
|
|||
[defaults]
|
||||
roles_path = /opt/ansible/roles
|
||||
library = /usr/share/ansible/openshift
|
||||
remote_tmp = /tmp/ansible
|
||||
host_key_checking = False
|
|
@ -1,10 +1,19 @@
|
|||
FROM quay.io/operator-framework/ansible-operator:v0.17.0
|
||||
|
||||
RUN mkdir ${HOME}/.ssh
|
||||
COPY build/id_rsa ${HOME}/.ssh/
|
||||
|
||||
USER root
|
||||
RUN dnf install openssh-clients -y
|
||||
RUN chown ansible-operator:root ${HOME}/.ssh/id_rsa
|
||||
USER ansible-operator
|
||||
|
||||
COPY requirements.yml ${HOME}/requirements.yml
|
||||
RUN ansible-galaxy collection install -r ${HOME}/requirements.yml \
|
||||
&& chmod -R ug+rwx ${HOME}/.ansible
|
||||
|
||||
COPY watches.yaml ${HOME}/watches.yaml
|
||||
COPY ansible.cfg /etc/ansible/ansible.cfg
|
||||
|
||||
COPY roles/ ${HOME}/roles/
|
||||
COPY playbook.yaml ${HOME}/
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEowIBAAKCAQEA07lBYNQ41IEUF7hnxndAY0Xf6/Dfghqgqvrufc9RmuVg4+1e
|
||||
Ab7KD5fQacBn5jI1e0muoONUKPOw2ig3vTrIAI4SeaiqIwGGDUPqE8HJWuoRCu9z
|
||||
fC9EzbG8rxgohgjqLCWhKm0LJpaOcmrAecEas9Qq74VMECDPgMYTgtZ7VHzCjnBe
|
||||
LSsivKcc9G+xR7kvSOhg1TOZUMhuzuZ+zFAcWtRzrqPLEns+kF3abpa+L/3NvsD6
|
||||
UKpY+qJr6aRNsw/iwqtW4Xn2O2dbqJ3/ROhxdvl0nk2yyqVtJej5ZrbXDgSBnVWO
|
||||
0TgByl/sgO0kFPQ/0eclB+j9KMd8Wl9BGb/NMwIDAQABAoIBAC0eV25ZC1tNvohn
|
||||
hcXnd9Mv+s3+4MKLBh4pp1UsLwnBQ+qOlO/uRoUYJxPCKuIFZRxG0W37w92OQOvc
|
||||
kjRDKIflvs4qQUeAdZ6yEFnxfAVhyAv6hzO5pwHmlH0Duu8FS1HpGvU9k5i/kM+V
|
||||
LDtGCXi1CAlO8KynMVER5OqG5nVUVZ7Et1hAveoM4ayloG6RjQ9w+vpWuqsvpVwx
|
||||
jePNSJ3qCbjtxtAHlJSrXIiKbgqgkoffK85G01wQvRWTk5FnDFLH8EsPeqKhvTn6
|
||||
AreFSE5kN/HKigGCKlz4N09YJyX+m1uy6qXT8wZlQkyQwLAORxnqY414ShU+uCoP
|
||||
ldxgSVECgYEA8XfL56wsEZBxwktYSNzFWmwRHrQBGVpJArahdkSz4ZuJAY8q/Ddi
|
||||
H2KlYr4aQ5bkdrR7mDn+MpRomZh2GkOic/XdxZvxi5nXM2W7+B1wqqpl+Il1+6CJ
|
||||
++2nyms75/ot8U+pUoGz3SIOfwAOc6VKwWsQYgpmqSrgck0EIXDieTcCgYEA4Hcz
|
||||
LhTrc18dfkQ28+hCG77s1/k0wRwtzlkILOihBjo97LwFcTqEor+X9t3H6ls91STa
|
||||
9rhexDTORn0Dp1/V4ixyAbDg/mhK6IOQ4rjmYmRgoWbOexO9vZALujoRyFyA78xd
|
||||
xp3sBfdjtWXU84KPqeCiYjWQ2pS1fDLT2RbFGeUCgYA9Ed5JLptKqeyLhkDC1Ms5
|
||||
DkHaMQ5iGhqDDCuT3NZdxdeFxG7LsToo0+seKRQ9aelIOGdV3bzzj+NQjWW5SMfK
|
||||
ajF3q/QQKY1q210J6HA5SbVWgXWMeVLMm5OnNy3EgtqhwFMDofgagmWGKz58cx6Q
|
||||
AoL3OMg0Grr/TYkw5/rvSwKBgCBndN8BLCBiqcpRpLE/ZVPGE0D2e/Qo0kAIwFJj
|
||||
XuOcQtZLKmn3LbClAhYkXDjr5RhBEs8tPJkMmn64i299OU5GZkryMvjnK3E3lRH1
|
||||
6WRo4z5JriM8bVbRVbATs/99wytbEGqc37bYyO8l/UEOJxk6EZcl7nxvnWeJmuWr
|
||||
ENc1AoGBAKxdXkratZYAElMdmJu243VxGNbpE0ABWEEtGMoWDa4G9Z3GZPZK27aL
|
||||
wTlh0EBn6JxLdruT4nhfpo4/soWOirMEh6Sh1hH4keOuss/Jd/1EYUHY5az7Eiy+
|
||||
umjY6NBiDNBE4Od0csJYsUeI3wYIp8ijT58C3JCjlXeGprVCS/fE
|
||||
-----END RSA PRIVATE KEY-----
|
|
@ -0,0 +1 @@
|
|||
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDTuUFg1DjUgRQXuGfGd0BjRd/r8N+CGqCq+u59z1Ga5WDj7V4BvsoPl9BpwGfmMjV7Sa6g41Qo87DaKDe9OsgAjhJ5qKojAYYNQ+oTwcla6hEK73N8L0TNsbyvGCiGCOosJaEqbQsmlo5yasB5wRqz1CrvhUwQIM+AxhOC1ntUfMKOcF4tKyK8pxz0b7FHuS9I6GDVM5lQyG7O5n7MUBxa1HOuo8sSez6QXdpulr4v/c2+wPpQqlj6omvppE2zD+LCq1bhefY7Z1uonf9E6HF2+XSeTbLKpW0l6PlmttcOBIGdVY7ROAHKX+yA7SQU9D/R5yUH6P0ox3xaX0EZv80z sirisha@dumbledore
|
|
@ -10,14 +10,17 @@ import yaml
|
|||
|
||||
import json
|
||||
|
||||
interested_labels_annotations = ["beta.kubernetes.io/arch", "beta.kubernetes.io/os", "kubernetes.io/arch", "kubernetes.io/hostname", "kubernetes.io/os", "kubernetes.io/role", "topology.kubernetes.io/region", "topology.kubernetes.io/zone", "projectcalico.org/IPv4Address", "projectcalico.org/IPv4IPIPTunnelAddr", "Kernel Version", "OS Image", "Operating System", "Container Runtime Version", "Kubelet Version", "Operating System"]
|
||||
|
||||
class KubeInventory(object):
|
||||
def __init__(self):
|
||||
self.inventory = {}
|
||||
self.read_cli_args()
|
||||
|
||||
self.api_instance = kubernetes.client.CoreV1Api(kubernetes.config.load_incluster_config())
|
||||
if self.args.list:
|
||||
self.inventory = self.kube_inventory()
|
||||
# self.inventory = self.kube_inventory()
|
||||
self.kube_inventory()
|
||||
elif self.args.host:
|
||||
# Not implemented, since we return _meta info `--list`.
|
||||
self.inventory = self.empty_inventory()
|
||||
|
@ -30,22 +33,28 @@ class KubeInventory(object):
|
|||
# Kube driven inventory
|
||||
def kube_inventory(self):
|
||||
self.inventory = {"group": {"hosts": [], "vars": {}}, "_meta": {"hostvars": {}}}
|
||||
self.inventory["group"]["vars"]["ansible_ssh_user"] = "deployer"
|
||||
self.inventory["group"]["vars"]["ansible_ssh_user"] = "sirisha"
|
||||
self.inventory["group"]["vars"][
|
||||
"ansible_ssh_private_key_file"
|
||||
] = "~/.ssh/id_rsa.pem"
|
||||
] = "~/.ssh/id_rsa"
|
||||
|
||||
api_instance = kubernetes.client.CoreV1Api(kubernetes.config.load_incluster_config())
|
||||
#api_instance = kubernetes.client.CoreV1Api(kubernetes.config.load_kube_config())
|
||||
|
||||
#TODO: read from env var
|
||||
#label_selector = "kubernetes.io/hostname=kind-control-plane"
|
||||
label_selector = "node-role.kubernetes.io/master="
|
||||
self.get_nodes()
|
||||
return
|
||||
|
||||
def get_nodes(self):
|
||||
#label_selector = "kubernetes.io/role="+role
|
||||
|
||||
try:
|
||||
nodes = api_instance.list_node(label_selector=label_selector).to_dict()[
|
||||
nodes = self.api_instance.list_node().to_dict()[
|
||||
"items"
|
||||
]
|
||||
#nodes = self.api_instance.list_node(label_selector=label_selector).to_dict()[
|
||||
# "items"
|
||||
#]
|
||||
except ApiException as e:
|
||||
print("Exception when calling CoreV1Api->list_node: %s\n" % e)
|
||||
|
||||
|
@ -58,17 +67,30 @@ class KubeInventory(object):
|
|||
else:
|
||||
node_internalip = None
|
||||
self.inventory["group"]["hosts"].append(node_internalip)
|
||||
|
||||
self.inventory["_meta"]["hostvars"][node_internalip] = {}
|
||||
for key, value in node["metadata"]["annotations"].items():
|
||||
self.inventory["_meta"]["hostvars"][node_internalip][key] = value
|
||||
for key, value in node["metadata"]["labels"].items():
|
||||
self.inventory["_meta"]["hostvars"][node_internalip][key] = value
|
||||
if key in interested_labels_annotations:
|
||||
if value not in self.inventory.keys():
|
||||
self.inventory[value] = {"hosts": [], "vars": {}}
|
||||
if node_internalip not in self.inventory[value]["hosts"]:
|
||||
self.inventory[value]["hosts"].append(node_internalip)
|
||||
for key, value in node['status']['node_info'].items():
|
||||
self.inventory["_meta"]["hostvars"][node_internalip][key] = value
|
||||
if key in interested_labels_annotations:
|
||||
if value not in self.inventory.keys():
|
||||
self.inventory[value] = {"hosts": [], "vars": {}}
|
||||
if node_internalip not in self.inventory[value]["hosts"]:
|
||||
self.inventory[value]["hosts"].append(node_internalip)
|
||||
self.inventory["_meta"]["hostvars"][node_internalip][
|
||||
"kube_node_name"
|
||||
] = node["metadata"]["name"]
|
||||
self.inventory["_meta"]["hostvars"][node_internalip]["architecture"] = node['status']['node_info']['architecture']
|
||||
self.inventory["_meta"]["hostvars"][node_internalip]["kernel_version"] = node['status']['node_info']['kernel_version']
|
||||
return
|
||||
# return self.inventory
|
||||
|
||||
|
||||
return self.inventory
|
||||
|
||||
# Empty inventory.
|
||||
def empty_inventory(self):
|
||||
return {"_meta": {"hostvars": {}}}
|
||||
|
||||
|
|
Loading…
Reference in New Issue