Merge "Rubocop testing of the attributes and testing documentation."

This commit is contained in:
Jenkins
2014-01-02 20:07:12 +00:00
committed by Gerrit Code Review
5 changed files with 179 additions and 144 deletions

View File

@@ -111,15 +111,7 @@ TODO: move rabbit parameters under openstack["block-storage"]["mq"]
Testing Testing
===== =====
This cookbook uses [bundler](http://gembundler.com/), [berkshelf](http://berkshelf.com/), and [strainer](https://github.com/customink/strainer) to isolate dependencies and run tests. Please refer to the [TESTING.md](TESTING.md) for instructions for testing the cookbook.
Tests are defined in Strainerfile.
To run tests:
$ bundle install # install gem dependencies
$ bundle exec berks install # install cookbook dependencies
$ bundle exec strainer test # run tests
License and Author License and Author
================== ==================

View File

@@ -1,5 +1,7 @@
# Strainerfile # Strainerfile
rubocop: bundle exec rubocop $SANDBOX/$COOKBOOK rubocop: bundle exec rubocop $SANDBOX/$COOKBOOK/attributes/
# rubocop: bundle exec rubocop $SANDBOX/$COOKBOOK
# may want to add rubocop check for Berksfile and Gemfile
knife test: bundle exec knife cookbook test $COOKBOOK knife test: bundle exec knife cookbook test $COOKBOOK
foodcritic: bundle exec foodcritic -f any -t ~FC003 -t ~FC023 $SANDBOX/$COOKBOOK foodcritic: bundle exec foodcritic -f any -t ~FC003 $SANDBOX/$COOKBOOK
chefspec: bundle exec rspec $SANDBOX/$COOKBOOK/spec chefspec: bundle exec rspec $SANDBOX/$COOKBOOK/spec

33
TESTING.md Normal file
View File

@@ -0,0 +1,33 @@
# Testing the Cookbook #
This cookbook uses [bundler](http://gembundler.com/), [berkshelf](http://berkshelf.com/), and [strainer](https://github.com/customink/strainer) to isolate dependencies and run tests.
Tests are defined in [Strainerfile](Strainerfile), which in turn calls rubocop, knife, foodcritic and chefspec.
To run the tests:
$ bundle install --path=.bundle # install gem dependencies
$ bundle exec berks install --path=.cookbooks # install cookbook dependencies
$ bundle exec strainer test -s Strainerfile # run tests
## Rubocop ##
[Rubocop](https://github.com/bbatsov/rubocop) is a static Ruby code analyzer, based on the community [Ruby style guide](https://github.com/bbatsov/ruby-style-guide). We are attempting to adhere to this where applicable, slowly cleaning up the cookbooks until we can turn on Rubocop for gating the commits.
### Attribute Rules ###
There is a [.rubocop.yml](attributes/.rubocop.yml) specific to `attributes`, with the rationale for ignored styles within the file.
## Knife ##
[knife cookbook test](http://docs.opscode.com/chef/knife.html#test) is used to check the cookbook's Ruby and ERB files for basic syntax errors.
## Foodcritic ##
[Foodcritic](http://acrmp.github.io/foodcritic/) is a lint tool for Chef cookbooks. We ignore the following rules:
[FC003](http://acrmp.github.io/foodcritic/#FC003) these cookbooks are not intended for Chef Solo.
## Chefspec
[ChefSpec](http://code.sethvargo.com/chefspec/) is a unit testing framework for testing Chef cookbooks. ChefSpec makes it easy to write examples and get fast feedback on cookbook changes without the need for virtual machines or cloud servers.

7
attributes/.rubocop.yml Normal file
View File

@@ -0,0 +1,7 @@
# embedded attributes make for long lines
LineLength:
Enabled: false
# %w or %W have not generally been used in attribute files
WordArray:
Enabled: false

View File

@@ -1,3 +1,4 @@
# encoding: UTF-8
# #
# Cookbook Name:: openstack-block-storage # Cookbook Name:: openstack-block-storage
# Attributes:: default # Attributes:: default
@@ -23,194 +24,194 @@
######################################################################## ########################################################################
# Toggles - These can be overridden at the environment level # Toggles - These can be overridden at the environment level
default["developer_mode"] = false # we want secure passwords by default default['developer_mode'] = false # we want secure passwords by default
######################################################################## ########################################################################
# Set to some text value if you want templated config files # Set to some text value if you want templated config files
# to contain a custom banner at the top of the written file # to contain a custom banner at the top of the written file
default["openstack"]["block-storage"]["custom_template_banner"] = " default['openstack']['block-storage']['custom_template_banner'] = '
# This file autogenerated by Chef # This file autogenerated by Chef
# Do not edit, changes will be overwritten # Do not edit, changes will be overwritten
" '
default["openstack"]["block-storage"]["verbose"] = "False" default['openstack']['block-storage']['verbose'] = 'False'
default["openstack"]["block-storage"]["debug"] = "False" default['openstack']['block-storage']['debug'] = 'False'
# Default lock_path # Default lock_path
default["openstack"]["block-storage"]["lock_path"] = "/var/lock/cinder" default['openstack']['block-storage']['lock_path'] = '/var/lock/cinder'
# Availability zone/region for the Openstack"]["Block-Storage service # Availability zone/region for the OpenStack Block-Storage service
default["openstack"]["block-storage"]["region"] = "RegionOne" default['openstack']['block-storage']['region'] = 'RegionOne'
default["openstack"]["block-storage"]["scheduler_role"] = "os-block-storage-scheduler" default['openstack']['block-storage']['scheduler_role'] = 'os-block-storage-scheduler'
# The name of the Chef role that knows about the message queue server # The name of the Chef role that knows about the message queue server
# that Cinder uses # that Cinder uses
default["openstack"]["block-storage"]["rabbit_server_chef_role"] = "os-ops-messaging" default['openstack']['block-storage']['rabbit_server_chef_role'] = 'os-ops-messaging'
# This is the name of the Chef role that will install the Keystone Service API # This is the name of the Chef role that will install the Keystone Service API
default["openstack"]["block-storage"]["keystone_service_chef_role"] = "keystone" default['openstack']['block-storage']['keystone_service_chef_role'] = 'keystone'
# Keystone PKI signing directory. Only written to the filter:authtoken section # Keystone PKI signing directory. Only written to the filter:authtoken section
# of the api-paste.ini when node["openstack"]["auth"]["strategy"] == "pki" # of the api-paste.ini when node['openstack']['auth']['strategy'] == 'pki'
default["openstack"]["block-storage"]["api"]["auth"]["cache_dir"] = "/var/cache/cinder/api" default['openstack']['block-storage']['api']['auth']['cache_dir'] = '/var/cache/cinder/api'
# Maximum allocatable gigabytes # Maximum allocatable gigabytes
# Should equal total backend storage, default is 10TB # Should equal total backend storage, default is 10TB
default["openstack"]["block-storage"]["max_gigabytes"] = "10000" default['openstack']['block-storage']['max_gigabytes'] = '10000'
# Storage availability zone # Storage availability zone
# Default is nova # Default is nova
default["openstack"]["block-storage"]["storage_availability_zone"] = "nova" default['openstack']['block-storage']['storage_availability_zone'] = 'nova'
# Quota definitions # Quota definitions
default["openstack"]["block-storage"]["quota_volumes"] = "10" default['openstack']['block-storage']['quota_volumes'] = '10'
default["openstack"]["block-storage"]["quota_gigabytes"] = "1000" default['openstack']['block-storage']['quota_gigabytes'] = '1000'
default["openstack"]["block-storage"]["quota_driver"] = "cinder.quota.DbQuotaDriver" default['openstack']['block-storage']['quota_driver'] = 'cinder.quota.DbQuotaDriver'
# Common rpc definitions # Common rpc definitions
default["openstack"]["block-storage"]["rpc_thread_pool_size"] = 64 default['openstack']['block-storage']['rpc_thread_pool_size'] = 64
default["openstack"]["block-storage"]["rpc_conn_pool_size"] = 30 default['openstack']['block-storage']['rpc_conn_pool_size'] = 30
default["openstack"]["block-storage"]["rpc_response_timeout"] = 60 default['openstack']['block-storage']['rpc_response_timeout'] = 60
# MQ options # MQ options
default["openstack"]["block-storage"]["mq"]["service_type"] = node["openstack"]["mq"]["service_type"] default['openstack']['block-storage']['mq']['service_type'] = node['openstack']['mq']['service_type']
default["openstack"]["block-storage"]["mq"]["qpid"]["host"] = "127.0.0.1" default['openstack']['block-storage']['mq']['qpid']['host'] = '127.0.0.1'
default["openstack"]["block-storage"]["mq"]["qpid"]["port"] = "5672" default['openstack']['block-storage']['mq']['qpid']['port'] = '5672'
default["openstack"]["block-storage"]["mq"]["qpid"]["qpid_hosts"] = ['127.0.0.1:5672'] default['openstack']['block-storage']['mq']['qpid']['qpid_hosts'] = ['127.0.0.1:5672']
default["openstack"]["block-storage"]["mq"]["qpid"]["username"] = "" default['openstack']['block-storage']['mq']['qpid']['username'] = ''
default["openstack"]["block-storage"]["mq"]["qpid"]["password"] = "" default['openstack']['block-storage']['mq']['qpid']['password'] = ''
default["openstack"]["block-storage"]["mq"]["qpid"]["sasl_mechanisms"] = "" default['openstack']['block-storage']['mq']['qpid']['sasl_mechanisms'] = ''
default["openstack"]["block-storage"]["mq"]["qpid"]["reconnect"] = true default['openstack']['block-storage']['mq']['qpid']['reconnect'] = true
default["openstack"]["block-storage"]["mq"]["qpid"]["reconnect_timeout"] = 0 default['openstack']['block-storage']['mq']['qpid']['reconnect_timeout'] = 0
default["openstack"]["block-storage"]["mq"]["qpid"]["reconnect_limit"] = 0 default['openstack']['block-storage']['mq']['qpid']['reconnect_limit'] = 0
default["openstack"]["block-storage"]["mq"]["qpid"]["reconnect_interval_min"] = 0 default['openstack']['block-storage']['mq']['qpid']['reconnect_interval_min'] = 0
default["openstack"]["block-storage"]["mq"]["qpid"]["reconnect_interval_max"] = 0 default['openstack']['block-storage']['mq']['qpid']['reconnect_interval_max'] = 0
default["openstack"]["block-storage"]["mq"]["qpid"]["reconnect_interval"] = 0 default['openstack']['block-storage']['mq']['qpid']['reconnect_interval'] = 0
default["openstack"]["block-storage"]["mq"]["qpid"]["heartbeat"] = 60 default['openstack']['block-storage']['mq']['qpid']['heartbeat'] = 60
default["openstack"]["block-storage"]["mq"]["qpid"]["protocol"] = "tcp" default['openstack']['block-storage']['mq']['qpid']['protocol'] = 'tcp'
default["openstack"]["block-storage"]["mq"]["qpid"]["tcp_nodelay"] = true default['openstack']['block-storage']['mq']['qpid']['tcp_nodelay'] = true
# This user's password is stored in an encrypted databag # This user's password is stored in an encrypted databag
# and accessed with openstack-common cookbook library's # and accessed with openstack-common cookbook library's
# user_password routine. You are expected to create # user_password routine. You are expected to create
# the user, pass, vhost in a wrapper rabbitmq cookbook. # the user, pass, vhost in a wrapper rabbitmq cookbook.
default["openstack"]["block-storage"]["rabbit"]["username"] = "guest" default['openstack']['block-storage']['rabbit']['username'] = 'guest'
default["openstack"]["block-storage"]["rabbit"]["vhost"] = "/" default['openstack']['block-storage']['rabbit']['vhost'] = '/'
default["openstack"]["block-storage"]["rabbit"]["port"] = 5672 default['openstack']['block-storage']['rabbit']['port'] = 5672
default["openstack"]["block-storage"]["rabbit"]["host"] = "127.0.0.1" default['openstack']['block-storage']['rabbit']['host'] = '127.0.0.1'
default["openstack"]["block-storage"]["rabbit"]["ha"] = false default['openstack']['block-storage']['rabbit']['ha'] = false
default["openstack"]["block-storage"]["db"]["username"] = "cinder" default['openstack']['block-storage']['db']['username'] = 'cinder'
default["openstack"]["block-storage"]["service_tenant_name"] = "service" default['openstack']['block-storage']['service_tenant_name'] = 'service'
default["openstack"]["block-storage"]["service_user"] = "cinder" default['openstack']['block-storage']['service_user'] = 'cinder'
default["openstack"]["block-storage"]["service_role"] = "admin" default['openstack']['block-storage']['service_role'] = 'admin'
# Netapp support # Netapp support
default["openstack"]["block-storage"]["netapp"]["protocol"] = "http" default['openstack']['block-storage']['netapp']['protocol'] = 'http'
default["openstack"]["block-storage"]["netapp"]["dfm_hostname"] = nil default['openstack']['block-storage']['netapp']['dfm_hostname'] = nil
default["openstack"]["block-storage"]["netapp"]["dfm_login"] = nil default['openstack']['block-storage']['netapp']['dfm_login'] = nil
default["openstack"]["block-storage"]["netapp"]["dfm_password"] = nil default['openstack']['block-storage']['netapp']['dfm_password'] = nil
default["openstack"]["block-storage"]["netapp"]["dfm_port"] = "8088" default['openstack']['block-storage']['netapp']['dfm_port'] = '8088'
default["openstack"]["block-storage"]["netapp"]["dfm_web_port"] = "8080" default['openstack']['block-storage']['netapp']['dfm_web_port'] = '8080'
default["openstack"]["block-storage"]["netapp"]["storage_service"] = "storage_service" default['openstack']['block-storage']['netapp']['storage_service'] = 'storage_service'
# Netapp direct NFS # Netapp direct NFS
default["openstack"]["block-storage"]["netapp"]["netapp_server_port"] = "80" default['openstack']['block-storage']['netapp']['netapp_server_port'] = '80'
default["openstack"]["block-storage"]["netapp"]["netapp_server_hostname"] = nil default['openstack']['block-storage']['netapp']['netapp_server_hostname'] = nil
default["openstack"]["block-storage"]["netapp"]["netapp_server_password"] = nil default['openstack']['block-storage']['netapp']['netapp_server_password'] = nil
default["openstack"]["block-storage"]["netapp"]["netapp_server_login"] = nil default['openstack']['block-storage']['netapp']['netapp_server_login'] = nil
default["openstack"]["block-storage"]["netapp"]["export"] = nil default['openstack']['block-storage']['netapp']['export'] = nil
default["openstack"]["block-storage"]["nfs"]["shares_config"] = "/etc/cinder/shares.conf" default['openstack']['block-storage']['nfs']['shares_config'] = '/etc/cinder/shares.conf'
default["openstack"]["block-storage"]["nfs"]["mount_point_base"] = "/mnt/cinder-volumes" default['openstack']['block-storage']['nfs']['mount_point_base'] = '/mnt/cinder-volumes'
default["openstack"]["block-storage"]["nfs"]["nfs_disk_util"] = "df" default['openstack']['block-storage']['nfs']['nfs_disk_util'] = 'df'
default["openstack"]["block-storage"]["nfs"]["nfs_sparsed_volumes"] = "true" default['openstack']['block-storage']['nfs']['nfs_sparsed_volumes'] = 'true'
# logging attribute # logging attribute
default["openstack"]["block-storage"]["syslog"]["use"] = false default['openstack']['block-storage']['syslog']['use'] = false
default["openstack"]["block-storage"]["syslog"]["facility"] = "LOG_LOCAL2" default['openstack']['block-storage']['syslog']['facility'] = 'LOG_LOCAL2'
default["openstack"]["block-storage"]["syslog"]["config_facility"] = "local2" default['openstack']['block-storage']['syslog']['config_facility'] = 'local2'
default["openstack"]["block-storage"]["api"]["ratelimit"] = "True" default['openstack']['block-storage']['api']['ratelimit'] = 'True'
default["openstack"]["block-storage"]["cron"]["minute"] = '00' default['openstack']['block-storage']['cron']['minute'] = '00'
default["openstack"]["block-storage"]["cron"]["audit_logfile"] = "/var/log/cinder/audit.log" default['openstack']['block-storage']['cron']['audit_logfile'] = '/var/log/cinder/audit.log'
default["openstack"]["block-storage"]["volume"]["state_path"] = "/var/lib/cinder" default['openstack']['block-storage']['volume']['state_path'] = '/var/lib/cinder'
default["openstack"]["block-storage"]["volume"]["driver"] = "cinder.volume.driver.ISCSIDriver" default['openstack']['block-storage']['volume']['driver'] = 'cinder.volume.driver.ISCSIDriver'
default["openstack"]["block-storage"]["volume"]["volume_group"] = "cinder-volumes" default['openstack']['block-storage']['volume']['volume_group'] = 'cinder-volumes'
default["openstack"]["block-storage"]["volume"]["volume_group_size"] = 40 default['openstack']['block-storage']['volume']['volume_group_size'] = 40
default["openstack"]["block-storage"]["volume"]["create_volume_group"] = false default['openstack']['block-storage']['volume']['create_volume_group'] = false
default["openstack"]["block-storage"]["volume"]["iscsi_helper"] = "tgtadm" default['openstack']['block-storage']['volume']['iscsi_helper'] = 'tgtadm'
default["openstack"]["block-storage"]["volume"]["iscsi_ip_address"] = node["ipaddress"] default['openstack']['block-storage']['volume']['iscsi_ip_address'] = node['ipaddress']
default["openstack"]["block-storage"]["volume"]["iscsi_port"] = "3260" default['openstack']['block-storage']['volume']['iscsi_port'] = '3260'
# Ceph/RADOS options # Ceph/RADOS options
default["openstack"]["block-storage"]["rbd_pool"] = "rbd" default['openstack']['block-storage']['rbd_pool'] = 'rbd'
default["openstack"]["block-storage"]["rbd_user"] = nil default['openstack']['block-storage']['rbd_user'] = nil
default["openstack"]["block-storage"]["rbd_secret_uuid"] = nil default['openstack']['block-storage']['rbd_secret_uuid'] = nil
# Cinder Policy defaults # Cinder Policy defaults
default["openstack"]["block-storage"]["policy"]["context_is_admin"] = '["role:admin"]' default['openstack']['block-storage']['policy']['context_is_admin'] = '["role:admin"]'
default["openstack"]["block-storage"]["policy"]["default"] = '["rule:admin_or_owner"]' default['openstack']['block-storage']['policy']['default'] = '["rule:admin_or_owner"]'
default["openstack"]["block-storage"]["policy"]["admin_or_owner"] = '["is_admin:True"], ["project_id:%(project_id)s"]' default['openstack']['block-storage']['policy']['admin_or_owner'] = '["is_admin:True"], ["project_id:%(project_id)s"]'
default["openstack"]["block-storage"]["policy"]["admin_api"] = '["is_admin:True"]' default['openstack']['block-storage']['policy']['admin_api'] = '["is_admin:True"]'
case platform case platform
when "fedora", "redhat", "centos" # :pragma-foodcritic: ~FC024 - won't fix this when 'fedora', 'redhat', 'centos' # :pragma-foodcritic: ~FC024 - won't fix this
# operating system user and group names # operating system user and group names
default["openstack"]["block-storage"]["user"] = "cinder" default['openstack']['block-storage']['user'] = 'cinder'
default["openstack"]["block-storage"]["group"] = "cinder" default['openstack']['block-storage']['group'] = 'cinder'
default["openstack"]["block-storage"]["platform"] = { default['openstack']['block-storage']['platform'] = {
"mysql_python_packages" => ["MySQL-python"], 'mysql_python_packages' => ['MySQL-python'],
"postgresql_python_packages" => ["python-psycopg2"], 'postgresql_python_packages' => ['python-psycopg2'],
"cinder_common_packages" => ["openstack-cinder"], 'cinder_common_packages' => ['openstack-cinder'],
"cinder_api_packages" => ["python-cinderclient"], 'cinder_api_packages' => ['python-cinderclient'],
"cinder_api_service" => "openstack-cinder-api", 'cinder_api_service' => 'openstack-cinder-api',
"cinder_volume_packages" => [], 'cinder_volume_packages' => [],
"cinder_volume_service" => "openstack-cinder-volume", 'cinder_volume_service' => 'openstack-cinder-volume',
"cinder_scheduler_packages" => [], 'cinder_scheduler_packages' => [],
"cinder_scheduler_service" => "openstack-cinder-scheduler", 'cinder_scheduler_service' => 'openstack-cinder-scheduler',
"cinder_iscsitarget_packages" => ["scsi-target-utils"], 'cinder_iscsitarget_packages' => ['scsi-target-utils'],
"cinder_iscsitarget_service" => "tgtd", 'cinder_iscsitarget_service' => 'tgtd',
"cinder_nfs_packages" => ["nfs-utils", "nfs-utils-lib"], 'cinder_nfs_packages' => ['nfs-utils', 'nfs-utils-lib'],
"package_overrides" => "" 'package_overrides' => ''
} }
when "suse" when 'suse'
# operating system user and group names # operating system user and group names
default["openstack"]["block-storage"]["user"] = "openstack-cinder" default['openstack']['block-storage']['user'] = 'openstack-cinder'
default["openstack"]["block-storage"]["group"] = "openstack-cinder" default['openstack']['block-storage']['group'] = 'openstack-cinder'
default["openstack"]["block-storage"]["platform"] = { default['openstack']['block-storage']['platform'] = {
"mysql_python_packages" => ["python-mysql"], 'mysql_python_packages' => ['python-mysql'],
"postgresql_python_packages" => ["python-psycopg2"], 'postgresql_python_packages' => ['python-psycopg2'],
"cinder_common_packages" => ["openstack-cinder"], 'cinder_common_packages' => ['openstack-cinder'],
"cinder_api_packages" => ["openstack-cinder-api"], 'cinder_api_packages' => ['openstack-cinder-api'],
"cinder_api_service" => "openstack-cinder-api", 'cinder_api_service' => 'openstack-cinder-api',
"cinder_scheduler_packages" => ["openstack-cinder-scheduler"], 'cinder_scheduler_packages' => ['openstack-cinder-scheduler'],
"cinder_scheduler_service" => "openstack-cinder-scheduler", 'cinder_scheduler_service' => 'openstack-cinder-scheduler',
"cinder_volume_packages" => ["openstack-cinder-volume"], 'cinder_volume_packages' => ['openstack-cinder-volume'],
"cinder_volume_service" => "openstack-cinder-volume", 'cinder_volume_service' => 'openstack-cinder-volume',
"cinder_iscsitarget_packages" => ["tgt"], 'cinder_iscsitarget_packages' => ['tgt'],
"cinder_iscsitarget_service" => "tgtd", 'cinder_iscsitarget_service' => 'tgtd',
"cinder_nfs_packages" => ["nfs-utils"] 'cinder_nfs_packages' => ['nfs-utils']
} }
when "ubuntu" when 'ubuntu'
# operating system user and group names # operating system user and group names
default["openstack"]["block-storage"]["user"] = "cinder" default['openstack']['block-storage']['user'] = 'cinder'
default["openstack"]["block-storage"]["group"] = "cinder" default['openstack']['block-storage']['group'] = 'cinder'
default["openstack"]["block-storage"]["platform"] = { default['openstack']['block-storage']['platform'] = {
"mysql_python_packages" => ["python-mysqldb"], 'mysql_python_packages' => ['python-mysqldb'],
"postgresql_python_packages" => ["python-psycopg2"], 'postgresql_python_packages' => ['python-psycopg2'],
"cinder_common_packages" => ["cinder-common"], 'cinder_common_packages' => ['cinder-common'],
"cinder_api_packages" => ["cinder-api", "python-cinderclient"], 'cinder_api_packages' => ['cinder-api', 'python-cinderclient'],
"cinder_api_service" => "cinder-api", 'cinder_api_service' => 'cinder-api',
"cinder_volume_packages" => ["cinder-volume"], 'cinder_volume_packages' => ['cinder-volume'],
"cinder_volume_service" => "cinder-volume", 'cinder_volume_service' => 'cinder-volume',
"cinder_scheduler_packages" => ["cinder-scheduler"], 'cinder_scheduler_packages' => ['cinder-scheduler'],
"cinder_scheduler_service" => "cinder-scheduler", 'cinder_scheduler_service' => 'cinder-scheduler',
"cinder_iscsitarget_packages" => ["tgt"], 'cinder_iscsitarget_packages' => ['tgt'],
"cinder_iscsitarget_service" => "tgt", 'cinder_iscsitarget_service' => 'tgt',
"cinder_nfs_packages" => ["nfs-common"], 'cinder_nfs_packages' => ['nfs-common'],
"package_overrides" => "-o Dpkg::Options::='--force-confold' -o Dpkg::Options::='--force-confdef'" 'package_overrides' => "-o Dpkg::Options::='--force-confold' -o Dpkg::Options::='--force-confdef'"
} }
end end