namespace :opsmgr do
desc 'Trigger an install on Ops Manager for the specified environment' task :trigger_install, [:environment, :om_version, :install_timeout, :poll_interval] do |_, args| args.with_defaults(poll_interval: '30') require 'opsmgr/ui_helpers/ui_spec_runner' UiSpecRunner.new( environment: args.environment, om_version: args.om_version ).trigger_install(args.install_timeout, args.poll_interval) end desc 'Get latest install log from Ops Manager' task :get_latest_install_log, [:environment, :om_version] do |_, args| require 'opsmgr/ui_helpers/ui_spec_runner' UiSpecRunner.new( environment: args.environment, om_version: args.om_version ).get_latest_install_log end desc 'Export installation' task :export_installation, [:environment, :om_version, :export_destination] do |_, args| require 'opsmgr/ui_helpers/ui_spec_runner' UiSpecRunner.new( environment: args.environment, om_version: args.om_version ).export_installation(args.export_destination) end desc 'Import installation' task :import_installation, [:environment, :om_version, :import_file] do |_, args| require 'opsmgr/environments' require 'opsmgr/cmd/ops_manager' require 'opsmgr/api/client' environment_object = Opsmgr::Environments.for(args.environment) client = Opsmgr::Api::Client.new(environment_object, args.om_version) opsmgr_cmd = Opsmgr::Cmd::OpsManager.new(environment_object) opsmgr_cmd.import_installation(client, args.import_file) if Gem::Version.new(args.om_version) >= Gem::Version.new('1.7') require 'opsmgr/ui_helpers/ui_spec_runner' UiSpecRunner.new( environment: args.environment, om_version: args.om_version ).post_import_configuration end end desc 'Delete installation' task :delete_installation, [:environment, :om_version] do |_, args| require 'opsmgr/ui_helpers/ui_spec_runner' UiSpecRunner.new( environment: args.environment, om_version: args.om_version ).delete_installation end desc 'Add first user' task :add_first_user, [:environment, :om_version] do |_, args| require 'opsmgr/ui_helpers/ui_spec_runner' UiSpecRunner.new( environment: args.environment, om_version: args.om_version ).add_first_user end desc 'Prepare Environment' task :prepare, [:environment] do |_, args| require 'opsmgr/log' require 'opsmgr/environments' require 'vm_shepherd' logger = Opsmgr.logger_for('Rake') logger.info "Preparing environment for #{args[:environment]}" environment = Opsmgr::Environments.for(args.environment) shep = VmShepherd::Shepherd.new(settings: environment.settings) shep.prepare_environment end desc 'Install Operations Manager .image' task :install, [:environment, :image] do |_, args| require 'timeout' require 'opsmgr/log' require 'opsmgr/environments' require 'vm_shepherd' logger = Opsmgr.logger_for('Rake') logger.info "installing #{args[:environment]}'s Ops Manager" environment = Opsmgr::Environments.for(args.environment) image = args[:image] shep = VmShepherd::Shepherd.new(settings: environment.settings) shep.deploy(paths: [image]) end desc 'Delete a product' task :delete_product, [:environment, :om_version, :product_name, :timeout, :poll_interval] do |_, args| args.with_defaults(poll_interval: '30') require 'opsmgr/ui_helpers/ui_spec_runner' DEFAULT_DELETE_TIMEOUT = 25 UiSpecRunner.new( environment: args.environment, om_version: args.om_version ).delete_product(args.product_name, args.timeout || DEFAULT_DELETE_TIMEOUT.to_s, args.poll_interval) end desc 'Delete a product if present (will not fail if product is not preset)' task :delete_product_if_present, [:environment, :om_version, :product_name, :timeout, :poll_interval] do |_, args| args.with_defaults(poll_interval: '10') require 'opsmgr/ui_helpers/ui_spec_runner' DEFAULT_DELETE_TIMEOUT = 25 UiSpecRunner.new( environment: args.environment, om_version: args.om_version ).delete_product_if_present(args.product_name, args.timeout || DEFAULT_DELETE_TIMEOUT.to_s, args.poll_interval) end desc 'Delete unused products' task :delete_unused_products, [:environment, :om_version] do |_, args| require 'opsmgr/api/client' require 'opsmgr/cmd/ops_manager' require 'opsmgr/environments' unless args.om_version raise "Please provide an Ops Manager version (for example, 1.7)" end environment = Opsmgr::Environments.for(args.environment) client = Opsmgr::Api::Client.new(environment, args.om_version) Opsmgr::Cmd::OpsManager.new(environment).delete_unused_products(client) end desc 'Saves the private key into the given file' task :get_private_key, [:environment, :key_file_path] do |_, args| require 'opsmgr/environments' environment = Opsmgr::Environments.for(args.environment) case environment.settings.iaas_type when 'aws' private_key = environment.settings.ops_manager.aws.ssh_key when 'openstack' private_key = environment.settings.ops_manager.openstack.ssh_private_key else raise 'Unsupported IaaS - this task only works for AWS and Openstack' end File.open(args.key_file_path, 'w+') do |f| f << private_key f.chmod(0o600) end end desc 'run an errand' task :run_errand, [:environment_name, :om_version, :product_name, :errand_name, :download_logs] do |_, args| require 'opsmgr/cmd/bosh_command' require 'opsmgr/log' require 'opsmgr/errand_runner' logger = Opsmgr.logger_for('Rake') bosh_command = Opsmgr::Cmd::BoshCommand.new( env_name: args.environment_name, om_version: args.om_version ) Opsmgr::ErrandRunner.new( bosh_command: bosh_command, environment_name: args.environment_name, logger: logger, product_name: args.product_name, errand_name: args.errand_name, download_logs: args.with_defaults(download_logs: false) ).run_errand end desc 'Revert staged changes' task :revert_staged_changes, [:environment, :om_version] do |_, args| require 'opsmgr/ui_helpers/ui_spec_runner' unless args.om_version raise "Please provide an Ops Manager version (for example, 1.7)" end UiSpecRunner.new( environment: args.environment, om_version: args.om_version ).revert_staged_changes 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.