Giter Site home page Giter Site logo

manageiq / manageiq Goto Github PK

View Code? Open in Web Editor NEW
1.3K 70.0 898.0 381.87 MB

ManageIQ Open-Source Management Platform

Home Page: https://manageiq.org

License: Apache License 2.0

Ruby 99.81% Shell 0.11% JavaScript 0.01% HTML 0.03% CSS 0.04% Dockerfile 0.01%
manageiq ruby rails cloud containers vmware rhev ovirt amazon management

manageiq's Introduction

ManageIQ

CI Code Climate Codacy Coverage Status

License Chat Translate Open Source Helpers

OpenSSF Best Practices OpenSSF Scorecard CNCF Landscape

Build history for master branch

Discover, Optimize, and Control your Hybrid IT

Manage containers, virtual machines, networks, and storage from a single platform

ManageIQ is an open-source Management Platform that delivers the insight, control, and automation that enterprises need to address the challenges of managing hybrid IT environments. It has the following feature sets:

  • Insight: Discovery, Monitoring, Utilization, Performance, Reporting, Analytics, Chargeback, and Trending.
  • Control: Security, Compliance, Alerting, Policy-Based Resource and Configuration Management.
  • Automate: IT Process, Task and Event, Provisioning, Workload Management and Orchestration.
  • Integrate: Systems Management, Tools and Processes, Event Consoles, CMDB, RBA, and Web Services.

Get Started

Learn more

We respectfully ask that you do not directly email any manageiq committers with questions or problems. The community is best served when discussions are held in public.

Licensing

See LICENSE.txt.

Except where otherwise noted, all ManageIQ source files are covered by the following copyright and license notice:

Copyright (c) 2014-present ManageIQ Authors.

Export Notice

By downloading ManageIQ software, you acknowledge that you understand all of the following: ManageIQ software and technical information may be subject to the U.S. Export Administration Regulations (the "EAR") and other U.S. and foreign laws and may not be exported, re-exported or transferred (a) to any country listed in Country Group E:1 in Supplement No. 1 to part 740 of the EAR (currently, Cuba, Iran, North Korea, Sudan & Syria); (b) to any prohibited destination or to any end user who has been prohibited from participating in U.S. export transactions by any federal agency of the U.S. government; or (c) for use in connection with the design, development or production of nuclear, chemical or biological weapons, or rocket systems, space launch vehicles, or sounding rockets, or unmanned air vehicle systems. You may not download ManageIQ software or technical information if you are located in one of these countries or otherwise subject to these restrictions. You may not provide ManageIQ software or technical information to individuals or entities located in one of these countries or otherwise subject to these restrictions. You are also responsible for compliance with foreign law requirements applicable to the import, export and use of ManageIQ software and technical information.

manageiq's People

Contributors

abellotti avatar agrare avatar aparnakarve avatar bdunne avatar blomquisg avatar carbonin avatar chessbyte avatar chrisarcand avatar d-m-u avatar eclarizio avatar epwinchell avatar fryguy avatar gmcculloug avatar gtanzillo avatar h-kataria avatar himdel avatar imtayadeway avatar isimluk avatar jrafanie avatar kbrock avatar ladas avatar lfu avatar lgalis avatar lpichler avatar mkanoor avatar mzazrivec avatar nicklamuro avatar romanblanco avatar skateman avatar yrudman avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

manageiq's Issues

Incompatible default_value_for dependency

The MiQ Gemfile depends on default_value_for ~>1.0.7

https://github.com/ManageIQ/manageiq/blob/master/vmdb/Gemfile#L35

This version of default_value_for calls out to a rails method (remove_attributes_protected_from_mass_assignment) which is not available in the version of rails the MiQ gemfile depends on:

https://github.com/FooBarWidget/default_value_for/blob/release-1.0.7/lib/default_value_for.rb#L100

http://apidock.com/rails/ActiveRecord/Base/remove_attributes_protected_from_mass_assignment

Note the MiQ gemfile currently depends on rails 3.2.17 which according to the docs does not including this method

https://github.com/ManageIQ/manageiq/blob/master/vmdb/Gemfile#L15

This is evident by running rake db:seed which fails with the following error in the evm.log:

