Retire repository

Fuel repositories are all retired in openstack namespace, retire
remaining fuel repos in x namespace since they are unused now.

This change removes all content from the repository and adds the usual
README file to point out that the repository is retired following the
process from
https://docs.openstack.org/infra/manual/drivers.html#retiring-a-project

See also
http://lists.openstack.org/pipermail/openstack-discuss/2019-December/011675.html

A related change is: https://review.opendev.org/699752 .

Change-Id: I2e07054b34bb2c7ea12c0ccea45611878875ce25
This commit is contained in:
Andreas Jaeger 2019-12-18 19:36:36 +01:00
parent 15881de539
commit 07b5064a56
49 changed files with 10 additions and 2674 deletions

4
.gitignore vendored
View File

@ -1,4 +0,0 @@
.build/
emc_vnx*.noarch.rpm
repositories/centos/*.rpm
repositories/ubuntu/*.deb

176
LICENSE
View File

@ -1,176 +0,0 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.

View File

@ -1,88 +0,0 @@
EMC VNX Plugin for Fuel
=======================
EMC VNX plugin
--------------
EMC VNX plugin for Fuel extends Mirantis OpenStack functionality by adding
support for EMC VNX arrays in Cinder using iSCSI protocol. It replaces Cinder
LVM driver which is the default volume backend that uses local volumes
managed by LVM.
Requirements
------------
| Requirement | Version/Comment |
|:---------------------------------|:----------------|
| Mirantis OpenStack compatibility | 9.0 |
Limitations
-----------
Since only one storage network is available in Fuel 6.x on OpenStack nodes,
multipath will bind all storage paths from EMC on one network interface.
In case this NIC fails, the communication with storage is lost.
Installation Guide
==================
EMC VNX configuration
---------------------
Before starting a deployment you have to preconfigure EMC VNX array and connect
it properly to the environment. Both EMC SP IPs and all iSCSI ports should be
available over storage interface from OpenStack nodes. To learn more about
EMC VNX configuration, see
[the official EMC VNX series documentation](https://mydocuments.emc.com/DynDispatcher?prod=VNX&page=ConfigGroups_VNX)
EMC VNX configuration checklist:
1. create username/password
2. create at least one storage pool
3. configure network for A and B Service Processors
4. configure network for all iSCSI ports
EMC VNX plugin installation
---------------------------
To install EMC VNX plugin, follow these steps:
1. Download the plugin from
[Fuel Plugins Catalog](https://software.mirantis.com/fuel-plugins)
2. Copy the plugin on already installed Fuel Master node; ssh can be used for
that. If you do not have the Fuel Master node yet, see
[Quick Start Guide](https://software.mirantis.com/quick-start/):
# scp emc_vnx-4.0-4.0.0-0.noarch.rpm root@<Fuel_master_ip>:/tmp
3. Log into the Fuel Master node. Install the plugin:
# cd /tmp
# fuel plugins --install emc_vnx-4.0-4.0.0-0.noarch.rpm
4. Check if the plugin was installed successfully:
# fuel plugins
id | name | version | package_version
---|---------|---------|----------------
1 | emc_vnx | 4.0.0 | 4.0.0
EMC VNX plugin configuration
----------------------------
1. Create an environment with the default backend for Cinder.
2. Enable the plugin on the Settings tab of the Fuel web UI and fill in form
fields:
* username/password - access credentials configured on EMC VNX
* SP A/B IP - IP addresses of the EMC VNX Service Processors
* pool name (optional) - a name of the EMC VNX storage pool on which all
Cinder volumes will be created. Provided storage pool must be available on
EMC VNX. If pool name is not provided then EMC VNX driver will use a random
storage pool available on EMC VNX. You can also use a Volume Type OpenStack
feature to create a volume on a specific storage pool.
For more information, see
[Multiple pools support](https://github.com/emc-openstack/vnx-direct-driver
/blob/master/README_ISCSI.md#multiple-pools-support)
3. Deploy the environment without a Cinder node. All required Cinder services
are run on Controller nodes.

10
README.rst Normal file
View File

@ -0,0 +1,10 @@
This project is no longer maintained.
The contents of this repository are still available in the Git
source code management system. To see the contents of this
repository before it reached its end of life, please check out the
previous commit with "git checkout HEAD^1".
For any further questions, please email
openstack-discuss@lists.openstack.org or join #openstack-dev on
Freenode.

View File

@ -1,8 +0,0 @@
- name: 'storage:block:emc'
label: 'EMC'
description: 'EMC Driver for Cinder'
compatible:
- name: 'hypervisor:libvirt:*'
incompatible:
- name: 'storage:block:ceph'
- name: 'storage:block:lvm'

View File

@ -1,17 +0,0 @@
#
# Copyright 2015 Mirantis, Inc.
#
# 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.
#
notice('MODULAR: emc/compute.pp')
include plugin_emc_vnx::compute

View File

@ -1,17 +0,0 @@
#
# Copyright 2015 Mirantis, Inc.
#
# 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.
#
notice('MODULAR: emc/controller.pp')
include plugin_emc_vnx::controller

View File

@ -1,265 +0,0 @@
#
# Open-iSCSI default configuration.
# Could be located at /etc/iscsi/iscsid.conf or ~/.iscsid.conf
#
# Note: To set any of these values for a specific node/session run
# the iscsiadm --mode node --op command for the value. See the README
# and man page for iscsiadm for details on the --op command.
#
################
# iSNS settings
################
# Address of iSNS server
#isns.address = 192.168.0.1
#isns.port = 3205
#############################
# NIC/HBA and driver settings
#############################
# open-iscsi can create a session and bind it to a NIC/HBA.
# To set this up see the example iface config file.
#*****************
# Startup settings
#*****************
# To request that the iscsi initd scripts startup a session set to "automatic".
# node.startup = automatic
#
# To manually startup the session set to "manual". The default is manual.
node.startup = manual
# *************
# CHAP Settings
# *************
# To enable CHAP authentication set node.session.auth.authmethod
# to CHAP. The default is None.
#node.session.auth.authmethod = CHAP
# To set a CHAP username and password for initiator
# authentication by the target(s), uncomment the following lines:
#node.session.auth.username = username
#node.session.auth.password = password
# To set a CHAP username and password for target(s)
# authentication by the initiator, uncomment the following lines:
#node.session.auth.username_in = username_in
#node.session.auth.password_in = password_in
# To enable CHAP authentication for a discovery session to the target
# set discovery.sendtargets.auth.authmethod to CHAP. The default is None.
#discovery.sendtargets.auth.authmethod = CHAP
# To set a discovery session CHAP username and password for the initiator
# authentication by the target(s), uncomment the following lines:
#discovery.sendtargets.auth.username = username
#discovery.sendtargets.auth.password = password
# To set a discovery session CHAP username and password for target(s)
# authentication by the initiator, uncomment the following lines:
#discovery.sendtargets.auth.username_in = username_in
#discovery.sendtargets.auth.password_in = password_in
# ********
# Timeouts
# ********
#
# See the iSCSI REAME's Advanced Configuration section for tips
# on setting timeouts when using multipath or doing root over iSCSI.
#
# To specify the length of time to wait for session re-establishment
# before failing SCSI commands back to the application when running
# the Linux SCSI Layer error handler, edit the line.
# The value is in seconds and the default is 120 seconds.
node.session.timeo.replacement_timeout = 5
# To specify the time to wait for login to complete, edit the line.
# The value is in seconds and the default is 15 seconds.
node.conn[0].timeo.login_timeout = 5
# To specify the time to wait for logout to complete, edit the line.
# The value is in seconds and the default is 15 seconds.
node.conn[0].timeo.logout_timeout = 5
# Time interval to wait for on connection before sending a ping.
node.conn[0].timeo.noop_out_interval = 3
# To specify the time to wait for a Nop-out response before failing
# the connection, edit this line. Failing the connection will
# cause IO to be failed back to the SCSI layer. If using dm-multipath
# this will cause the IO to be failed to the multipath layer.
node.conn[0].timeo.noop_out_timeout = 3
# To specify the time to wait for abort response before
# failing the operation and trying a logical unit reset edit the line.
# The value is in seconds and the default is 15 seconds.
node.session.err_timeo.abort_timeout = 15
# To specify the time to wait for a logical unit response
# before failing the operation and trying session re-establishment
# edit the line.
# The value is in seconds and the default is 30 seconds.
node.session.err_timeo.lu_reset_timeout = 20
#******
# Retry
#******
# To specify the number of times iscsid should retry a login
# if the login attempt fails due to the node.conn[0].timeo.login_timeout
# expiring modify the following line. Note that if the login fails
# quickly (before node.conn[0].timeo.login_timeout fires) because the network
# layer or the target returns an error, iscsid may retry the login more than
# node.session.initial_login_retry_max times.
#
# This retry count along with node.conn[0].timeo.login_timeout
# determines the maximum amount of time iscsid will try to
# establish the initial login. node.session.initial_login_retry_max is
# multiplied by the node.conn[0].timeo.login_timeout to determine the
# maximum amount.
#
# The default node.session.initial_login_retry_max is 8 and
# node.conn[0].timeo.login_timeout is 15 so we have:
#
# node.conn[0].timeo.login_timeout * node.session.initial_login_retry_max =
# 120 seconds
#
# Valid values are any integer value. This only
# affects the initial login. Setting it to a high value can slow
# down the iscsi service startup. Setting it to a low value can
# cause a session to not get logged into, if there are distuptions
# during startup or if the network is not ready at that time.
node.session.initial_login_retry_max = 8
################################
# session and device queue depth
################################
# To control how many commands the session will queue set
# node.session.cmds_max to an integer between 2 and 2048 that is also
# a power of 2. The default is 128.
node.session.cmds_max = 128
# To control the device's queue depth set node.session.queue_depth
# to a value between 1 and 1024. The default is 32.
node.session.queue_depth = 32
##################################
# MISC SYSTEM PERFORMANCE SETTINGS
##################################
# For software iscsi (iscsi_tcp) and iser (ib_iser) each session
# has a thread used to transmit or queue data to the hardware. For
# cxgb3i you will get a thread per host.
#
# Setting the thread's priority to a lower value can lead to higher throughput
# and lower latencies. The lowest value is -20. Setting the priority to
# a higher value, can lead to reduced IO performance, but if you are seeing
# the iscsi or scsi threads dominate the use of the CPU then you may want
# to set this value higher.
#
# Note: For cxgb3i you must set all sessions to the same value, or the
# behavior is not defined.
#
# The default value is -20. The setting must be between -20 and 20.
node.session.xmit_thread_priority = -20
#***************
# iSCSI settings
#***************
# To enable R2T flow control (i.e., the initiator must wait for an R2T
# command before sending any data), uncomment the following line:
#
#node.session.iscsi.InitialR2T = Yes
#
# To disable R2T flow control (i.e., the initiator has an implied
# initial R2T of "FirstBurstLength" at offset 0), uncomment the following line:
#
# The defaults is No.
node.session.iscsi.InitialR2T = No
#
# To disable immediate data (i.e., the initiator does not send
# unsolicited data with the iSCSI command PDU), uncomment the following line:
#
#node.session.iscsi.ImmediateData = No
#
# To enable immediate data (i.e., the initiator sends unsolicited data
# with the iSCSI command packet), uncomment the following line:
#
# The default is Yes
node.session.iscsi.ImmediateData = Yes
# To specify the maximum number of unsolicited data bytes the initiator
# can send in an iSCSI PDU to a target, edit the following line.
#
# The value is the number of bytes in the range of 512 to (2^24-1) and
# the default is 262144
node.session.iscsi.FirstBurstLength = 262144
# To specify the maximum SCSI payload that the initiator will negotiate
# with the target for, edit the following line.
#
# The value is the number of bytes in the range of 512 to (2^24-1) and
# the defauls it 16776192
node.session.iscsi.MaxBurstLength = 16776192
# To specify the maximum number of data bytes the initiator can receive
# in an iSCSI PDU from a target, edit the following line.
#
# The value is the number of bytes in the range of 512 to (2^24-1) and
# the default is 262144
node.conn[0].iscsi.MaxRecvDataSegmentLength = 262144
# To specify the maximum number of data bytes the initiator can receive
# in an iSCSI PDU from a target during a discovery session, edit the
# following line.
#
# The value is the number of bytes in the range of 512 to (2^24-1) and
# the default is 32768
discovery.sendtargets.iscsi.MaxRecvDataSegmentLength = 32768
# To allow the targets to control the setting of the digest checking,
# with the initiator requesting a preference of enabling the checking, uncomment# one or both of the following lines:
#node.conn[0].iscsi.HeaderDigest = CRC32C,None
#node.conn[0].iscsi.DataDigest = CRC32C,None
#
# To allow the targets to control the setting of the digest checking,
# with the initiator requesting a preference of disabling the checking,
# uncomment one or both of the following lines:
#node.conn[0].iscsi.HeaderDigest = None,CRC32C
#node.conn[0].iscsi.DataDigest = None,CRC32C
#
# To enable CRC32C digest checking for the header and/or data part of
# iSCSI PDUs, uncomment one or both of the following lines:
#node.conn[0].iscsi.HeaderDigest = CRC32C
#node.conn[0].iscsi.DataDigest = CRC32C
#
# To disable digest checking for the header and/or data part of
# iSCSI PDUs, uncomment one or both of the following lines:
#node.conn[0].iscsi.HeaderDigest = None
#node.conn[0].iscsi.DataDigest = None
#
# The default is to never use DataDigests or HeaderDigests.
#
#************
# Workarounds
#************
# Some targets like IET prefer after an initiator has sent a task
# management function like an ABORT TASK or LOGICAL UNIT RESET, that
# it does not respond to PDUs like R2Ts. To enable this behavior uncomment
# the following line (The default behavior is Yes):
node.session.iscsi.FastAbort = Yes
# Some targets like Equalogic prefer that after an initiator has sent
# a task management function like an ABORT TASK or LOGICAL UNIT RESET, that
# it continue to respond to R2Ts. To enable this uncomment this line
# node.session.iscsi.FastAbort = No

View File

@ -1,302 +0,0 @@
#
# Open-iSCSI default configuration.
# Could be located at /etc/iscsi/iscsid.conf or ~/.iscsid.conf
#
# Note: To set any of these values for a specific node/session run
# the iscsiadm --mode node --op command for the value. See the README
# and man page for iscsiadm for details on the --op command.
#
######################
# iscsid daemon config
######################
# If you want iscsid to start the first time a iscsi tool
# needs to access it, instead of starting it when the init
# scripts run, set the iscsid startup command here. This
# should normally only need to be done by distro package
# maintainers.
#
# Default for Fedora and RHEL. (uncomment to activate).
iscsid.startup = /etc/rc.d/init.d/iscsid force-start
# Default for upstream open-iscsi scripts (uncomment to activate).
# iscsid.startup = /sbin/iscsid
#############################
# NIC/HBA and driver settings
#############################
# open-iscsi can create a session and bind it to a NIC/HBA.
# To set this up see the example iface config file.
#*****************
# Startup settings
#*****************
# To request that the iscsi initd scripts startup a session set to "automatic".
# node.startup = automatic
#
# To manually startup the session set to "manual". The default is automatic.
node.startup = automatic
# For "automatic" startup nodes, setting this to "Yes" will try logins on each
# available iface until one succeeds, and then stop. The default "No" will try
# logins on all availble ifaces simultaneously.
node.leading_login = No
# *************
# CHAP Settings
# *************
# To enable CHAP authentication set node.session.auth.authmethod
# to CHAP. The default is None.
#node.session.auth.authmethod = CHAP
# To set a CHAP username and password for initiator
# authentication by the target(s), uncomment the following lines:
#node.session.auth.username = username
#node.session.auth.password = password
# To set a CHAP username and password for target(s)
# authentication by the initiator, uncomment the following lines:
#node.session.auth.username_in = username_in
#node.session.auth.password_in = password_in
# To enable CHAP authentication for a discovery session to the target
# set discovery.sendtargets.auth.authmethod to CHAP. The default is None.
#discovery.sendtargets.auth.authmethod = CHAP
# To set a discovery session CHAP username and password for the initiator
# authentication by the target(s), uncomment the following lines:
#discovery.sendtargets.auth.username = username
#discovery.sendtargets.auth.password = password
# To set a discovery session CHAP username and password for target(s)
# authentication by the initiator, uncomment the following lines:
#discovery.sendtargets.auth.username_in = username_in
#discovery.sendtargets.auth.password_in = password_in
# ********
# Timeouts
# ********
#
# See the iSCSI REAME's Advanced Configuration section for tips
# on setting timeouts when using multipath or doing root over iSCSI.
#
# To specify the length of time to wait for session re-establishment
# before failing SCSI commands back to the application when running
# the Linux SCSI Layer error handler, edit the line.
# The value is in seconds and the default is 120 seconds.
# Special values:
# - If the value is 0, IO will be failed immediately.
# - If the value is less than 0, IO will remain queued until the session
# is logged back in, or until the user runs the logout command.
node.session.timeo.replacement_timeout = 5
# To specify the time to wait for login to complete, edit the line.
# The value is in seconds and the default is 15 seconds.
node.conn[0].timeo.login_timeout = 5
# To specify the time to wait for logout to complete, edit the line.
# The value is in seconds and the default is 15 seconds.
node.conn[0].timeo.logout_timeout = 5
# Time interval to wait for on connection before sending a ping.
node.conn[0].timeo.noop_out_interval = 3
# To specify the time to wait for a Nop-out response before failing
# the connection, edit this line. Failing the connection will
# cause IO to be failed back to the SCSI layer. If using dm-multipath
# this will cause the IO to be failed to the multipath layer.
node.conn[0].timeo.noop_out_timeout = 3
# To specify the time to wait for abort response before
# failing the operation and trying a logical unit reset edit the line.
# The value is in seconds and the default is 15 seconds.
node.session.err_timeo.abort_timeout = 15
# To specify the time to wait for a logical unit response
# before failing the operation and trying session re-establishment
# edit the line.
# The value is in seconds and the default is 30 seconds.
node.session.err_timeo.lu_reset_timeout = 20
# To specify the time to wait for a target response
# before failing the operation and trying session re-establishment
# edit the line.
# The value is in seconds and the default is 30 seconds.
node.session.err_timeo.tgt_reset_timeout = 20
#******
# Retry
#******
# To specify the number of times iscsid should retry a login
# if the login attempt fails due to the node.conn[0].timeo.login_timeout
# expiring modify the following line. Note that if the login fails
# quickly (before node.conn[0].timeo.login_timeout fires) because the network
# layer or the target returns an error, iscsid may retry the login more than
# node.session.initial_login_retry_max times.
#
# This retry count along with node.conn[0].timeo.login_timeout
# determines the maximum amount of time iscsid will try to
# establish the initial login. node.session.initial_login_retry_max is
# multiplied by the node.conn[0].timeo.login_timeout to determine the
# maximum amount.
#
# The default node.session.initial_login_retry_max is 8 and
# node.conn[0].timeo.login_timeout is 15 so we have:
#
# node.conn[0].timeo.login_timeout * node.session.initial_login_retry_max =
# 120 seconds
#
# Valid values are any integer value. This only
# affects the initial login. Setting it to a high value can slow
# down the iscsi service startup. Setting it to a low value can
# cause a session to not get logged into, if there are distuptions
# during startup or if the network is not ready at that time.
node.session.initial_login_retry_max = 8
################################
# session and device queue depth
################################
# To control how many commands the session will queue set
# node.session.cmds_max to an integer between 2 and 2048 that is also
# a power of 2. The default is 128.
node.session.cmds_max = 128
# To control the device's queue depth set node.session.queue_depth
# to a value between 1 and 1024. The default is 32.
node.session.queue_depth = 32
##################################
# MISC SYSTEM PERFORMANCE SETTINGS
##################################
# For software iscsi (iscsi_tcp) and iser (ib_iser) each session
# has a thread used to transmit or queue data to the hardware. For
# cxgb3i you will get a thread per host.
#
# Setting the thread's priority to a lower value can lead to higher throughput
# and lower latencies. The lowest value is -20. Setting the priority to
# a higher value, can lead to reduced IO performance, but if you are seeing
# the iscsi or scsi threads dominate the use of the CPU then you may want
# to set this value higher.
#
# Note: For cxgb3i you must set all sessions to the same value, or the
# behavior is not defined.
#
# The default value is -20. The setting must be between -20 and 20.
node.session.xmit_thread_priority = -20
#***************
# iSCSI settings
#***************
# To enable R2T flow control (i.e., the initiator must wait for an R2T
# command before sending any data), uncomment the following line:
#
#node.session.iscsi.InitialR2T = Yes
#
# To disable R2T flow control (i.e., the initiator has an implied
# initial R2T of "FirstBurstLength" at offset 0), uncomment the following line:
#
# The defaults is No.
node.session.iscsi.InitialR2T = No
#
# To disable immediate data (i.e., the initiator does not send
# unsolicited data with the iSCSI command PDU), uncomment the following line:
#
#node.session.iscsi.ImmediateData = No
#
# To enable immediate data (i.e., the initiator sends unsolicited data
# with the iSCSI command packet), uncomment the following line:
#
# The default is Yes
node.session.iscsi.ImmediateData = Yes
# To specify the maximum number of unsolicited data bytes the initiator
# can send in an iSCSI PDU to a target, edit the following line.
#
# The value is the number of bytes in the range of 512 to (2^24-1) and
# the default is 262144
node.session.iscsi.FirstBurstLength = 262144
# To specify the maximum SCSI payload that the initiator will negotiate
# with the target for, edit the following line.
#
# The value is the number of bytes in the range of 512 to (2^24-1) and
# the defauls it 16776192
node.session.iscsi.MaxBurstLength = 16776192
# To specify the maximum number of data bytes the initiator can receive
# in an iSCSI PDU from a target, edit the following line.
#
# The value is the number of bytes in the range of 512 to (2^24-1) and
# the default is 262144
node.conn[0].iscsi.MaxRecvDataSegmentLength = 262144
# To specify the maximum number of data bytes the initiator will send
# in an iSCSI PDU to the target, edit the following line.
#
# The value is the number of bytes in the range of 512 to (2^24-1).
# Zero is a special case. If set to zero, the initiator will use
# the target's MaxRecvDataSegmentLength for the MaxXmitDataSegmentLength.
# The default is 0.
node.conn[0].iscsi.MaxXmitDataSegmentLength = 0
# To specify the maximum number of data bytes the initiator can receive
# in an iSCSI PDU from a target during a discovery session, edit the
# following line.
#
# The value is the number of bytes in the range of 512 to (2^24-1) and
# the default is 32768
discovery.sendtargets.iscsi.MaxRecvDataSegmentLength = 32768
# To allow the targets to control the setting of the digest checking,
# with the initiator requesting a preference of enabling the checking, uncomment
# the following lines (Data digests are not supported.):
#node.conn[0].iscsi.HeaderDigest = CRC32C,None
#
# To allow the targets to control the setting of the digest checking,
# with the initiator requesting a preference of disabling the checking,
# uncomment the following line:
#node.conn[0].iscsi.HeaderDigest = None,CRC32C
#
# To enable CRC32C digest checking for the header and/or data part of
# iSCSI PDUs, uncomment the following line:
#node.conn[0].iscsi.HeaderDigest = CRC32C
#
# To disable digest checking for the header and/or data part of
# iSCSI PDUs, uncomment the following line:
#node.conn[0].iscsi.HeaderDigest = None
#
# The default is to never use DataDigests or HeaderDigests.
#
node.conn[0].iscsi.HeaderDigest = None
# For multipath configurations, you may want more than one session to be
# created on each iface record. If node.session.nr_sessions is greater
# than 1, performing a 'login' for that node will ensure that the
# appropriate number of sessions is created.
node.session.nr_sessions = 1
#************
# Workarounds
#************
# Some targets like IET prefer after an initiator has sent a task
# management function like an ABORT TASK or LOGICAL UNIT RESET, that
# it does not respond to PDUs like R2Ts. To enable this behavior uncomment
# the following line (The default behavior is Yes):
node.session.iscsi.FastAbort = Yes
# Some targets like Equalogic prefer that after an initiator has sent
# a task management function like an ABORT TASK or LOGICAL UNIT RESET, that
# it continue to respond to R2Ts. To enable this uncomment this line
# node.session.iscsi.FastAbort = No

View File

@ -1,49 +0,0 @@
blacklist {
devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
devnode "^hd[a-z][0-9]*"
devnode "^cciss!c[0-9]d[0-9]*[p[0-9]*]"
device {
vendor "DGC"
product "LUNZ"
}
device {
vendor "HP"
product "LOGICAL VOLUME"
}
device {
vendor "HP iLO"
product "Internal SD-CARD"
}
}
defaults {
path_grouping_policy multibus
failback immediate
}
devices {
device {
vendor "HP"
product "LOGICAL VOLUME.*"
path_grouping_policy multibus
getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
path_selector "round-robin 0"
path_checker directio
}
device {
vendor "HP iLO"
product "Internal SD-CARD"
# generate a fake path id for a SD-CARD because scsi_id does not work:
getuid_callout "/bin/echo 111111111111111111111111111111111"
}
device {
vendor "DGC"
product ".*"
path_grouping_policy group_by_prio
getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
path_checker emc_clariion
path_selector "round-robin 0"
no_path_retry fail
hardware_handler "1 emc"
prio emc
failback immediate
}
}

View File

@ -1,351 +0,0 @@
#!/bin/sh
#
#
# OpenStack Cinder Volume (cinder-volume)
#
# Description: Manages an OpenStack Volumes (cinder-volume) process as an HA resource
#
# Authors: Sébastien Han
# Mainly inspired by the Glance API resource agent written by Martin Gerhard Loschwitz from Hastexo: http://goo.gl/whLpr
#
# Support: openstack@lists.launchpad.net
# License: Apache Software License (ASL) 2.0
#
#
# See usage() function below for more details ...
#
# OCF instance parameters:
# OCF_RESKEY_binary
# OCF_RESKEY_config
# OCF_RESKEY_user
# OCF_RESKEY_pid
# OCF_RESKEY_amqp_server_port
# OCF_RESKEY_additional_parameters
#######################################################################
# Initialization:
: ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat}
. ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs
#######################################################################
# Fill in some defaults if no values are specified
OCF_RESKEY_binary_default="cinder-volume"
OCF_RESKEY_config_default="/etc/cinder/cinder.conf"
OCF_RESKEY_user_default="cinder"
OCF_RESKEY_pid_default="$HA_RSCTMP/$OCF_RESOURCE_INSTANCE.pid"
OCF_RESKEY_amqp_server_port_default="5672"
OCF_RESKEY_multibackend_default="false"
: ${OCF_RESKEY_binary=${OCF_RESKEY_binary_default}}
: ${OCF_RESKEY_config=${OCF_RESKEY_config_default}}
: ${OCF_RESKEY_user=${OCF_RESKEY_user_default}}
: ${OCF_RESKEY_pid=${OCF_RESKEY_pid_default}}
: ${OCF_RESKEY_amqp_server_port=${OCF_RESKEY_amqp_server_port_default}}
: ${OCF_RESKEY_multibackend=${OCF_RESKEY_multibackend_default}}
#######################################################################
usage() {
cat <<UEND
usage: $0 (start|stop|validate-all|meta-data|status|monitor)
$0 manages an OpenStack Cinder Volume (cinder-volume) process as an HA resource
The 'start' operation starts the volume service.
The 'stop' operation stops the volume service.
The 'validate-all' operation reports whether the parameters are valid
The 'meta-data' operation reports this RA's meta-data information
The 'status' operation reports whether the volume service is running
The 'monitor' operation reports whether the volume service seems to be working
UEND
}
meta_data() {
cat <<END
<?xml version="1.0"?>
<!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd">
<resource-agent name="cinder-volume">
<version>1.0</version>
<longdesc lang="en">
Resource agent for the OpenStack Cinder Volume (cinder-volume)
May manage a cinder-volume instance or a clone set that
creates a distributed cinder-volume cluster.
</longdesc>
<shortdesc lang="en">Manages the OpenStack Cinder Volume (cinder-volume)</shortdesc>
<parameters>
<parameter name="binary" unique="0" required="0">
<longdesc lang="en">
Location of the OpenStack Cinder Volume server binary (cinder-volume)
</longdesc>
<shortdesc lang="en">OpenStack Cinder Volume server binary (cinder-volume)</shortdesc>
<content type="string" default="${OCF_RESKEY_binary_default}" />
</parameter>
<parameter name="config" unique="0" required="0">
<longdesc lang="en">
Location of the OpenStack Cinder Volume (cinder-volume) configuration file
</longdesc>
<shortdesc lang="en">OpenStack Cinder Volume (cinder-volume) config file</shortdesc>
<content type="string" default="${OCF_RESKEY_config_default}" />
</parameter>
<parameter name="user" unique="0" required="0">
<longdesc lang="en">
User running OpenStack Cinder Volume (cinder-volume)
</longdesc>
<shortdesc lang="en">OpenStack Cinder Volume (cinder-volume) user</shortdesc>
<content type="string" default="${OCF_RESKEY_user_default}" />
</parameter>
<parameter name="pid" unique="0" required="0">
<longdesc lang="en">
The pid file to use for this OpenStack Cinder Volume (cinder-volume) instance
</longdesc>
<shortdesc lang="en">OpenStack Cinder Volume (cinder-volume) pid file</shortdesc>
<content type="string" default="${OCF_RESKEY_pid_default}" />
</parameter>
<parameter name="amqp_server_port" unique="0" required="0">
<longdesc lang="en">
The listening port number of the AMQP server. Mandatory to perform a monitor check
</longdesc>
<shortdesc lang="en">AMQP listening port</shortdesc>
<content type="integer" default="${OCF_RESKEY_amqp_server_port_default}" />
</parameter>
<parameter name="multibackend" unique="0" required="0">
<longdesc lang="en">
If the multi-backend is enabled, the monitor check is slightly different since cinder-volume spawns one thread for each backend.
</longdesc>
<shortdesc lang="en">Multi Backend usage</shortdesc>
<content type="boolean" default="${OCF_RESKEY_multibackend_default}" />
</parameter>
<parameter name="additional_parameters" unique="0" required="0">
<longdesc lang="en">
Additional parameters to pass on to the OpenStack Cinder Volume (cinder-volume)
</longdesc>
<shortdesc lang="en">Additional parameters for cinder-volume</shortdesc>
<content type="string" />
</parameter>
</parameters>
<actions>
<action name="start" timeout="10" />
<action name="stop" timeout="10" />
<action name="status" timeout="10" />
<action name="monitor" timeout="5" interval="10" />
<action name="validate-all" timeout="5" />
<action name="meta-data" timeout="5" />
</actions>
</resource-agent>
END
}
#######################################################################
# Functions invoked by resource manager actions
cinder_volume_validate() {
local rc
check_binary $OCF_RESKEY_binary
check_binary netstat
# A config file on shared storage that is not available
# during probes is OK.
if [ ! -f $OCF_RESKEY_config ]; then
if ! ocf_is_probe; then
ocf_log err "Config $OCF_RESKEY_config doesn't exist"
return $OCF_ERR_INSTALLED
fi
ocf_log_warn "Config $OCF_RESKEY_config not available during a probe"
fi
getent passwd $OCF_RESKEY_user >/dev/null 2>&1
rc=$?
if [ $rc -ne 0 ]; then
ocf_log err "User $OCF_RESKEY_user doesn't exist"
return $OCF_ERR_INSTALLED
fi
true
}
cinder_volume_status() {
local pid
local rc
if [ ! -f $OCF_RESKEY_pid ]; then
ocf_log info "OpenStack Cinder Volume (cinder-volume) is not running"
return $OCF_NOT_RUNNING
else
pid=`cat $OCF_RESKEY_pid`
fi
ocf_run -warn kill -s 0 $pid
rc=$?
if [ $rc -eq 0 ]; then
return $OCF_SUCCESS
else
ocf_log info "Old PID file found, but OpenStack Cinder Volume (cinder-volume) is not running"
return $OCF_NOT_RUNNING
fi
}
cinder_volume_monitor() {
local rc
local pid
local volume_amqp_check
cinder_volume_status
rc=$?
# If status returned anything but success, return that immediately
if [ $rc -ne $OCF_SUCCESS ]; then
return $rc
fi
# Grab cinder-volume PID
pid=`cat $OCF_RESKEY_pid`
if ocf_is_true "$OCF_RESKEY_multibackend"; then
# Grab the child's PIDs
for i in `ps -o pid --no-headers --ppid $pid`
do
volume_amqp_check=`netstat -punt | grep -s "$OCF_RESKEY_amqp_server_port" | grep -s "$i" | grep -qs "ESTABLISHED"`
rc=$?
if [ $rc -ne 0 ]; then
ocf_log err "This child process from Cinder Volume is not connected to the AMQP server: $rc"
return $OCF_NOT_RUNNING
fi
done
else
# Check the connections according to the PID
# We are sure to hit the scheduler process and not other nova process with the same connection behavior (for example nova-cert)
# check the connections according to the PID
volume_amqp_check=`netstat -punt | grep -s "$OCF_RESKEY_amqp_server_port" | grep -s "$pid" | grep -qs "ESTABLISHED"`
rc=$?
if [ $rc -ne 0 ]; then
ocf_log err "Cinder Volume is not connected to the AMQP server: $rc"
return $OCF_NOT_RUNNING
fi
fi
ocf_log debug "OpenStack Cinder Volume (cinder-volume) monitor succeeded"
return $OCF_SUCCESS
}
cinder_volume_start() {
local rc
cinder_volume_status
rc=$?
if [ $rc -eq $OCF_SUCCESS ]; then
ocf_log info "OpenStack Cinder Volume (cinder-volume) already running"
return $OCF_SUCCESS
fi
# run the actual cinder-volume daemon. Don't use ocf_run as we're sending the tool's output
# straight to /dev/null anyway and using ocf_run would break stdout-redirection here.
su ${OCF_RESKEY_user} -s /bin/sh -c "${OCF_RESKEY_binary} --config-file=$OCF_RESKEY_config \
$OCF_RESKEY_additional_parameters"' >> /dev/null 2>&1 & echo $!' > $OCF_RESKEY_pid
# Spin waiting for the server to come up.
# Let the CRM/LRM time us out if required
while true; do
cinder_volume_monitor
rc=$?
[ $rc -eq $OCF_SUCCESS ] && break
if [ $rc -ne $OCF_NOT_RUNNING ]; then
ocf_log err "OpenStack Cinder Volume (cinder-volume) start failed"
exit $OCF_ERR_GENERIC
fi
sleep 1
done
ocf_log info "OpenStack Cinder Volume (cinder-volume) started"
return $OCF_SUCCESS
}
cinder_volume_stop() {
local rc
local pid
cinder_volume_status
rc=$?
if [ $rc -eq $OCF_NOT_RUNNING ]; then
ocf_log info "OpenStack Cinder Volume (cinder-volume) already stopped"
return $OCF_SUCCESS
fi
# Try SIGTERM
pid=`cat $OCF_RESKEY_pid`
ocf_run kill -s TERM $pid
rc=$?
if [ $rc -ne 0 ]; then
ocf_log err "OpenStack Cinder Volume (cinder-volume) couldn't be stopped"
exit $OCF_ERR_GENERIC
fi
# stop waiting
shutdown_timeout=15
if [ -n "$OCF_RESKEY_CRM_meta_timeout" ]; then
shutdown_timeout=$((($OCF_RESKEY_CRM_meta_timeout/1000)-5))
fi
count=0
while [ $count -lt $shutdown_timeout ]; do
cinder_volume_status
rc=$?
if [ $rc -eq $OCF_NOT_RUNNING ]; then
break
fi
count=`expr $count + 1`
sleep 1
ocf_log debug "OpenStack Cinder Volume (cinder-volume) still hasn't stopped yet. Waiting ..."
done
cinder_volume_status
rc=$?
if [ $rc -ne $OCF_NOT_RUNNING ]; then
# SIGTERM didn't help either, try SIGKILL
ocf_log info "OpenStack Cinder Volume (cinder-volume) failed to stop after ${shutdown_timeout}s \
using SIGTERM. Trying SIGKILL ..."
ocf_run kill -s KILL $pid
fi
ocf_log info "OpenStack Cinder Volume (cinder-volume) stopped"
rm -f $OCF_RESKEY_pid
return $OCF_SUCCESS
}
#######################################################################
case "$1" in
meta-data) meta_data
exit $OCF_SUCCESS;;
usage|help) usage
exit $OCF_SUCCESS;;
esac
# Anything except meta-data and help must pass validation
cinder_volume_validate || exit $?
# What kind of method was invoked?
case "$1" in
start) cinder_volume_start;;
stop) cinder_volume_stop;;
status) cinder_volume_status;;
monitor) cinder_volume_monitor;;
validate-all) ;;
*) usage
exit $OCF_ERR_UNIMPLEMENTED;;
esac

View File

@ -1,76 +0,0 @@
#
# Copyright 2015 Mirantis, Inc.
#
# 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.
#
class plugin_emc_vnx::common {
include plugin_emc_vnx::params
package {$plugin_emc_vnx::params::iscsi_package_name:
ensure => 'installed'
}
case $::osfamily {
'Debian': {
service {$plugin_emc_vnx::params::iscsi_service_name:
ensure => 'running',
enable => true,
hasrestart => true,
require => Package[$plugin_emc_vnx::params::iscsi_package_name],
}
file {'iscsid.conf':
path => '/etc/iscsi/iscsid.conf',
mode => '0644',
owner => root,
group => root,
source => 'puppet:///modules/plugin_emc_vnx/iscsid.conf',
require => Package[$plugin_emc_vnx::params::iscsi_package_name],
notify => Service[$plugin_emc_vnx::params::iscsi_service_name],
}
}
'RedHat': {
file {'iscsid.conf':
path => '/etc/iscsi/iscsid.conf',
mode => '0644',
owner => root,
group => root,
source => 'puppet:///modules/plugin_emc_vnx/iscsid.conf-centos',
require => Package[$plugin_emc_vnx::params::iscsi_package_name],
}
}
default: {
fail("unsuported osfamily ${::osfamily}, currently Debian and Redhat are the only supported platforms")
}
}
package {$plugin_emc_vnx::params::multipath_package_name:
ensure => 'installed'
}
service {$plugin_emc_vnx::params::multipath_service_name:
ensure => 'running',
enable => true,
hasrestart => true,
hasstatus => false,
status => 'pgrep multipathd',
require => Package[$plugin_emc_vnx::params::multipath_package_name],
}
file {'multipath.conf':
path => '/etc/multipath.conf',
mode => '0644',
owner => root,
group => root,
source => 'puppet:///modules/plugin_emc_vnx/multipath.conf',
require => Package[$plugin_emc_vnx::params::multipath_package_name],
notify => Service[$plugin_emc_vnx::params::multipath_service_name],
}
}

View File

@ -1,33 +0,0 @@
#
# Copyright 2015 Mirantis, Inc.
#
# 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.
#
class plugin_emc_vnx::compute {
include plugin_emc_vnx::common
include ::nova::params
service { 'nova-compute':
ensure => 'running',
name => $::nova::params::compute_service_name,
enable => true,
hasstatus => true,
hasrestart => true,
}
nova_config { 'libvirt/iscsi_use_multipath': value => 'True' }
Nova_config<||> ~> Service['nova-compute']
}

View File

@ -1,127 +0,0 @@
#
# Copyright 2015 Mirantis, Inc.
#
# 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.
#
class plugin_emc_vnx::controller {
include plugin_emc_vnx::common
include ::cinder::params
$plugin_settings = hiera('emc_vnx')
$service_name = $::cinder::params::volume_service
$metadata = {
'resource-stickiness' => '100',
}
$operations = {
'monitor' => {
'interval' => '20',
'timeout' => '10',
},
'start' => {
'interval' => '0',
'timeout' => '60',
},
'stop' => {
'interval' => '0',
'timeout' => '60',
}
}
$primitive_type = 'cinder-volume'
$parameters = {
'amqp_server_port' => hiera('amqp_port'),
'multibackend' => true,
}
if $::cinder::params::volume_package {
package { $::cinder::params::volume_package:
ensure => present,
}
Package[$::cinder::params::volume_package] -> Cinder_config<||>
}
case $plugin_settings['emc_driver'] {
FC: { cinder_config {
'DEFAULT/volume_driver': value => 'cinder.volume.drivers.emc.emc_cli_fc.EMCCLIFCDriver';
}
}
ISCSI: { cinder_config {
'DEFAULT/volume_driver': value => 'cinder.volume.drivers.emc.emc_cli_iscsi.EMCCLIISCSIDriver';
}
}
default: { cinder_config {
'DEFAULT/volume_driver': value => 'cinder.volume.drivers.emc.emc_cli_iscsi.EMCCLIISCSIDriver';
}
}
}
cinder_config {
'DEFAULT/san_ip': value => $plugin_settings['emc_sp_a_ip'];
'DEFAULT/san_secondary_ip': value => $plugin_settings['emc_sp_b_ip'];
'DEFAULT/san_login': value => $plugin_settings['emc_username'];
'DEFAULT/san_password': value => $plugin_settings['emc_password'];
'DEFAULT/storage_vnx_authentication_type': value => 'global';
'DEFAULT/destroy_empty_storage_group': value => 'False';
'DEFAULT/attach_detach_batch_interval': value => '-1';
'DEFAULT/naviseccli_path': value => '/opt/Navisphere/bin/naviseccli';
'DEFAULT/initiator_auto_registration': value => 'True';
'DEFAULT/default_timeout': value => '10';
'DEFAULT/use_multipath_for_image_xfer': value => 'True';
'DEFAULT/host': value => 'cinder';
}
if $plugin_settings['emc_pool_name'] {
cinder_config {
'DEFAULT/storage_vnx_pool_name': value => $plugin_settings['emc_pool_name'];
}
}
Cinder_config<||> ~> Service[$service_name]
package {$::plugin_emc_vnx::params::navicli_package_name:
ensure => present,
}
file {'cinder-volume-agent-ocf':
path =>'/usr/lib/ocf/resource.d/fuel/cinder-volume',
mode => '0755',
owner => root,
group => root,
source => 'puppet:///modules/plugin_emc_vnx/ocf/cinder-volume',
}
pacemaker::service { $service_name :
primitive_type => $primitive_type,
metadata => $metadata,
parameters => $parameters,
operations => $operations,
require => File['cinder-volume-agent-ocf'],
}
service { 'cinder-volume':
ensure => running,
name => $service_name,
enable => true,
hasstatus => true,
hasrestart => true,
require => Package[$::plugin_emc_vnx::params::navicli_package_name],
}
Pcmk_resource["p_${service_name}"] ->
Service[$service_name]
}

View File

@ -1,16 +0,0 @@
#
# Copyright 2015 Mirantis, Inc.
#
# 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.
#
class plugin_emc_vnx {}

View File

@ -1,37 +0,0 @@
#
# Copyright 2015 Mirantis, Inc.
#
# 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.
#
class plugin_emc_vnx::params {
case $::osfamily {
'Debian': {
$navicli_package_name = 'navicli-linux-64-x86-en-us'
$iscsi_package_name = 'open-iscsi'
$iscsi_service_name = 'open-iscsi'
$multipath_package_name = 'multipath-tools'
$multipath_service_name = 'multipath-tools'
}
'RedHat': {
$navicli_package_name = 'NaviCLI-Linux-64-x86-en_US'
$iscsi_package_name = 'iscsi-initiator-utils'
$iscsi_service_name = false
$multipath_package_name = 'device-mapper-multipath'
$multipath_service_name = 'multipathd'
}
default: {
fail("unsuported osfamily ${::osfamily}, currently Debian and Redhat are the only supported platforms")
}
}
}

View File

@ -1,27 +0,0 @@
- id: emc-controller
groups: ['primary-controller','controller']
type: puppet
version: 2.0.0
parameters:
puppet_manifest: puppet/manifests/controller.pp
puppet_modules: puppet/modules:/etc/puppet/modules
timeout: 360
strategy:
type: parallel
amount: 1
required_for: [deploy_end]
requires: [controller_remaining_tasks]
- id: emc-compute
role: ['compute']
type: puppet
version: 2.0.0
parameters:
puppet_manifest: puppet/manifests/compute.pp
puppet_modules: puppet/modules:/etc/puppet/modules
timeout: 360
strategy:
type: parallel
amount: 10
requires: [top-role-compute, enable_nova_compute_service]
required_for: [deploy_end]

1
doc/.gitignore vendored
View File

@ -1 +0,0 @@
build/

View File

@ -1,197 +0,0 @@
# Makefile for Sphinx documentation
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
PAPER =
BUILDDIR = build
# User-friendly check for sphinx-build
ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
endif
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
# the i18n builder cannot share the environment and doctrees with the others
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
# SVG to PDF conversion
SVG2PDF = inkscape
SVG2PDF_FLAGS =
# Build a list of SVG files to convert to PDF
PDF_FILES := $(foreach dir, images, $(patsubst %.svg,%.pdf,$(wildcard $(dir)/*.svg)))
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest coverage gettext
help:
@echo "Please use \`make <target>' where <target> is one of"
@echo " html to make standalone HTML files"
@echo " dirhtml to make HTML files named index.html in directories"
@echo " singlehtml to make a single large HTML file"
@echo " pickle to make pickle files"
@echo " json to make JSON files"
@echo " htmlhelp to make HTML files and a HTML help project"
@echo " qthelp to make HTML files and a qthelp project"
@echo " applehelp to make an Apple Help Book"
@echo " devhelp to make HTML files and a Devhelp project"
@echo " epub to make an epub"
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
@echo " latexpdf to make LaTeX files and run them through pdflatex"
@echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
@echo " text to make text files"
@echo " man to make manual pages"
@echo " texinfo to make Texinfo files"
@echo " info to make Texinfo files and run them through makeinfo"
@echo " gettext to make PO message catalogs"
@echo " changes to make an overview of all changed/added/deprecated items"
@echo " xml to make Docutils-native XML files"
@echo " pseudoxml to make pseudoxml-XML files for display purposes"
@echo " linkcheck to check all external links for integrity"
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
@echo " coverage to run coverage check of the documentation (if enabled)"
clean:
rm -rf $(BUILDDIR)/*
html:
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
dirhtml:
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
singlehtml:
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
@echo
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
pickle:
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
@echo
@echo "Build finished; now you can process the pickle files."
json:
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
@echo
@echo "Build finished; now you can process the JSON files."
htmlhelp:
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
@echo
@echo "Build finished; now you can run HTML Help Workshop with the" \
".hhp project file in $(BUILDDIR)/htmlhelp."
qthelp:
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
@echo
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/EMCpluginforFuel.qhcp"
@echo "To view the help file:"
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/EMCpluginforFuel.qhc"
applehelp:
$(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp
@echo
@echo "Build finished. The help book is in $(BUILDDIR)/applehelp."
@echo "N.B. You won't be able to view it unless you put it in" \
"~/Library/Documentation/Help or install it in your application" \
"bundle."
devhelp:
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
@echo
@echo "Build finished."
@echo "To view the help file:"
@echo "# mkdir -p $$HOME/.local/share/devhelp/EMCpluginforFuel"
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/EMCpluginforFuel"
@echo "# devhelp"
epub:
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
@echo
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
latex:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
@echo "Run \`make' in that directory to run these through (pdf)latex" \
"(use \`make latexpdf' here to do that automatically)."
latexpdf:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through pdflatex..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
latexpdfja:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through platex and dvipdfmx..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
text:
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
@echo
@echo "Build finished. The text files are in $(BUILDDIR)/text."
man:
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
@echo
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
texinfo:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
@echo "Run \`make' in that directory to run these through makeinfo" \
"(use \`make info' here to do that automatically)."
info:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo "Running Texinfo files through makeinfo..."
make -C $(BUILDDIR)/texinfo info
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
gettext:
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
@echo
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
changes:
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
@echo
@echo "The overview file is in $(BUILDDIR)/changes."
linkcheck:
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
@echo
@echo "Link check complete; look for any errors in the above output " \
"or in $(BUILDDIR)/linkcheck/output.txt."
doctest:
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
@echo "Testing of doctests in the sources finished, look at the " \
"results in $(BUILDDIR)/doctest/output.txt."
coverage:
$(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage
@echo "Testing of coverage in the sources finished, look at the " \
"results in $(BUILDDIR)/coverage/python.txt."
xml:
$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
@echo
@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
pseudoxml:
$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
@echo
@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."

View File

@ -1,35 +0,0 @@
from distutils.version import LooseVersion
from sphinx import __version__ as sphinx_version
source_suffix = '.rst'
master_doc = 'index'
project = u'EMC VNX plugin for Fuel'
copyright = u'2016, Mirantis Inc.'
version = '4.0'
release = '4.0-4.0.0-1'
pygments_style = 'sphinx'
latex_documents = [
('index','fuel-plugin-external-emc-doc.tex',
u'Fuel EMC VNX plugin documentation',
u'Mirantis Inc.', 'manual')
]
# Configuration for the latex/pdf docs.
latex_elements = {
'papersize': 'a4paper',
'pointsize': '11pt',
# remove blank pages
'classoptions': ',openany,oneside',
'babel': '\\usepackage[english]{babel}',
}
if LooseVersion(sphinx_version) >= LooseVersion('1.3.1'):
html_theme = "sphinx_rtd_theme"
html_add_permalinks = ""
html_show_copyright = False
highlight_language = 'none'

View File

@ -1,50 +0,0 @@
.. _configure_env:
Configure EMC VNX plugin for an environment
===========================================
To configure the EMC VNX plugin during a Mirantis OpenStack environment
deployment:
#. Using the Fuel web UI,
`create a new environment <https://docs.mirantis.com/openstack/fuel/fuel-8.0/fuel-user-guide.html#create-a-new-openstack-environment>`_.
#. In the :guilabel:`Storage Backends` tab, leave the default
:guilabel:`LVM over iSCSI` back end for Cinder.
#. Do not add the :guilabel:`Cinder` role to any node, since all the Cinder
services will be run on controller nodes.
#. In the Fuel web UI, open your new environment and click
:menuselection:`Settings -> Other`.
#. Select the :guilabel:`EMX VNX driver for Cinder` check box:
.. image:: images/settings.png
:width: 90%
#. Fill in the :guilabel:`EMX VNX driver for Cinder` form fields:
.. list-table::
:header-rows: 1
* - Field
- Description/Comment
* - Username and password
- Access credentials configured on EMC VNX.
* - SP A and B IPs
- IP addresses of the EMC VNX Service Processors.
* - Pool name (optional)
- The name of the EMC VNX storage pool on which all Cinder volumes
will be created. The provided storage pool must be available on
EMC VNX. If pool name is not provided, then the EMC VNX driver will
use a random storage pool available on EMC VNX.
#. Make additional `configuration adjustments <https://docs.mirantis.com/openstack/fuel/fuel-8.0/fuel-user-guide.html#configure-your-environment>`_
as required.
#. Proceed to the `environment deployment <https://docs.mirantis.com/openstack/fuel/fuel-8.0/fuel-user-guide.html#deploy-an-openstack-environment>`_.
#. Complete the :ref:`environment verification steps <verify>`.
.. raw:: latex
\pagebreak

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

View File

@ -1,38 +0,0 @@
.. _fuel-plugin-external-emc:
=================================================
Welcome to the Fuel EMC VNX plugin documentation!
=================================================
Overview
========
.. toctree::
:maxdepth: 1
intro.rst
zabbix-versions.rst
limitations.rst
release-notes.rst
licenses.rst
references.rst
Installing and configuring Fuel EMC VNX plugin
==============================================
.. toctree::
:maxdepth: 1
installation.rst
configuration.rst
verification.rst
removal.rst
Using Fuel EMC VNX plugin
=========================
.. toctree::
:maxdepth: 1
user.rst
troubleshooting.rst

View File

@ -1,106 +0,0 @@
.. _install:
Requirements
============
The EMC VNX plugin for Fuel has the following requirements:
.. list-table::
:widths: 10 25
:header-rows: 1
* - Requirement
- Version
* - Fuel
- 9.0
* - EMC VNX array
- VNX Operational Environment for Block 5.32 or higher
.. seealso::
* :ref:`limit`
* :ref:`zabbix`
.. _prereqs:
Prerequisites
=============
Before you install and start using the Fuel EMC VNX plugin, complete the
following steps:
#. Install and set up `Fuel 9.0 for Mitaka <https://www.mirantis.com/software/mirantis-openstack/releases/>`_.
For details, see `Fuel Installation Guide <http://docs.openstack.org/developer/fuel-docs/userdocs/fuel-install-guide.html>`_.
#. Activate the VNX Snapshot and Thin Provisioning license.
#. Configure and deploy the EMC VNX array.
#. Verify that the EMC VNX array is reachable through one of the Mirantis
OpenStack networks. Both EMC SP IPs and all iSCSI ports should be available
over the storage interface from OpenStack nodes.
#. Configure the EMC VNX back end. For details, see
`Openstack Configuration Reference <http://docs.openstack.org/mitaka/config-reference/block-storage/drivers/emc-vnx-driver.html>`_.
For details on EMC VNX configuration, see the
`official EMC VNX series documentation <https://mydocuments.emc.com/requestMyDoc.jsp>`_.
EMC VNX configuration checklist:
+------------------------------------+-------------------------+
|Item to confirm | Status (tick if done) |
+====================================+=========================+
|Create username/password. | |
+------------------------------------+-------------------------+
|Create at least one storage pool. | |
+------------------------------------+-------------------------+
|Configure network: | |
| - for A and B Service Processor | |
| - for all iSCSI ports | |
+------------------------------------+-------------------------+
| Configure the EMC VNX back end. | |
+------------------------------------+-------------------------+
Install the plugin
==================
Before you proceed with the Fuel EMC VNX plugin installation, verify that
you have completed the :ref:`prereqs` steps.
To install the Fuel EMC VNX plugin:
#. Go to the
`Fuel plugins' catalog <https://www.mirantis.com/validated-solution-integrations/fuel-plugins>`_.
#. From the :guilabel:`Filter` drop-down menu, select the Mirantis OpenStack
version 8.0 and the :guilabel:`STORAGE` category.
#. Find Fuel EMC VNX plugin in the plugins' list and download its ``.rpm``
file.
#. Copy the ``.rpm`` file to the Fuel Master node:
.. code-block:: console
# scp emc_vnx-4.0-4.0.0-1.noarch.rpm root@<FUEL_MASTER_NODE_IP>:/tmp
#. Log into the Fuel Master node CLI as root.
#. Install the plugin:
.. code-block:: console
# cd /tmp
# fuel plugins --install emc_vnx-4.0-4.0.0-1.noarch.rpm
#. Verify that the plugin was installed successfully:
.. code-block:: console
# fuel plugins
id | name | version | package_version
---|---------|---------|----------------
1 | emc_vnx | 4.0.0 | 4.0.0
#. Proceed to :ref:`configure_env`.
.. raw:: latex
\pagebreak

View File

@ -1,41 +0,0 @@
Introduction
============
This documentation provides instructions for installing, configuring, and
using the Fuel EMC VNX plugin version 4.0.0.
The EMC VNX plugin for Fuel extends the Mirantis OpenStack functionality by
adding support for the EMC VNX arrays in Cinder using the iSCSI protocol. It
replaces Cinder LVM driver which is the default volume back end that uses
local volumes managed by LVM. Enabling EMC VNX plugin in Mirantis OpenStack
means that all the Cinder services are run on controller nodes.
Key terms and abbreviations
===========================
The table below lists the key terms and abbreviations that are used in this
document.
.. tabularcolumns:: |p{4cm}|p{12.5cm}|
====================== ================================================
**Term/abbreviation** **Definition**
====================== ================================================
EMC VNX Unified, hybrid-flash storage used for virtual
applications and cloud-environments.
Cinder OpenStack Block Storage
iSCSI Internet Small Computer System Interface. An
Internet Protocol (IP)-based storage networking
standard for linking data storage facilities.
By carrying SCSI commands over IP networks,
iSCSI is used to facilitate data transfers over
intranets and to manage storage over long
distances. iSCSI can be used to transmit data
over local area networks (LANs), wide area
networks (WANs), or the Internet and can enable
location-independent data storage and retrieval.
LVM A logical volume manager for the Linux kernel
that manages disk drives and similar
mass-storage devices.
LUN Logical unit number
====================== ================================================

View File

@ -1,13 +0,0 @@
Licenses
========
.. csv-table::
:header: Package, Component, License
:widths: 2, 4, 4
``.deb``, ``multipath-tools``, GPL-2.0
``.deb``, ``navicli-linux-64-x86-en-us``, EMC Freeware Software License
``.rpm``, ``kpartx``, GPL+
``.rpm``, ``device-mapper-multipath``, GPL+
``.rpm``, ``device-mapper-multipath-libs``, GPL+
``.rpm``, ``NaviCLI-Linux-64-x86-en_US``, EMC Freeware Software License

View File

@ -1,16 +0,0 @@
.. _limit:
Limitations
============
The EMC VNX plugin has the following limitations:
#. Since only one storage network is available in Fuel on OpenStack
nodes, multipath will bind all storage paths from EMC on one network
interface. In case this NIC fails, the communication with storage is
lost.
#. EMC VNX plugin cannot be used together with Cinder role and/or the
following OpenStack environment options:
:guilabel:`Cinder LVM over iSCSI for volumes`,
:guilabel:`Ceph RBD for volumes (Cinder)`.
#. Fibre Channel driver is not supported.

View File

@ -1,9 +0,0 @@
Useful links
============
- `GitHub project <https://github.com/openstack/fuel-plugin-external-emc/tree/master>`_
- `Launchpad project <https://launchpad.net/fuel-plugins>`_
- `EMC VNX official documentation <https://mydocuments.emc.com/requestMyDoc.jsp>`_
- `EMC VNX driver OpenStack documentation <http://docs.openstack.org/mitaka/config-reference/block-storage/drivers/emc-vnx-driver.html>`_
- `Fuel plugins management commands <http://docs.openstack.org/developer/fuel-docs/userdocs/fuel-user-guide/cli/cli_plugins.html>`_
- `OpenStack CLI Reference <http://docs.openstack.org/cli-reference/content/>`_

View File

@ -1,10 +0,0 @@
Release notes
=============
The EMC VNX plugin 4.0.0 contains the following updates:
* Added support for Fuel 9.0.
* Added FC driver support
* Added support for task-based deployment.
* Enhanced the EMC VNX plugin overall performance.
* Improved the EMC VNX plugin documentation.

View File

@ -1,55 +0,0 @@
Uninstall EMC VNX plugin
========================
To uninstall the EMC VNX plugin, complete the following steps:
#. Using the Fuel CLI, delete all the Mirantis OpenStack environments in
which the EMC VNX plugin has been enabled:
.. code-block:: console
# fuel --env <ENV_ID> env delete
#. Uninstall the plugin:
.. code-block:: console
# fuel plugins --remove emc_vnx==4.0.0
#. Verify whether the VMware DVS plugin was uninstalled successfully:
.. code-block:: console
# fuel plugins
The EMC VNX plugin should not appear in the output list.
Uninstall Zabbix plugin
=======================
To uninstall the Zabbix plugin, complete the following steps:
#. Using the Fuel CLI, delete all the Mirantis OpenStack environments in
which the Zabbix plugin has been enabled:
.. code-block:: console
# fuel --env <ENV_ID> env delete
#. Uninstall the plugin:
.. code-block:: console
# fuel plugins --remove zabbix_monitoring==2.5.0
#. Verify whether the Zabbix plugin was uninstalled successfully:
.. code-block:: console
# fuel plugins
The Zabbix plugin should not appear in the output list.
.. raw:: latex
\pagebreak

View File

@ -1,32 +0,0 @@
Troubleshooting
===============
Most Cinder errors are caused by incorrect volume configuration that
result in the volume creation failures. To resolve these failures, use the
Cinder logs.
**To review the Cinder logs**
If you have issues with Cinder, find and review the following Cinder logs on
controller nodes:
#. The ``cinder-api`` log located at ``/var/log/cinder/api.log``.
#. The ``cinder-volume`` log located at ``/var/log/cinder/volume.log``.
Check the ``cinder-api`` log to determine whether you have the endpoint or
connectivity issues. If, for example, the *create volume* request fails,
review the ``cinder-api`` log to check whether the request to
the Block Storage service succeeded. If the request is logged, and you see
no errors or tracebacks, check the ``cinder-volume`` log for errors or
tracebacks.
**To verify the status of Cinder services**
Cinder services are running as Pacemaker resources. To verify the status of
services, run the following command on one of controller nodes:
.. code-block:: console
# pcs resource show
All Cinder services should be in the ``started`` mode.

View File

@ -1,192 +0,0 @@
.. _user:
Create a Cinder volume
======================
Once you deploy an OpenStack environment with the EMC VNX plugin, you can
start creating Cinder volumes. The following example shows how to create a
10 GB volume and attach it to a VM.
#. Login to a controller node.
#. Create a Cinder volume:
.. code-block:: console
# cinder create <VOLUME_SIZE>
The output looks as follows:
.. image:: images/create.png
:width: 90%
#. Verify that the volume is created and is ready for use:
.. code-block:: console
# cinder list
In the output, verify the ID and the ``available`` status of the volume
(see the screenshot above).
#. Verify the volume on EMC VNX:
#. Add the ``/opt/Navisphere/bin`` directory to the ``PATH`` environment
variable:
.. code-block:: console
# export PATH=$PATH:/opt/Navisphere/bin
#. Save your EMC credentials to simplify syntax in succeeding the
:command:`naviseccli` commands:
.. code-block:: console
# naviseccli -addusersecurity -password <password> -scope 0 \
-user <username>
#. List LUNs created on EMC:
.. code-block:: console
# naviseccli -h <SP IP> lun -list
.. image:: images/lunid.png
:width: 90%
In the given example, there is one successfully created LUN with:
* ID: ``0``
* Name: ``volume-e1626d9e-82e8-4279-808e-5fcd18016720`` (naming schema is
``volume-<Cinder volume id>``)
* Current state: ``Ready``
The IP address of the EMC VNX SP: 192.168.200.30
.. raw:: latex
\pagebreak
5. Get the Glance image ID and the network ID:
.. code-block:: console
# glance image-list
# nova net-list
.. image:: images/glance.png
:width: 90%
The VM ID in the given example is ``48e70690-2590-45c7-b01d-6d69322991c3``.
#. Create a new VM using the Glance image ID and the network ID:
.. code-block:: console
# nova --flavor 2 --image <IMAGE_ID> -- nic net-id=<NIC_NET-ID> <VM_NAME>
.. raw:: latex
\pagebreak
7. Check the ``STATUS`` of the new VM and on which node it has been created:
.. code-block:: console
# nova show <id>
In the example output, the VM is running on ``node-3`` and is active:
.. image:: images/novaShow.png
:width: 90%
#. Attach the Cinder volume to the VM and verify its state:
.. code-block:: console
# nova volume-attach <VM id> <volume id>
# cinder list
The output looks as follows:
.. image:: images/volumeAttach.png
:width: 90%
.. raw:: latex
\pagebreak
9. List the storage groups configured on EMC VNX:
.. code-block:: console
# naviseccli -h <SP IP> storagegroup -list
The output looks as follows:
.. image:: images/storagegroup.png
:width: 90%
In the example output, we have:
* One storage group: ``node-3`` with one LUN attached.
* Four iSCSI ``HBA/SP Pairs`` - one pair per the SP-Port.
* The LUN that has the local ID ``0`` (``ALU Number``) and that is
available as LUN ``133`` (``HLU Number``) for the ``node-3``.
.. raw:: latex
\pagebreak
10. You can also check whether the iSCSI sessions are active:
.. code-block:: console
# naviseccli -h <SP IP> port -list -hba
The output looks as follows:
.. image:: images/hba.png
:width: 90%
Check the ``Logged In`` parameter of each port. In the example output,
all four sessions are active as they have ``Logged In: YES``.
.. raw:: latex
\pagebreak
11. When you log in to ``node-3``, you can verify that:
* The iSCSI sessions are active:
.. code-block:: console
# iscsiadm -m session
* A multipath device has been created by the multipath daemon:
.. code-block:: console
# multipath -ll
* The VM is using the multipath device:
.. code-block:: console
# lsof -n -p `pgrep -f <VM id>` | grep /dev/<DM device name>
.. image:: images/iscsiadmin.png
:width: 90%
In the example output, we have the following:
* There are four active sessions (the same as on the EMC).
* The multipath device ``dm-2`` has been created.
* The multipath device has four paths and all are running (one per iSCSI
session).
* QEMU is using the ``/dev/dm-2`` multipath device.
.. raw:: latex
\pagebreak

View File

@ -1,14 +0,0 @@
.. _verify:
Verify an environment deployed with EMC VNX plugin
--------------------------------------------------
After you deploy an environment with the EMC VNX plugin, complete the
following verification steps:
#. Log in to the Fuel web UI.
#. Click the :guilabel:`Health Check` tab.
#. Run necessary health tests. For details, see
`Post-deployment check <http://docs.openstack.org/developer/fuel-docs/userdocs/fuel-user-guide/verify-environment.html>`_.
#. Verify that EMC VNX plugin is properly configured by
:ref:`creating a Cinder volume <user>`.

View File

@ -1,7 +0,0 @@
.. _zabbix:
Compatible monitoring plugins
=============================
The following versions of Zabbix monitoring plugins are compatible with
the EMC VNX plugin:

View File

@ -1,54 +0,0 @@
attributes:
emc_driver:
type: "select"
weight: 65
value: "ISCSI"
label: "Cinder Volume Driver"
description: "Driver type"
values:
- data: "FC"
label: "Fiber Channel"
- data: "ISCSI"
label: "ISCSI"
emc_username:
value: "username"
label: "EMC VNX username"
description: "EMC VNX username."
weight: 75
type: "text"
regex:
source: '\S'
error: "Username field cannot be empty"
emc_password:
value: "password"
label: "EMC VNX password"
description: "EMC VNX password."
weight: 80
type: "password"
regex:
source: '\S'
error: "Password field cannot be empty"
emc_sp_a_ip:
value: ""
label: "EMC VNX SP A IP"
description: "EMC VNX Service Processor A IP address."
weight: 90
type: "text"
regex:
source: '^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$'
error: "Specify valid IPv4 address"
emc_sp_b_ip:
value: ""
label: "EMC VNX SP B IP"
description: "EMC VNX Service Processor B IP address."
weight: 90
type: "text"
regex:
source: '^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$'
error: "Specify valid IPv4 address"
emc_pool_name:
value: ""
label: "EMC VNX pool name"
description: "EMC VNX pool name (optional)"
weight: 95
type: "text"

View File

@ -1,31 +0,0 @@
# Plugin name
name: emc_vnx
title: EMC VNX driver for Cinder
# Plugin version
version: 4.0.0
# Description
description: Enables EMC VNX driver in Cinder
# Required fuel version
fuel_version: ['9.0']
# Groups
groups: ['storage::cinder']
# Licenses
licenses: ['Apache License, Version 2.0']
# Homepage
homepage: 'https://github.com/stackforge/fuel-plugin-external-emc'
# Authors
authors: ['Dmitry Klenov <dklenov@mirantis.com>', 'Piotr Misiak <pmisiak@mirantis.com>', 'Szymon Banka <sbanka@mirantis.com>', 'Dmitry Kalashnik <dkalashnik@mirantis.com>', 'Oleksandr Martsyniuk <omartsyniuk@mirantis.com']
# Change `false` to `true` if the plugin can be installed in the environment
# after the deployment.
is_hotpluggable: false
# The plugin is compatible with releases in the list
releases:
- os: ubuntu
version: mitaka-9.0
mode: ['ha']
deployment_scripts_path: deployment_scripts/
repository_path: repositories/ubuntu
# Version of plugin package
package_version: '4.0.0'

View File

@ -1,32 +0,0 @@
#!/bin/bash
set -eux
ROOT="$(dirname `readlink -f $0`)"
RPM_REPO="${ROOT}"/repositories/centos/
DEB_REPO="${ROOT}"/repositories/ubuntu/
mkdir -p $RPM_REPO
mkdir -p $DEB_REPO
# Downloads needed RPM or DEB packages
function download {
case "$1" in
deb) REPO=$DEB_REPO;;
rpm) REPO=$RPM_REPO;;
esac
shift
while [ $# -gt 0 ]; do
FILE=$(basename "$1")
wget -qO - $1 > "$REPO/$FILE"
shift
done
}
download deb http://archive.ubuntu.com/ubuntu/pool/main/m/multipath-tools/multipath-tools_0.4.9-3ubuntu5_amd64.deb \
http://fuel-repository.mirantis.com/fuel-plugins/emc/ubuntu/navicli-linux-64-x86-en-us_7.33.2.0.51-1_all.deb
download rpm http://vault.centos.org/6.7/os/x86_64/Packages/device-mapper-multipath-0.4.9-87.el6.x86_64.rpm \
http://vault.centos.org/6.7/os/x86_64/Packages/device-mapper-multipath-libs-0.4.9-87.el6.x86_64.rpm \
http://vault.centos.org/6.7/os/x86_64/Packages/kpartx-0.4.9-87.el6.x86_64.rpm \
http://fuel-repository.mirantis.com/fuel-plugins/emc/centos/NaviCLI-Linux-64-x86-en_US-7.33.3.0.72-1.x86_64.rpm

View File

@ -1,147 +0,0 @@
..
This work is licensed under the Apache License, Version 2.0.
http://www.apache.org/licenses/LICENSE-2.0
==================================================
Fuel plugin for EMC VNX arrays as a Cinder backend
==================================================
EMC VNX plugin for Fuel extends Mirantis OpenStack functionality by adding
support for EMC VNX arrays in Cinder using iSCSI protocol.
It replaces Cinder LVM driver which is the default volume backend that uses
local volumes managed by LVM.
Problem description
===================
Currently, Fuel has no support for EMC VNX arrays as block storage for
OpenStack environments. EMC VNX plugin aims to provide support for it.
Proposed change
===============
Implement a Fuel plugin that will install and configure the EMC VNX driver for
Cinder on all Controller nodes. Cinder volume service will be managed
by Pacemaker/Corosync to provide HA. Having all Cinder services run
on controllers no additional Cinder node is required in environment.
Alternatives
------------
It might have been implemented as part of Fuel core but we decided to make it
as a plugin for several reasons:
* This isn't something that all operators may want to deploy.
* Any new additional functionality makes the project's testing more difficult,
which is an additional risk for the Fuel release.
Data model impact
-----------------
None
REST API impact
---------------
None
Upgrade impact
--------------
None
Security impact
---------------
None
Notifications impact
--------------------
None
Other end user impact
---------------------
None
Performance Impact
------------------
The EMC VNX driver could be slow when it comes to EMC VNX array configuration.
All volume management commands (creating/deleting/attaching etc.) can take
longer than usual. For example, creation a volume from an image
(even very small like CirrOS) may take over 60 seconds.
Other deployer impact
---------------------
The deployer has to preconfigure an EMC VNX array before it can be used with
the plugin.
Developer impact
----------------
None
Implementation
==============
Plugin delivers packages with multipath daemon and EMC NaviSecCli (command line
toolkit for EMC VNX arrays management) because they are not included in
Mirantis OpenStack.
Plugin has three tasks. Each task per role. They are run in the following order:
* The first task installs and configures cinder-volume on Primary Controller.
* The second task installs and configures cinder-volume on Controller nodes.
* THe third task configures Nova on Compute nodes.
Cinder-volume service is installed on all Controller nodes and is managed by
Pacemaker. It runs in active/passive mode where only one instance is active.
Plugin installs a dedicated resource manager file (OCF) for this.
All instances of cinder-volume have the same “host” parameter in cinder.conf
file. This is required to achieve ability to manage all volumes in the
environment by any cinder-volume instance.
Plugin also installs multipathd daemon and iscsid daemon on all Controller
and Compute nodes and puts customized configuration files for them.
Finally, plugin enables multipath in Cinder and Nova config files.
Assignee(s)
-----------
| Dmitry Klenov <dklenov@mirantis.com> (PM)
| Piotr Misiak <pmisiak@mirantis.com> (developer)
| Szymon Bańka <sbanka@mirantis.com> (developer)
| Dmitry Kalashnik <dkalashnik@mirantis.com> (QA engineer)
Work Items
----------
* Implement the Fuel plugin.
* Implement the Puppet manifests.
* Testing.
* Write the documentation.
Dependencies
============
* Fuel 6.1 and higher.
Testing
=======
* Prepare a test plan.
* Test the plugin by deploying environments with all Fuel deployment modes.
Documentation Impact
====================
* Deployment Guide (how to install the storage backends, how to prepare an
environment for installation, how to install the plugin, how to deploy an
OpenStack environment with the plugin).
* User Guide (which features the plugin provides, how to use them in the
deployed OpenStack environment).
* Test Plan.
* Test Report.

View File

@ -1 +0,0 @@
[]