From daa52fa325bbce32d20f7856fab90dde1d42805f Mon Sep 17 00:00:00 2001 From: marco Date: Mon, 25 Jan 2016 23:49:50 +0100 Subject: [PATCH] add tests/fix bug eternus volume/fix readme --- .gitignore | 4 + README.rst | 8 +- cinder/files/backend/_fujitsu.conf | 2 +- cinder/volume.sls | 8 +- metadata.yml | 3 + tests/pillar/ceph_single.sls | 25 +++++ tests/pillar/control_cluster.sls | 31 ++++++ tests/pillar/control_single.sls | 31 ++++++ tests/pillar/eternus_single.sls | 49 +++++++++ tests/pillar/gpfs_single.sls | 25 +++++ tests/pillar/hp3par_single.sls | 34 ++++++ tests/pillar/lefthand_single.sls | 25 +++++ tests/pillar/solidfire_single.sls | 25 +++++ tests/pillar/storwize_single.sls | 75 ++++++++++++++ tests/pillar/volume_single.sls | 31 ++++++ tests/pillar/vsp_single.sls | 19 ++++ tests/run_tests.sh | 160 +++++++++++++++++++++++++++++ 17 files changed, 545 insertions(+), 10 deletions(-) create mode 100644 .gitignore create mode 100644 metadata.yml create mode 100644 tests/pillar/ceph_single.sls create mode 100644 tests/pillar/control_cluster.sls create mode 100644 tests/pillar/control_single.sls create mode 100644 tests/pillar/eternus_single.sls create mode 100644 tests/pillar/gpfs_single.sls create mode 100644 tests/pillar/hp3par_single.sls create mode 100644 tests/pillar/lefthand_single.sls create mode 100644 tests/pillar/solidfire_single.sls create mode 100644 tests/pillar/storwize_single.sls create mode 100644 tests/pillar/volume_single.sls create mode 100644 tests/pillar/vsp_single.sls create mode 100755 tests/run_tests.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1bfce6e --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +tests/build/ +*.swp +*.pyc +.ropeproject \ No newline at end of file diff --git a/README.rst b/README.rst index 6afc49c..e1c1d7e 100644 --- a/README.rst +++ b/README.rst @@ -202,7 +202,7 @@ Cinder setup with Hitachi VPS enabled: true backend: hus100_backend: - name: HUS100 + type_name: HUS100 backend: hus100_backend engine: hitachi_vsp connection: FC @@ -265,6 +265,7 @@ Cinder setup with Fujitsu Eternus user: username password: pass connection: FC/iSCSI + name: 10kThinPro 10k_SAS: type_name: 10k_SAS pool: SAS10K @@ -274,6 +275,7 @@ Cinder setup with Fujitsu Eternus user: username password: pass connection: FC/iSCSI + name: 10k_SAS Cinder setup with IBM GPFS filesystem @@ -287,7 +289,7 @@ Cinder setup with IBM GPFS filesystem type_name: GPFS-GOLD engine: gpfs mount_point: '/mnt/gpfs-openstack/cinder/gold' - GPFS-SILVER + GPFS-SILVER: type_name: GPFS-SILVER engine: gpfs mount_point: '/mnt/gpfs-openstack/cinder/silver' @@ -315,7 +317,7 @@ Extra parameters for HP LeftHand cinder type-key normal-storage set hplh:data_pl=r-10-2 hplh:provisioning=full -Cinder setup with HP LeftHand +Cinder setup with Solidfire .. code-block:: yaml diff --git a/cinder/files/backend/_fujitsu.conf b/cinder/files/backend/_fujitsu.conf index 6245284..c9e8245 100644 --- a/cinder/files/backend/_fujitsu.conf +++ b/cinder/files/backend/_fujitsu.conf @@ -2,4 +2,4 @@ [{{ backend_name }}] volume_backend_name={{ backend_name }} volume_driver=cinder.volume.drivers.fujitsu.fujitsu_eternus_dx_fc.FJDXFCDriver -cinder_eternus_config_file=/etc/cinder/cinder_fujitsu_eternus_dx_{{ backend.backend }}.xml \ No newline at end of file +cinder_eternus_config_file=/etc/cinder/cinder_fujitsu_eternus_dx_{{ backend_name }}.xml \ No newline at end of file diff --git a/cinder/volume.sls b/cinder/volume.sls index d116fce..b4ab4ba 100644 --- a/cinder/volume.sls +++ b/cinder/volume.sls @@ -109,13 +109,11 @@ hp3parclient: {%- if backend.engine == 'fujitsu' %} -cinder_driver_fujitsu: +cinder_driver_fujitsu_{{ loop.index }}: pkg.latest: - name: cinder-driver-fujitsu -{%- for backend_name, backend in volume.get('backend', {}).iteritems() %} - -/etc/cinder/cinder_fujitsu_eternus_dx_{{ backend.name }}.xml: +/etc/cinder/cinder_fujitsu_eternus_dx_{{ backend_name }}.xml: file.managed: - source: salt://cinder/files/{{ volume.version }}/cinder_fujitsu_eternus_dx.xml - template: jinja @@ -124,8 +122,6 @@ cinder_driver_fujitsu: - require: - pkg: cinder-driver-fujitsu -{%- endfor %} - {%- endif %} {%- endfor %} diff --git a/metadata.yml b/metadata.yml new file mode 100644 index 0000000..3aed039 --- /dev/null +++ b/metadata.yml @@ -0,0 +1,3 @@ +name: "cinder" +version: "0.2" +source: "https://github.com/tcpcloud/salt-formula-cinder" \ No newline at end of file diff --git a/tests/pillar/ceph_single.sls b/tests/pillar/ceph_single.sls new file mode 100644 index 0000000..de5f2cc --- /dev/null +++ b/tests/pillar/ceph_single.sls @@ -0,0 +1,25 @@ +cinder: + controller: + enabled: true + version: liberty + backend: + ceph_backend: + type_name: standard-iops + backend: ceph_backend + pool: volumes + engine: ceph + user: cinder + secret_uuid: password + client_cinder_key: password + volume: + enabled: true + version: liberty + backend: + ceph_backend: + type_name: standard-iops + backend: ceph_backend + pool: volumes + engine: ceph + user: cinder + secret_uuid: password + client_cinder_key: password \ No newline at end of file diff --git a/tests/pillar/control_cluster.sls b/tests/pillar/control_cluster.sls new file mode 100644 index 0000000..430eb04 --- /dev/null +++ b/tests/pillar/control_cluster.sls @@ -0,0 +1,31 @@ +cinder: + controller: + enabled: true + version: liberty + osapi: + host: 127.0.0.1 + database: + engine: mysql + host: 127.0.0.1 + port: 3306 + name: cinder + user: cinder + password: password + identity: + engine: keystone + host: 127.0.0.1 + port: 35357 + tenant: service + user: cinder + password: password + glance: + host: 127.0.0.1 + port: 9292 + message_queue: + engine: rabbitmq + host: 127.0.0.1 + port: 5672 + user: openstack + password: password + virtual_host: '/openstack' + ha_queues: true \ No newline at end of file diff --git a/tests/pillar/control_single.sls b/tests/pillar/control_single.sls new file mode 100644 index 0000000..5b9c1bd --- /dev/null +++ b/tests/pillar/control_single.sls @@ -0,0 +1,31 @@ +cinder: + controller: + enabled: true + version: liberty + osapi: + host: 127.0.0.1 + database: + engine: mysql + host: localhost + port: 3306 + name: cinder + user: cinder + password: password + identity: + engine: keystone + host: 127.0.0.1 + port: 35357 + tenant: service + user: cinder + password: password + glance: + host: 127.0.0.1 + port: 9292 + message_queue: + engine: rabbitmq + host: 127.0.0.1 + port: 5672 + user: openstack + password: password + virtual_host: '/openstack' + ha_queues: false diff --git a/tests/pillar/eternus_single.sls b/tests/pillar/eternus_single.sls new file mode 100644 index 0000000..52b722c --- /dev/null +++ b/tests/pillar/eternus_single.sls @@ -0,0 +1,49 @@ +cinder: + volume: + enabled: true + version: liberty + backend: + 10kThinPro: + type_name: 10kThinPro + engine: fujitsu + pool: 10kThinPro + host: 127.0.0.1 + port: 5988 + user: username + password: password + connection: FC + name: 10kThinPro + 10k_SAS: + type_name: 10k_SAS + pool: SAS10K + engine: fujitsu + host: 127.0.0.1 + port: 5988 + user: username + password: password + connection: FC + name: 7k2RAID6 + controller: + enabled: true + version: liberty + backend: + 10kThinPro: + type_name: 10kThinPro + engine: fujitsu + pool: 10kThinPro + host: 127.0.0.1 + port: 5988 + user: username + password: password + connection: FC + name: 10kThinPro + 10k_SAS: + type_name: 10k_SAS + pool: SAS10K + engine: fujitsu + host: 127.0.0.1 + port: 5988 + user: username + password: password + connection: FC + name: 7k2RAID6 \ No newline at end of file diff --git a/tests/pillar/gpfs_single.sls b/tests/pillar/gpfs_single.sls new file mode 100644 index 0000000..4bb04d7 --- /dev/null +++ b/tests/pillar/gpfs_single.sls @@ -0,0 +1,25 @@ +cinder: + volume: + enabled: true + version: liberty + backend: + GPFS-GOLD: + type_name: GPFS-GOLD + engine: gpfs + mount_point: '/mnt/gpfs-openstack/cinder/gold' + GPFS-SILVER: + type_name: GPFS-SILVER + engine: gpfs + mount_point: '/mnt/gpfs-openstack/cinder/silver' + controller: + enabled: true + version: liberty + backend: + GPFS-GOLD: + type_name: GPFS-GOLD + engine: gpfs + mount_point: '/mnt/gpfs-openstack/cinder/gold' + GPFS-SILVER: + type_name: GPFS-SILVER + engine: gpfs + mount_point: '/mnt/gpfs-openstack/cinder/silver' \ No newline at end of file diff --git a/tests/pillar/hp3par_single.sls b/tests/pillar/hp3par_single.sls new file mode 100644 index 0000000..cb93ba1 --- /dev/null +++ b/tests/pillar/hp3par_single.sls @@ -0,0 +1,34 @@ +cinder: + controller: + enabled: true + version: liberty + backend: + hp3par_backend: + type_name: hp3par + backend: hp3par_backend + user: admin + password: password + url: http://localhost/api/v1 + cpg: OpenStackCPG + host: localhost + login: admin + sanpassword: password + debug: True + snapcpg: OpenStackSNAPCPG + volume: + enabled: true + version: liberty + backend: + hp3par_backend: + type_name: hp3par + backend: hp3par_backend + user: admin + password: password + url: http://localhost/api/v1 + cpg: OpenStackCPG + host: localhost + login: admin + sanpassword: password + debug: True + snapcpg: OpenStackSNAPCPG + engine: hp3par \ No newline at end of file diff --git a/tests/pillar/lefthand_single.sls b/tests/pillar/lefthand_single.sls new file mode 100644 index 0000000..9a48eec --- /dev/null +++ b/tests/pillar/lefthand_single.sls @@ -0,0 +1,25 @@ +cinder: + volume: + enabled: true + version: liberty + backend: + HP-LeftHand: + type_name: normal-storage + engine: hp_lefthand + api_url: 'https://127.0.0.1:8081/lhos' + username: username + password: password + clustername: cluster1 + iscsi_chap_enabled: false + controller: + enabled: true + version: liberty + backend: + HP-LeftHand: + type_name: normal-storage + engine: hp_lefthand + api_url: 'https://127.0.0.1:8081/lhos' + username: username + password: password + clustername: cluster1 + iscsi_chap_enabled: false \ No newline at end of file diff --git a/tests/pillar/solidfire_single.sls b/tests/pillar/solidfire_single.sls new file mode 100644 index 0000000..a75d6f4 --- /dev/null +++ b/tests/pillar/solidfire_single.sls @@ -0,0 +1,25 @@ +cinder: + volume: + enabled: true + version: liberty + backend: + solidfire: + type_name: normal-storage + engine: solidfire + san_ip: 127.0.0.1 + san_login: username + san_password: password + clustername: cluster1 + sf_emulate_512: false + controller: + enabled: true + version: liberty + backend: + solidfire: + type_name: normal-storage + engine: solidfire + san_ip: 127.0.0.1 + san_login: username + san_password: password + clustername: cluster1 + sf_emulate_512: false \ No newline at end of file diff --git a/tests/pillar/storwize_single.sls b/tests/pillar/storwize_single.sls new file mode 100644 index 0000000..96c6b6f --- /dev/null +++ b/tests/pillar/storwize_single.sls @@ -0,0 +1,75 @@ +cinder: + volume: + enabled: true + version: liberty + backend: + 7k2_SAS: + engine: storwize + type_name: 7k2_SAS + host: 127.0.0.1 + port: 22 + user: username + password: password + connection: FC + multihost: true + multipath: true + pool: SAS7K2 + 10k_SAS: + engine: storwize + type_name: 10k_SAS + host: 127.0.0.1 + port: 22 + user: username + password: password + connection: FC + multihost: true + multipath: true + pool: SAS10K + 15k_SAS: + engine: storwize + type_name: 15k_SAS + host: 127.0.0.1 + port: 22 + user: username + password: password + connection: FC + multihost: true + multipath: true + pool: SAS15K + controller: + enabled: true + version: liberty + backend: + 7k2_SAS: + engine: storwize + type_name: 7k2_SAS + host: 127.0.0.1 + port: 22 + user: username + password: password + connection: FC + multihost: true + multipath: true + pool: SAS7K2 + 10k_SAS: + engine: storwize + type_name: 10k_SAS + host: 127.0.0.1 + port: 22 + user: username + password: password + connection: FC + multihost: true + multipath: true + pool: SAS10K + 15k_SAS: + engine: storwize + type_name: 15k_SAS + host: 127.0.0.1 + port: 22 + user: username + password: password + connection: FC + multihost: true + multipath: true + pool: SAS15K \ No newline at end of file diff --git a/tests/pillar/volume_single.sls b/tests/pillar/volume_single.sls new file mode 100644 index 0000000..2c69443 --- /dev/null +++ b/tests/pillar/volume_single.sls @@ -0,0 +1,31 @@ +cinder: + volume: + enabled: true + version: liberty + osapi: + host: 127.0.0.1 + database: + engine: mysql + host: 127.0.0.1 + port: 3306 + name: cinder + user: cinder + password: password + identity: + engine: keystone + host: 127.0.0.1 + port: 35357 + tenant: service + user: cinder + password: password + glance: + host: 127.0.0.1 + port: 9292 + message_queue: + engine: rabbitmq + host: 127.0.0.1 + port: 5672 + user: openstack + password: password + virtual_host: '/openstack' + ha_queues: true \ No newline at end of file diff --git a/tests/pillar/vsp_single.sls b/tests/pillar/vsp_single.sls new file mode 100644 index 0000000..13450b4 --- /dev/null +++ b/tests/pillar/vsp_single.sls @@ -0,0 +1,19 @@ +cinder: + controller: + enabled: true + version: liberty + backend: + hus100_backend: + type_name: HUS100 + backend: hus100_backend + engine: hitachi_vsp + connection: FC + volume: + enabled: true + version: liberty + backend: + hus100_backend: + type_name: HUS100 + backend: hus100_backend + engine: hitachi_vsp + connection: FC \ No newline at end of file diff --git a/tests/run_tests.sh b/tests/run_tests.sh new file mode 100755 index 0000000..1f1316f --- /dev/null +++ b/tests/run_tests.sh @@ -0,0 +1,160 @@ +#!/usr/bin/env bash + +set -e +[ -n "$DEBUG" ] && set -x + +CURDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +METADATA=${CURDIR}/../metadata.yml +FORMULA_NAME=$(cat $METADATA | python -c "import sys,yaml; print yaml.load(sys.stdin)['name']") + +## Overrideable parameters +PILLARDIR=${PILLARDIR:-${CURDIR}/pillar} +BUILDDIR=${BUILDDIR:-${CURDIR}/build} +VENV_DIR=${VENV_DIR:-${BUILDDIR}/virtualenv} +DEPSDIR=${BUILDDIR}/deps + +SALT_FILE_DIR=${SALT_FILE_DIR:-${BUILDDIR}/file_root} +SALT_PILLAR_DIR=${SALT_PILLAR_DIR:-${BUILDDIR}/pillar_root} +SALT_CONFIG_DIR=${SALT_CONFIG_DIR:-${BUILDDIR}/salt} +SALT_CACHE_DIR=${SALT_CACHE_DIR:-${SALT_CONFIG_DIR}/cache} + +SALT_OPTS="${SALT_OPTS} --retcode-passthrough --local -c ${SALT_CONFIG_DIR}" + +if [ "x${SALT_VERSION}" != "x" ]; then + PIP_SALT_VERSION="==${SALT_VERSION}" +fi + +## Functions +log_info() { + echo "[INFO] $*" +} + +log_err() { + echo "[ERROR] $*" >&2 +} + +setup_virtualenv() { + log_info "Setting up Python virtualenv" + virtualenv $VENV_DIR + source ${VENV_DIR}/bin/activate + pip install salt${PIP_SALT_VERSION} +} + +setup_pillar() { + [ ! -d ${SALT_PILLAR_DIR} ] && mkdir -p ${SALT_PILLAR_DIR} + echo "base:" > ${SALT_PILLAR_DIR}/top.sls + for pillar in ${PILLARDIR}/*; do + state_name=$(basename ${pillar%.sls}) + echo -e " ${state_name}:\n - ${state_name}" >> ${SALT_PILLAR_DIR}/top.sls + done +} + +setup_salt() { + [ ! -d ${SALT_FILE_DIR} ] && mkdir -p ${SALT_FILE_DIR} + [ ! -d ${SALT_CONFIG_DIR} ] && mkdir -p ${SALT_CONFIG_DIR} + [ ! -d ${SALT_CACHE_DIR} ] && mkdir -p ${SALT_CACHE_DIR} + + echo "base:" > ${SALT_FILE_DIR}/top.sls + for pillar in ${PILLARDIR}/*.sls; do + state_name=$(basename ${pillar%.sls}) + echo -e " ${state_name}:\n - ${FORMULA_NAME}" >> ${SALT_FILE_DIR}/top.sls + done + + cat << EOF > ${SALT_CONFIG_DIR}/minion +file_client: local +cachedir: ${SALT_CACHE_DIR} +verify_env: False + +file_roots: + base: + - ${SALT_FILE_DIR} + - ${CURDIR}/.. + +pillar_roots: + base: + - ${SALT_PILLAR_DIR} + - ${PILLARDIR} +EOF +} + +fetch_dependency() { + dep_root="${DEPSDIR}/$(basename $1 .git)" + dep_metadata="${dep_root}/metadata.yml" + + [ -d $dep_root ] && log_info "Dependency $1 already fetched" && return 0 + + log_info "Fetching dependency $1" + [ ! -d ${DEPSDIR} ] && mkdir -p ${DEPSDIR} + git clone $1 ${DEPSDIR}/$(basename $1 .git) + + dep_name=$(cat $dep_metadata | python -c "import sys,yaml; print yaml.load(sys.stdin)['name']") + ln -s ${dep_root}/${dep_name} ${SALT_FILE_DIR}/${dep_name} + + METADATA="${dep_metadata}" install_dependencies +} + +install_dependencies() { + grep -E "^dependencies:" ${METADATA} >/dev/null || return 0 + (python - | while read dep; do fetch_dependency "$dep"; done) << EOF +import sys,yaml +for dep in yaml.load(open('${METADATA}', 'ro'))['dependencies']: + print dep["source"] +EOF +} + +clean() { + log_info "Cleaning up ${BUILDDIR}" + [ -d ${BUILDDIR} ] && rm -rf ${BUILDDIR} || exit 0 +} + +salt_run() { + source ${VENV_DIR}/bin/activate + salt-call ${SALT_OPTS} $* +} + +prepare() { + [ -d ${BUILDDIR} ] && mkdir -p ${BUILDDIR} + + setup_virtualenv + setup_pillar + setup_salt + install_dependencies +} + +run() { + for pillar in ${PILLARDIR}/*.sls; do + state_name=$(basename ${pillar%.sls}) + salt_run --id=${state_name} state.show_sls ${FORMULA_NAME} || (log_err "Execution of ${FORMULA_NAME}.${state_name} failed"; exit 1) + done +} + +_atexit() { + RETVAL=$? + trap true INT TERM EXIT + + if [ $RETVAL -ne 0 ]; then + log_err "Execution failed" + else + log_info "Execution successful" + fi + return $RETVAL +} + +## Main +trap _atexit INT TERM EXIT + +case $1 in + clean) + clean + ;; + prepare) + prepare + ;; + run) + run + ;; + *) + prepare + run + ;; +esac