From 18c7be145dbd1c6d3b52d0fdaa26f105369bef13 Mon Sep 17 00:00:00 2001 From: alexey-mr Date: Mon, 8 Aug 2016 18:09:43 +0300 Subject: [PATCH] Glance over Cinder support Change-Id: Ib38a8bd3e5c02ab9214726ab313024fda46cd754 --- deployment_scripts/puppet/manifests/glance.pp | 65 +++++++++++++++++++ .../manifests/glance_create_test_image.pp | 27 ++++++++ .../manifests/glance_delete_test_image.pp | 22 +++++++ deployment_scripts/puppet/manifests/sdc.pp | 16 ++++- .../puppet/manifests/sdc_server.pp | 16 ++++- .../scaleio_fuel/files/glance_rootwrap.conf | 27 ++++++++ .../modules/scaleio_fuel/files/glance_sudoers | 3 + deployment_tasks.yaml | 39 ++++++++++- environment_config.yaml | 10 +++ 9 files changed, 217 insertions(+), 8 deletions(-) create mode 100644 deployment_scripts/puppet/manifests/glance.pp create mode 100644 deployment_scripts/puppet/manifests/glance_create_test_image.pp create mode 100644 deployment_scripts/puppet/manifests/glance_delete_test_image.pp create mode 100644 deployment_scripts/puppet/modules/scaleio_fuel/files/glance_rootwrap.conf create mode 100644 deployment_scripts/puppet/modules/scaleio_fuel/files/glance_sudoers diff --git a/deployment_scripts/puppet/manifests/glance.pp b/deployment_scripts/puppet/manifests/glance.pp new file mode 100644 index 0000000..49048ca --- /dev/null +++ b/deployment_scripts/puppet/manifests/glance.pp @@ -0,0 +1,65 @@ +# The puppet configures OpenStack glance to use ScaleIO via Cinder. + +define glance_config( + $config_file, +) { + Ini_setting { + ensure => 'present', + section => 'glance_store', + path => $config_file, + } + ini_setting { "${config_file}: default_store": + setting => 'default_store', + value => 'cinder', + } -> + ini_setting { "${config_file}: stores": + setting => 'stores', + value => 'glance.store.cinder.Store', + } +} + +$scaleio = hiera('scaleio') +if $scaleio['metadata']['enabled'] { + $all_nodes = hiera('nodes') + $nodes = filter_nodes($all_nodes, 'name', $::hostname) + if empty(filter_nodes($nodes, 'role', 'primary-controller')) and empty(filter_nodes($nodes, 'role', 'controller')) { + fail("glance task should be run only on controllers, but node ${::hostname} is not controller") + } + if $scaleio['use_scaleio_for_glance'] { + $glance_services = $::osfamily ? { + 'RedHat' => ['openstack-glance-api', 'openstack-glance-registry', 'openstack-glance-glare'], + 'Debian' => ['glance-api', 'glance-registry', 'glance-glare'], + } + $glance_api_config_file = '/etc/glance/glance-api.conf' + $glance_glare_config_file = '/etc/glance/glance-glare.conf' + package { ['python-cinderclient', 'python-os-brick', 'python-oslo.rootwrap']: + ensure => 'present', + } -> + class {'scaleio_openstack::glance': + } -> + file { "/etc/glance/rootwrap.conf": + ensure => $ensure, + source => "puppet:///modules/scaleio_fuel/glance_rootwrap.conf", + mode => '0755', + owner => 'root', + group => 'root', + } -> + file { "/etc/sudoers.d/glance_sudoers": + ensure => $ensure, + source => "puppet:///modules/scaleio_fuel/glance_sudoers", + mode => '0644', + owner => 'root', + group => 'root', + } -> + glance_config {"${glance_api_config_file}": + config_file => $glance_api_config_file + } -> + glance_config {"${glance_glare_config_file}": + config_file => $glance_glare_config_file + } ~> + service { $glance_services: + ensure => running, + enable => true, + } + } +} diff --git a/deployment_scripts/puppet/manifests/glance_create_test_image.pp b/deployment_scripts/puppet/manifests/glance_create_test_image.pp new file mode 100644 index 0000000..a50ab73 --- /dev/null +++ b/deployment_scripts/puppet/manifests/glance_create_test_image.pp @@ -0,0 +1,27 @@ +# The puppet create new OpenStack Glance's test image. + +$scaleio = hiera('scaleio') +if $scaleio['metadata']['enabled'] { + $all_nodes = hiera('nodes') + $nodes = filter_nodes($all_nodes, 'name', $::hostname) + if empty(filter_nodes($nodes, 'role', 'primary-controller')) { + fail("create test image task should be run only on primary-controller, but node ${::hostname} is not primary-controller") + } + if $scaleio['use_scaleio_for_glance'] { + $test_vm_image_cfg = hiera('test_vm_image') + if $test_vm_image_cfg { + $image_name = $test_vm_image_cfg['img_name'] + $local_path = $test_vm_image_cfg['img_path'] + $is_public_opts = $test_vm_image_cfg['public'] ? { + false => '--private', + 'false' => '--private', + default => '--public', + } + exec {"test image create": + command => "bash -c 'source /root/openrc && openstack image create ${is_public_opts} --file ${local_path} ${image_name}'", + unless => "bash -c 'source /root/openrc && openstack image list | grep -qi ${image_name}'", + path => '/bin:/usr/bin:/usr/local/bin', + } + } + } +} diff --git a/deployment_scripts/puppet/manifests/glance_delete_test_image.pp b/deployment_scripts/puppet/manifests/glance_delete_test_image.pp new file mode 100644 index 0000000..19bd37e --- /dev/null +++ b/deployment_scripts/puppet/manifests/glance_delete_test_image.pp @@ -0,0 +1,22 @@ +# The puppet removes OpenStack Glance's test image if it exists. +# It's needed to change default backend for images. + +$scaleio = hiera('scaleio') +if $scaleio['metadata']['enabled'] { + $all_nodes = hiera('nodes') + $nodes = filter_nodes($all_nodes, 'name', $::hostname) + if empty(filter_nodes($nodes, 'role', 'primary-controller')) { + fail("delete test image task should be run only on primary-controller, but node ${::hostname} is not primary-controller") + } + if $scaleio['use_scaleio_for_glance'] { + $test_vm_image_cfg = hiera('test_vm_image') + if $test_vm_image_cfg { + $test_image = $test_vm_image_cfg['img_name'] + exec {"test image delete": + command => "bash -c 'source /root/openrc && openstack image delete ${test_image}'", + onlyif => "bash -c 'source /root/openrc && openstack image list | grep -qi ${test_image}'", + path => '/bin:/usr/bin:/usr/local/bin', + } + } + } +} diff --git a/deployment_scripts/puppet/manifests/sdc.pp b/deployment_scripts/puppet/manifests/sdc.pp index 9f80309..a1eda70 100644 --- a/deployment_scripts/puppet/manifests/sdc.pp +++ b/deployment_scripts/puppet/manifests/sdc.pp @@ -6,9 +6,19 @@ if $scaleio['metadata']['enabled'] { if ! $::controller_ips { fail('Empty Controller IPs configuration') } - class {'::scaleio::sdc_server': - ensure => 'present', - mdm_ip => $::controller_ips, + $all_nodes = hiera('nodes') + $nodes = filter_nodes($all_nodes, 'name', $::hostname) + $is_compute = !empty(filter_nodes($nodes, 'role', 'compute')) + $is_cinder = !empty(filter_nodes($nodes, 'role', 'cinder')) + $is_glance = (!empty(filter_nodes($nodes, 'role', 'primary-controller')) or !empty(filter_nodes($nodes, 'role', 'controller'))) and $scaleio['use_scaleio_for_glance'] + $need_sdc = $is_compute or $is_cinder or $is_glance + if $need_sdc { + class {'::scaleio::sdc_server': + ensure => 'present', + mdm_ip => $::controller_ips, + } + } else{ + notify {"Skip SDC server task on the node ${::hostname}": } } } diff --git a/deployment_scripts/puppet/manifests/sdc_server.pp b/deployment_scripts/puppet/manifests/sdc_server.pp index 1ffab00..cd6211f 100644 --- a/deployment_scripts/puppet/manifests/sdc_server.pp +++ b/deployment_scripts/puppet/manifests/sdc_server.pp @@ -2,8 +2,18 @@ $scaleio = hiera('scaleio') if $scaleio['metadata']['enabled'] { - class {'::scaleio::sdc_server': - ensure => 'present', - mdm_ip => undef, + $all_nodes = hiera('nodes') + $nodes = filter_nodes($all_nodes, 'name', $::hostname) + $is_compute = !empty(filter_nodes($nodes, 'role', 'compute')) + $is_cinder = !empty(filter_nodes($nodes, 'role', 'cinder')) + $is_glance = (!empty(filter_nodes($nodes, 'role', 'primary-controller')) or !empty(filter_nodes($nodes, 'role', 'controller'))) and $scaleio['use_scaleio_for_glance'] + $need_sdc = $is_compute or $is_cinder or $is_glance + if $need_sdc { + class {'::scaleio::sdc_server': + ensure => 'present', + mdm_ip => undef, + } + } else{ + notify {"Skip SDC server task on the node ${::hostname}": } } } diff --git a/deployment_scripts/puppet/modules/scaleio_fuel/files/glance_rootwrap.conf b/deployment_scripts/puppet/modules/scaleio_fuel/files/glance_rootwrap.conf new file mode 100644 index 0000000..486da5a --- /dev/null +++ b/deployment_scripts/puppet/modules/scaleio_fuel/files/glance_rootwrap.conf @@ -0,0 +1,27 @@ +# Configuration for glance-rootwrap +# This file should be owned by (and only-writeable by) the root user + +[DEFAULT] +# List of directories to load filter definitions from (separated by ','). +# These directories MUST all be only writeable by root ! +filters_path=/etc/glance/rootwrap.d + +# List of directories to search executables in, in case filters do not +# explicitely specify a full path (separated by ',') +# If not specified, defaults to system PATH environment variable. +# These directories MUST all be only writeable by root ! +exec_dirs=/sbin,/usr/sbin,/bin,/usr/bin,/usr/local/bin,/usr/local/sbin + +# Enable logging to syslog +# Default value is False +use_syslog=False + +# Which syslog facility to use. +# Valid values include auth, authpriv, syslog, local0, local1... +# Default value is 'syslog' +syslog_log_facility=syslog + +# Which messages to log. +# INFO means log all usage +# ERROR means only log unsuccessful attempts +syslog_log_level=ERROR diff --git a/deployment_scripts/puppet/modules/scaleio_fuel/files/glance_sudoers b/deployment_scripts/puppet/modules/scaleio_fuel/files/glance_sudoers new file mode 100644 index 0000000..a5a30a3 --- /dev/null +++ b/deployment_scripts/puppet/modules/scaleio_fuel/files/glance_sudoers @@ -0,0 +1,3 @@ +Defaults:glance !requiretty + +glance ALL = (root) NOPASSWD: /usr/bin/glance-rootwrap /etc/glance/rootwrap.conf * diff --git a/deployment_tasks.yaml b/deployment_tasks.yaml index 3bc313f..b1aed9e 100644 --- a/deployment_tasks.yaml +++ b/deployment_tasks.yaml @@ -130,7 +130,7 @@ - id: scaleio-sdc-server required_for: [post_deployment_end] requires: [scaleio-sds-server, scaleio-environment-existing-mdm-ips] - role: [compute, cinder] + role: [primary-controller, controller, compute, cinder] type: puppet parameters: puppet_manifest: puppet/manifests/sdc_server.pp @@ -140,7 +140,7 @@ - id: scaleio-sdc required_for: [post_deployment_end] requires: [scaleio-sdc-server] - role: [compute, cinder] + role: [primary-controller, controller, compute, cinder] type: puppet parameters: puppet_manifest: puppet/manifests/sdc.pp @@ -188,3 +188,38 @@ puppet_modules: puppet/modules:/etc/puppet/modules timeout: 600 +- id: scaleio-glance-cleanup + required_for: [post_deployment_end] + requires: [scaleio-configure-cluster] + cross-depends: + - name: scaleio-configure-cluster + role: [primary-controller] + type: puppet + parameters: + puppet_manifest: puppet/manifests/glance_delete_test_image.pp + puppet_modules: puppet/modules:/etc/puppet/modules + timeout: 600 + +- id: scaleio-glance + required_for: [post_deployment_end] + requires: [scaleio-glance-cleanup] + cross-depends: + - name: scaleio-glance-cleanup + role: [primary-controller, controller] + type: puppet + parameters: + puppet_manifest: puppet/manifests/glance.pp + puppet_modules: puppet/modules:/etc/puppet/modules + timeout: 600 + +- id: scaleio-glance-test-image + required_for: [post_deployment_end] + requires: [scaleio-glance] + cross-depends: + - name: scaleio-glance + role: [primary-controller] + type: puppet + parameters: + puppet_manifest: puppet/manifests/glance_create_test_image.pp + puppet_modules: puppet/modules:/etc/puppet/modules + timeout: 600 diff --git a/environment_config.yaml b/environment_config.yaml index a0b397e..9d0e5f4 100644 --- a/environment_config.yaml +++ b/environment_config.yaml @@ -296,6 +296,16 @@ attributes: - condition: "settings:scaleio.existing_cluster.value == true" action: hide + use_scaleio_for_glance: + type: "checkbox" + value: false + label: "Glance images on ScaleIO" + description: "Glance uses ScaleIO as a backend for images if the option enabled. It uses cinder backend in Glance to store images on ScaleIO." + weight: 195 + restrictions: + - condition: "settings:scaleio.existing_cluster.value == true or cluster:fuel_version == '6.1' or cluster:fuel_version == '7.0' or cluster:fuel_version == '8.0'" + action: hide + version: type: "select" weight: 200