Add moonv4 into Compass4nfv 53/38153/6
authorchigang <chigang@huawei.com>
Wed, 26 Jul 2017 09:19:30 +0000 (17:19 +0800)
committerchigang <chigang@huawei.com>
Fri, 28 Jul 2017 01:22:13 +0000 (09:22 +0800)
JIRA:-

To deploy moon master, export MOON_CFG env like below compass deploy:
export MOON_CFG="master:flag=Disable,slave:flag=Enable,slave:name=slave1,slave:master_ip=master_ip"

To deploy moon slave, export MOON_CFG env like below compass deploy:
export MOON_CFG="master:flag=Enable,slave:flag=Disable,slave:name=slave1,slave:master_ip=master_ip"

Change-Id: I21c0186a029c508d390c69112b43510d9c5b9c5c
Signed-off-by: chigang <chigang@huawei.com>
14 files changed:
deploy/adapters/ansible/openstack/HA-ansible-multinodes.yml
deploy/client.py
deploy/compass_conf/flavor/openstack_ocata.conf
deploy/compass_conf/package_installer/ansible-ocata.conf
deploy/compass_conf/package_metadata/openstack.conf
deploy/compass_conf/role/openstack_ocata_ansible.conf
deploy/compass_conf/templates/ansible_installer/openstack_ocata/vars/HA-ansible-multinodes.tmpl
deploy/conf/base.conf
deploy/conf/hardware_environment/huawei-pod1/os-odl_l2-moon-ha.yml
deploy/conf/vm_environment/os-odl_l2-moon-ha.yml
deploy/deploy_host.sh
plugins/moon/plugins.desc [new file with mode: 0644]
plugins/moon/roles/moon/tasks/main.yml [new file with mode: 0644]
plugins/moon/roles/moon/tasks/moon.yml [new file with mode: 0644]

index 3691a92..40c70ac 100644 (file)
@@ -35,3 +35,8 @@
     - setup-openvswitch
     - setup-opendaylight
     - post-openstack
+
+- hosts: moon
+  remote_user: root
+  roles:
+    - moon
index 366ae41..5eab212 100644 (file)
@@ -250,9 +250,9 @@ opts = [
     cfg.StrOpt('odl_l3_agent',
                help='odl l3 agent enable flag',
                default='Disable'),
-    cfg.StrOpt('moon',
-               help='moon enable flag',
-               default='Disable'),
+    cfg.StrOpt('moon_cfg',
+               help='moon config',
+               default='master:flag=Disable,slave:flag=Disable,slave:name=slave1,slave:master_ip=master_ip'),  # noqa
     cfg.StrOpt('onos_sfc',
                help='onos_sfc enable flag',
                default='Disable'),
@@ -728,6 +728,30 @@ class CompassClient(object):
                 'password': password
             }
 
+        moon_cfgs = [
+            cfg
+            for cfg in CONF.moon_cfg.split(',')
+            if cfg
+        ]
+        LOG.info(
+            'moon configure: %s', moon_cfgs
+        )
+        moon_cfg = {}
+        for cfg in moon_cfgs:
+            if ':' not in cfg:
+                raise Exception(
+                    'there is no : in cfg %s' % cfg  # noqa
+                )
+            role, conf_pair = cfg.split(':', 1)
+            if '=' not in conf_pair:
+                raise Exception(
+                    'there is no = in %s configure pair' % conf_pair
+                )
+            key, value = conf_pair.split('=', 1)
+            moon_cfg[role] = {} if role not in moon_cfg else moon_cfg[role]
+            moon_cfg[role][key] = value
+        package_config["moon_cfg"] = moon_cfg
+
         package_config["security"] = {"service_credentials": service_credential_cfg,  # noqa
                                       "console_credentials": console_credential_cfg}  # noqa
 
@@ -761,12 +785,8 @@ class CompassClient(object):
         package_config['enable_secgroup'] = (CONF.enable_secgroup == "true")
         package_config['enable_fwaas'] = (CONF.enable_fwaas == "true")
         package_config['enable_vpnaas'] = (CONF.enable_vpnaas == "true")