[----] E, [2014-08-06T14:47:26.692632 #19539:d97e98] ERROR -- : [NoMethodError]: undefined method `remove_attributes_protected_from_mass_assignment' for #<MiqDatabase:0x00000005ae9ef8>  Method:[rescue in block in seed]
[----] E, [2014-08-06T14:47:26.692720 #19539:d97e98] ERROR -- : /home/mmorsi/.gem/ruby/bundler/gems/rails-f9749c2ef83b/activemodel/lib/active_model/attribute_methods.rb:407:in `method_missing'
/home/mmorsi/.gem/ruby/bundler/gems/rails-f9749c2ef83b/activerecord/lib/active_record/attribute_methods.rb:149:in `method_missing'
/home/mmorsi/.gem/ruby/gems/default_value_for-1.0.7/lib/default_value_for.rb:100:in `initialize_with_defaults'
/home/mmorsi/.gem/ruby/bundler/gems/rails-f9749c2ef83b/activerecord/lib/active_record/validations.rb:39:in `new'
/home/mmorsi/.gem/ruby/bundler/gems/rails-f9749c2ef83b/activerecord/lib/active_record/validations.rb:39:in `create!'
/home/mmorsi/workspace/cfme/manageiq/vmdb/app/models/miq_database.rb:48:in `seed'
/home/mmorsi/workspace/cfme/manageiq/vmdb/lib/evm_database.rb:53:in `block in seed'
/home/mmorsi/workspace/cfme/manageiq/vmdb/lib/evm_database.rb:42:in `each'
/home/mmorsi/workspace/cfme/manageiq/vmdb/lib/evm_database.rb:42:in `seed'
/home/mmorsi/workspace/cfme/manageiq/vmdb/lib/evm_database.rb:28:in `seed_primordial'
/home/mmorsi/workspace/cfme/manageiq/vmdb/app/models/miq_server.rb:208:in `start'
/home/mmorsi/workspace/cfme/manageiq/vmdb/lib/workers/evm_server.rb:71:in `start'
/home/mmorsi/workspace/cfme/manageiq/vmdb/lib/workers/evm_server.rb:85:in `start'
/home/mmorsi/workspace/cfme/manageiq/vmdb/lib/workers/evm_server.rb:89:in `<top (required)>'
/home/mmorsi/.gem/ruby/bundler/gems/rails-f9749c2ef83b/railties/lib/rails/commands/runner.rb:52:in `eval'
/home/mmorsi/.gem/ruby/bundler/gems/rails-f9749c2ef83b/railties/lib/rails/commands/runner.rb:52:in `<top (required)>'
/home/mmorsi/.gem/ruby/bundler/gems/rails-f9749c2ef83b/railties/lib/rails/commands.rb:64:in `require'
/home/mmorsi/.gem/ruby/bundler/gems/rails-f9749c2ef83b/railties/lib/rails/commands.rb:64:in `<top (required)>'
script/rails:6:in `require'
script/rails:6:in `<main>'

Updating default_value_for in the gemfile & on system resolves the issue.

Traffic data

Traffic data now includes number of repo clones, in addition to number of visitors. We need a way to make this info public. If we cannot enable it for everyone's viewing, enable it for me so that I can edit the content and add to a dashboard.

UI - Configuration/Advanced tab not rescuing CodeMirror errors

I normally add the following line to the :product section

product:
  report_sync: true

I left out the space, "report_sync:true", which generated this error in the log when it crashed:

FATAL -- : 
Psych::SyntaxError ((<unknown>): could not find expected ':' while scanning a simple key at line 133 column 3):

We need to rescue that as it would have been meaningful to the user as that is the line that I had the missing space in.

High Availability Database

There is a lot of demand for a supported high availability solution for the CFME database. The desire is for most, if not all, failover functionality to work transparently -- without human intervention -- for most failure scenarios.

Additionally, there is a desire to be able to spread a global region across at least two different data centers. In this scenario, the system will need to handle / recover from the potential for split-brain between the two data centers if connectivity is lost.

Starting a stopped openstack instance

From Oleg's comments on bug 1029690 (see below for links)

Instead of EMS Refresh converting the raw power state returned by the provider to > map to one of several pre-defined values in the power_state column, I think the only clean way to solve this is as follows:

  1. Change power_state column in SQL to raw_power_state.
  2. EMS Refresh should directly write the raw power state returned by provider to the column in bullet 1.
  3. Per provider VM, create power_state method that maps (as best it can) the raw value to a cooked value.
  4. Update UI and VM power operations accordingly.

References

https://bugzilla.redhat.com/show_bug.cgi?id=1039160

https://bugzilla.redhat.com/show_bug.cgi?id=1029690#c5

Successful message in reports looks like an error since it's color is red

When generating a report as txt/csv, a message appears "Report generation returned Status OK", but its border is red, and it has an exclamation mark icon - which both imply this is an error, while the operation ended successfully.
Successful operations should have a green/some neutral color that don't look like an error message.

okmessage

Copy Automate Instances and Methods with new names into the same class

As a user is designing automate models, they might have to copy an existing instance or a method to a new name in the same class. This helps them to create a new instance/method with all the data populated and don't have to start from scratch.

The Model has MiqAeMethodCopy.as(new_name) or MiqAeInstanceCopy.new(new_name) which can be tapped by the UI to facilitate the copy.

It also helps with rename feature which doesn't exist where you can copy the instance with a new name and then remove the old instance

SmartState Analysis fails with non-English Windows versions

Description of problem:
I have a number of Windows instances running (7, 2008, 2012) and it seems every time I use the German version, Smart State Analysis fails with the following error:

invalid byte sequence in UTF-8 for VM:[/rhev/data-center/c14cb2e6-3c7a-443e-8ddd-0d31e5493d86/mastersd/master/vms/5245326d-db6a-415e-b101-89cf82467117/5245326d-db6a-415e-b101-89cf82467117.ovf]

Version-Release number of selected component (if applicable):
5.2.4

How reproducible:
Always if Windows version is not English

Miq_Queue: Add uniqueness parameter

Adding an entry to MiqQueue uses one of 3 methods:

  • put (add)
  • put_unless_exists (search; add if not found)
  • put_or_update aka add unique. (search, update if found, add if not found)

This PR is centered around the second method. It is there to add unique values, only if search does not find a record.

Problems

explicitly separate search fields from insert fields

The tricky part is how to say search with one set of fields, and if you don't find a record, insert with a different set of fields. Typically, the search fields are a subset of the new record value. Searching on a timestamp would not make much sense.

I've fixed a number of instances where the inserted records would always be unique, and feel explicitly defining the unique fields will aleviate this issue.

My suggested solution is to add a unique field that explicitly lists the values to use for search:

before

  def ntp_reload_queue
    MiqQueue.put_or_update(
        :class_name => "MiqServer",
        :instance_id => self.id,
        :method_name => "ntp_reload",
        :server_guid => self.guid,
        :zone => self.my_zone,
    ) do |msg, item|
      $log.info("MIQ(MiqServer#ntp_reload_queue) Previous ntp_reload is still running, skipping...Resource: [#{self.class.name}], id: [#{self.id}]") unless msg.nil?
      item.merge(:priority => MiqQueue::HIGH_PRIORITY, :args => [server_ntp_settings])
    end

after

  def ntp_reload_queue
    MiqQueue.put_unless_exists(
        :class_name => "MiqServer",
        :instance_id => self.id,
        :method_name => "ntp_reload",
        :server_guid => self.guid,
        :zone => self.my_zone,
        :priority => MiqQueue::HIGH_PRIORITY,
        :args => [server_ntp_settings],
        :unique => [:class_name, :method_name, :instance_id, :server_guid, :zone],
    ) do |msg, item|
      $log.info("MIQ(MiqServer#ntp_reload_queue) Previous ntp_reload is still running, skipping...Resource: [#{self.class.name}], id: [#{self.id}]") unless msg.nil?
    end

indexing

If we add the unique value to the miq_queue table, we can simplify our indexing. Just index the single field. The added data size may pose an issue, but we would no longer need to index the fields individually. Not sure if it is better to insert the actual values (delimitated by a dash) or insert the hash of those values.

static value for args

We will want the ability to add a static value into the uniqueness array, by using a string not a symbol, we can get rid of args_selector and possibly all searches by args.

The args selector is tricky, not often used, and basically there because we want to include part of the args array in determining a unique signal in the queue.

before

    MiqQueue.put_unless_exists(
      :class_name    => self.class.base_class.name,
      :instance_id   => id,
      :method_name   => "signal",
      :args_selector => lambda {|args| args.kind_of?(Array) && args.first == :abort},
      :role          => "smartstate",
      :zone          => MiqServer.my_zone
    ) do |msg, find_options|
      message = "job timed out after #{Time.now - updated_on} seconds of inactivity.  Inactivity threshold [#{DEFAULT_TIMEOUT} seconds]"
      $log.warn("MIQ(job-check_jobs_for_timeout) Job: guid: [#{guid}], #{message}, aborting")
      find_options.merge(:args => [:abort, message, "error"])
    end

after

    MiqQueue.put_unless_exists(
      :class_name    => self.class.base_class.name,
      :instance_id   => id,
      :method_name   => "signal",
      :args         => [:abort, message, "error"]
      :role          => "smartstate",
      :zone          => MiqServer.my_zone,
      # probably don't need role
      :unique => [:class_name, :method_name, :instance_id, :role, :zone, "abort"],
    ) do |msg, find_options|
      message = "job timed out after #{Time.now - updated_on} seconds of inactivity.  Inactivity threshold [#{DEFAULT_TIMEOUT} seconds]"
      $log.warn("MIQ(job-check_jobs_for_timeout) Job: guid: [#{guid}], #{message}, aborting")
    end

unique for all common use case

We will also want :unique => :all for the common case where all fields for insert are also making the record unique.

unique block

We have the option of passing in a block that returns a string ( :unique => -> (r) { "#{r.name || "abc"} ). This may alleviate the need to hit all edge cases. It may also just overkill.

I'm thinking this is over-engineering

existing block behavior

We may need to leave the ability to allow the block to manipulate the parameters, but if possible, that would only be needed by put_or_update, more specifically for cases that involve the task_id.

Removing this would remove the extra hash.dup calls.

I'm not sure how this affects the put_or_update but it seems to simplify that usage pattern as well.

//cc @gmcculloug first pass. Please provide feedback to make this easier to digest.

EDIT @Fryguy: I made it pretty ๐Ÿ˜‰
EDIT @kbrock: tried to make each statement into a problem / solution.

REST API failed on action = "order"

When doing a POST on the following REST API URL:

/api/service_catalogs/[id]/service_templates/[id]

Sending this:

{
    "action" : "order"
}

I am getting the following error:

{
    "error": {
        "kind": "internal_server_error",
        "message": "undefined method `keys' for nil:NilClass",
        "klass": "NoMethodError"
    }
}

