aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhu xinhui <xinhui_hu@foxmail.com>2017-09-29 17:06:33 +0800
committerhu xinhui <xinhui_hu@foxmail.com>2017-09-30 15:54:28 +0800
commit179cd6db9f1bd9be1606187cf74e128bede7a8e6 (patch)
tree5b6f6b381e594b42cb9bf8ac3cf45009a566be1c
parentf70d3aa8ffe7878e86b8f12c91c99018924a74b3 (diff)
Modification for kargo to generate dynamic inventory
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>
-rwxr-xr-x[-rw-r--r--]deploy/adapters/ansible/kubernetes/roles/kargo/files/generate_inventories.py79
-rw-r--r--deploy/adapters/ansible/kubernetes/roles/kargo/tasks/main.yml9
-rwxr-xr-x[-rw-r--r--]deploy/compass_conf/flavor/kubernetes.conf2
-rwxr-xr-x[-rw-r--r--]deploy/compass_conf/flavor_mapping/kubernetes.conf0
-rwxr-xr-x[-rw-r--r--]deploy/compass_conf/flavor_metadata/ansible-kubernetes.conf0
-rwxr-xr-x[-rw-r--r--]deploy/compass_conf/package_installer/ansible-kubernetes.conf2
-rwxr-xr-x[-rw-r--r--]deploy/compass_conf/role/kubernetes_ansible.conf126
-rw-r--r--deploy/compass_conf/templates/ansible_installer/kubernetes/hosts/ansible-kubernetes.tmpl20
-rw-r--r--deploy/compass_conf/templates/ansible_installer/kubernetes/vars/ansible-kubernetes.tmpl6
-rw-r--r--deploy/conf/vm_environment/k8-nosdn-nofeature-ha.yml22
10 files changed, 98 insertions, 168 deletions
diff --git a/deploy/adapters/ansible/kubernetes/roles/kargo/files/generate_inventories.py b/deploy/adapters/ansible/kubernetes/roles/kargo/files/generate_inventories.py
index 62f29d84..2ffb4cae 100644..100755
--- a/deploy/adapters/ansible/kubernetes/roles/kargo/files/generate_inventories.py
+++ b/deploy/adapters/ansible/kubernetes/roles/kargo/files/generate_inventories.py
@@ -1,26 +1,32 @@
import yaml
import sys
+import os
from jinja2 import Environment
+try:
+ import json
+except ImportError:
+ import simplejson as json
INVENTORY_TEMPLATE = """
[all]
-{% for host, ip in hosts.iteritems() %}
-{{ host }} ansible_ssh_host={{ ip }} ansible_ssh_pass=root ansible_user=root
+{% for host, vales in hostvars.iteritems() %}
+{{ host }} ansible_ssh_host={{ vales['ansible_ssh_host'] }} \
+ansible_ssh_pass=root ansible_user=root
{% endfor %}
[kube-master]
-host1
-host2
+{% for host in kube_master %}
+{{ host }}
+{% endfor %}
[etcd]
-host1
-host2
-host3
+{% for host in etcd %}
+{{ host }}
+{% endfor %}
[kube-node]
-host2
-host3
-host4
-host5
+{% for host in kube_node %}
+{{ host }}
+{% endfor %}
[k8s-cluster:children]
kube-node
@@ -31,27 +37,50 @@ kube-master
"""
-def create_inventory_file(inventories_path, hosts):
- content = Environment().from_string(INVENTORY_TEMPLATE).render(hosts=hosts)
+def _byteify(data, ignore_dicts=False):
+
+ if isinstance(data, unicode):
+ return data.encode('utf-8')
+ if isinstance(data, list):
+ return [_byteify(item, ignore_dicts=True) for item in data]
+ if isinstance(data, dict) and not ignore_dicts:
+ return {
+ _byteify(key, ignore_dicts=True):
+ _byteify(value, ignore_dicts=True)
+ for key, value in data.iteritems()
+ }
+ return data
+
+
+def load_inventory(inventory):
+ if not os.path.exists(inventory):
+ raise RuntimeError('file: %s not exist' % inventory)
+ with open(inventory, 'r') as fd:
+ return json.load(fd, object_hook=_byteify)
+
+
+def create_inventory_file(inventories_path,
+ hostvars, kube_master, etcd, kube_node):
+ content = Environment().from_string(INVENTORY_TEMPLATE).render(
+ hostvars=hostvars, kube_master=kube_master,
+ etcd=etcd, kube_node=kube_node)
with open(inventories_path, 'w+') as f:
f.write(content)
-def fetch_all_sorted_external_ip(ip_cfg):
- hosts = {}
- for host, settings in ip_cfg.iteritems():
- external = settings["external"]["ip"]
- hosts[host] = external
- return hosts
-
+def main(inventories_path, local_inventory):
+ inventory_data = load_inventory(local_inventory)
+ hostvars = inventory_data['_meta']['hostvars']
+ kube_node = inventory_data['kube_node']['hosts']
+ kube_master = inventory_data['kube_master']['hosts']
+ etcd = inventory_data['etcd']['hosts']
-def main(inventories_path, ip_cfg):
- hosts = fetch_all_sorted_external_ip(ip_cfg)
- create_inventory_file(inventories_path, hosts)
+ create_inventory_file(inventories_path,
+ hostvars, kube_master, etcd, kube_node)
if __name__ == "__main__":
path = yaml.load(sys.argv[1])
- ipv_cfg = yaml.load(sys.argv[2])
+ local_inventory = yaml.load(sys.argv[2])
- main(path, ipv_cfg)
+ main(path, local_inventory)
diff --git a/deploy/adapters/ansible/kubernetes/roles/kargo/tasks/main.yml b/deploy/adapters/ansible/kubernetes/roles/kargo/tasks/main.yml
index 4e902606..d3dcb878 100644
--- a/deploy/adapters/ansible/kubernetes/roles/kargo/tasks/main.yml
+++ b/deploy/adapters/ansible/kubernetes/roles/kargo/tasks/main.yml
@@ -58,11 +58,18 @@
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
diff --git a/deploy/compass_conf/flavor/kubernetes.conf b/deploy/compass_conf/flavor/kubernetes.conf
index 96b5f95f..35c43155 100644..100755
--- a/deploy/compass_conf/flavor/kubernetes.conf
+++ b/deploy/compass_conf/flavor/kubernetes.conf
@@ -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'
],
}]
diff --git a/deploy/compass_conf/flavor_mapping/kubernetes.conf b/deploy/compass_conf/flavor_mapping/kubernetes.conf
index e569ea46..e569ea46 100644..100755
--- a/deploy/compass_conf/flavor_mapping/kubernetes.conf
+++ b/deploy/compass_conf/flavor_mapping/kubernetes.conf
diff --git a/deploy/compass_conf/flavor_metadata/ansible-kubernetes.conf b/deploy/compass_conf/flavor_metadata/ansible-kubernetes.conf
index f878d58c..f878d58c 100644..100755
--- a/deploy/compass_conf/flavor_metadata/ansible-kubernetes.conf
+++ b/deploy/compass_conf/flavor_metadata/ansible-kubernetes.conf
diff --git a/deploy/compass_conf/package_installer/ansible-kubernetes.conf b/deploy/compass_conf/package_installer/ansible-kubernetes.conf
index c706ccb2..32590c82 100644..100755
--- a/deploy/compass_conf/package_installer/ansible-kubernetes.conf
+++ b/deploy/compass_conf/package_installer/ansible-kubernetes.conf
@@ -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']
diff --git a/deploy/compass_conf/role/kubernetes_ansible.conf b/deploy/compass_conf/role/kubernetes_ansible.conf
index 89c03d94..ae096f47 100644..100755
--- a/deploy/compass_conf/role/kubernetes_ansible.conf
+++ b/deploy/compass_conf/role/kubernetes_ansible.conf
@@ -1,115 +1,15 @@
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'
+}
+]
diff --git a/deploy/compass_conf/templates/ansible_installer/kubernetes/hosts/ansible-kubernetes.tmpl b/deploy/compass_conf/templates/ansible_installer/kubernetes/hosts/ansible-kubernetes.tmpl
index 9d628b5e..0a9e3025 100644
--- a/deploy/compass_conf/templates/ansible_installer/kubernetes/hosts/ansible-kubernetes.tmpl
+++ b/deploy/compass_conf/templates/ansible_installer/kubernetes/hosts/ansible-kubernetes.tmpl
@@ -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
diff --git a/deploy/compass_conf/templates/ansible_installer/kubernetes/vars/ansible-kubernetes.tmpl b/deploy/compass_conf/templates/ansible_installer/kubernetes/vars/ansible-kubernetes.tmpl
index 27211e06..440bf7d7 100644
--- a/deploy/compass_conf/templates/ansible_installer/kubernetes/vars/ansible-kubernetes.tmpl
+++ b/deploy/compass_conf/templates/ansible_installer/kubernetes/vars/ansible-kubernetes.tmpl
@@ -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'] }}"
diff --git a/deploy/conf/vm_environment/k8-nosdn-nofeature-ha.yml b/deploy/conf/vm_environment/k8-nosdn-nofeature-ha.yml
index d098afba..003f41be 100644
--- a/deploy/conf/vm_environment/k8-nosdn-nofeature-ha.yml
+++ b/deploy/conf/vm_environment/k8-nosdn-nofeature-ha.yml
@@ -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