-        package_config[
-            'odl_l3_agent'] = "Enable" if CONF.odl_l3_agent == "Enable" else "Disable"   # noqa
-        package_config[
-            'moon'] = "Enable" if CONF.moon == "Enable" else "Disable"
-        package_config[
-            'onos_sfc'] = "Enable" if CONF.onos_sfc == "Enable" else "Disable"
+        package_config['odl_l3_agent'] = "Enable" if CONF.odl_l3_agent == "Enable" else "Disable"   # noqa
+        package_config['onos_sfc'] = "Enable" if CONF.onos_sfc == "Enable" else "Disable"   # noqa
         package_config['plugins'] = []
         if CONF.plugins:
             for item in CONF.plugins.split(','):
index c532ac6..1179afa 100755 (executable)
@@ -25,7 +25,7 @@ FLAVORS = [{
     'display_name': 'HA-ansible-multinodes-ocata',
     'template': 'HA-ansible-multinodes.tmpl',
     'roles': [
-        'controller', 'compute', 'ha', 'odl', 'onos', 'opencontrail', 'ceph', 'ceph-adm', 'ceph-mon', 'ceph-osd', 'sec-patch', 'ceph-osd-node'
+        'controller', 'compute', 'ha', 'odl', 'onos', 'opencontrail', 'ceph', 'ceph-adm', 'ceph-mon', 'ceph-osd', 'ceph-osd-node', 'moon'
     ],
 }]
 
index 0286b4e..1df2153 100755 (executable)
@@ -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'],
+    'inventory_group': ['controller', 'compute', 'ha', 'odl', 'onos', 'opencontrail', 'ceph_adm', 'ceph_mon', 'ceph_osd', 'moon'],
     'group_variable': 'all',
     'etc_hosts_path': 'roles/pre-openstack/templates/hosts',
     'runner_dirs': ['roles','openstack_ocata/templates','openstack_ocata/roles']
index cfe6635..f045868 100755 (executable)
@@ -113,14 +113,6 @@ METADATA = {
             'default_value': 'Disable'
         }
     },
-    'moon': {
-        '_self': {
-            'mapping_to': 'moon',
-            'field': 'anytype',
-            'is_required':False,
-            'default_value': 'Disable'
-        }
-    },
     'plugins': {
         '_self': {
             'mapping_to': 'plugins',
@@ -471,5 +463,50 @@ METADATA = {
             }
         }
     },
-
+    'moon_cfg': {
+        '_self': {
+            'required_in_whole_config': False,
+            'mapping_to': 'moon_cfg'
+        },
+        'master': {
+            '_self': {
+                'required_in_whole_config': False,
+                'mapping_to': 'master'
+            },
+            'flag': {
+                '_self': {
+                    'is_required': False,
+                    'field': 'general',
+                    'mapping_to': 'flag'
+                }
+            },
+        },
+        'slave': {
+            '_self': {
+                'required_in_whole_config': False,
+                'mapping_to': 'slave'
+            },
+            'flag': {
+                '_self': {
+                    'is_required': False,
+                    'field': 'general',
+                    'mapping_to': 'flag'
+                }
+            },
+            'name': {
+                '_self': {
+                    'is_required': False,
+                    'field': 'general',
+                    'mapping_to': 'name'
+                }
+            },
+            'master_ip': {
+                '_self': {
+                    'is_required': False,
+                    'field': 'general',
+                    'mapping_to': 'master_ip'
+                }
+            },
+        }
+    }
 }
index dfe426d..bfb5417 100755 (executable)
@@ -112,4 +112,14 @@ ROLES = [{
     'display': 'sec-patch node',
     'description': 'Security Patch Node',
     'optional': True
+}, {
+    'role': 'none',
+    'display': 'none node',
+    'description': 'Only install OS Node',
+    'optional': True
+}, {
+    'role': 'moon',
+    'display': 'moon master or slave node',
+    'description': "Moon master/slave Node",
+    'optional': True
 }]
index b7b6b91..e62e58d 100755 (executable)
@@ -56,7 +56,6 @@ enable_secgroup: $getVar('enable_secgroup', True)
 enable_fwaas: $getVar('enable_fwaas', True)
 enable_vpnaas: $getVar('enable_vpnaas', True)
 odl_l3_agent: $getVar('odl_l3_agent', 'Disable')
-moon: $getVar('moon', 'Disable')
 ha_network: $getVar('ha_network', 'Disable')
 onos_nic: $getVar('onos_nic', 'eth2')
 onos_sfc: $getVar('onos_sfc', 'Disable')
