summaryrefslogtreecommitdiffstats
path: root/ci/ansible/roles
diff options
context:
space:
mode:
Diffstat (limited to 'ci/ansible/roles')
-rw-r--r--ci/ansible/roles/cleaner/scenarios/auth-keystone.yml30
-rw-r--r--ci/ansible/roles/cleaner/scenarios/backend.yml154
-rw-r--r--ci/ansible/roles/cleaner/scenarios/release.yml24
-rw-r--r--ci/ansible/roles/cleaner/scenarios/repository.yml44
-rw-r--r--ci/ansible/roles/cleaner/tasks/main.yml198
-rw-r--r--ci/ansible/roles/common/scenarios/container.yml18
-rw-r--r--ci/ansible/roles/common/scenarios/release.yml40
-rw-r--r--ci/ansible/roles/common/scenarios/repository.yml57
-rw-r--r--ci/ansible/roles/common/tasks/main.yml185
-rw-r--r--ci/ansible/roles/dashboard-installer/scenarios/container.yml26
-rw-r--r--ci/ansible/roles/dashboard-installer/scenarios/source-code.yml58
-rw-r--r--ci/ansible/roles/dashboard-installer/tasks/main.yml22
-rw-r--r--ci/ansible/roles/nbp-installer/scenarios/csi.yml44
-rw-r--r--ci/ansible/roles/nbp-installer/scenarios/flexvolume.yml56
-rw-r--r--ci/ansible/roles/nbp-installer/scenarios/release.yml40
-rw-r--r--ci/ansible/roles/nbp-installer/scenarios/repository.yml79
-rw-r--r--ci/ansible/roles/nbp-installer/tasks/main.yml47
-rw-r--r--ci/ansible/roles/osdsauth/tasks/main.yml21
-rw-r--r--ci/ansible/roles/osdsdb/scenarios/container.yml24
-rw-r--r--ci/ansible/roles/osdsdb/scenarios/etcd.yml25
-rw-r--r--ci/ansible/roles/osdsdb/scenarios/etcd_aarch64.yml39
-rw-r--r--ci/ansible/roles/osdsdb/tasks/main.yml25
-rw-r--r--ci/ansible/roles/osdsdock/scenarios/ceph.yml102
-rw-r--r--ci/ansible/roles/osdsdock/scenarios/cinder.yml31
-rw-r--r--ci/ansible/roles/osdsdock/scenarios/cinder_standalone.yml62
-rw-r--r--ci/ansible/roles/osdsdock/scenarios/lvm.yml86
-rw-r--r--ci/ansible/roles/osdsdock/tasks/main.yml35
-rw-r--r--ci/ansible/roles/osdslet/tasks/main.yml27
28 files changed, 1301 insertions, 298 deletions
diff --git a/ci/ansible/roles/cleaner/scenarios/auth-keystone.yml b/ci/ansible/roles/cleaner/scenarios/auth-keystone.yml
new file mode 100644
index 0000000..bbac49b
--- /dev/null
+++ b/ci/ansible/roles/cleaner/scenarios/auth-keystone.yml
@@ -0,0 +1,30 @@
+# Copyright (c) 2018 Huawei Technologies Co., Ltd. All Rights Reserved.
+#
+# 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.
+
+---
+- name: uninstall keystone
+ shell: "{{ item }}"
+ with_items:
+ - bash ./script/keystone.sh uninstall
+ when: opensds_auth_strategy == "keystone" and uninstall_keystone == true
+ ignore_errors: yes
+ become: yes
+
+- name: cleanup keystone
+ shell: "{{ item }}"
+ with_items:
+ - bash ./script/keystone.sh cleanup
+ when: opensds_auth_strategy == "keystone" and cleanup_keystone == true
+ ignore_errors: yes
+ become: yes
diff --git a/ci/ansible/roles/cleaner/scenarios/backend.yml b/ci/ansible/roles/cleaner/scenarios/backend.yml
new file mode 100644
index 0000000..f929164
--- /dev/null
+++ b/ci/ansible/roles/cleaner/scenarios/backend.yml
@@ -0,0 +1,154 @@
+# Copyright (c) 2018 Huawei Technologies Co., Ltd. All Rights Reserved.
+#
+# 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.
+
+---
+- name: clean the volume group of lvm
+ shell:
+ _raw_params: |
+
+ # _clean_lvm_volume_group removes all default LVM volumes
+ #
+ # Usage: _clean_lvm_volume_group $vg
+ function _clean_lvm_volume_group {
+ local vg=$1
+
+ # Clean out existing volumes
+ sudo lvremove -f $vg
+ }
+
+ # _remove_lvm_volume_group removes the volume group
+ #
+ # Usage: _remove_lvm_volume_group $vg
+ function _remove_lvm_volume_group {
+ local vg=$1
+
+ # Remove the volume group
+ sudo vgremove -f $vg
+ }
+
+ # _clean_lvm_backing_file() removes the backing file of the
+ # volume group
+ #
+ # Usage: _clean_lvm_backing_file() $backing_file
+ function _clean_lvm_backing_file {
+ local backing_file=$1
+
+ # If the backing physical device is a loop device, it was probably setup by DevStack
+ if [[ -n "$backing_file" ]] && [[ -e "$backing_file" ]]; then
+ local vg_dev
+ vg_dev=$(sudo losetup -j $backing_file | awk -F':' '/'.img'/ { print $1}')
+ if [[ -n "$vg_dev" ]]; then
+ sudo losetup -d $vg_dev
+ fi
+ rm -f $backing_file
+ fi
+ }
+
+ # clean_lvm_volume_group() cleans up the volume group and removes the
+ # backing file
+ #
+ # Usage: clean_lvm_volume_group $vg
+ function clean_lvm_volume_group {
+ local vg=$1
+
+ _clean_lvm_volume_group $vg
+ _remove_lvm_volume_group $vg
+ # if there is no logical volume left, it's safe to attempt a cleanup
+ # of the backing file
+ if [[ -z "$(sudo lvs --noheadings -o lv_name $vg 2>/dev/null)" ]]; then
+ _clean_lvm_backing_file {{ opensds_work_dir }}/volumegroups/${vg}.img
+ fi
+ }
+
+ clean_lvm_volume_group {{opensds_volume_group}}
+
+ args:
+ executable: /bin/bash
+ become: true
+ when: enabled_backend == "lvm"
+ ignore_errors: yes
+
+- name: stop cinder-standalone service
+ shell: docker-compose down
+ become: true
+ args:
+ chdir: "{{ cinder_data_dir }}/cinder/contrib/block-box"
+ when: enabled_backend == "cinder"
+ ignore_errors: yes
+
+- name: clean the volume group of cinder
+ shell:
+ _raw_params: |
+
+ # _clean_lvm_volume_group removes all default LVM volumes
+ #
+ # Usage: _clean_lvm_volume_group $vg
+ function _clean_lvm_volume_group {
+ local vg=$1
+
+ # Clean out existing volumes
+ sudo lvremove -f $vg
+ }
+
+ # _remove_lvm_volume_group removes the volume group
+ #
+ # Usage: _remove_lvm_volume_group $vg
+ function _remove_lvm_volume_group {
+ local vg=$1
+
+ # Remove the volume group
+ sudo vgremove -f $vg
+ }
+
+ # _clean_lvm_backing_file() removes the backing file of the
+ # volume group
+ #
+ # Usage: _clean_lvm_backing_file() $backing_file
+ function _clean_lvm_backing_file {
+ local backing_file=$1
+
+ # If the backing physical device is a loop device, it was probably setup by DevStack
+ if [[ -n "$backing_file" ]] && [[ -e "$backing_file" ]]; then
+ local vg_dev
+ vg_dev=$(sudo losetup -j $backing_file | awk -F':' '/'.img'/ { print $1}')
+ if [[ -n "$vg_dev" ]]; then
+ sudo losetup -d $vg_dev
+ fi
+ rm -f $backing_file
+ fi
+ }
+
+ # clean_lvm_volume_group() cleans up the volume group and removes the
+ # backing file
+ #
+ # Usage: clean_lvm_volume_group $vg
+ function clean_lvm_volume_group {
+ local vg=$1
+
+ _clean_lvm_volume_group $vg
+ _remove_lvm_volume_group $vg
+ # if there is no logical volume left, it's safe to attempt a cleanup
+ # of the backing file
+ if [[ -z "$(sudo lvs --noheadings -o lv_name $vg 2>/dev/null)" ]]; then
+ _clean_lvm_backing_file {{ cinder_data_dir }}/${vg}.img
+ fi
+ }
+
+ clean_lvm_volume_group {{cinder_volume_group}}
+
+ args:
+ executable: /bin/bash
+ become: true
+ when: enabled_backend == "cinder"
+ ignore_errors: yes
diff --git a/ci/ansible/roles/cleaner/scenarios/release.yml b/ci/ansible/roles/cleaner/scenarios/release.yml
new file mode 100644
index 0000000..e365170
--- /dev/null
+++ b/ci/ansible/roles/cleaner/scenarios/release.yml
@@ -0,0 +1,24 @@
+# Copyright (c) 2018 Huawei Technologies Co., Ltd. All Rights Reserved.
+#
+# 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.
+
+---
+- name: clean up all release files if installed from release
+ file:
+ path: "{{ item }}"
+ state: absent
+ force: yes
+ with_items:
+ - "{{ opensds_tarball_dir }}"
+ - "{{ nbp_tarball_dir }}"
+ ignore_errors: yes
diff --git a/ci/ansible/roles/cleaner/scenarios/repository.yml b/ci/ansible/roles/cleaner/scenarios/repository.yml
new file mode 100644
index 0000000..a50689c
--- /dev/null
+++ b/ci/ansible/roles/cleaner/scenarios/repository.yml
@@ -0,0 +1,44 @@
+# Copyright (c) 2018 Huawei Technologies Co., Ltd. All Rights Reserved.
+#
+# 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.
+
+---
+- set_fact:
+ go_path: "{{ lookup('env', 'GOPATH') }}"
+
+- name: check go_path
+ shell: "{{ item }}"
+ with_items:
+ - echo "The environment variable GOPATH must be set and cannot be an empty string!"
+ - /bin/false
+ when: go_path == ""
+
+- name: clean opensds controller data
+ shell: make clean
+ args:
+ chdir: "{{ go_path }}/src/github.com/opensds/opensds"
+ when: install_from == "repository"
+
+- name: clean opensds northbound plugin data
+ shell: make clean
+ args:
+ chdir: "{{ go_path }}/src/github.com/opensds/nbp"
+ when: install_from == "repository" and nbp_plugin_type != "hotpot_only"
+
+- name: clean opensds dashboard data
+ shell: make clean
+ args:
+ chdir: "{{ go_path }}/src/github.com/opensds/opensds/dashboard"
+ when: dashboard_installation_type == "source_code"
+ become: yes
+ ignore_errors: yes
diff --git a/ci/ansible/roles/cleaner/tasks/main.yml b/ci/ansible/roles/cleaner/tasks/main.yml
index 93aeb59..ed887c6 100644
--- a/ci/ansible/roles/cleaner/tasks/main.yml
+++ b/ci/ansible/roles/cleaner/tasks/main.yml
@@ -1,142 +1,92 @@
----
-- name: kill etcd daemon service
- shell: killall etcd
- ignore_errors: yes
- when: db_driver == "etcd"
+# Copyright (c) 2018 Huawei Technologies Co., Ltd. All Rights Reserved.
+#
+# 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.
-- name: remove etcd service data
- file:
- path: "{{ etcd_dir }}"
- state: absent
- force: yes
- ignore_errors: yes
- when: db_driver == "etcd"
-
-- name: remove etcd tarball
+- name: kill osdslet daemon service
+ shell: killall osdslet osdsdock
+ when: install_from != "container"
+ ignore_errors: true
+
+- name: kill osdslet containerized service
+ docker_container:
+ name: osdslet
+ image: "{{ controller_docker_image }}"
+ state: stopped
+ when: install_from == "container"
+
+- name: kill osdsdock containerized service
+ docker_container:
+ name: osdsdock
+ image: "{{ dock_docker_image }}"
+ state: stopped
+ when: install_from == "container"
+
+- name: stop container where dashboard is located
+ docker_container:
+ name: dashboard
+ image: "{{ dashboard_docker_image }}"
+ state: stopped
+ when: dashboard_installation_type == "container"
+
+- name: clean opensds flexvolume plugins binary file if flexvolume specified
file:
- path: "/tmp/{{ etcd_tarball }}"
+ path: "{{ flexvolume_plugin_dir }}"
state: absent
force: yes
ignore_errors: yes
- when: db_driver == "etcd"
-
-- name: kill osdslet daemon service
- shell: killall osdslet
- ignore_errors: yes
-
-- name: kill osdsdock daemon service
- shell: killall osdsdock
- ignore_errors: yes
+ when: nbp_plugin_type == "flexvolume"
-- name: clean all opensds build files
- file:
- path: "{{ opensds_build_dir }}"
- state: absent
- force: yes
+- name: clean opensds external provisioner plugin if flexvolume specified
+ shell: |
+ . /etc/profile
+ kubectl delete -f deploy/
+ args:
+ chdir: "{{ nbp_work_dir }}/provisioner"
ignore_errors: yes
+ when: nbp_plugin_type == "flexvolume"
-- name: clean all opensds configuration files
- file:
- path: "{{ opensds_config_dir }}"
- state: absent
- force: yes
+- name: clean opensds csi plugin if csi plugin specified
+ shell: |
+ . /etc/profile
+ kubectl delete -f deploy/kubernetes
+ args:
+ chdir: "{{ nbp_work_dir }}/csi"
ignore_errors: yes
+ when: nbp_plugin_type == "csi"
-- name: clean all opensds log files
+- name: clean all configuration and log files in opensds and nbp work directory
file:
- path: "{{ opensds_log_dir }}"
+ path: "{{ item }}"
state: absent
force: yes
+ with_items:
+ - "{{ opensds_work_dir }}"
+ - "{{ nbp_work_dir }}"
+ - "{{ opensds_config_dir }}"
+ - "{{ opensds_log_dir }}"
ignore_errors: yes
-- name: check if it existed before cleaning a volume group
- shell: vgdisplay {{ vg_name }}
- ignore_errors: yes
- register: vg_existed
- when: enabled_backend == "lvm"
-
-- name: remove a volume group if lvm backend specified
- shell: vgremove {{ vg_name }}
- when: enabled_backend == "lvm" and vg_existed.rc == 0
-
-- name: check if it existed before cleaning a physical volume
- shell: pvdisplay {{ pv_device }}
- ignore_errors: yes
- register: pv_existed
- when: enabled_backend == "lvm"
-
-- name: remove a physical volume if lvm backend specified
- shell: pvremove {{ pv_device }}
- when: enabled_backend == "lvm" and pv_existed.rc == 0
-
-- name: stop cinder-standalone service
- shell: docker-compose down
- become: true
- args:
- chdir: "{{ cinder_data_dir }}/cinder/contrib/block-box"
- when: enabled_backend == "cinder"
-
-- name: clean the volume group of cinder
- shell:
- _raw_params: |
-
- # _clean_lvm_volume_group removes all default LVM volumes
- #
- # Usage: _clean_lvm_volume_group $vg
- function _clean_lvm_volume_group {
- local vg=$1
-
- # Clean out existing volumes
- sudo lvremove -f $vg
- }
-
- # _remove_lvm_volume_group removes the volume group
- #
- # Usage: _remove_lvm_volume_group $vg
- function _remove_lvm_volume_group {
- local vg=$1
-
- # Remove the volume group
- sudo vgremove -f $vg
- }
+- name: include scenarios/auth-keystone.yml when specifies keystone
+ include_tasks: scenarios/auth-keystone.yml
+ when: opensds_auth_strategy == "keystone"
- # _clean_lvm_backing_file() removes the backing file of the
- # volume group
- #
- # Usage: _clean_lvm_backing_file() $backing_file
- function _clean_lvm_backing_file {
- local backing_file=$1
+- name: include scenarios/repository.yml if installed from repository
+ include_tasks: scenarios/repository.yml
+ when: install_from == "repository" or dashboard_installation_type == "source_code"
- # If the backing physical device is a loop device, it was probably setup by DevStack
- if [[ -n "$backing_file" ]] && [[ -e "$backing_file" ]]; then
- local vg_dev
- vg_dev=$(sudo losetup -j $backing_file | awk -F':' '/'.img'/ { print $1}')
- if [[ -n "$vg_dev" ]]; then
- sudo losetup -d $vg_dev
- fi
- rm -f $backing_file
- fi
- }
+- name: include scenarios/release.yml if installed from release
+ include_tasks: scenarios/release.yml
+ when: install_from == "release"
- # clean_lvm_volume_group() cleans up the volume group and removes the
- # backing file
- #
- # Usage: clean_lvm_volume_group $vg
- function clean_lvm_volume_group {
- local vg=$1
-
- _clean_lvm_volume_group $vg
- _remove_lvm_volume_group $vg
- # if there is no logical volume left, it's safe to attempt a cleanup
- # of the backing file
- if [[ -z "$(sudo lvs --noheadings -o lv_name $vg 2>/dev/null)" ]]; then
- _clean_lvm_backing_file {{ cinder_data_dir }}/${vg}.img
- fi
- }
-
- clean_lvm_volume_group {{cinder_volume_group}}
-
- args:
- executable: /bin/bash
- become: true
- when: enabled_backend == "cinder"
+- name: include scenarios/backend.yml for cleaning up storage backend service
+ include_tasks: scenarios/backend.yml
diff --git a/ci/ansible/roles/common/scenarios/container.yml b/ci/ansible/roles/common/scenarios/container.yml
new file mode 100644
index 0000000..0edbcef
--- /dev/null
+++ b/ci/ansible/roles/common/scenarios/container.yml
@@ -0,0 +1,18 @@
+# Copyright (c) 2018 Huawei Technologies Co., Ltd. All Rights Reserved.
+#
+# 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.
+
+---
+- name: install docker-py package with pip when enabling containerized deployment
+ pip:
+ name: docker-py
diff --git a/ci/ansible/roles/common/scenarios/release.yml b/ci/ansible/roles/common/scenarios/release.yml
new file mode 100644
index 0000000..83df8bd
--- /dev/null
+++ b/ci/ansible/roles/common/scenarios/release.yml
@@ -0,0 +1,40 @@
+# Copyright (c) 2018 Huawei Technologies Co., Ltd. All Rights Reserved.
+#
+# 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.
+
+---
+- name: check for opensds release files existed
+ stat:
+ path: "{{ opensds_tarball_dir }}"
+ ignore_errors: yes
+ register: opensdsreleasesexisted
+
+- name: download and extract the opensds release tarball if not exists
+ unarchive:
+ src: "{{ opensds_download_url }}"
+ dest: /tmp/
+ remote_src: yes
+ when:
+ - opensdsreleasesexisted.stat.exists is undefined or opensdsreleasesexisted.stat.exists == false
+
+- name: change the mode of all binary files in opensds release
+ file:
+ path: "{{ opensds_tarball_dir }}/bin"
+ mode: 0755
+ recurse: yes
+
+- name: copy opensds tarball into opensds work directory
+ copy:
+ src: "{{ opensds_tarball_dir }}/"
+ dest: "{{ opensds_work_dir }}"
+ mode: 0755
diff --git a/ci/ansible/roles/common/scenarios/repository.yml b/ci/ansible/roles/common/scenarios/repository.yml
new file mode 100644
index 0000000..3cddd34
--- /dev/null
+++ b/ci/ansible/roles/common/scenarios/repository.yml
@@ -0,0 +1,57 @@
+# Copyright (c) 2018 Huawei Technologies Co., Ltd. All Rights Reserved.
+#
+# 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.
+
+---
+- set_fact:
+ go_path: "{{ lookup('env', 'GOPATH') }}"
+
+- name: check go_path
+ shell: "{{ item }}"
+ with_items:
+ - echo "The environment variable GOPATH must be set and cannot be an empty string!"
+ - /bin/false
+ when: go_path == ""
+
+- name: check for opensds source code existed
+ stat:
+ path: "{{ go_path }}/src/github.com/opensds/opensds"
+ ignore_errors: yes
+ register: opensdsexisted
+
+- name: download opensds source code if not exists
+ git:
+ repo: "{{ opensds_remote_url }}"
+ dest: "{{ go_path }}/src/github.com/opensds/opensds"
+ version: "{{ opensds_repo_branch }}"
+ when:
+ - opensdsexisted.stat.exists is undefined or opensdsexisted.stat.exists == false
+
+- name: build opensds binary file
+ shell: make
+ environment:
+ GOPATH: "{{ go_path }}"
+ args:
+ chdir: "{{ go_path }}/src/github.com/opensds/opensds"
+
+- name: copy opensds binary files into opensds work directory
+ copy:
+ src: "{{ go_path }}/src/github.com/opensds/opensds/build/out/"
+ dest: "{{ opensds_work_dir }}"
+
+- name: change the permissions of opensds executable files
+ file:
+ path: "{{ opensds_work_dir }}/bin"
+ state: directory
+ mode: 0755
+ recurse: yes
diff --git a/ci/ansible/roles/common/tasks/main.yml b/ci/ansible/roles/common/tasks/main.yml
index 20f5381..4137812 100644
--- a/ci/ansible/roles/common/tasks/main.yml
+++ b/ci/ansible/roles/common/tasks/main.yml
@@ -1,80 +1,90 @@
----
-# If we can't get golang installed before any module is used we will fail
-# so just try what we can to get it installed
-- name: check for golang
- stat:
- path: /usr/local/go
- ignore_errors: yes
- register: systemgolang
-
-- name: install golang for debian based systems
- shell:
- cmd: |
- set -e
- set -x
+# Copyright (c) 2018 Huawei Technologies Co., Ltd. All Rights Reserved.
+#
+# 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.
- wget https://storage.googleapis.com/golang/go1.9.linux-amd64.tar.gz
- tar xvf go1.9.linux-amd64.tar.gz -C /usr/local/
- cat >> /etc/profile <<GOLANG__CONFIG_DOC
- export GOROOT=/usr/local/go
- export GOPATH=\$HOME/gopath
- export PATH=\$PATH:\$GOROOT/bin:\$GOPATH/bin
- GOLANG__CONFIG_DOC
-
- executable: /bin/bash
+---
+- name: set script dir permissions
+ file:
+ path: ./script
+ mode: 0755
+ recurse: yes
ignore_errors: yes
- when:
- - systemgolang.stat.exists is undefined or systemgolang.stat.exists == false
-
-- name: Run the equivalent of "apt-get update" as a separate step
+ become: yes
+
+- name: check ansible version
+ shell: "{{ item }}"
+ with_items:
+ - bash ./script/check_ansible_version.sh
+ become: yes
+
+- name: run the equivalent of "apt-get update" as a separate step
apt:
update_cache: yes
-- name: install librados-dev external package
- apt:
- name: librados-dev
-
-- name: install librbd-dev external package
- apt:
- name: librbd-dev
-
-- name: check for opensds source code existed
- stat:
- path: "{{ opensds_root_dir }}"
- ignore_errors: yes
- register: opensdsexisted
-
-- name: download opensds source code
- git:
- repo: "{{ remote_url }}"
- dest: "{{ opensds_root_dir }}"
- when:
- - opensdsexisted.stat.exists is undefined or opensdsexisted.stat.exists == false
-
-- name: check for opensds binary file existed
- stat:
- path: "{{ opensds_build_dir }}"
- ignore_errors: yes
- register: opensdsbuilt
-
-- name: build opensds binary file
- shell: . /etc/profile; make
- args:
- chdir: "{{ opensds_root_dir }}"
- when:
- - opensdsbuilt.stat.exists is undefined or opensdsbuilt.stat.exists == false
-
-- name: create opensds global config directory if it doesn't exist
+- name: install system packages
+ package:
+ name: "{{ item }}"
+ state: present
+ with_items:
+ - make
+ - gcc
+ - python-pip
+
+- name: install Red Hat system packages
+ package:
+ name: "{{ item }}"
+ state: present
+ with_items:
+ - librados-devel
+ - librbd-devel
+ when: ansible_os_family == "RedHat"
+
+- name: install Ubuntu system packages
+ package:
+ name: "{{ item }}"
+ state: present
+ with_items:
+ - librados-dev
+ - librbd-dev
+ when: ansible_os_family == "Debian"
+
+- name: create opensds work directory if it doesn't exist
file:
- path: "{{ opensds_config_dir }}/driver"
+ path: "{{ item }}"
state: directory
mode: 0755
+ with_items:
+ - "{{ opensds_work_dir }}"
+ - "{{ opensds_config_dir }}"
+ - "{{ opensds_driver_config_dir }}"
+ - "{{ opensds_log_dir }}"
-- name: create opensds log directory if it doesn't exist
- file:
- path: "{{ opensds_log_dir }}"
- state: directory
- mode: 0755
+- name: include scenarios/repository.yml when installing from repository
+ include: scenarios/repository.yml
+ when: install_from == "repository"
+
+- name: include scenarios/release.yml when installing from release
+ include: scenarios/release.yml
+ when: install_from == "release"
+
+- name: include scenarios/container.yml when installing from container
+ include: scenarios/container.yml
+ when: install_from == "container"
+
+- name: copy config templates into opensds global config folder
+ copy:
+ src: ../../../../conf/
+ dest: "{{ opensds_config_dir }}"
- name: configure opensds global info
shell: |
@@ -84,52 +94,19 @@
graceful = True
log_file = {{ controller_log_file }}
socket_order = inc
+ auth_strategy = {{ opensds_auth_strategy }}
[osdsdock]
api_endpoint = {{ dock_endpoint }}
log_file = {{ dock_log_file }}
+ # Choose the type of dock resource, only support 'provisioner' and 'attacher'.
+ dock_type = {{ dock_type }}
# Specify which backends should be enabled, sample,ceph,cinder,lvm and so on.
enabled_backends = {{ enabled_backend }}
- [lvm]
- name = {{ lvm_name }}
- description = {{ lvm_description }}
- driver_name = {{ lvm_driver_name }}
- config_path = {{ lvm_config_path }}
-
- [ceph]
- name = {{ ceph_name }}
- description = {{ ceph_description }}
- driver_name = {{ ceph_driver_name }}
- config_path = {{ ceph_config_path }}
-
- [cinder]
- name = {{ cinder_name }}
- description = {{ cinder_description }}
- driver_name = {{ cinder_driver_name }}
- config_path = {{ cinder_config_path }}
-
[database]
endpoint = {{ db_endpoint }}
driver = {{ db_driver }}
args:
chdir: "{{ opensds_config_dir }}"
ignore_errors: yes
-
-- name: copy opensds lvm backend file if specify lvm backend
- copy:
- src: ../../../group_vars/lvm/lvm.yaml
- dest: "{{ lvm_config_path }}"
- when: enabled_backend == "lvm"
-
-- name: copy opensds ceph backend file if specify ceph backend
- copy:
- src: ../../../group_vars/ceph/ceph.yaml
- dest: "{{ ceph_config_path }}"
- when: enabled_backend == "ceph"
-
-- name: copy opensds cinder backend file if specify cinder backend
- copy:
- src: ../../../group_vars/cinder/cinder.yaml
- dest: "{{ cinder_config_path }}"
- when: enabled_backend == "cinder"
diff --git a/ci/ansible/roles/dashboard-installer/scenarios/container.yml b/ci/ansible/roles/dashboard-installer/scenarios/container.yml
new file mode 100644
index 0000000..0c8fe18
--- /dev/null
+++ b/ci/ansible/roles/dashboard-installer/scenarios/container.yml
@@ -0,0 +1,26 @@
+# Copyright (c) 2018 Huawei Technologies Co., Ltd. All Rights Reserved.
+#
+# 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.
+
+---
+- name: install docker-py package with pip when enabling containerized deployment
+ pip:
+ name: docker-py
+
+- name: run dashboard containerized service
+ docker_container:
+ name: dashboard
+ image: "{{ dashboard_docker_image }}"
+ state: started
+ network_mode: host
+ restart_policy: always
diff --git a/ci/ansible/roles/dashboard-installer/scenarios/source-code.yml b/ci/ansible/roles/dashboard-installer/scenarios/source-code.yml
new file mode 100644
index 0000000..bd2b1ff
--- /dev/null
+++ b/ci/ansible/roles/dashboard-installer/scenarios/source-code.yml
@@ -0,0 +1,58 @@
+# Copyright (c) 2018 Huawei Technologies Co., Ltd. All Rights Reserved.
+#
+# 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.
+
+---
+- set_fact:
+ go_path: "{{ lookup('env', 'GOPATH') }}"
+
+- name: check go_path
+ shell: "{{ item }}"
+ with_items:
+ - echo "The environment variable GOPATH must be set and cannot be an empty string!"
+ - /bin/false
+ when: go_path == ""
+
+- name: check for opensds source code existed
+ stat:
+ path: "{{ go_path }}/src/github.com/opensds/opensds"
+ register: opensdsexisted
+
+- name: download opensds source code if not exists
+ git:
+ repo: "{{ opensds_remote_url }}"
+ dest: "{{ go_path }}/src/github.com/opensds/opensds"
+ version: "{{ opensds_repo_branch }}"
+ when:
+ - opensdsexisted.stat.exists is undefined or opensdsexisted.stat.exists == false
+
+- name: build and configure opensds dashboard
+ shell: "{{ item }}"
+ with_items:
+ - service apache2 stop
+ - make
+ - service apache2 start
+ args:
+ chdir: "{{ go_path }}/src/github.com/opensds/opensds/dashboard"
+ warn: false
+ become: yes
+
+- name: update nginx default config
+ become: yes
+ shell: bash ./script/set_nginx_config.sh
+
+- name: restart nginx
+ service:
+ name: nginx
+ state: restarted
+ \ No newline at end of file
diff --git a/ci/ansible/roles/dashboard-installer/tasks/main.yml b/ci/ansible/roles/dashboard-installer/tasks/main.yml
new file mode 100644
index 0000000..ff221aa
--- /dev/null
+++ b/ci/ansible/roles/dashboard-installer/tasks/main.yml
@@ -0,0 +1,22 @@
+# Copyright (c) 2018 Huawei Technologies Co., Ltd. All Rights Reserved.
+#
+# 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.
+
+---
+- name: use container to install dashboard
+ include_tasks: scenarios/container.yml
+ when: dashboard_installation_type == "container"
+
+- name: use source code to install dashboard
+ include_tasks: scenarios/source-code.yml
+ when: dashboard_installation_type == "source_code"
diff --git a/ci/ansible/roles/nbp-installer/scenarios/csi.yml b/ci/ansible/roles/nbp-installer/scenarios/csi.yml
new file mode 100644
index 0000000..ef86967
--- /dev/null
+++ b/ci/ansible/roles/nbp-installer/scenarios/csi.yml
@@ -0,0 +1,44 @@
+# Copyright (c) 2018 Huawei Technologies Co., Ltd. All Rights Reserved.
+#
+# 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.
+
+---
+- name: Configure opensds endpoint IP in opensds csi plugin
+ lineinfile:
+ dest: "{{ nbp_work_dir }}/csi/deploy/kubernetes/csi-configmap-opensdsplugin.yaml"
+ regexp: '^ opensdsendpoint'
+ line: ' opensdsendpoint: {{ opensds_endpoint }}'
+ backup: yes
+
+- name: Configure opensds auth strategy in opensds csi plugin
+ lineinfile:
+ dest: "{{ nbp_work_dir }}/csi/deploy/kubernetes/csi-configmap-opensdsplugin.yaml"
+ regexp: '^ opensdsauthstrategy'
+ line: ' opensdsauthstrategy: {{ opensds_auth_strategy }}'
+ backup: yes
+
+- name: Configure keystone os auth url in opensds csi plugin
+ lineinfile:
+ dest: "{{ nbp_work_dir }}/csi/deploy/kubernetes/csi-configmap-opensdsplugin.yaml"
+ regexp: '^ osauthurl'
+ line: ' osauthurl: {{ keystone_os_auth_url }}'
+ backup: yes
+ when: opensds_auth_strategy == "keystone"
+
+- name: Prepare and deploy opensds csi plugin
+ shell: |
+ . /etc/profile
+ kubectl create -f deploy/kubernetes
+ args:
+ chdir: "{{ nbp_work_dir }}/csi"
+ ignore_errors: yes
diff --git a/ci/ansible/roles/nbp-installer/scenarios/flexvolume.yml b/ci/ansible/roles/nbp-installer/scenarios/flexvolume.yml
new file mode 100644
index 0000000..2117411
--- /dev/null
+++ b/ci/ansible/roles/nbp-installer/scenarios/flexvolume.yml
@@ -0,0 +1,56 @@
+# Copyright (c) 2018 Huawei Technologies Co., Ltd. All Rights Reserved.
+#
+# 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.
+
+---
+- name: Create flexvolume plugin directory if not existed
+ file:
+ path: "{{ flexvolume_plugin_dir }}"
+ state: directory
+ mode: 0755
+
+- name: Copy opensds flexvolume plugin binary file into flexvolume plugin dir
+ copy:
+ src: "{{ nbp_work_dir }}/bin/flexvolume.server.opensds"
+ dest: "{{ flexvolume_plugin_dir }}/opensds"
+ mode: 0755
+
+- name: Configure opensds endpoint IP in opensds external provisioner plugin
+ lineinfile:
+ dest: "{{ nbp_work_dir }}/provisioner/deploy/configmap.yaml"
+ regexp: '^ opensdsendpoint'
+ line: ' opensdsendpoint: {{ opensds_endpoint }}'
+ backup: yes
+
+- name: Configure opensds auth strategy in opensds external provisioner plugin
+ lineinfile:
+ dest: "{{ nbp_work_dir }}/provisioner/deploy/configmap.yaml"
+ regexp: '^ opensdsauthstrategy'
+ line: ' opensdsauthstrategy: {{ opensds_auth_strategy }}'
+ backup: yes
+
+- name: Configure keystone os auth url in opensds external provisioner plugin
+ lineinfile:
+ dest: "{{ nbp_work_dir }}/provisioner/deploy/configmap.yaml"
+ regexp: '^ osauthurl'
+ line: ' osauthurl: {{ keystone_os_auth_url }}'
+ backup: yes
+ when: opensds_auth_strategy == "keystone"
+
+- name: Prepare and deploy opensds external provisioner plugin
+ shell: |
+ . /etc/profile
+ kubectl create -f deploy/
+ args:
+ chdir: "{{ nbp_work_dir }}/provisioner"
+ ignore_errors: yes
diff --git a/ci/ansible/roles/nbp-installer/scenarios/release.yml b/ci/ansible/roles/nbp-installer/scenarios/release.yml
new file mode 100644
index 0000000..b528724
--- /dev/null
+++ b/ci/ansible/roles/nbp-installer/scenarios/release.yml
@@ -0,0 +1,40 @@
+# Copyright (c) 2018 Huawei Technologies Co., Ltd. All Rights Reserved.
+#
+# 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.
+
+---
+- name: check for nbp release files existed
+ stat:
+ path: "{{ nbp_tarball_dir }}"
+ ignore_errors: yes
+ register: nbpreleasesexisted
+
+- name: download and extract the nbp release tarball if not exists
+ unarchive:
+ src: "{{ nbp_download_url }}"
+ dest: /tmp/
+ remote_src: yes
+ when:
+ - nbpreleasesexisted.stat.exists is undefined or nbpreleasesexisted.stat.exists == false
+
+- name: change the mode of all binary files in nbp release
+ file:
+ path: "{{ nbp_tarball_dir }}/bin"
+ mode: 0755
+ recurse: yes
+
+- name: copy nbp tarball into nbp work directory
+ copy:
+ src: "{{ nbp_tarball_dir }}/"
+ dest: "{{ nbp_work_dir }}"
+ mode: 0755
diff --git a/ci/ansible/roles/nbp-installer/scenarios/repository.yml b/ci/ansible/roles/nbp-installer/scenarios/repository.yml
new file mode 100644
index 0000000..0c323d2
--- /dev/null
+++ b/ci/ansible/roles/nbp-installer/scenarios/repository.yml
@@ -0,0 +1,79 @@
+# Copyright (c) 2018 Huawei Technologies Co., Ltd. All Rights Reserved.
+#
+# 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.
+
+---
+- set_fact:
+ go_path: "{{ lookup('env', 'GOPATH') }}"
+
+- name: check go_path
+ shell: "{{ item }}"
+ with_items:
+ - echo "The environment variable GOPATH must be set and cannot be an empty string!"
+ - /bin/false
+ when: go_path == ""
+
+- name: check for nbp source code existed
+ stat:
+ path: "{{ go_path }}/src/github.com/opensds/nbp"
+ ignore_errors: yes
+ register: nbpexisted
+
+- name: download nbp source code if not exists
+ git:
+ repo: "{{ nbp_remote_url }}"
+ dest: "{{ go_path }}/src/github.com/opensds/nbp"
+ version: "{{ nbp_repo_branch }}"
+ when:
+ - nbpexisted.stat.exists is undefined or nbpexisted.stat.exists == false
+
+- name: build nbp binary file
+ shell: make
+ environment:
+ GOPATH: "{{ go_path }}"
+ args:
+ chdir: "{{ go_path }}/src/github.com/opensds/nbp"
+
+- name: create nbp install directory if it doesn't exist
+ file:
+ path: "{{ item }}"
+ state: directory
+ mode: 0755
+ with_items:
+ - "{{ nbp_work_dir }}/csi"
+ - "{{ nbp_work_dir }}/flexvolume"
+ - "{{ nbp_work_dir }}/provisioner"
+
+- name: copy nbp csi deploy scripts into nbp work directory
+ copy:
+ src: "{{ item }}"
+ dest: "{{ nbp_work_dir }}/csi/"
+ directory_mode: yes
+ with_items:
+ - "{{ go_path }}/src/github.com/opensds/nbp/csi/server/deploy"
+ - "{{ go_path }}/src/github.com/opensds/nbp/csi/server/examples"
+
+- name: copy nbp flexvolume binary file into nbp work directory
+ copy:
+ src: "{{ go_path }}/src/github.com/opensds/nbp/.output/flexvolume.server.opensds"
+ dest: "{{ nbp_work_dir }}/flexvolume/opensds"
+ mode: 0755
+
+- name: copy nbp provisioner deploy scripts into nbp work directory
+ copy:
+ src: "{{ item }}"
+ dest: "{{ nbp_work_dir }}/provisioner/"
+ directory_mode: yes
+ with_items:
+ - "{{ go_path }}/src/github.com/opensds/nbp/opensds-provisioner/deploy"
+ - "{{ go_path }}/src/github.com/opensds/nbp/opensds-provisioner/examples"
diff --git a/ci/ansible/roles/nbp-installer/tasks/main.yml b/ci/ansible/roles/nbp-installer/tasks/main.yml
new file mode 100644
index 0000000..09764a5
--- /dev/null
+++ b/ci/ansible/roles/nbp-installer/tasks/main.yml
@@ -0,0 +1,47 @@
+# Copyright (c) 2018 Huawei Technologies Co., Ltd. All Rights Reserved.
+#
+# 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.
+
+---
+- name: install open-iscsi external packages
+ apt:
+ name: "{{ item }}"
+ state: present
+ with_items:
+ - open-iscsi
+ when: nbp_plugin_type != "hotpot_only"
+
+- name: create nbp work directory if it doesn't exist
+ file:
+ path: "{{ item }}"
+ state: directory
+ mode: 0755
+ with_items:
+ - "{{ nbp_work_dir }}"
+ when: nbp_plugin_type != "hotpot_only"
+
+- name: include scenarios/repository.yml when installing from repository
+ include: scenarios/repository.yml
+ when: install_from == "repository" and nbp_plugin_type != "hotpot_only"
+
+- name: include scenarios/release.yml when installing from release
+ include: scenarios/release.yml
+ when: install_from == "release" and nbp_plugin_type != "hotpot_only"
+
+- name: include scenarios/flexvolume.yml when nbp plugin type is flexvolume
+ include: scenarios/flexvolume.yml
+ when: nbp_plugin_type == "flexvolume"
+
+- name: include scenarios/csi.yml when nbp plugin type is csi
+ include: scenarios/csi.yml
+ when: nbp_plugin_type == "csi"
diff --git a/ci/ansible/roles/osdsauth/tasks/main.yml b/ci/ansible/roles/osdsauth/tasks/main.yml
new file mode 100644
index 0000000..2148bb0
--- /dev/null
+++ b/ci/ansible/roles/osdsauth/tasks/main.yml
@@ -0,0 +1,21 @@
+# Copyright (c) 2018 Huawei Technologies Co., Ltd. All Rights Reserved.
+#
+# 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.
+
+---
+- name: install keystone
+ shell: "{{ item }}"
+ with_items:
+ - bash ./script/keystone.sh install
+ when: opensds_auth_strategy == "keystone"
+ become: yes
diff --git a/ci/ansible/roles/osdsdb/scenarios/container.yml b/ci/ansible/roles/osdsdb/scenarios/container.yml
new file mode 100644
index 0000000..0c7664c
--- /dev/null
+++ b/ci/ansible/roles/osdsdb/scenarios/container.yml
@@ -0,0 +1,24 @@
+# Copyright (c) 2018 Huawei Technologies Co., Ltd. All Rights Reserved.
+#
+# 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.
+
+---
+- name: run etcd containerized service
+ docker_container:
+ name: myetcd
+ image: "{{ etcd_docker_image }}"
+ command: /usr/local/bin/etcd --advertise-client-urls http://{{ etcd_host }}:{{ etcd_port }} --listen-client-urls http://{{ etcd_host }}:{{ etcd_port }} --listen-peer-urls http://{{ etcd_host }}:{{ etcd_peer_port }}
+ state: started
+ network_mode: host
+ volumes:
+ - "/usr/share/ca-certificates/:/etc/ssl/certs"
diff --git a/ci/ansible/roles/osdsdb/scenarios/etcd.yml b/ci/ansible/roles/osdsdb/scenarios/etcd.yml
index 79dc444..acd4937 100644
--- a/ci/ansible/roles/osdsdb/scenarios/etcd.yml
+++ b/ci/ansible/roles/osdsdb/scenarios/etcd.yml
@@ -1,3 +1,17 @@
+# Copyright (c) 2018 Huawei Technologies Co., Ltd. All Rights Reserved.
+#
+# 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.
+
---
- name: check for etcd existed
stat:
@@ -8,14 +22,14 @@
- name: download etcd
get_url:
url={{ etcd_download_url }}
- dest=/tmp/{{ etcd_tarball }}
+ dest=/opt/{{ etcd_tarball }}
when:
- etcdexisted.stat.exists is undefined or etcdexisted.stat.exists == false
- name: extract the etcd tarball
unarchive:
- src=/tmp/{{ etcd_tarball }}
- dest=/tmp/
+ src=/opt/{{ etcd_tarball }}
+ dest=/opt/
when:
- etcdexisted.stat.exists is undefined or etcdexisted.stat.exists == false
@@ -25,14 +39,15 @@
register: service_etcd_status
- name: run etcd daemon service
- shell: nohup ./etcd &>>etcd.log &
+ shell: nohup ./etcd --advertise-client-urls http://{{ etcd_host }}:{{ etcd_port }} --listen-client-urls http://{{ etcd_host }}:{{ etcd_port }} --listen-peer-urls http://{{ etcd_host }}:{{ etcd_peer_port }} &>>etcd.log &
become: true
args:
chdir: "{{ etcd_dir }}"
when: service_etcd_status.rc != 0
- name: check etcd cluster health
- shell: ./etcdctl cluster-health
+ shell: ./etcdctl --endpoints http://{{ etcd_host }}:{{ etcd_port }} cluster-health
become: true
+ ignore_errors: true
args:
chdir: "{{ etcd_dir }}"
diff --git a/ci/ansible/roles/osdsdb/scenarios/etcd_aarch64.yml b/ci/ansible/roles/osdsdb/scenarios/etcd_aarch64.yml
new file mode 100644
index 0000000..f3600d8
--- /dev/null
+++ b/ci/ansible/roles/osdsdb/scenarios/etcd_aarch64.yml
@@ -0,0 +1,39 @@
+---
+- name: check for etcd existed
+ stat:
+ path: "{{ etcd_dir }}/etcd"
+ ignore_errors: yes
+ register: etcdexisted
+
+- name: download etcd
+ get_url:
+ url={{ etcd_download_url }}
+ dest=/opt/{{ etcd_tarball }}
+ when:
+ - etcdexisted.stat.exists is undefined or etcdexisted.stat.exists == false
+
+- name: extract the etcd tarball
+ unarchive:
+ src=/opt/{{ etcd_tarball }}
+ dest=/opt/
+ when:
+ - etcdexisted.stat.exists is undefined or etcdexisted.stat.exists == false
+
+- name: Check if etcd is running
+ shell: ps aux | grep etcd | grep -v grep
+ ignore_errors: true
+ register: service_etcd_status
+
+- name: run etcd daemon service
+ shell: ETCD_UNSUPPORTED_ARCH=arm64 nohup ./etcd --advertise-client-urls http://{{ etcd_host }}:{{ etcd_port }} --listen-client-urls http://{{ etcd_host }}:{{ etcd_port }} -listen-peer-urls http://{{ etcd_host }}:{{ etcd_peer_port }} &>>etcd.log &
+ become: true
+ args:
+ chdir: "{{ etcd_dir }}"
+ when: service_etcd_status.rc != 0
+
+- name: check etcd cluster health
+ shell: ./etcdctl --endpoints http://{{ etcd_host }}:{{ etcd_port }} cluster-health
+ become: true
+ ignore_errors: true
+ args:
+ chdir: "{{ etcd_dir }}"
diff --git a/ci/ansible/roles/osdsdb/tasks/main.yml b/ci/ansible/roles/osdsdb/tasks/main.yml
index 41cbd09..f8fa944 100644
--- a/ci/ansible/roles/osdsdb/tasks/main.yml
+++ b/ci/ansible/roles/osdsdb/tasks/main.yml
@@ -1,4 +1,25 @@
+# Copyright (c) 2018 Huawei Technologies Co., Ltd. All Rights Reserved.
+#
+# 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.
+
---
- name: include scenarios/etcd.yml
- include: scenarios/etcd.yml
- when: db_driver == "etcd" \ No newline at end of file
+ include: "{{ item }}"
+ with_first_found:
+ - "scenarios/etcd_{{ ansible_architecture }}.yml"
+ - "scenarios/etcd.yml"
+ when: db_driver == "etcd" and etcd_container_enabled == false
+
+- name: include scenarios/container.yml
+ include: scenarios/container.yml
+ when: db_driver == "etcd" and etcd_container_enabled == true
diff --git a/ci/ansible/roles/osdsdock/scenarios/ceph.yml b/ci/ansible/roles/osdsdock/scenarios/ceph.yml
index 2f6348e..16aca67 100644
--- a/ci/ansible/roles/osdsdock/scenarios/ceph.yml
+++ b/ci/ansible/roles/osdsdock/scenarios/ceph.yml
@@ -1,69 +1,111 @@
+# Copyright (c) 2018 Huawei Technologies Co., Ltd. All Rights Reserved.
+#
+# 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.
+
---
- name: install ceph-common external package when ceph backend enabled
apt:
- name: ceph-common
- when: enabled_backend == "ceph"
+ name: "{{ item }}"
+ state: present
+ with_items:
+ - ceph-common
+
+- name: install notario package with pip when ceph backend enabled
+ pip:
+ name: "{{ item }}"
+ with_items:
+ - notario
+
+- name: configure ceph section in opensds global info if specify ceph backend
+ shell: |
+ cat >> opensds.conf <<OPENSDS_GLOABL_CONFIG_DOC
+
+ [ceph]
+ name = {{ ceph_name }}
+ description = {{ ceph_description }}
+ driver_name = {{ ceph_driver_name }}
+ config_path = {{ ceph_config_path }}
+ args:
+ chdir: "{{ opensds_config_dir }}"
+ ignore_errors: yes
+
+- name: copy opensds ceph backend file to ceph config file if specify ceph backend
+ copy:
+ src: ../../../group_vars/ceph/ceph.yaml
+ dest: "{{ ceph_config_path }}"
- name: check for ceph-ansible source code existed
stat:
- path: /tmp/ceph-ansible
+ path: /opt/ceph-ansible
ignore_errors: yes
register: cephansibleexisted
- name: download ceph-ansible source code
git:
repo: https://github.com/ceph/ceph-ansible.git
- dest: /tmp/ceph-ansible
+ dest: /opt/ceph-ansible
+ version: stable-3.0
when:
- cephansibleexisted.stat.exists is undefined or cephansibleexisted.stat.exists == false
- name: copy ceph inventory host into ceph-ansible directory
copy:
src: ../../../group_vars/ceph/ceph.hosts
- dest: /tmp/ceph-ansible/ceph.hosts
+ dest: /opt/ceph-ansible/ceph.hosts
- name: copy ceph all.yml file into ceph-ansible group_vars directory
copy:
src: ../../../group_vars/ceph/all.yml
- dest: /tmp/ceph-ansible/group_vars/all.yml
-
-- name: copy ceph osds.yml file into ceph-ansible group_vars directory
- copy:
- src: ../../../group_vars/ceph/osds.yml
- dest: /tmp/ceph-ansible/group_vars/osds.yml
+ dest: /opt/ceph-ansible/group_vars/all.yml
- name: copy site.yml.sample to site.yml in ceph-ansible
copy:
- src: /tmp/ceph-ansible/site.yml.sample
- dest: /tmp/ceph-ansible/site.yml
-
-- name: ping all hosts
- shell: ansible all -m ping -i ceph.hosts
- become: true
- args:
- chdir: /tmp/ceph-ansible
+ src: /opt/ceph-ansible/site.yml.sample
+ dest: /opt/ceph-ansible/site.yml
-- name: run ceph-ansible playbook
- shell: ansible-playbook site.yml -i ceph.hosts
+- name: ping all hosts and run ceph-ansible playbook
+ shell: "{{ item }}"
become: true
+ with_items:
+ - ansible all -m ping -i ceph.hosts
+ - ansible-playbook site.yml -i ceph.hosts | tee /var/log/ceph_ansible.log
args:
- chdir: /tmp/ceph-ansible
+ chdir: /opt/ceph-ansible
-- name: Check if ceph osd is running
+- name: check if ceph osd is running
shell: ps aux | grep ceph-osd | grep -v grep
- ignore_errors: false
+ ignore_errors: true
changed_when: false
register: service_ceph_osd_status
-- name: Check if ceph mon is running
+- name: check if ceph mon is running
shell: ps aux | grep ceph-mon | grep -v grep
- ignore_errors: false
+ ignore_errors: true
changed_when: false
register: service_ceph_mon_status
-- name: Create a pool and initialize it.
- shell: ceph osd pool create {{ ceph_pool_name }} 100 && ceph osd pool set {{ ceph_pool_name }} size 1
+- name: configure profile and disable some features in ceph for kernel compatible.
+ shell: "{{ item }}"
+ become: true
+ ignore_errors: yes
+ with_items:
+ - ceph osd crush tunables hammer
+ - grep -q "^rbd default features" /etc/ceph/ceph.conf || sed -i '/\[global\]/arbd default features = 1' /etc/ceph/ceph.conf
+ when: service_ceph_mon_status.rc == 0 and service_ceph_osd_status.rc == 0
+
+- name: create specified pools and initialize them with default pool size.
+ shell: ceph osd pool create {{ item }} 100 && ceph osd pool set {{ item }} size 1
ignore_errors: yes
changed_when: false
- register: ceph_init_pool
- when: service_ceph_mon_status.rc == 0 and service_ceph_osd_status.rc == 0 \ No newline at end of file
+ with_items: "{{ ceph_pools }}"
+ when: service_ceph_mon_status.rc == 0 and service_ceph_osd_status.rc == 0
diff --git a/ci/ansible/roles/osdsdock/scenarios/cinder.yml b/ci/ansible/roles/osdsdock/scenarios/cinder.yml
index 7313caa..97ebe9d 100644
--- a/ci/ansible/roles/osdsdock/scenarios/cinder.yml
+++ b/ci/ansible/roles/osdsdock/scenarios/cinder.yml
@@ -1 +1,32 @@
+# Copyright (c) 2018 Huawei Technologies Co., Ltd. All Rights Reserved.
+#
+# 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.
+
---
+- name: configure cinder section in opensds global info if specify cinder backend
+ shell: |
+ cat >> opensds.conf <<OPENSDS_GLOABL_CONFIG_DOC
+
+ [cinder]
+ name = {{ cinder_name }}
+ description = {{ cinder_description }}
+ driver_name = {{ cinder_driver_name }}
+ config_path = {{ cinder_config_path }}
+ args:
+ chdir: "{{ opensds_config_dir }}"
+ ignore_errors: yes
+
+- name: copy opensds cinder backend file to cinder config path if specify cinder backend
+ copy:
+ src: ../../../group_vars/cinder/cinder.yaml
+ dest: "{{ cinder_config_path }}"
diff --git a/ci/ansible/roles/osdsdock/scenarios/cinder_standalone.yml b/ci/ansible/roles/osdsdock/scenarios/cinder_standalone.yml
index 4ad5cea..b62d2d1 100644
--- a/ci/ansible/roles/osdsdock/scenarios/cinder_standalone.yml
+++ b/ci/ansible/roles/osdsdock/scenarios/cinder_standalone.yml
@@ -1,20 +1,45 @@
----
-
-- name: install python-pip
- apt:
- name: python-pip
+# Copyright (c) 2018 Huawei Technologies Co., Ltd. All Rights Reserved.
+#
+# 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.
-- name: install lvm2
+---
+- name: install python-pip, lvm2, thin-provisioning-tools and docker-compose
apt:
- name: lvm2
+ name: "{{ item }}"
+ state: present
+ with_items:
+ - python-pip
+ - lvm2
+ - thin-provisioning-tools
+ - docker-compose
+
+- name: configure cinder section in opensds global info if specify cinder backend
+ shell: |
+ cat >> opensds.conf <<OPENSDS_GLOABL_CONFIG_DOC
-- name: install thin-provisioning-tools
- apt:
- name: thin-provisioning-tools
+ [cinder]
+ name = {{ cinder_name }}
+ description = {{ cinder_description }}
+ driver_name = {{ cinder_driver_name }}
+ config_path = {{ cinder_config_path }}
+ args:
+ chdir: "{{ opensds_config_dir }}"
+ ignore_errors: yes
-- name: install docker-compose
- pip:
- name: docker-compose
+- name: copy opensds cinder backend file to cinder config path if specify cinder backend
+ copy:
+ src: ../../../group_vars/cinder/cinder.yaml
+ dest: "{{ cinder_config_path }}"
- name: create directory to save source code and volume group file
file:
@@ -36,6 +61,11 @@
local vg_dev
vg_dev=`sudo losetup -f --show $backing_file`
+ # Only create physical volume if it doesn't already exist
+ if ! sudo pvs $vg_dev; then
+ sudo pvcreate $vg_dev
+ fi
+
# Only create volume group if it doesn't already exist
if ! sudo vgs $vg; then
sudo vgcreate $vg $vg_dev
@@ -114,7 +144,9 @@
sed -i "s/TAG ?= debian-cinder:latest/TAG ?= {{ cinder_image_tag }}:latest/g" Makefile
sed -i "s/image: debian-cinder/image: {{ cinder_image_tag }}/g" docker-compose.yml
- sed -i "s/image: lvm-debian-cinder/image: {{ cinder_image_tag }}/g" docker-compose.yml
+ sed -i "s/image: lvm-debian-cinder/image: lvm-{{ cinder_image_tag }}/g" docker-compose.yml
+
+ sed -i "s/3306:3306/3307:3306/g" docker-compose.yml
sed -i "s/volume_group = cinder-volumes /volume_group = {{ cinder_volume_group }}/g" etc/cinder.conf
become: true
@@ -137,5 +169,5 @@
wait_for:
host: 127.0.0.1
port: 8776
- delay: 2
+ delay: 15
timeout: 120
diff --git a/ci/ansible/roles/osdsdock/scenarios/lvm.yml b/ci/ansible/roles/osdsdock/scenarios/lvm.yml
index d1d7b36..a93f1e4 100644
--- a/ci/ansible/roles/osdsdock/scenarios/lvm.yml
+++ b/ci/ansible/roles/osdsdock/scenarios/lvm.yml
@@ -1,22 +1,78 @@
+# Copyright (c) 2018 Huawei Technologies Co., Ltd. All Rights Reserved.
+#
+# 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.
+
---
-- name: install lvm2 external package when lvm backend enabled
+- name: install lvm2 ang tgt external package when lvm backend enabled
apt:
- name: lvm2
+ name: "{{ item }}"
+ state: present
+ with_items:
+ - lvm2
+ - tgt
+ - thin-provisioning-tools
+
+- name: configure lvm section in opensds global info if specify lvm backend
+ shell: |
+ cat >> opensds.conf <<OPENSDS_GLOABL_CONFIG_DOC
-- name: check if physical volume existed
- shell: pvdisplay {{ pv_device }}
+ [lvm]
+ name = {{ lvm_name }}
+ description = {{ lvm_description }}
+ driver_name = {{ lvm_driver_name }}
+ config_path = {{ lvm_config_path }}
+ args:
+ chdir: "{{ opensds_config_dir }}"
ignore_errors: yes
- register: pv_existed
-- name: create a physical volume
- shell: pvcreate {{ pv_device }}
- when: pv_existed is undefined or pv_existed.rc != 0
+- name: copy opensds lvm backend file to lvm config path if specify lvm backend
+ copy:
+ src: ../../../group_vars/lvm/lvm.yaml
+ dest: "{{ lvm_config_path }}"
-- name: check if volume group existed
- shell: vgdisplay {{ vg_name }}
- ignore_errors: yes
- register: vg_existed
+- name: create directory to volume group file
+ file:
+ path: "{{ opensds_work_dir }}/volumegroups"
+ state: directory
+ recurse: yes
+
+- name: create volume group in thin mode
+ shell:
+ _raw_params: |
+ function _create_lvm_volume_group {
+ local vg=$1
+ local size=$2
+
+ local backing_file={{ opensds_work_dir }}/volumegroups/${vg}.img
+ if ! sudo vgs $vg; then
+ # Only create if the file doesn't already exists
+ [[ -f $backing_file ]] || truncate -s $size $backing_file
+ local vg_dev
+ vg_dev=`sudo losetup -f --show $backing_file`
+
+ # Only create physical volume if it doesn't already exist
+ if ! sudo pvs $vg_dev; then
+ sudo pvcreate $vg_dev
+ fi
-- name: create a volume group
- shell: vgcreate {{ vg_name }} {{ pv_device }}
- when: vg_existed is undefined or vg_existed.rc != 0
+ # Only create volume group if it doesn't already exist
+ if ! sudo vgs $vg; then
+ sudo vgcreate $vg $vg_dev
+ fi
+ fi
+ }
+ modprobe dm_thin_pool
+ _create_lvm_volume_group {{ opensds_volume_group }} 10G
+ args:
+ executable: /bin/bash
+ become: true
diff --git a/ci/ansible/roles/osdsdock/tasks/main.yml b/ci/ansible/roles/osdsdock/tasks/main.yml
index 2462905..dc803b5 100644
--- a/ci/ansible/roles/osdsdock/tasks/main.yml
+++ b/ci/ansible/roles/osdsdock/tasks/main.yml
@@ -1,3 +1,17 @@
+# Copyright (c) 2018 Huawei Technologies Co., Ltd. All Rights Reserved.
+#
+# 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.
+
---
- name: include scenarios/lvm.yml
include: scenarios/lvm.yml
@@ -23,9 +37,26 @@
i="$((i+1))"
[ "$i" -lt 4 ]
do
- nohup bin/osdsdock &>/dev/null &
+ nohup bin/osdsdock > osdsdock.out 2> osdsdock.err < /dev/null &
sleep 5
ps aux | grep osdsdock | grep -v grep && break
done
args:
- chdir: "{{ opensds_build_dir }}/out"
+ chdir: "{{ opensds_work_dir }}"
+ when: install_from != "container"
+
+- name: run osdsdock containerized service
+ docker_container:
+ name: osdsdock
+ image: "{{ dock_docker_image }}"
+ state: started
+ network_mode: host
+ privileged: true
+ volumes:
+ - "/etc/opensds:/etc/opensds"
+ - "/etc/ceph:/etc/ceph"
+ - "/dev/:/dev/"
+ - "/run/:/run/:shared"
+ - "/etc/localtime:/etc/localtime:ro"
+ - "/lib/modules:/lib/modules:ro"
+ when: install_from == "container"
diff --git a/ci/ansible/roles/osdslet/tasks/main.yml b/ci/ansible/roles/osdslet/tasks/main.yml
index 2c3e0aa..d844e3a 100644
--- a/ci/ansible/roles/osdslet/tasks/main.yml
+++ b/ci/ansible/roles/osdslet/tasks/main.yml
@@ -1,3 +1,17 @@
+# Copyright (c) 2018 Huawei Technologies Co., Ltd. All Rights Reserved.
+#
+# 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.
+
---
- name: run osdslet daemon service
shell:
@@ -12,4 +26,15 @@
ps aux | grep osdslet | grep -v grep && break
done
args:
- chdir: "{{ opensds_build_dir }}/out"
+ chdir: "{{ opensds_work_dir }}"
+ when: install_from != "container"
+
+- name: run osdslet containerized service
+ docker_container:
+ name: osdslet
+ image: "{{ controller_docker_image }}"
+ state: started
+ network_mode: host
+ volumes:
+ - "/etc/opensds/:/etc/opensds"
+ when: install_from == "container"