diff --git a/bootstrap-master.sh b/bootstrap-master.sh index 6b7e83a2b..e142cdadf 100755 --- a/bootstrap-master.sh +++ b/bootstrap-master.sh @@ -12,17 +12,11 @@ ansible --version || ( apt-get install -y ansible ) -# Kargo-cli -kargo --version || ( - git clone https://github.com/kubespray/kargo-cli.git /root/kargo-cli - pushd /root/kargo-cli - python setup.py install - popd -) - # Copy/create nodes list test -f ./nodes || cp /var/tmp/nodes ./nodes # Either pull or copy microservices repos cp -a /var/tmp/microservices* ./ccp/ || touch /var/tmp/ccp-download +# Pull kargo +git clone https://github.com/kubespray/kargo ~/kargo diff --git a/deploy-ccp.sh b/deploy-ccp.sh index c412eadb4..d9afbb2d5 100755 --- a/deploy-ccp.sh +++ b/deploy-ccp.sh @@ -1,6 +1,6 @@ #!/bin/bash -INVENTORY="/root/kargo/inventory/inventory.cfg" +INVENTORY="nodes_to_inv.py" echo "Createing repository and CCP images, it may take a while..." ansible-playbook -i $INVENTORY playbooks/ccp-build.yaml diff --git a/deploy-k8s.kargo.sh b/deploy-k8s.kargo.sh index 292ca6836..73d11c392 100755 --- a/deploy-k8s.kargo.sh +++ b/deploy-k8s.kargo.sh @@ -1,6 +1,6 @@ #!/bin/bash -INVENTORY="/root/kargo/inventory/inventory.cfg" +INVENTORY="nodes_to_inv.py" nodes="" i=1 @@ -9,13 +9,6 @@ for nodeip in `cat nodes` ; do nodes+=" node${i}[ansible_ssh_host=${nodeip},ip=${nodeip}]" done -if [ -f "$INVENTORY" ] ; then - echo "$INVENTORY already exists, if you want to recreate, pls remove it and re-run this script" -else - echo "Preparing inventory..." - kargo prepare -y --nodes $nodes -fi - echo "Running deployment..." #kargo deploy -y --ansible-opts="-e @custom.yaml" ansible-playbook -i $INVENTORY /root/kargo/cluster.yml -e @custom.yaml diff --git a/nodes_to_inv.py b/nodes_to_inv.py new file mode 100755 index 000000000..3242686cc --- /dev/null +++ b/nodes_to_inv.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python + +# A simple dynamic replacemant of 'kargo prepare' +# Generates ansible inventory from a list of IPs in 'nodes' file. + +import argparse +import json + +def read_nodes_from_file(filename): + f = open(filename, 'r') + content = [x.strip('\n') for x in f.readlines()] + return content + +def nodes_to_hash(nodes_list, masters): + nodes = { + 'all': { + 'hosts': [], + }, + 'etcd': { + 'hosts': [], + }, + 'kube-master': { + 'hosts': [], + }, + 'kube-node': { + 'hosts': [], + }, + 'k8s-cluster': { + 'children': ['kube-node', 'kube-master'] + } + } + + for node_ip in nodes_list: + nodes['all']['hosts'].append("%s" % node_ip) + nodes['kube-node']['hosts'].append("%s" % node_ip) + if i <= masters: + nodes['kube-master']['hosts'].append("%s" % node_ip) + if i <= 3: + nodes['etcd']['hosts'].append("%s" % node_ip) + + return nodes + +def main(): + parser = argparse.ArgumentParser(description='Ansible dynamic inventory') + parser.add_argument('--nodes', help='File with list of nodes, one IP per line', default='nodes') + parser.add_argument('--masters', type=int, help='Number of master nodes, will be taken from the top of list', default=2) + parser.add_argument('--list', action='store_true') + parser.add_argument('--host', default=False) + args = parser.parse_args() + + nodes_list = read_nodes_from_file(args.nodes) + + if len(nodes_list) < 3: + print "Error: requires at least 3 nodes" + return + + nodes = nodes_to_hash(nodes_list, args.masters) + + if args.host: + print "{}" + else: + print json.dumps(nodes) + +if __name__ == "__main__": + main()