From caecd2df90fd01fa363f3bb92adf2d28f2ed6dd3 Mon Sep 17 00:00:00 2001 From: Yifei Xue Date: Thu, 8 Dec 2016 16:03:12 +0800 Subject: Add VIM registration for Tacker Mitaka JIRA: COMPASS-510 Change-Id: I05c2a0670d4c75f516f53f9849793e02e92cb559 Signed-off-by: Yifei Xue --- .../roles/tacker/files/tacker.conf | 36 ++++ .../roles/tacker/tasks/tacker_controller.yml | 215 +++++++++++++++++++++ .../roles/tacker/templates/config.yaml | 4 + .../roles/tacker/templates/tackerc.sh | 12 ++ 4 files changed, 267 insertions(+) create mode 100644 deploy/adapters/ansible/openstack_mitaka/roles/tacker/files/tacker.conf create mode 100755 deploy/adapters/ansible/openstack_mitaka/roles/tacker/tasks/tacker_controller.yml create mode 100644 deploy/adapters/ansible/openstack_mitaka/roles/tacker/templates/config.yaml create mode 100644 deploy/adapters/ansible/openstack_mitaka/roles/tacker/templates/tackerc.sh diff --git a/deploy/adapters/ansible/openstack_mitaka/roles/tacker/files/tacker.conf b/deploy/adapters/ansible/openstack_mitaka/roles/tacker/files/tacker.conf new file mode 100644 index 00000000..0c90dcb9 --- /dev/null +++ b/deploy/adapters/ansible/openstack_mitaka/roles/tacker/files/tacker.conf @@ -0,0 +1,36 @@ +description "OpenStack Tacker Server" +author "Yifei Xue " + +start on runlevel [2345] +stop on runlevel [!2345] + +chdir /var/run + +respawn +respawn limit 20 5 +limit nofile 65535 65535 + +pre-start script + for i in lock run log lib ; do + mkdir -p /var/$i/tacker + chown root /var/$i/tacker + done +end script + +script + [ -x "/usr/local/bin/tacker-server" ] || exit 0 + DAEMON_ARGS="" + CONFIG_FILE="/usr/local/etc/tacker/tacker.conf" + USE_SYSLOG="" + USE_LOGFILE="" + NO_OPENSTACK_CONFIG_FILE_DAEMON_ARG="" + [ -r /etc/default/openstack ] && . /etc/default/openstack + [ -r /etc/default/$UPSTART_JOB ] && . /etc/default/$UPSTART_JOB + [ "x$USE_SYSLOG" = "xyes" ] && DAEMON_ARGS="$DAEMON_ARGS --use-syslog" + [ "x$USE_LOGFILE" != "xno" ] && DAEMON_ARGS="$DAEMON_ARGS --log-file=/var/log/tacker/tacker.log" + [ -z "$NO_OPENSTACK_CONFIG_FILE_DAEMON_ARG" ] && DAEMON_ARGS="$DAEMON_ARGS --config-file=$CONFIG_FILE" + + exec start-stop-daemon --start --chdir /var/lib/tacker \ + --chuid root:root --make-pidfile --pidfile /var/run/tacker/tacker.pid \ + --exec /usr/local/bin/tacker-server -- ${DAEMON_ARGS} +end script diff --git a/deploy/adapters/ansible/openstack_mitaka/roles/tacker/tasks/tacker_controller.yml b/deploy/adapters/ansible/openstack_mitaka/roles/tacker/tasks/tacker_controller.yml new file mode 100755 index 00000000..cd3b19e8 --- /dev/null +++ b/deploy/adapters/ansible/openstack_mitaka/roles/tacker/tasks/tacker_controller.yml @@ -0,0 +1,215 @@ +############################################################################## +# Copyright (c) 2016 HUAWEI TECHNOLOGIES CO.,LTD and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## +--- +- name: get http server + shell: awk -F'=' '/compass_server/ {print $2}' /etc/compass.conf + register: http_server + +- name: creat tacker_home, tacker_client_home, tacker_horizon_home + shell: > + mkdir -p /opt/tacker + mkdir -p /opt/tacker_client + mkdir -p /opt/tacker_horizon + +- name: download tacker package + get_url: url="http://{{ http_server.stdout_lines[0] }}/packages/tacker/{{ tacker_pkg_name }}" dest=/opt/{{ tacker_pkg_name }} + +- name: download tacker_client package + get_url: url="http://{{ http_server.stdout_lines[0] }}/packages/tacker/{{ tacker_client_pkg_name }}" dest=/opt/{{ tacker_client_pkg_name }} + +- name: download tacker_horizon package + get_url: url="http://{{ http_server.stdout_lines[0] }}/packages/tacker/{{ tacker_horizon_pkg_name }}" dest=/opt/{{ tacker_horizon_pkg_name }} + +- name: extract tacker package + command: su -s /bin/sh -c "tar xzf /opt/{{ tacker_pkg_name }} -C {{ tacker_home }} --strip-components 1 --no-overwrite-dir -k --skip-old-files" + +- name: extract tacker_client package + command: su -s /bin/sh -c "tar xzf /opt/{{ tacker_client_pkg_name }} -C {{ tacker_client_home }} --strip-components 1 --no-overwrite-dir -k --skip-old-files" + +- name: extract tacker_horizon package + command: su -s /bin/sh -c "tar xzf /opt/{{ tacker_horizon_pkg_name }} -C {{ tacker_horizon_home }} --strip-components 1 --no-overwrite-dir -k --skip-old-files" + +- name: edit ml2_conf.ini + shell: crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 extension_drivers port_security; + +- name: Restart neutron-server + service: name=neutron-server state=restarted + +- name: "create haproxy configuration for tacker" + template: + src: "haproxy-tacker-cfg.j2" + dest: "/tmp/haproxy-tacker.cfg" + +- name: get the current haproxy configuration + shell: cat /etc/haproxy/haproxy.cfg + register: ha_cfg + +- name: "combination of the haproxy configuration" + shell: "cat /tmp/haproxy-tacker.cfg >> /etc/haproxy/haproxy.cfg" + when: ha_cfg.stdout.find('8888') == -1 + +- name: "delete temporary configuration file" + file: + dest: "/tmp/haproxy-tacker.cfg" + state: "absent" + +- name: "restart haproxy" + service: + name: "haproxy" + state: "restarted" + +- name: drop and recreate tacker database + shell: mysql -e "drop database if exists tacker;"; + mysql -e "create database tacker character set utf8;"; + mysql -e "grant all on tacker.* to 'tacker'@'%' identified by 'TACKER_DBPASS';"; + when: inventory_hostname == haproxy_hosts.keys()[0] + +- name: get the openstack user info + shell: . /opt/admin-openrc.sh; openstack user list + register: user_info + +- name: get the openstack service info + shell: . /opt/admin-openrc.sh; openstack service list + register: service_info + +- name: get the openstack endpoint info + shell: . /opt/admin-openrc.sh; openstack endpoint list + register: endpoint_info + +- name: delete the existed tacker endpoint + shell: . /opt/admin-openrc.sh; openstack endpoint delete $(openstack endpoint list | grep tacker | awk '{print $2}') + when: endpoint_info.stdout.find('tacker') != -1 and inventory_hostname == haproxy_hosts.keys()[0] + +- name: delete the existed tacker service + shell: . /opt/admin-openrc.sh; openstack service delete tacker + when: service_info.stdout.find('tacker') != -1 and inventory_hostname == haproxy_hosts.keys()[0] + +- name: delete the existed tacker user + shell: . /opt/admin-openrc.sh; openstack user delete tacker + when: user_info.stdout.find('tacker') != -1 and inventory_hostname == haproxy_hosts.keys()[0] + +- name: create tacker user with admin privileges + shell: . /opt/admin-openrc.sh; openstack user create --password console tacker; openstack role add --project service --user tacker admin; + when: inventory_hostname == haproxy_hosts.keys()[0] + +- name: creat tacker service + shell: > + . /opt/admin-openrc.sh; openstack service create --name tacker --description "Tacker Project" nfv-orchestration + when: inventory_hostname == haproxy_hosts.keys()[0] + +- name: provide an endpoint to tacker service + shell: > + . /opt/admin-openrc.sh; openstack endpoint create --region RegionOne \ + --publicurl 'http://{{ public_vip.ip }}:8888/' \ + --adminurl 'http://{{ internal_vip.ip }}:8888/' \ + --internalurl 'http://{{ internal_vip.ip }}:8888/' tacker + when: inventory_hostname == haproxy_hosts.keys()[0] + +- name: install pip package + pip: name=Babel state=present version=2.3.4 + +- name: install pip packages + shell: > + pip install tosca-parser heat-translator oslosphinx; + +- name: install tacker + shell: > + . /opt/admin-openrc.sh; cd {{ tacker_home }}; python setup.py install + +- name: create 'tacker' directory in '/var/cache', set ownership and permissions + shell: > + mkdir -p /var/cache/tacker +# sudo chown :root /var/cache/tacker +# chmod 700 /var/cache/tacker + +- name: create 'tacker' directory in '/var/log' + shell: mkdir -p /var/log/tacker + +- name: copy tacker configs + template: src={{ item.src }} dest=/opt/os_templates + with_items: "{{ tacker_configs_templates }}" + +- name: edit tacker configuration file + shell: crudini --merge /usr/local/etc/tacker/tacker.conf < /opt/os_templates/tacker.j2 + +- name: populate tacker database + shell: > + . /opt/admin-openrc.sh; /usr/local/bin/tacker-db-manage --config-file /usr/local/etc/tacker/tacker.conf upgrade head + when: inventory_hostname == haproxy_hosts.keys()[0] + +- name: install tacker client + shell: > + . /opt/admin-openrc.sh; cd {{ tacker_client_home }}; python setup.py install + +- name: install tacker horizon + shell: > + . /opt/admin-openrc.sh; cd {{ tacker_horizon_home }}; python setup.py install + +- name: enable tacker horizon in dashboard + shell: > + cp {{ tacker_horizon_home }}/openstack_dashboard_extensions/* /usr/share/openstack-dashboard/openstack_dashboard/enabled/ + +- name: restart apache server + shell: service apache2 restart + +- name: create tacker service + copy: src=tacker.conf dest=/etc/init + +- name: create tacker service work dir + file: path=/var/lib/tacker state=directory + +- name: link the tacker service + file: + src: /etc/init/tacker.conf + dest: /etc/init.d/tacker + state: link + +- name: start tacker service + shell: service tacker start + +- name: create tackerc file + template: src=tackerc.sh dest=/opt/tackerc.sh mode=777 + +- name: get the nfv_user info + shell: . /opt/tackerc.sh; openstack user list + register: nfvuser_info + +- name: delete the existed nfv user + shell: . /opt/tackerc.sh; openstack user delete nfv_user + when: nfvuser_info.stdout.find('nfv') != -1 and inventory_hostname == haproxy_hosts.keys()[0] + +- name: get the openstack project info + shell: . /opt/tackerc.sh; openstack project list + register: nfvproject_info + +- name: delete the existed nfv project + shell: . /opt/tackerc.sh; openstack project delete $(openstack project list | grep nfv | awk '{print $2}') + when: nfvproject_info.stdout.find('nfv') != -1 and inventory_hostname == haproxy_hosts.keys()[0] + +- name: create an nfv project + shell: . /opt/tackerc.sh; openstack project create --description "NFV Project" nfv + when: inventory_hostname == haproxy_hosts.keys()[0] + +- name: create nfv user with admin privileges + shell: . /opt/tackerc.sh; openstack user create --password console nfv_user; openstack role add --project nfv --user nfv_user admin; + when: inventory_hostname == haproxy_hosts.keys()[0] + +- name: create config.yml + template: src=config.yaml dest=/opt/config.yaml + +- name: check if tacker running + shell: . /opt/tackerc.sh; while (!(tacker ext-list)); do sleep 30; done + +- name: register VIM to tacker + shell: . /opt/tackerc.sh; tacker vim-register --config-file /opt/config.yaml --description "OpenStack" --name VIM0 + when: inventory_hostname == haproxy_hosts.keys()[0] + +- name: restart tacker service + shell: service tacker stop; service tacker start + diff --git a/deploy/adapters/ansible/openstack_mitaka/roles/tacker/templates/config.yaml b/deploy/adapters/ansible/openstack_mitaka/roles/tacker/templates/config.yaml new file mode 100644 index 00000000..8f73e907 --- /dev/null +++ b/deploy/adapters/ansible/openstack_mitaka/roles/tacker/templates/config.yaml @@ -0,0 +1,4 @@ +auth_url: 'http://{{ public_vip.ip }}:5000/v2.0' +username: 'nfv_user' +password: 'console' +project_name: 'nfv' diff --git a/deploy/adapters/ansible/openstack_mitaka/roles/tacker/templates/tackerc.sh b/deploy/adapters/ansible/openstack_mitaka/roles/tacker/templates/tackerc.sh new file mode 100644 index 00000000..c673e7f1 --- /dev/null +++ b/deploy/adapters/ansible/openstack_mitaka/roles/tacker/templates/tackerc.sh @@ -0,0 +1,12 @@ +#!/bin/sh +export LC_ALL=C +export OS_NO_CACHE=true +export OS_TENANT_NAME=service +export OS_PROJECT_NAME=service +export OS_USERNAME=tacker +export OS_PASSWORD=console +export OS_AUTH_URL=http://{{ internal_vip.ip }}:5000/v2.0 +export OS_DEFAULT_DOMAIN=default +export OS_AUTH_STRATEGY=keystone +export OS_REGION_NAME=RegionOne +export TACKER_ENDPOINT_TYPE=internalurl -- cgit 1.2.3-korg