@@ -240,3 +239,9 @@ odl_base_features: ['config', 'standard', 'region', 'package', 'kar', 'ssh', 'ma
 odl_extra_features: ['odl-l2switch-switch', 'odl-ovsdb-plugin', 'odl-ovsdb-openstack', 'odl-ovsdb-northbound','odl-dlux-core', 'odl-restconf-all', 'odl-mdsal-clustering', 'odl-openflowplugin-flow-services', 'odl-netconf-connector', 'odl-netconf-connector-ssh', 'jolokia-osgi']
 odl_features: "{{ odl_base_features + odl_extra_features }}"
 odl_api_port: 8080
+
+#set moon_cfg = $getVar('moon_cfg', {})
+moon_master: $moon_cfg.master.flag
+moon_slave: $moon_cfg.slave.flag
+moon_slave_name: $moon_cfg.slave.name
+moon_master_ip: $moon_cfg.slave.master_ip
index b474e28..bdbea45 100644 (file)
@@ -68,3 +68,4 @@ export OS_CONFIG_FILENAME=""
 export SERVICE_CREDENTIALS="image:service=service,compute:service=service,dashboard:service=service,identity:service=service,image:service=service,metering:service=service,network:service=service,rabbitmq:service=service,volume:service=service,mysql:service=service,heat:heat=heat_db_secret,alarming:aodh=aodh_db_secret,policy:congress=service"
 export CONSOLE_CREDENTIALS="admin:console=console,demo:console=console,compute:console=console,dashboard:console=console,identity:console=console,image:console=console,metering:console=console,network:console=console,object-store:console=console,volume:console=console,heat:heat=heat_secret,alarming:aodh=aodh_secret,policy:congress=console"
 export PACKAGE_CONFIG_FILENAME=""
+export MOON_CFG=${MOON_CFG:-"master:flag=Disable,slave:flag=Disable,slave:name=slave1,slave:master_ip=master_ip"}
index dca3228..d2447c1 100644 (file)
@@ -15,9 +15,9 @@ POWER_TOOL: ipmitool
 ipmiUser: root
 ipmiVer: '2.0'
 
-moon: "Enable"
 plugins:
   - opendaylight: "Enable"
+  - moon: "Enable"
 
 hosts:
   - name: host1
@@ -74,5 +74,4 @@ hosts:
     ipmiIp: 172.16.130.31
     ipmiPass: Opnfv@pod1
     roles:
-      - compute
-      - ceph-osd
+      - moon
index 759055d..5a02cbf 100644 (file)
@@ -11,9 +11,9 @@
 TYPE: virtual
 FLAVOR: cluster
 
-moon: "Enable"
 plugins:
   - opendaylight: "Enable"
+  - moon: "Enable"
 
 hosts:
   - name: host1
@@ -45,5 +45,4 @@ hosts:
 
   - name: host5
     roles:
-      - compute
-      - ceph-osd
+      - moon
index 1556651..aa90dca 100755 (executable)
@@ -47,7 +47,8 @@ function deploy_host(){
     --deployment_timeout="${DEPLOYMENT_TIMEOUT}" --${POLL_SWITCHES_FLAG} --dashboard_url="${DASHBOARD_URL}" \
     --cluster_vip="${VIP}" --network_cfg="$NETWORK" --neutron_cfg="$NEUTRON" \
     --enable_secgroup="${ENABLE_SECGROUP}" --enable_fwaas="${ENABLE_FWAAS}" --expansion="${EXPANSION}" \
-    --rsa_file="$rsa_file" --enable_vpnaas="${ENABLE_VPNAAS}" --odl_l3_agent="${odl_l3_agent}" --moon="${moon}" --onos_sfc="${onos_sfc}" --plugins="$plugins"
+    --rsa_file="$rsa_file" --enable_vpnaas="${ENABLE_VPNAAS}" --odl_l3_agent="${odl_l3_agent}" \
+    --moon_cfg="${MOON_CFG}" --onos_sfc="${onos_sfc}" --plugins="$plugins"
 
     RET=$?
     sleep $((AYNC_TIMEOUT+5))
diff --git a/plugins/moon/plugins.desc b/plugins/moon/plugins.desc
new file mode 100644 (file)
index 0000000..2d0e56f
--- /dev/null
@@ -0,0 +1,55 @@
+# ##############################################################
+# This is an example for add a plugin into Compass4nfv
+# It illustrates how feature components can be integrated into Compass4nfv
+# together with scenarios.
+#
+#
+# More details can be found in the development document.
+# ##############################################################
+---
+plugin:
+  # plugin name,it is also as the switch to enable/disable plugin in scenario
+  # files
+  name: moon
+
+  description: plugin introduce and description
+  maintainers:
+    - ruan.he@orange.com
+
+  # true: this plugin is deployed separately on a new node
+  # false: this plugin is deployed on controller or compute node
+  independent_hosts: true
+
+  # artifact: packege download url for this plugin
+  artifacts:
+    url:
+
+  # global_vars:
+  # define the parameters required by the plugin
+  # and its value will be defined and passed by compass4nfv
+  global_vars:
+    - xxx: yyy
+    - ntp_server: "pool.ntp.org"
+
+  # orchestration
+  # A plugin can have mutiple components, each component may need to be
+  # installed on different inventory or have its own configuration.
+  # due to Compass4nfv currently only supports ansible, so each component
+  # of the installation and configuration script need to be use ansible.
+  # cm : congfiguration management tool : only ansible support
+  # role: each component corresponds to ansible script that locates in the same
+  # directory as plugin.desc.
+  # phrase: pre_openstack -- the component is installed after the OS
+  # provisioning, before the OpenStack deployment.
+  # phrase: post_openstack -- the component is installed before the OpenStack
+  # deployment.
+  # inventory: if the phrase is pre_openstack, inventory can be controller and
+  # compute. if the phrase is post_openstack, inventory can be get from the file
+  # openstack-ansible.inventory
+  orchestration:
+    cm: ansible
+    roles:
+      - role: moon
+        phrase: post_openstack
+        inventory:
+          - moon
diff --git a/plugins/moon/roles/moon/tasks/main.yml b/plugins/moon/roles/moon/tasks/main.yml
new file mode 100644 (file)
index 0000000..9128312
--- /dev/null
@@ -0,0 +1,11 @@
+##############################################################################
+# Copyright (c) 2016-2017 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
+##############################################################################
+---
+- include: moon.yml
+  when: moon is defined and moon == "Enable" and ansible_os_family == "Debian"
diff --git a/plugins/moon/roles/moon/tasks/moon.yml b/plugins/moon/roles/moon/tasks/moon.yml
new file mode 100644 (file)
index 0000000..4edc457
--- /dev/null
@@ -0,0 +1,204 @@
+#############################################################################
+# Copyright (c) 2017 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: rm pip.conf
+  file:
+    path: /root/.pip/pip.conf
+    state: absent
+
+- name: check docker.list stat
+  stat:
+    path: /etc/apt/sources.list.d/docker.list
+  register: stat_result
+
+# [WARNING]: Consider using get_url or uri module rather than running wget
+- name: install docker
+  remote_user: root
+  shell: wget -qO- https://get.docker.com/ | sh
+  when: stat_result.stat.exists == False
+
+- name: remove conflict packages
+  remote_user: root
+  action: "{{ ansible_pkg_mgr }} name={{ item }} state=absent"
+  with_items:
+    - python3-pkg-resources
+
+- name: install dependent packages
+  remote_user: root
+  action: "{{ ansible_pkg_mgr }} name={{ item }} state=present"
+  with_items:
+    - git
+    - python3-dev
+    - python3-pip
+    - python3-venv
+    - python3-setuptools
+
+- name: make ubuntu dir
+  file:
+    path: /home/ubuntu
+    state: directory
+    mode: 0755
+
+- name: check moon code dir exists
+  stat:
+    path: /home/ubuntu/moon
+  register: stat_result
+
+- name: fetch moon source code
+  shell: git clone https://git.opnfv.org/moon /home/ubuntu/moon
+  when: stat_result.stat.exists == False
+
+- name: create moon etc conf
+  remote_user: root
+  file:
+    src: /home/ubuntu/moon/moonv4/moon_orchestrator/conf
+    dest: /etc/moon
+    state: link
+
+- name: configure moon.conf
+  lineinfile:
+    dest: /etc/moon/moon.conf
+    regexp: '{{ item.regexp }}'
+    line: '{{ item.line }}'
+  with_items:
+    - regexp: '^dist_dir=.*'
+      line: 'dist_dir=/home/ubuntu/moon/moonv4/moon_orchestrator/dist'
+    - regexp: '^password=.*'
+      line: 'password={{ ADMIN_PASS }}'
+
+- name: configure moon.conf for moon slave
+  lineinfile:
+    dest: /etc/moon/moon.conf
+    regexp: '{{ item.regexp }}'
+    line: '{{ item.line }}'
+  with_items:
+    - regexp: '^slave_name=.*'
+      line: 'slave_name={{ moon_slave_name }}'
+    - regexp: '^master_url=.*'
+      line: 'master_url=rabbit://moon:p4sswOrd1@{{ moon_master_ip }}/moon'
+    - regexp: '^master_login.*'
+      line: 'master_login=moon'
+    - regexp: '^master_password=.*'
+      line: 'master_password=p4sswOrd1'
+  when: moon_slave == "Enable"
+
+- name: list container netwroks
+  shell: docker network ls --format \{\{.Name\}\}
+  register: result
+
+- name: dump template generated file content
+  debug:
+    msg: "{{ result.stdout }}"
+
+- name: create moon network
+  shell: docker network create -d bridge --subnet=172.18.0.0/16 --gateway=172.18.0.1 moon
+  when: result.stdout.find("moon") == -1
+
+- name: list containers
+  shell: docker ps --format \{\{.Names\}\}
+  register: result
+
+- name: start rabbitmq
+  shell: |
+    docker run -dti \
+               --net=moon \
+               --hostname messenger \
+               --name messenger \
+               --link messenger:messenger \
+               -e RABBITMQ_DEFAULT_USER=moon \
+               -e RABBITMQ_DEFAULT_PASS=p4sswOrd1 \
+               -e RABBITMQ_NODENAME=rabbit@messenger \
+               -e RABBITMQ_DEFAULT_VHOST=moon \
+               -p 5671:5671 \
+               -p 5672:5672 \
+               rabbitmq:3-management
+  when: result.stdout.find("messenger") == -1
+
+- name: dump template generated file content
+  debug:
+    msg: "{{ result.stdout }}"
+
+- name: start mysql
+  shell: docker run -dti \
+                    --net=moon \
+                    --hostname db \
+                    --name db \
+                    -e MYSQL_ROOT_PASSWORD=p4sswOrd1 \
+                    -e MYSQL_DATABASE=moon \
+                    -e MYSQL_USER=moon \
+                    -e MYSQL_PASSWORD=p4sswOrd1 \
+                    -p 3306:3306 \
+                    mysql:latest
+  when: result.stdout.find("db") == -1
+
+- name: set messenger and db hosts name
+  remote_user: root
+  lineinfile:
+    dest: /etc/hosts
+    regexp: 'messenger'
+    line: '127.0.0.1 messenger db'
+
+- name: set keystone hosts name
+  remote_user: root
+  lineinfile:
+    dest: /etc/hosts
+    regexp: 'keystone'
+    line: '{{ internal_vip.ip }} keystone'
+
+- name: update pip
+  remote_user: root
+  shell: pip3 install pip --upgrade
+
+- name: run moon build_all.sh
+  shell: |
+    export MOON_HOME=/home/ubuntu/moon/moonv4;
+    cd ${MOON_HOME}/bin;
+    source build_all.sh;
+  args:
+    executable: /bin/bash
+
+- name: modify moon start.sh
+  lineinfile:
+    dest: /home/ubuntu/moon/moonv4/bin/start.sh
+    state: absent
+    regexp: "{{ item }}"
+  with_items:
+    - "^sleep 20s"
+    - "^.*starting Keystone container.*"
+    - "^docker run .*keystone.*"
+
+- name: run moon start.sh
+  shell: |
+    export MOON_HOME=/home/ubuntu/moon/moonv4;
+    cd ${MOON_HOME}/moon_orchestrator;
+    if [ ! -d tests/venv ]; then
+        pyvenv tests/venv;
+        source tests/venv/bin/activate;
+        pip3 install -r requirements.txt --upgrade;
+        pip3 install dist/moon_db-0.1.0.tar.gz --upgrade;
+        pip3 install dist/moon_utilities-0.1.0.tar.gz --upgrade;
+        pip3 install .  --upgrade;
+        cd ../moon_db/;
+        pip3 install -r requirements.txt --upgrade;
+    else
+        source tests/venv/bin/activate;
+    fi
+    killall -9  /home/ubuntu/moon/moonv4/moon_orchestrator/tests/venv/bin/python3.5
+    sleep 3
+    ( ( nohup ../bin/start.sh > /tmp/start.log 2>&1 ) & );
+  args:
+    executable: /bin/bash
+
+- name: fetch template generated file content
+  shell: whoami
+  register: template_gen_out
+
+- name: dump template generated file content
+  debug:
+    msg: "{{ template_gen_out.stdout }}"