[SmartStateAnalysis] Sending scan summary to server. invalid byte sequence in UTF-8

Hello,

I'm a new user of ManageIQ and I've noticed that when discovering a Windows VM localized (french version - 2008R2 SE) using Smart State Analysis, it fails to send back data to server with a "invalid byte sequence in UTF-8".
It doesn't fail when scanning ManageIQ ova or vCenter Appliance. It doesn't fail when scanning an english version of Windows Server 2003 R2 EE SP2.

Regards,
Joseph.

Sporadic test failure - possibly due to expecting Vm.first/Vm.last to have a specific order

I noticed this test failure for unrelated commits:

  1) Service with a small env should allow a resource to be connected only once
     Failure/Error: @service.service_resources.should have(2).things
       expected 2 things, got 1
     # /opt/rh/ruby193/root/usr/local/share/gems/gems/rspec-expectations-2.12.1/lib/rspec/expectations/fail_with.rb:33:in `fail_with'
     # /opt/rh/ruby193/root/usr/local/share/gems/gems/rspec-expectations-2.12.1/lib/rspec/expectations/handler.rb:33:in `handle_matcher'
     # /opt/rh/ruby193/root/usr/local/share/gems/gems/rspec-expectations-2.12.1/lib/rspec/expectations/syntax.rb:53:in `should'
     # ./spec/models/service_spec.rb:133:in `block (3 levels) in <top (required)>'
     # /opt/rh/ruby193/root/usr/local/share/gems/gems/rspec-core-2.12.2/lib/rspec/core/example.rb:114:in `instance_eval'
     # /opt/rh/ruby193/root/usr/local/share/gems/gems/rspec-core-2.12.2/lib/rspec/core/example.rb:114:in `block in run'
     # /opt/rh/ruby193/root/usr/local/share/gems/gems/rspec-core-2.12.2/lib/rspec/core/example.rb:254:in `with_around_each_hooks'
     # /opt/rh/ruby193/root/usr/local/share/gems/gems/rspec-core-2.12.2/lib/rspec/core/example.rb:111:in `run'
     # /opt/rh/ruby193/root/usr/local/share/gems/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:388:in `block in run_examples'
     # /opt/rh/ruby193/root/usr/local/share/gems/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:384:in `map'
     # /opt/rh/ruby193/root/usr/local/share/gems/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:384:in `run_examples'
     # /opt/rh/ruby193/root/usr/local/share/gems/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:369:in `run'
     # /opt/rh/ruby193/root/usr/local/share/gems/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:370:in `block in run'
     # /opt/rh/ruby193/root/usr/local/share/gems/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:370:in `map'
     # /opt/rh/ruby193/root/usr/local/share/gems/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:370:in `run'
     # /opt/rh/ruby193/root/usr/local/share/gems/gems/rspec-core-2.12.2/lib/rspec/core/command_line.rb:28:in `block (2 levels) in run'
     # /opt/rh/ruby193/root/usr/local/share/gems/gems/rspec-core-2.12.2/lib/rspec/core/command_line.rb:28:in `map'
     # /opt/rh/ruby193/root/usr/local/share/gems/gems/rspec-core-2.12.2/lib/rspec/core/command_line.rb:28:in `block in run'
     # /opt/rh/ruby193/root/usr/local/share/gems/gems/rspec-core-2.12.2/lib/rspec/core/reporter.rb:34:in `report'
     # /opt/rh/ruby193/root/usr/local/share/gems/gems/rspec-core-2.12.2/lib/rspec/core/command_line.rb:25:in `run'
     # /opt/rh/ruby193/root/usr/local/share/gems/gems/rspec-core-2.12.2/lib/rspec/core/runner.rb:80:in `run'
     # /opt/rh/ruby193/root/usr/local/share/gems/gems/rspec-core-2.12.2/lib/rspec/core/runner.rb:17:in `block in autorun'

