namespace :opsmgr do

desc "Alias for opsmgr:destroy:vms"
task :destroy, [:environment] => %w(opsmgr:destroy:vms)

namespace :destroy do
  desc "- Clear our Resource Pool, deleting stemcells, all installed products' VMs (including Ops Mgr)"
  task :vms, [:environment, :om_version] do |_, args|
    require 'opsmgr/cmd/ops_manager'
    require 'opsmgr/environments'
    require 'opsmgr/api/client'

    env = Opsmgr::Environments.for(args.environment)
    begin
      installation_settings = Opsmgr::Api::Client.new(env, args.om_version).installation_settings.as_hash
    rescue
      installation_settings = { 'infrastructure' => {} }
    end
    require 'vm_shepherd'
    shep = VmShepherd::Shepherd.new(settings: env.settings_with_merged_folders(installation_settings))
    shep.clean_environment
    shep.destroy
  end

  desc '- Destroy Existing Ops Manager'
  task :opsmgr, [:environment] do |_, args|
    require 'opsmgr/environments'
    require 'vm_shepherd'
    env = Opsmgr::Environments.for(args.environment)

    shep = VmShepherd::Shepherd.new(settings: env.settings)
    shep.destroy
  end

# Makes no difference, this still fails with the same error, it's not folder merging that is to blame. # Maybe the script isn't powering the VM using the 'lime' folder off before trying to delete it.

  desc '- Destroy Existing Ops Manager without merging settings'
  task :vms_raw, [:environment] do |_, args|
    require 'opsmgr/environments'
    require 'vm_shepherd'
    env = Opsmgr::Environments.for(args.environment)

    shep = VmShepherd::Shepherd.new(settings: env.settings)
    shep.clean_environment
    shep.destroy
  end

end

end # Copyright © 2014-2015 Pivotal Software, Inc. # All rights reserved. # THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, # INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR # PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE # USE OR OTHER DEALINGS IN THE SOFTWARE.