Modification for kargo to generate dynamic inventory 01/43601/7
authorhu xinhui <xinhui_hu@foxmail.com>
Fri, 29 Sep 2017 09:06:33 +0000 (17:06 +0800)
committerhu xinhui <xinhui_hu@foxmail.com>
Sat, 30 Sep 2017 07:54:28 +0000 (15:54 +0800)
JIRA: -

There is some hardcode for kargo inventory.This patch is to  generate dynamic inventory for kargo

Change-Id: If4a7c5f973e520e4ca24c3c9e0bfa97725a5a44c
Signed-off-by: hu xinhui <xinhui_hu@foxmail.com>
deploy/adapters/ansible/kubernetes/roles/kargo/files/generate_inventories.py [changed mode: 0644->0755]
deploy/adapters/ansible/kubernetes/roles/kargo/tasks/main.yml
deploy/compass_conf/flavor/kubernetes.conf [changed mode: 0644->0755]
deploy/compass_conf/flavor_mapping/kubernetes.conf [changed mode: 0644->0755]
deploy/compass_conf/flavor_metadata/ansible-kubernetes.conf [changed mode: 0644->0755]
deploy/compass_conf/package_installer/ansible-kubernetes.conf [changed mode: 0644->0755]
deploy/compass_conf/role/kubernetes_ansible.conf [changed mode: 0644->0755]
deploy/compass_conf/templates/ansible_installer/kubernetes/hosts/ansible-kubernetes.tmpl
deploy/compass_conf/templates/ansible_installer/kubernetes/vars/ansible-kubernetes.tmpl
deploy/conf/vm_environment/k8-nosdn-nofeature-ha.yml

old mode 100644 (file)
new mode 100755 (executable)
index 62f29d8..2ffb4ca
@@ -1,26 +1,32 @@
 import yaml\r
 import sys\r
+import os\r
 from jinja2 import Environment\r
+try:\r
+    import json\r
+except ImportError:\r
+    import simplejson as json\r
 \r
 INVENTORY_TEMPLATE = """\r
 [all]\r
-{% for host, ip in hosts.iteritems() %}\r
-{{ host }} ansible_ssh_host={{ ip }} ansible_ssh_pass=root  ansible_user=root\r
+{% for host, vales in hostvars.iteritems() %}\r
+{{ host }} ansible_ssh_host={{ vales['ansible_ssh_host'] }} \\r
+ansible_ssh_pass=root  ansible_user=root\r
 {% endfor %}\r
 [kube-master]\r
-host1\r
-host2\r
+{% for host in kube_master %}\r
+{{ host }}\r
+{% endfor %}\r
 \r
 [etcd]\r
-host1\r
-host2\r
-host3\r
+{% for host in etcd %}\r
+{{ host }}\r
+{% endfor %}\r
 \r
 [kube-node]\r
-host2\r
-host3\r
-host4\r
-host5\r
+{% for host in kube_node %}\r
+{{ host }}\r
+{% endfor %}\r
 \r
 [k8s-cluster:children]\r
 kube-node\r
@@ -31,27 +37,50 @@ kube-master
 """\r
 \r
 \r
-def create_inventory_file(inventories_path, hosts):\r
-    content = Environment().from_string(INVENTORY_TEMPLATE).render(hosts=hosts)\r
+def _byteify(data, ignore_dicts=False):\r
+\r
+    if isinstance(data, unicode):\r
+        return data.encode('utf-8')\r
+    if isinstance(data, list):\r
+        return [_byteify(item, ignore_dicts=True) for item in data]\r
+    if isinstance(data, dict) and not ignore_dicts:\r
+        return {\r
+            _byteify(key, ignore_dicts=True):\r
+            _byteify(value, ignore_dicts=True)\r
+            for key, value in data.iteritems()\r
+        }\r
+    return data\r
+\r
+\r
+def load_inventory(inventory):\r
+    if not os.path.exists(inventory):\r
+        raise RuntimeError('file: %s not exist' % inventory)\r
+    with open(inventory, 'r') as fd:\r
+        return json.load(fd, object_hook=_byteify)\r
+\r
+\r
+def create_inventory_file(inventories_path,\r
+                          hostvars, kube_master, etcd, kube_node):\r
+    content = Environment().from_string(INVENTORY_TEMPLATE).render(\r
+              hostvars=hostvars, kube_master=kube_master,\r
+              etcd=etcd, kube_node=kube_node)\r
     with open(inventories_path, 'w+') as f:\r
         f.write(content)\r
 \r
 \r
