diff options
author | Guo Ruijing <ruijing.guo@intel.com> | 2016-06-21 03:03:32 +0800 |
---|---|---|
committer | Guo Ruijing <ruijing.guo@intel.com> | 2016-06-21 03:05:17 +0800 |
commit | 675eef731a098f83aa98c2021b151b7e5ba1da7d (patch) | |
tree | 77593df19c82bad2844743034600a93aa0255239 | |
parent | 3ec9f7fbd9ed74126ae92be3e7d4c16b39674987 (diff) |
Add fuel plugin for Yardstick
1. fuel can deploy yardstick
2. todo: fuel run yardstick
Change-Id: If1a4b178187d78bdc2d4c3b6469faff78dc51ead
Signed-off-by: Chou, David J <david.j.chou@intel.com>
Signed-off-by: Hinman, John <john.hinman@intel.com>
Signed-off-by: Guo Ruijing <ruijing.guo@intel.com>
-rw-r--r-- | fuel-plugin/LICENSE | 202 | ||||
-rw-r--r-- | fuel-plugin/README.md | 36 | ||||
-rwxr-xr-x | fuel-plugin/deployment_scripts/install.sh | 26 | ||||
-rw-r--r-- | fuel-plugin/deployment_scripts/puppet/manifests/yardstick-install.pp | 33 | ||||
-rw-r--r-- | fuel-plugin/deployment_tasks.yaml | 20 | ||||
-rw-r--r-- | fuel-plugin/environment_config.yaml | 0 | ||||
-rw-r--r-- | fuel-plugin/metadata.yaml | 36 | ||||
-rw-r--r-- | fuel-plugin/node_roles.yaml | 8 | ||||
-rwxr-xr-x | fuel-plugin/pre_build_hook | 31 | ||||
-rw-r--r-- | fuel-plugin/tasks.yaml | 1 | ||||
-rw-r--r-- | fuel-plugin/vagrant/Vagrantfile | 21 | ||||
-rwxr-xr-x | fuel-plugin/vagrant/build_fuel_plugin.sh | 16 |
12 files changed, 430 insertions, 0 deletions
diff --git a/fuel-plugin/LICENSE b/fuel-plugin/LICENSE new file mode 100644 index 000000000..e06d20818 --- /dev/null +++ b/fuel-plugin/LICENSE @@ -0,0 +1,202 @@ +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/fuel-plugin/README.md b/fuel-plugin/README.md new file mode 100644 index 000000000..b5a954269 --- /dev/null +++ b/fuel-plugin/README.md @@ -0,0 +1,36 @@ +plugin-yardstick +================ + +Plugin description +Installs Yardstick on base-os node via a fuel plugin. + + +To build: +1) install fuel plugin builder (fpb) + sudo apt-get install createrepo rpm dpkg-dev + easy_install pip + pip install fuel-plugin-builder + +2) build plugin + fpb --build <plugin-name> + e.g.: fpb --build plugin-yardstick + +3) copy plugin rpm to fuel master + e.g. scp plugin-yardstick-0.1-0.1.0-1.noarch.rpm <user>@<server-name>:~/ + +4) install plugin + fuel plugins --install <plugin-name>.rpm + +5) prepare fuel environment + on fuel dashboard, go to settings/other + enable yardstick plugin with checkbox + save settings + +6) add nodes to environment + +7) deploy + +8) run +Once deployed, SSH to deployed node. Find IP of yardstick node. +SSH to yardstick node, Activate yardstick: + source yardstick_env/bin/activate diff --git a/fuel-plugin/deployment_scripts/install.sh b/fuel-plugin/deployment_scripts/install.sh new file mode 100755 index 000000000..f0bb3e366 --- /dev/null +++ b/fuel-plugin/deployment_scripts/install.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +set -eux + +HOST=$1 +INSTALL_HOME=/opt/yardstick +rm -rf $INSTALL_HOME; mkdir -p $INSTALL_HOME + +cd $INSTALL_HOME + +sudo apt-get install -y python-virtualenv python-dev python-pip libffi-dev libssl-dev libxml2-dev libxslt1-dev +pip install --user virtualenv +pip install --upgrade virtualenv + +# create python virtual env +virtualenv $INSTALL_HOME/yardstick_venv +# source $INSTALL_HOME/yardstick_venv/bin/activate + +easy_install -U setuptools + +mkdir bin +cd $INSTALL_HOME/bin + +curl http://$HOST:8080/plugins/fuel-plugin-yardstick-0.9/repositories/ubuntu/yardstick.tar.gz | tar xzvf - + +pip install -r tests/ci/requirements.txt diff --git a/fuel-plugin/deployment_scripts/puppet/manifests/yardstick-install.pp b/fuel-plugin/deployment_scripts/puppet/manifests/yardstick-install.pp new file mode 100644 index 000000000..6547cb452 --- /dev/null +++ b/fuel-plugin/deployment_scripts/puppet/manifests/yardstick-install.pp @@ -0,0 +1,33 @@ +$fuel_settings = parseyaml(file('/etc/astute.yaml')) +$master_ip = $::fuel_settings['master_ip'] + +$access_hash = hiera_hash('access', {}) +$admin_tenant = $access_hash['tenant'] +$admin_user = $access_hash['user'] +$admin_password = $access_hash['password'] +$region = hiera('region', 'RegionOne') + +$service_endpoint = hiera('service_endpoint', $management_vip) +$ssl_hash = hiera_hash('use_ssl', {}) +$internal_auth_protocol = get_ssl_property($ssl_hash, {}, 'keystone', 'internal', 'protocol', 'http') +$internal_auth_address = get_ssl_property($ssl_hash, {}, 'keystone', 'internal', 'hostname', [$service_endpoint]) +$identity_uri = "${internal_auth_protocol}://${internal_auth_address}:5000" +$auth_url = "${identity_uri}/${auth_api_version}" + +exec { "install yardstick": + command => "curl http://${master_ip}:8080/plugins/fuel-plugin-yardstick-0.9/deployment_scripts/install.sh | bash -s ${master_ip}", + path => "/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"; +} + +osnailyfacter::credentials_file { '/opt/yardstick/openrc': + admin_user => $admin_user, + admin_password => $admin_password, + admin_tenant => $admin_tenant, + region_name => $region, + auth_url => $auth_url, +} + +exec { "run yardstick": + command => "echo hello", + path => "/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"; +} diff --git a/fuel-plugin/deployment_tasks.yaml b/fuel-plugin/deployment_tasks.yaml new file mode 100644 index 000000000..90fae7192 --- /dev/null +++ b/fuel-plugin/deployment_tasks.yaml @@ -0,0 +1,20 @@ +- id: yardstick + type: group + role: [yardstick] + requires: [deploy_start] + required_for: [deploy_end] + tasks: [hiera, setup_repositories, fuel_pkgs, globals, tools, logging, netconfig, yardstick-install] + parameters: + strategy: + type: parallel + +- id: yardstick-install + type: puppet + version: 2.0.0 + groups: [yardstick] + required_for: [post_deployment_end] + requires: [post_deployment_start] + parameters: + puppet_manifest: puppet/manifests/yardstick-install.pp + puppet_modules: puppet/modules:/etc/puppet/modules + timeout: 720 diff --git a/fuel-plugin/environment_config.yaml b/fuel-plugin/environment_config.yaml new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/fuel-plugin/environment_config.yaml diff --git a/fuel-plugin/metadata.yaml b/fuel-plugin/metadata.yaml new file mode 100644 index 000000000..2f6c95281 --- /dev/null +++ b/fuel-plugin/metadata.yaml @@ -0,0 +1,36 @@ +# Plugin name +name: fuel-plugin-yardstick +# Human-readable name for your plugin +title: Install Yardstick +# Plugin version +version: '0.9.0' +# Description +description: Installs Yardstick +# Required fuel version +fuel_version: ['9.0'] +# Specify license of your plugin +licenses: ['Apache License Version 2.0'] +# Specify author or company name +authors: ['john.hinman@intel.com','david.j.chou@intel.com','ruijing.guo@intel.com'] +# A link to the plugin's page +homepage: 'https://gerrit.opnfv.org/gerrit/yardstick' +# Specify a group which your plugin implements, possible options: +# network, storage, storage::cinder, storage::glance, hypervisor, +# equipment +groups: [] +# Change `false` to `true` if the plugin can be installed in the environment +# after the deployment. +is_hotpluggable: true + +# Version of plugin package +package_version: '4.0.0' +# The plugin is compatible with releases in the list +releases: + - os: ubuntu + version: mitaka-9.0 + mode: ['ha'] + deployment_scripts_path: deployment_scripts/ + repository_path: repositories/ubuntu + +# Version of plugin package +package_version: '4.0.0' diff --git a/fuel-plugin/node_roles.yaml b/fuel-plugin/node_roles.yaml new file mode 100644 index 000000000..8ba827eeb --- /dev/null +++ b/fuel-plugin/node_roles.yaml @@ -0,0 +1,8 @@ +yardstick: + name: "Yardstick" + description: "Install Yardstick on nodes with this role" + has_primary: false # whether has primary role or not + public_ip_required: false # whether requires public net or not + weight: 50 # weight that will be used for ordering on fuel ui + limits: + min: 0 diff --git a/fuel-plugin/pre_build_hook b/fuel-plugin/pre_build_hook new file mode 100755 index 000000000..9446d2a1a --- /dev/null +++ b/fuel-plugin/pre_build_hook @@ -0,0 +1,31 @@ +#!/bin/bash + +set -eux + +BUILD_FOR=${BUILD_FOR:-ubuntu} +DIR="$(dirname `readlink -f $0`)" + +function build_pkg { + case $1 in + ubuntu) + rm -rf ${DIR}/repositories/ubuntu; mkdir -p ${DIR}/repositories/ubuntu + + # don't support online installation now + # cd ${DIR}/repositories/ubuntu + # Use aptititude; apt-get -d will skip download if package is already installed + # sudo apt-get install aptitude -y + # Download python packages into the repository + # aptitude download python-virtualenv python-dev libffi-dev libssl-dev + + cd ${DIR}/.. + tar -czf ${DIR}/repositories/ubuntu/yardstick.tar.gz . --exclude=yardstick.tar.gz + ;; + + *) echo "Not supported system"; exit 1;; + esac +} + +for system in $BUILD_FOR +do + build_pkg $system +done diff --git a/fuel-plugin/tasks.yaml b/fuel-plugin/tasks.yaml new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/fuel-plugin/tasks.yaml @@ -0,0 +1 @@ +[] diff --git a/fuel-plugin/vagrant/Vagrantfile b/fuel-plugin/vagrant/Vagrantfile new file mode 100644 index 000000000..271ff7937 --- /dev/null +++ b/fuel-plugin/vagrant/Vagrantfile @@ -0,0 +1,21 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +# Vagrantfile API/syntax version. Don't touch unless you know what you're doing! +VAGRANTFILE_API_VERSION = "2" + +Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| + + config.vm.box = "trusty-server-cloudimg-amd64" + config.vm.box_url = "https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box" + + config.vm.define "fuel" do | h | + h.vm.host_name = "fuel" + h.vm.provision :shell, :inline => "/vagrant/build_fuel_plugin.sh", privileged: false + h.vm.synced_folder "../..", "/yardstick" + h.vm.provider :virtualbox do |v| + v.customize ["modifyvm", :id, "--memory", 4096] + v.customize ["modifyvm", :id, "--cpus", 4] + end + end +end diff --git a/fuel-plugin/vagrant/build_fuel_plugin.sh b/fuel-plugin/vagrant/build_fuel_plugin.sh new file mode 100755 index 000000000..b016176fb --- /dev/null +++ b/fuel-plugin/vagrant/build_fuel_plugin.sh @@ -0,0 +1,16 @@ +#!/bin/bash +sudo apt-get update -y +sudo apt-get install createrepo rpm dpkg-dev -y +sudo apt-get install python-setuptools -y +sudo apt-get install python-pip -y +sudo easy_install pip +sudo pip install fuel-plugin-builder +sudo apt-get install ruby -y +sudo gem install rubygems-update +sudo gem install fpm +sudo apt-get install docker.io -y +cp -r /yardstick /home/vagrant +cd /home/vagrant/yardstick/fuel-plugin; +rm -rf vagrant/.vagrant +fpb --debug --build . +cp *.rpm /vagrant |