https://github.com/jrafanie/manageiq/blob/292f7eeb3e622fce6c00d1c9f79ce2e86f48889d/vmdb/spec/models/service_spec.rb#L124

    it "should allow a resource to be connected only once" do
      vm_first = Vm.first
      @service << vm_first
      @service.service_resources.should have(1).thing

      @service.add_resource(vm_first)
      @service.service_resources.should have(1).thing

      @service.add_resource(Vm.last)
      @service.service_resources.should have(2).things
    end

The spec appears to expect Vm.last to NOT return vm_first, which is not guaranteed without specifying order or ids.

There are others references to .first/.last in this spec that may have the same issue.

Reminds me of some related bugs that @mkanoor squashed here: 77808f2

logrotate is not operating on vmdb/log/*.log or other expected files

In initial drop of community build

contents of /etc/logrotate.d follow:

total 24
-rw-r--r--. 1 root root 103 Nov 26  2013 dracut
-rw-r--r--. 1 root root   0 Jul 16 07:38 etc_logrotate.d_directory_list (this file)
-rw-r--r--. 1 root root 185 Aug  2  2013 httpd
-rw-r--r--. 1 root root 385 Jul  2 20:18 miq_logs.conf
-rw-r--r--. 1 root root 329 Jul 17  2012 psacct
-rw-r--r--. 1 root root 210 Aug 15  2013 syslog
-rw-r--r--. 1 root root 100 Feb 22  2013 yum

UI: PXE Server info box html is different from other pages

The PXE server details page is setup differently to the other pages, this is breaking QE automation for anything that requires a PXE server.

It looks like this......

<div id="flash_msg_div" style="display: none">
</div>
        <p class="legend">Basic Information</p>
        <table class="style1">
          <tbody><tr>
            <td class="key">URI Prefix</td>
            <td>nfs</td>
          </tr>
          <tr>
            <td class="key">URI</td>
            <td>nfs://xx.xx.xx.xx/var/lib/tftpboot</td>
          </tr>
          <tr>
            <td class="key">Access URL</td>
            <td>http://xx.xx.xx.xx/tftpboot/</td>
          </tr>
          <tr>
            <td class="key">PXE Directory</td>
            <td>pxelinux.cfg</td>
          </tr>
          <tr>
            <td class="key">Windows Images Directory</td>
            <td></td>
          </tr>
          <tr>
            <td class="key">Customization Directory</td>
            <td>custom</td>
          </tr>
          <tr>
            <td class="key">Last Refreshed On</td>
            <td></td>
          </tr>
        </tbody></table>

          <hr>
            <p class="legend">PXE Image Menus</p>
            <table class="style1">
              <tbody><tr>
                <td class="key">Filename</td>
                <td>pxelinux.cfg/default</td>
              </tr>
            </tbody></table>

whereas other pages, like provider details, look like this

    <thead>
      <tr><th colspan="2" align="left">Properties</th></tr>
    </thead>
      <tbody><tr class="row0
        no-hover">
        <td class="label">Hostname</td>
        <td>
          xx.xx.xx.xx
        </td>
      </tr>
      <tr class="row1
        no-hover">
        <td class="label">IP Address</td>
        <td>
          xx.xx.xx.xx
        </td>
      </tr>
      <tr class="row0
        no-hover">
        <td class="label">Type</td>
        <td>
          VMware vCenter
        </td>
      </tr>
      <tr class="row1
        no-hover">
        <td class="label">Aggregate Host CPU Resources</td>
        <td>
          106.6 GHz
        </td>
      </tr>
      <tr class="row0
        no-hover">
        <td class="label">Aggregate Host Memory</td>
        <td>
          472 GB
        </td>
      </tr>
      <tr class="row1
        no-hover">
        <td class="label">Aggregate Host CPUs</td>
        <td>
          8
        </td>
      </tr>
      <tr class="row0
        no-hover">
        <td class="label">Aggregate Host CPU Cores</td>
        <td>
          44
        </td>
      </tr>
      <tr class="row1
        no-hover">
        <td class="label">Management Engine GUID</td>
        <td>
          xxx-xxx-xxx
        </td>
      </tr>
      <tr class="row0
        no-hover">
        <td class="label">Host Default VNC Port Range</td>
        <td>

        </td>
      </tr>
  </tbody>

MiqPowerShell should be using nokogiri over rexml

Running my branch on ruby 2.1.2 locally (it adds lots of allocation hooks), with the allocation_stats gem and profiling of object allocations per rspec example, I see a tremendous number of objects created from the scvmm_refresher_spec.rb in rexml land, see below.

This might be a place we can fully support nokogiri and get an instant performance benefit depending on how often we are parsing xml documents in powershell land.

I believe the offending code in miq-powershell is delegating to MiqXml to decide on the "default xml parser" and ending up with rexml.

Rexml is notoriously bad with memory and most move to nokogiri for better performance.

Changing the code to force nokogiri:

diff --git a/lib/util/win32/miq-powershell.rb b/lib/util/win32/miq-powershell.rb
index 59cb243..9a35130 100644
--- a/lib/util/win32/miq-powershell.rb
+++ b/lib/util/win32/miq-powershell.rb
@@ -193,7 +193,7 @@ module MiqPowerShell
     def initialize(xml)
       @refIds = []
       if xml.kind_of?(String)
-        @xml = MiqXml.load(xml)
+        @xml = MiqXml.load(xml, :nokogiri)
       else
         @xml = xml
       end

I get the following error on ruby 1.9.3, indicating the powershell code is expecting a hash and we get an array, it might be a simple fix to get the miq-nokogiri code compatible with what miq-rexml does:

  1) EmsRefresh::Refreshers::ScvmmRefresher will perform a full refresh
     Failure/Error: EmsRefresh.refresh(@ems)
     TypeError:
       can't convert String into Integer
     # .../Code/manageiq/lib/util/win32/miq-powershell.rb:259:in `[]'
     # .../Code/manageiq/lib/util/win32/miq-powershell.rb:259:in `process_obj'
     # .../Code/manageiq/lib/util/win32/miq-powershell.rb:280:in `add_to_array'
     # .../Code/manageiq/lib/util/win32/miq-powershell.rb:212:in `block in process_root'
     # .../Code/manageiq/lib/util/xml/miq_nokogiri.rb:69:in `block in each_element'
     # .../.gem/ruby/1.9.3/gems/nokogiri-1.5.11/lib/nokogiri/xml/node_set.rb:237:in `block in each'
     # .../.gem/ruby/1.9.3/gems/nokogiri-1.5.11/lib/nokogiri/xml/node_set.rb:236:in `upto'
     # .../.gem/ruby/1.9.3/gems/nokogiri-1.5.11/lib/nokogiri/xml/node_set.rb:236:in `each'```

Here is the output indicating the higher object allocation per example for the scvmm spec, note, other "heavy allocators" are in the neighborhood of 80k-200k object allocations.

  String allocations at <RUBYLIBDIR>/rexml/element.rb:229
    769060 allocations during ./spec/models/ems_refresh/refreshers/scvmm_refresher_spec.rb:20
  String allocations at <RUBYLIBDIR>/rexml/element.rb:226
    411682 allocations during ./spec/models/ems_refresh/refreshers/scvmm_refresher_spec.rb:20
  String allocations at <RUBYLIBDIR>/rexml/text.rb:395
    396484 allocations during ./spec/models/ems_refresh/refreshers/scvmm_refresher_spec.rb:20
  String allocations at <RUBYLIBDIR>/rexml/element.rb:1045
    391056 allocations during ./spec/models/ems_refresh/refreshers/scvmm_refresher_spec.rb:20
  MatchData allocations at <RUBYLIBDIR>/rexml/element.rb:1045
    391056 allocations during ./spec/models/ems_refresh/refreshers/scvmm_refresher_spec.rb:20
  String allocations at <RUBYLIBDIR>/rexml/element.rb:1046
    391056 allocations during ./spec/models/ems_refresh/refreshers/scvmm_refresher_spec.rb:20
  String allocations at <RUBYLIBDIR>/rexml/parsers/baseparser.rb:334
    386384 allocations during ./spec/models/ems_refresh/refreshers/scvmm_refresher_spec.rb:20
  String allocations at <RUBYLIBDIR>/rexml/parsers/baseparser.rb:381
    341106 allocations during ./spec/models/ems_refresh/refreshers/scvmm_refresher_spec.rb:20
  MatchData allocations at <RUBYLIBDIR>/rexml/text.rb:132
    244426 allocations during ./spec/models/ems_refresh/refreshers/scvmm_refresher_spec.rb:20
  String allocations at <RUBYLIBDIR>/rexml/text.rb:118
    227222 allocations during ./spec/models/ems_refresh/refreshers/scvmm_refresher_spec.rb:20

Note, to run this locally:

  • Check out my branch
  • install ruby 2.1.2
  • bundle all your gems in vmdb with ruby 2.1.2
  • Create/append the following line to vmdb/Gemfile.dev.rb
    gem 'allocation_stats' , :git => "[email protected]:srawlins/allocation_stats.git"
  • Run bundle again
  • Enable profiling of rspec examples:
diff --git a/vmdb/spec/spec_helper.rb b/vmdb/spec/spec_helper.rb
index 45a16b6..c9a1124 100644
--- a/vmdb/spec/spec_helper.rb
+++ b/vmdb/spec/spec_helper.rb
@@ -1,3 +1,6 @@
+require 'allocation_stats'
+AllocationStats.trace_rspec
+
  • Run the spec:
    bin/rspec spec/models/ems_refresh/refreshers/scvmm_refresher_spec.rb

When editing a cloud provider region, populated data does not change

Created a EC2 cloud provider for us-west which was populated with us-west information (availability zones, vpcs etc). I edited the provider and changed the region to us-east and the data still reflected the us-west information. It should be noted that data is not being populated for another provider I created for us-east. It is possible that if the us-east data was populated, the us-west data would be removed.

UI Policy tree not initializing with Policy nodes showing

In 5.2, with dynatree trees, policy tree starts as:
screen shot 2014-06-27 at 10 42 04 am
On master, starts as:
screen shot 2014-06-27 at 10 46 58 am
This causes clicking a link to a Policy not yet in the tree to not be able to locate the node and expand it when showing the Policy. This happens when viewing either a condition or action node that is assigned to a policy and clicking on the policy link.

Cannot add methods to a class unless Display Name is set

Version: master.20140722140215_bb27493

To repeat:

  • Create a domain, namespace
  • In the namespace create a class, leave the Display Name field blank
  • Try to add a method

Actual:

  • Methods tab is grayed out

Expected:

  • If Display Name is actually required, it should be checked when the Class is created.

UI - VM Compare scrollbar issues

First screenshot shows a bottom scrollbar when not needed comparing 3 VMs. Second screenshot shows bottom scrollbar as well as a scrollbar under the grid area.
screenshot from 2014-08-01 10 01 43
screenshot from 2014-08-01 10 00 25

UI - Storage tab issues

  • Storage Managers
    • Configuration -> Add a new Storage Manager - "undefined method `delete' for
      nil:NilClass [storage_manager/create]"
      - PR #270 - Merged
    • Download Storage Manager data in txt format - "undefined method `to_human' for
      ["agent_type<>?", "VMDB"]:Array [storage_manager/download_data]"
    • Configuration -> Add a new Storage Manager - when pressing Add button Error text: wrong number of arguments (2 for 1) [storage_manager/create] ---- (broken recently)
    • Configuration -> Refresh Inventory - undefined local variable or method `id' for #StorageManagerController:0x0000000d2d3ba8 [storage_manager/button] ---- (broken recently)
  • Filers
    • Create Logical Disk - Aggregate (free space) dropdown list is empty
    • Infrastructure Relationships - VMs - Refresh Relationships and Power states/Perform Smart state Analysis/Extract Running Processes/Retire Selected items/Shutdown Guest/All Power button options - "Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id [ontap_storage_system/button]" - PR #305 - Merged
    • Infrastructure Relationships - VMs - Lifecycle - Clone Selected item/Publish selected VM to a template/Migrate Selected items - Routing error Error caught: [ActionController::RoutingError] No route matches {:controller=>"miq_request", :action=>"miq_request/prov_edit", :src_vm_id=>10000000000116, :org_controller=>"vm", :vdi_users=>nil} - PR #281- Merged
    • Infrastructure Relationships - Hosts - Refresh Relationships/Perform smart state Analysis/Check compliance of Last known configuration - undefined method `sub_table' for nil:NilClass [ontap_storage_system/button] - PR #305 - Merged
    • Infrastructure Relationships - Hosts - Power Button options - No flash message displayed - PR #305 - Merged
    • Infrastructure Relationships - Hosts - Analyze then check compliance - The user is not authorized for this task or item. [ontap_storage_system/button] - PR #315 - Merged
  • Volumes
    • Infrastructure Relationships - VMs - Refresh Relationships and Power states/Perform smartstate analysis/Extract Running Processes/Check compliance of last known configuration/All Power button options - "Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id [ontap_storage_system/button]" - PR #305 - Merged
    • Infrastructure Relationships - VMs - Lifecycle - Clone Selected item/Publish selected VM to a template/Migrate Selected items - Routing error Error caught: [ActionController::RoutingError] No route matches {:controller=>"miq_request", :action=>"miq_request/prov_edit", :src_vm_id=>10000000000116, :org_controller=>"vm", :vdi_users=>nil} - PR #281 - Merged
    • Infrastructure Relationships - Hosts - Refresh Relationships/Perform smart state Analysis/Check compliance of Last known configuration - undefined method `sub_table' for nil:NilClass [ontap_storage_system/button] - PR #305 - Merged
    • Infrastructure Relationships - Hosts - Power Button options - No flash message displayed - PR #305 - Merged
    • Infrastructure Relationships - Hosts - Analyze then check compliance - The user is not authorized for this task or item. [ontap_storage_system/button] - PR #315 - Merged
  • File Shares
    • Identical to all issues seen in the Filers tab
  • LUNs
    • TBD - Currently no data available to test for issues in Infrastructure Relationships
  • Common to all tabs
    • Download data as PDF - SystemStackError in {controller_name}#download_data - Can't recreate anymore, fixed by PR #380

Remove prototype.js

We have a bunch of JS libraries used in the codebase.

  • Remove prototype, replacing it with jquery.
  • Write tests for newly created javascript functions.

Child issues:
UI: prototype -> jquery - class manipulation #872
UI: prototype -> jquery - show/hide function calls #873
UI: prototype -> jquery - element property manipulation #874
UI: prototype -> jquery - css style manipulation #875
UI: prototype -> jquery - replace calls to .value #1147
UI: prototype -> jquery - replace calls to checked, enable and disable #1148
UI: prototype -> jquery - replace ajax calls #1150

UI Add support to copy class, instance, method automate objects

Back end support in #73.

When positioned on a specific class/instance/method, or when one is selected from a list, show a "Copy <Class/Instance/Method>" button in the toolbar. May need to disable it if there are no unlocked domains that can be copied to.

Once pressed, the right cell changes to a "Copy <Class/Instance/Method> <c/i/m name/description>" form.

  • First field is a drop down to select the Domain to copy to. If only 1 available, it would just be text, not a drop down. For same domain as the source, put "(same domain)" suffix in the text for that entry. Present the domains in priority order with the top choice as the default initially selected value.
  • Second field is a check box that is initially checked called "Copy to the same Namespace in the target domain" "Copy will override Source". If the same domain was chosen, this should be hidden and the next field shown.
  • Third field is a tree chooser with the Domain's Namespace nodes for which Namespace to copy to. If the above check box is checked, this field should be hidden. Otherwise, a single Namespace in the chosen domain should be selectable.
  • When a Namespace is chosen in the tree for an Instance or Method copy, a check box to "Overwrite the existing <Instance/Method>?" should appear so the user can force the copy to overwrite the existing element.

When the Copy button is pressed, call the back end methods and present any errors. If no errors, tree needs to be redrawn to reflect the changes and user should be put back to where they started positioned on the newly copied element with the success message.

Creating duplicate namespaces silently fails

Version: master.20140722140215_bb27493

Reproduce:

  • Create a domain
  • In that domain, create a namespace foo
  • Then create the same namespace foo again

The 2nd create should fail (the name is taken) but no error message is given.

Automate Explorer: Changes to handle copying of multiple Automate Classes, Instances & Methods

  • Model methods need to be changed to class methods and to accept accept array of ids to be copied. New methods should have transaction block that will either copy all of the objects successfully or send errors back to controller if any of them was unsuccessful and revert any changes that were made.
  • UI needs to be changed to handle multiple selections and pass them to new model methods. Need to change copy form to show list of selected objects in a grid/box.
  • Need to allow user to copy Automate Class from list of Namespaces/Classes grid view. When a single Namespace is selected to copy from list, display an error flash message. When multiple items are selected and some of them are namespaces in them ignore namespace record and continue to copy selected Class objects.

[UI] Service dialogs - sort arrow is not tied to the column

The arrow which shows direction and column of the sort is not part of the table, but rather overlays it with absolute position. This makes it difficult to test sorting in UI. Provisioning dialogs have different type of table, which has the arrow inside the table cell, making it simpler.

UI: IE8 getting logged out leaving Dashboard

After successfully logging in in IE8 the user is logged out when attempting to navigate away from or refresh the Dashboard.

Error in log indicates that CSRF cannot be verified.

UI: Template Clone - Not able to clone a Template

getting a flash message on screen when i try to clone a template:
" Clone does not apply to VM Template"
Need to fix includes_template? template method to allow VMware templates for cloning, if possible move this check in the model. maybe a check in Application helper line 956 that hides a clone template button on template summary screen for Red Hat template can be used.

When trying to clone a template going from Host to it's templates(classic screen) i get an error in log: Render and/or redirect were called multiple times in this action

copied this issue from old repo.
@AparnaKarve New issue for next sprint, @h-kataria can answer questions if needed.

Failing intermittent ScheduleWorkerSpec example

https://travis-ci.org/ManageIQ/manageiq/jobs/29345886

  1) ScheduleWorker.new with Time before DST using Rufus::Scheduler end-to-end schedules modified to run every 5 minutes #schedules_for_ems_metrics_coordinator_role ems_metrics_processor queue purge_realtime_timer every 15 minutes, first in 5 minutes
     Failure/Error: MiqQueue.where(queue_conditions).count.should == 1
       expected: 1
            got: 0 (using ==)
     # /home/travis/.rvm/gems/ruby-1.9.3-p545/gems/rspec-expectations-2.12.1/lib/rspec/expectations/fail_with.rb:33:in `fail_with'
     # /home/travis/.rvm/gems/ruby-1.9.3-p545/gems/rspec-expectations-2.12.1/lib/rspec/matchers/operator_matcher.rb:56:in `fail_with_message'
     # /home/travis/.rvm/gems/ruby-1.9.3-p545/gems/rspec-expectations-2.12.1/lib/rspec/matchers/operator_matcher.rb:94:in `__delegate_operator'
     # /home/travis/.rvm/gems/ruby-1.9.3-p545/gems/rspec-expectations-2.12.1/lib/rspec/matchers/operator_matcher.rb:84:in `eval_match'
     # /home/travis/.rvm/gems/ruby-1.9.3-p545/gems/rspec-expectations-2.12.1/lib/rspec/matchers/operator_matcher.rb:37:in `block in use_custom_matcher_or_delegate'
     # ./spec/lib/workers/schedule_worker_spec.rb:503:in `block (8 levels) in <top (required)>'

UI: Dashboard Widget links don't work running in dev mode

Running in development mode and hitting 127.0.0.1:3000, an example widget that doesn't work is "EVM: Recently discovered vms". I'm seeing 2 different issues

  • When I click the box on the text it opens a blank page. The href in the source is "http://://127.0.0.1:3000/vm/show/1000000000001", which seems like a badly generated URL.
  • If I click the box, but not on the text, nothing happens, even though the whole box is highlighted as if to be clicked

cc @dclarizio

Fix Intermittently Failing Controller Spec

From https://travis-ci.org/ManageIQ/manageiq/jobs/29536404

Seems that order of an inner array can change causing test failures. You can use the have_same_elements RSpec matcher to make the check order independent.

 1) OpsController OpsController::Settings::Common SmartProxy Affinity #build_smartproxy_affinity_tree should build a SmartProxy Affinity tree
     Failure/Error: tree.should be == [
       expected: == [{:key=>"1166", :icon=>"evm_server.png", :title=>"Server: svr1 [1166]", :expand=>true, :children=>[{:key=>"1166__host", :icon=>"host.png", :title=>"Hosts", :children=>[{:key=>"1166__host_978", :icon=>"host.png", :title=>"host1", :select=>true}, {:key=>"1166__host_979", :icon=>"host.png", :title=>"host2", :select=>false}]}, {:key=>"1166__storage", :icon=>"storage.png", :title=>"Datastores", :children=>[{:key=>"1166__storage_401", :icon=>"storage.png", :title=>"storage_99", :select=>true}, {:key=>"1166__storage_402", :icon=>"storage.png", :title=>"storage_100", :select=>false}]}]}, {:key=>"1167", :icon=>"evm_server.png", :title=>"Server: svr2 [1167]", :expand=>true, :children=>[{:key=>"1167__host", :icon=>"host.png", :title=>"Hosts", :children=>[{:key=>"1167__host_978", :icon=>"host.png", :title=>"host1", :select=>false}, {:key=>"1167__host_979", :icon=>"host.png", :title=>"host2", :select=>true}]}, {:key=>"1167__storage", :icon=>"storage.png", :title=>"Datastores", :children=>[{:key=>"1167__storage_401", :icon=>"storage.png", :title=>"storage_99", :select=>false}, {:key=>"1167__storage_402", :icon=>"storage.png", :title=>"storage_100", :select=>true}]}]}]
            got:    [{:key=>"1166", :icon=>"evm_server.png", :title=>"Server: svr1 [1166]", :expand=>true, :children=>[{:key=>"1166__host", :icon=>"host.png", :title=>"Hosts", :children=>[{:key=>"1166__host_978", :icon=>"host.png", :title=>"host1", :select=>true}, {:key=>"1166__host_979", :icon=>"host.png", :title=>"host2", :select=>false}]}, {:key=>"1166__storage", :icon=>"storage.png", :title=>"Datastores", :children=>[{:key=>"1166__storage_402", :icon=>"storage.png", :title=>"storage_100", :select=>false}, {:key=>"1166__storage_401", :icon=>"storage.png", :title=>"storage_99", :select=>true}]}]}, {:key=>"1167", :icon=>"evm_server.png", :title=>"Server: svr2 [1167]", :expand=>true, :children=>[{:key=>"1167__host", :icon=>"host.png", :title=>"Hosts", :children=>[{:key=>"1167__host_978", :icon=>"host.png", :title=>"host1", :select=>false}, {:key=>"1167__host_979", :icon=>"host.png", :title=>"host2", :select=>true}]}, {:key=>"1167__storage", :icon=>"storage.png", :title=>"Datastores", :children=>[{:key=>"1167__storage_402", :icon=>"storage.png", :title=>"storage_100", :select=>true}, {:key=>"1167__storage_401", :icon=>"storage.png", :title=>"storage_99", :select=>false}]}]}]
     # /home/travis/.rvm/gems/ruby-1.9.3-p545/gems/rspec-expectations-2.12.1/lib/rspec/expectations/fail_with.rb:33:in `fail_with'
     # /home/travis/.rvm/gems/ruby-1.9.3-p545/gems/rspec-expectations-2.12.1/lib/rspec/expectations/handler.rb:33:in `handle_matcher'
     # /home/travis/.rvm/gems/ruby-1.9.3-p545/gems/rspec-expectations-2.12.1/lib/rspec/expectations/syntax.rb:53:in `should'
     # ./spec/controllers/ops_controller/settings/common_spec.rb:48:in `block (5 levels) in <top (required)>'
     # /home/travis/.rvm/gems/ruby-1.9.3-p545/gems/rspec-core-2.12.2/lib/rspec/core/example.rb:114:in `instance_eval'
     # /home/travis/.rvm/gems/ruby-1.9.3-p545/gems/rspec-core-2.12.2/lib/rspec/core/example.rb:114:in `block in run'
     # /home/travis/.rvm/gems/ruby-1.9.3-p545/gems/rspec-core-2.12.2/lib/rspec/core/example.rb:254:in `with_around_each_hooks'
     # /home/travis/.rvm/gems/ruby-1.9.3-p545/gems/rspec-core-2.12.2/lib/rspec/core/example.rb:111:in `run'
     # /home/travis/.rvm/gems/ruby-1.9.3-p545/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:388:in `block in run_examples'
     # /home/travis/.rvm/gems/ruby-1.9.3-p545/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:384:in `map'
     # /home/travis/.rvm/gems/ruby-1.9.3-p545/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:384:in `run_examples'
     # /home/travis/.rvm/gems/ruby-1.9.3-p545/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:369:in `run'
     # /home/travis/.rvm/gems/ruby-1.9.3-p545/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:370:in `block in run'
     # /home/travis/.rvm/gems/ruby-1.9.3-p545/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:370:in `map'
     # /home/travis/.rvm/gems/ruby-1.9.3-p545/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:370:in `run'
     # /home/travis/.rvm/gems/ruby-1.9.3-p545/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:370:in `block in run'
     # /home/travis/.rvm/gems/ruby-1.9.3-p545/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:370:in `map'
     # /home/travis/.rvm/gems/ruby-1.9.3-p545/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:370:in `run'
     # /home/travis/.rvm/gems/ruby-1.9.3-p545/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:370:in `block in run'
     # /home/travis/.rvm/gems/ruby-1.9.3-p545/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:370:in `map'
     # /home/travis/.rvm/gems/ruby-1.9.3-p545/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:370:in `run'
     # /home/travis/.rvm/gems/ruby-1.9.3-p545/gems/rspec-core-2.12.2/lib/rspec/core/command_line.rb:28:in `block (2 levels) in run'
     # /home/travis/.rvm/gems/ruby-1.9.3-p545/gems/rspec-core-2.12.2/lib/rspec/core/command_line.rb:28:in `map'
     # /home/travis/.rvm/gems/ruby-1.9.3-p545/gems/rspec-core-2.12.2/lib/rspec/core/command_line.rb:28:in `block in run'
     # /home/travis/.rvm/gems/ruby-1.9.3-p545/gems/rspec-core-2.12.2/lib/rspec/core/reporter.rb:34:in `report'
     # /home/travis/.rvm/gems/ruby-1.9.3-p545/gems/rspec-core-2.12.2/lib/rspec/core/command_line.rb:25:in `run'
     # /home/travis/.rvm/gems/ruby-1.9.3-p545/gems/rspec-core-2.12.2/lib/rspec/core/runner.rb:80:in `run'
     # /home/travis/.rvm/gems/ruby-1.9.3-p545/gems/rspec-core-2.12.2/lib/rspec/core/runner.rb:17:in `block in autorun'

UI - Edit Report Menus minor issues

Noticed a couple of things when testing another PR. When the root node in this accordion is selected, the list on the right is not sorted insensitive to case. Also, after making a change to a report menu and saving, the tree is still locked (disabled) where it should be unlocked so the user can choose a different menu to edit from the tree side.

Here's a screenshot showing both issues:

screen shot 2014-07-09 at 3 58 26 pm

EC2 us-east provider not populating

ManageIQ Setup:

  • Two cloud providers
    • us-west
    • us-east
  • Both providers use the same credentials which has an admin level role

EC2 Setup:

  • us-west is unused, everything is left as default
  • us-east contains the following:
    • 5 VPCs
    • 22 subnets
    • 5 network ACLs
    • 28 security groups
    • 2 VPN connections
    • 1 gateway
    • 6 route tables
    • 2 customer gateways
    • 4 private gateways

Issue timeline:

  • I attempted to run a discovery using the username/password we use to access the AWS console, this returned nothing
  • I created a provider for us-east with the access/secret keys I use with boto. Provider showed no relationships
  • I deleted us-east provider and created a us-west provider, this showed relationships for the default VPC and 29 flavors
  • I recreated the us-east provider with original results (nothing populating, all relationships are 0)

Don't build test gems into rpms

  • Currently, the vmdb test gems are not in the Gemfile. This is good because they are not required by the build process.
  • The lib test gems are in the Gemfile. This requires us to build the test gems into rpms.
  • developer specific gems can be added to vmdb/Gemfile.developer.rb. But those are not available when developing in lib

Goal: remove test gem dependencies from the appliance
Sub-Goal: let developers add development gems

Ideas:

  1. add unless ENV["APPLIANCE"] around sections in Gemfile that are not required on the appliance. (elegant, relatively simple, fewer Gemfiles, requires testing / possible surprises)
  2. use require statements currently in vmdb/Gemfile in lib/Gemfile. (simple, easy, ugly)

//cc @jrafanie

Wrong management network when importing Ovirt image into ovirt-3.4

The image manageiq-ovirt-master-20140714-6faf9a340c.ova has the default network as rhevm when the default network in ovirt-3.4 is ovirtmgmt. A current work around is to modify the ManageIQ ova configuration file in the ovirt export domain by replacing the rhevm with ovirtmgmt for the eth0 network. I did not use engine-image-uploader but manually extracted the image into the ovirt export domain.

Workaround:

<rasd:Connection>rhevm</rasd:Connection>
to
<rasd:Connection>ovirtmgmt</rasd:Connection>

Find by fqname of automate class and namespace doesn't work with leading slash

The fqname method gives back a fully qualified name of a class or an instance, which includes the domain, namespace, class.
The fqname doesn't contain the leading /

When a user calls MiqAeNamespace.find_by_fqname or MiqAeClass.find_by_fqname if there is a leading slash this call fails. Both of these calls only work if the leading slash has been removed.

This issue was opened to fix the MiqAeNamespace.find_by_fqname and MiqAeClass.find_by_fqname so that it can work with or without the leading slash.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.