Force ASCII-8BIT since the default encoding for scripts is UTF-8 in 2.0.

See https://www.ruby-lang.org/en/news/2013/02/24/ruby-2-0-0-p0-is-released/
Upgrade binary_struct to 2.0
role delete: check for r/o role and role in a group in model

The following (existing) statement in MiqUserRole class:

    has_many :miq_groups, :dependent => :restrict

will prevent from deleting a role in a group, the 'before_destroy'
statement is to prevent a read only role from being deleted.

Therefore, there's no need to be checking for read only role
and a role in a group in the controller code.

https://bugzilla.redhat.com/show_bug.cgi?id=1126536
group delete: check for a r/o group and group used by users in a model

This fix is:
* to make sure during group removal, the check for a read-only group,
as well as a group still in use by user(s) is being made in the model,
rather than the controller.
* to simplify the (controller) code

https://bugzilla.redhat.com/show_bug.cgi?id=1126536
Added QueryCounter helper class for specs.
Snapshot creation disabled for Templates

Implemented the supports_snapshots? method

https://bugzilla.redhat.com/show_bug.cgi?id=1005285
Add upload_import_file and review_import actions to MiqAeToolsController
Add granular automate import functionality
Remove unused Product.upload/process and validate_bundle.
Remove caller of ProductUpdate.upload
Remove unused maintenance file upload translation.
Enable testing via camcorder.

Changes to the core fleecing code to enable automated
testing using the camcorder gem.
Added comcorder based unit tests.

Added camcorder based unit tests for various levels of the fleecing stack.
The intent of these tests is to illustrate usage, so it can be applied to automated tests.
Rubocop clean up.
Added camcorder to lib/Gemfile.
Add modeling for template many-to-many tenant

In OpenStack, an image (TemplateOpenstack) can exist in more than one project
(CloudTenantOpenstack).  These migration and model changes allow an OpenStack
template to list the tenants it can be used in, and allows a Cloud Tenant to
list the templates associated with it.

The table is named "cloud_tenants_vms" to reflect the physical tables used in
for the join.

Despite the table name referring to the generic objects, the relationship is
purposefully restricted to Openstack templates and Openstack cloud tenants in
the association defined in the models.  This keeps the notion of the
many-to-many relationship restricted to the most specific level.

The relationship methods are named:

* TemplateOpenstack#cloud_tenants
* CloudTenantOpenstack#opentack_templates

Additionally, to facilitate keeping the relationship as specific as possible,
CloudTenant is now sublassed to CloudTenantOpenstack.  Since all of the existing
cloud tenants are only openstack tenants, the migration initializes all of the
CloudTenant records to have a type of CloudTenantOpenstack.
Added intervals to button fields

Intervals were missing for button fields

https://bugzilla.redhat.com/show_bug.cgi?id=1143019
Support non-admin ems refresh users - OpenstackHandle

OpenStack handle changes required to support ems refresh
using non-admin credentials.
Support non-admin ems refresh users - openstack parser

Openstack parser changes required to support ems refresh
using non-admin credentials.
Support non-admin ems refresh users - test

Test changes required to support ems refresh
using non-admin credentials.