diff --git a/README.md b/README.md index 0b331cf..a9b7081 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,27 @@ Lain 是一个基于 docker 的 PaaS 系统。 - 统一开发测试生产三环境 - 持续交付工作流的良好支持 -## Getting started +## Latest Release + +最新版是2.1.1。 + +- [下载](https://github.com/laincloud/lain/archive/v2.1.1.tar.gz) +- [Release note](https://github.com/laincloud/lain/releases/tag/v2.1.1) + +## Quick Start + +```shell +curl -fsSL https://github.com/laincloud/lain/archive/v2.1.1.tar.gz | tar xf - +cd lain-2.1.1 +vagrant up +# Config DNS in local shell +sudo bash -c 'echo "192.168.77.201 console.lain.local" >> /etc/hosts' +``` + +初始化完成后即可在浏览器访问console: +``` +http://console.lain.local +``` 完整的文档在[这里](https://laincloud.gitbooks.io/white-paper/content/),其中: - [Demo Cluster](https://laincloud.gitbooks.io/white-paper/quickstart/demo.html) 展示了如何快速启动一个 Demo 集群 diff --git a/Vagrantfile b/Vagrantfile index 28525cd..bd5c4e8 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -5,7 +5,7 @@ Vagrant.configure(2) do |config| (1..3).each do |i| nodename = "node#{i}" - config.vm.define nodename do |node| + config.vm.define nodename, primary: i == 1, autostart: i == 1 do |node| node.vm.box = "laincloud/centos-lain" node.vm.hostname = nodename @@ -13,6 +13,13 @@ Vagrant.configure(2) do |config| node.vm.provider "virtualbox" do |v| v.memory = i == 1 ? 1536 : 512 end + + if i == 1 + node.vm.provision "shell", + inline: "sudo /vagrant/bootstrap "\ + "-m https://l2ohopf9.mirror.aliyuncs.com "\ + "-r docker.io/laincloud --vip=192.168.77.201" + end node.vm.network "private_network", ip: "192.168.77.2#{i}" diff --git a/bootstrap b/bootstrap index 2ff5282..2cc5122 100755 --- a/bootstrap +++ b/bootstrap @@ -149,7 +149,7 @@ def install_ansible(options): # "with CentOS's python-crypto package. Remove it.") # call('pip uninstall -y pycrypto', shell=True) - check_call('yum install -y epel-release gcc python-devel openssl-devel libffi-devel', + check_call('yum install -y wget epel-release gcc python-devel openssl-devel libffi-devel', shell=True) # NOTE: This will install python-crypto. check_call('yum install -y python2-pip', shell=True) diff --git a/bootstrap_test/config.yaml b/bootstrap_test/config.yaml index 80a1ef1..86090b5 100644 --- a/bootstrap_test/config.yaml +++ b/bootstrap_test/config.yaml @@ -12,4 +12,4 @@ ipaddr: client: appname: ipaddr-client procname: web - num_instances: 4 + num_instances: 2 diff --git a/bootstrap_test/conftest.py b/bootstrap_test/conftest.py index d02862a..c011bc2 100644 --- a/bootstrap_test/conftest.py +++ b/bootstrap_test/conftest.py @@ -10,42 +10,42 @@ @pytest.fixture(scope="session") def up_node1(): - subproc.check_call(['sudo', 'vagrant', 'destroy', '-f', 'node1']) - subproc.check_call(['sudo', 'vagrant', 'up', 'node1']) + subproc.check_call(['vagrant', 'destroy', '-f', 'node1']) + subproc.check_call(['vagrant', 'up', 'node1', '--no-provision']) yield "node1 is ready" print("Destroying node1...") - subproc.call(['sudo', 'vagrant', 'destroy', '-f', 'node1']) + subproc.call(['vagrant', 'destroy', '-f', 'node1']) print("Node1 is destroyed.") @pytest.fixture(scope="session") def up_node2(): - subproc.check_call(['sudo', 'vagrant', 'destroy', '-f', 'node2']) - subproc.check_call(['sudo', 'vagrant', 'up', 'node2']) + subproc.check_call(['vagrant', 'destroy', '-f', 'node2']) + subproc.check_call(['vagrant', 'up', 'node2']) yield "node2 is ready" print("Destroying node2...") - subproc.call(['sudo', 'vagrant', 'destroy', '-f', 'node2']) + subproc.call(['vagrant', 'destroy', '-f', 'node2']) print("Node2 is destroyed.") @pytest.fixture(scope="session") def up_node3(): - subproc.check_call(['sudo', 'vagrant', 'destroy', '-f', 'node3']) - subproc.check_call(['sudo', 'vagrant', 'up', 'node3']) + subproc.check_call(['vagrant', 'destroy', '-f', 'node3']) + subproc.check_call(['vagrant', 'up', 'node3']) yield "node3 is ready" print("Destroying node3...") - subproc.call(['sudo', 'vagrant', 'destroy', '-f', 'node3']) + subproc.call(['vagrant', 'destroy', '-f', 'node3']) print("Node3 is destroyed.") @pytest.fixture(scope="session") def bootstrap(up_node1): subproc.check_call([ - 'sudo', 'vagrant', 'ssh', 'node1', '-c', - 'sudo /vagrant/bootstrap -r registry.aliyuncs.com/laincloud --vip={}'. + 'vagrant', 'ssh', 'node1', '-c', + 'sudo /vagrant/bootstrap -m https://l2ohopf9.mirror.aliyuncs.com -r docker.io/laincloud --vip={}'. format(CONFIG.vip) ]) @@ -53,7 +53,7 @@ def bootstrap(up_node1): @pytest.fixture(scope="session") def prepare_demo_images(bootstrap): subproc.check_call([ - 'sudo', 'vagrant', 'ssh', 'node1', '-c', + 'vagrant', 'ssh', 'node1', '-c', 'sudo sh /vagrant/bootstrap_test/prepare_demo_images.sh' ]) @@ -78,12 +78,12 @@ def deploy_ipaddr(reposit_ipaddr): @pytest.fixture(scope="session") def add_node(bootstrap, up_node2, up_node3): subproc.check_call([ - 'sudo', 'vagrant', 'ssh', 'node1', '-c', + 'vagrant', 'ssh', 'node1', '-c', 'cd /vagrant/bootstrap_test && sudo ansible-playbook \ -i host_vars/test-nodes distribute_ssh_key.yaml' ]) subproc.check_call([ - 'sudo', 'vagrant', 'ssh', 'node1', '-c', + 'vagrant', 'ssh', 'node1', '-c', 'sudo lainctl node add -p /vagrant/playbooks node2:192.168.77.22 ' + 'node3:192.168.77.23' ]) @@ -93,4 +93,4 @@ def add_node(bootstrap, up_node2, up_node3): def scale_ipaddr_client(deploy_ipaddr, add_node): app_ctl.scale(CONFIG.ipaddr_client_appname, CONFIG.ipaddr_client_procname, CONFIG.ipaddr_client_num_instances) - time.sleep(60) + time.sleep(120) diff --git a/download-calico.sh b/download-calico.sh deleted file mode 100755 index ec8c4e7..0000000 --- a/download-calico.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -mkdir -p playbooks/roles/networkd-upgrade/files -mkdir -p playbooks/roles/calico-upgrade/files/bin -wget https://github.com/laincloud/networkd/releases/download/v0.1.22/networkd -O playbooks/roles/networkd-upgrade/files/networkd -wget https://github.com/laincloud/calico-upgrade/releases/download/v0.0.1/calico-upgrade -O playbooks/roles/calico-upgrade/files/bin/calico-upgrade -wget https://github.com/projectcalico/calicoctl/releases/download/v1.2.1/calicoctl -O playbooks/roles/calico-upgrade/files/bin/calicoctl -wget https://github.com/projectcalico/felix/releases/download/2.2.2/calico-felix -O playbooks/roles/calico-upgrade/files/bin/calico-felix -wget https://github.com/projectcalico/bird/releases/download/v0.3.1/bird -O playbooks/roles/calico-upgrade/files/bin/bird -wget https://github.com/projectcalico/bird/releases/download/v0.3.1/bird6 -O playbooks/roles/calico-upgrade/files/bin/bird6 -wget https://github.com/projectcalico/confd/releases/download/v0.11.2/confd -O playbooks/roles/calico-upgrade/files/bin/confd -wget https://github.com/laincloud/libnetwork-plugin/releases/download/v1.1.0/libnetwork-plugin -O playbooks/roles/calico-upgrade/files/bin/libnetwork-plugin -wget https://github.com/laincloud/calicoctl/releases/download/v1.2.1/allocate-ipip-addr -O playbooks/roles/calico-upgrade/files/bin/allocate-ipip-addr \ No newline at end of file diff --git a/playbooks/roles/bootstrap-binary-stop/tasks/main.yaml b/playbooks/roles/bootstrap-binary-stop/tasks/main.yaml index 78e5177..2bd9e68 100644 --- a/playbooks/roles/bootstrap-binary-stop/tasks/main.yaml +++ b/playbooks/roles/bootstrap-binary-stop/tasks/main.yaml @@ -14,7 +14,7 @@ - name: stop deployd service service: name=deployd state=stopped - when: deployd|success + when: deployd.stat.exists - name: test if networkd binary path exists stat: path=/usr/bin/networkd diff --git a/playbooks/roles/bootstrap-console-deploy/tasks/main.yaml b/playbooks/roles/bootstrap-console-deploy/tasks/main.yaml index 12b0e74..934e625 100644 --- a/playbooks/roles/bootstrap-console-deploy/tasks/main.yaml +++ b/playbooks/roles/bootstrap-console-deploy/tasks/main.yaml @@ -22,7 +22,7 @@ shell: "curl -s console.lain/api/v1/apps/{{ app }}/ | python -c \"import json, sys; print json.load(sys.stdin)['app']['procs'][0]['pods'][0]['containerid']\"" register: container_id until: container_id|success - retries: 5 + retries: 50 delay: 5 changed_when: False diff --git a/playbooks/roles/bootstrap-images/vars/main.yaml b/playbooks/roles/bootstrap-images/vars/main.yaml index dd78b1b..6949ef9 100644 --- a/playbooks/roles/bootstrap-images/vars/main.yaml +++ b/playbooks/roles/bootstrap-images/vars/main.yaml @@ -4,7 +4,6 @@ "bootstrap_images": { "swarm": "swarm:1.2.5", "rebellion": "rebellion:v2.3.0", - "pip_binary": "pip-binary:1495177245", "mysql": "mysql-server:5.6.30", "registry": "registry:release-1498029368-2c74d73cef3f020dd1dd6fcf9e1933112a2c67cc", "registry-meta": "registry:meta-1498029368-2c74d73cef3f020dd1dd6fcf9e1933112a2c67cc", @@ -14,8 +13,8 @@ "webrouter-meta": "webrouter:meta-1497430313-fa743a7d70301660065d6e636a18dab5fda3173c", "console": "console:release-1498028442-2801ed55f0293ce3b0f2ab3d10a36ad9cc456539", "console-meta": "console:meta-1498028442-2801ed55f0293ce3b0f2ab3d10a36ad9cc456539", - "backupctl-meta": "backupctl:meta-1497618290-9f52077823a786fa0d6dd96eb63151213d55a28f", - "backupctl": "backupctl:release-1497618290-9f52077823a786fa0d6dd96eb63151213d55a28f", + "backupctl-meta": "backupctl:meta-1498032948-eb5dc315425981a4ab59e7515627b8b34ef8ed5c", + "backupctl": "backupctl:release-1498032948-eb5dc315425981a4ab59e7515627b8b34ef8ed5c", "lvault-meta": "lvault:meta-1485154203-73072c92b1862ab470b8d872b278f734747b0739", "lvault": "lvault:release-1485154203-73072c92b1862ab470b8d872b278f734747b0739" } diff --git a/playbooks/roles/bootstrap-registry-push/tasks/main.yaml b/playbooks/roles/bootstrap-registry-push/tasks/main.yaml index dd0ee7a..3c6b26f 100644 --- a/playbooks/roles/bootstrap-registry-push/tasks/main.yaml +++ b/playbooks/roles/bootstrap-registry-push/tasks/main.yaml @@ -2,7 +2,7 @@ command: curl -m 2 http://registry.lain/v2/ register: result until: "result.stdout.startswith('{')" - retries: 5 + retries: 50 delay: 5 changed_when: False diff --git a/playbooks/roles/bootstrap-webrouter-stop/tasks/main.yaml b/playbooks/roles/bootstrap-webrouter-stop/tasks/main.yaml index cb13614..f347de8 100644 --- a/playbooks/roles/bootstrap-webrouter-stop/tasks/main.yaml +++ b/playbooks/roles/bootstrap-webrouter-stop/tasks/main.yaml @@ -23,6 +23,6 @@ shell: "curl -s registry.lain/v2/" register: result until: result|success - retries: 5 + retries: 50 delay: 5 changed_when: False diff --git a/playbooks/roles/calico/tasks/main.yaml b/playbooks/roles/calico/tasks/main.yaml index f51e442..6fc0d71 100644 --- a/playbooks/roles/calico/tasks/main.yaml +++ b/playbooks/roles/calico/tasks/main.yaml @@ -77,6 +77,7 @@ - name: generate ippool.yml template: src=ippool.yml.j2 dest=/etc/calico/ippool.yml + when: bootstrapping is defined and bootstrapping|bool - name: generate bird.cfg.mesh.template template: src=bird.cfg.mesh.template.j2 dest=/etc/calico/confd/templates/bird.cfg.mesh.template @@ -176,6 +177,7 @@ - name: create calico ippool command: calicoctl apply -f /etc/calico/ippool.yml + when: bootstrapping is defined and bootstrapping|bool - name: check if some network exist shell: docker network ls | grep {{ item }} diff --git a/playbooks/roles/calico/templates/ippool.yml.j2 b/playbooks/roles/calico/templates/ippool.yml.j2 index 63ad7d0..38617de 100644 --- a/playbooks/roles/calico/templates/ippool.yml.j2 +++ b/playbooks/roles/calico/templates/ippool.yml.j2 @@ -1,4 +1,11 @@ - apiVersion: v1 kind: ipPool metadata: - cidr: {{ calico_default_network }} \ No newline at end of file + cidr: {{ calico_default_network }} + spec: +{% if calico_ipip|bool %} + ipip: + enabled: true + mode: always +{% endif %} + nat-outgoing: true \ No newline at end of file diff --git a/playbooks/roles/collectd/files/plugins/lain/lain_docker.py b/playbooks/roles/collectd/files/plugins/lain/lain_docker.py index 0bd20d9..e59364f 100755 --- a/playbooks/roles/collectd/files/plugins/lain/lain_docker.py +++ b/playbooks/roles/collectd/files/plugins/lain/lain_docker.py @@ -13,6 +13,7 @@ class Plugin: + @classmethod def create_record(cls, metric, value, lain_info, metric_type="GAUGE"): interval = CONFIGS['interval'] @@ -26,15 +27,21 @@ def create_record(cls, metric, value, lain_info, metric_type="GAUGE"): class CpuStats(Plugin): + @classmethod def get(cls, stats, lain_info): - # docker cpu stats is nanoseconds, plus 100 for percent, *100/1e9 = /1e7 - cls.create_record("cpu.total", int(int(stats["cpu_stats"]["cpu_usage"]["total_usage"])/1e7), lain_info) - cls.create_record("cpu.user", int(int(stats["cpu_stats"]["cpu_usage"]["usage_in_usermode"])/1e7), lain_info) - cls.create_record("cpu.kernel", int(int(stats["cpu_stats"]["cpu_usage"]["usage_in_kernelmode"])/1e7), lain_info) + # docker cpu stats is nanoseconds, plus 100 for percent, *100/1e9 = + # /1e7 + cls.create_record("cpu.total", int( + int(stats["cpu_stats"]["cpu_usage"]["total_usage"]) / 1e7), lain_info) + cls.create_record("cpu.user", int( + int(stats["cpu_stats"]["cpu_usage"]["usage_in_usermode"]) / 1e7), lain_info) + cls.create_record("cpu.kernel", int( + int(stats["cpu_stats"]["cpu_usage"]["usage_in_kernelmode"]) / 1e7), lain_info) class MemoryStats(Plugin): + @classmethod def get(cls, stats, lain_info): usage = stats["memory_stats"]["usage"] @@ -62,12 +69,25 @@ def get(cls, stats, lain_info): "sectors_recursive": [] } """ + +# blkio-io_service_bytes_recursive-253-0-READ +BLKIO_KEY_FORMAT = 'blkio.%s-%s-%s-%s' + + class BlkioStats(Plugin): + @classmethod def get(cls, stats, lain_info): for stat, value in stats["blkio_stats"].iteritems(): + blk_stats = {} for item in value: - cls.create_record("blkio.%s-%s" % (stat, item['op']), item['value'], lain_info, "COUNTER") + key = BLKIO_KEY_FORMAT % ( + stat, item['major'], item['minor'], item['op']) + blk_stats[key] = item['value'] + + for key, value in blk_stats.iteritems(): + cls.create_record( + key, value, lain_info, "COUNTER") """ @@ -82,14 +102,18 @@ def get(cls, stats, lain_info): "tx_packets": 0 }, """ + + class NetworkStats(Plugin): + @classmethod def get(cls, stats, lain_info): if "networks" not in stats: return for interface in stats["networks"]: for stat in stats["networks"][interface]: - cls.create_record("net.%s-%s" % (interface, stat), stats["networks"][interface][stat], lain_info, "COUNTER") + cls.create_record("net.%s-%s" % (interface, stat), + stats["networks"][interface][stat], lain_info, "COUNTER") class Docker: @@ -123,7 +147,6 @@ def get_all_running_containers(cls): return result - class Lainlet(object): def __init__(self, url, hostname): @@ -149,7 +172,8 @@ def get_containers(self): return info def get_depends(self): - # portal: DOMAIN.app.[SERVICE|RESOURCE].portal.PORTALNAME.APPNAME.NODENAME.(instance.NO.) + # portal: + # DOMAIN.app.[SERVICE|RESOURCE].portal.PORTALNAME.APPNAME.NODENAME.(instance.NO.) url = "%s/v2/depends" % (self.url) r = urllib.urlopen(url) depends = json.loads(r.read()) @@ -158,12 +182,14 @@ def get_depends(self): for host, hval in val.iteritems(): for app, aval in hval.iteritems(): service_name, _, _ = key.rsplit('.', 2) - service_name = service_name.replace('.', '_') # for resource + service_name = service_name.replace( + '.', '_') # for resource name = "%s-%s-%s" % (key, host, app) info[name] = {} info[name]['app_name'] = app info[name]['node_name'] = host - info[name]['portal_name'] = json.loads(aval['Annotation'])['service_name'] + info[name]['portal_name'] = json.loads( + aval['Annotation'])['service_name'] info[name]['service_name'] = service_name info[name]['proc_name'] = None info[name]['proc_type'] = None @@ -207,9 +233,9 @@ def get_info(cls, containers, depends, container_id, container_name): if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("--lainlet-endpoint", help="lainlet endpoint", - default="http://lainlet.lain:9001", type=str) + default="http://lainlet.lain:9001", type=str) parser.add_argument("--domain", help="lain domain", - default="lain.local", type=str) + default="lain.local", type=str) args = parser.parse_args() CONFIGS['domain'] = args.domain.replace('.', '_') lainlet = Lainlet(args.lainlet_endpoint, CONFIGS['hostname']) @@ -225,7 +251,8 @@ def get_info(cls, containers, depends, container_id, container_name): container_name = container["Names"][0].strip('/') container_id = container["Id"] stats = Docker.get_stats(container_id) - lain_info = lainlet.get_info(containers, depends, container_id, container_name) + lain_info = lainlet.get_info( + containers, depends, container_id, container_name) for klass in CLASSES: klass.get(stats, lain_info) diff --git a/playbooks/roles/config/defaults/main.yaml b/playbooks/roles/config/defaults/main.yaml index 7ede3a0..9ec1a26 100644 --- a/playbooks/roles/config/defaults/main.yaml +++ b/playbooks/roles/config/defaults/main.yaml @@ -96,11 +96,6 @@ manager_home: /root mysql_data_dir: "{{ lain_data_dir }}/mysql" mysql_image: "{{ bootstrap_images.mysql }}" -# Python pip configurations -pip_binary_image: "{{ bootstrap_images.pip_binary }}" -pip_binary_cp_path: "{{ lain_data_dir }}/aux/binary/{{ pip_binary_image.replace('/', '_') }}" -pip_binary_path: "{{ pip_binary_cp_path }}/binary" - # Rebellion configurations rebellion_rsyslog_tcp_port: 8178 rebellion_image: "{{ bootstrap_images.rebellion }}" diff --git a/playbooks/roles/console-deploy/tasks/main.yaml b/playbooks/roles/console-deploy/tasks/main.yaml index 025cd20..53c6d0a 100644 --- a/playbooks/roles/console-deploy/tasks/main.yaml +++ b/playbooks/roles/console-deploy/tasks/main.yaml @@ -8,7 +8,7 @@ shell: "curl -f http://console.lain/api/v1/repos/" register: console_ready until: console_ready.rc == 0 - retries: 5 + retries: 50 delay: 5 changed_when: False when: result|failed @@ -35,6 +35,6 @@ shell: "curl -s -H \"access-token: {{ access_token|default('unknown') }}\" console.lain/api/v1/apps/{{ app }}/ | python -c \"import json, sys; print json.load(sys.stdin)['app']['procs'][0]['pods'][0]['containerid']\"" register: container_id until: container_id|success - retries: 5 + retries: 50 delay: 5 changed_when: False diff --git a/playbooks/roles/docker-version/tasks/main.yaml b/playbooks/roles/docker-version/tasks/main.yaml index c4df738..87eae07 100644 --- a/playbooks/roles/docker-version/tasks/main.yaml +++ b/playbooks/roles/docker-version/tasks/main.yaml @@ -65,7 +65,7 @@ command: docker version -f "\{\{.Server.Version\}\}" register: current_docker_version until: current_docker_version.stdout - retries: 5 + retries: 50 delay: 5 changed_when: False diff --git a/playbooks/roles/docker/tasks/main.yaml b/playbooks/roles/docker/tasks/main.yaml index 75c77d9..8358f64 100644 --- a/playbooks/roles/docker/tasks/main.yaml +++ b/playbooks/roles/docker/tasks/main.yaml @@ -54,7 +54,7 @@ command: docker version -f "\{\{.Server.Version\}\}" register: current_docker_version until: current_docker_version.stdout - retries: 5 + retries: 50 delay: 5 changed_when: False diff --git a/playbooks/roles/etcd/tasks/main.yaml b/playbooks/roles/etcd/tasks/main.yaml index 9226c6a..7edf61a 100644 --- a/playbooks/roles/etcd/tasks/main.yaml +++ b/playbooks/roles/etcd/tasks/main.yaml @@ -32,7 +32,7 @@ shell: etcdctl cluster-health | grep "cluster is healthy" register: health_result until: health_result|success - retries: 5 + retries: 50 delay: 5 changed_when: False @@ -40,7 +40,7 @@ command: etcdctl set /lain/test test register: result until: result|success - retries: 5 + retries: 50 delay: 5 changed_when: False diff --git a/playbooks/roles/lainlet/meta/main.yaml b/playbooks/roles/lainlet/meta/main.yaml index d9f1714..d4b6013 100644 --- a/playbooks/roles/lainlet/meta/main.yaml +++ b/playbooks/roles/lainlet/meta/main.yaml @@ -1,2 +1,3 @@ dependencies: - - role: config \ No newline at end of file + - role: config + - role: libraries \ No newline at end of file diff --git a/playbooks/roles/moosefs/tasks/main.yaml b/playbooks/roles/moosefs/tasks/main.yaml index 1a6a040..18611a9 100644 --- a/playbooks/roles/moosefs/tasks/main.yaml +++ b/playbooks/roles/moosefs/tasks/main.yaml @@ -28,6 +28,6 @@ command: mount /mfs register: mount_result until: mount_result|success - retries: 5 + retries: 50 delay: 5 when: result|failed diff --git a/playbooks/roles/mysql/tasks/main.yaml b/playbooks/roles/mysql/tasks/main.yaml index 917f5f4..353f95a 100644 --- a/playbooks/roles/mysql/tasks/main.yaml +++ b/playbooks/roles/mysql/tasks/main.yaml @@ -13,8 +13,7 @@ - name: initialize databases command: | docker exec mysql_container mysql -uroot -e " - CREATE DATABASE console; - CREATE USER console@'%' identified by 'console'; - GRANT ALL ON console.* to console@'%'; + CREATE DATABASE IF NOT EXISTS console; + GRANT ALL ON console.* TO console@'%' IDENTIFIED BY 'console'; FLUSH PRIVILEGES; " diff --git a/playbooks/roles/network-recover/tasks/main.yaml b/playbooks/roles/network-recover/tasks/main.yaml index 1c7d6dc..e7d71d2 100644 --- a/playbooks/roles/network-recover/tasks/main.yaml +++ b/playbooks/roles/network-recover/tasks/main.yaml @@ -27,5 +27,5 @@ when: is_lain_manager and result|success - name: recycle the used ip - shell: calicoctl ipam release {{ recycle_ip }} - when: is_lain_manager and result|success \ No newline at end of file + shell: calicoctl ipam release --ip {{ recycle_ip }} + when: is_lain_manager and result|success diff --git a/playbooks/roles/node/meta/main.yaml b/playbooks/roles/node/meta/main.yaml index ed3e355..67f61d0 100644 --- a/playbooks/roles/node/meta/main.yaml +++ b/playbooks/roles/node/meta/main.yaml @@ -6,6 +6,7 @@ dependencies: - role: firewall - role: dnsmasq - role: manager + - role: docker - role: calico - role: ssl - role: lainlet diff --git a/playbooks/roles/packages/meta/main.yaml b/playbooks/roles/packages/meta/main.yaml index d6c6c16..ecd1c42 100644 --- a/playbooks/roles/packages/meta/main.yaml +++ b/playbooks/roles/packages/meta/main.yaml @@ -1,5 +1,2 @@ dependencies: - role: config - - role: images - images: - - pip_binary diff --git a/playbooks/roles/packages/tasks/install.yaml b/playbooks/roles/packages/tasks/install.yaml deleted file mode 100644 index 0620931..0000000 --- a/playbooks/roles/packages/tasks/install.yaml +++ /dev/null @@ -1,39 +0,0 @@ -- name: check if pip_binary container exists - command: docker inspect pip_binary - register: check_container - ignore_errors: yes - changed_when: False - -- name: create pip_binary container - command: docker create --name pip_binary {{ pip_binary_image }} /bin/bash - when: check_container|failed - -- name: create pip_binary directory - file: path="{{ pip_binary_cp_path }}" state=directory - -- name: extract files from pip_binary container - command: docker cp pip_binary:/binary {{ pip_binary_cp_path }}/ - args: - creates: "{{ pip_binary_path }}" - -- name: remove pip_binary container - command: docker rm pip_binary - -- name: install pip - yum: pkg=python-pip - -- name: install python packages - command: pip install --upgrade --force-reinstall --use-wheel --no-index --find-links={{ pip_binary_path }}/pip/wheelhouse {{ item }} - with_items: - - pip - - python-dateutil==2.5.2 - - python-etcd==0.4.3 - - docker-py==1.8.0 - - psutil==4.1.0 - - requests==2.11.1 - register: result - changed_when: "'Successfully installed' in result.stdout" - -- name: install lainctl - command: pip install --upgrade --force-reinstall --use-wheel --no-index --find-links={{ pip_binary_path }}/pip/wheelhouse lain_admin_cli==v2.0.1 - when: bootstrapping is defined and bootstrapping|bool diff --git a/playbooks/roles/packages/tasks/main.yaml b/playbooks/roles/packages/tasks/main.yaml index 561cfc4..45a9b80 100644 --- a/playbooks/roles/packages/tasks/main.yaml +++ b/playbooks/roles/packages/tasks/main.yaml @@ -1,7 +1,18 @@ -# install required system packages -- name: test if pip-binary path exists - stat: path={{ pip_binary_path }} - register: result_path +- name: install pip + yum: pkg=python-pip -- include: install.yaml - when: not result_path.stat.exists +- name: install python packages + command: pip install --upgrade --force-reinstall {{ item }} + with_items: + - pip + - python-dateutil==2.5.2 + - python-etcd==0.4.3 + - docker-py==1.8.0 + - psutil==4.1.0 + - requests==2.11.1 + register: result + changed_when: "'Successfully installed' in result.stdout" + +- name: install lainctl + command: pip install --upgrade --force-reinstall lain-admin-cli==v2.0.3 + when: bootstrapping is defined and bootstrapping|bool diff --git a/playbooks/roles/prepare/tasks/main.yaml b/playbooks/roles/prepare/tasks/main.yaml index 57bc41a..1d47b63 100644 --- a/playbooks/roles/prepare/tasks/main.yaml +++ b/playbooks/roles/prepare/tasks/main.yaml @@ -9,14 +9,24 @@ - name: enable selinux selinux: policy=targeted state=permissive +- name: get stat of nscd.service + stat: path=/etc/systemd/system/nscd.service + register: nscd + ignore_errors: yes + - name: disable nscd service: name=nscd enabled=no state=stopped + when: nscd.stat.exists - name: load node info from etcd command: etcdctl get /lain/nodes/nodes/{{ node_name }}:{{ node_ip }}:{{ ssh_port }} register: result ignore_errors: yes +- name: delete any interface calico created previously + command: for interface in $(ip link show | grep cali | awk '{print $2}' | awk -F':' '{print $1}'); do ip link delete ${interface}; done + ignore_errors: yes + - set_fact: node_info: "{{result.stdout|from_json}}" when: result|success and result.stdout != "" diff --git a/playbooks/roles/rebellion/tasks/main.yaml b/playbooks/roles/rebellion/tasks/main.yaml index c85f4cb..bc94002 100644 --- a/playbooks/roles/rebellion/tasks/main.yaml +++ b/playbooks/roles/rebellion/tasks/main.yaml @@ -15,11 +15,11 @@ shell: "docker ps | grep rebellion.service" register: result until: result|success - retries: 5 + retries: 50 delay: 5 changed_when: False - name: deploy rsyslog config template: src=10-docker-rsyslog.conf.j2 dest=/etc/rsyslog.d/10-docker-rsyslog.conf notify: - - restart rsyslog \ No newline at end of file + - restart rsyslog diff --git a/playbooks/roles/registry/tasks/push.yml b/playbooks/roles/registry/tasks/push.yml index dd0ee7a..469fb55 100644 --- a/playbooks/roles/registry/tasks/push.yml +++ b/playbooks/roles/registry/tasks/push.yml @@ -1,8 +1,12 @@ +- name: restart calico-felix + service: name=calico-felix state=restarted + ignore_errors: yes + - name: wait_for registry ready command: curl -m 2 http://registry.lain/v2/ register: result until: "result.stdout.startswith('{')" - retries: 5 + retries: 50 delay: 5 changed_when: False diff --git a/playbooks/roles/swarm-manage/tasks/main.yaml b/playbooks/roles/swarm-manage/tasks/main.yaml index 7911bfc..d46643e 100644 --- a/playbooks/roles/swarm-manage/tasks/main.yaml +++ b/playbooks/roles/swarm-manage/tasks/main.yaml @@ -12,7 +12,7 @@ command: etcdctl ls {{ swarm_discovery_path }}/{{ node_ip }}:{{ docker_port }} register: result until: result|success - retries: 5 + retries: 50 delay: 5 changed_when: False diff --git a/playbooks/roles/swarm-manage/tasks/swarm-manager.yaml b/playbooks/roles/swarm-manage/tasks/swarm-manager.yaml index e354ad4..f87ade5 100644 --- a/playbooks/roles/swarm-manage/tasks/swarm-manager.yaml +++ b/playbooks/roles/swarm-manage/tasks/swarm-manager.yaml @@ -12,7 +12,7 @@ shell: "docker -H tcp://{{ node_ip }}:{{ swarm_manager_port }} info | grep 'Nodes: ' | awk '{ print $2 }'" register: swarm_cluster_nodes until: swarm_cluster_nodes.stdout|int > 0 - retries: 5 + retries: 50 delay: 5 changed_when: False diff --git a/playbooks/roles/swarm-upgrade/tasks/main.yaml b/playbooks/roles/swarm-upgrade/tasks/main.yaml index 6615cb3..0113022 100644 --- a/playbooks/roles/swarm-upgrade/tasks/main.yaml +++ b/playbooks/roles/swarm-upgrade/tasks/main.yaml @@ -22,7 +22,7 @@ command: etcdctl ls {{ swarm_discovery_path }}/{{ node_ip }}:{{ docker_port }} register: result until: result|success - retries: 5 + retries: 50 delay: 5 changed_when: False @@ -52,7 +52,7 @@ shell: "docker -H swarm.lain:{{ swarm_manager_port }} info | grep 'Nodes: ' | awk '{ print $2 }'" register: swarm_cluster_nodes until: swarm_cluster_nodes.stdout|int == {{ groups['nodes'] | length }} - retries: 5 + retries: 50 delay: 5 changed_when: False diff --git a/prepare.sh b/prepare.sh index 841a1a1..7847656 100755 --- a/prepare.sh +++ b/prepare.sh @@ -15,24 +15,34 @@ mkdir -p playbooks/roles/deployd/files mkdir -p playbooks/roles/lainlet/files mkdir -p playbooks/roles/calico/files/bin -wget -c https://github.com/laincloud/networkd/releases/download/v2.3.0/networkd -O playbooks/roles/networkd/files/networkd +wget -c https://github.com/laincloud/networkd/releases/download/v2.3.0/networkd.xz -O playbooks/roles/networkd/files/networkd.xz -wget -c https://github.com/laincloud/deployd/releases/download/v2.3.0/deployd -O playbooks/roles/deployd/files/deployd +wget -c https://github.com/laincloud/deployd/releases/download/v2.3.0/deployd.xz -O playbooks/roles/deployd/files/deployd.xz -wget -c https://github.com/laincloud/lainlet/releases/download/v2.0.5/lainlet -O playbooks/roles/lainlet/files/lainlet +wget -c https://github.com/laincloud/lainlet/releases/download/v2.3.0/lainlet.xz -O playbooks/roles/lainlet/files/lainlet.xz -wget -c https://github.com/projectcalico/calicoctl/releases/download/v1.2.1/calicoctl -O playbooks/roles/calico/files/bin/calicoctl +wget -c https://github.com/laincloud/calicoctl/releases/download/v1.2.1/calicoctl.xz -O playbooks/roles/calico/files/bin/calicoctl.xz -wget -c https://github.com/projectcalico/felix/releases/download/2.2.2/calico-felix -O playbooks/roles/calico/files/bin/calico-felix +wget -c https://github.com/laincloud/calicoctl/releases/download/v1.2.1/allocate-ipip-addr.xz -O playbooks/roles/calico/files/bin/allocate-ipip-addr.xz -wget -c https://github.com/projectcalico/bird/releases/download/v0.3.1/bird -O playbooks/roles/calico/files/bin/bird +wget -c https://github.com/laincloud/calicoctl/releases/download/v1.2.1/startup.xz -O playbooks/roles/calico/files/bin/startup.xz -wget -c https://github.com/projectcalico/bird/releases/download/v0.3.1/bird6 -O playbooks/roles/calico/files/bin/bird6 +wget -c https://github.com/laincloud/felix/releases/download/2.2.2/calico-felix.xz -O playbooks/roles/calico/files/bin/calico-felix.xz -wget -c https://github.com/projectcalico/confd/releases/download/v0.11.2/confd -O playbooks/roles/calico/files/bin/confd +wget -c https://github.com/laincloud/confd/releases/download/v0.11.2/confd.xz -O playbooks/roles/calico/files/bin/confd.xz -wget -c https://github.com/laincloud/libnetwork-plugin/releases/download/v1.1.0/libnetwork-plugin -O playbooks/roles/calico/files/bin/libnetwork-plugin +wget -c https://github.com/laincloud/libnetwork-plugin/releases/download/v1.1.0/libnetwork-plugin.xz -O playbooks/roles/calico/files/bin/libnetwork-plugin.xz -wget -c https://github.com/laincloud/calicoctl/releases/download/v1.2.1/allocate-ipip-addr -O playbooks/roles/calico/files/bin/allocate-ipip-addr +wget -c https://github.com/projectcalico/bird/releases/download/v0.3.1/bird -O playbooks/roles/calico/files/bin/bird + +wget -c https://github.com/projectcalico/bird/releases/download/v0.3.1/bird6 -O playbooks/roles/calico/files/bin/bird6 -wget -c https://github.com/laincloud/calicoctl/releases/download/v1.2.1/startup -O playbooks/roles/calico/files/bin/startup +unxz -kf playbooks/roles/networkd/files/networkd.xz +unxz -kf playbooks/roles/deployd/files/deployd.xz +unxz -kf playbooks/roles/lainlet/files/lainlet.xz +unxz -kf playbooks/roles/calico/files/bin/calicoctl.xz +unxz -kf playbooks/roles/calico/files/bin/allocate-ipip-addr.xz +unxz -kf playbooks/roles/calico/files/bin/startup.xz +unxz -kf playbooks/roles/calico/files/bin/calico-felix.xz +unxz -kf playbooks/roles/calico/files/bin/confd.xz +unxz -kf playbooks/roles/calico/files/bin/libnetwork-plugin.xz