-def fetch_all_sorted_external_ip(ip_cfg):\r
-    hosts = {}\r
-    for host, settings in ip_cfg.iteritems():\r
-        external = settings["external"]["ip"]\r
-        hosts[host] = external\r
-    return hosts\r
-\r
+def main(inventories_path, local_inventory):\r
+    inventory_data = load_inventory(local_inventory)\r
+    hostvars = inventory_data['_meta']['hostvars']\r
+    kube_node = inventory_data['kube_node']['hosts']\r
+    kube_master = inventory_data['kube_master']['hosts']\r
+    etcd = inventory_data['etcd']['hosts']\r
 \r
-def main(inventories_path, ip_cfg):\r
-    hosts = fetch_all_sorted_external_ip(ip_cfg)\r
-    create_inventory_file(inventories_path, hosts)\r
+    create_inventory_file(inventories_path,\r
+                          hostvars, kube_master, etcd, kube_node)\r
 \r
 \r
 if __name__ == "__main__":\r
     path = yaml.load(sys.argv[1])\r
-    ipv_cfg = yaml.load(sys.argv[2])\r
+    local_inventory = yaml.load(sys.argv[2])\r
 \r
-    main(path, ipv_cfg)\r
+    main(path, local_inventory)\r
index 4e90260..d3dcb87 100644 (file)
   tags:
     - ansible
 
+- name: copy inventoriy.json file
+  copy:
+    src: /var/ansible/run/kubernetes-opnfv2/inventories/inventory.json
+    dest: /tmp/inventory.json
+  tags:
+    - ansible
+
 - name: generate kargo inventories
   shell: >
     python /tmp/generate_inventories.py \
            "/opt/kargo_k8s/inventory/inventory.cfg" \
-           "{{ ip_settings | to_json }}"
+           "/tmp/inventory.json"
   tags:
     - ansible
 
old mode 100644 (file)
new mode 100755 (executable)
index 96b5f95..35c4315
@@ -4,7 +4,7 @@ FLAVORS = [{
     'display_name': 'ansible-kubernetes',
     'template': 'ansible-kubernetes.tmpl',
     'roles': [
-        'controller', 'compute', 'ha', 'odl', 'onos', 'opencontrail', 'ceph', 'ceph-adm', 'ceph-mon', 'ceph-osd', 'sec-patch', 'ceph-osd-node'
+        'kube_master', 'etcd', 'kube_node'
     ],
 }]
 
old mode 100644 (file)
new mode 100755 (executable)
index c706ccb..32590c8
@@ -7,7 +7,7 @@ SETTINGS = {
     'playbook_file': 'site.yml',
     'inventory_file': 'inventory.py',
     'inventory_json_file': 'inventory.json',
-    'inventory_group': ['controller', 'compute', 'ha', 'odl', 'onos', 'opencontrail', 'ceph_adm', 'ceph_mon', 'ceph_osd', 'moon'],
+    'inventory_group': ['kube_master', 'etcd', 'kube_node'],
     'group_variable': 'all',
     'etc_hosts_path': 'roles/pre-k8s/templates/hosts',
     'runner_dirs': ['roles','kubernetes/roles']
old mode 100644 (file)
new mode 100755 (executable)
index 89c03d9..ae096f4
 ADAPTER_NAME = 'kubernetes'
 ROLES = [{
-    'role': 'allinone-compute',
-    'display_name': 'all in one',
-    'description': 'All in One'
-}, {
-    'role': 'controller',
-    'display_name': 'controller node',
-    'description': 'Controller Node'
-}, {
-    'role': 'compute',
-    'display_name': 'compute node',
-    'description': 'Compute Node'
-}, {
-    'role': 'storage',
-    'display_name': 'storage node',
-    'description': 'Storage Node'
-}, {
-    'role': 'network',
-    'display_name': 'network node',
-    'description': 'Network Node'
-}, {
-    'role': 'compute-worker',
-    'display_name': 'Compute worker node',
-    'description': 'Compute worker node'
-}, {
-    'role': 'compute-controller',
-    'display_name': 'Compute controller node',
-    'description': 'Compute controller node'
-}, {
-    'role': 'network-server',
-    'display_name': 'Network server node',
-    'description': 'Network server node'
-}, {
-    'role': 'database',
-    'display_name': 'Database node',
-    'description': 'Database node'
-}, {
-    'role': 'messaging',
-    'display_name': 'Messaging queue node',
-    'description': 'Messaging queue node'
-}, {
-    'role': 'image',
-    'display': 'Image node',
-    'description': 'Image node'
-}, {
-    'role': 'dashboard',
-    'display': 'Dashboard node',
-    'description': 'Dashboard node'
-}, {
-    'role': 'identity',
-    'display': 'Identity node',
-    'description': 'Identity node'
-}, {
-    'role': 'storage-controller',
-    'display': 'Storage controller node',
-    'description': 'Storage controller node'
-}, {
-    'role': 'storage-volume',
-    'display': 'Storage volume node',
-    'description': 'Storage volume node'
-}, {
-    'role': 'network-worker',
-    'display': 'Network worker node',
-    'description': 'Network worker node'
-}, {
-    'role': 'odl',
-    'display': 'open day light',
-    'description': 'odl node',
-    'optional': True
-}, {
-    'role': 'onos',
-    'display': 'open network operating system',
-    'description': 'onos node',
-    'optional': True
-}, {
-    'role': 'opencontrail',
-    'display': 'open contrail',
-    'description': 'opencontrail node',
-    'optional': True
-}, {
-    'role': 'ha',
-    'display': 'Cluster with HA',
-    'description': 'Cluster with HA node'
-}, {
-    'role': 'ceph-adm',
-    'display': 'Ceph Admin Node',
-    'description': 'Ceph Admin Node',
-    'optional': True
-}, {
-    'role': 'ceph-mon',
-    'display': 'Ceph Monitor Node',
-    'description': 'Ceph Monitor Node',
-    'optional': True
-}, {
-    'role': 'ceph-osd',
-    'display': 'Ceph Storage Node',
-    'description': 'Ceph Storage Node',
-    'optional': True
-}, {
-    'role': 'ceph-osd-node',
-    'display': 'Ceph osd install from node',
-    'description': '',
-    'optional': True
-}, {
-    'role': 'ceph',
-    'display': 'ceph node',
-    'description': 'ceph node',
-    'optional': True
-}, {
-    'role': 'sec-patch',
-    'display': 'sec-patch node',
-    'description': 'Security Patch Node',
-    'optional': True
-}]
+    'role': 'kube_master',
+    'display_name': 'kubnernets master node',
+    'description': ' include kube-api,kube-scheduler'
+}, {
+    'role': 'etcd',
+    'display_name': 'etcd node',
+    'description': 'etcd Node'
+}, {
+    'role': 'kube_node',
+    'display_name': 'kube node',
+    'description': 'kube Node'
+} 
+]
index 9d628b5..0a9e302 100644 (file)
@@ -9,22 +9,22 @@
 
 # localhost
 127.0.0.1 localhost
-#set controllers = $getVar('controller', [])
-#set computes = $getVar('compute', [])
-#if not $isinstance($controllers, list)
-    #set controllers = [$controllers]
+#set kube_masters = $getVar('kube_master', [])
+#set kube_nodes = $getVar('kube_node', [])
+#if not $isinstance($kube_masters, list)
+    #set kube_masters = [$kube_masters]
 #end if
-#if not $isinstance($compute, list)
-    #set computes = [$computes]
+#if not $isinstance($kube_nodes, list)
+    #set kube_nodes = [$kube_nodes]
 #end if
-# controller
-#for worker in $controllers
+# kube_master
+#for worker in $kube_masters
     #set worker_hostname = $worker.hostname
     #set worker_ip = $ip_settings[$worker_hostname].mgmt.ip
 $worker_ip $worker_hostname
 #end for
-# compute
-#for worker in $computes
+# kube_node
+#for worker in $kube_nodes
     #set worker_hostname = $worker.hostname
     #set worker_ip = $ip_settings[$worker_hostname].mgmt.ip
 $worker_ip $worker_hostname
index 27211e0..440bf7d 100644 (file)
@@ -20,8 +20,8 @@
 #set has = $getVar('ha', [])
 #set ha_vip = $getVar('ha_vip', [])
 
-#set controllers = $getVar('controller', [])
-#set computers = $getVar('compute', [])
+#set kube_masters = $getVar('kube_master', [])
+#set kube_nodes = $getVar('kube_node', [])
 
 enable_secgroup: $getVar('enable_secgroup', True)
 enable_fwaas: $getVar('enable_fwaas', True)
@@ -35,7 +35,7 @@ network_cfg: $network_cfg
 sys_intf_mappings: $sys_intf_mappings
 deploy_type: $getVar('deploy_type', 'virtual')
 
-public_cidr: $computers[0]['install']['subnet']
+public_cidr: $kube_nodes[0]['install']['subnet']
 storage_cidr: "{{ ip_settings[inventory_hostname]['storage']['cidr'] }}"
 mgmt_cidr: "{{ ip_settings[inventory_hostname]['mgmt']['cidr'] }}"
 
index d098afb..003f41b 100644 (file)
@@ -14,29 +14,23 @@ FLAVOR: cluster
 hosts:
   - name: host1
     roles:
-      - controller
-      - ha
-      - ceph-adm
-      - ceph-mon
+      - kube_master
+      - etcd
 
   - name: host2
     roles:
-      - controller
-      - ha
-      - ceph-mon
+      - kube_master
+      - etcd
 
   - name: host3
     roles:
-      - controller
-      - ha
-      - ceph-mon
+      - kube_master
+      - etcd
 
   - name: host4
     roles:
-      - compute
-      - ceph-osd
+      - kube_node
 
   - name: host5
     roles:
-      - compute
-      - ceph-osd
+      - kube_node