diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 7667470e..00000000 --- a/.gitignore +++ /dev/null @@ -1,23 +0,0 @@ -.idea -*.gem - -# SimpleCov -coverage -coverage.data - -# Need only on local machine for gem -Gemfile.lock -docs/_build - - -#Vim swap files -*.swp - -# Local raemon copy -raemon/ - -*.svg -*.png - -*.yaml -!examples/example_astute_config.yaml diff --git a/.rspec b/.rspec deleted file mode 100644 index 56bdc418..00000000 --- a/.rspec +++ /dev/null @@ -1,3 +0,0 @@ ---color --f d -#--profile diff --git a/.ruby-version b/.ruby-version deleted file mode 100644 index 879b416e..00000000 --- a/.ruby-version +++ /dev/null @@ -1 +0,0 @@ -2.1 diff --git a/Gemfile b/Gemfile deleted file mode 100644 index 25d4f69c..00000000 --- a/Gemfile +++ /dev/null @@ -1,3 +0,0 @@ -source 'https://rubygems.org' -gem 'raemon', :git => 'https://github.com/pressly/raemon', :ref => 'b78eaae57c8e836b8018386dd96527b8d9971acc' -gemspec diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 68c771a0..00000000 --- a/LICENSE +++ /dev/null @@ -1,176 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - diff --git a/MAINTAINERS b/MAINTAINERS deleted file mode 100644 index fe4f5fa6..00000000 --- a/MAINTAINERS +++ /dev/null @@ -1,67 +0,0 @@ ---- -description: - For Fuel team structure and contribution policy, see [1]. - - This is repository level MAINTAINERS file. All contributions to this - repository must be approved by one or more Core Reviewers [2]. - If you are contributing to files (or create new directories) in - root folder of this repository, please contact Core Reviewers for - review and merge requests. - - If you are contributing to subfolders of this repository, please - check 'maintainers' section of this file in order to find maintainers - for those specific modules. - - It is mandatory to get +1 from one or more maintainers before asking - Core Reviewers for review/merge in order to decrease a load on Core Reviewers [3]. - Exceptions are when maintainers are actually cores, or when maintainers - are not available for some reason (e.g. on vacation). - - [1] https://specs.openstack.org/openstack/fuel-specs/policy/team-structure - [2] https://review.openstack.org/#/admin/groups/655,members - [3] http://lists.openstack.org/pipermail/openstack-dev/2015-August/072406.html - - Please keep this file in YAML format in order to allow helper scripts - to read this as a configuration data. - -maintainers: - -- ./: - - name: Vladimir Sharshov - email: vsharshov@mirantis.com - IRC: warpc - - - name: Vladimir Kozhukalov - email: vkozhukalov@mirantis.com - IRC: kozhukalov - - - name: Ivan Ponomarev - email: iponomarev@mirantis.com - IRC: iponomarev - -- debian/: &packaging_team - - name: Mikhail Ivanov - email: mivanov@mirantis.com - IRC: mivanov - - - name: Artem Silenkov - email: asilenkov@mirantis.com - IRC: asilenkov - - - name: Alexander Tsamutali - email: atsamutali@mirantis.com - IRC: astsmtl - - - name: Daniil Trishkin - email: dtrishkin@mirantis.com - IRC: dtrishkin - - - name: Ivan Udovichenko - email: iudovichenko@mirantis.com - IRC: tlbr - - - name: Igor Yozhikov - email: iyozhikov@mirantis.com - IRC: IgorYozhikov - -- specs/: *packaging_team diff --git a/README.md b/README.md deleted file mode 100644 index 03fbb929..00000000 --- a/README.md +++ /dev/null @@ -1,75 +0,0 @@ -#Astute -[![Team and repository tags](http://governance.openstack.org/badges/fuel-astute.svg)](http://governance.openstack.org/reference/tags/index.html) - - -Astute is orchestrator, which is using data about nodes and deployment settings performs two things: -- provision -- deploy - -Provision ------ - -OS installation on selected nodes. - -Provisioning is done using Cobbler. Astute orchestrator collects data about nodes and creates corresponding Cobbler systems using parameters specified in engine section of provision data. After the systems are created, it connects to Cobbler engine and reboots nodes according to the power management parameters of the node. - -Deploy ------ - -OpenStack installation in the desired configuration on the selected nodes. - -Astute uses data about nodes and deployment settings and recalculates parameters needed for deployment. Calculated parameters are passed to the nodes being deployed by use of nailyfact MCollective agent that uploads these attributes to `/etc/astute.yaml` file of the node. Then puppet parses this file using Facter plugin and uploads these facts into puppet. These facts are used during catalog compilation phase by puppet. Finally catalog is executed and Astute orchestrator passes to the next node in deployment sequence. Fuel Library provides puppet modules for Astute. - -Using as library ------ - -```ruby -require 'astute' - -class ConsoleReporter - def report(msg) - puts msg.inspect - end -end - -reporter = ConsoleReporter.new - -orchestrator = Astute::Orchestrator.new(log_parsing=false) - -# Add systems to cobbler, reboot and start installation process. -orchestrator.provision(reporter, environment['engine'], environment['nodes']) - -# Observation OS installation -orchestrator.watch_provision_progress(reporter, environment['task_uuid'], environment['nodes']) - -# Deploy OpenStack -orchestrator.deploy(reporter, environment['task_uuid'], environment['nodes']) - -``` -Example of using Astute as library: lib/astute/server/dispatcher.rb - - -Using as CLI ------ - -CLI interface in Astute no longer supported. Please use new Fuel-CLI. More details you can get by link: https://github.com/openstack/fuel-docs/blob/master/pages/user-guide/cli.rst - ------ - -- ISO, other materials: http://fuel.mirantis.com/ -- User guide: http://docs.mirantis.com/ -- Development documentation: http://docs.mirantis.com/fuel-dev/ - - -License ------- - -Licensed under the Apache License, Version 2.0 (the "License"); you may -not use this file except in compliance with the License. You may obtain -a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -License for the specific language governing permissions and limitations -under the License. diff --git a/README.rst b/README.rst new file mode 100644 index 00000000..86e34d67 --- /dev/null +++ b/README.rst @@ -0,0 +1,10 @@ +This project is no longer maintained. + +The contents of this repository are still available in the Git +source code management system. To see the contents of this +repository before it reached its end of life, please check out the +previous commit with "git checkout HEAD^1". + +For any further questions, please email +openstack-discuss@lists.openstack.org or join #openstack-dev on +Freenode. diff --git a/Rakefile b/Rakefile deleted file mode 100644 index 1e3fb00d..00000000 --- a/Rakefile +++ /dev/null @@ -1,12 +0,0 @@ -require 'rspec/core/rake_task' - -namespace :spec do - RSpec::Core::RakeTask.new(:unit) do |t| - t.rspec_opts = "--color --format documentation" - specfile = ENV['S'].to_s.strip.length > 0 ? "*#{ENV['S']}*" : '*' - t.pattern = "spec/unit/**/#{specfile}_spec.rb" - end -end - -task :default => 'spec:unit' -task :spec => 'spec:unit' diff --git a/astute.gemspec b/astute.gemspec deleted file mode 100644 index 86fac41d..00000000 --- a/astute.gemspec +++ /dev/null @@ -1,33 +0,0 @@ -$:.unshift File.expand_path('lib', File.dirname(__FILE__)) -require 'astute/version' - -Gem::Specification.new do |s| - s.name = 'astute' - s.version = Astute::VERSION - - s.summary = 'Orchestrator for OpenStack deployment' - s.description = 'Deployment Orchestrator of Puppet via MCollective. Works as a library or from CLI.' - s.authors = ['Mike Scherbakov'] - s.email = ['mscherbakov@mirantis.com'] - - s.add_dependency 'activesupport', '~> 4.1' - s.add_dependency 'mcollective-client', '>= 2.4.1' - s.add_dependency 'symboltable', '>= 1.0.2' - s.add_dependency 'rest-client', '>= 1.6.7' - - # Astute as service - s.add_dependency 'bunny', '>= 2.0' - s.add_dependency 'raemon', '>= 0.3' - - s.add_development_dependency 'facter' - s.add_development_dependency 'rake', '10.0.4' - s.add_development_dependency 'rspec', '>= 3.4.0' - s.add_development_dependency 'mocha', '0.13.3' - s.add_development_dependency 'simplecov', '~> 0.7.1' - s.add_development_dependency 'simplecov-rcov', '~> 0.2.3' - - s.files = Dir.glob("{bin,lib,spec,examples}/**/*") - s.executables = %w(astuted astute-simulator) - s.require_path = 'lib' -end - diff --git a/astute.service b/astute.service deleted file mode 100644 index 19b39e9b..00000000 --- a/astute.service +++ /dev/null @@ -1,9 +0,0 @@ -[Unit] -Name=Astute daemon - -[Service] -EnvironmentFile=-/etc/sysconfig/astute -ExecStart=/usr/bin/astuted $ASTUTE_OPTIONS - -[Install] -WantedBy=multi-user.target diff --git a/astute.sysconfig b/astute.sysconfig deleted file mode 100644 index 6c40b8ba..00000000 --- a/astute.sysconfig +++ /dev/null @@ -1 +0,0 @@ -ASTUTE_OPTIONS="--config /etc/astute/astuted.conf --logfile /var/log/astute/astute.log --loglevel debug --workers 7" diff --git a/bin/astute-simulator b/bin/astute-simulator deleted file mode 100755 index d95661ce..00000000 --- a/bin/astute-simulator +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env ruby -# Copyright 2016 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require 'fuel_deployment/simulator' -require 'astute' - -simulator = Astute::Simulator.new -simulator.run diff --git a/bin/astuted b/bin/astuted deleted file mode 100755 index 7f74366d..00000000 --- a/bin/astuted +++ /dev/null @@ -1,88 +0,0 @@ -#!/usr/bin/env ruby - -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require 'astute' -require 'logger' -require 'ostruct' -require 'optparse' -require 'yaml' -require 'raemon' - -options = OpenStruct.new -options.daemonize = false -options.pidfile = '/var/run/astuted.pid' -options.config_path = '/etc/astute/astuted.conf' -options.log_path = nil -options.log_level = 'debug' -options.workers = 1 - -OptionParser.new do |opts| - opts.banner = 'Usage: astuted [options]' - opts.separator "\nOptions:" - opts.on('-d', '--[no-]daemonize', 'Daemonize server') do |flag| - options.daemonize = flag - end - opts.on('-P', '--pidfile PATH', 'Path to pidfile') do |path| - options.pidfile = path - end - opts.on('-w', '--workers NUMBER', 'Number of worker processes') do |number| - options.workers = number.to_i - end - opts.on('-c', '--config PATH', 'Use custom config file') do |path| - unless File.exists?(path) - puts "Error: config file #{path} was not found" - exit - end - options.config_path = path - end - opts.on('-l', '--logfile PATH' 'Log file path') do |path| - options.log_path = path - end - levels = %w{fatal error warn info debug} - opts.on('--loglevel LEVEL', levels, "Logging level (#{levels.join(', ')})") do |level| - options.log_level = level - end - opts.on_tail('-h', '--help', 'Show this message') do - puts opts - exit - end - opts.on_tail('-v', '--version', 'Show version') do - puts Astute::VERSION - exit - end -end.parse! - -if options.daemonize - # After daemonize we can't log to STDOUT, pick a default log file - options.log_path ||= "#{Dir.pwd}/astute.log" -end - -Astute.config.update(YAML.load(File.read(options.config_path))) if File.exists?(options.config_path) -Astute.logger = options.log_path ? Logger.new(options.log_path) : Logger.new(STDOUT) -Astute.logger.level = Logger.const_get(options.log_level.upcase) -Astute.logger.formatter = proc do |severity, datetime, progname, msg| - severity_map = {'DEBUG' => 'DEBUG', 'INFO' => 'INFO', 'WARN' => 'WARNING', 'ERROR' => 'ERROR', 'FATAL' => 'CRITICAL'} - "#{datetime.strftime("%Y-%m-%d %H:%M:%S")} #{severity_map[severity]} [#{Process.pid}] #{msg}\n" -end - -Astute.logger.debug "Starting with settings\n#{Astute.config.to_yaml}" - -Raemon::Master.start(options.workers, Astute::Server::Worker, - :detach => options.daemonize, - :name => 'astute', - :pid_file => options.pidfile, - :logger => Astute.logger -) diff --git a/bindep.txt b/bindep.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/debian/changelog b/debian/changelog deleted file mode 100644 index 3dd70285..00000000 --- a/debian/changelog +++ /dev/null @@ -1,47 +0,0 @@ -astute (10.0.0-1) trusty; urgency=low - - * Bump version to 10.0 - - -- Sergey Kulanov Mon, 21 Mar 2016 13:49:10 +0200 - -astute (9.0.0-1) trusty; urgency=low - - * Update version to 9.0.0 - - -- Sergey Kulanov Thu, 17 Dec 2015 15:35:14 +0200 - -astute (8.0.0-1) trusty; urgency=low - - * Update version to 8.0.0 - - -- Vladimir Sharshov Fri, 28 Aug 2015 13:30:00 +0300 - -astute (7.0.0-1) trusty; urgency=low - - * Update version to 7.0.0 - - -- Aleksandra Fedorova Mon, 08 Jun 2015 19:30:00 +0300 - -astute (6.1.0-1) trusty; urgency=low - - * Update version to 6.1.0 - - -- Matthew Mosesohn Wed, 22 Apr 2015 14:44:00 +0300 - -astute (6.0.0-1) trusty; urgency=low - - * Update code from upstream - - -- Igor Kalnitsky Wed, 26 Nov 2014 19:49:00 +0200 - -astute (0.0.1-ubuntu1) precise; urgency=low - - * Update code from upstream - - -- OSCI Jenkins Wed, 03 Sep 2014 15:20:13 +0400 - -astute (0.0.1) unstable; urgency=low - - * Initial release. - - -- Mirantis Product Tue, 20 Aug 2013 22:20:46 +0400 diff --git a/debian/compat b/debian/compat deleted file mode 100644 index 7f8f011e..00000000 --- a/debian/compat +++ /dev/null @@ -1 +0,0 @@ -7 diff --git a/debian/control b/debian/control deleted file mode 100644 index f6b13404..00000000 --- a/debian/control +++ /dev/null @@ -1,12 +0,0 @@ -Source: astute -Section: admin -Priority: optional -Maintainer: Mirantis Product -Build-Depends: debhelper (>= 9), gem2deb -Standards-Version: 3.9.2 - -Package: nailgun-mcagents -Architecture: all -Depends: ${misc:Depends}, ${shlibs:Depends}, mcollective -Description: NailGun mcagents - . diff --git a/debian/nailgun-mcagents.install b/debian/nailgun-mcagents.install deleted file mode 100644 index 2d99a484..00000000 --- a/debian/nailgun-mcagents.install +++ /dev/null @@ -1 +0,0 @@ -mcagents/* /usr/share/mcollective/plugins/mcollective/agent/ diff --git a/debian/rules b/debian/rules deleted file mode 100755 index 2d33f6ac..00000000 --- a/debian/rules +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/make -f - -%: - dh $@ diff --git a/debian/source/format b/debian/source/format deleted file mode 100644 index 163aaf8d..00000000 --- a/debian/source/format +++ /dev/null @@ -1 +0,0 @@ -3.0 (quilt) diff --git a/examples/example_astute_config.yaml b/examples/example_astute_config.yaml deleted file mode 100644 index 028b4ac6..00000000 --- a/examples/example_astute_config.yaml +++ /dev/null @@ -1,22 +0,0 @@ -# This is example config file for Astute. Your config file should be placed -# to /opt/astute/astute.conf. You can check default values in config.rb file. ---- -# mc_retries is used in mclient.rb file. -# MClient tries mc_retries times to call MCagent before failure. -mc_retries: 5 -# puppet_timeout is used in puppetd.rb file. -# Maximum time (in seconds) Astute waits for the whole deployment. -puppet_timeout: 3600 -# puppet_deploy_interval is used in puppetd.rb file. -# Astute sleeps for puppet_deploy_interval seconds, then check Puppet agents -# statuses again. -puppet_deploy_interval: 2 -# puppet_fade_timeout is used in puppetd.rb file. -# After Puppet agent has finished real work it spend some time to graceful exit. -# puppet_fade_timeout means how long (in seconds) Astute can take for Puppet -# to exit after real work has finished. -puppet_fade_timeout: 120 -# puppet_fade_interval is used in puppetd.rb file. -# Retry every puppet_fade_interval seconds to check puppet state if it was -# in 'running' state. -puppet_fade_interval: 10 diff --git a/lib/astute.rb b/lib/astute.rb deleted file mode 100644 index a88aa107..00000000 --- a/lib/astute.rb +++ /dev/null @@ -1,120 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require 'astute/ruby_removed_functions' - -require 'json' -require 'yaml' -require 'logger' -require 'shellwords' -require 'active_support/all' -require 'pp' -require 'bunny' -require 'zlib' - -require 'astute/ext/array' -require 'astute/ext/exception' -require 'astute/ext/deep_copy' -require 'astute/ext/hash' -require 'astute/exceptions' -require 'astute/config' -require 'astute/logparser' -require 'astute/orchestrator' -require 'astute/deployment_engine' -require 'astute/network' -require 'astute/puppetd' -require 'astute/provision' -require 'astute/deployment_engine/granular_deployment' -require 'astute/cobbler' -require 'astute/cobbler_manager' -require 'astute/image_provision' -require 'astute/dump' -require 'astute/deploy_actions' -require 'astute/nailgun_hooks' -require 'astute/puppet_task' -require 'astute/puppet_job' -require 'astute/task_manager' -require 'astute/pre_delete' -require 'astute/version' -require 'astute/server/async_logger' -require 'astute/reporter' -require 'astute/mclient' -require 'astute/context' -require 'astute/nodes_remover' -require 'astute/task' -require 'astute/task_deployment' -require 'astute/task_node' -require 'astute/task_proxy_reporter' -require 'astute/task_cluster' -require 'astute/common/reboot' -require 'astute/time_observer' -require 'fuel_deployment' - -['/astute/pre_deployment_actions/*.rb', - '/astute/pre_deploy_actions/*.rb', - '/astute/pre_node_actions/*.rb', - '/astute/post_deploy_actions/*.rb', - '/astute/post_deployment_actions/*.rb', - '/astute/common_actions/*.rb', - '/astute/tasks/*.rb', - '/astute/mclients/*.rb' - ].each do |path| - Dir[File.dirname(__FILE__) + path].each{ |f| require f } -end - -# Server -require 'astute/server/worker' -require 'astute/server/server' -require 'astute/server/producer' -require 'astute/server/dispatcher' -require 'astute/server/reporter' - -module Astute - # Library - autoload 'Node', 'astute/node' - autoload 'NodesHash', 'astute/node' - autoload 'Rsyslogd', 'astute/rsyslogd' - LogParser.autoload :ParseDeployLogs, 'astute/logparser/deployment' - LogParser.autoload :ParseProvisionLogs, 'astute/logparser/provision' - LogParser.autoload :ParseImageBuildLogs, 'astute/logparser/provision' - LogParser.autoload :Patterns, 'astute/logparser/parser_patterns' - - LOG_PATH = '/var/log/astute.log' - - def self.logger - unless @logger - @logger = Logger.new(LOG_PATH) - @logger.formatter = proc do |severity, datetime, progname, msg| - severity_map = { - 'DEBUG' => 'DEBUG', - 'INFO' => 'INFO', - 'WARN' => 'WARNING', - 'ERROR' => 'ERROR', - 'FATAL' => 'CRITICAL' - } - - "#{datetime.strftime("%Y-%m-%d %H:%M:%S")} #{severity_map[severity]} [#{Process.pid}] #{msg}\n" - end - end - @logger - end - - def self.logger=(logger) - @logger = logger - Deployment::Log.logger = @logger - end - - config_file = '/opt/astute/astute.conf' - Astute.config.update(YAML.load(File.read(config_file))) if File.exists?(config_file) -end diff --git a/lib/astute/cobbler.rb b/lib/astute/cobbler.rb deleted file mode 100644 index bd8839d1..00000000 --- a/lib/astute/cobbler.rb +++ /dev/null @@ -1,344 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require 'xmlrpc/client' - -module Astute - module Provision - class CobblerError < RuntimeError; end - - class Cobbler - - attr_reader :remote - - def initialize(o={}) - Astute.logger.debug("Cobbler options:\n#{o.pretty_inspect}") - - if (match = /^http:\/\/([^:]+?):?(\d+)?(\/.+)/.match(o['url'])) - host = match[1] - port = match[2] || '80' - path = match[3] - else - host = o['host'] || 'localhost' - port = o['port'] || '80' - path = o['path'] || '/cobbler_api' - end - @username = o['username'] || 'cobbler' - @password = o['password'] || 'cobbler' - - Astute.logger.debug("Connecting to cobbler with: host: #{host} port: #{port} path: #{path}") - @remote = XMLRPC::Client.new(host, path, port) - @remote.timeout = 120 - Astute.logger.debug("Cobbler initialize with username: #{@username}, password: #{@password}") - end - - def token - remote.call('login', @username, @password) - end - - def item_from_hash(what, name, data, opts = {}) - options = { - :item_preremove => true, - }.merge!(opts) - cobsh = Cobsh.new(data.merge({'what' => what, 'name' => name})) - cobblerized = cobsh.cobblerized - - Astute.logger.debug("Creating/editing item from hash:\n#{cobsh.pretty_inspect}") - remove_item(what, name) if options[:item_preremove] - # get existent item id or create new one - item_id = get_item_id(what, name) - - # defining all item options - cobblerized.each do |opt, value| - next if opt == 'interfaces' - Astute.logger.debug("Setting #{what} #{name} opt: #{opt}=#{value}") - remote.call('modify_item', what, item_id, opt, value, token) - end - - # defining system interfaces - if what == 'system' && cobblerized.has_key?('interfaces') - Astute.logger.debug("Defining system interfaces #{name} #{cobblerized['interfaces']}") - remote.call('modify_system', item_id, 'modify_interface', - cobblerized['interfaces'], token) - end - - # save item into cobbler database - Astute.logger.debug("Saving #{what} #{name}") - remote.call('save_item', what, item_id, token) - end - - def remove_item(what, name, recursive=true) - remote.call('remove_item', what, name, token, recursive) if item_exists(what, name) - end - - def remove_system(name) - remove_item('system', name) - end - - def item_exists(what, name) - remote.call('has_item', what, name) - end - - def items_by_criteria(what, criteria) - remote.call('find_items', what, criteria) - end - - def system_by_mac(mac) - items_by_criteria('system', {"mac_address" => mac})[0] - end - - def system_exists?(name) - item_exists('system', name) - end - - def get_item_id(what, name) - if item_exists(what, name) - item_id = remote.call('get_item_handle', what, name, token) - else - item_id = remote.call('new_item', what, token) - remote.call('modify_item', what, item_id, 'name', name, token) - end - item_id - end - - def sync - remote.call('sync', token) - rescue Net::ReadTimeout, XMLRPC::FaultException => e - retries ||= 0 - retries += 1 - raise e if retries > 2 - - Astute.logger.warn("Cobbler problem. Try to repeat: #{retries} attempt") - sleep 10 - retry - end - - def power(name, action) - options = {"systems" => [name], "power" => action} - remote.call('background_power_system', options, token) - end - - def power_on(name) - power(name, 'on') - end - - def power_off(name) - power(name, 'off') - end - - def power_reboot(name) - power(name, 'reboot') - end - - def event_status(event_id) - remote.call('get_task_status', event_id) - end - - def netboot(name, state) - state = ['on', 'yes', true, 'true', 1, '1'].include?(state) - if system_exists?(name) - system_id = get_item_id('system', name) - else - raise CobblerError, "System #{name} not found." - end - remote.call('modify_system', system_id, 'netboot_enabled', state, token) - remote.call('save_system', system_id, token, 'edit') - end - - end - - class Cobsh < ::Hash - ALIASES = { - 'ks_meta' => ['ksmeta'], - 'mac_address' => ['mac'], - 'ip_address' => ['ip'], - } - - # these fields can be get from the cobbler code - # you can just import cobbler.item_distro.FIELDS - # or cobbler.item_system.FIELDS - FIELDS = { - 'system' => { - 'fields' => [ - 'name', 'owners', 'profile', 'image', 'status', 'kernel_options', - 'kernel_options_post', 'ks_meta', 'enable_gpxe', 'proxy', - 'netboot_enabled', 'kickstart', 'comment', 'server', - 'virt_path', 'virt_type', 'virt_cpus', 'virt_file_size', - 'virt_disk_driver', 'virt_ram', 'virt_auto_boot', 'power_type', - 'power_address', 'power_user', 'power_pass', 'power_id', - 'hostname', 'gateway', 'name_servers', 'name_servers_search', - 'ipv6_default_device', 'ipv6_autoconfiguration', 'mgmt_classes', - 'mgmt_parameters', 'boot_files', 'fetchable_files', - 'template_files', 'redhat_management_key', 'redhat_management_server', - 'repos_enabled', 'ldap_enabled', 'ldap_type', 'monit_enabled', - ], - 'interfaces_fields' => [ - 'mac_address', 'mtu', 'ip_address', 'interface_type', - 'interface_master', 'bonding_opts', 'bridge_opts', - 'management', 'static', 'netmask', 'dhcp_tag', 'dns_name', - 'static_routes', 'virt_bridge', 'ipv6_address', 'ipv6_secondaries', - 'ipv6_mtu', 'ipv6_static_routes', 'ipv6_default_gateway' - ], - 'special' => ['interfaces', 'interfaces_extra'] - }, - 'profile' => { - 'fields' => [ - 'name', 'owners', 'distro', 'parent', 'enable_gpxe', - 'enable_menu', 'kickstart', 'kernel_options', 'kernel_options_post', - 'ks_meta', 'proxy', 'repos', 'comment', 'virt_auto_boot', - 'virt_cpus', 'virt_file_size', 'virt_disk_driver', - 'virt_ram', 'virt_type', 'virt_path', 'virt_bridge', - 'dhcp_tag', 'server', 'name_servers', 'name_servers_search', - 'mgmt_classes', 'mgmt_parameters', 'boot_files', 'fetchable_files', - 'template_files', 'redhat_management_key', 'redhat_management_server' - ] - }, - 'distro' => { - 'fields' => ['name', 'owners', 'kernel', 'initrd', 'kernel_options', - 'kernel_options_post', 'ks_meta', 'arch', 'breed', - 'os_version', 'comment', 'mgmt_classes', 'boot_files', - 'fetchable_files', 'template_files', 'redhat_management_key', - 'redhat_management_server'] - } - - } - - def initialize(h) - Astute.logger.debug("Cobsh is initialized with:\n#{h.pretty_inspect}") - raise CobblerError, "Cobbler hash must have 'name' key" unless h.has_key? 'name' - raise CobblerError, "Cobbler hash must have 'what' key" unless h.has_key? 'what' - raise CobblerError, "Unsupported 'what' value" unless FIELDS.has_key? h['what'] - h.each{|k, v| store(k, v)} - end - - - def cobblerized - Astute.logger.debug("Cobblerizing hash:\n#{pretty_inspect}") - ch = {} - ks_meta = '' - kernel_options = '' - - each do |k, v| - k = aliased(k) - if ch.has_key?(k) && ch[k] == v - next - elsif ch.has_key?(k) - raise CobblerError, "Wrong cobbler data: #{k} is duplicated" - end - - # skiping not valid item options - unless valid_field?(k) - Astute.logger.warn("Key #{k} is not valid. Will be skipped.") - next - end - - ks_meta = serialize_cobbler_parameter(v) if 'ks_meta' == k - kernel_options = serialize_cobbler_parameter(v) if 'kernel_options' == k - - # special handling for system interface fields - # which are the only objects in cobbler that will ever work this way - if k == 'interfaces' - ch.store('interfaces', cobblerized_interfaces) - next - end - - # here we convert interfaces_extra options into ks_meta format - if k == 'interfaces_extra' - ks_meta << cobblerized_interfaces_extra - next - end - - ch.store(k, v) - end # each do |k, v| - ch.store('ks_meta', ks_meta.strip) unless ks_meta.strip.empty? - ch.store('kernel_options', kernel_options.strip) unless kernel_options.strip.empty? - ch - end - - def serialize_cobbler_parameter(param) - serialized_param = '' - if param.kind_of?(Hash) - param.each do |ks_meta_key, ks_meta_value| - serialized_param << " #{ks_meta_key}=#{serialize_cobbler_value(ks_meta_value)}" - end - elsif param.kind_of?(String) - param - else - raise CobblerError, "Wrong param format. It must be Hash or String: '#{param}'" - end - - serialized_param - end - - def serialize_cobbler_value(value) - if value.kind_of?(Hash) || value.kind_of?(Array) - return "\"#{value.to_json.gsub('"', '\"')}\"" - end - - value - end - - def aliased(k) - # converting 'foo-bar' keys into 'foo_bar' keys - k1 = k.gsub(/-/,'_') - # converting orig keys into alias keys - # example: 'ksmeta' into 'ks_meta' - k2 = ALIASES.each_key.select{|ak| ALIASES[ak].include?(k1)}[0] || k1 - Astute.logger.debug("Key #{k} aliased with #{k2}") if k != k2 - k2 - end - - def valid_field?(k) - (FIELDS[fetch('what')]['fields'].include?(k) or - (FIELDS[fetch('what')]['special'] or []).include?(k)) - end - - def valid_interface_field?(k) - (FIELDS[fetch('what')]['interfaces_fields'] or []).include?(k) - end - - def cobblerized_interfaces - interfaces = {} - fetch('interfaces').each do |iname, ihash| - ihash.each do |iopt, ivalue| - iopt = aliased(iopt) - if interfaces.has_key?("#{iopt}-#{iname}") - raise CobblerError, "Wrong interface cobbler data: #{iopt} is duplicated" - end - unless valid_interface_field?(iopt) - Astute.logger.debug("Interface key #{iopt} is not valid. Skipping") - next - end - Astute.logger.debug("Defining interfaces[#{iopt}-#{iname}] = #{ivalue}") - interfaces["#{iopt}-#{iname}"] = ivalue - end - end - interfaces - end - - def cobblerized_interfaces_extra - # here we just want to convert interfaces_extra into ks_meta - interfaces_extra_str = "" - fetch('interfaces_extra').each do |iname, iextra| - iextra.each do |k, v| - Astute.logger.debug("Adding into ks_meta interface_extra_#{iname}_#{k}=#{v}") - interfaces_extra_str << " interface_extra_#{iname}_#{k}=#{v}" - end - end - interfaces_extra_str - end - end - - end -end diff --git a/lib/astute/cobbler_manager.rb b/lib/astute/cobbler_manager.rb deleted file mode 100644 index bd69333d..00000000 --- a/lib/astute/cobbler_manager.rb +++ /dev/null @@ -1,260 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - class CobblerManager - def initialize(engine_attrs, reporter) - raise "Settings for Cobbler must be set" if engine_attrs.blank? - - begin - Astute.logger.debug("Trying to instantiate cobbler engine:"\ - "\n#{engine_attrs.pretty_inspect}") - @engine = Astute::Provision::Cobbler.new(engine_attrs) - rescue => e - Astute.logger.error("Error occured during cobbler initializing") - reporter.report({ - 'status' => 'error', - 'error' => 'Cobbler can not be initialized', - 'progress' => 100 - }) - raise e - end - end - - def add_nodes(nodes) - nodes.each do |node| - cobbler_name = node['slave_name'] - begin - Astute.logger.info("Adding #{cobbler_name} into cobbler") - @engine.item_from_hash('system', cobbler_name, node, :item_preremove => true) - rescue RuntimeError => e - Astute.logger.error("Error occured while adding system #{cobbler_name} to cobbler") - raise e - end - end - ensure - sync - end - - def remove_nodes(nodes, retries=3, interval=2) - nodes_to_remove = nodes.map {|node| node['slave_name']}.uniq - Astute.logger.info("Total list of nodes to remove: #{nodes_to_remove.pretty_inspect}") - retries.times do - nodes_to_remove.select! do |name| - unless @engine.system_exists?(name) - Astute.logger.info("System is not in cobbler: #{name}") - next - else - Astute.logger.info("Trying to remove system from cobbler: #{name}") - @engine.remove_system(name) - end - @engine.system_exists?(name) - end - return if nodes_to_remove.empty? - sleep(interval) if interval > 0 - end - ensure - Astute.logger.error("Cannot remove nodes from cobbler: #{nodes_to_remove.pretty_inspect}") if nodes_to_remove.present? - sync - end - - def reboot_nodes(nodes) - splay = calculate_splay_between_nodes(nodes) - nodes.inject({}) do |reboot_events, node| - cobbler_name = node['slave_name'] - Astute.logger.debug("Trying to reboot node: #{cobbler_name}") - - #Sleep up to splay seconds before reboot for load balancing - sleep splay - reboot_events.merge(cobbler_name => @engine.power_reboot(cobbler_name)) - end - end - - def check_reboot_nodes(reboot_events) - begin - Astute.logger.debug("Waiting for reboot to be complete: nodes: #{reboot_events.keys}") - failed_nodes = [] - Timeout::timeout(Astute.config.reboot_timeout) do - while not reboot_events.empty? - reboot_events.each do |node_name, event_id| - event_status = @engine.event_status(event_id) - Astute.logger.debug("Reboot task status: node: #{node_name} status: #{event_status}") - if event_status[2] =~ /^failed$/ - Astute.logger.error("Error occured while trying to reboot: #{node_name}") - reboot_events.delete(node_name) - failed_nodes << node_name - elsif event_status[2] =~ /^complete$/ - Astute.logger.debug("Successfully rebooted: #{node_name}") - reboot_events.delete(node_name) - end - end - sleep(5) - end - end - rescue Timeout::Error => e - Astute.logger.debug("Reboot timeout: reboot tasks not completed for nodes #{reboot_events.keys}") - raise e - end - failed_nodes - end - - def edit_nodes(nodes, data) - nodes.each do |node| - cobbler_name = node['slave_name'] - begin - Astute.logger.info("Changing cobbler system #{cobbler_name}") - @engine.item_from_hash('system', cobbler_name, data, :item_preremove => false) - rescue RuntimeError => e - Astute.logger.error("Error occured while changing cobbler system #{cobbler_name}") - raise e - end - end - ensure - sync - end - - def netboot_nodes(nodes, state) - nodes.each do |node| - cobbler_name = node['slave_name'] - begin - Astute.logger.info("Changing node netboot state #{cobbler_name}") - @engine.netboot(cobbler_name, state) - rescue RuntimeError => e - Astute.logger.error("Error while changing node netboot state #{cobbler_name}") - raise e - end - end - ensure - sync - end - - def get_existent_nodes(nodes) - existent_nodes = [] - nodes.each do |node| - cobbler_name = node['slave_name'] - if @engine.system_exists?(cobbler_name) - Astute.logger.info("Update #{cobbler_name}, node already exists in cobbler") - existent_nodes << node - end - end - existent_nodes - end - - def existent_node?(cobbler_name) - return false unless @engine.system_exists?(cobbler_name) - Astute.logger.info("Node #{cobbler_name} already exists in cobbler") - true - end - - def edit_node(cobbler_name, data) - begin - Astute.logger.info("Changing cobbler system #{cobbler_name}") - @engine.item_from_hash('system', cobbler_name, data, :item_preremove => false) - rescue RuntimeError => e - Astute.logger.error("Error occured while changing cobbler system #{cobbler_name}") - raise e - end - ensure - sync - end - - def netboot_node(cobbler_name, state) - begin - Astute.logger.info("Changing node netboot state #{cobbler_name}") - @engine.netboot(cobbler_name, state) - rescue RuntimeError => e - Astute.logger.error("Error while changing node netboot state #{cobbler_name}") - raise e - end - ensure - sync - end - - def remove_node(cobbler_name, retries=3, interval=2) - Astute.logger.info("Node to remove: #{cobbler_name}") - retries.times do - unless @engine.system_exists?(cobbler_name) - Astute.logger.info("System is not in cobbler: #{cobbler_name}") - return - else - Astute.logger.info("Trying to remove system from cobbler: #{cobbler_name}") - @engine.remove_system(cobbler_name) - end - return unless @engine.system_exists?(cobbler_name) - sleep(interval) if interval > 0 - end - ensure - Astute.logger.error("Cannot remove node #{cobbler_name} from cobbler") if @engine.system_exists?(cobbler_name) - sync - end - - def add_node(node) - cobbler_name = node['slave_name'] - begin - Astute.logger.info("Adding #{cobbler_name} into cobbler") - @engine.item_from_hash('system', cobbler_name, node, :item_preremove => true) - rescue RuntimeError => e - Astute.logger.error("Error occured while adding system #{cobbler_name} to cobbler") - raise e - end - ensure - sync - end - - def node_mac_duplicate_names(node) - mac_duplicate_names = [] - Astute.logger.info("Trying to find MAC duplicates for node #{node['slave_name']}") - if node['interfaces'] - node['interfaces'].each do |iname, ihash| - if ihash['mac_address'] - Astute.logger.info("Trying to find system with MAC: #{ihash['mac_address']}") - found_node = @engine.system_by_mac(ihash['mac_address']) - mac_duplicate_names << found_node['name'] if found_node - end - end - end - mac_duplicate_names.uniq - end - - def get_mac_duplicate_names(nodes) - mac_duplicate_names = [] - nodes.each do |node| - Astute.logger.info("Trying to find MAC duplicates for node #{node['slave_name']}") - if node['interfaces'] - node['interfaces'].each do |iname, ihash| - if ihash['mac_address'] - Astute.logger.info("Trying to find system with MAC: #{ihash['mac_address']}") - found_node = @engine.system_by_mac(ihash['mac_address']) - mac_duplicate_names << found_node['name'] if found_node - end - end - end - end - mac_duplicate_names.uniq - end - - def sync - Astute.logger.debug("Cobbler syncing") - @engine.sync - end - - private - - def calculate_splay_between_nodes(nodes) - # For 20 nodes, 120 iops and 180 splay_factor splay will be 1.5749 - (nodes.size + 1) / Astute.config.iops.to_f * Astute.config.splay_factor / nodes.size - end - - end -end diff --git a/lib/astute/common/reboot.rb b/lib/astute/common/reboot.rb deleted file mode 100644 index 834de999..00000000 --- a/lib/astute/common/reboot.rb +++ /dev/null @@ -1,38 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -module Astute - module RebootCommand - # Reboot immediately if we're in a bootstrap. Wait until system boots - # completely in case of provisioned node. We check it by existense - # of /run/cloud-init/status.json (it's located on tmpfs, so no stale - # file from previous boot can be found). If this file hasn't appeared - # after 60 seconds - reboot as is. - CMD = <<-REBOOT_COMMAND - if [ $(hostname) = bootstrap ]; then - reboot; - fi; - t=0; - while true; do - if [ -f /run/cloud-init/status.json -o $t -gt 60 ]; then - reboot; - else - sleep 1; - t=$((t + 1)); - fi; - done - REBOOT_COMMAND - end -end diff --git a/lib/astute/common_actions/pacemaker.rb b/lib/astute/common_actions/pacemaker.rb deleted file mode 100644 index d4255e6d..00000000 --- a/lib/astute/common_actions/pacemaker.rb +++ /dev/null @@ -1,90 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - class Pacemaker - - def self.commands(behavior, deployment_info) - return [] if deployment_info.first['deployment_mode'] !~ /ha/i - - controller_nodes = deployment_info.select{ |n| n['role'] =~ /controller/i }.map{ |n| n['uid'] } - return [] if controller_nodes.empty? - - ha_size = deployment_info.first['nodes'].count { |n| - ['controller', 'primary-controller'].include? n['role'] - } - - action = if ha_size < 3 - case behavior - when 'stop' then 'stop' - when 'start' then 'start' - end - else - case behavior - when 'stop' then 'ban' - when 'start' then 'clear' - end - end - - cmds = pacemaker_services_list(deployment_info).inject([]) do |cmds, pacemaker_service| - if ha_size < 3 - cmds << "crm resource #{action} #{pacemaker_service} && sleep 3" - else - cmds << "pcs resource #{action} #{pacemaker_service} `crm_node -n` && sleep 3" - end - end - - cmds - end - - private - - def self.pacemaker_services_list(deployment_info) - services_list = [] - #Heat engine service is present everywhere - services_list += heat_service_name(deployment_info) - - if deployment_info.first['quantum'] - services_list << 'p_neutron-openvswitch-agent' - services_list << 'p_neutron-metadata-agent' - services_list << 'p_neutron-l3-agent' - services_list << 'p_neutron-dhcp-agent' - end - - if deployment_info.first.fetch('ceilometer', {})['enabled'] - services_list += ceilometer_service_names(deployment_info) - end - return services_list - end - - def self.ceilometer_service_names(deployment_info) - case deployment_info.first['cobbler']['profile'] - when /centos/i - ['p_openstack-ceilometer-compute','p_openstack-ceilometer-central'] - when /ubuntu/i - ['p_ceilometer-agent-central','p_ceilometer-agent-compute'] - end - end - - def self.heat_service_name(deployment_info) - case deployment_info.first['cobbler']['profile'] - when /centos/i - ['openstack-heat-engine', 'p_openstack-heat-engine'] - when /ubuntu/i - ['heat-engine', 'p_heat-engine'] - end - end - - end #class -end diff --git a/lib/astute/config.rb b/lib/astute/config.rb deleted file mode 100644 index b7ff49ce..00000000 --- a/lib/astute/config.rb +++ /dev/null @@ -1,130 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -require 'symboltable' -require 'singleton' - -module Astute - class ConfigError < StandardError; end - class UnknownOptionError < ConfigError - attr_reader :name - - def initialize(name) - super("Unknown config option #{name}") - @name = name - end - end - - class MyConfig - include Singleton - attr_reader :configtable - - def initialize - @configtable = SymbolTable.new - end - end - - class ParseError < ConfigError - attr_reader :line - - def initialize(message, line) - super(message) - @line = line - end - end - - def self.config - config = MyConfig.instance.configtable - config.update(default_config) if config.empty? - return config - end - - def self.default_config - conf = {} - - # Library settings - conf[:puppet_timeout] = 90 * 60 # maximum time it waits for single puppet run - conf[:puppet_deploy_interval] = 2 # sleep for ## sec, then check puppet status again - conf[:puppet_fade_timeout] = 120 # how long it can take for puppet to exit after dumping to last_run_summary - conf[:puppet_start_timeout] = 10 # how long it can take for puppet to start - conf[:puppet_start_interval] = 2 # interval between attemps to start puppet - conf[:puppet_retries] = 2 # how many times astute will try to run puppet - conf[:upload_retries] = 3 # how many times astute will try to run upload task - conf[:puppet_succeed_retries] = 0 # use this to rerun a puppet task again if it was successful (idempotency) - conf[:puppet_undefined_retries] = 3 # how many times astute will try to get actual status of node before fail - conf[:puppet_module_path] = '/etc/puppet/modules' # where we should find basic modules for puppet - conf[:puppet_noop_run] = false # enable Puppet noop run - conf[:mc_retries] = 10 # MClient tries to call mcagent before failure - conf[:mc_retry_interval] = 1 # MClient sleeps for ## sec between retries - conf[:puppet_fade_interval] = 30 # retry every ## seconds to check puppet state if it was running - conf[:provisioning_timeout] = 90 * 60 # timeout for booting target OS in provision - conf[:reboot_timeout] = 900 # how long it can take for node to reboot - conf[:dump_timeout] = 3600 # maximum time it waits for the dump (meaningles to be larger - # than the specified in timeout of execute_shell_command mcagent - conf[:shell_retries] = 2 # default retries for shell task - conf[:shell_interval] = 2 # default interval for shell task - conf[:shell_timeout] = 300 # default timeout for shell task - conf[:upload_timeout] = 60 # default timeout for upload task - conf[:shell_cwd] = '/' # default cwd for shell task - conf[:stop_timeout] = 600 # how long it can take for stop - conf[:rsync_options] = '-c -r --delete -l' # default rsync options - conf[:keys_src_dir] = '/var/lib/fuel/keys' # path where ssh and openssl keys will be created - conf[:puppet_ssh_keys] = [ - 'neutron', - 'nova', - 'ceph', - 'mysql', - ] # name of ssh keys what will be generated and uploaded to all nodes before deploy - conf[:puppet_keys] = [ - 'mongodb' - ] # name of keys what will be generated and uploaded to all nodes before deploy - conf[:keys_dst_dir] = '/var/lib/astute' # folder where keys will be uploaded. Warning! - conf[:max_nodes_per_call] = 50 # how many nodes to deploy simultaneously - conf[:max_nodes_to_provision] = 50 # how many nodes to provision simultaneously - conf[:ssh_retry_timeout] = 30 # SSH sleeps for ## sec between retries - - conf[:max_nodes_per_remove_call] = 10 # how many nodes to remove in one call - conf[:nodes_remove_interval] = 10 # sleeps for ## sec between remove calls - conf[:max_nodes_net_validation] = 10 # how many nodes will send in parallel test packets - # during network verification - conf[:dhcp_repeat] = 3 # Dhcp discover will be sended 3 times - - conf[:iops] = 120 # Default IOPS master node IOPS performance - conf[:splay_factor] = 180 # Formula: 20(amount of nodes nodes) div 120(iops) = 0.1667 - # 0.1667 / 180 = 30 sec. Delay between reboot command for first - # and last node in group should be 30 sec. Empirical observation. - # Please increase if nodes could not provisioning - conf[:agent_nodiscover_file] = '/etc/nailgun-agent/nodiscover' # if this file in place, nailgun-agent will do nothing - conf[:bootstrap_profile] = 'ubuntu_bootstrap' # use the Ubuntu based bootstrap by default - conf[:graph_dot_dir] = "/var/lib/astute/graphs" # default dir patch for debug graph file - conf[:enable_graph_file] = true # enable debug graph records to file - conf[:puppet_raw_report] = false # enable puppet detailed report - conf[:task_poll_delay] = 1 # sleeps for ## sec between task status calls - - # Server settings - conf[:broker_host] = 'localhost' - conf[:broker_port] = 5672 - conf[:broker_rest_api_port] = 15672 - conf[:broker_username] = 'mcollective' - conf[:broker_password] = 'mcollective' - - conf[:broker_service_exchange] = 'naily_service' - conf[:broker_queue] = 'naily' - conf[:broker_publisher_queue] = 'nailgun' - conf[:broker_exchange] = 'nailgun' - - conf - end -end diff --git a/lib/astute/context.rb b/lib/astute/context.rb deleted file mode 100644 index e8ece778..00000000 --- a/lib/astute/context.rb +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -module Astute - class Context - attr_accessor :reporter, :deploy_log_parser - attr_reader :task_id, :status - - def initialize(task_id, reporter, deploy_log_parser=nil) - @task_id = task_id - @reporter = reporter - @status = {} - @deploy_log_parser = deploy_log_parser - end - - def report_and_update_status(data) - if data['nodes'] - data['nodes'].each do |node| - #TODO(vsharshov): save node role to hash - @status.merge! node['uid'] => node['status'] if node['uid'] && node['status'] - end - end - reporter.report(data) - end - - def report(msg) - @reporter.report msg - end - - end -end diff --git a/lib/astute/deploy_actions.rb b/lib/astute/deploy_actions.rb deleted file mode 100644 index acf6dc50..00000000 --- a/lib/astute/deploy_actions.rb +++ /dev/null @@ -1,215 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - class DeployActions - - def initialize(deployment_info, context) - @deployment_info = deployment_info - @context = context - @actions = [] - end - - def process - @actions.each { |action| action.process(@deployment_info, @context) } - end - end - - class PreDeployActions < DeployActions - def initialize(deployment_info, context) - super - @actions = [ - ConnectFacts.new - ] - end - end - - class GranularPreDeployActions < DeployActions - def initialize(deployment_info, context) - super - @actions = [ - ConnectFacts.new - ] - end - end - - class PostDeployActions < DeployActions - def initialize(deployment_info, context) - super - @actions = [ - PostPatchingHa.new - ] - end - end - - class GranularPostDeployActions < DeployActions - def initialize(deployment_info, context) - super - @actions = [ - PostPatchingHa.new - ] - end - end - - class PreNodeActions - - def initialize(context) - @node_uids = [] - @context = context - @actions = [ - PrePatchingHa.new, - StopOSTServices.new, - PrePatching.new - ] - end - - def process(deployment_info) - nodes_to_process = deployment_info.select { |n| !@node_uids.include?(n['uid']) } - return if nodes_to_process.empty? - - @actions.each { |action| action.process(nodes_to_process, @context) } - @node_uids += nodes_to_process.map { |n| n['uid'] } - end - end - - class GranularPreNodeActions - - def initialize(context) - @node_uids = [] - @context = context - @actions = [ - PrePatchingHa.new, - StopOSTServices.new, - PrePatching.new - ] - end - - def process(deployment_info) - nodes_to_process = deployment_info.select { |n| !@node_uids.include?(n['uid']) } - return if nodes_to_process.empty? - - @actions.each { |action| action.process(nodes_to_process, @context) } - @node_uids += nodes_to_process.map { |n| n['uid'] } - end - end - - class PreDeploymentActions < DeployActions - - def initialize(deployment_info, context) - super - @actions = [ - SyncTime.new, - GenerateSshKeys.new, - GenerateKeys.new, - UploadSshKeys.new, - UploadKeys.new, - UpdateRepoSources.new, - SyncPuppetStuff.new, - SyncTasks.new, - EnablePuppetDeploy.new, - UploadFacts.new, - InitialConnectFacts.new - ] - end - - end - - class GranularPreDeploymentActions < DeployActions - - def initialize(deployment_info, context) - super - @actions = [ - EnablePuppetDeploy.new, - UploadFacts.new, - InitialConnectFacts.new - ] - end - - end - - class TaskPreDeploymentActions < DeployActions - - def initialize(deployment_info, context) - super - @actions = [ - EnablePuppetDeploy.new, - UploadFacts.new, - InitialConnectFacts.new - ] - end - - end - - class PostDeploymentActions < DeployActions - - def initialize(deployment_info, context) - super - @actions = [ - UpdateNoQuorumPolicy.new, - UploadCirrosImage.new, - RestartRadosgw.new, - UpdateClusterHostsInfo.new - ] - - end - end - - class DeployAction - - def process(deployment_info, context) - raise "Should be implemented!" - end - - def run_shell_command(context, node_uids, cmd, timeout=60) - shell = MClient.new(context, - 'execute_shell_command', - node_uids, - check_result=true, - timeout=timeout, - retries=1) - - #TODO: return result for all nodes not only for first - response = shell.execute(:cmd => cmd).first - Astute.logger.debug("#{context.task_id}: cmd: #{cmd} - stdout: #{response[:data][:stdout]} - stderr: #{response[:data][:stderr]} - exit code: #{response[:data][:exit_code]}") - response - rescue MClientTimeout, MClientError => e - Astute.logger.error("#{context.task_id}: cmd: #{cmd} - mcollective error: #{e.message}") - {:data => {}} - end - - def only_uniq_nodes(nodes) - nodes.uniq { |n| n['uid'] } - end - - # Prevent high load for tasks - def perform_with_limit(nodes, &block) - nodes.each_slice(Astute.config[:max_nodes_per_call]) do |part| - block.call(part) - end - end - - end # DeployAction - - class PreDeployAction < DeployAction; end - class PostDeployAction < DeployAction; end - class PreNodeAction < DeployAction; end - class PostNodeAction < DeployAction; end - class PreDeploymentAction < DeployAction; end - class PostDeploymentAction < DeployAction; end - -end diff --git a/lib/astute/deployment_engine.rb b/lib/astute/deployment_engine.rb deleted file mode 100644 index 9946f0db..00000000 --- a/lib/astute/deployment_engine.rb +++ /dev/null @@ -1,269 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - class DeploymentEngine - - def initialize(context) - if self.class.superclass.name == 'Object' - raise "Instantiation of this superclass is not allowed. Please subclass from #{self.class.name}." - end - @ctx = context - end - - def deploy(deployment_info, pre_deployment=[], post_deployment=[]) - raise "Deployment info are not provided!" if deployment_info.blank? - - deployment_info, pre_deployment, post_deployment = remove_failed_nodes(deployment_info, - pre_deployment, - post_deployment) - - @ctx.deploy_log_parser.deploy_type = deployment_info.first['deployment_mode'] - Astute.logger.info "Deployment mode #{@ctx.deploy_log_parser.deploy_type}" - - begin - pre_deployment_actions(deployment_info, pre_deployment) - rescue => e - Astute.logger.error("Unexpected error #{e.message} traceback #{e.format_backtrace}") - raise e - end - - failed = [] - # Sort by priority (the lower the number, the higher the priority) - # and send groups to deploy - deployment_info.sort_by { |f| f['priority'] }.group_by{ |f| f['priority'] }.each do |_, nodes| - # Prevent attempts to run several deploy on a single node. - # This is possible because one node - # can perform multiple roles. - group_by_uniq_values(nodes).each do |nodes_group| - # Prevent deploy too many nodes at once - nodes_group.each_slice(Astute.config[:max_nodes_per_call]) do |part| - - # for each chunk run group deployment pipeline - - # create links to the astute.yaml - pre_deploy_actions(part) - - # run group deployment - deploy_piece(part) - - failed = critical_failed_nodes(part) - - # if any of the node are critical and failed - # raise an error and mark all other nodes as error - if failed.any? - # TODO(dshulyak) maybe we should print all failed tasks for this nodes - # but i am not sure how it will look like - raise Astute::DeploymentEngineError, "Deployment failed on nodes #{failed.join(', ')}" - end - end - end - end - - # Post deployment hooks - post_deployment_actions(deployment_info, post_deployment) - end - - protected - - def validate_nodes(nodes) - return true unless nodes.empty? - - Astute.logger.info "#{@ctx.task_id}: Nodes to deploy are not provided. Do nothing." - false - end - - private - - # Transform nodes source array to array of nodes arrays where subarray - # contain only uniq elements from source - # Source: [ - # {'uid' => 1, 'role' => 'cinder'}, - # {'uid' => 2, 'role' => 'cinder'}, - # {'uid' => 2, 'role' => 'compute'}] - # Result: [ - # [{'uid' =>1, 'role' => 'cinder'}, - # {'uid' => 2, 'role' => 'cinder'}], - # [{'uid' => 2, 'role' => 'compute'}]] - def group_by_uniq_values(nodes_array) - nodes_array = deep_copy(nodes_array) - sub_arrays = [] - while !nodes_array.empty? - sub_arrays << uniq_nodes(nodes_array) - uniq_nodes(nodes_array).clone.each {|e| nodes_array.slice!(nodes_array.index(e)) } - end - sub_arrays - end - - def uniq_nodes(nodes_array) - nodes_array.inject([]) { |result, node| result << node unless include_node?(result, node); result } - end - - def include_node?(nodes_array, node) - nodes_array.find { |n| node['uid'] == n['uid'] } - end - - def nodes_status(nodes, status, data_to_merge) - { - 'nodes' => nodes.map do |n| - {'uid' => n['uid'], 'status' => status, 'role' => n['role']}.merge(data_to_merge) - end - } - end - - def critical_failed_nodes(part) - part.select{ |n| n['fail_if_error'] }.map{ |n| n['uid'] } & - @ctx.status.select { |k, v| v == 'error' }.keys - end - - def pre_deployment_actions(deployment_info, pre_deployment) - raise "Should be implemented" - end - - def pre_node_actions(part) - raise "Should be implemented" - end - - def pre_deploy_actions(part) - raise "Should be implemented" - end - - def post_deploy_actions(part) - raise "Should be implemented" - end - - def post_deployment_actions(deployment_info, post_deployment) - raise "Should be implemented" - end - - # Removes nodes which failed to provision - def remove_failed_nodes(deployment_info, pre_deployment, post_deployment) - uids = get_uids_from_deployment_info deployment_info - required_nodes = deployment_info.select { |node| node["fail_if_error"] } - required_uids = required_nodes.map { |node| node["uid"]} - - available_uids = detect_available_nodes(uids) - offline_uids = uids - available_uids - if offline_uids.present? - # set status for all failed nodes to error - nodes = (uids - available_uids).map do |uid| - {'uid' => uid, - 'status' => 'error', - 'error_type' => 'provision', - # Avoid deployment reporter param validation - 'role' => 'hook', - 'error_msg' => 'Node is not ready for deployment: mcollective has not answered' - } - end - - @ctx.report_and_update_status('nodes' => nodes, 'error' => 'Node is not ready for deployment') - - # check if all required nodes are online - # if not, raise error - missing_required = required_uids - available_uids - if missing_required.present? - error_message = "Critical nodes are not available for deployment: #{missing_required}" - raise Astute::DeploymentEngineError, error_message - end - end - - return remove_offline_nodes( - uids, - available_uids, - pre_deployment, - deployment_info, - post_deployment, - offline_uids) - end - - def remove_offline_nodes(uids, available_uids, pre_deployment, deployment_info, post_deployment, offline_uids) - if offline_uids.blank? - return [deployment_info, pre_deployment, post_deployment] - end - - Astute.logger.info "Removing nodes which failed to provision: #{offline_uids}" - deployment_info = cleanup_nodes_block(deployment_info, offline_uids) - deployment_info = deployment_info.select { |node| available_uids.include? node['uid'] } - - available_uids += ["master"] - pre_deployment.each do |task| - task['uids'] = task['uids'].select { |uid| available_uids.include? uid } - end - post_deployment.each do |task| - task['uids'] = task['uids'].select { |uid| available_uids.include? uid } - end - - [pre_deployment, post_deployment].each do |deployment_task| - deployment_task.select! do |task| - if task['uids'].present? - true - else - Astute.logger.info "Task(hook) was deleted because there is no " \ - "node where it should be run \n#{task.to_yaml}" - false - end - end - end - - [deployment_info, pre_deployment, post_deployment] - end - - def cleanup_nodes_block(deployment_info, offline_uids) - return deployment_info if offline_uids.blank? - - nodes = deployment_info.first['nodes'] - - # In case of deploy in already existing cluster in nodes block - # we will have all cluster nodes. We should remove only missing - # nodes instead of stay only available. - # Example: deploy 3 nodes, after it deploy 2 nodes. - # In 1 of 2 seconds nodes missing, in nodes block we should - # contain only 4 nodes. - nodes_wthout_missing = nodes.select { |node| !offline_uids.include?(node['uid']) } - deployment_info.each { |node| node['nodes'] = nodes_wthout_missing } - deployment_info - end - - def detect_available_nodes(uids) - all_uids = uids.clone - available_uids = [] - - # In case of big amount of nodes we should do several calls to be sure - # about node status - Astute.config[:mc_retries].times.each do - systemtype = Astute::MClient.new(@ctx, "systemtype", all_uids, check_result=false, 10) - available_nodes = systemtype.get_type.select do |node| - node.results[:data][:node_type].chomp == "target" - end - - available_uids += available_nodes.map { |node| node.results[:sender] } - all_uids -= available_uids - break if all_uids.empty? - - sleep Astute.config[:mc_retry_interval] - end - - available_uids - end - - def get_uids_from_deployment_info(deployment_info) - top_level_uids = deployment_info.map{ |node| node["uid"] } - - inside_uids = deployment_info.inject([]) do |uids, node| - uids += node.fetch('nodes', []).map{ |n| n['uid'] } - end - top_level_uids | inside_uids - end - end -end diff --git a/lib/astute/deployment_engine/granular_deployment.rb b/lib/astute/deployment_engine/granular_deployment.rb deleted file mode 100644 index 86089434..00000000 --- a/lib/astute/deployment_engine/granular_deployment.rb +++ /dev/null @@ -1,271 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -class Astute::DeploymentEngine::GranularDeployment < Astute::DeploymentEngine - - NAILGUN_STATUS = ['ready', 'error', 'deploying'] - - def deploy_piece(nodes, retries=1) - report_ready_for_nodes_without_tasks(nodes) - nodes = filter_nodes_with_tasks(nodes) - return false unless validate_nodes(nodes) - - @ctx.reporter.report(nodes_status(nodes, 'deploying', {'progress' => 0})) - log_preparation(nodes) - - Astute.logger.info "#{@ctx.task_id}: Starting deployment" - - @running_tasks = {} - @start_times = {} - @nodes_roles = nodes.inject({}) { |h, n| h.merge({n['uid'] => n['role']}) } - @nodes_by_uid = nodes.inject({}) { |h, n| h.merge({ n['uid'] => n }) } - @puppet_debug = nodes.first.fetch('puppet_debug', true) - - begin - @task_manager = Astute::TaskManager.new(nodes) - @hook_context = Astute::Context.new( - @ctx.task_id, - HookReporter.new, - Astute::LogParser::NoParsing.new - ) - deploy_nodes(nodes) - rescue => e - # We should fail all nodes in case of post deployment - # process. In other case they will not sending back - # for redeploy - report_nodes = nodes.uniq{ |n| n['uid'] }.map do |node| - { 'uid' => node['uid'], - 'status' => 'error', - 'role' => node['role'], - 'error_type' => 'deploy' - } - end - - @ctx.report_and_update_status('nodes' => report_nodes) - raise e - end - - Astute.logger.info "#{@ctx.task_id}: Finished deployment of nodes" \ - " => roles: #{@nodes_roles.pretty_inspect}" - end - - def puppet_task(node_id, task) - # Use fake reporter because of logic. We need to handle report here - Astute::PuppetTask.new( - @hook_context, - @nodes_by_uid[node_id], # Use single node uid instead of task['uids'] - { - :retries => task['parameters']['retries'], - :puppet_manifest => task['parameters']['puppet_manifest'], - :puppet_modules => task['parameters']['puppet_modules'], - :cwd => task['parameters']['cwd'], - :timeout => task['parameters']['timeout'], - :puppet_debug => @puppet_debug - } - ) - end - - def run_task(node_id, task) - @start_times[node_id] = { - 'time_start' => Time.now.to_i, - 'task_name' => task_name(task) - } - - Astute.logger.info "#{@ctx.task_id}: run task '#{task.to_yaml}' on " \ - "node #{node_id}" - @running_tasks[node_id] = puppet_task(node_id, task) - @running_tasks[node_id].run - end - - def check_status(node_id) - status = @running_tasks[node_id].status - if NAILGUN_STATUS.include? status - status - else - raise "Internal error. Unknown status '#{status}'" - end - end - - def deploy_nodes(nodes) - @task_manager.node_uids.each { |n| task = @task_manager.next_task(n) and run_task(n, task) } - - while @task_manager.task_in_queue? - nodes_to_report = [] - sleep Astute.config.puppet_deploy_interval - @task_manager.node_uids.each do |node_id| - if task = @task_manager.current_task(node_id) - case status = check_status(node_id) - when 'ready' - Astute.logger.info "Task '#{task}' on node uid=#{node_id} " \ - "ended successfully" - time_summary(node_id, status) - - new_task = @task_manager.next_task(node_id) - if new_task - run_task(node_id, new_task) - else - nodes_to_report << process_success_node(node_id, task) - end - when 'deploying' - progress_report = process_running_node(node_id, task, nodes) - nodes_to_report << progress_report if progress_report - when 'error' - Astute.logger.error "Task '#{task}' failed on node #{node_id}" - nodes_to_report << process_fail_node(node_id, task) - time_summary(node_id, status) - else - raise "Internal error. Known status '#{status}', but " \ - "handler not provided" - end - else - Astute.logger.debug "No more tasks provided for node #{node_id}" - end - end - - @ctx.report_and_update_status('nodes' => nodes_to_report) if nodes_to_report.present? - - break unless @task_manager.task_in_queue? - end - end - - def process_success_node(node_id, task) - Astute.logger.info "No more tasks provided for node #{node_id}. All node " \ - "tasks completed successfully" - { - "uid" => node_id, - 'status' => 'ready', - 'role' => @nodes_roles[node_id], - "progress" => 100, - 'task' => task - } - end - - def process_fail_node(node_id, task) - Astute.logger.error "No more tasks will be executed on the node #{node_id}" - @task_manager.delete_node(node_id) - { - 'uid' => node_id, - 'status' => 'error', - 'error_type' => 'deploy', - 'role' => @nodes_roles[node_id], - 'task' => task - } - end - - def process_running_node(node_id, task, nodes) - Astute.logger.debug "Task '#{task}' on node uid=#{node_id} deploying" - begin - # Pass nodes because logs calculation needs IP address of node, not just uid - nodes_progress = @ctx.deploy_log_parser.progress_calculate(Array(node_id), nodes) - if nodes_progress.present? - nodes_progress.map! { |x| x.merge!( - 'status' => 'deploying', - 'role' => @nodes_roles[x['uid']], - 'task' => task - ) } - nodes_progress.first - else - nil - end - rescue => e - Astute.logger.warn "Some error occurred when parse logs for nodes progress: #{e.message}, "\ - "trace: #{e.format_backtrace}" - nil - end - end - - def log_preparation(nodes) - @ctx.deploy_log_parser.prepare(nodes) - rescue => e - Astute.logger.warn "Some error occurred when prepare LogParser: " \ - "#{e.message}, trace: #{e.format_backtrace}" - end - - # If node doesn't have tasks, it means that node - # is ready, because it doesn't require deployment - def report_ready_for_nodes_without_tasks(nodes) - nodes_without_tasks = filter_nodes_without_tasks(nodes) - @ctx.reporter.report(nodes_status(nodes_without_tasks, 'ready', {'progress' => 100})) - end - - def filter_nodes_with_tasks(nodes) - nodes.select { |n| node_with_tasks?(n) } - end - - def filter_nodes_without_tasks(nodes) - nodes.select { |n| !node_with_tasks?(n) } - end - - def node_with_tasks?(node) - node['tasks'].present? - end - - # Pre/post hooks - def pre_deployment_actions(deployment_info, pre_deployment) - Astute::GranularPreDeploymentActions.new(deployment_info, @ctx).process - Astute::NailgunHooks.new(pre_deployment, @ctx).process - end - - def pre_node_actions(part) - @action ||= Astute::GranularPreNodeActions.new(@ctx) - @action.process(part) - end - - def pre_deploy_actions(part) - Astute::GranularPreDeployActions.new(part, @ctx).process - end - - def post_deploy_actions(part) - Astute::GranularPostDeployActions.new(part, @ctx).process - end - - def post_deployment_actions(deployment_info, post_deployment) - begin - Astute::NailgunHooks.new(post_deployment, @ctx).process - rescue => e - # We should fail all nodes in case of post deployment - # process. In other case they will not sending back - # for redeploy - nodes = deployment_info.uniq {|n| n['uid']}.map do |node| - { 'uid' => node['uid'], - 'status' => 'error', - 'role' => 'hook', - 'error_type' => 'deploy', - } - end - @ctx.report_and_update_status('nodes' => nodes) - raise e - end - end - - def time_summary(node_id, status) - return unless @start_times.fetch(node_id, {}).fetch('time_start', nil) - amount_time = (Time.now.to_i - @start_times[node_id]['time_start']).to_i - wasted_time = Time.at(amount_time).utc.strftime("%H:%M:%S") - Astute.logger.debug("Task time summary:" \ - " #{@start_times[node_id]['task_name']} with status" \ - " #{status.to_s} on node #{node_id} took #{wasted_time}") - end - - def task_name(task) - task['id'] || task['diagnostic_name'] || task['type'] - end - - class HookReporter - def report(msg) - Astute.logger.debug msg - end - end - -end diff --git a/lib/astute/dump.rb b/lib/astute/dump.rb deleted file mode 100644 index 57d11be1..00000000 --- a/lib/astute/dump.rb +++ /dev/null @@ -1,86 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -module Astute - module Dump - def self.dump_environment(ctx, settings) - shell = MClient.new( - ctx, - 'execute_shell_command', - ['master'], - check_result=true, - settings['timeout'] || Astute.config.dump_timeout, - retries=0, - enable_result_logging=false - ) - - begin - log_file = "/var/log/timmy.log" - snapshot = File.basename(settings['target']) - if settings['timestamp'] - snapshot = DateTime.now.strftime("#{snapshot}-%Y-%m-%d_%H-%M-%S") - end - base_dir = File.dirname(settings['target']) - dest_dir = File.join(base_dir, snapshot) - dest_file = File.join(dest_dir, "config.tar.gz") - token = settings['auth-token'] - dump_cmd = "mkdir -p #{dest_dir} && "\ - "timmy --logs --days 3 --dest-file #{dest_file}"\ - " --fuel-token #{token} --log-file #{log_file} && "\ - "tar --directory=#{base_dir} -cf #{dest_dir}.tar #{snapshot} && "\ - "echo #{dest_dir}.tar > #{settings['lastdump']} && "\ - "rm -rf #{dest_dir}" - Astute.logger.debug("Try to execute command: #{dump_cmd}") - result = shell.execute(:cmd => dump_cmd).first.results - - Astute.logger.debug("#{ctx.task_id}: exit code: #{result[:data][:exit_code]}") - - if result[:data][:exit_code] == 0 - Astute.logger.info("#{ctx.task_id}: Snapshot is done.") - report_success(ctx, "#{dest_dir}.tar") - elsif result[:data][:exit_code] == 28 - Astute.logger.error("#{ctx.task_id}: Disk space for creating snapshot exceeded.") - report_error(ctx, "Timmy exit code: #{result[:data][:exit_code]}. Disk space for creating snapshot exceeded.") - elsif result[:data][:exit_code] == 100 - Astute.logger.error("#{ctx.task_id}: Not enough free space for logs. Decrease logs coefficient via CLI or config or free up space.") - report_error(ctx, "Timmy exit code: #{result[:data][:exit_code]}. Not enough free space for logs.") - else - Astute.logger.error("#{ctx.task_id}: Dump command returned non zero exit code. For details see #{log_file}") - report_error(ctx, "Timmy exit code: #{result[:data][:exit_code]}") - end - rescue Timeout::Error - msg = "Dump is timed out" - Astute.logger.error("#{ctx.task_id}: #{msg}") - report_error(ctx, msg) - rescue => e - msg = "Exception occured during dump task: message: #{e.message} \ -trace:\n#{e.backtrace.pretty_inspect}" - Astute.logger.error("#{ctx.task_id}: #{msg}") - report_error(ctx, msg) - end - end - - def self.report_success(ctx, msg=nil) - success_msg = {'status' => 'ready', 'progress' => 100} - success_msg.merge!({'msg' => msg}) if msg - ctx.reporter.report(success_msg) - end - - def self.report_error(ctx, msg) - ctx.reporter.report({'status' => 'error', 'error' => msg, 'progress' => 100}) - end - - end -end diff --git a/lib/astute/exceptions.rb b/lib/astute/exceptions.rb deleted file mode 100644 index e8b2d846..00000000 --- a/lib/astute/exceptions.rb +++ /dev/null @@ -1,36 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. -require 'timeout' - -module Astute - - # Base class for all errors - class AstuteError < StandardError; end - - # Provisioning log errors - class ParseProvisionLogsError < AstuteError; end - # Image provisioning errors - class FailedImageProvisionError < AstuteError; end - # Deployment engine error - class DeploymentEngineError < AstuteError; end - # MClient errors - class MClientError < AstuteError; end - # MClient timeout error - class MClientTimeout < Timeout::Error; end - # Task validation error - class TaskValidationError < AstuteError; end - # Status error - class StatusValidationError < AstuteError; end - -end diff --git a/lib/astute/ext/array.rb b/lib/astute/ext/array.rb deleted file mode 100644 index a7ed0764..00000000 --- a/lib/astute/ext/array.rb +++ /dev/null @@ -1,28 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -class Array - - def compact_blank - reject do |val| - case val - when Hash then val.compact_blank.blank? - when Array then val.map { |v| v.respond_to?(:compact_blank) ? v.compact_blank : v }.blank? - when String then val.blank? - else val.blank? - end - end - end -end diff --git a/lib/astute/ext/deep_copy.rb b/lib/astute/ext/deep_copy.rb deleted file mode 100644 index 2e805820..00000000 --- a/lib/astute/ext/deep_copy.rb +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -def deep_copy(data) - Marshal.load(Marshal.dump(data)) -end diff --git a/lib/astute/ext/exception.rb b/lib/astute/ext/exception.rb deleted file mode 100644 index 89492ef9..00000000 --- a/lib/astute/ext/exception.rb +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -class Exception - def format_backtrace - "\n" + backtrace.pretty_inspect - end -end diff --git a/lib/astute/ext/hash.rb b/lib/astute/ext/hash.rb deleted file mode 100644 index b5597571..00000000 --- a/lib/astute/ext/hash.rb +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -class Hash - - def absent_keys(array) - array.select { |key| self[key].blank? } - end - - def compact_blank - delete_if do |_key, val| - case val - when Hash then val.compact_blank.blank? - when Array then val.map { |v| v.respond_to?(:compact_blank) ? v.compact_blank : v }.blank? - when String then val.blank? - else val.blank? - end - end - end -end diff --git a/lib/astute/image_provision.rb b/lib/astute/image_provision.rb deleted file mode 100644 index e3a0cc30..00000000 --- a/lib/astute/image_provision.rb +++ /dev/null @@ -1,160 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -module Astute - module ImageProvision - - def self.provision(ctx, nodes) - failed_uids = [] - uids_to_provision, failed_uids = upload_provision(ctx, nodes) - run_provision(ctx, uids_to_provision, failed_uids) - rescue => e - msg = "Error while provisioning: message: #{e.message}" \ - " trace\n: #{e.format_backtrace}" - Astute.logger.error("#{ctx.task_id}: #{msg}") - report_error(ctx, msg) - failed_uids - end - - def self.upload_provision(ctx, nodes) - failed_uids = [] - nodes.each do |node| - succees = upload_provision_data(ctx, node) - next if succees - - failed_uids << node['uid'] - Astute.logger.error("#{ctx.task_id}: Upload provisioning data " \ - "failed on node #{node['uid']}. Provision on such node will " \ - "not start") - end - - uids_to_provision = nodes.select { |n| !failed_uids.include?(n['uid']) } - .map { |n| n['uid'] } - [uids_to_provision, failed_uids] - end - - def self.upload_provision_data(ctx, node) - Astute.logger.debug("#{ctx.task_id}: uploading provision " \ - "data on node #{node['uid']}: #{node.to_json}") - - upload_task = Astute::UploadFile.new( - generate_upload_provision_task(node), - ctx - ) - - upload_task.sync_run - end - - def self.generate_upload_provision_task(node) - { - "id" => 'upload_provision_data', - "node_id" => node['uid'], - "parameters" => { - "path" => '/tmp/provision.json', - "data" => node.to_json, - "user_owner" => 'root', - "group_owner" => 'root', - "overwrite" => true, - "timeout" => Astute.config.upload_timeout - } - } - end - - def self.run_provision(ctx, uids, failed_uids) - Astute.logger.debug("#{ctx.task_id}: running provision script: " \ - "#{uids.join(', ')}") - - failed_uids |= run_shell_task( - ctx, - uids, - 'flock -n /var/lock/provision.lock provision', - Astute.config.provisioning_timeout - ) - - failed_uids - end - - def self.report_error(ctx, msg) - ctx.reporter.report({ - 'status' => 'error', - 'error' => msg, - 'progress' => 100 - }) - end - - def self.reboot(ctx, node_ids, task_id="reboot_provisioned_nodes") - if node_ids.empty? - Astute.logger.warn("No nodes were sent to reboot for " \ - "task: #{task_id}") - return - end - - Astute::NailgunHooks.new( - [{ - "priority" => 100, - "type" => "reboot", - "fail_on_error" => false, - "id" => task_id, - "uids" => node_ids, - "parameters" => { - "timeout" => Astute.config.reboot_timeout - } - }], - ctx, - 'provision' - ).process - end - - def self.run_shell_task(ctx, node_uids, cmd, timeout=3600) - shell_tasks = node_uids.inject([]) do |tasks, node_id| - tasks << Shell.new(generate_shell_hook(node_id, cmd, timeout), ctx) - end - - shell_tasks.each(&:run) - - while shell_tasks.any? { |t| !t.finished? } do - shell_tasks.select { |t| !t.finished? }.each(&:status) - sleep Astute.config.task_poll_delay - end - - failed_uids = shell_tasks.select{ |t| t.failed? } - .inject([]) do |failed_nodes, task| - Astute.logger.error("#{ctx.task_id}: Provision command returned " \ - "non zero exit code on node: #{task.node_id}") - failed_nodes << task.node_id - end - - failed_uids - rescue => e - Astute.logger.error("#{ctx.task_id}: cmd: #{cmd} " \ - "error: #{e.message}, trace #{e.backtrace}") - node_uids - end - - def self.generate_shell_hook(node_id, cmd, timeout) - { - "node_id" => node_id, - "id" => "provision_#{node_id}", - "parameters" => { - "cmd" => cmd, - "cwd" => "/", - "timeout" => timeout, - "retries" => 0 - } - } - end - - end -end diff --git a/lib/astute/logparser.rb b/lib/astute/logparser.rb deleted file mode 100644 index 699119c8..00000000 --- a/lib/astute/logparser.rb +++ /dev/null @@ -1,261 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -require 'erb' - -module Astute - module LogParser - LOG_PORTION = 10000 - # Default values. Can be overrided by pattern_spec. - # E.g. pattern_spec = {'separator' => 'new_separator', ...} - PATH_PREFIX = '/var/log/remote/' - SEPARATOR = "SEPARATOR\n" - - class NoParsing - def initialize(*args) - end - - def method_missing(*args) - # We just eat the call if we don't want to deal with logs - end - - def progress_calculate(*args) - [] - end - end - - class DirSizeCalculation - attr_reader :nodes - - def initialize(nodes) - @nodes = nodes.map{|n| n.dup} - @nodes.each{|node| node[:path_items] = weight_reassignment(node[:path_items])} - end - - def deploy_type=(*args) - # Because we mimic the DeploymentParser, we should define all auxiliary method - # even they do nothing. - end - - def prepare(nodes) - # Because we mimic the DeploymentParser, we should define all auxiliary method - # even they do nothing. - end - - def progress_calculate(uids_to_calc, nodes) - uids_to_calc.map do |uid| - node = @nodes.find{|n| n[:uid] == uid} - node[:path_items] ||= [] - progress = 0 - node[:path_items].each do |item| - size = recursive_size(item[:path]) - sub_progress = 100 * size / item[:max_size] - sub_progress = 0 if sub_progress < 0 - sub_progress = 100 if sub_progress > 100 - progress += sub_progress * item[:weight] - end - {'uid' => uid, 'progress' => progress.to_i} - end - end - - private - def recursive_size(path, opts={}) - return File.size?(path).to_i if not File.directory?(path) - - total_size = 0 - Dir[File.join("#{path}", '**/*')].each do |f| - # Option :files_only used when you want to calculate total size of - # regular files only. The default :files_only is false, so the function will - # include inode size of each dir (4096 bytes in most cases) to total value - # as the unix util 'du' does it. - total_size += File.size?(f).to_i if File.file?(f) || ! opts[:files_only] - end - total_size - end - - def weight_reassignment(items) - # The finction normalizes the weights of each item in order to make sum of - # all weights equal to one. - # It divides items as wighted and unweighted depending on the existence of - # the :weight key in the item. - # - Each unweighted item will be weighted as a one N-th part of the total number of items. - # - All weights of weighted items are summed up and then each weighted item - # gets a new weight as a multiplication of a relative weight among all - # weighted items and the ratio of the number of the weighted items to - # the total number of items. - # E.g. we have four items: one with weight 0.5, another with weight 1.5, and - # two others as unweighted. All unweighted items will get the weight 1/4. - # Weight's sum of weighted items is 2. So the first item will get the weight: - # (relative weight 0.5/2) * (weighted items ratio 2/4) = 1/8. - # Finally all items will be normalised with next weights: - # 1/8, 3/8, 1/4, and 1/4. - - ret_items = items.reject do |item| - weight = item[:weight] - # Save an item if it unweighted. - next if weight.nil? - raise "Weight should be a non-negative number" unless [Fixnum, Float].include?(weight.class) && weight >= 0 - # Drop an item if it weighted as zero. - item[:weight] == 0 - end - return [] if ret_items.empty? - ret_items.map!{|n| n.dup} - - partial_weight = 1.0 / ret_items.length - weighted_items = ret_items.select{|n| n[:weight]} - weighted_sum = 0.0 - weighted_items.each{|n| weighted_sum += n[:weight]} - weighted_sum = weighted_sum * ret_items.length / weighted_items.length if weighted_items.any? - raise "Unexpectedly a summary weight of weighted items is a non-positive" if weighted_items.any? && weighted_sum <= 0 - ret_items.each do |item| - weight = item[:weight] - item[:weight] = weight ? weight / weighted_sum : partial_weight - end - - ret_items - end - end - - class ParseNodeLogs - attr_reader :pattern_spec - - def initialize - @pattern_spec = {} - @pattern_spec['path_prefix'] ||= PATH_PREFIX.to_s - @pattern_spec['separator'] ||= SEPARATOR.to_s - @nodes_patterns = {} - end - - def progress_calculate(uids_to_calc, nodes) - nodes_progress = [] - - patterns = patterns_for_nodes(nodes, uids_to_calc) - uids_to_calc.each do |uid| - node = nodes.find {|n| n['uid'] == uid} - @nodes_patterns[uid] ||= patterns[uid] - node_pattern_spec = @nodes_patterns[uid] - # FIXME(eli): this var is required for binding() below - @pattern_spec = @nodes_patterns[uid] - - erb_path = node_pattern_spec['path_format'] - path = ERB.new(erb_path).result(binding()) - - progress = 0 - begin - # Return percent of progress - progress = (get_log_progress(path, node_pattern_spec) * 100).to_i - rescue => e - Astute.logger.warn "Some error occurred when calculate progress " \ - "for node '#{uid}': #{e.message}, trace: #{e.format_backtrace}" - end - - nodes_progress << { - 'uid' => uid, - 'progress' => progress - } - end - - nodes_progress - end - - def prepare(nodes) - patterns = patterns_for_nodes(nodes) - nodes.each do |node| - pattern = patterns[node['uid']] - path = "#{pattern['path_prefix']}#{node['ip']}/#{pattern['filename']}" - File.open(path, 'a') { |fo| fo.write pattern['separator'] } if File.writable?(path) - end - end - - # Get patterns for selected nodes - # if uids_to_calc is nil, then - # patterns for all nodes will be returned - def patterns_for_nodes(nodes, uids_to_calc=nil) - uids_to_calc = nodes.map { |node| node['uid'] } if uids_to_calc.nil? - nodes_to_calc = nodes.select { |node| uids_to_calc.include?(node['uid']) } - - patterns = {} - nodes_to_calc.map do |node| - patterns[node['uid']] = get_pattern_for_node(node) - end - - patterns - end - - private - - def get_log_progress(path, node_pattern_spec) - unless File.readable?(path) - Astute.logger.debug "Can't read file with logs: #{path}" - return 0 - end - if node_pattern_spec.nil? - Astute.logger.warn "Can't parse logs. Pattern_spec is empty." - return 0 - end - progress = nil - File.open(path) do |fo| - # Try to find well-known ends of log. - endlog = find_endlog_patterns(fo, node_pattern_spec) - return endlog if endlog - # Start reading from end of file. - fo.pos = fo.stat.size - - # Method 'calculate' should be defined at child classes. - progress = calculate(fo, node_pattern_spec) - node_pattern_spec['file_pos'] = fo.pos - end - unless progress - Astute.logger.warn("Wrong pattern\n#{node_pattern_spec.pretty_inspect}\ndefined for calculating progress via logs.") - return 0 - end - progress - end - - def find_endlog_patterns(fo, pattern_spec) - # Pattern example: - # pattern_spec = {..., - # 'endlog_patterns' => [{'pattern' => /Finished catalog run in [0-9]+\.[0-9]* seconds\n/, 'progress' => 1.0}], - # } - endlog_patterns = pattern_spec['endlog_patterns'] - return nil unless endlog_patterns - fo.pos = fo.stat.size - chunk = get_chunk(fo, 100) - return nil unless chunk - endlog_patterns.each do |pattern| - return pattern['progress'] if Regexp.new("#{pattern['pattern']}$").match(chunk) - end - nil - end - - def get_chunk(fo, size=nil, pos=nil) - if pos - fo.pos = pos - return fo.read - end - size = LOG_PORTION unless size - return nil if fo.pos == 0 - size = fo.pos if fo.pos < size - next_pos = fo.pos - size - fo.pos = next_pos - block = fo.read(size) - fo.pos = next_pos - block - end - end - end -end diff --git a/lib/astute/logparser/deployment.rb b/lib/astute/logparser/deployment.rb deleted file mode 100644 index 863dbba6..00000000 --- a/lib/astute/logparser/deployment.rb +++ /dev/null @@ -1,160 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -module Astute - module LogParser - class ParseDeployLogs < ParseNodeLogs - attr_reader :deploy_type - - def deploy_type=(deploy_type) - @deploy_type = deploy_type - @nodes_patterns = {} - end - - def get_pattern_for_node(node) - role = node['role'] - node_pattern = Patterns::get_default_pattern( - "puppet-log-components-list-#{@deploy_type}-#{role}") - node_pattern['path_prefix'] ||= PATH_PREFIX.to_s - node_pattern['separator'] ||= SEPARATOR.to_s - - node_pattern - end - - private - def calculate(fo, node_pattern_spec) - case node_pattern_spec['type'] - when 'count-lines' - progress = simple_line_counter(fo, node_pattern_spec) - when 'components-list' - progress = component_parser(fo, node_pattern_spec) - end - return progress - end - - def simple_line_counter(fo, pattern_spec) - # Pattern specification example: - # pattern_spec = {'type' => 'count-lines', - # 'endlog_patterns' => [{'pattern' => /Finished catalog run in [0-9]+\.[0-9]* seconds\n/, 'progress' => 1.0}], - # 'expected_line_number' => 500} - # Use custom separator if defined. - separator = pattern_spec['separator'] - counter = 0 - end_of_scope = false - previous_subchunk = '' - until end_of_scope - chunk = get_chunk(fo, pattern_spec['chunk_size']) - break unless chunk - # Trying to find separator on border between chunks. - subchunk = chunk.slice((1-separator.size)..-1) - # End of file reached. Exit from cycle. - end_of_scope = true unless subchunk - if subchunk and (subchunk + previous_subchunk).include?(separator) - # Separator found on border between chunks. Exit from cycle. - end_of_scope = true - continue - end - - pos = chunk.rindex(separator) - if pos - end_of_scope = true - chunk = chunk.slice((pos + separator.size)..-1) - end - counter += chunk.count("\n") - end - number = pattern_spec['expected_line_number'] - unless number - Astute.logger.warn("Wrong pattern\n#{pattern_spec.pretty_inspect} defined for calculating progress via log.") - return 0 - end - progress = counter.to_f / number - progress = 1 if progress > 1 - return progress - end - - def component_parser(fo, pattern_spec) - # Pattern specification example: - # pattern_spec = {'type' => 'components-list', - # 'chunk_size' => 40000, - # 'components_list' => [ - # {'name' => 'Horizon', 'weight' => 10, 'patterns' => [ - # {'pattern' => '/Stage[main]/Horizon/Package[mod_wsgi]/ensure) created', 'progress' => 0.1}, - # {'pattern' => '/Stage[main]/Horizon/File_line[horizon_redirect_rule]/ensure) created', 'progress' => 0.3}, - # {'pattern' => '/Stage[main]/Horizon/File[/etc/openstack-dashboard/local_settings]/group)', 'progress' => 0.7}, - # {'pattern' => '/Stage[main]/Horizon/Service[$::horizon::params::http_service]/ensure)'\ - # ' ensure changed \'stopped\' to \'running\'', 'progress' => 1}, - # ] - # }, - # ] - # } - # Use custom separator if defined. - separator = pattern_spec['separator'] - components_list = pattern_spec['components_list'] - unless components_list - Astute.logger.warn("Wrong pattern\n#{pattern_spec.pretty_inspect} defined for calculating progress via logs.") - return 0 - end - - chunk = get_chunk(fo, pos=pattern_spec['file_pos']) - return 0 unless chunk - pos = chunk.rindex(separator) - chunk = chunk.slice((pos + separator.size)..-1) if pos - block = chunk.split("\n") - - # Update progress of each component. - while block.any? - string = block.pop - components_list.each do |component| - matched_pattern = nil - component['patterns'].each do |pattern| - if pattern['regexp'] - matched_pattern = pattern if string.match(pattern['pattern']) - else - matched_pattern = pattern if string.include?(pattern['pattern']) - end - break if matched_pattern - end - if matched_pattern and - (not component['_progress'] or matched_pattern['progress'] > component['_progress']) - component['_progress'] = matched_pattern['progress'] - end - end - end - - # Calculate integral progress. - weighted_components = components_list.select{|n| n['weight']} - weight_sum = 0.0 - if weighted_components.any? - weighted_components.each{|n| weight_sum += n['weight']} - weight_sum = weight_sum * components_list.length / weighted_components.length - raise "Total weight of weighted components equal to zero." if weight_sum == 0 - end - nonweighted_delta = 1.0 / components_list.length - progress = 0 - components_list.each do |component| - component['_progress'] = 0.0 unless component['_progress'] - weight = component['weight'] - if weight - progress += component['_progress'] * weight / weight_sum - else - progress += component['_progress'] * nonweighted_delta - end - end - - return progress - end - end - end -end diff --git a/lib/astute/logparser/parser_patterns.rb b/lib/astute/logparser/parser_patterns.rb deleted file mode 100644 index 291faebe..00000000 --- a/lib/astute/logparser/parser_patterns.rb +++ /dev/null @@ -1,75 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -module Astute - module LogParser - module Patterns - def self.get_default_pattern(key) - pattern_key = key - pattern_key = 'default' unless @default_patterns.has_key?(key) - deep_copy(@default_patterns[pattern_key]) - end - - def self.list_default_patterns - return @default_patterns.keys - end - - @default_patterns = { - 'provisioning-image-building' => - {'type' => 'supposed-time', - 'chunk_size' => 10000, - 'date_format' => '%Y-%m-%d %H:%M:%S', - 'date_regexp' => '^\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}', - 'pattern_list' => [ - {'pattern' => '--- Building image (do_build_image) ---', 'supposed_time' => 12}, - {'pattern' => '*** Shipping image content ***', 'supposed_time' => 12}, - {'pattern' => 'Running deboostrap completed', 'supposed_time' => 270}, - {'pattern' => 'Running apt-get install completed', 'supposed_time' => 480}, - {'pattern' => '--- Building image END (do_build_image) ---', 'supposed_time' => 240}, - {'pattern' => 'All necessary images are available.', 'supposed_time' => 10} - ].reverse, - 'filename' => "fuel-agent-env", - 'path_format' => "<%= @pattern_spec['path_prefix']%><%= @pattern_spec['filename']%>-<%= @pattern_spec['cluster_id']%>.log" - }, - - 'image-based-provisioning' => - {'type' => 'pattern-list', - 'chunk_size' => 10000, - 'pattern_list' => [ - {'pattern' => '--- Provisioning (do_provisioning) ---', 'progress' => 0.81}, - {'pattern' => '--- Partitioning disks (do_partitioning) ---', 'progress' => 0.82}, - {'pattern' => '--- Creating configdrive (do_configdrive) ---', 'progress' => 0.92}, - {'pattern' => 'Next chunk', - 'number' => 600, - 'p_min' => 0.92, - 'p_max' => 0.98}, - {'pattern' => '--- Installing bootloader (do_bootloader) ---', 'progress' => 0.99}, - {'pattern' => '--- Provisioning END (do_provisioning) ---', 'progress' => 1} - ], - 'filename' => 'bootstrap/fuel-agent.log', - 'path_format' => "<%= @pattern_spec['path_prefix'] %><%= node['hostname'] %>/<%= @pattern_spec['filename'] %>", - }, - - 'default' => { - 'type' => 'count-lines', - 'endlog_patterns' => [{'pattern' => /Finished catalog run in [0-9]+\.[0-9]* seconds\n/, 'progress' => 1.0}], - 'expected_line_number' => 345, - 'filename' => 'puppet-apply.log', - 'path_format' => "<%= @pattern_spec['path_prefix'] %><%= node['fqdn'] %>/<%= @pattern_spec['filename'] %>" - }, - } - end - end -end diff --git a/lib/astute/logparser/provision.rb b/lib/astute/logparser/provision.rb deleted file mode 100644 index af422a31..00000000 --- a/lib/astute/logparser/provision.rb +++ /dev/null @@ -1,262 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -require 'date' - -module Astute - module LogParser - class ParseProvisionLogs < ParseNodeLogs - - def get_pattern_for_node(node) - os = node['profile'] - - pattern_spec_name = if node.fetch('ks_meta', {}).key?('image_data') - 'image-based-provisioning' - elsif ['centos-x86_64'].include?(os) - 'centos-anaconda-log-supposed-time-kvm' - elsif os == 'ubuntu_1404_x86_64' - 'ubuntu-provisioning' - else - raise Astute::ParseProvisionLogsError, "Cannot find profile for os with: #{os}" - end - - pattern_spec = deep_copy(Patterns::get_default_pattern(pattern_spec_name)) - pattern_spec['path_prefix'] ||= PATH_PREFIX.to_s - pattern_spec['separator'] ||= SEPARATOR.to_s - - pattern_spec - end - - private - def calculate(fo, node_pattern_spec) - case node_pattern_spec['type'] - when 'pattern-list' - progress = simple_pattern_finder(fo, node_pattern_spec) - when 'supposed-time' - progress = supposed_time_parser(fo, node_pattern_spec) - end - - progress - end - - # Pattern specification example: - # pattern_spec = {'type' => 'supposed-time', - # 'chunk_size' => 10000, - # 'date_format' => '%Y-%m-%dT%H:%M:%S', - # 'date_regexp' => '^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}', - # 'pattern_list' => [ - # {'pattern' => 'Running anaconda script', 'supposed_time' => 60}, - # .... - # {'pattern' => 'leaving (1) step postscripts', 'supposed_time' => 130}, - # ].reverse, - # 'filename' => 'install/anaconda.log' - # } - # Use custom separator if defined. - def supposed_time_parser(fo, pattern_spec) - separator = pattern_spec['separator'] - log_patterns = pattern_spec['pattern_list'] - date_format = pattern_spec['date_format'] - date_regexp = pattern_spec['date_regexp'] - unless date_regexp and date_format and log_patterns - Astute.logger.warn("Wrong pattern_spec\n#{pattern_spec.pretty_inspect} defined for calculating progress via logs.") - return 0 - end - - def self.get_elapsed_time(patterns) - elapsed_time = 0 - patterns.each do |p| - if p['_progress'] - break - else - elapsed_time += p['supposed_time'] - end - end - return elapsed_time - end - - def self.get_progress(base_progress, elapsed_time, delta_time, supposed_time=nil) - return 1.0 if elapsed_time.zero? - k = (1.0 - base_progress) / elapsed_time - supposed_time ? surplus = delta_time - supposed_time : surplus = nil - if surplus and surplus > 0 - progress = supposed_time * k + surplus * k/3 + base_progress - else - progress = delta_time * k + base_progress - end - progress = 1.0 if progress > 1 - return progress - end - - def self.get_seconds_from_time(date) - hours, mins, secs, _frac = Date::day_fraction_to_time(date) - return hours*60*60 + mins*60 + secs - end - - - chunk = get_chunk(fo, pattern_spec['chunk_size']) - return 0 unless chunk - pos = chunk.rindex(separator) - chunk = chunk.slice((pos + separator.size)..-1) if pos - block = chunk.split("\n") - - now = DateTime.now() - prev_time = pattern_spec['_prev_time'] ||= now - prev_progress = pattern_spec['_prev_progress'] ||= 0 - elapsed_time = pattern_spec['_elapsed_time'] ||= get_elapsed_time(log_patterns) - seconds_since_prev = get_seconds_from_time(now - prev_time) - - until block.empty? - string = block.pop - log_patterns.each do |pattern| - if string.include?(pattern['pattern']) - if pattern['_progress'] - # We not found any new messages. Calculate progress with old data. - progress = get_progress(prev_progress, elapsed_time, - seconds_since_prev, pattern['supposed_time']) - return progress - - else - # We found message that we never find before. We need to: - # calculate progress for this message; - # recalculate control point and elapsed_time; - # calculate progress for current time. - - # Trying to find timestamp of message. - date_string = string.match(date_regexp) - if date_string - # Get relative time when the message realy occured. - date = DateTime.strptime(date_string[0], date_format) - prev_time.offset - real_time = get_seconds_from_time(date - prev_time) - # Update progress of the message. - prev_supposed_time = log_patterns.select{|n| n['_progress'] == prev_progress}[0] - prev_supposed_time = prev_supposed_time['supposed_time'] if prev_supposed_time - progress = get_progress(prev_progress, elapsed_time, real_time, prev_supposed_time) - pattern['_progress'] = progress - # Recalculate elapsed time. - elapsed_time = pattern_spec['_elapsed_time'] = get_elapsed_time(log_patterns) - # Update time and progress for control point. - prev_time = pattern_spec['_prev_time'] = date - prev_progress = pattern_spec['_prev_progress'] = progress - seconds_since_prev = get_seconds_from_time(now - date) - # Calculate progress for current time. - progress = get_progress(prev_progress, elapsed_time, - seconds_since_prev, pattern['supposed_time']) - return progress - else - Astute.logger.info("Can't gather date (format: '#{date_regexp}') from string: #{string}") - end - end - end - end - end - # We found nothing. - progress = get_progress(prev_progress, elapsed_time, seconds_since_prev, log_patterns[0]['supposed_time']) - return progress - end - - def simple_pattern_finder(fo, pattern_spec) - # Pattern specification example: - # pattern_spec = {'type' => 'pattern-list', 'separator' => "custom separator\n", - # 'chunk_size' => 40000, - # 'pattern_list' => [ - # {'pattern' => 'Running kickstart %%pre script', 'progress' => 0.08}, - # {'pattern' => 'to step enablefilesystems', 'progress' => 0.09}, - # {'pattern' => 'to step reposetup', 'progress' => 0.13}, - # {'pattern' => 'to step installpackages', 'progress' => 0.16}, - # {'pattern' => 'Installing', - # 'number' => 210, # Now it install 205 packets. Add 5 packets for growth in future. - # 'p_min' => 0.16, # min percent - # 'p_max' => 0.87 # max percent - # }, - # {'pattern' => 'to step postinstallconfig', 'progress' => 0.87}, - # {'pattern' => 'to step dopostaction', 'progress' => 0.92}, - # ] - # } - # Use custom separator if defined. - separator = pattern_spec['separator'] - log_patterns = pattern_spec['pattern_list'] - unless log_patterns - Astute.logger.warn("Wrong pattern\n#{pattern_spec.pretty_inspect} defined for calculating progress via logs.") - return 0 - end - - chunk = get_chunk(fo, pattern_spec['chunk_size']) - # NOTE(mihgen): Following line fixes "undefined method `rindex' for nil:NilClass" for empty log file - return 0 unless chunk - pos = chunk.rindex(separator) - chunk = chunk.slice((pos + separator.size)..-1) if pos - block = chunk.split("\n") - return 0 unless block - while true - string = block.pop - return 0 unless string # If we found nothing - log_patterns.each do |pattern| - if string.include?(pattern['pattern']) - return pattern['progress'] if pattern['progress'] - if pattern['number'] - string = block.pop - counter = 1 - while string - counter += 1 if string.include?(pattern['pattern']) - string = block.pop - end - progress = counter.to_f / pattern['number'] - progress = 1 if progress > 1 - progress = pattern['p_min'] + progress * (pattern['p_max'] - pattern['p_min']) - return progress - end - Astute.logger.warn("Wrong pattern\n#{pattern_spec.pretty_inspect} defined for calculating progress via log.") - end - end - end - end - - end # ParseProvisionLogs - - class ParseImageBuildLogs < ParseProvisionLogs - - PATH_PREFIX = '/var/log/' - attr_accessor :cluster_id - - def get_pattern_for_node(node) - os = node['profile'] - - pattern_spec_name = 'provisioning-image-building' - - pattern_spec = deep_copy(Patterns::get_default_pattern(pattern_spec_name)) - pattern_spec['path_prefix'] ||= PATH_PREFIX.to_s - pattern_spec['separator'] ||= SEPARATOR.to_s - pattern_spec['cluster_id'] = cluster_id - - pattern_spec - end - - def prepare(nodes) - # This is common file for all nodes - pattern_spec = get_pattern_for_node(nodes.first) - path = pattern_spec['path_format'] - File.open(path, 'a') { |fo| fo.write pattern['separator'] } if File.writable?(path) - end - - def progress_calculate(uids_to_calc, nodes) - result = super - # Limit progress for this part to 80% as max - result.map { |h| h['progress'] = (h['progress'] * 0.8).to_i } - result - end - - end # ParseImageProvisionLogs - end -end diff --git a/lib/astute/mclient.rb b/lib/astute/mclient.rb deleted file mode 100644 index 740ba671..00000000 --- a/lib/astute/mclient.rb +++ /dev/null @@ -1,190 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -require 'mcollective' -require 'timeout' - -module Astute - - class MClient - include MCollective::RPC - - attr_accessor :retries - - def initialize( - ctx, - agent, - nodes=nil, - check_result=true, - timeout=nil, - retries=Astute.config.mc_retries, - enable_result_logging=true - ) - - @task_id = ctx.task_id - @agent = agent - @nodes = nodes.map { |n| n.to_s } if nodes - @check_result = check_result - # Will be used a minimum of two things: the specified parameter(timeout) - # and timeout from DDL (10 sec by default if not explicitly specified in DDL) - # If timeout here is nil will be used value from DDL. - # Examples: - # timeout - 10 sec, DDL - 20 sec. Result — 10 sec. - # timeout - 30 sec, DDL - 20 sec. Result — 20 sec. - # timeout - 20 sec, DDL - not set. Result — 10 sec. - @timeout = timeout - @retries = retries - @enable_result_logging = enable_result_logging - initialize_mclient - end - - def on_respond_timeout(&block) - @on_respond_timeout = block - self - end - - def method_missing(method, *args) - @mc_res = mc_send(method, *args) - - if method == :discover - @nodes = args[0][:nodes] - return @mc_res - end - - # Enable if needed. In normal case it eats the screen pretty fast - log_result(@mc_res, method) if @enable_result_logging - - check_results_with_retries(method, args) if @check_result - - @mc_res - end - - private - - def check_results_with_retries(method, args) - err_msg = '' - timeout_nodes_count = 0 - # Following error might happen because of misconfiguration, ex. direct_addressing = 1 only on client - # or.. could be just some hang? Let's retry if @retries is set - if @mc_res.length < @nodes.length - # some nodes didn't respond - retry_index = 1 - while retry_index <= @retries - sleep rand - nodes_responded = @mc_res.map { |n| n.results[:sender] } - not_responded = @nodes - nodes_responded - Astute.logger.debug "Retry ##{retry_index} to run mcollective agent on nodes: '#{not_responded.join(',')}'" - mc_send :discover, :nodes => not_responded - @new_res = mc_send(method, *args) - - log_result(@new_res, method) if @enable_result_logging - # @new_res can have some nodes which finally responded - - @mc_res += @new_res - break if @mc_res.length == @nodes.length - retry_index += 1 - end - if @mc_res.length < @nodes.length - nodes_responded = @mc_res.map { |n| n.results[:sender] } - not_responded = @nodes - nodes_responded - if @on_respond_timeout - @on_respond_timeout.call not_responded - else - err_msg += "MCollective agents '#{@agent}' " \ - "'#{not_responded.join(',')}' didn't respond within the " \ - "allotted time.\n" - timeout_nodes_count += not_responded.size - end - end - end - failed = @mc_res.select { |x| x.results[:statuscode] != 0 } - if failed.any? - err_msg += "MCollective call failed in agent '#{@agent}', "\ - "method '#{method}', failed nodes: \n" - failed.each do |n| - err_msg += "ID: #{n.results[:sender]} - Reason: #{n.results[:statusmsg]}\n" - end - end - if err_msg.present? - Astute.logger.error err_msg - expired_size = failed.count { |n| n.results[:statusmsg] == 'execution expired' } - # Detect TimeOut: 1 condition - fail because of DDL timeout, 2 - fail because of custom timeout - if (failed.present? && failed.size == expired_size) || (timeout_nodes_count > 0 && failed.empty?) - raise MClientTimeout, "#{@task_id}: #{err_msg}" - else - raise MClientError, "#{@task_id}: #{err_msg}" - end - end - end - - def mc_send(*args) - retries = 1 - begin - @mc.send(*args) - rescue => ex - case ex - when Stomp::Error::NoCurrentConnection - # stupid stomp cannot recover severed connection - stomp = MCollective::PluginManager["connector_plugin"] - stomp.disconnect rescue nil - stomp.instance_variable_set :@connection, nil - initialize_mclient - end - if retries < 3 - Astute.logger.error "Retrying MCollective call after exception:\n#{ex.pretty_inspect}" - sleep rand - retries += 1 - retry - else - Astute.logger.error "No more retries for MCollective call after exception: " \ - "#{ex.format_backtrace}" - raise MClientError, "#{ex.pretty_inspect}" - end - end - end - - def initialize_mclient - retries = 1 - begin - @mc = rpcclient(@agent, :exit_on_failure => false) - - @mc.timeout = @timeout if @timeout - @mc.progress = false - if @nodes - @mc.discover :nodes => @nodes - end - rescue => ex - if retries < 3 - Astute.logger.error "Retrying RPC client instantiation after exception:\n#{ex.pretty_inspect}" - sleep 5 - retries += 1 - retry - else - Astute.logger.error "No more retries for MCollective client instantiation after exception: " \ - "#{ex.format_backtrace}" - raise MClientError, "#{ex.pretty_inspect}" - end - end - end - - def log_result(result, method) - result.each do |node| - Astute.logger.debug "#{@task_id}: MC agent '#{node.agent}', method '#{method}', "\ - "results:\n#{node.results.pretty_inspect}" - end - end - end -end diff --git a/lib/astute/mclients/puppet_mclient.rb b/lib/astute/mclients/puppet_mclient.rb deleted file mode 100644 index 65abdf48..00000000 --- a/lib/astute/mclients/puppet_mclient.rb +++ /dev/null @@ -1,138 +0,0 @@ -# Copyright 2016 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - class PuppetMClient - - PUPPET_STATUSES = [ - 'running', 'stopped', 'disabled' - ] - - attr_reader :summary, :node_id - - def initialize(ctx, node_id, options) - @ctx = ctx - @node_id = node_id - @options = options - @summary = {} - end - - # Return actual status of puppet using mcollective puppet agent - # @return [String] status: succeed, one of PUPPET_STATUSES or undefined - def status - last_run_summary - succeed? ? 'succeed' : @summary.fetch(:status, 'undefined') - end - - # Run puppet on node if available - # @return [true, false] - def run - is_succeed, err_msg = runonce - return true if is_succeed - - Astute.logger.warn "Fail to start puppet on node #{@node_id}. "\ - "Reason: #{err_msg}" - false - end - - # Return path to manifest using by mcollective puppet agent - # @return [String] path to manifest - def manifest - File.join(@options['cwd'], @options['puppet_manifest']) - end - - private - - # Create configured puppet mcollective agent - # @return [Astute::MClient] - def puppetd(timeout=nil, retries=1) - puppetd = MClient.new( - @ctx, - "puppetd", - [@node_id], - _check_result=true, - _timeout=timeout, - _retries=retries, - _enable_result_logging=false - ) - puppetd.on_respond_timeout do |uids| - msg = "Nodes #{uids} reached the response timeout" - Astute.logger.error msg - raise MClientTimeout, msg - end - puppetd - end - - # Run last_run_summary action using mcollective puppet agent - # @return [Hash] return hash with status and resources - def last_run_summary - @summary = puppetd(_timeout=10, _retries=6).last_run_summary( - :puppet_noop_run => @options['puppet_noop_run'], - :raw_report => @options['raw_report'] - ).first[:data] - validate_status!(@summary[:status]) - @summary - rescue MClientError, MClientTimeout => e - Astute.logger.warn "Unable to get actual status of puppet on "\ - "node #{@node_id}. Reason: #{e.message}" - @summary = {} - end - - # Run runonce action using mcollective puppet agent - # @return [[true, false], String] boolean status of run and error message - def runonce - result = puppetd.runonce( - :puppet_debug => @options['puppet_debug'], - :manifest => @options['puppet_manifest'], - :modules => @options['puppet_modules'], - :cwd => @options['cwd'], - :command_prefix => @options['command_prefix'], - :puppet_noop_run => @options['puppet_noop_run'], - ).first - return result[:statuscode] == 0, result[:statusmsg] - rescue MClientError, MClientTimeout => e - return false, e.message - end - - # Validate puppet status - # @param [String] status The puppet status - # @return [void] - # @raise [MClientError] Unknown status - def validate_status!(status) - unless PUPPET_STATUSES.include?(status) - raise MClientError, "Unknow status '#{status}' from mcollective agent" - end - end - - # Detect succeed of puppet run using summary from last_run_summary call - # @return [true, false] - def succeed? - return false if @summary.blank? - - @summary[:status] == 'stopped' && - @summary[:resources] && - @summary[:resources]['failed'].to_i == 0 && - @summary[:resources]['failed_to_restart'].to_i == 0 - end - - # Generate shell cmd for file deletion - # @return [String] shell cmd for deletion - def rm_cmd - PUPPET_FILES_TO_CLEANUP.inject([]) do - |cmd, file| cmd << "rm -f #{file}" - end.join(" && ") - end - - end # PuppetMclient -end diff --git a/lib/astute/mclients/shell_mclient.rb b/lib/astute/mclients/shell_mclient.rb deleted file mode 100644 index b51120a3..00000000 --- a/lib/astute/mclients/shell_mclient.rb +++ /dev/null @@ -1,84 +0,0 @@ -# Copyright 2016 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - class ShellMClient - - def initialize(ctx, node_id) - @ctx = ctx - @node_id = node_id - end - - # Run shell cmd without check using mcollective agent - # @param [String] cmd Shell command for run - # @param [Integer] timeout Timeout for shell command - # @return [Hash] shell result - def run_without_check(cmd, timeout=2) - Astute.logger.debug("Executing shell command without check: "\ - "#{details_for_log(cmd, timeout)}") - - results = shell(_check_result=false, timeout).execute(:cmd => cmd) - Astute.logger.debug("Mcollective shell #{details_for_log(cmd, timeout)}"\ - " result: #{results.pretty_inspect}") - if results.present? - result = results.first - log_result(result, cmd, timeout) - { - :stdout => result.results[:data][:stdout].chomp, - :stderr => result.results[:data][:stderr].chomp, - :exit_code => result.results[:data][:exit_code] - } - else - Astute.logger.warn("#{@ctx.task_id}: Failed to run shell "\ - "#{details_for_log(cmd, timeout)}. Error will not raise "\ - "because shell was run without check") - {} - end - end - - private - - # Create configured shell mcollective agent - # @return [Astute::MClient] - def shell(check_result=false, timeout=2) - MClient.new( - @ctx, - 'execute_shell_command', - [@node_id], - check_result, - timeout - ) - end - - # Return short useful info about node and shell task - # @return [String] detail info about cmd - def details_for_log(cmd, timeout) - "command '#{cmd}' on node #{@node_id} with timeout #{timeout}" - end - - # Write to log shell command result including exit code - # @param [Hash] result Actual magent shell result - # @return [void] - def log_result(result, cmd, timeout) - return if result.results[:data].blank? - - Astute.logger.debug( - "#{@ctx.task_id}: #{details_for_log(cmd, timeout)}\n" \ - "stdout: #{result.results[:data][:stdout]}\n" \ - "stderr: #{result.results[:data][:stderr]}\n" \ - "exit code: #{result.results[:data][:exit_code]}") - end - - end -end diff --git a/lib/astute/mclients/upload_file_mclient.rb b/lib/astute/mclients/upload_file_mclient.rb deleted file mode 100644 index 766aadc5..00000000 --- a/lib/astute/mclients/upload_file_mclient.rb +++ /dev/null @@ -1,133 +0,0 @@ -# Copyright 2016 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - class UploadFileMClient - - attr_reader :ctx, :node_id - def initialize(ctx, node_id) - @ctx = ctx - @node_id = node_id - end - - # Run upload without check using mcollective agent - # @param [Hash] mco_params Upload file options - # @return [true, false] upload result - def upload_without_check(mco_params) - upload_mclient = upload_mclient( - :check_result => false, - :timeout => mco_params['timeout'] - ) - upload(mco_params, upload_mclient) - end - - # Run upload with check using mcollective agent - # @param [Hash] mco_params Upload file options - # @return [true, false] upload result - def upload_with_check(mco_params) - upload_mclient = upload_mclient( - :check_result => false, - :timeout => mco_params['timeout'], - :retries => mco_params['retries'] - ) - process_with_retries(:retries => mco_params['retries']) do - upload(mco_params, upload_mclient) - end - end - - private - - - def upload(mco_params, magent) - mco_params = setup_default(mco_params) - - results = magent.upload( - :path => mco_params['path'], - :content => mco_params['content'], - :overwrite => mco_params['overwrite'], - :parents => mco_params['parents'], - :permissions => mco_params['permissions'], - :user_owner => mco_params['user_owner'], - :group_owner => mco_params['group_owner'], - :dir_permissions => mco_params['dir_permissions'] - ) - - if results.present? && results.first[:statuscode] == 0 - Astute.logger.debug("#{ctx.task_id}: file was uploaded "\ - "#{details_for_log(mco_params)} successfully") - true - else - Astute.logger.error("#{ctx.task_id}: file was not uploaded "\ - "#{details_for_log(mco_params)}: "\ - "#{results.present? ? results.first[:msg] : "node has not answered" }") - false - end - rescue MClientTimeout, MClientError => e - Astute.logger.error("#{ctx.task_id}: file was not uploaded "\ - "#{details_for_log(mco_params)}: #{e.message}") - false - end - - # Create configured shell mcollective agent - # @return [Astute::MClient] - def upload_mclient(args={}) - MClient.new( - ctx, - "uploadfile", - [node_id], - args.fetch(:check_result, false), - args.fetch(:timeout, 2), - args.fetch(:retries, Astute.config.upload_retries) - ) - end - - # Setup default value for upload mcollective agent - # @param [Hash] mco_params Upload file options - # @return [Hash] mco_params - def setup_default(mco_params) - mco_params['retries'] ||= Astute.config.upload_retries - mco_params['timeout'] ||= Astute.config.upload_timeout - mco_params['overwrite'] = true if mco_params['overwrite'].nil? - mco_params['parents'] = true if mco_params['parents'].nil? - mco_params['permissions'] ||= '0644' - mco_params['user_owner'] ||= 'root' - mco_params['group_owner'] ||= 'root' - mco_params['dir_permissions'] ||= '0755' - - mco_params - end - - # Return short useful info about node and shell task - # @return [String] detail info about upload task - def details_for_log(mco_params) - "#{mco_params['path']} on node #{node_id} "\ - "with timeout #{mco_params['timeout']}" - end - - def process_with_retries(args={}, &block) - retries = args.fetch(:retries, 1) + 1 - result = false - - retries.times do |attempt| - result = block.call - break if result - - Astute.logger.warn("#{ctx.task_id} Upload retry for node "\ - "#{node_id}: attempt № #{attempt + 1}/#{retries}") - end - result - end - - end -end diff --git a/lib/astute/nailgun_hooks.rb b/lib/astute/nailgun_hooks.rb deleted file mode 100644 index 9cf031ec..00000000 --- a/lib/astute/nailgun_hooks.rb +++ /dev/null @@ -1,467 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -module Astute - class NailgunHooks - - def initialize(nailgun_hooks, context, type='deploy') - @nailgun_hooks = nailgun_hooks - @ctx = context - @type = type - end - - def process - @nailgun_hooks.sort_by { |f| f['priority'] }.each do |hook| - Astute.logger.debug "Run hook #{hook.to_yaml}" - - time_start = Time.now.to_i - - hook_return = case hook['type'] - when 'copy_files' then copy_files_hook(hook) - when 'upload_files' then upload_files_hook(hook) - when 'sync' then sync_hook(hook) - when 'shell' then shell_hook(hook) - when 'upload_file' then upload_file_hook(hook) - when 'puppet' then puppet_hook(hook) - when 'reboot' then reboot_hook(hook) - when 'cobbler_sync' then cobbler_sync_hook(hook) - else raise "Unknown hook type #{hook['type']}" - end - - time_summary(time_start, hook, hook_return) - hook_name = task_name(hook) - - is_raise_on_error = hook.fetch('fail_on_error', true) - - if hook_return['error'] && is_raise_on_error - nodes = hook['uids'].map do |uid| - { 'uid' => uid, - 'status' => 'error', - 'error_type' => @type, - 'role' => 'hook', - 'hook' => hook_name, - 'error_msg' => hook_return['error'] - } - end - error_message = 'Failed to execute hook' - error_message += " '#{hook_name}'" if hook_name - error_message += "\n\n#{hook_return['error']}" - @ctx.report_and_update_status('nodes' => nodes, 'error' => error_message) - error_message += "#{hook.to_yaml}" - - raise Astute::DeploymentEngineError, error_message - - end - end - end - - private - - def task_name(hook) - hook['id'] || hook['diagnostic_name'] || hook['type'] - end - - def time_summary(time_start, hook, hook_return) - status = hook_return && !hook_return['error'] ? 'successful' : 'error' - amount_time = (Time.now.to_i - time_start).to_i - wasted_time = Time.at(amount_time).utc.strftime("%H:%M:%S") - - hook['uids'].each do |node_id| - Astute.logger.debug("Task time summary: #{task_name(hook)} with status" \ - " #{status} on node #{node_id} took #{wasted_time}") - end - end - - def copy_files_hook(hook) - validate_presence(hook, 'uids') - validate_presence(hook['parameters'], 'files') - - ret = {'error' => nil} - hook['parameters']['files'].each do |file| - if File.file?(file['src']) && File.readable?(file['src']) - parameters = { - 'content' => File.binread(file['src']), - 'path' => file['dst'], - 'permissions' => file['permissions'] || hook['parameters']['permissions'], - 'dir_permissions' => file['dir_permissions'] || hook['parameters']['dir_permissions'], - } - perform_with_limit(hook['uids']) do |node_uids| - status = upload_file(@ctx, node_uids, parameters) - if !status - ret['error'] = 'Upload not successful' - end - end - else - ret['error'] = "File does not exist or is not readable #{file['src']}" - Astute.logger.warn(ret['error']) - end - end - ret - end #copy_file_hook - - def puppet_hook(hook) - validate_presence(hook, 'uids') - validate_presence(hook['parameters'], 'puppet_manifest') - validate_presence(hook['parameters'], 'puppet_modules') - validate_presence(hook['parameters'], 'cwd') - - timeout = hook['parameters']['timeout'] || 300 - retries = hook['parameters']['retries'] || Astute.config.puppet_retries - - ret = {'error' => nil} - perform_with_limit(hook['uids']) do |node_uids| - result = run_puppet( - @ctx, - node_uids, - hook['parameters']['puppet_manifest'], - hook['parameters']['puppet_modules'], - hook['parameters']['cwd'], - timeout, - retries - ) - unless result - ret['error'] = "Puppet run failed. Check puppet logs for details" - Astute.logger.warn(ret['error']) - end - end - - ret - end #puppet_hook - - def upload_file_hook(hook) - validate_presence(hook, 'uids') - validate_presence(hook['parameters'], 'path') - validate_presence(hook['parameters'], 'data') - - hook['parameters']['content'] = hook['parameters']['data'] - - ret = {'error' => nil} - perform_with_limit(hook['uids']) do |node_uids| - status = upload_file(@ctx, node_uids, hook['parameters']) - if status == false - ret['error'] = 'File upload failed' - end - end - - ret - end - - def upload_files_hook(hook) - validate_presence(hook['parameters'], 'nodes') - ret = {'error' => nil} - hook['parameters']['nodes'].each do |node| - node['files'].each do |file| - parameters = { - 'content' => file['data'], - 'path' => file['dst'], - 'permissions' => file['permissions'] || '0644', - 'dir_permissions' => file['dir_permissions'] || '0755', - } - status = upload_file(@ctx, node['uid'], parameters) - if !status - ret['error'] = 'File upload failed' - end - end - end - - ret - end - - def shell_hook(hook) - validate_presence(hook, 'uids') - validate_presence(hook['parameters'], 'cmd') - - - timeout = hook['parameters']['timeout'] || 300 - cwd = hook['parameters']['cwd'] || "/" - retries = hook['parameters']['retries'] || Astute.config.mc_retries - interval = hook['parameters']['interval'] || Astute.config.mc_retry_interval - shell_command = "cd #{cwd} && #{hook['parameters']['cmd']}" - - ret = {'error' => nil} - - perform_with_limit(hook['uids']) do |node_uids| - Timeout::timeout(timeout) do - err_msg = run_shell_command( - @ctx, - node_uids, - shell_command, - retries, - interval, - timeout, - cwd - ) - - ret['error'] = "Failed to run command #{shell_command} (#{err_msg})." if err_msg - end - end - - ret - rescue Astute::MClientTimeout, Astute::MClientError, Timeout::Error => e - err = case [e.class] - when [Astute::MClientTimeout] then 'mcollective client timeout error' - when [Astute::MClientError] then 'mcollective client error' - when [Timeout::Error] then 'overall timeout error' - end - - ret['error'] = "command: #{shell_command}" \ - "\n\nTask: #{@ctx.task_id}: " \ - "#{err}: #{e.message}\n" \ - "Task timeout: #{timeout}, " \ - "Retries: #{hook['parameters']['retries']}" - Astute.logger.error(ret['error']) - - ret - end # shell_hook - - def cobbler_sync_hook(hook) - validate_presence(hook['parameters'], 'provisioning_info') - - ret = {'error' => nil} - cobbler = CobblerManager.new( - hook['parameters']['provisioning_info']['engine'], - @ctx.reporter - ) - cobbler.sync - - ret - end # cobbler_sync_hook - - def sync_hook(hook) - validate_presence(hook, 'uids') - validate_presence(hook['parameters'], 'dst') - validate_presence(hook['parameters'], 'src') - - path = hook['parameters']['dst'] - source = hook['parameters']['src'] - - timeout = hook['parameters']['timeout'] || 300 - - rsync_cmd = "mkdir -p #{path} && rsync #{Astute.config.rsync_options} " \ - "#{source} #{path}" - - ret = {'error' => nil} - - perform_with_limit(hook['uids']) do |node_uids| - err_msg = run_shell_command( - @ctx, - node_uids, - rsync_cmd, - 10, - Astute.config.mc_retry_interval, - timeout - ) - - ret = {'error' => "Failed to perform sync from #{source} to #{path} (#{err_msg})"} if err_msg - end - - ret - end # sync_hook - - def reboot_hook(hook) - validate_presence(hook, 'uids') - hook_timeout = hook['parameters']['timeout'] || 300 - - control_time = {} - - perform_with_limit(hook['uids']) do |node_uids| - control_time.merge!(boot_time(node_uids)) - end - - perform_with_limit(hook['uids']) do |node_uids| - run_shell_without_check(@ctx, node_uids, RebootCommand::CMD, timeout=60) - end - - already_rebooted = Hash[hook['uids'].collect { |uid| [uid, false] }] - - ret = {'error' => nil} - - begin - Timeout::timeout(hook_timeout) do - while already_rebooted.values.include?(false) - sleep hook_timeout/10 - - results = boot_time(already_rebooted.select { |k, v| !v }.keys) - results.each do |node_id, time| - next if already_rebooted[node_id] - already_rebooted[node_id] = (time.to_i != control_time[node_id].to_i) - end - end - end - rescue Timeout::Error => e - Astute.logger.warn("Time detection (#{hook_timeout} sec) for node reboot has expired") - end - - if already_rebooted.values.include?(false) - fail_nodes = already_rebooted.select {|k, v| !v }.keys - ret['error'] = "Reboot command failed for nodes #{fail_nodes}. Check debug output for details" - Astute.logger.warn(ret['error']) - end - - update_node_status(already_rebooted.select { |node, rebooted| rebooted }.keys) - - ret - end # reboot_hook - - def validate_presence(data, key) - raise "Missing a required parameter #{key}" unless data[key].present? - end - - def run_puppet(context, node_uids, puppet_manifest, puppet_modules, cwd, timeout, retries) - # Prevent send report status to Nailgun - hook_context = Context.new(context.task_id, HookReporter.new, LogParser::NoParsing.new) - nodes = node_uids.map { |node_id| {'uid' => node_id.to_s, 'role' => 'hook'} } - - Timeout::timeout(timeout) { - PuppetdDeployer.deploy( - hook_context, - nodes, - retries=retries, - puppet_manifest, - puppet_modules, - cwd - ) - } - - !hook_context.status.has_value?('error') - rescue Astute::MClientTimeout, Astute::MClientError, Timeout::Error => e - Astute.logger.error("#{context.task_id}: puppet timeout error: #{e.message}") - false - end - - def run_shell_command(context, node_uids, cmd, shell_retries, interval, timeout=60, cwd="/tmp") - responses = nil - (shell_retries + 1).times.each do |retry_number| - shell = MClient.new(context, - 'execute_shell_command', - node_uids, - check_result=true, - timeout=timeout, - retries=1) - - begin - responses = shell.execute(:cmd => cmd, :cwd => cwd) - rescue MClientTimeout, MClientError => e - Astute.logger.error "#{context.task_id}: cmd: #{cmd} \n" \ - "mcollective error: #{e.message}" - next - end - responses.each do |response| - Astute.logger.debug( - "#{context.task_id}: cmd: #{cmd}\n" \ - "cwd: #{cwd}\n" \ - "stdout: #{response[:data][:stdout]}\n" \ - "stderr: #{response[:data][:stderr]}\n" \ - "exit code: #{response[:data][:exit_code]}") - end - - node_uids -= responses.select { |response| response[:data][:exit_code] == 0 } - .map { |response| response[:sender] } - return nil if node_uids.empty? - Astute.logger.warn "Problem while performing cmd on nodes: #{node_uids}. " \ - "Retrying... Attempt #{retry_number} of #{shell_retries}" - sleep interval - end - - if responses - responses.select { |response| response[:data][:exit_code] != 0 } - .map {|r| "node #{r[:sender]} returned #{r[:data][:exit_code]}"} - .join(", ") - else - "mclient failed to execute command" - end - end - - def upload_file(context, node_uids, mco_params={}) - upload_mclient = Astute::MClient.new(context, "uploadfile", Array(node_uids)) - - mco_params['overwrite'] = true if mco_params['overwrite'].nil? - mco_params['parents'] = true if mco_params['parents'].nil? - mco_params['permissions'] ||= '0644' - mco_params['user_owner'] ||= 'root' - mco_params['group_owner'] ||= 'root' - mco_params['dir_permissions'] ||= '0755' - - upload_mclient.upload( - :path => mco_params['path'], - :content => mco_params['content'], - :overwrite => mco_params['overwrite'], - :parents => mco_params['parents'], - :permissions => mco_params['permissions'], - :user_owner => mco_params['user_owner'], - :group_owner => mco_params['group_owner'], - :dir_permissions => mco_params['dir_permissions'] - ) - - true - rescue MClientTimeout, MClientError => e - Astute.logger.error("#{context.task_id}: mcollective upload_file agent error: #{e.message}") - false - end - - def perform_with_limit(nodes, &block) - nodes.each_slice(Astute.config[:max_nodes_per_call]) do |part| - block.call(part) - end - end - - def run_shell_without_check(context, node_uids, cmd, timeout=10) - shell = MClient.new( - context, - 'execute_shell_command', - node_uids, - check_result=false, - timeout=timeout - ) - results = shell.execute(:cmd => cmd) - results.inject({}) do |h, res| - Astute.logger.debug( - "#{context.task_id}: cmd: #{cmd}\n" \ - "stdout: #{res.results[:data][:stdout]}\n" \ - "stderr: #{res.results[:data][:stderr]}\n" \ - "exit code: #{res.results[:data][:exit_code]}") - h.merge({res.results[:sender] => res.results[:data][:stdout].chomp}) - end - end - - def boot_time(uids) - run_shell_without_check( - @ctx, - uids, - "stat --printf='%Y' /proc/1", - timeout=10 - ) - end - - def update_node_status(uids) - run_shell_without_check( - @ctx, - uids, - "flock -w 0 -o /var/lock/nailgun-agent.lock -c '/usr/bin/nailgun-agent"\ - " 2>&1 | tee -a /var/log/nailgun-agent.log | "\ - "/usr/bin/logger -t nailgun-agent'", - _timeout=60 # nailgun-agent start with random (30) delay - ) - end - - end # class - - class HookReporter - def report(msg) - Astute.logger.debug msg - end - end - -end # module diff --git a/lib/astute/network.rb b/lib/astute/network.rb deleted file mode 100644 index e41c952d..00000000 --- a/lib/astute/network.rb +++ /dev/null @@ -1,280 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - module Network - - def self.check_network(ctx, nodes) - if nodes.empty? - Astute.logger.info( - "#{ctx.task_id}: Network checker: nodes list is empty. Nothing to check.") - return { - 'status' => 'error', - 'error' => "Network verification requires a minimum of two nodes." - } - elsif nodes.length == 1 - Astute.logger.info( - "#{ctx.task_id}: Network checker: nodes list contains one node only. Do nothing.") - return {'nodes' => [{ - 'uid' => nodes[0]['uid'], - 'networks' => nodes[0]['networks'] - }]} - end - - uids = nodes.map { |node| node['uid'].to_s } - # TODO Everything breakes if agent not found. We have to handle that - net_probe = MClient.new(ctx, "net_probe", uids) - - versioning = Versioning.new(ctx) - old_version, new_version = versioning.split_on_version(uids, '6.1.0') - - old_uids = old_version.map { |node| node['uid'].to_i } - new_uids = new_version.map { |node| node['uid'].to_i } - old_nodes = nodes.select { |node| old_uids.include? node['uid'] } - new_nodes = nodes.select { |node| new_uids.include? node['uid'] } - - if old_uids.present? - start_frame_listeners_60(ctx, net_probe, old_nodes) - end - - if new_uids.present? - start_frame_listeners(ctx, net_probe, new_nodes) - end - ctx.reporter.report({'progress' => 30}) - - if old_uids.present? - send_probing_frames_60(ctx, net_probe, old_nodes) - end - - if new_uids.present? - send_probing_frames(ctx, net_probe, new_nodes) - end - ctx.reporter.report({'progress' => 60}) - - net_probe.discover(:nodes => uids) - stats = net_probe.get_probing_info - result = format_result(stats) - Astute.logger.debug "#{ctx.task_id}: Network checking is done. Results:\n#{result.pretty_inspect}" - - {'nodes' => result} - end - - def self.check_dhcp(ctx, nodes) - uids = nodes.map { |node| node['uid'].to_s } - net_probe = MClient.new(ctx, "net_probe", uids) - - data_to_send = {} - nodes.each do |node| - data_to_send[node['uid'].to_s] = make_interfaces_to_send(node['networks'], joined=false).to_json - end - repeat = Astute.config.dhcp_repeat - result = net_probe.dhcp_discover(:interfaces => data_to_send, - :timeout => 10, :repeat => repeat).map do |response| - format_dhcp_response(response) - end - - status = result.any?{|node| node[:status] == 'error'} && 'error' || 'ready' - - {'nodes' => result, 'status'=> status} - end - - def self.multicast_verification(ctx, nodes) - uids = nodes.map { |node| node['uid'].to_s } - net_probe = MClient.new(ctx, "net_probe", uids) - data_to_send = {} - nodes.each do |node| - data_to_send[node['uid']] = node - end - - listen_resp = net_probe.multicast_listen(:nodes => data_to_send.to_json) - Astute.logger.debug("Mutlicast verification listen:\n#{listen_resp.pretty_inspect}") - ctx.reporter.report({'progress' => 30}) - - send_resp = net_probe.multicast_send() - Astute.logger.debug("Mutlicast verification send:\n#{send_resp.pretty_inspect}") - ctx.reporter.report({'progress' => 60}) - - results = net_probe.multicast_info() - Astute.logger.debug("Mutlicast verification info:\n#{results.pretty_inspect}") - response = {} - results.each do |node| - if node.results[:data][:out].present? - response[node.results[:sender].to_i] = JSON.parse(node.results[:data][:out]) - end - end - {'nodes' => response} - end - - def self.check_urls_access(ctx, nodes, urls) - uids = nodes.map { |node| node['uid'].to_s } - net_probe = MClient.new(ctx, "net_probe", uids) - - result = net_probe.check_url_retrieval(:urls => urls) - - {'nodes' => flatten_response(result), 'status'=> 'ready'} - end - - def self.check_repositories_with_setup(ctx, nodes) - uids = nodes.map { |node| node['uid'].to_s } - net_probe = MClient.new(ctx, "net_probe", uids, check_result=false) - - data = nodes.inject({}) { |h, node| h.merge({node['uid'].to_s => node}) } - - result = net_probe.check_repositories_with_setup(:data => data) - bad_nodes = nodes.map { |n| n['uid'] } - result.map { |n| n.results[:sender] } - - if bad_nodes.present? - error_msg = "Astute could not get result from nodes #{bad_nodes}. " \ - "Please check mcollective log on problem nodes " \ - "for more details. Hint: try to execute check manually " \ - "using command from mcollective log on nodes, also " \ - "check nodes availability using command `mco ping` " \ - "on master node." - raise MClientTimeout, error_msg - end - - {'nodes' => flatten_response(result), 'status'=> 'ready'} - end - - private - def self.start_frame_listeners(ctx, net_probe, nodes) - data_to_send = {} - nodes.each do |node| - data_to_send[node['uid'].to_s] = make_interfaces_to_send(node['networks']) - end - - uids = nodes.map { |node| node['uid'].to_s } - - Astute.logger.debug( - "#{ctx.task_id}: Network checker listen: nodes: #{uids} data:\n#{data_to_send.pretty_inspect}") - - net_probe.discover(:nodes => uids) - net_probe.start_frame_listeners(:interfaces => data_to_send.to_json) - end - - def self.send_probing_frames(ctx, net_probe, nodes) - nodes.each_slice(Astute.config[:max_nodes_net_validation]) do |nodes_part| - data_to_send = {} - nodes_part.each do |node| - data_to_send[node['uid'].to_s] = make_interfaces_to_send(node['networks']) - end - - uids = nodes_part.map { |node| node['uid'].to_s } - - Astute.logger.debug( - "#{ctx.task_id}: Network checker send: nodes: #{uids} data:\n#{data_to_send.pretty_inspect}") - - net_probe.discover(:nodes => uids) - net_probe.send_probing_frames(:interfaces => data_to_send.to_json) - end - end - - def self.start_frame_listeners_60(ctx, net_probe, nodes) - nodes.each do |node| - data_to_send = make_interfaces_to_send(node['networks']) - - Astute.logger.debug( - "#{ctx.task_id}: Network checker listen: node: #{node['uid']} data:\n#{data_to_send.pretty_inspect}") - - net_probe.discover(:nodes => [node['uid'].to_s]) - net_probe.start_frame_listeners(:interfaces => data_to_send.to_json) - end - end - - def self.send_probing_frames_60(ctx, net_probe, nodes) - nodes.each do |node| - data_to_send = make_interfaces_to_send(node['networks']) - - Astute.logger.debug( - "#{ctx.task_id}: Network checker send: node: #{node['uid']} data:\n#{data_to_send.pretty_inspect}") - - net_probe.discover(:nodes => [node['uid'].to_s]) - net_probe.send_probing_frames(:interfaces => data_to_send.to_json) - end - end - - def self.make_interfaces_to_send(networks, joined=true) - data_to_send = {} - networks.each do |network| - if joined - data_to_send[network['iface']] = network['vlans'].join(",") - else - data_to_send[network['iface']] = network['vlans'] - end - end - - data_to_send - end - - def self.format_dhcp_response(response) - node_result = {:uid => response.results[:sender], - :status=>'ready'} - if response.results[:data][:out].present? - Astute.logger.debug("DHCP checker received:\n#{response.pretty_inspect}") - node_result[:data] = JSON.parse(response.results[:data][:out]) - elsif response.results[:data][:err].present? - Astute.logger.debug("DHCP checker errred with:\n#{response.pretty_inspect}") - node_result[:status] = 'error' - node_result[:error_msg] = 'Error in dhcp checker. Check logs for details' - end - node_result - end - - def self.format_result(stats) - uids = stats.map{|node| node.results[:sender]}.sort - stats.map do |node| - { - 'uid' => node.results[:sender], - 'networks' => check_vlans_by_traffic( - node.results[:sender], - uids, - node.results[:data][:neighbours]) - } - end - end - - def self.flatten_response(response) - response.map do |node| - {:out => node.results[:data][:out], - :err => node.results[:data][:err], - :status => node.results[:data][:status], - :uid => node.results[:sender]} - end - end - - def self.check_vlans_by_traffic(uid, uids, data) - data.map do |iface, vlans| - { - 'iface' => iface, - 'vlans' => remove_extra_data(uid, uids, vlans).select {|k,v| - v.keys.present? - }.keys.map(&:to_i) - } - end - end - - # Remove unnecessary data - def self.remove_extra_data(uid, uids, vlans) - vlans.each do |k, data| - # remove data sent by node itself - data.delete(uid) - # remove data sent by nodes from different envs - data.keep_if { |k, v| uids.include?(k) } - end - vlans - end - - end -end - diff --git a/lib/astute/node.rb b/lib/astute/node.rb deleted file mode 100644 index 0c54f567..00000000 --- a/lib/astute/node.rb +++ /dev/null @@ -1,101 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -require 'active_support/core_ext/hash/indifferent_access' -require 'ostruct' - -module Astute - class Node < OpenStruct - def initialize(hash=nil) - if hash && (uid = hash['uid']) - hash = hash.dup - hash['uid'] = uid.to_s - else - raise TypeError.new("Invalid data: #{hash.inspect}") - end - super hash - end - - def [](key) - send key - end - - def []=(key, value) - send "#{key}=", value - end - - def uid - @table[:uid] - end - - def uid=(_) - raise TypeError.new('Read-only attribute') - end - - def to_hash - @table.with_indifferent_access - end - - def fetch(key, default) - ret = self[key] - if ret.nil? - ret = default - end - ret - end - end - - class NodesHash < Hash - alias uids keys - alias nodes values - - def self.build(nodes) - return nodes if nodes.kind_of? self - nodes.inject(self.new) do |hash, node| - hash << node - hash - end - end - - def <<(node) - node = normalize_value(node) - self[node.uid] = node - self - end - - def push(*nodes) - nodes.each{|node| self.<< node } - self - end - - def [](key) - super key.to_s - end - - private - - def []=(*args) - super - end - - def normalize_value(node) - if node.kind_of? Node - node - else - Node.new(node.to_hash) - end - end - end -end \ No newline at end of file diff --git a/lib/astute/nodes_remover.rb b/lib/astute/nodes_remover.rb deleted file mode 100644 index 80ba31ae..00000000 --- a/lib/astute/nodes_remover.rb +++ /dev/null @@ -1,197 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -module Astute - class NodesRemover - - def initialize(ctx, nodes, reboot=true) - @ctx = ctx - @nodes = NodesHash.build(nodes) - @reboot = reboot - end - - def remove - # TODO(mihgen): 1. Nailgun should process node error message - # 2. Should we rename nodes -> removed_nodes array? - # 3. If exception is raised here, we should not fully fall into error, but only failed node - erased_nodes, error_nodes, inaccessible_nodes = remove_nodes(@nodes) - retry_remove_nodes(error_nodes, erased_nodes, - Astute.config[:mc_retries], Astute.config[:mc_retry_interval]) - - retry_remove_nodes(inaccessible_nodes, erased_nodes, - Astute.config[:mc_retries], Astute.config[:mc_retry_interval]) - - answer = {'nodes' => serialize_nodes(erased_nodes)} - - if inaccessible_nodes.present? - serialized_inaccessible_nodes = serialize_nodes(inaccessible_nodes) - answer.merge!({'inaccessible_nodes' => serialized_inaccessible_nodes}) - - Astute.logger.warn "#{@ctx.task_id}: Removing of nodes\n#{@nodes.uids.pretty_inspect} finished " \ - "with errors. Nodes\n#{serialized_inaccessible_nodes.pretty_inspect} are inaccessible" - end - - if error_nodes.present? - serialized_error_nodes = serialize_nodes(error_nodes) - answer.merge!({'status' => 'error', 'error_nodes' => serialized_error_nodes}) - - Astute.logger.error "#{@ctx.task_id}: Removing of nodes\n#{@nodes.uids.pretty_inspect} finished " \ - "with errors:\n#{serialized_error_nodes.pretty_inspect}" - end - Astute.logger.info "#{@ctx.task_id}: Finished removing of nodes:\n#{@nodes.uids.pretty_inspect}" - - answer - end - - private - - def serialize_nodes(nodes) - nodes.nodes.map(&:to_hash) - end - - # When :mclient_remove property is true (the default behavior), we send - # the node to mclient for removal (MBR, restarting etc), if it's false - # the node is skipped from mclient - def skipped_unskipped_mclient_nodes(nodes) - mclient_skipped_nodes = NodesHash.build( - nodes.values.select { |node| not node.fetch(:mclient_remove, true) } - ) - mclient_nodes = NodesHash.build( - nodes.values.select { |node| node.fetch(:mclient_remove, true) } - ) - - Astute.logger.debug "#{@ctx.task_id}: Split nodes: #{mclient_skipped_nodes}, #{mclient_nodes}" - - [mclient_skipped_nodes, mclient_nodes] - end - - def get_already_removed_nodes(nodes) - removed_nodes = [] - control_time = {} - - nodes.uids.sort.each_slice(Astute.config[:max_nodes_per_call]) do |part| - control_time.merge!(get_boot_time(part)) - end - - nodes.each do |uid, node| - boot_time = control_time[uid].to_i - next if boot_time.zero? - if node.boot_time - removed_nodes << uid if boot_time != node.boot_time - else - node.boot_time = boot_time - end - end - removed_nodes - end - - def remove_nodes(nodes) - if nodes.empty? - Astute.logger.info "#{@ctx.task_id}: Nodes to remove are not provided. Do nothing." - return Array.new(3){ NodesHash.new } - end - - erased_nodes, mclient_nodes = skipped_unskipped_mclient_nodes(nodes) - - removed_nodes = get_already_removed_nodes(mclient_nodes) - removed_nodes.each do |uid| - erased_node = Node.new('uid' => uid) - erased_nodes << erased_node - mclient_nodes.delete(uid) - Astute.logger.info "#{@ctx.task_id}: Node #{uid} is removed already, skipping" - end - - responses = mclient_remove_nodes(mclient_nodes) - inaccessible_uids = mclient_nodes.uids - responses.map { |response| response[:sender] } - inaccessible_nodes = NodesHash.build(inaccessible_uids.map do |uid| - {'uid' => uid, 'error' => 'Node not answered by RPC.', 'boot_time' => mclient_nodes[uid][:boot_time]} - end) - error_nodes = NodesHash.new - - responses.each do |response| - node = Node.new('uid' => response[:sender]) - if response[:statuscode] != 0 - node['error'] = "RPC agent 'erase_node' failed. Result:\n#{response.pretty_inspect}" - error_nodes << node - elsif @reboot && !response[:data][:rebooted] - node['error'] = "RPC method 'erase_node' failed with message: #{response[:data][:error_msg]}" - error_nodes << node - else - erased_nodes << node - end - end - [erased_nodes, error_nodes, inaccessible_nodes] - end - - def retry_remove_nodes(error_nodes, erased_nodes, retries=3, interval=1) - retries.times do - retried_erased_nodes = remove_nodes(error_nodes)[0] - retried_erased_nodes.each do |uid, node| - error_nodes.delete uid - erased_nodes << node - end - return if error_nodes.empty? - sleep(interval) if interval > 0 - end - end - - def mclient_remove_nodes(nodes) - Astute.logger.info "#{@ctx.task_id}: Starting removing of nodes:\n#{nodes.uids.pretty_inspect}" - results = [] - - nodes.uids.sort.each_slice(Astute.config[:max_nodes_per_remove_call]).with_index do |part, i| - sleep Astute.config[:nodes_remove_interval] if i != 0 - results += mclient_remove_piece_nodes(part) - end - results - end - - def mclient_remove_piece_nodes(nodes) - remover = MClient.new(@ctx, "erase_node", nodes, check_result=false) - responses = remover.erase_node(:reboot => @reboot) - Astute.logger.debug "#{@ctx.task_id}: Data received from nodes:\n#{responses.pretty_inspect}" - responses.map(&:results) - end - - def run_shell_without_check(context, node_uids, cmd, timeout=10) - shell = MClient.new( - context, - 'execute_shell_command', - node_uids, - check_result=false, - timeout=timeout - ) - results = shell.execute(:cmd => cmd) - results.inject({}) do |h, res| - Astute.logger.debug( - "#{context.task_id}: cmd: #{cmd}\n" \ - "stdout: #{res.results[:data][:stdout]}\n" \ - "stderr: #{res.results[:data][:stderr]}\n" \ - "exit code: #{res.results[:data][:exit_code]}") - h.merge({res.results[:sender] => res.results[:data][:stdout].chomp}) - end - end - - def get_boot_time(node_uids) - run_shell_without_check( - @ctx, - node_uids, - "stat --printf='%Y' /proc/1", - timeout=10 - ) - end - - end -end diff --git a/lib/astute/orchestrator.rb b/lib/astute/orchestrator.rb deleted file mode 100644 index 3d9c89ab..00000000 --- a/lib/astute/orchestrator.rb +++ /dev/null @@ -1,296 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - - class Orchestrator - def initialize(log_parsing=false) - @log_parsing = log_parsing - end - - def node_type(reporter, task_id, nodes_uids, timeout=nil) - provisioner = Provisioner.new(@log_parsing) - provisioner.node_type(reporter, task_id, nodes_uids, timeout) - end - - def execute_tasks(up_reporter, task_id, tasks) - ctx = Context.new(task_id, up_reporter) - Astute::NailgunHooks.new(tasks, ctx, 'execute_tasks').process - report_result({}, up_reporter) - end - - # Deploy method which use small tasks, but run block of tasks for role - # instead of run it using full graph. Use from 6.1 to 8.0. Report progress - # based on puppet logs - def granular_deploy(up_reporter, task_id, deployment_info, pre_deployment=[], post_deployment=[]) - time_start = Time.now.to_i - deploy_cluster( - up_reporter, - task_id, - deployment_info, - Astute::DeploymentEngine::GranularDeployment, - pre_deployment, - post_deployment - ) - ensure - Astute.logger.info "Deployment summary: time was spent " \ - "#{time_summary(time_start)}" - end - - # Deploy method which use small tasks in full graph. - # Use from 8.0 (experimental). Report progress based on tasks - def task_deploy(up_reporter, task_id, deployment_options = {}) - time_start = Time.now.to_i - proxy_reporter = ProxyReporter::TaskProxyReporter.new( - up_reporter - ) - context = Context.new(task_id, proxy_reporter) - Astute.logger.info "Task based deployment will be used" - - deployment_engine = TaskDeployment.new(context) - write_input_data_to_file(context, deployment_options) if Astute.config.enable_graph_file - deployment_engine.deploy(deployment_options) - ensure - Astute.logger.info "Deployment summary: time was spent " \ - "#{time_summary(time_start)}" - end - - def provision(up_reporter, task_id, provisioning_info) - time_start = Time.now.to_i - proxy_reporter = ProxyReporter::ProvisiningProxyReporter.new( - up_reporter, - provisioning_info - ) - provisioner = Provisioner.new(@log_parsing) - if provisioning_info['pre_provision'] - image_build_log = "/var/log/fuel-agent-env" \ - "-#{calculate_cluster_id(provisioning_info)}.log" - Astute.logger.info "Please check image build log here: " \ - "#{image_build_log}" - ctx = Context.new(task_id, proxy_reporter) - provisioner.report_image_provision( - proxy_reporter, - task_id, - provisioning_info['nodes'], - image_log_parser(provisioning_info) - ) do - begin - Astute::NailgunHooks.new( - provisioning_info['pre_provision'], - ctx, - 'provision' - ).process - rescue Astute::DeploymentEngineError => e - raise e, "Image build task failed. Please check " \ - "build log here for details: #{image_build_log}. " \ - "Hint: restart deployment can help if no error in build " \ - "log was found" - end - end - end - - # NOTE(kozhukalov): Some of our pre-provision tasks need cobbler to be synced - # once those tasks are finished. It looks like the easiest way to do this - # inside mcollective docker container is to use Astute binding capabilities. - cobbler = CobblerManager.new(provisioning_info['engine'], up_reporter) - cobbler.sync - - provisioner.provision( - proxy_reporter, - task_id, - provisioning_info - ) - ensure - Astute.logger.info "Provision summary: time was spent " \ - "#{time_summary(time_start)}" - end - - def remove_nodes(reporter, task_id, engine_attrs, nodes, options={}) - # FIXME(vsharshov): bug/1463881: In case of post deployment we mark all nodes - # as ready. In this case we will get empty nodes. - return if nodes.empty? - - options.reverse_merge!({ - :reboot => true, - :raise_if_error => false, - :reset => false - }) - - result = perform_pre_deletion_tasks(reporter, task_id, nodes, options) - return result if result['status'] != 'ready' - - provisioner = Provisioner.new(@log_parsing) - provisioner.remove_nodes( - reporter, - task_id, - engine_attrs, - nodes, - options - ) - end - - def stop_puppet_deploy(reporter, task_id, nodes) - # FIXME(vsharshov): bug/1463881: In case of post deployment we mark all nodes - # as ready. If we run stop deployment we will get empty nodes. - return if nodes.empty? - - nodes_uids = nodes.map { |n| n['uid'] }.uniq - puppetd = MClient.new(Context.new(task_id, reporter), "puppetd", nodes_uids, check_result=false) - puppetd.stop_and_disable - end - - def stop_provision(reporter, task_id, engine_attrs, nodes) - provisioner = Provisioner.new(@log_parsing) - provisioner.stop_provision(reporter, task_id, engine_attrs, nodes) - end - - def dump_environment(reporter, task_id, settings) - Dump.dump_environment(Context.new(task_id, reporter), settings) - end - - def verify_networks(reporter, task_id, nodes) - ctx = Context.new(task_id, reporter) - validate_nodes_access(ctx, nodes) - Network.check_network(ctx, nodes) - end - - def check_dhcp(reporter, task_id, nodes) - ctx = Context.new(task_id, reporter) - validate_nodes_access(ctx, nodes) - Network.check_dhcp(ctx, nodes) - end - - def multicast_verification(reporter, task_id, nodes) - ctx = Context.new(task_id, reporter) - validate_nodes_access(ctx, nodes) - Network.multicast_verification(ctx, nodes) - end - - def check_repositories(reporter, task_id, nodes, urls) - ctx = Context.new(task_id, reporter) - validate_nodes_access(ctx, nodes) - Network.check_urls_access(ctx, nodes, urls) - end - - def check_repositories_with_setup(reporter, task_id, nodes) - ctx = Context.new(task_id, reporter) - validate_nodes_access(ctx, nodes) - Network.check_repositories_with_setup(ctx, nodes) - end - - private - - def deploy_cluster(up_reporter, task_id, deployment_info, deploy_engine, pre_deployment, post_deployment) - proxy_reporter = ProxyReporter::DeploymentProxyReporter.new(up_reporter, deployment_info) - log_parser = @log_parsing ? LogParser::ParseDeployLogs.new : LogParser::NoParsing.new - context = Context.new(task_id, proxy_reporter, log_parser) - deploy_engine_instance = deploy_engine.new(context) - Astute.logger.info "Using #{deploy_engine_instance.class} for deployment." - - deploy_engine_instance.deploy(deployment_info, pre_deployment, post_deployment) - - context.status - end - - def report_result(result, reporter) - default_result = {'status' => 'ready', 'progress' => 100} - - result = {} unless result.instance_of?(Hash) - status = default_result.merge(result) - reporter.report(status) - end - - def validate_nodes_access(ctx, nodes) - nodes_types = node_type(ctx.reporter, ctx.task_id, nodes.map{ |n| n['uid'] }, timeout=10) - not_available_nodes = nodes.map { |n| n['uid'].to_s } - nodes_types.map { |n| n['uid'].to_s } - unless not_available_nodes.empty? - raise "Network verification not available because nodes #{not_available_nodes} " \ - "not available via mcollective" - end - end - - def image_log_parser(provisioning_info) - log_parser = LogParser::ParseImageBuildLogs.new - log_parser.cluster_id = calculate_cluster_id(provisioning_info) - log_parser - end - - def calculate_cluster_id(provisioning_info) - return nil unless provisioning_info['pre_provision'].present? - cmd = provisioning_info['pre_provision'].first.fetch('parameters', {}).fetch('cmd', "") - # find cluster id from cmd using pattern fuel-agent-env-.log - # FIXME(vsharshov): https://bugs.launchpad.net/fuel/+bug/1449512 - cluster_id = cmd[/fuel-agent-env-(\d+)/, 1] - Astute.logger.debug "Cluster id: #{cluster_id}" - cluster_id - end - - def check_for_offline_nodes(reporter, task_id, nodes) - PreDelete.check_for_offline_nodes(Context.new(task_id, reporter), nodes) - end - - def check_ceph_osds(reporter, task_id, nodes) - PreDelete.check_ceph_osds(Context.new(task_id, reporter), nodes) - end - - def remove_ceph_mons(reporter, task_id, nodes) - PreDelete.remove_ceph_mons(Context.new(task_id, reporter), nodes) - end - - def perform_pre_deletion_tasks(reporter, task_id, nodes, options={}) - result = {'status' => 'ready'} - # This option is no longer Ceph-specific and should be renamed - # FIXME(rmoe): https://bugs.launchpad.net/fuel/+bug/1454377 - if options[:check_ceph] - result = check_for_offline_nodes(reporter, task_id, nodes) - return result if result['status'] != 'ready' - result = check_ceph_osds(reporter, task_id, nodes) - return result if result['status'] != 'ready' - result = remove_ceph_mons(reporter, task_id, nodes) - end - result - end - - def time_summary(time) - amount_time = (Time.now.to_i - time).to_i - Time.at(amount_time).utc.strftime("%H:%M:%S") - end - - # Dump the task graph data to a file - # @param [Astute::Context] context - # @param [Hash] data - def write_input_data_to_file(context, data={}) - yaml_file = File.join( - Astute.config.graph_dot_dir, - "graph-#{context.task_id}.yaml" - ) - data = filter_sensitive_data(data) - File.open(yaml_file, 'w') { |f| f.write(YAML.dump(data)) } - Astute.logger.info("Check inpute data file #{yaml_file}") - end - - # Remove the potentially sensitive data - # from the task parameters before dumping the graph - # @param [Hash] data - # @return [Hash] - def filter_sensitive_data(data) - data = data.deep_dup - data[:tasks_graph].each do |_node_id, tasks| - tasks.each { |task| task.delete('parameters') } - end - data - end - - end # class -end # module diff --git a/lib/astute/post_deploy_actions/post_patching_ha.rb b/lib/astute/post_deploy_actions/post_patching_ha.rb deleted file mode 100644 index eddadab9..00000000 --- a/lib/astute/post_deploy_actions/post_patching_ha.rb +++ /dev/null @@ -1,40 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - class PostPatchingHa < PostDeployAction - - def process(deployment_info, context) - return if deployment_info.first['openstack_version_prev'].nil? || - deployment_info.first['deployment_mode'] !~ /ha/i - - controller_nodes = deployment_info.select{ |n| n['role'] =~ /controller/i }.map{ |n| n['uid'] } - return if controller_nodes.empty? - - Astute.logger.info "Starting unmigration of pacemaker services from " \ - "nodes\n#{controller_nodes.pretty_inspect}" - - Astute::Pacemaker.commands(action='start', deployment_info).each do |pcmk_unban_cmd| - response = run_shell_command(context, controller_nodes, pcmk_unban_cmd) - - if response[:data][:exit_code] != 0 - Astute.logger.warn "#{context.task_id}: Failed to unban service, "\ - "check the debugging output for details" - end - end - - Astute.logger.info "#{context.task_id}: Finished post-patching-ha hook" - end #process - end #class -end diff --git a/lib/astute/post_deployment_actions/restart_radosgw.rb b/lib/astute/post_deployment_actions/restart_radosgw.rb deleted file mode 100644 index 576aa862..00000000 --- a/lib/astute/post_deployment_actions/restart_radosgw.rb +++ /dev/null @@ -1,44 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - class RestartRadosgw < PostDeploymentAction - - def process(deployment_info, context) - ceph_node = deployment_info.find { |n| n['role'] == 'ceph-osd' } - objects_ceph = ceph_node && ceph_node.fetch('storage', {}).fetch('objects_ceph') - - return unless objects_ceph - Astute.logger.info "Start restarting radosgw on controller nodes" - - cmd = <<-RESTART_RADOSGW - (test -f /etc/init.d/ceph-radosgw && /etc/init.d/ceph-radosgw restart) || - (test -f /etc/init.d/radosgw && /etc/init.d/radosgw restart); - RESTART_RADOSGW - cmd.tr!("\n"," ") - - controller_nodes = deployment_info.first['nodes'].inject([]) do |c_n, n| - c_n << n['uid'] if ['controller', 'primary-controller'].include? n['role'] - c_n - end - - response = run_shell_command(context, controller_nodes, cmd) - if response[:data][:exit_code] != 0 - Astute.logger.warn "#{context.task_id}: Fail to restart radosgw, "\ - "check the debugging output for details" - end - Astute.logger.info "#{context.task_id}: Finish restarting radosgw on controller nodes" - end #process - end #class -end diff --git a/lib/astute/post_deployment_actions/update_cluster_hosts_info.rb b/lib/astute/post_deployment_actions/update_cluster_hosts_info.rb deleted file mode 100644 index 7182d60f..00000000 --- a/lib/astute/post_deployment_actions/update_cluster_hosts_info.rb +++ /dev/null @@ -1,65 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - - class UpdateClusterHostsInfo < PostDeploymentAction - - def process(deployment_info, context) - Astute.logger.info "Updating /etc/hosts in all cluster nodes" - return if deployment_info.empty? - - response = nil - deployment_info.first['nodes'].each do |node| - upload_file(node['uid'], - deployment_info.first['nodes'].to_yaml, - context) - - cmd = <<-UPDATE_HOSTS - ruby -r 'yaml' -e 'y = YAML.load_file("/etc/astute.yaml"); - y["nodes"] = YAML.load_file("/tmp/astute.yaml"); - File.open("/etc/astute.yaml", "w") { |f| f.write y.to_yaml }'; - puppet apply --logdest syslog --debug -e '$settings=parseyaml($::astute_settings_yaml) - $nodes_hash=$settings["nodes"] - class {"l23network::hosts_file": nodes => $nodes_hash }' - UPDATE_HOSTS - cmd.tr!("\n"," ") - - response = run_shell_command(context, Array(node['uid']), cmd) - if response[:data][:exit_code] != 0 - Astute.logger.warn "#{context.task_id}: Fail to update /etc/hosts, "\ - "check the debugging output for node "\ - "#{node['uid']} for details" - end - end - - Astute.logger.info "#{context.task_id}: Updating /etc/hosts is done" - end - - private - - def upload_file(node_uid, content, context) - upload_mclient = Astute::MClient.new(context, "uploadfile", Array(node_uid)) - upload_mclient.upload(:path => "/tmp/astute.yaml", - :content => content, - :overwrite => true, - :parents => true, - :permissions => '0600' - ) - rescue MClientTimeout, MClientError => e - Astute.logger.error("#{context.task_id}: mcollective upload_file agent error: #{e.message}") - end - - end #class -end diff --git a/lib/astute/post_deployment_actions/update_no_quorum_policy.rb b/lib/astute/post_deployment_actions/update_no_quorum_policy.rb deleted file mode 100644 index 3722e0e5..00000000 --- a/lib/astute/post_deployment_actions/update_no_quorum_policy.rb +++ /dev/null @@ -1,75 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - class UpdateNoQuorumPolicy < PostDeploymentAction - - def process(deployment_info, context) - return if deployment_info.first['deployment_mode'] !~ /ha/i - - # NOTE(bogdando) use 'suicide' if fencing is enabled in corosync - xml = <<-EOF - - - - - - - - - - - - - - - - - - - - - - - - - EOF - cmd = "/usr/sbin/cibadmin --patch --sync-call --xml-text '#{xml}'" - cmd.tr!("\n"," ") - - controllers_count = deployment_info.select {|n| - ['controller', 'primary-controller'].include? n['role'] - }.size - if controllers_count > 2 - primary_controller = deployment_info.find {|n| n['role'] == 'primary-controller' } - if context.status[primary_controller['uid']] == 'error' - Astute.logger.info "Update quorum policy for corosync cluster " \ - "disabled because of primary-controller status is error" - return - end - - Astute.logger.info "Started updating no quorum policy for corosync cluster" - response = run_shell_command(context, Array(primary_controller['uid']), cmd) - if response[:data][:exit_code] != 0 - Astute.logger.warn "#{context.task_id}: Failed to update no "\ - "quorum policy for corosync cluster," - end - Astute.logger.info "#{context.task_id}: Finished updating "\ - "no quorum policy for corosync cluster" - else - Astute.logger.info "No need to update quorum policy for corosync cluster" - end - end #process - end #class -end diff --git a/lib/astute/post_deployment_actions/upload_cirros_image.rb b/lib/astute/post_deployment_actions/upload_cirros_image.rb deleted file mode 100644 index fd12724e..00000000 --- a/lib/astute/post_deployment_actions/upload_cirros_image.rb +++ /dev/null @@ -1,111 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - - class CirrosError < AstuteError; end - - class UploadCirrosImage < PostDeploymentAction - - def process(deployment_info, context) - # Mark controller node as error if present - node = deployment_info.find { |n| n['role'] == 'primary-controller' } - node = deployment_info.find { |n| n['role'] == 'controller' } unless node - node = deployment_info.last unless node - - controller = node['nodes'].find { |n| n['role'] == 'primary-controller' } - controller = node['nodes'].find { |n| n['role'] == 'controller' } unless controller - - if controller.nil? - Astute.logger.debug "Could not find controller in nodes in facts! " \ - "Please check logs to be sure that it is correctly generated." - return - end - # controller['test_vm_image'] contains a hash like that: - # controller['test_vm_image'] = { - # 'disk_format' => 'qcow2', - # 'container_format' => 'bare', - # 'public' => 'true', - # 'img_name' => 'TestVM', - # 'os_name' => 'cirros', - # 'img_path' => '/opt/vm/cirros-x86_64-disk.img', - # 'glance_properties' => '--property murano_image_info=\'{\"title\": \"Murano Demo\", \"type\": \"cirros.demo\"}\'' - # } - - os = node['test_vm_image'] - cmd = ". /root/openrc && /usr/bin/glance image-list" - - # waited until the glance is started because when vCenter used as a glance - # backend launch may takes up to 1 minute. - response = {} - 5.times.each do |retries| - sleep 10 if retries > 0 - - response = run_shell_command(context, Array(controller['uid']), cmd) - break if response[:data][:exit_code] == 0 - end - - if response[:data][:exit_code] != 0 - msg = 'Disabling the upload of disk image because glance was not installed properly' - if context.status[node['uid']] != 'error' - raise_cirros_error( - context, - node, - msg - ) - else - Astute.logger.error("#{context.task_id}: #{msg}") - return - end - end - - cmd = <<-UPLOAD_IMAGE - . /root/openrc && - /usr/bin/glance image-list | grep -q #{os['img_name']} || - /usr/bin/glance image-create - --name \'#{os['img_name']}\' - --is-public #{os['public']} - --container-format=\'#{os['container_format']}\' - --disk-format=\'#{os['disk_format']}\' - --min-ram=#{os['min_ram']} #{os['glance_properties']} - --file \'#{os['img_path']}\' - UPLOAD_IMAGE - cmd.tr!("\n"," ") - - response = run_shell_command(context, Array(controller['uid']), cmd) - if response[:data][:exit_code] == 0 - Astute.logger.info "#{context.task_id}: Upload cirros " \ - "image \"#{os['img_name']}\" is done" - else - raise_cirros_error(context, node, "Upload cirros \"#{os['img_name']}\" image failed") - end - end # process - - private - - def raise_cirros_error(context, node, msg='') - Astute.logger.error("#{context.task_id}: #{msg}") - context.report_and_update_status('nodes' => [ - {'uid' => node['uid'], - 'status' => 'error', - 'error_type' => 'deploy', - 'role' => node['role'] - } - ] - ) - raise CirrosError, msg - end - - end # class -end diff --git a/lib/astute/pre_delete.rb b/lib/astute/pre_delete.rb deleted file mode 100644 index e11b593e..00000000 --- a/lib/astute/pre_delete.rb +++ /dev/null @@ -1,177 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - module PreDelete - - def self.check_ceph_osds(ctx, nodes) - answer = {"status" => "ready"} - ceph_nodes = nodes.select { |n| n["roles"].include? "ceph-osd" } - ceph_osds = ceph_nodes.collect{ |n| n["slave_name"] } - return answer if ceph_osds.empty? - - cmd = "ceph -f json osd tree" - result = {} - shell = nil - - ceph_nodes.each do |ceph_node| - shell = MClient.new(ctx, "execute_shell_command", [ceph_node["id"]], timeout=60, retries=1) - result = shell.execute(:cmd => cmd).first.results - break if result[:data][:exit_code] == 0 - end - - if result[:data][:exit_code] != 0 - Astute.logger.debug "Ceph has not been found or has not been configured properly" \ - " Safely removing nodes..." - return answer - end - - osds = {} - - tree = JSON.parse(result[:data][:stdout]) - - tree["nodes"].each do |osd| - osds[osd["name"]] = osd["children"] if ceph_osds.include? osd["name"] - end - - # pg dump lists all pgs in the cluster and where they are located. - # $14 is the 'up set' (the list of OSDs responsible for a particular - # pg for an epoch) and $16 is the 'acting set' (list of OSDs who - # are [or were at some point] responsible for a pg). These sets - # will generally be the same. - osd_list = osds.values.flatten.join("|") - cmd = "ceph pg dump 2>/dev/null | " \ - "awk '//{print $14, $16}' | " \ - "egrep -o '\\<(#{osd_list})\\>' | " \ - "sort -un" - - result = shell.execute(:cmd => cmd).first.results - rs = result[:data][:stdout].split("\n") - - # JSON.parse returns the children as integers, so the result from the - # shell command needs to be converted for the set operations to work. - rs.map! { |x| x.to_i } - - error_nodes = [] - osds.each do |name, children| - error_nodes << name if rs & children != [] - end - - if not error_nodes.empty? - msg = "Ceph data still exists on: #{error_nodes.join(', ')}. " \ - "You must manually remove the OSDs from the cluster " \ - "and allow Ceph to rebalance before deleting these nodes." - answer = {"status" => "error", "error" => msg} - end - - answer - end - - def self.remove_ceph_mons(ctx, nodes) - answer = {"status" => "ready"} - ceph_mon_nodes = nodes.select { |n| n["roles"].include? "controller" } - ceph_mons = ceph_mon_nodes.collect{ |n| n["slave_name"] } - return answer if ceph_mon_nodes.empty? - - #Get the list of mon nodes - result = {} - shell = nil - - ceph_mon_nodes.each do |ceph_mon_node| - shell = MClient.new(ctx, "execute_shell_command", [ceph_mon_node["id"]], timeout=120, retries=1) - result = shell.execute(:cmd => "ceph -f json mon dump").first.results - break if result[:data][:exit_code] == 0 - end - - if result[:data][:exit_code] != 0 - Astute.logger.debug "Ceph mon has not been found or has not been configured properly" \ - " Safely removing nodes..." - return answer - end - - mon_dump = JSON.parse(result[:data][:stdout]) - left_mons = mon_dump['mons'].select { | n | n if ! ceph_mons.include? n['name'] } - left_mon_names = left_mons.collect { |n| n['name'] } - left_mon_ips = left_mons.collect { |n| n['addr'].split(":")[0] } - - #Remove nodes from ceph cluster - Astute.logger.info("Removing ceph mons #{ceph_mons} from cluster") - ceph_mon_nodes.each do |node| - shell = MClient.new(ctx, "execute_shell_command", [node["id"]], timeout=120, retries=1) - #remove node from ceph mon list - shell.execute(:cmd => "ceph mon remove #{node["slave_name"]}").first.results - end - - #Fix the ceph.conf on the left mon nodes - left_mon_names.each do |node| - mon_initial_members_cmd = "sed -i \"s/mon_initial_members.*/mon_initial_members\ = #{left_mon_names.join(" ")}/g\" /etc/ceph/ceph.conf" - mon_host_cmd = "sed -i \"s/mon_host.*/mon_host\ = #{left_mon_ips.join(" ")}/g\" /etc/ceph/ceph.conf" - shell = MClient.new(ctx, "execute_shell_command", [node.split('-')[1]], timeout=120, retries=1) - shell.execute(:cmd => mon_initial_members_cmd).first.results - shell.execute(:cmd => mon_host_cmd).first.results - end - - Astute.logger.info("Ceph mons are left in cluster: #{left_mon_names}") - - answer - end - - def self.check_for_offline_nodes(ctx, nodes) - answer = {"status" => "ready"} - # FIXME(vsharshov): We send for node/cluster deletion operation - # as integer instead of String - mco_nodes = nodes.map { |n| n['uid'].to_s } - - - online_nodes = detect_available_nodes(ctx, mco_nodes) - offline_nodes = mco_nodes - online_nodes - - if offline_nodes.present? - offline_nodes.map! { |e| {'uid' => e} } - msg = "MCollective is not running on nodes: " \ - "#{offline_nodes.collect {|n| n['uid'] }.join(',')}. " \ - "MCollective must be running to properly delete a node." - Astute.logger.warn msg - answer = {'status' => 'error', - 'error' => msg, - 'error_nodes' => offline_nodes} - end - - answer - end - - private - - def self.detect_available_nodes(ctx, uids) - all_uids = uids.clone - available_uids = [] - - # In case of big amount of nodes we should do several calls to be sure - # about node status - Astute.config[:mc_retries].times.each do - systemtype = Astute::MClient.new(ctx, "systemtype", all_uids, check_result=false, 10) - available_nodes = systemtype.get_type - - available_uids += available_nodes.map { |node| node.results[:sender] } - all_uids -= available_uids - break if all_uids.empty? - - sleep Astute.config[:mc_retry_interval] - end - - available_uids - end - - end -end diff --git a/lib/astute/pre_deploy_actions/connect_facts.rb b/lib/astute/pre_deploy_actions/connect_facts.rb deleted file mode 100644 index 8ef5e35f..00000000 --- a/lib/astute/pre_deploy_actions/connect_facts.rb +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - class ConnectFacts < PreDeployAction - - def process(deployment_info, context) - deployment_info.each{ |node| connect_facts(context, node) } - Astute.logger.info "#{context.task_id}: Connect role facts for nodes" - end - - private - - def connect_facts(context, node) - run_shell_command( - context, - [node['uid']], - "ln -s -f /etc/#{node['role']}.yaml /etc/astute.yaml" - ) - end - - end #class -end diff --git a/lib/astute/pre_deployment_actions/enable_puppet_deploy.rb b/lib/astute/pre_deployment_actions/enable_puppet_deploy.rb deleted file mode 100644 index 071bb3ff..00000000 --- a/lib/astute/pre_deployment_actions/enable_puppet_deploy.rb +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - class EnablePuppetDeploy < PreDeploymentAction - - # Unlock puppet (can be lock if puppet was killed by user) - def process(deployment_info, context) - nodes_uids = only_uniq_nodes(deployment_info).map{ |n| n['uid'] } - puppetd = MClient.new(context, "puppetd", nodes_uids) - puppetd.enable - end #process - end #class -end diff --git a/lib/astute/pre_deployment_actions/generate_keys.rb b/lib/astute/pre_deployment_actions/generate_keys.rb deleted file mode 100644 index c8d75ea2..00000000 --- a/lib/astute/pre_deployment_actions/generate_keys.rb +++ /dev/null @@ -1,55 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require 'open3' -require 'fileutils' - -module Astute - class GenerateKeys < PreDeploymentAction - - # Generate ssh keys to future uploading to all cluster nodes - def process(deployment_info, context) - overwrite = false - deployment_id = deployment_info.first['deployment_id'] - raise "Deployment_id is missing" unless deployment_id - - Astute.config.puppet_keys.each do |key_name| - dir_path = File.join(Astute.config.keys_src_dir, deployment_id.to_s, key_name) - key_path = File.join(dir_path, key_name + '.key') - - FileUtils.mkdir_p dir_path - raise DeploymentEngineError, "Could not create directory #{dir_path}" unless File.directory?(dir_path) - - next if File.exist?(key_path) && !overwrite - - # Generate key(.key) and save it to //.key - File.delete key_path if File.exist? key_path - - cmd = "openssl rand -base64 741 > #{key_path} 2>&1" - status, stdout, _stderr = run_system_command cmd - - error_msg = "Could not generate key! Command: #{cmd}, output: #{stdout}, exit code: #{status}" - raise DeploymentEngineError, error_msg if status != 0 - end - end #process - - private - - def run_system_command(cmd) - stdout, stderr, status = Open3.capture3 cmd - return status.exitstatus, stdout, stderr - end - - end #class -end diff --git a/lib/astute/pre_deployment_actions/generate_ssh_keys.rb b/lib/astute/pre_deployment_actions/generate_ssh_keys.rb deleted file mode 100644 index 5fe085d6..00000000 --- a/lib/astute/pre_deployment_actions/generate_ssh_keys.rb +++ /dev/null @@ -1,55 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require 'open3' -require 'fileutils' - -module Astute - class GenerateSshKeys < PreDeploymentAction - - # Generate ssh keys to future uploading to all cluster nodes - def process(deployment_info, context) - overwrite = false - deployment_id = deployment_info.first['deployment_id'] - raise "Deployment_id is missing" unless deployment_id - - Astute.config.puppet_ssh_keys.each do |key_name| - dir_path = File.join(Astute.config.keys_src_dir, deployment_id.to_s, key_name) - key_path = File.join(dir_path, key_name) - - FileUtils.mkdir_p dir_path - raise DeploymentEngineError, "Could not create directory #{dir_path}" unless File.directory?(dir_path) - - next if File.exist?(key_path) && !overwrite - - # Generate 2 keys( and .pub) and save it to // - File.delete key_path if File.exist? key_path - - cmd = "ssh-keygen -b 2048 -t rsa -N '' -f #{key_path} 2>&1" - status, stdout, _stderr = run_system_command cmd - - error_msg = "Could not generate ssh key! Command: #{cmd}, output: #{stdout}, exit code: #{status}" - raise DeploymentEngineError, error_msg if status != 0 - end - end #process - - private - - def run_system_command(cmd) - stdout, stderr, status = Open3.capture3 cmd - return status.exitstatus, stdout, stderr - end - - end #class -end diff --git a/lib/astute/pre_deployment_actions/initial_connect_facts.rb b/lib/astute/pre_deployment_actions/initial_connect_facts.rb deleted file mode 100644 index dd54f239..00000000 --- a/lib/astute/pre_deployment_actions/initial_connect_facts.rb +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - class InitialConnectFacts < PreDeploymentAction - - def process(deployment_info, context) - only_uniq_nodes(deployment_info).each{ |node| connect_facts(context, node) } - Astute.logger.info "#{context.task_id}: Initial connect role facts for nodes" - end - - private - - def connect_facts(context, node) - run_shell_command( - context, - [node['uid']], - "ln -s -f /etc/#{node['role']}.yaml /etc/astute.yaml" - ) - end - - end #class -end diff --git a/lib/astute/pre_deployment_actions/sync_puppet_stuff.rb b/lib/astute/pre_deployment_actions/sync_puppet_stuff.rb deleted file mode 100644 index d959a5c0..00000000 --- a/lib/astute/pre_deployment_actions/sync_puppet_stuff.rb +++ /dev/null @@ -1,74 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require 'uri' -SYNC_RETRIES = 10 - -module Astute - class SyncPuppetStuff < PreDeploymentAction - - # Sync puppet manifests and modules to every node - def process(deployment_info, context) - master_ip = deployment_info.first['master_ip'] - modules_source = deployment_info.first['puppet']['modules'] - manifests_source = deployment_info.first['puppet']['manifests'] - # Paths to Puppet modules and manifests at the master node set by Nailgun - # Check fuel source code /deployment/puppet/nailgun/manifests/puppetsync.pp - schemas = [modules_source, manifests_source].map do |url| - begin - URI.parse(url).scheme - rescue URI::InvalidURIError => e - raise DeploymentEngineError, e.message - end - end - - if schemas.select{ |x| x != schemas.first }.present? - raise DeploymentEngineError, "Scheme for puppet modules '#{schemas.first}' and" \ - " puppet manifests '#{schemas.last}' not equivalent!" - end - - nodes_uids = only_uniq_nodes(deployment_info).map{ |n| n['uid'] } - - perform_with_limit(nodes_uids) do |part| - sync_puppet_stuff(context, part, schemas, modules_source, manifests_source) - end - - end # process - - private - - def sync_puppet_stuff(context, node_uids, schemas, modules_source, manifests_source) - sync_mclient = MClient.new(context, "puppetsync", node_uids) - - case schemas.first - when 'rsync' - begin - sync_mclient.rsync(:modules_source => modules_source, - :manifests_source => manifests_source - ) - rescue MClientError => e - sync_retries ||= 0 - sync_retries += 1 - if sync_retries < SYNC_RETRIES - Astute.logger.warn("Rsync problem. Try to repeat: #{sync_retries} attempt") - retry - end - raise e - end - else - raise DeploymentEngineError, "Unknown scheme '#{schemas.first}' in #{modules_source}" - end - end #process - end #class -end diff --git a/lib/astute/pre_deployment_actions/sync_tasks.rb b/lib/astute/pre_deployment_actions/sync_tasks.rb deleted file mode 100644 index a0dedaa5..00000000 --- a/lib/astute/pre_deployment_actions/sync_tasks.rb +++ /dev/null @@ -1,58 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -SYNC_RETRIES = 10 - -module Astute - class SyncTasks < PreDeploymentAction - - # Sync puppet manifests and modules to every node - def process(deployment_info, context) - return unless deployment_info.first['tasks_source'] - - # URI to Tasklib tasks at the master node set by Nailgun - master_ip = deployment_info.first['master_ip'] - tasks_source = deployment_info.first['tasks_source'] || "rsync://#{master_ip}:/puppet/tasks/" - source = tasks_source.chomp('/').concat('/') - - nodes_uids = only_uniq_nodes(deployment_info).map{ |n| n['uid'] } - - perform_with_limit(nodes_uids) do |part| - rsync_tasks(context, source, part) - end - end - - private - - def rsync_tasks(context, source, nodes_uids) - path = '/etc/puppet/tasks/' - rsync_options = '-c -r --delete' - rsync_cmd = "mkdir -p #{path} && rsync #{rsync_options} #{source} #{path}" - - sync_retries = 0 - while sync_retries < SYNC_RETRIES - sync_retries += 1 - response = run_shell_command( - context, - nodes_uids, - rsync_cmd, - 300 - ) - break if response[:data][:exit_code] == 0 - Astute.logger.warn("Rsync problem. Try to repeat: #{sync_retries} attempt") - end - end #rsync_tasks - - end #class -end diff --git a/lib/astute/pre_deployment_actions/sync_time.rb b/lib/astute/pre_deployment_actions/sync_time.rb deleted file mode 100644 index 56bdc2f9..00000000 --- a/lib/astute/pre_deployment_actions/sync_time.rb +++ /dev/null @@ -1,45 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - class SyncTime < PreDeploymentAction - - # Sync time - def process(deployment_info, context) - nodes_uids = only_uniq_nodes(deployment_info).map{ |n| n['uid'] } - cmd = "ntpdate -u $(egrep '^server' /etc/ntp.conf | sed '/^#/d' | awk '{print $2}')" - succeeded = false - - Astute.config.mc_retries.times.each do - succeeded = run_shell_command_remotely(context, nodes_uids, cmd) - return if succeeded - sleep Astute.config.mc_retry_interval - end - - if !succeeded - Astute.logger.warn "Run command: '#{cmd}' in nodes: #{nodes_uids} fail. " \ - "Check debug output for more information. You can try "\ - "to fix it problem manually." - end - end #process - - private - - def run_shell_command_remotely(context, nodes_uids, cmd) - response = run_shell_command(context, nodes_uids, cmd) - response.fetch(:data, {})[:exit_code] == 0 - end - - end #class -end diff --git a/lib/astute/pre_deployment_actions/update_repo_sources.rb b/lib/astute/pre_deployment_actions/update_repo_sources.rb deleted file mode 100644 index f2e8f0fc..00000000 --- a/lib/astute/pre_deployment_actions/update_repo_sources.rb +++ /dev/null @@ -1,103 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - class UpdateRepoSources < PreDeploymentAction - - # Update packages source list - def process(deployment_info, context) - return unless deployment_info.first['repo_setup']['repos'] - content = generate_repo_source(deployment_info) - deployment_info = only_uniq_nodes(deployment_info) - - perform_with_limit(deployment_info) do |part| - upload_repo_source(context, part, content) - regenerate_metadata(context, part) - end - end - - private - - def generate_repo_source(deployment_info) - ubuntu_source = -> (repo) { "deb #{repo['uri']} #{repo['suite']} #{repo['section']}" } - centos_source = -> (repo) do - ["[#{repo['name'].downcase}]", "name=#{repo['name']}", "baseurl=#{repo['uri']}", "gpgcheck=0"].join("\n") - end - - formatter = case target_os(deployment_info) - when 'centos' then centos_source - when 'ubuntu' then ubuntu_source - end - - content = [] - deployment_info.first['repo_setup']['repos'].each do |repo| - content << formatter.call(repo) - end - content.join("\n") - end - - def upload_repo_source(context, deployment_info, content) - upload_mclient = MClient.new(context, "uploadfile", deployment_info.map{ |n| n['uid'] }.uniq) - destination_path = case target_os(deployment_info) - when 'centos' then '/etc/yum.repos.d/nailgun.repo' - when 'ubuntu' then '/etc/apt/sources.list' - end - upload_mclient.upload(:path => destination_path, - :content => content, - :user_owner => 'root', - :group_owner => 'root', - :permissions => '0644', - :dir_permissions => '0755', - :overwrite => true, - :parents => true - ) - end - - def regenerate_metadata(context, deployment_info) - cmd = case target_os(deployment_info) - when 'centos' then "yum clean all" - when 'ubuntu' then "apt-get clean; apt-get update" - end - - succeeded = false - nodes_uids = deployment_info.map{ |n| n['uid'] }.uniq - Astute.config.mc_retries.times.each do - succeeded = run_shell_command_remotely(context, nodes_uids, cmd) - return if succeeded - sleep Astute.config.mc_retry_interval - end - - if !succeeded - raise DeploymentEngineError, "Run command: '#{cmd}' in nodes: #{nodes_uids} fail." \ - " Check debug output for more information" - end - end - - def target_os(deployment_info) - os = deployment_info.first['cobbler']['profile'] - case os - when 'centos-x86_64' then 'centos' - when 'ubuntu_1404_x86_64' then 'ubuntu' - else - raise DeploymentEngineError, "Unknown system #{os}" - end - end - - def run_shell_command_remotely(context, nodes_uids, cmd) - response = run_shell_command(context, nodes_uids, cmd) - response.fetch(:data, {})[:exit_code] == 0 - end - - end #class -end diff --git a/lib/astute/pre_deployment_actions/upload_facts.rb b/lib/astute/pre_deployment_actions/upload_facts.rb deleted file mode 100644 index 622a500e..00000000 --- a/lib/astute/pre_deployment_actions/upload_facts.rb +++ /dev/null @@ -1,60 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require 'psych' - -module Astute - class UploadFacts < PreDeploymentAction - - def process(deployment_info, context) - deployment_info.each{ |node| upload_facts(context, node) } - Astute.logger.info "#{context.task_id}: Required attrs/metadata passed via facts extension" - end - - private - - # This is simple version of 'YAML::dump' with force quoting of strings started with prefixed numeral values - def safe_yaml_dump(obj) - visitor = Psych::Visitors::YAMLTree.new({}) - visitor << obj - visitor.tree.grep(Psych::Nodes::Scalar).each do |node| - node.style = Psych::Nodes::Scalar::DOUBLE_QUOTED if - node.value =~ /^0[xbod0]+/i && node.plain && node.quoted - end - visitor.tree.yaml - end - - def upload_facts(context, node) - - # TODO: Should be changed to the default 'to_yaml' method only after upgrading - # to Ruby 2.1 everywhere on client nodes which used this YAML. - yaml_data = safe_yaml_dump(node) - - Astute.logger.info "#{context.task_id}: storing metadata for node uid=#{node['uid']} "\ - "role=#{node['role']}" - Astute.logger.debug "#{context.task_id}: stores metadata: #{yaml_data}" - - # This is synchronious RPC call, so we are sure that data were sent and processed remotely - upload_mclient = Astute::MClient.new(context, "uploadfile", [node['uid']]) - upload_mclient.upload( - :path => "/etc/#{node['role']}.yaml", - :content => yaml_data, - :overwrite => true, - :parents => true, - :permissions => '0600' - ) - end - - end #class -end diff --git a/lib/astute/pre_deployment_actions/upload_keys.rb b/lib/astute/pre_deployment_actions/upload_keys.rb deleted file mode 100644 index eb246154..00000000 --- a/lib/astute/pre_deployment_actions/upload_keys.rb +++ /dev/null @@ -1,59 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - class UploadKeys < PreDeploymentAction - - # Upload ssh keys from master node to all cluster nodes - def process(deployment_info, context) - deployment_id = deployment_info.first['deployment_id'].to_s - nodes_ids = only_uniq_nodes(deployment_info).map{ |n| n['uid'] } - perform_with_limit(nodes_ids) do |ids| - upload_keys(context, ids, deployment_id) - end - end - - private - - def upload_keys(context, node_uids, deployment_id) - Astute.config.puppet_keys.each do |key_name| - upload_mclient = MClient.new(context, "uploadfile", node_uids) - key = key_name + '.key' - source_path = File.join( - Astute.config.keys_src_dir, - deployment_id, - key_name, - key - ) - destination_path = File.join( - Astute.config.keys_dst_dir, - key_name, - key - ) - content = File.read(source_path) - upload_mclient.upload( - :path => destination_path, - :content => content, - :user_owner => 'root', - :group_owner => 'root', - :permissions => '0600', - :dir_permissions => '0700', - :overwrite => true, - :parents => true - ) - end - end #upload_keys - - end #class -end diff --git a/lib/astute/pre_deployment_actions/upload_ssh_keys.rb b/lib/astute/pre_deployment_actions/upload_ssh_keys.rb deleted file mode 100644 index c13db815..00000000 --- a/lib/astute/pre_deployment_actions/upload_ssh_keys.rb +++ /dev/null @@ -1,59 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - class UploadSshKeys < PreDeploymentAction - - # Upload ssh keys from master node to all cluster nodes - def process(deployment_info, context) - deployment_id = deployment_info.first['deployment_id'].to_s - nodes_ids = only_uniq_nodes(deployment_info).map{ |n| n['uid'] } - perform_with_limit(nodes_ids) do |ids| - upload_keys(context, ids, deployment_id) - end - end - - private - - def upload_keys(context, node_uids, deployment_id) - Astute.config.puppet_ssh_keys.each do |key_name| - upload_mclient = MClient.new(context, "uploadfile", node_uids) - [key_name, key_name + ".pub"].each do |ssh_key| - source_path = File.join( - Astute.config.keys_src_dir, - deployment_id, - key_name, - ssh_key - ) - destination_path = File.join( - Astute.config.keys_dst_dir, - key_name, - ssh_key - ) - content = File.read(source_path) - upload_mclient.upload(:path => destination_path, - :content => content, - :user_owner => 'root', - :group_owner => 'root', - :permissions => '0600', - :dir_permissions => '0700', - :overwrite => true, - :parents => true - ) - end - end - end #upload_keys - - end #class -end diff --git a/lib/astute/pre_node_actions/pre_patching.rb b/lib/astute/pre_node_actions/pre_patching.rb deleted file mode 100644 index 93b457c6..00000000 --- a/lib/astute/pre_node_actions/pre_patching.rb +++ /dev/null @@ -1,77 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - class PrePatching < PreNodeAction - - def process(deployment_info, context) - return unless deployment_info.first['openstack_version_prev'] - - # We should stop services with SIGTERM or even SIGKILL. - # StopOSTServices do this and should be run before. - - remove_cmd = getremovepackage_cmd(deployment_info) - - nodes = deployment_info.map { |n| n['uid'] } - - Astute.logger.info "Starting removal of error-prone packages" - Astute.logger.info "Executing command #{remove_cmd}" - Astute.logger.info "On nodes\n#{nodes.pretty_inspect}" - - response = run_shell_command(context, nodes, remove_cmd, 600) - - if response[:data][:exit_code] != 0 - Astute.logger.error "#{context.task_id}: Fail to remove packages, "\ - "check the debugging output for details" - end - - Astute.logger.info "#{context.task_id}: Finished pre-patching hook" - end #process - - def getremovepackage_cmd(deployment_info) - os = deployment_info.first['cobbler']['profile'] - case os - when /centos/i then "yum -y remove #{centos_packages}" - when /ubuntu/i then "aptitude -y remove #{ubuntu_packages}" - else - raise DeploymentEngineError, "Unknown system #{os}" - end - end - - def centos_packages - packages = <<-Packages - python-oslo-messaging python-oslo-config openstack-heat-common - python-nova python-routes python-routes1.12 python-neutron - python-django-horizon murano-api sahara sahara-dashboard - python-ceilometer openstack-swift openstack-utils - python-glance python-glanceclient python-cinder - python-sqlalchemy python-testtools - Packages - packages.tr!("\n"," ") - end - - def ubuntu_packages - packages = <<-Packages - python-oslo.messaging python-oslo.config python-heat python-nova - python-routes python-routes1.13 python-neutron python-django-horizon - murano-common murano-api sahara sahara-dashboard python-ceilometer - python-swift python-cinder python-keystoneclient python-neutronclient - python-novaclient python-swiftclient python-troveclient - python-sqlalchemy python-testtools - Packages - packages.tr!("\n"," ") - end - - end #class -end diff --git a/lib/astute/pre_node_actions/pre_patching_ha.rb b/lib/astute/pre_node_actions/pre_patching_ha.rb deleted file mode 100644 index ae6a7113..00000000 --- a/lib/astute/pre_node_actions/pre_patching_ha.rb +++ /dev/null @@ -1,50 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - class PrePatchingHa < PreNodeAction - - def process(deployment_info, context) - return if deployment_info.first['openstack_version_prev'].nil? || - deployment_info.first['deployment_mode'] !~ /ha/i - - # Run only once for node. If one of role is controller or primary-controller - # generate new deployment_info block. - # Important for 'mongo' role which run early then 'controller' - current_uids = deployment_info.map{ |n| n['uid'] } - controllers = deployment_info.first['nodes'].select{ |n| current_uids.include?(n['uid']) && n['role'] =~ /controller/i } - c_deployment_info = deployment_info.select { |d_i| controllers.map{ |n| n['uid'] }.include? d_i['uid'] } - - return if c_deployment_info.empty? - c_deployment_info.each do |c_d_i| - c_d_i['role'] = controllers.find{ |c| c['uid'] == c_d_i['uid'] }['role'] - end - controller_nodes = c_deployment_info.map{ |n| n['uid'] } - - Astute.logger.info "Starting migration of pacemaker services from " \ - "nodes\n#{controller_nodes.pretty_inspect}" - - Astute::Pacemaker.commands(action='stop', c_deployment_info).each do |pcmk_ban_cmd| - response = run_shell_command(context, controller_nodes, pcmk_ban_cmd) - - if response[:data][:exit_code] != 0 - Astute.logger.warn "#{context.task_id}: Failed to ban service, "\ - "check the debugging output for details" - end - end - - Astute.logger.info "#{context.task_id}: Finished pre-patching-ha hook" - end #process - end #class -end diff --git a/lib/astute/pre_node_actions/stop_ost_services.rb b/lib/astute/pre_node_actions/stop_ost_services.rb deleted file mode 100644 index f60e0eb9..00000000 --- a/lib/astute/pre_node_actions/stop_ost_services.rb +++ /dev/null @@ -1,65 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - class StopOSTServices < PreNodeAction - - def process(deployment_info, context) - old_env = deployment_info.first['openstack_version_prev'] - return unless old_env - - Astute.logger.info "Stop all Openstack services hook start" - - node_uids = deployment_info.collect { |n| n['uid'] } - file_content = get_file - target_file = '/tmp/stop_services.rb' - - upload_script(context, node_uids, target_file, file_content) - - Astute.logger.info "Running file: #{target_file} on node uids: #{node_uids.join ', '}" - - response = run_shell_command(context, node_uids, "/usr/bin/ruby #{target_file} |tee /tmp/stop_services.log") - - if response[:data][:exit_code] != 0 - Astute.logger.warn "#{context.task_id}: Script returned error code #{response[:data][:exit_code]}" - end - - Astute.logger.info "#{context.task_id}: Finished stop services pre-patching hook" - end #process - - private - - def get_file - File.read File.join(File.dirname(__FILE__), 'stop_services.script') - end - - def upload_script(context, node_uids, target_file, file_content) - target_file = '/tmp/stop_services.rb' - Astute.logger.info "Uploading file: #{target_file} to nodes uids: #{node_uids.join ', '}" - - MClient.new(context, "uploadfile", node_uids).upload( - :path => target_file, - :content => file_content, - :user_owner => 'root', - :group_owner => 'root', - :permissions => '0700', - :overwrite => true, - :parents => true - ) - rescue MClientTimeout, MClientError => e - Astute.logger.error("#{context.task_id}: mcollective error: #{e.message}") - end - - end #class -end #module diff --git a/lib/astute/pre_node_actions/stop_services.script b/lib/astute/pre_node_actions/stop_services.script deleted file mode 100644 index 0481bade..00000000 --- a/lib/astute/pre_node_actions/stop_services.script +++ /dev/null @@ -1,213 +0,0 @@ -#!/usr/bin/env ruby -require 'rubygems' -require 'facter' - -# pre-deploy hook library -module PreDeploy - @dry_run = false - @process_tree = nil - @osfamily = nil - @stop_services_regexp = %r{nova|cinder|glance|keystone|neutron|sahara|murano|ceilometer|heat|swift|apache2|httpd} - - # get regexp that selects services and processes to stop - # @return [Regexp] - def self.stop_services_regexp - @stop_services_regexp - end - - # set regexp that selects services and processes to stop - # @param value [Regexp] - def self.stop_services_regexp=(value) - @stop_services_regexp = value - end - - # get osfamily from facter - # @return [String] - def self.osfamily - return @osfamily if @osfamily - @osfamily = Facter.value 'osfamily' - end - - # get dry run without doing anything switch - # @return [TrueClass,FalseClass] - def self.dry_run - @dry_run - end - - # set dry run without doing anything switch - # @param value [TrueClass,FalseClass] - def self.dry_run=(value) - @dry_run = value - end - - # get ps from shell command - # @return [String] - def self.ps - `ps haxo pid,ppid,cmd` - end - - # get service statu from shell command - # @return String - def self.services - `service --status-all 2>&1` - end - - # same as process_tree but reset mnemoization - # @return [Hash Hash String,Integer>>] - def self.process_tree_with_renew - @process_tree = nil - self.process_tree - end - - # build process tree from process list - # @return [Hash Hash String,Integer>>] - def self.process_tree - return @process_tree if @process_tree - @process_tree = {} - self.ps.split("\n").each do |p| - f = p.split - pid = f.shift.to_i - ppid = f.shift.to_i - cmd = f.join ' ' - - # create entry for this pid if not present - @process_tree[pid] = { - :children => [] - } unless @process_tree.key? pid - - # fill this entry - @process_tree[pid][:ppid] = ppid - @process_tree[pid][:pid] = pid - @process_tree[pid][:cmd] = cmd - - # create entry for parent process if not present - @process_tree[ppid] = { - :children => [] - } unless @process_tree.key? ppid - - # fill parent's children - @process_tree[ppid][:children] << pid - end - @process_tree - end - - # kill selected pid or array of them - # @param pids [Integer,String] Pids to kill - # @param signal [Integer,String] Which signal? - # @param recursive [TrueClass,FalseClass] Kill children too? - # @return [TrueClass,FalseClass] Was the signal sent? Process may still be present even on success. - def self.kill_pids(pids, signal = 9, recursive = true) - pids = Array pids - - pids_to_kill = pids.inject([]) do |all_pids, pid| - pid = pid.to_i - if recursive - all_pids + self.get_children_pids(pid) - else - all_pids << pid - end - end - - pids_to_kill.uniq! - pids_to_kill.sort! - - return false unless pids_to_kill.any? - puts "Kill these pids: #{pids_to_kill.join ', '} with signal #{signal}" - self.run "kill -#{signal} #{pids_to_kill.join ' '}" - end - - # recursion to find all children pids - # @return [Array] - def self.get_children_pids(pid) - pid = pid.to_i - unless self.process_tree.key? pid - puts "No such pid: #{pid}" - return [] - end - self.process_tree[pid][:children].inject([pid]) do |all_children_pids, child_pid| - all_children_pids + self.get_children_pids(child_pid) - end - end - - # same as services_to_stop but reset mnemoization - # @return Array[String] - def self.services_to_stop_with_renew - @services_to_stop = nil - self.services_to_stop - end - - # find running services that should be stopped - # uses service status and regex to filter - # @return [Array] - def self.services_to_stop - return @services_to_stop if @services_to_stop - @services_to_stop = self.services.split("\n").inject([]) do |services_to_stop, service| - fields = service.chomp.split - running = if fields[4] == 'running...' - fields[0] - elsif fields[1] == '+' - fields[3] - else - nil - end - - if running =~ @stop_services_regexp - # replace wrong service name - running = 'httpd' if running == 'httpd.event' and self.osfamily == 'RedHat' - running = 'openstack-keystone' if running == 'keystone' and self.osfamily == 'RedHat' - services_to_stop << running - else - services_to_stop - end - end - end - - # stop services that match stop_services_regex - def self.stop_services - self.services_to_stop.each do |service| - puts "Try to stop service: #{service}" - self.run "service #{service} stop" - end - end - - # filter pids which cmd match regexp - # @param regexp Search pids by this regexp - # @return [Hash Hash String,Integer>>] - def self.pids_by_regexp(regexp) - matched = {} - self.process_tree.each do |pid,process| - matched[pid] = process if process[:cmd] =~ regexp - end - matched - end - - # kill pids that match stop_services_regexp - # @return - def self.kill_pids_by_stop_regexp - pids = self.pids_by_regexp(@stop_services_regexp).keys - self.kill_pids pids - end - - # here be other fixes - # TODO: not needed anymore? - def self.misc_fixes - if self.osfamily == 'Debian' - puts 'Enabling WSGI module' - self.run 'a2enmod wsgi' - end - end - - # run the shell command with dry_run support - # @param cmd [String] Command to run - def self.run(cmd) - command = "#{self.dry_run ? 'echo' : ''} #{cmd} 2>&1" - system command - end -end # class - -if __FILE__ == $0 - # PreDeploy.dry_run = true - PreDeploy.misc_fixes - PreDeploy.stop_services - PreDeploy.kill_pids_by_stop_regexp -end diff --git a/lib/astute/provision.rb b/lib/astute/provision.rb deleted file mode 100644 index 8fdf0f76..00000000 --- a/lib/astute/provision.rb +++ /dev/null @@ -1,511 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - - class Provisioner - def initialize(log_parsing=false) - @log_parsing = log_parsing - end - - def node_type(reporter, task_id, nodes_uids, timeout=nil) - context = Context.new(task_id, reporter) - systemtype = MClient.new( - context, - "systemtype", - nodes_uids, - _check_result=false, - timeout - ) - systems = systemtype.get_type - systems.map do |n| - { - 'uid' => n.results[:sender], - 'node_type' => n.results[:data][:node_type].to_s.chomp - } - end - end - - def provision(reporter, task_id, provisioning_info) - engine_attrs = provisioning_info['engine'] - nodes = provisioning_info['nodes'] - - raise "Nodes to provision are not provided!" if nodes.empty? - - fault_tolerance = provisioning_info.fetch('fault_tolerance', []) - - cobbler = CobblerManager.new(engine_attrs, reporter) - result_msg = {'nodes' => []} - begin - prepare_nodes(reporter, task_id, engine_attrs, nodes, cobbler) - failed_uids, timeouted_uids = provision_and_watch_progress(reporter, - task_id, - Array.new(nodes), - engine_attrs, - fault_tolerance) - rescue => e - Astute.logger.error("Error occured while provisioning:\n#{e.pretty_inspect}") - reporter.report({ - 'status' => 'error', - 'error' => e.message, - 'progress' => 100}) - unlock_nodes_discovery(reporter, task_id, nodes.map { |n| n['uid'] }, nodes) - raise e - end - - handle_failed_nodes(failed_uids, result_msg) - if failed_uids.count > 0 - unlock_nodes_discovery(reporter, task_id, failed_uids, nodes) - end - handle_timeouted_nodes(timeouted_uids, result_msg) - - node_uids = nodes.map { |n| n['uid'] } - - (node_uids - timeouted_uids - failed_uids).each do |uid| - result_msg['nodes'] << {'uid' => uid, 'progress' => 100, 'status' => 'provisioned'} - end - - if should_fail(failed_uids + timeouted_uids, fault_tolerance) - result_msg['status'] = 'error' - result_msg['error'] = 'Too many nodes failed to provision' - result_msg['progress'] = 100 - end - - # If there was no errors, then set status to ready - result_msg.reverse_merge!({'status' => 'ready', 'progress' => 100}) - Astute.logger.info "Message: #{result_msg}" - - reporter.report(result_msg) - - result_msg - rescue => e - Rsyslogd.send_sighup( - Context.new(task_id, reporter), - engine_attrs["master_ip"] - ) - raise e - end - - def provision_and_watch_progress(reporter, - task_id, - nodes_to_provision, - engine_attrs, - fault_tolerance) - raise "Nodes to provision are not provided!" if nodes_to_provision.empty? - - provision_log_parser = @log_parsing ? LogParser::ParseProvisionLogs.new : LogParser::NoParsing.new - - prepare_logs_for_parsing(provision_log_parser, nodes_to_provision) - - nodes_not_booted = [] - nodes = [] - nodes_timeout = {} - timeouted_uids = [] - failed_uids = [] - max_nodes = Astute.config[:max_nodes_to_provision] - Astute.logger.debug("Starting provision") - catch :done do - loop do - sleep_not_greater_than(20) do - #provision more - if nodes_not_booted.count < max_nodes && nodes_to_provision.count > 0 - new_nodes = nodes_to_provision.shift(max_nodes - nodes_not_booted.count) - - Astute.logger.debug("Provisioning nodes: #{new_nodes}") - failed_uids += provision_piece(reporter, task_id, engine_attrs, new_nodes) - Astute.logger.info "Nodes failed to reboot: #{failed_uids} " - - nodes_not_booted += new_nodes.map{ |n| n['uid'] } - nodes_not_booted -= failed_uids - nodes += new_nodes - - timeout_time = Time.now.utc + Astute.config.provisioning_timeout - new_nodes.each {|n| nodes_timeout[n['uid']] = timeout_time} - end - - nodes_types = node_type(reporter, task_id, nodes.map {|n| n['uid']}, 5) - target_uids, nodes_not_booted, reject_uids = analize_node_types(nodes_types, nodes_not_booted) - - if reject_uids.present? - ctx ||= Context.new(task_id, reporter) - reject_nodes = reject_uids.map { |uid| {'uid' => uid } } - NodesRemover.new(ctx, reject_nodes, _reboot=true).remove - end - - #check timouted nodes - nodes_not_booted.each do |uid| - time_now = Time.now.utc - if nodes_timeout[uid] < time_now - Astute.logger.info "Node timed out to provision: #{uid} " - timeouted_uids.push(uid) - end - end - nodes_not_booted -= timeouted_uids - - if should_fail(failed_uids + timeouted_uids, fault_tolerance) - Astute.logger.debug("Aborting provision. To many nodes failed: #{failed_uids + timeouted_uids}") - Astute.logger.debug("Those nodes where we not yet started provision will be set to error mode") - failed_uids += nodes_to_provision.map{ |n| n['uid'] } - return failed_uids, timeouted_uids - end - - if nodes_not_booted.empty? and nodes_to_provision.empty? - Astute.logger.info "Provisioning finished" - throw :done - end - - Astute.logger.debug("Still provisioning following nodes: #{nodes_not_booted}") - report_about_progress(reporter, provision_log_parser, target_uids, nodes) - end - end - end - return failed_uids, timeouted_uids - end - - def remove_nodes(reporter, task_id, engine_attrs, nodes, options) - options.reverse_merge!({ - :reboot => true, - :raise_if_error => false, - :reset => false - }) - - cobbler = CobblerManager.new(engine_attrs, reporter) - if options[:reset] - cobbler.edit_nodes(nodes, {'profile' => Astute.config.bootstrap_profile}) - cobbler.netboot_nodes(nodes, true) - else - cobbler.remove_nodes(nodes) - end - - ctx = Context.new(task_id, reporter) - result = NodesRemover.new(ctx, nodes, options[:reboot]).remove - - if (result['error_nodes'] || result['inaccessible_nodes']) && options[:raise_if_error] - bad_node_ids = result.fetch('error_nodes', []) + - result.fetch('inaccessible_nodes', []) - raise "Mcollective problem with nodes #{bad_node_ids}, please check log for details" - end - - Rsyslogd.send_sighup(ctx, engine_attrs["master_ip"]) - result - end - - def stop_provision(reporter, task_id, engine_attrs, nodes) - ctx = Context.new(task_id, reporter) - _provisioned_nodes, result = stop_provision_via_mcollective(ctx, nodes) - - result['status'] = 'error' if result['error_nodes'].present? - - Rsyslogd.send_sighup( - Context.new(task_id, reporter), - engine_attrs["master_ip"] - ) - - result - end - - def provision_piece(reporter, task_id, engine_attrs, nodes) - cobbler = CobblerManager.new(engine_attrs, reporter) - failed_uids = [] - # TODO(kozhukalov): do not forget about execute_shell_command timeout which is 3600 - # provision_and_watch_progress has provisioning_timeout + 3600 is much longer than provisioning_timeout - - # IBP is implemented in terms of Fuel Agent installed into bootstrap ramdisk - # we don't want nodes to be rebooted into OS installer ramdisk - cobbler.edit_nodes(nodes, {'profile' => Astute.config.bootstrap_profile}) - - # change node type to prevent unexpected erase - change_nodes_type(reporter, task_id, nodes) - # Run parallel reporter - report_image_provision(reporter, task_id, nodes) do - failed_uids |= image_provision(reporter, task_id, nodes) - end - provisioned_nodes = nodes.reject { |n| failed_uids.include? n['uid'] } - - # disabling pxe boot (chain loader) for nodes which succeeded - cobbler.netboot_nodes(provisioned_nodes, false) - - # in case of IBP we reboot only those nodes which we managed to provision - soft_reboot( - reporter, - task_id, - provisioned_nodes.map{ |n| n['uid'] }, - 'reboot_provisioned_nodes' - ) - - return failed_uids - end - - def report_image_provision(reporter, task_id, nodes, - provision_log_parser=LogParser::ParseProvisionLogs.new, &block) - prepare_logs_for_parsing(provision_log_parser, nodes) - - watch_and_report = Thread.new do - loop do - report_about_progress(reporter, provision_log_parser, [], nodes) - sleep 1 - end - end - - block.call - ensure - watch_and_report.exit if defined? watch_and_report - end - - private - - def image_provision(reporter, task_id, nodes) - ImageProvision.provision(Context.new(task_id, reporter), nodes) - end - - def soft_reboot(reporter, task_id, nodes, task_name) - ImageProvision.reboot(Context.new(task_id, reporter), nodes, task_name) - end - - def report_result(result, reporter) - default_result = {'status' => 'ready', 'progress' => 100} - - result = {} unless result.instance_of?(Hash) - status = default_result.merge(result) - reporter.report(status) - end - - def prepare_logs_for_parsing(provision_log_parser, nodes) - sleep_not_greater_than(10) do # Wait while nodes going to reboot - Astute.logger.info "Starting OS provisioning for nodes: #{nodes.map{ |n| n['uid'] }.join(',')}" - begin - provision_log_parser.prepare(nodes) - rescue => e - Astute.logger.warn "Some error occurred when prepare LogParser: #{e.message}, trace: #{e.format_backtrace}" - end - end - end - - def analize_node_types(types, nodes_not_booted) - types.each { |t| Astute.logger.debug("Got node types: uid=#{t['uid']} type=#{t['node_type']}") } - target_uids = types.reject{ |n| n['node_type'] != 'target' }.map{ |n| n['uid'] } - reject_uids = types.reject{ |n| ['target', 'image'].include? n['node_type'] }.map{ |n| n['uid'] } - Astute.logger.debug("Not target nodes will be rejected: #{reject_uids.join(',')}") - - nodes_not_booted -= target_uids - Astute.logger.debug "Not provisioned: #{nodes_not_booted.join(',')}, " \ - "got target OSes: #{target_uids.join(',')}" - return target_uids, nodes_not_booted, reject_uids - end - - def sleep_not_greater_than(sleep_time, &block) - time = Time.now.to_f - block.call - time = time + sleep_time - Time.now.to_f - sleep(time) if time > 0 - end - - def report_about_progress(reporter, provision_log_parser, target_uids, nodes) - begin - nodes_progress = provision_log_parser.progress_calculate(nodes.map{ |n| n['uid'] }, nodes) - nodes_progress.each do |n| - if target_uids.include?(n['uid']) - n['progress'] = 100 - n['status'] = 'provisioned' - else - n['status'] = 'provisioning' - end - end - reporter.report({'nodes' => nodes_progress}) - rescue => e - Astute.logger.warn "Some error occurred when parse logs for nodes progress: #{e.message}, trace: #{e.format_backtrace}" - end - end - - def stop_provision_via_mcollective(ctx, nodes) - return [], {} if nodes.empty? - - mco_result = {} - nodes_uids = nodes.map{ |n| n['uid'] } - - Astute.config.mc_retries.times do |i| - sleep Astute.config.nodes_remove_interval - - Astute.logger.debug "Trying to connect to nodes #{nodes_uids} using mcollective" - nodes_types = node_type(ctx.reporter, ctx.task_id, nodes_uids, 2) - next if nodes_types.empty? - - provisioned = nodes_types.select{ |n| ['target', 'bootstrap', 'image'].include? n['node_type'] } - .map{ |n| {'uid' => n['uid']} } - current_mco_result = NodesRemover.new(ctx, provisioned, _reboot=true).remove - Astute.logger.debug "Retry result #{i}: "\ - "mco success nodes: #{current_mco_result['nodes']}, "\ - "mco error nodes: #{current_mco_result['error_nodes']}, "\ - "mco inaccessible nodes: #{current_mco_result['inaccessible_nodes']}" - - mco_result = merge_rm_nodes_result(mco_result, current_mco_result) - nodes_uids -= provisioned.map{ |n| n['uid'] } - - break if nodes_uids.empty? - end - - provisioned_nodes = nodes.map{ |n| {'uid' => n['uid']} } - nodes_uids.map {|n| {'uid' => n} } - - Astute.logger.debug "MCO final result: "\ - "mco success nodes: #{mco_result['nodes']}, "\ - "mco error nodes: #{mco_result['error_nodes']}, "\ - "mco inaccessible nodes: #{mco_result['inaccessible_nodes']}, "\ - "all mco nodes: #{provisioned_nodes}" - - return provisioned_nodes, mco_result - end - - def unlock_nodes_discovery(reporter, task_id="", failed_uids, nodes) - nodes_uids = nodes.select{ |n| failed_uids.include?(n['uid']) } - .map{ |n| n['uid'] } - shell = MClient.new(Context.new(task_id, reporter), - 'execute_shell_command', - nodes_uids, - _check_result=false, - _timeout=2) - mco_result = shell.execute(:cmd => "rm -f #{Astute.config.agent_nodiscover_file}") - result = mco_result.map do |n| - { - 'uid' => n.results[:sender], - 'exit code' => n.results[:data][:exit_code] - } - end - Astute.logger.debug "Unlock discovery for failed nodes. Result: #{result}" - end - - def merge_rm_nodes_result(res1, res2) - ['nodes', 'error_nodes', 'inaccessible_nodes'].inject({}) do |result, node_status| - result[node_status] = (res1.fetch(node_status, []) + res2.fetch(node_status, [])).uniq - result - end - end - - def change_nodes_type(reporter, task_id, nodes, type="image") - nodes_uids = nodes.map{ |n| n['uid'] } - shell = MClient.new(Context.new(task_id, reporter), - 'execute_shell_command', - nodes_uids, - _check_result=false, - _timeout=5) - mco_result = shell.execute(:cmd => "echo '#{type}' > /etc/nailgun_systemtype") - result = mco_result.map do |n| - { - 'uid' => n.results[:sender], - 'exit code' => n.results[:data][:exit_code] - } - end - Astute.logger.debug "Change node type to #{type}. Result: #{result}" - end - - def handle_failed_nodes(failed_uids, result_msg) - if failed_uids.present? - Astute.logger.error("Provision of some nodes failed. Failed nodes: #{failed_uids}") - nodes_progress = failed_uids.map do |n| - { - 'uid' => n, - 'status' => 'error', - 'error_msg' => "Failed to provision", - 'progress' => 100, - 'error_type' => 'provision' - } - end - result_msg['nodes'] += nodes_progress - end - end - - def handle_timeouted_nodes(timeouted_uids, result_msg) - if timeouted_uids.present? - Astute.logger.error("Timeout of provisioning is exceeded. Nodes not booted: #{timeouted_uids}") - nodes_progress = timeouted_uids.map do |n| - { - 'uid' => n, - 'status' => 'error', - 'error_msg' => "Timeout of provisioning is exceeded", - 'progress' => 100, - 'error_type' => 'provision' - } - end - result_msg['nodes'] += nodes_progress - end - end - - def should_fail(failed_uids, fault_tolerance) - return failed_uids.present? if fault_tolerance.empty? - - uids_in_groups = [] - fault_tolerance.each do |group| - failed_from_group = failed_uids.select { |uid| group['uids'].include? uid } - uids_in_groups += failed_from_group - max_to_fail = group['percentage'] / 100.0 * group['uids'].count - if failed_from_group.count > max_to_fail - return true - end - end - failed_uids -= uids_in_groups - if failed_uids.present? - return true - end - false - end - - def prepare_nodes(reporter, task_id, engine_attrs, nodes, cobbler) - # 1. Erase all nodes - # 2. Return already provisioned node to bootstrap state - # 3. Delete and add again nodes to Cobbler - - Astute.logger.info "Preparing nodes for installation" - existent_nodes = cobbler.get_existent_nodes(nodes) - - # Change node type to prevent wrong node detection as provisioned - # Also this type if node will not rebooted, Astute will be allowed - # to try to reboot such nodes again - if existent_nodes.present? - change_nodes_type(reporter, task_id, existent_nodes, 'reprovisioned') - end - - remove_nodes( - reporter, - task_id, - engine_attrs, - nodes, - {:reboot => false, - :raise_if_error => true, - :reset => true} - ) - - if existent_nodes.present? - soft_reboot( - reporter, - task_id, - existent_nodes.map{ |n| n['uid'] }, - "reboot_reprovisioned_nodes" - ) - end - - cobbler.remove_nodes(nodes) - - # NOTE(kozhukalov): We try to find out if there are systems - # in the Cobbler with the same MAC addresses. If so, Cobbler is going - # to throw MAC address duplication error. We need to remove these - # nodes. - mac_duplicate_names = cobbler.get_mac_duplicate_names(nodes) - if mac_duplicate_names.present? - cobbler.remove_nodes(mac_duplicate_names.map {|n| {'slave_name' => n}}) - end - - cobbler.add_nodes(nodes) - end - - end -end diff --git a/lib/astute/puppet_job.rb b/lib/astute/puppet_job.rb deleted file mode 100644 index c660b16f..00000000 --- a/lib/astute/puppet_job.rb +++ /dev/null @@ -1,282 +0,0 @@ -# Copyright 2016 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - class PuppetJob - - FINAL_JOB_TASK_STATUSES = [ - 'successful', 'failed' - ] - - JOB_TASK_STATUSES = [ - 'successful', 'failed', 'running' - ] - - SUCCEED_STATUSES = [ - 'succeed' - ] - - BUSY_STATUSES = [ - 'running' - ] - - UNDEFINED_STATUSES = [ - 'undefined' - ] - - STOPED_STATUSES = [ - 'stopped', 'disabled' - ] - - def initialize(task, puppet_mclient, options) - @task = task - @retries = options['retries'] - @puppet_start_timeout = options['puppet_start_timeout'] - @puppet_start_interval = options['puppet_start_interval'] - @time_observer = TimeObserver.new(options['timeout']) - @succeed_retries = options['succeed_retries'] - @undefined_retries = options['undefined_retries'] - @original_undefined_retries = options['undefined_retries'] - @puppet_mclient = puppet_mclient - end - - # Run selected puppet manifest on node - # @return [void] - def run - Astute.logger.info "Start puppet with timeout "\ - "#{@time_observer.time_limit} sec. #{task_details_for_log}" - - @time_observer.start - puppetd_run - self.task_status = 'running' - end - - # Return actual status of puppet run - # @return [String] Task status: successful, failed or running - def status - return @task_status if job_ended? - - current_task_status = puppet_to_task_status(puppet_status) - - self.task_status = case current_task_status - when 'successful' - processing_succeed_task - when 'running' - processing_running_task - when 'failed' - processing_error_task - when 'undefined' - processing_undefined_task - end - - time_is_up! if should_stop? - @task_status - end - - # Return actual last run summary for puppet run - # @return [Hash] Puppet summary - def summary - @puppet_mclient.summary - end - - private - - # Should stop process or not: task is still running but we are out of time - # @return [true, false] - def should_stop? - @time_observer.time_is_up? && - FINAL_JOB_TASK_STATUSES.exclude?(@task_status) - end - - # Is job has ended or not - # @return [true, false] - def job_ended? - FINAL_JOB_TASK_STATUSES.include?(@task_status) - end - - # Set task status to failed and reset retires counter to 0 to avoid - # redundant retries - # @return [void] - def time_is_up! - Astute.logger.error "Puppet agent took too long to run puppet task."\ - " Mark task as failed. #{task_details_for_log}" - self.task_status = 'failed' - end - - # Setup task status - # @param [String] status The task status - # @return [void] - # @raise [StatusValidationError] Unknown job status - def task_status=(status) - if JOB_TASK_STATUSES.include?(status) - @task_status = status - else - raise StatusValidationError, - "Unknow job status: #{status}. Expected: #{JOB_TASK_STATUSES}" - end - end - - # Return actual status of puppet using mcollective puppet agent - # @return [String]: puppet status - def puppet_status - actual_status = @puppet_mclient.status - log_current_status(actual_status) - - if UNDEFINED_STATUSES.include?(actual_status) - Astute.logger.warn "Error to get puppet status. "\ - "#{task_details_for_log}." - end - - actual_status - end - - # Run puppet manifest using mcollective puppet agent - # @return [true, false] Is puppet run has started or not - # TODO(vsharshov): need refactoring to make this be async call - def puppetd_run - puppet_run_obsorver = TimeObserver.new(@puppet_start_timeout) - puppet_run_obsorver.start - - while puppet_run_obsorver.enough_time? - is_running = @puppet_mclient.run - return true if is_running - - Astute.logger.debug "Could not run puppet process "\ - "#{task_details_for_log}. Left #{puppet_run_obsorver.left_time} sec" - sleep @puppet_start_interval - end - Astute.logger.error "Problem with puppet start. Time "\ - "(#{@puppet_start_timeout} sec) is over. #{task_details_for_log}" - false - end - - # Convert puppet status to task status - # @param [String] puppet_status The puppet status of task - # @return [String] Task status - # @raise [StatusValidationError] Unknown puppet status - def puppet_to_task_status(mco_puppet_status) - case - when SUCCEED_STATUSES.include?(mco_puppet_status) - 'successful' - when BUSY_STATUSES.include?(mco_puppet_status) - 'running' - when STOPED_STATUSES.include?(mco_puppet_status) - 'failed' - when UNDEFINED_STATUSES.include?(mco_puppet_status) - 'undefined' - else - raise StatusValidationError, - "Unknow puppet status: #{mco_puppet_status}" - end - end - - # Return short useful info about node and puppet task - # @return [String] - def task_details_for_log - "Node #{@puppet_mclient.node_id}, task #{@task}, manifest "\ - "#{@puppet_mclient.manifest}" - end - - # Write to log with needed message level actual task status - # @param [String] status Actual puppet status of task - # @return [void] - def log_current_status(status) - message = "#{task_details_for_log}, status: #{status}" - if (UNDEFINED_STATUSES + STOPED_STATUSES).include?(status) - Astute.logger.error message - else - Astute.logger.debug message - end - end - - # Process additional action in case of puppet succeed - # @return [String] Task status: successful or running - def processing_succeed_task - reset_undefined_retries! - Astute.logger.debug "Puppet completed within "\ - "#{@time_observer.since_start} seconds" - if @succeed_retries > 0 - @succeed_retries -= 1 - Astute.logger.debug "Succeed puppet on node will be "\ - "restarted. #{@succeed_retries} retries remained. "\ - "#{task_details_for_log}" - Astute.logger.info "Retrying to run puppet for following succeed "\ - "node: #{@puppet_mclient.node_id}" - puppetd_run - 'running' - else - Astute.logger.info "Node #{@puppet_mclient.node_id} has succeed "\ - "to deploy. #{task_details_for_log}" - 'successful' - end - end - - # Process additional action in case of puppet failed - # @return [String] Task status: failed or running - def processing_error_task - reset_undefined_retries! - if @retries > 0 - @retries -= 1 - Astute.logger.debug "Puppet on node will be "\ - "restarted because of fail. #{@retries} retries remained."\ - "#{task_details_for_log}" - Astute.logger.info "Retrying to run puppet for following error "\ - "nodes: #{@puppet_mclient.node_id}" - puppetd_run - 'running' - else - Astute.logger.error "Node has failed to deploy. There is"\ - " no more retries for puppet run. #{task_details_for_log}" - 'failed' - end - end - - # Process additional action in case of undefined puppet status - # @return [String] Task status: failed or running - def processing_undefined_task - if @undefined_retries > 0 - @undefined_retries -= 1 - Astute.logger.debug "Puppet on node has undefined status. "\ - "#{@undefined_retries} retries remained. "\ - "#{task_details_for_log}" - Astute.logger.info "Retrying to check status for following "\ - "nodes: #{@puppet_mclient.node_id}" - 'running' - else - Astute.logger.error "Node has failed to get status. There is"\ - " no more retries for status check. #{task_details_for_log}" - 'failed' - end - end - - # Process additional action in case of puppet running - # @return [String]: Task status: successful, failed or running - def processing_running_task - reset_undefined_retries! - 'running' - end - - # Reset undefined retries to original value - # @return [void] - def reset_undefined_retries! - return if @undefined_retries == @original_undefined_retries - - Astute.logger.debug "Reset undefined retries to original "\ - "value: #{@original_undefined_retries}" - @undefined_retries = @original_undefined_retries - end - - end #PuppetJob - -end diff --git a/lib/astute/puppet_task.rb b/lib/astute/puppet_task.rb deleted file mode 100644 index 3de0ef28..00000000 --- a/lib/astute/puppet_task.rb +++ /dev/null @@ -1,258 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require 'timeout' - -module Astute - - # @deprecated Please use {#Astute::PuppetJob} instead. This code is - # useful only for Granular or older deployment engines. - class PuppetTask - - def initialize(ctx, node, options={}) - default_options = { - :retries => Astute.config.puppet_retries, - :puppet_manifest => '/etc/puppet/manifests/site.pp', - :puppet_modules => Astute.config.puppet_module_path, - :cwd => Astute.config.shell_cwd, - :timeout => Astute.config.puppet_timeout, - :puppet_debug => false, - :succeed_retries => Astute.config.puppet_succeed_retries, - :raw_report => Astute.config.puppet_raw_report, - :puppet_noop_run => Astute.config.puppet_noop_run, - } - @options = options.compact.reverse_merge(default_options) - @options.freeze - - @ctx = ctx - @node = node - @retries = @options[:retries] - @time_observer = TimeObserver.new(@options[:timeout]) - @is_hung = false - @succeed_retries = @options[:succeed_retries] - @summary = {} - end - - def run - Astute.logger.debug "Waiting for puppet to finish deployment on " \ - "node #{@node['uid']} (timeout = #{@time_observer.time_limit} sec)..." - @time_observer.start - puppetd_runonce - end - - # expect to run this method with respect of Astute.config.puppet_fade_interval - def status - raise Timeout::Error if @time_observer.time_is_up? - - @summary = puppet_status - status = node_status(@summary) - message = "Node #{@node['uid']}(#{@node['role']}) status: #{status}" - if status == 'error' - Astute.logger.error message - else - Astute.logger.debug message - end - - result = case status - when 'succeed' - processing_succeed_node(@summary) - when 'running' - processing_running_node - when 'error' - processing_error_node(@summary) - end - - #TODO(vsharshov): Should we move it to control module? - @ctx.report_and_update_status('nodes' => [result]) if result - - # ready, error or deploying - result.fetch('status', 'deploying') - rescue MClientTimeout, Timeout::Error - Astute.logger.warn "Puppet agent #{@node['uid']} " \ - "didn't respond within the allotted time" - 'error' - end - - def summary - @summary - end - - private - - def puppetd - puppetd = MClient.new( - @ctx, - "puppetd", - [@node['uid']], - _check_result=true, - _timeout=nil, - _retries=Astute.config.mc_retries, - _enable_result_logging=false - ) - puppetd.on_respond_timeout do |uids| - nodes = uids.map do |uid| - { - 'uid' => uid, - 'status' => 'error', - 'error_type' => 'deploy', - 'role' => @node['role'] - } - end - @ctx.report_and_update_status('nodes' => nodes) - raise MClientTimeout - end - puppetd - end - - def puppet_status - puppetd.last_run_summary( - :puppet_noop_run => @options[:puppet_noop_run], - :raw_report => @options[:raw_report] - ).first[:data] - end - - def puppet_run - puppetd.runonce( - :puppet_debug => @options[:puppet_debug], - :manifest => @options[:puppet_manifest], - :modules => @options[:puppet_modules], - :cwd => @options[:cwd], - :puppet_noop_run => @options[:puppet_noop_run], - ) - end - - def running?(status) - ['running'].include? status[:status] - end - - def idling?(status) - ['idling'].include? status[:status] - end - - def stopped?(status) - ['stopped', 'disabled'].include? status[:status] - end - - def succeed?(status) - status[:status] == 'stopped' && - status[:resources]['failed'].to_i == 0 && - status[:resources]['failed_to_restart'].to_i == 0 - end - - # Runs puppetd.runonce only if puppet is stopped on the host at the time - # If it isn't stopped, we wait a bit and try again. - # Returns list of nodes uids which appear to be with hung puppet. - def puppetd_runonce - started = Time.now.to_i - while Time.now.to_i - started < Astute.config.puppet_fade_timeout - status = puppet_status - - is_stopped = stopped?(status) - is_idling = idling?(status) - is_running = running?(status) - - #Try to kill 'idling' process and run again by 'runonce' call - puppet_run if is_stopped || is_idling - - break if !is_running && !is_idling - sleep Astute.config.puppet_fade_interval - end - - if is_running || is_idling - Astute.logger.warn "Following nodes have puppet hung " \ - "(#{is_running ? 'running' : 'idling'}): '#{@node['uid']}'" - @is_hung = true - else - @is_hung = false - end - end - - def node_status(last_run) - case - when @is_hung - 'error' - when succeed?(last_run) && !@is_hung - 'succeed' - when (running?(last_run) || idling?(last_run)) && !@is_hung - 'running' - when stopped?(last_run) && !succeed?(last_run) && !@is_hung - 'error' - else - msg = "Unknow status: " \ - "is_hung #{@is_hung}, succeed? #{succeed?(last_run)}, " \ - "running? #{running?(last_run)}, stopped? #{stopped?(last_run)}, " \ - "idling? #{idling?(last_run)}" - raise msg - end - end - - def processing_succeed_node(last_run) - Astute.logger.debug "Puppet completed within "\ - "#{@time_observer.since_start} seconds" - if @succeed_retries > 0 - @succeed_retries -= 1 - Astute.logger.debug "Succeed puppet on node #{@node['uid']} will be "\ - "restarted. #{@succeed_retries} retries remained." - Astute.logger.info "Retrying to run puppet for following succeed " \ - "node: #{@node['uid']}" - puppetd_runonce - node_report_format('status' => 'deploying') - else - Astute.logger.debug "Node #{@node['uid']} has succeed to deploy. " \ - "There is no more retries for puppet run." - { 'uid' => @node['uid'], 'status' => 'ready', 'role' => @node['role'] } - end - end - - def processing_error_node(last_run) - if @retries > 0 - @retries -= 1 - Astute.logger.debug "Puppet on node #{@node['uid']} will be "\ - "restarted. #{@retries} retries remained." - Astute.logger.info "Retrying to run puppet for following error " \ - "nodes: #{@node['uid']}" - puppetd_runonce - node_report_format('status' => 'deploying') - else - Astute.logger.debug "Node #{@node['uid']} has failed to deploy. " \ - "There is no more retries for puppet run." - node_report_format('status' => 'error', 'error_type' => 'deploy') - end - end - - def processing_running_node - nodes_to_report = [] - begin - # Pass nodes because logs calculation needs IP address of node, not just uid - nodes_progress = @ctx.deploy_log_parser.progress_calculate([@node['uid']], [@node]) - if nodes_progress.present? - Astute.logger.debug "Got progress for nodes:\n#{nodes_progress.pretty_inspect}" - - # Nodes with progress are running, so they are not included in nodes_to_report yet - nodes_progress.map! { |x| x.merge!('status' => 'deploying', 'role' => @node['role']) } - nodes_to_report = nodes_progress - end - rescue => e - Astute.logger.warn "Some error occurred when parse logs for " \ - "nodes progress: #{e.message}, trace: #{e.format_backtrace}" - end - nodes_to_report.first || node_report_format('status' => 'deploying') - end - - def node_report_format(add_info={}) - add_info.merge('uid' => @node['uid'], 'role' => @node['role']) - end - - end #PuppetTask -end diff --git a/lib/astute/puppetd.rb b/lib/astute/puppetd.rb deleted file mode 100644 index d25f0190..00000000 --- a/lib/astute/puppetd.rb +++ /dev/null @@ -1,69 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -require 'json' -require 'timeout' - -module Astute - module PuppetdDeployer - - def self.deploy(ctx, nodes, retries=2, puppet_manifest=nil, puppet_modules=nil, cwd=nil, puppet_debug=true) - @ctx = ctx - @retries = retries - @nodes = nodes - @puppet_manifest = puppet_manifest || '/etc/puppet/manifests/site.pp' - @puppet_modules = puppet_modules || '/etc/puppet/modules' - @cwd = cwd || '/' - @puppet_debug = puppet_debug - - Astute.logger.debug "Waiting for puppet to finish deployment on all - nodes (timeout = #{Astute.config.puppet_timeout} sec)..." - time_before = Time.now - - deploy_nodes - - time_spent = Time.now - time_before - Astute.logger.info "#{@ctx.task_id}: Spent #{time_spent} seconds on puppet run "\ - "for following nodes(uids): #{@nodes.map {|n| n['uid']}.join(',')}" - end - - private - - def self.deploy_nodes - puppet_tasks = @nodes.map { |n| puppet_task(n) } - puppet_tasks.each(&:run) - - loop do - sleep Astute.config.puppet_deploy_interval - break if !puppet_tasks.any? { |t| t.status == 'deploying' } - end - end - - def self.puppet_task(n) - PuppetTask.new( - @ctx, - n, - { - :retries => @retries, - :puppet_manifest => @puppet_manifest, - :puppet_modules => @puppet_modules, - :cwd => @cwd, - :timeout => Astute.config.puppet_timeout, - :puppet_debug => @puppet_debug - }) - end - - end -end diff --git a/lib/astute/reporter.rb b/lib/astute/reporter.rb deleted file mode 100644 index 3da9a1a9..00000000 --- a/lib/astute/reporter.rb +++ /dev/null @@ -1,293 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require 'set' - -STATES = { - 'offline' => 0, - 'discover' => 10, - 'provisioning' => 30, - 'provisioned' => 40, - 'deploying' => 50, - 'ready' => 60, - 'error' => 70 -} - -module Astute - module ProxyReporter - class DeploymentProxyReporter - attr_accessor :deploy - alias_method :deploy?, :deploy - - def initialize(up_reporter, deployment_info=[]) - @up_reporter = up_reporter - @nodes = deployment_info.inject([]) do |nodes, di| - nodes << {'uid' => di['uid'], 'role' => di['role'], 'fail_if_error' => di['fail_if_error']} - end - @deploy = deployment_info.present? - end - - def report(data) - Astute.logger.debug("Data received by DeploymentProxyReporter to report it up:\n#{data.pretty_inspect}") - report_new_data(data) - end - - private - - def report_new_data(data) - if data['nodes'] - nodes_to_report = get_nodes_to_report(data['nodes']) - return if nodes_to_report.empty? # Let's report only if nodes updated - - # Update nodes attributes in @nodes. - update_saved_nodes(nodes_to_report) - data['nodes'] = nodes_to_report - end - data.merge!(get_overall_status(data)) - Astute.logger.debug("Data send by DeploymentProxyReporter to report it up:\n#{data.pretty_inspect}") - @up_reporter.report(data) - end - - def get_overall_status(data) - status = data['status'] - error_nodes = @nodes.select { |n| n['status'] == 'error' }.map{ |n| n['uid'] } - msg = data['error'] - - if status == 'ready' && error_nodes.any? - status = 'error' - msg = "Some error occured on nodes\n#{error_nodes.pretty_inspect}" - end - progress = data['progress'] - - {'status' => status, 'error' => msg, 'progress' => progress}.reject{|k,v| v.nil?} - end - - def get_nodes_to_report(nodes) - nodes.map{ |node| node_validate(node) }.compact - end - - def update_saved_nodes(new_nodes) - # Update nodes attributes in @nodes. - new_nodes.each do |node| - saved_node = @nodes.find { |n| n['uid'] == node['uid'] && n['role'] == node['role'] } - if saved_node - node.each {|k, v| saved_node[k] = v} - else - @nodes << node - end - end - end - - def node_validate(node) - validates_basic_fields(node) - - # Ignore hooks report for multiroles progress - calculate_multiroles_node_progress(node) if deploy? && node['role'] != 'hook' - - normalization_progress(node) - - compare_with_previous_state(node) - end - - # Validate of basic fields in message about nodes - def validates_basic_fields(node) - err = [] - case - when node['status'] - err << "Status provided #{node['status']} is not supported" unless STATES[node['status']] - when node['progress'] - err << "progress value provided, but no status" - end - - err << "Node role is not provided" if deploy? && !node['role'] - err << "Node uid is not provided" unless node['uid'] - - if err.any? - msg = "Validation of node:\n#{node.pretty_inspect} for report failed: #{err.join('; ')}." - Astute.logger.error(msg) - raise msg - end - end - - # Proportionally reduce the progress on the number of roles. Based on the - # fact that each part makes the same contribution to the progress we divide - # 100 to number of roles for this node. Also we prevent send final status for - # node before all roles will be deployed. Final result for node: - # * any error — error; - # * without error — succes. - # Example: - # Node have 3 roles and already success deploy first role and now deploying - # second(50%). Overall progress of the operation for node is - # 50 / 3 + 1 * 100 / 3 = 49 - # We calculate it as 100/3 = 33% for every finished(success or fail) role - # Exception: node which have fail_if_error status equal true for some - # assigned node role. If this node role fail, we send error state for - # the entire node immediately. - def calculate_multiroles_node_progress(node) - @finish_roles_for_nodes ||= [] - roles_of_node = @nodes.select { |n| n['uid'] == node['uid'] } - all_roles_amount = roles_of_node.size - - return if all_roles_amount == 1 # calculation should only be done for multi roles - - finish_roles_amount = @finish_roles_for_nodes.select do |n| - n['uid'] == node['uid'] && ['ready', 'error'].include?(n['status']) - end.size - return if finish_roles_amount == all_roles_amount # already done all work - - # recalculate progress for node - node['progress'] = node['progress'].to_i/all_roles_amount + 100 * finish_roles_amount/all_roles_amount - - # save final state if present - if ['ready', 'error'].include? node['status'] - @finish_roles_for_nodes << { 'uid' => node['uid'], 'role' => node['role'], 'status' => node['status'] } - node['progress'] = 100 * (finish_roles_amount + 1)/all_roles_amount - end - - # No more status update will be for node which failed and have fail_if_error as true - fail_if_error = @nodes.find { |n| n['uid'] == node['uid'] && n['role'] == node['role'] }['fail_if_error'] - fail_now = fail_if_error && node['status'] == 'error' - - if all_roles_amount - finish_roles_amount != 1 && !fail_now - # block 'ready' or 'error' final status for node if not all roles yet deployed - node['status'] = 'deploying' - node.delete('error_type') # Additional field for error response - elsif ['ready', 'error'].include? node['status'] - node['status'] = @finish_roles_for_nodes.select { |n| n['uid'] == node['uid'] } - .select { |n| n['status'] == 'error' } - .empty? ? 'ready' : 'error' - node['progress'] = 100 - node['error_type'] = 'deploy' if node['status'] == 'error' - end - end - - # Normalization of progress field: ensures that the scaling progress was - # in range from 0 to 100 and has a value of 100 fot the final node status - def normalization_progress(node) - if node['progress'] - if node['progress'] > 100 - Astute.logger.warn("Passed report for node with progress > 100: "\ - "#{node.pretty_inspect}. Adjusting progress to 100.") - node['progress'] = 100 - elsif node['progress'] < 0 - Astute.logger.warn("Passed report for node with progress < 0: "\ - "#{node.pretty_inspect}. Adjusting progress to 0.") - node['progress'] = 0 - end - end - if node['status'] && ['provisioned', 'ready'].include?(node['status']) && node['progress'] != 100 - Astute.logger.warn("In #{node['status']} state node should have progress 100, "\ - "but node passed:\n#{node.pretty_inspect}. Setting it to 100") - node['progress'] = 100 - end - end - - # Comparison information about node with previous state. - def compare_with_previous_state(node) - saved_node = @nodes.find { |x| x['uid'] == node['uid'] && x['role'] == node['role'] } - if saved_node - saved_status = STATES[saved_node['status']].to_i - node_status = STATES[node['status']] || saved_status - saved_progress = saved_node['progress'].to_i - node_progress = node['progress'] || saved_progress - - if node_status < saved_status - Astute.logger.warn("Attempt to assign lower status detected: "\ - "Status was: #{saved_node['status']}, attempted to "\ - "assign: #{node['status']}. Skipping this node (id=#{node['uid']})") - return - end - if node_progress < saved_progress && node_status == saved_status - Astute.logger.warn("Attempt to assign lesser progress detected: "\ - "Progress was: #{saved_node['status']}, attempted to "\ - "assign: #{node['progress']}. Skipping this node (id=#{node['uid']})") - return - end - - # We need to update node here only if progress is greater, or status changed - return if node.select{|k, v| saved_node[k] != v }.empty? - end - node - end - - end # DeploymentProxyReporter - - class ProvisiningProxyReporter < DeploymentProxyReporter - - def initialize(up_reporter, provisioning_info=[]) - @up_reporter = up_reporter - @nodes = provisioning_info['nodes'].inject([]) do |nodes, di| - nodes << {'uid' => di['uid']} - end - end - - def report(data) - Astute.logger.debug("Data received by ProvisiningProxyReporter to report it up:\n#{data.pretty_inspect}") - report_new_data(data) - end - - private - - def report_new_data(data) - if data['nodes'] - nodes_to_report = get_nodes_to_report(data['nodes']) - return if nodes_to_report.empty? # Let's report only if nodes updated - - # Update nodes attributes in @nodes. - update_saved_nodes(nodes_to_report) - data['nodes'] = nodes_to_report - end - Astute.logger.debug("Data send by DeploymentProxyReporter to report it up:\n#{data.pretty_inspect}") - @up_reporter.report(data) - end - - def node_validate(node) - validates_basic_fields(node) - normalization_progress(node) - compare_with_previous_state(node) - end - - # Comparison information about node with previous state. - def compare_with_previous_state(node) - saved_node = @nodes.find { |x| x['uid'] == node['uid'] } - if saved_node - saved_status = STATES[saved_node['status']].to_i - node_status = STATES[node['status']] || saved_status - saved_progress = saved_node['progress'].to_i - node_progress = node['progress'] || saved_progress - - if node_status < saved_status - Astute.logger.warn("Attempt to assign lower status detected: "\ - "Status was: #{saved_node['status']}, attempted to "\ - "assign: #{node['status']}. Skipping this node (id=#{node['uid']})") - return - end - if node_progress < saved_progress && node_status == saved_status - Astute.logger.warn("Attempt to assign lesser progress detected: "\ - "Progress was: #{saved_node['status']}, attempted to "\ - "assign: #{node['progress']}. Skipping this node (id=#{node['uid']})") - return - end - - # We need to update node here only if progress is greater, or status changed - return if node.select{|k, v| saved_node[k] != v }.empty? - end - node - end - - end # ProvisiningProxyReporter - - end # ProxyReporter -end # Astute diff --git a/lib/astute/rsyslogd.rb b/lib/astute/rsyslogd.rb deleted file mode 100644 index 9fffb055..00000000 --- a/lib/astute/rsyslogd.rb +++ /dev/null @@ -1,40 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - class Rsyslogd - - def self.send_sighup(ctx, master_ip) - timeout = Astute.config.ssh_retry_timeout - shell = MClient.new(ctx, 'execute_shell_command', ['master'], - check_result=true, timeout=timeout, retries=1) - cmd = "ssh root@#{master_ip} 'pkill -HUP rsyslogd'" - - begin - result = shell.execute(:cmd => cmd).first.results - - Astute.logger.info("#{ctx.task_id}: \ - stdout: #{result[:data][:stdout]} stderr: #{result[:data][:stderr]} \ - exit code: #{result[:data][:exit_code]}") - rescue Timeout::Error - msg = "Sending SIGHUP to rsyslogd is timed out." - Astute.logger.error("#{ctx.task_id}: #{msg}") - rescue => e - msg = "Exception occured during sending SIGHUP to rsyslogd, message: #{e.message} \ - trace:\n#{e.backtrace.pretty_inspect}" - Astute.logger.error("#{ctx.task_id}: #{msg}") - end - end - end -end diff --git a/lib/astute/ruby_removed_functions.rb b/lib/astute/ruby_removed_functions.rb deleted file mode 100644 index a22906ec..00000000 --- a/lib/astute/ruby_removed_functions.rb +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -class Date - def self.day_fraction_to_time(fr) - ss, fr = fr.divmod(Rational(1, 86400)) - h, ss = ss.divmod(3600) - min, s = ss.divmod(60) - return h, min, s, fr - end -end \ No newline at end of file diff --git a/lib/astute/server/async_logger.rb b/lib/astute/server/async_logger.rb deleted file mode 100644 index 8011fa55..00000000 --- a/lib/astute/server/async_logger.rb +++ /dev/null @@ -1,79 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require 'thread' - -module Astute - module Server - - # Asynchronous singleton logger, which should be used - # in event callbacks of event machine, it doesn't block - # callbacks because writing a message to log takes some time. - # Also synchronous logger, potentially could lead to deadlocks. - # See: - # https://bugs.launchpad.net/fuel/+bug/1453573 - # https://bugs.launchpad.net/fuel/+bug/1487397 - module AsyncLogger - def self.start_up(logger=Logger.new(STDOUT)) - @queue ||= Queue.new - @log = logger - @thread = Thread.new { flush_messages } - end - - def self.shutdown - @thread.kill - end - - def self.add(severity, msg=nil) - return if @shutdown - - @queue.push([severity, msg]) - end - - def self.debug(msg=nil) - add(Logger::Severity::DEBUG, msg) - end - - def self.info(msg=nil) - add(Logger::Severity::INFO, msg) - end - - def self.warn(msg=nil) - add(Logger::Severity::WARN, msg) - end - - def self.error(msg=nil) - add(Logger::Severity::ERROR, msg) - end - - def self.fatal(msg=nil) - add(Logger::Severity::FATAL, msg) - end - - def self.unknown(msg=nil) - add(Logger::Severity::UNKNOWN, msg) - end - - private - - def self.flush_messages - loop do - severity, msg = @queue.pop - @log.add(severity, msg) - end - end - - end - end -end \ No newline at end of file diff --git a/lib/astute/server/dispatcher.rb b/lib/astute/server/dispatcher.rb deleted file mode 100644 index b1f8281e..00000000 --- a/lib/astute/server/dispatcher.rb +++ /dev/null @@ -1,332 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require 'astute/server/reporter' - -module Astute - module Server - - class Dispatcher - def initialize(producer) - @orchestrator = Astute::Orchestrator.new(log_parsing=true) - @producer = producer - @provisionLogParser = Astute::LogParser::ParseProvisionLogs.new - end - - def echo(args) - Astute.logger.info('Running echo command') - args - end - - # - # Main worker actions - # - - def image_provision(data) - provision(data) - end - - def provision(data) - Astute.logger.debug("'provision' method called with data:\n"\ - "#{data.pretty_inspect}") - - reporter = create_reporter(data) - begin - result = @orchestrator.provision( - reporter, - data['args']['task_uuid'], - data['args']['provisioning_info'] - ) - rescue => e - Astute.logger.error("Error running provisioning: #{e.message}, "\ - "trace: #{e.format_backtrace}") - raise StopIteration - end - raise StopIteration if result && result['status'] == 'error' - end - - def granular_deploy(data) - Astute.logger.debug("'granular_deploy' method called with data:\n"\ - "#{data.pretty_inspect}") - - reporter = create_reporter(data) - begin - @orchestrator.granular_deploy( - reporter, - data['args']['task_uuid'], - data['args']['deployment_info'], - data['args']['pre_deployment'] || [], - data['args']['post_deployment'] || [] - ) - reporter.report('status' => 'ready', 'progress' => 100) - rescue Timeout::Error - msg = "Timeout of deployment is exceeded." - Astute.logger.error(msg) - reporter.report('status' => 'error', 'error' => msg) - - end - end - - def task_deploy(data) - Astute.logger.debug("'task_deploy' method called with data:\n"\ - "#{data.pretty_inspect}") - - Thread.current[:gracefully_stop] = false - reporter = create_reporter(data) - begin - @orchestrator.task_deploy( - reporter, - data['args']['task_uuid'], - { - :tasks_graph => data['args'].fetch('tasks_graph', {}), - :tasks_directory => data['args'].fetch('tasks_directory', {}), - :tasks_metadata => data['args'].fetch('tasks_metadata', {}), - :dry_run => data['args'].fetch('dry_run', false), - :noop_run => data['args'].fetch('noop_run', false), - :debug => data['args'].fetch('debug', false) - } - ) - rescue Timeout::Error - msg = "Timeout of deployment is exceeded." - Astute.logger.error(msg) - reporter.report('status' => 'error', 'error' => msg) - end - end - - def verify_networks(data) - data.fetch('subtasks', []).each do |subtask| - if self.respond_to?(subtask['method']) - self.send(subtask['method'], subtask) - else - Astute.logger.warn("No method for #{subtask}") - end - end - reporter = create_reporter(data) - result = @orchestrator.verify_networks( - reporter, - data['args']['task_uuid'], - data['args']['nodes'] - ) - report_result(result, reporter) - end - - def check_dhcp(data) - reporter = create_reporter(data) - result = @orchestrator.check_dhcp( - reporter, - data['args']['task_uuid'], - data['args']['nodes'] - ) - report_result(result, reporter) - end - - def multicast_verification(data) - reporter = create_reporter(data) - result = @orchestrator.multicast_verification( - reporter, - data['args']['task_uuid'], - data['args']['nodes'] - ) - report_result(result, reporter) - end - - def check_repositories(data) - reporter = create_reporter(data) - result = @orchestrator.check_repositories( - reporter, - data['args']['task_uuid'], - data['args']['nodes'], - data['args']['urls'] - ) - report_result(result, reporter) - end - - def check_repositories_with_setup(data) - reporter = create_reporter(data) - result = @orchestrator.check_repositories_with_setup( - reporter, - data['args']['task_uuid'], - data['args']['nodes'] - ) - report_result(result, reporter) - end - - def dump_environment(data) - @orchestrator.dump_environment( - create_reporter(data), - data['args']['task_uuid'], - data['args']['settings'] - ) - end - - def remove_nodes(data, reset=false) - task_uuid = data['args']['task_uuid'] - reporter = create_reporter(data) - - result = if data['args']['nodes'].empty? - Astute.logger.debug("#{task_uuid} Node list is empty") - nil - else - @orchestrator.remove_nodes( - reporter, - task_uuid, - data['args']['engine'], - data['args']['nodes'], - { - :reboot => true, - :check_ceph => data['args']['check_ceph'], - :reset => reset - } - ) - end - - report_result(result, reporter) - end - - def reset_environment(data) - remove_nodes(data, reset=true) - end - - def execute_tasks(data) - @orchestrator.execute_tasks( - create_reporter(data), - data['args']['task_uuid'], - data['args']['tasks'] - ) - end - - # - # Service worker actions - # - - def stop_deploy_task(data, service_data) - Astute.logger.debug("'stop_deploy_task' service method called with"\ - "data:\n#{data.pretty_inspect}") - target_task_uuid = data['args']['stop_task_uuid'] - task_uuid = data['args']['task_uuid'] - - return unless task_in_queue?(target_task_uuid, - service_data[:tasks_queue]) - - Astute.logger.debug("Cancel task #{target_task_uuid}. Start") - if target_task_uuid == service_data[:tasks_queue].current_task_id - reporter = create_reporter(data) - result = stop_current_task(data, service_data, reporter) - report_result(result, reporter) - else - replace_future_task(data, service_data) - end - end - - private - - def create_reporter(data) - Astute::Server::Reporter.new( - @producer, - data['respond_to'], - data['args']['task_uuid'] - ) - end - - def task_in_queue?(task_uuid, tasks_queue) - tasks_queue.task_in_queue?(task_uuid) - end - - def replace_future_task(data, service_data) - target_task_uuid = data['args']['stop_task_uuid'] - task_uuid = data['args']['task_uuid'] - - new_task_data = data_for_rm_nodes(data) - Astute.logger.debug("Replace running task #{target_task_uuid} to "\ - "new #{task_uuid} with data:\n"\ - "#{new_task_data.pretty_inspect}") - service_data[:tasks_queue].replace_task( - target_task_uuid, - new_task_data - ) - end - - def stop_current_task(data, service_data, reporter) - target_task_uuid = data['args']['stop_task_uuid'] - task_uuid = data['args']['task_uuid'] - nodes = data['args']['nodes'] - - result = if ['deploy', 'granular_deploy'].include? ( - service_data[:tasks_queue].current_task_method) - kill_main_process(target_task_uuid, service_data) - - @orchestrator.stop_puppet_deploy(reporter, task_uuid, nodes) - @orchestrator.remove_nodes( - reporter, - task_uuid, - data['args']['engine'], - nodes - ) - elsif ['task_deploy'].include? ( - service_data[:tasks_queue].current_task_method) - gracefully_stop_main_process(target_task_uuid, service_data) - wait_while_process_run( - service_data[:main_work_thread], - Astute.config.stop_timeout, - target_task_uuid, - service_data - ) - else - kill_main_process(target_task_uuid, service_data) - @orchestrator.stop_provision( - reporter, - task_uuid, - data['args']['engine'], - nodes - ) - end - end - - def kill_main_process(target_task_uuid, service_data) - Astute.logger.info("Try to kill running task #{target_task_uuid}") - service_data[:main_work_thread].kill - end - - def gracefully_stop_main_process(target_task_uuid, service_data) - Astute.logger.info("Try to stop gracefully running " \ - "task #{target_task_uuid}") - service_data[:main_work_thread][:gracefully_stop] = true - end - - def wait_while_process_run(process, timeout, target_task_uuid, service_data) - Astute.logger.info("Wait until process will stop or exit " \ - "by timeout #{timeout}") - Timeout::timeout(timeout) { process.join } - {} - rescue Timeout::Error => e - msg = "Timeout (#{timeout} sec) was reached." - Astute.logger.warn(msg) - kill_main_process(target_task_uuid, service_data) - {'status' => 'error', 'error' => msg} - end - - def data_for_rm_nodes(data) - data['method'] = 'remove_nodes' - data - end - - def report_result(result, reporter) - result = {} unless result.instance_of?(Hash) - status = {'status' => 'ready', 'progress' => 100}.merge(result) - reporter.report(status) - end - end - - end #Server -end #Astute diff --git a/lib/astute/server/producer.rb b/lib/astute/server/producer.rb deleted file mode 100644 index 74b4800c..00000000 --- a/lib/astute/server/producer.rb +++ /dev/null @@ -1,61 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - module Server - class Producer - def initialize(exchange) - @exchange = exchange - @publish_queue = Queue.new - @publish_consumer = Thread.new do - loop do - msg = @publish_queue.pop - publish_from_queue msg - end - end - end - - def publish_from_queue(message) - Astute.logger.info "Casting message to Nailgun:\n"\ - "#{message[:message].pretty_inspect}" - @exchange.publish(message[:message].to_json, message[:options]) - rescue => e - Astute.logger.error "Error publishing message: #{e.message}" - end - - def publish(message, options={}) - default_options = { - :routing_key => Astute.config.broker_publisher_queue, - :content_type => 'application/json' - } - - # Status message manage task status in Nailgun. If we miss some of them, - # user need manually delete them or change it status using DB. - # Persistent option tell RabbitMQ to save message in case of - # unexpected/expected restart. - if message.respond_to?(:keys) && message.keys.map(&:to_s).include?('status') - default_options.merge!({:persistent => true}) - end - - options = default_options.merge(options) - @publish_queue << {:message => message, :options => options} - end - - def stop - @publish_consumer.kill - end - - end # Producer - end #Server -end #Astute diff --git a/lib/astute/server/reporter.rb b/lib/astute/server/reporter.rb deleted file mode 100644 index ec27ecc9..00000000 --- a/lib/astute/server/reporter.rb +++ /dev/null @@ -1,33 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - module Server - - class Reporter - def initialize(producer, method, task_uuid) - @producer = producer - @method = method - @task_uuid = task_uuid - end - - def report(msg) - msg_with_task = {'task_uuid' => @task_uuid}.merge(msg) - message = {'method' => @method, 'args' => msg_with_task} - @producer.publish(message) - end - end - - end #Server -end #Astute diff --git a/lib/astute/server/server.rb b/lib/astute/server/server.rb deleted file mode 100644 index aa35f814..00000000 --- a/lib/astute/server/server.rb +++ /dev/null @@ -1,253 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require 'json' -require 'securerandom' -require 'astute/server/task_queue' -require 'zlib' - -module Astute - module Server - - class Server - def initialize(channels_and_exchanges, delegate, producer) - @channel = channels_and_exchanges[:channel] - @exchange = channels_and_exchanges[:exchange] - @delegate = delegate - @producer = producer - @service_channel = channels_and_exchanges[:service_channel] - @service_exchange = channels_and_exchanges[:service_exchange] - # NOTE(eli): Generate unique name for service queue - # See bug: https://bugs.launchpad.net/fuel/+bug/1485895 - @service_queue_name = "naily_service_#{SecureRandom.uuid}" - @watch_thread = nil - end - - def run - @queue = @channel.queue( - Astute.config.broker_queue, - :durable => true - ) - @queue.bind(@exchange) - - @service_queue = @service_channel.queue( - @service_queue_name, - :exclusive => true, - :auto_delete => true - ) - @service_queue.bind(@service_exchange) - - @main_work_thread = nil - @tasks_queue = TaskQueue.new - - register_callbacks - - run_infinite_loop - @watch_thread.join - end - - def stop - @watch_thread.wakeup - end - - private - - def run_infinite_loop - @watch_thread = Thread.new do - Thread.stop - Astute.logger.debug "Stop main thread" - end - end - - def register_callbacks - main_worker - service_worker - end - - def main_worker - @queue.subscribe(:manual_ack => true) do |delivery_info, properties, payload| - if @main_work_thread.nil? || !@main_work_thread.alive? - @channel.acknowledge(delivery_info.delivery_tag, false) - perform_main_job(payload, properties) - else - Astute.logger.debug "Requeue message because worker is busy" - # Avoid throttle by consume/reject cycle - # if only one worker is running - @channel.reject(delivery_info.delivery_tag, true) - end - end - end - - def service_worker - @service_queue.subscribe do |_delivery_info, properties, payload| - perform_service_job(payload, properties) - end - end - - def perform_main_job(payload, properties) - @main_work_thread = Thread.new do - data = parse_data(payload, properties) - Astute.logger.debug("Process message from worker queue:\n"\ - "#{data.pretty_inspect}") - @tasks_queue = Astute::Server::TaskQueue.new - - @tasks_queue.add_task(data) - dispatch(@tasks_queue) - - # Clean up tasks queue to prevent wrong service job work flow for - # already finished tasks - @tasks_queue = TaskQueue.new - end - end - - def perform_service_job(payload, properties) - Thread.new do - service_data = { - :main_work_thread => @main_work_thread, - :tasks_queue => @tasks_queue - } - data = parse_data(payload, properties) - Astute.logger.debug("Process message from service queue:\n"\ - "#{data.pretty_inspect}") - dispatch(data, service_data) - end - end - - def dispatch(data, service_data=nil) - data.each_with_index do |message, i| - begin - send_running_task_status(message) - dispatch_message message, service_data - rescue StopIteration - Astute.logger.debug "Dispatching aborted by #{message['method']}" - abort_messages data[(i + 1)..-1] - break - rescue => ex - Astute.logger.error "Error running RPC method "\ - "#{message['method']}: #{ex.message}, "\ - "trace: #{ex.format_backtrace}" - return_results message, { - 'status' => 'error', - 'error' => "Method #{message['method']}. #{ex.message}.\n" \ - "Inspect Astute logs for the details" - } - break - end - end - end - - def dispatch_message(data, service_data=nil) - if Astute.config.fake_dispatch - Astute.logger.debug "Fake dispatch" - return - end - - unless @delegate.respond_to?(data['method']) - Astute.logger.error "Unsupported RPC call '#{data['method']}'" - return_results data, { - 'status' => 'error', - 'error' => "Unsupported method '#{data['method']}' called." - } - return - end - - if service_data.nil? - Astute.logger.debug "Main worker task id is "\ - "#{@tasks_queue.current_task_id}" - end - - Astute.logger.info "Processing RPC call '#{data['method']}'" - if !service_data - @delegate.send(data['method'], data) - else - @delegate.send(data['method'], data, service_data) - end - end - - def send_running_task_status(message) - return_results(message, {'status' => 'running'}) - end - - def return_results(message, results={}) - if results.is_a?(Hash) && message['respond_to'] - reporter = Astute::Server::Reporter.new( - @producer, - message['respond_to'], - message['args']['task_uuid'] - ) - reporter.report results - end - end - - def parse_data(data, properties) - data = unzip_message(data, properties) if zip?(properties) - messages = begin - JSON.load(data) - rescue => e - Astute.logger.error "Error deserializing payload: #{e.message},"\ - " trace:\n#{e.backtrace.pretty_inspect}" - nil - end - messages.is_a?(Array) ? messages : [messages] - end - - def unzip_message(data, properties) - Zlib::Inflate.inflate(data) - rescue => e - msg = "Gzip failure with error #{e.message} in\n"\ - "#{e.backtrace.pretty_inspect} with properties\n"\ - "#{properties.pretty_inspect} on data\n#{data.pretty_inspect}" - Astute.logger.error(msg) - raise e, msg - end - - def zip?(properties) - properties[:headers]['compression'] == "application/x-gzip" - end - - def abort_messages(messages) - return unless messages && messages.size > 0 - messages.each do |message| - begin - Astute.logger.debug "Aborting '#{message['method']}'" - err_msg = { - 'status' => 'error', - 'error' => 'Task aborted', - 'progress' => 100 - } - - if message['args']['nodes'].instance_of?(Array) - err_nodes = message['args']['nodes'].map do |node| - { - 'uid' => node['uid'], - 'status' => 'error', - 'error_type' => 'provision', - 'progress' => 0 - } - end - - err_msg.merge!('nodes' => err_nodes) - end - - return_results(message, err_msg) - rescue => ex - Astute.logger.debug "Failed to abort '#{message['method']}':\n"\ - "#{ex.pretty_inspect}" - end - end - end - end - - end #Server -end #Astute diff --git a/lib/astute/server/task_queue.rb b/lib/astute/server/task_queue.rb deleted file mode 100644 index 8a8ff8f4..00000000 --- a/lib/astute/server/task_queue.rb +++ /dev/null @@ -1,89 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require 'thread' - -module Astute - module Server - - class TaskQueue - include Enumerable - - attr_reader :current_task_id - attr_reader :current_task_method - - def initialize - @queue = [] - @semaphore = Mutex.new - @current_task_id = nil - @current_task_method = nil - end - - def add_task(data) - @semaphore.synchronize { data.compact.each { |t| @queue << t } } - end - - def replace_task(replacing_task_id, new_task_data) - @semaphore.synchronize do - @queue.map! { |x| find_task_id(x) == replacing_task_id ? new_task_data : x }.flatten! - end - end - - def remove_task(replacing_task_id) - replace_task(replacing_task_id, nil) - end - - def clear_queue - @semaphore.synchronize { @queue.map! { |x| nil } } - end - - def task_in_queue?(task_id) - @semaphore.synchronize { @queue.find { |t| find_task_id(t) == task_id } } - end - - def each(&block) - @queue.each do |task| - @semaphore.synchronize do - next if task.nil? - @current_task_id = find_task_id(task) - @current_task_method = find_task_method(task) - end - - if block_given? - block.call task - else - yield task - end - end - ensure - @semaphore.synchronize do - @current_task_id = nil - @current_task_method = nil - end - end - - private - - def find_task_id(data) - data && data['args'] && data['args']['task_uuid'] ? data['args']['task_uuid'] : nil - end - - def find_task_method(data) - data && data['method'] - end - - end - - end #Server -end #Astute \ No newline at end of file diff --git a/lib/astute/server/worker.rb b/lib/astute/server/worker.rb deleted file mode 100644 index d816d5bb..00000000 --- a/lib/astute/server/worker.rb +++ /dev/null @@ -1,182 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require 'raemon' -require 'net/http' -require 'bunny' - -module Astute - module Server - - class Worker - include Raemon::Worker - - DELAY_SEC = 5 - - def start - super - start_heartbeat - Astute::Server::AsyncLogger.start_up(Astute.logger) - Astute.logger = Astute::Server::AsyncLogger - end - - def stop - super - @connection.stop if defined?(@connection) && @connection.present? - @producer.stop if defined?(@producer) && @producer.present? - @server.stop if defined?(@server) && @server.present? - Astute::Server::AsyncLogger.shutdown - end - - def run - Astute.logger.info "Worker initialization" - run_server - rescue Bunny::TCPConnectionFailed => e - Astute.logger.warn "TCP connection to AMQP failed: #{e.message}. "\ - "Retry #{DELAY_SEC} sec later..." - sleep DELAY_SEC - retry - rescue Bunny::PossibleAuthenticationFailureError => e - Astute.logger.warn "If problem repeated more than 5 minutes, "\ - "please check "\ - "authentication parameters. #{e.message}. "\ - "Retry #{DELAY_SEC} sec later..." - sleep DELAY_SEC - retry - rescue => e - Astute.logger.error "Exception during worker initialization:"\ - " #{e.message}, trace: #{e.format_backtrace}" - Astute.logger.warn "Retry #{DELAY_SEC} sec later..." - sleep DELAY_SEC - retry - end - - private - - def start_heartbeat - @heartbeat ||= Thread.new do - sleep 30 - heartbeat! - end - end - - def run_server - @connection = Bunny.new(connection_options) - @connection.start - channels_and_exchanges = declare_channels_and_exchanges(@connection) - - @producer = Astute::Server::Producer.new( - channels_and_exchanges[:report_exchange] - ) - delegate = Astute::Server::Dispatcher.new(@producer) - @server = Astute::Server::Server.new( - channels_and_exchanges, - delegate, - @producer - ) - - @server.run - end - - def declare_channels_and_exchanges(connection) - # WARN: Bunny::Channel are designed to assume they are - # not shared between threads. - channel = @connection.create_channel - exchange = channel.topic( - Astute.config.broker_exchange, - :durable => true - ) - - report_channel = @connection.create_channel - report_exchange = report_channel.topic( - Astute.config.broker_exchange, - :durable => true - ) - - service_channel = @connection.create_channel - service_channel.prefetch(0) - - service_exchange = service_channel.fanout( - Astute.config.broker_service_exchange, - :auto_delete => true - ) - - return { - :exchange => exchange, - :service_exchange => service_exchange, - :channel => channel, - :service_channel => service_channel, - :report_channel => report_channel, - :report_exchange => report_exchange - } - rescue Bunny::PreconditionFailed => e - Astute.logger.warn "Try to remove problem exchanges and queues" - if connection.queue_exists? Astute.config.broker_queue - channel.queue_delete Astute.config.broker_queue - end - if connection.queue_exists? Astute.config.broker_publisher_queue - channel.queue_delete Astute.config.broker_publisher_queue - end - - cleanup_rabbitmq_stuff - raise e - end - - def connection_options - { - :host => Astute.config.broker_host, - :port => Astute.config.broker_port, - :user => Astute.config.broker_username, - :pass => Astute.config.broker_password, - :heartbeat => :server - }.reject{|k, v| v.nil? } - end - - def cleanup_rabbitmq_stuff - Astute.logger.warn "Try to remove problem exchanges and queues" - - - [Astute.config.broker_exchange, - Astute.config.broker_service_exchange].each do |exchange| - rest_delete("/api/exchanges/%2F/#{exchange}") - end - end - - def rest_delete(url) - http = Net::HTTP.new( - Astute.config.broker_host, - Astute.config.broker_rest_api_port - ) - request = Net::HTTP::Delete.new(url) - request.basic_auth( - Astute.config.broker_username, - Astute.config.broker_password - ) - - response = http.request(request) - - case response.code.to_i - when 204 then Astute.logger.debug "Successfully delete object at #{url}" - when 404 then - else - Astute.logger.error "Failed to perform delete request. Debug"\ - " information: http code: #{response.code},"\ - " message: #{response.message},"\ - " body #{response.body}" - end - end - - end # Worker - end #Server -end #Astute diff --git a/lib/astute/task.rb b/lib/astute/task.rb deleted file mode 100644 index 60f559ca..00000000 --- a/lib/astute/task.rb +++ /dev/null @@ -1,195 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - class Task - - ALLOWED_STATUSES = [:successful, :failed, :running, :pending, :skipped] - attr_reader :task, :ctx - def initialize(task, context) - # WARNING: this code expect that only one node will be send - # on one hook. - @task = task - @status = :pending - @ctx = context - @time_start = Time.now.to_i - post_initialize(task, context) - end - - # Run current task on node, specified in task - def run - validation - setup_default - running! - process - rescue => e - Astute.logger.warn("Fail to run task #{task['type']} #{task_name}" \ - " with error #{e.message} trace: #{e.format_backtrace}") - failed! - end - - # Polls the status of the task - def status - calculate_status unless finished? - @status - rescue => e - Astute.logger.warn("Fail to detect status of the task #{task['type']}" \ - " #{task_name} with error #{e.message} trace: #{e.format_backtrace}") - failed! - end - - def status=(value) - value = value.to_sym - unless ALLOWED_STATUSES.include?(value) - raise AstuteError::InvalidArgument, - "#{self}: Invalid task status: #{value}" - end - @status = value - end - - # Run current task on node, specified in task, using sync mode - def sync_run - run - loop do - sleep Astute.config.task_poll_delay - status - break if finished? - end - - successful? - end - - # Show additional info about tasks: last run summary, sdtout etc - def summary - {} - end - - def finished? - [:successful, :failed, :skipped].include? @status - end - - def successful? - @status == :successful - end - - def pending? - @status == :pending - end - - def skipped? - @status == :skipped - end - - def running? - @status == :running - end - - def failed? - @status == :failed - end - - def post_initialize(task, context) - nil - end - - private - - # Run current task on node, specified in task - # should be fast and async and do not raise exceptions - # @abstract Should be implemented in a subclass - def process - raise NotImplementedError - end - - # Polls the status of the task - # should update the task status and do not raise exceptions - # @abstract Should be implemented in a subclass - def calculate_status - raise NotImplementedError - end - - def validate_presence(data, key) - raise TaskValidationError, - "Missing a required parameter #{key}" unless data[key].present? - end - - # Pre validation of the task - # should check task and raise error if something went wrong - # @raise [TaskValidationError] if the object is not a task or has missing fields - def validation - - end - - # Setup default value for hook - # should not raise any exception - def setup_default - - end - - # Run short shell commands - # should use only in case of short run command - # In other case please use shell task - # Synchronous (blocking) call - def run_shell_without_check(node_uid, cmd, timeout=2) - ShellMClient.new(@ctx, node_uid).run_without_check(cmd, timeout) - end - - # Create file with content on selected node - # should use only for small file - # In other case please use separate thread or - # use upload file task. - # Synchronous (blocking) call - def upload_file(node_uid, mco_params) - UploadFileMClient.new(@ctx, node_uid).upload_without_check(mco_params) - end - - # Create file with content on selected node - # should use only for small file - # Synchronous (blocking) call - def upload_file_with_check(node_uid, mco_params) - UploadFileMClient.new(@ctx, node_uid).upload_with_check(mco_params) - end - - def failed! - self.status = :failed - time_summary - end - - def running! - self.status = :running - end - - def succeed! - self.status = :successful - time_summary - end - - def skipped! - self.status = :skipped - time_summary - end - - def task_name - task['id'] || task['diagnostic_name'] - end - - def time_summary - amount_time = (Time.now.to_i - @time_start).to_i - wasted_time = Time.at(amount_time).utc.strftime("%H:%M:%S") - Astute.logger.debug("Task time summary: #{task_name} with status" \ - " #{@status.to_s} on node #{task['node_id']} took #{wasted_time}") - end - - end -end diff --git a/lib/astute/task_cluster.rb b/lib/astute/task_cluster.rb deleted file mode 100644 index ba2a7ce2..00000000 --- a/lib/astute/task_cluster.rb +++ /dev/null @@ -1,36 +0,0 @@ -# Copyright 2016 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. -require 'fuel_deployment' - -module Astute - class TaskCluster < Deployment::Cluster - attr_accessor :noop_run, :debug_run - - def initialize(id=nil) - super - @node_statuses_transitions = {} - end - - attr_accessor :node_statuses_transitions - - def hook_post_gracefully_stop(*args) - report_new_node_status(args[0]) - end - - def report_new_node_status(node) - node.report_node_status - end - - end -end diff --git a/lib/astute/task_deployment.rb b/lib/astute/task_deployment.rb deleted file mode 100644 index cfdd2a19..00000000 --- a/lib/astute/task_deployment.rb +++ /dev/null @@ -1,380 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. -require_relative '../fuel_deployment' - -module Astute - class TaskDeployment - - - #TODO(vsharshov): remove this default after adding support of node - # status transition to Nailgun - NODE_STATUSES_TRANSITIONS = { - 'successful' => {'status' => 'ready'}, - 'stopped' => {'status' => 'stopped'}, - 'failed' => {'status' => 'error', 'error_type' => 'deploy'} - } - - attr_reader :ctx, :cluster_class, :node_class - def initialize(context, cluster_class=TaskCluster, node_class=TaskNode) - @ctx = context - @cluster_class = cluster_class - @node_class = node_class - end - - def self.munge_task(tasks_names, tasks_graph) - result = Set.new - tasks_names.each do |task| - if task.is_a? Deployment::Task - result.add task - next - end - Astute.logger.debug("munging task #{task}") - parts = task.split('/') - task_name = parts[0] - task_range = parts[1] - if task_range - Astute.logger.debug("expanding task #{task} range to specific nodes #{task_range}") - node_ids = expand_node_ids(task_range).flatten - Astute.logger.debug("expanded task #{task} range to #{node_ids.to_a}") - else - Astute.logger.debug("expanding task #{task} range to all_nodes") - node_ids = tasks_graph.each_node.collect {|node| node.uid} - end - exp_t = tasks_graph.each_task.select do |_task| - #Astute.logger.debug("task node id comparison is #{_task.node in? node_ids}") - rv = (_task.name == task_name and _task.node.uid.in? node_ids) - rv - end - exp_t.each do |t| - result.add t - end - end - result - end - - def self.expand_node_ids(interval) - interval.split(',').collect do |part| - if part =~ /^(\d+)-(\d+)$/ - ($1.to_i .. $2.to_i).to_a - else - part - end - end - end - - def self.munge_list_of_start_end(tasks_graph, subgraphs) - subgraphs.each do |subgraph| - subgraph['start'] ||= [] - subgraph['end'] ||= [] - Astute.logger.debug("munging start tasks #{subgraph['start'].to_a} ") - subgraph['start'] = munge_task(subgraph['start'], tasks_graph) unless subgraph['start'].blank? - Astute.logger.debug("munged start tasks to #{subgraph['start'].to_a}") - Astute.logger.debug("munging end tasks #{subgraph['end'].to_a} ") - subgraph['end'] = munge_task(subgraph['end'], tasks_graph) unless subgraph['end'].blank? - Astute.logger.debug("munged end tasks to #{subgraph['end'].to_a} ") - end - end - - def create_cluster(deployment_options={}) - tasks_graph = deployment_options.fetch(:tasks_graph, {}) - tasks_directory = deployment_options.fetch(:tasks_directory, {}) - tasks_metadata = deployment_options.fetch(:tasks_metadata, {}) - - raise DeploymentEngineError, 'Deployment graph was not provided!' if tasks_graph.blank? - - support_virtual_node(tasks_graph) - unzip_graph(tasks_graph, tasks_directory) - - cluster = cluster_class.new - cluster.node_concurrency.maximum = Astute.config.max_nodes_per_call - cluster.stop_condition { Thread.current[:gracefully_stop] } - - cluster.noop_run = deployment_options.fetch(:noop_run, false) - cluster.debug_run = deployment_options.fetch(:debug, false) - - cluster.node_statuses_transitions = tasks_metadata.fetch( - 'node_statuses_transitions', - NODE_STATUSES_TRANSITIONS - ) - - setup_fault_tolerance_behavior( - tasks_metadata['fault_tolerance_groups'], - cluster, - tasks_graph.keys - ) - critical_uids = critical_node_uids(cluster.fault_tolerance_groups) - offline_uids = detect_offline_nodes(tasks_graph.keys) - - fail_offline_nodes( - :offline_uids => offline_uids, - :critical_uids => critical_uids, - :node_statuses_transitions => cluster.node_statuses_transitions - ) - - tasks_graph.keys.each do |node_id| - node = node_class.new(node_id, cluster) - node.context = ctx - node.set_critical if critical_uids.include?(node_id) - node.set_as_sync_point if sync_point?(node_id) - node.set_status_failed if offline_uids.include?(node_id) - end - - setup_fail_behavior(tasks_graph, cluster) - setup_debug_behavior(tasks_graph, cluster) - setup_tasks(tasks_graph, cluster) - setup_task_depends(tasks_graph, cluster) - setup_task_concurrency(tasks_graph, cluster) - subgraphs = self.class.munge_list_of_start_end(cluster, tasks_metadata.fetch('subgraphs', [])) - cluster.subgraphs = subgraphs unless subgraphs.compact_blank.blank? - Astute.logger.debug(cluster.subgraphs) - cluster.setup_start_end unless cluster.subgraphs.blank? - cluster - end - - def deploy(deployment_options={}) - cluster = create_cluster(deployment_options) - dry_run = deployment_options.fetch(:dry_run, false) - write_graph_to_file(cluster) - result = if dry_run - {:success => true} - else - run_result = cluster.run - # imitate dry_run results for noop run after deployment - cluster.noop_run ? {:success => true } : run_result - end - report_final_node_progress(cluster) - report_deploy_result(result) - end - - private - - def sync_point?(node_id) - 'virtual_sync_node' == node_id - end - - def unzip_graph(tasks_graph, tasks_directory) - tasks_graph.each do |node_id, tasks| - tasks.each do |task| - task.merge!({'node_id' => node_id}) - .reverse_merge(tasks_directory.fetch(task['id'], {})) - end - end - tasks_graph - end - - def setup_fault_tolerance_behavior(fault_tolerance_groups, cluster, nodes) - fault_tolerance_groups = [] if fault_tolerance_groups.nil? - - defined_nodes = fault_tolerance_groups.map { |g| g['node_ids'] }.flatten.uniq - all_nodes = nodes.select{ |n| !sync_point?(n) } - undefined_nodes = all_nodes - defined_nodes - - fault_tolerance_groups << { - 'fault_tolerance' => 0, - 'name' => 'zero_tolerance_as_default_for_nodes', - 'node_ids' => undefined_nodes - } - - cluster.fault_tolerance_groups = fault_tolerance_groups - end - - def setup_fail_behavior(tasks_graph, cluster) - return unless cluster.noop_run - tasks_graph.each do |node_id, tasks| - tasks.each do |task| - task['fail_on_error'] = false - end - end - end - - def setup_debug_behavior(tasks_graph, cluster) - return unless cluster.debug_run - tasks_graph.each do |node_id, tasks| - tasks.each do |task| - if task['parameters'].present? - task['parameters']['debug'] = true - else - task['parameters'] = { 'debug' => true } - end - end - end - end - - def setup_tasks(tasks_graph, cluster) - tasks_graph.each do |node_id, tasks| - tasks.each do |task| - cluster[node_id].graph.create_task(task['id'], task) - end - end - end - - def setup_task_depends(tasks_graph, cluster) - tasks_graph.each do |node_id, tasks| - tasks.each do |task| - task.fetch('requires', []).each do |d_t| - cluster[node_id][task['id']].depends( - cluster[d_t['node_id']][d_t['name']]) - end - - task.fetch('required_for', []).each do |d_t| - cluster[node_id][task['id']].depended_on( - cluster[d_t['node_id']][d_t['name']]) - end - end - end - end - - def setup_task_concurrency(tasks_graph, cluster) - tasks_graph.each do |_node_id, tasks| - tasks.each do |task| - cluster.task_concurrency[task['id']].maximum = task_concurrency_value(task) - end - end - end - - def task_concurrency_value(task) - strategy = task.fetch('parameters', {}).fetch('strategy', {}) - value = case strategy['type'] - when 'one_by_one' then 1 - when 'parallel' then strategy['amount'].to_i - else 0 - end - return value if value >= 0 - raise DeploymentEngineError, "Task concurrency expect only "\ - "non-negative integer, but got #{value}. Please check task #{task}" - end - - def report_deploy_result(result) - if result[:success] && result.fetch(:failed_nodes, []).empty? - ctx.report('status' => 'ready', 'progress' => 100) - elsif result[:success] && result.fetch(:failed_nodes, []).present? - ctx.report('status' => 'ready', 'progress' => 100) - else - ctx.report( - 'status' => 'error', - 'progress' => 100, - 'error' => result[:status] - ) - end - end - - def write_graph_to_file(deployment) - return unless Astute.config.enable_graph_file - graph_file = File.join( - Astute.config.graph_dot_dir, - "graph-#{ctx.task_id}.dot" - ) - File.open(graph_file, 'w') { |f| f.write(deployment.to_dot) } - Astute.logger.info("Check graph into file #{graph_file}") - end - - # Astute use special virtual node for deployment tasks, because - # any task must be connected to node. For task, which play - # synchronization role, we create virtual_sync_node - def support_virtual_node(tasks_graph) - tasks_graph['virtual_sync_node'] = tasks_graph['null'] - tasks_graph.delete('null') - - tasks_graph.each do |_node_id, tasks| - tasks.each do |task| - task.fetch('requires',[]).each do |d_t| - d_t['node_id'] = 'virtual_sync_node' if d_t['node_id'].nil? - end - - task.fetch('required_for', []).each do |d_t| - d_t['node_id'] = 'virtual_sync_node' if d_t['node_id'].nil? - end - end - end - - tasks_graph - end - - def critical_node_uids(fault_tolerance_groups) - return [] if fault_tolerance_groups.blank? - critical_nodes = fault_tolerance_groups.inject([]) do |critical_uids, group| - critical_uids += group['node_ids'] if group['fault_tolerance'].zero? - critical_uids - end - Astute.logger.info "Critical node #{critical_nodes}" if critical_nodes.present? - critical_nodes - end - - def fail_offline_nodes(args={}) - critical_uids = args.fetch(:critical_uids, []) - offline_uids = args.fetch(:offline_uids, []) - node_statuses_transitions = args.fetch(:node_statuses_transitions, {}) - - return if offline_uids.blank? - - nodes = offline_uids.map do |uid| - {'uid' => uid, - 'error_msg' => 'Node is not ready for deployment: '\ - 'mcollective has not answered' - }.merge(node_statuses_transitions.fetch('failed', {})) - end - - ctx.report_and_update_status( - 'nodes' => nodes, - 'error' => 'Node is not ready for deployment' - ) - - missing_required = critical_uids & offline_uids - if missing_required.present? - error_message = "Critical nodes are not available for deployment: " \ - "#{missing_required}" - raise Astute::DeploymentEngineError, error_message - end - - end - - def detect_offline_nodes(uids) - available_uids = [] - - uids.delete('master') - uids.delete('virtual_sync_node') - # In case of big amount of nodes we should do several calls to be sure - # about node status - if uids.present? - Astute.config.mc_retries.times.each do - systemtype = MClient.new( - ctx, - "systemtype", - uids, - _check_result=false, - 10 - ) - available_nodes = systemtype.get_type - - available_uids += available_nodes.map { |node| node.results[:sender] } - uids -= available_uids - break if uids.empty? - - sleep Astute.config.mc_retry_interval - end - end - - Astute.logger.warn "Offline node #{uids}" if uids.present? - uids - end - - def report_final_node_progress(cluster) - node_report = cluster.nodes.inject([]) do |node_progress, node| - node_progress += [{'uid' => node[0].to_s, 'progress' => 100}] - end - ctx.report('nodes' => node_report) - end - - end -end diff --git a/lib/astute/task_manager.rb b/lib/astute/task_manager.rb deleted file mode 100644 index 0c11c1a5..00000000 --- a/lib/astute/task_manager.rb +++ /dev/null @@ -1,51 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - - class TaskManager - def initialize(nodes) - @tasks = nodes.inject({}) do |h, n| - h.merge({n['uid'] => n['tasks'].sort_by{ |f| f['priority'] }.each}) - end - - @current_task = {} - Astute.logger.info "The following tasks will be performed on nodes: " \ - "#{@tasks.map {|k, v| {k => v.to_a}}.to_yaml}" - end - - def current_task(node_id) - @current_task[node_id] - end - - def next_task(node_id) - @current_task[node_id] = @tasks[node_id].next - rescue StopIteration - @current_task[node_id] = nil - delete_node(node_id) - end - - def delete_node(node_id) - @tasks[node_id] = nil - end - - def task_in_queue? - @tasks.select{ |_k,v| v }.present? - end - - def node_uids - @tasks.select{ |_k,v| v }.keys - end - end -end \ No newline at end of file diff --git a/lib/astute/task_node.rb b/lib/astute/task_node.rb deleted file mode 100644 index 796563f1..00000000 --- a/lib/astute/task_node.rb +++ /dev/null @@ -1,141 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require 'fuel_deployment' - -module Astute - class TaskNode < Deployment::Node - def context=(context) - @ctx = context - end - - def run(inbox_task) - self.task = inbox_task - @task_engine = select_task_engine(task.data) - @task_engine.run - task.set_status_running - set_status_busy - report_node_status if report_running?(task.data) - end - - def poll - return unless busy? - - debug("Node #{uid}: task #{task.name}, task status #{task.status}") - - # Please be informed that this code define special method - # of Deployment::Node class. We use special method `task` - # to manage task status, graph of tasks and nodes. - task.status = setup_task_status - if @task.running? - @ctx.report({ - 'nodes' => [{ - 'uid' => uid, - 'deployment_graph_task_name' => task.name, - 'task_status' => task.status.to_s, - }] - }) - else - info "Finished task #{task} #{"with status: #{task.status}" if task}" - setup_node_status - report_node_status - end - end - - def report_node_status - node_status = { - 'uid' => uid, - 'progress' => current_progress_bar, - } - node_status.merge!(node_report_status) - - if task - node_status.merge!( - 'deployment_graph_task_name' => task.name, - 'task_status' => task.status.to_s, - 'summary' => @task_engine.summary - ) - node_status.merge!( - 'error_msg' => "Task #{task.name} failed on node #{name}" - ) if task.failed? - end - - @ctx.report('nodes' => [node_status]) - end - - private - - # This method support special task behavior. If task failed - # and we do not think that deployment should be stopped, Astute - # will mark such task as skipped and do not report error - def setup_task_status - if !task.data.fetch('fail_on_error', true) && @task_engine.failed? - Astute.logger.warn "Task #{task.name} failed, but marked as skipped "\ - "because of 'fail on error' behavior" - return :skipped - end - @task_engine.status - end - - def setup_node_status - if task - set_status_failed && return if task.failed? - set_status_skipped && return if task.dep_failed? - end - - set_status_online - end - - def current_progress_bar - if tasks_total_count != 0 - 100 * tasks_finished_count / tasks_total_count - else - 100 - end - end - - def select_task_engine(data) - noop_prefix = noop_run? && not_noop_type?(data) ? "Noop" : "" - task_class_name = noop_prefix + data['type'].split('_').collect(&:capitalize).join - Object.const_get('Astute::' + task_class_name).new(data, @ctx) - rescue => e - raise TaskValidationError, "Unknown task type '#{data['type']}'. Detailed: #{e.message}" - end - - def report_running?(data) - !['noop', 'stage', 'skipped'].include?(data['type']) - end - - def noop_run? - cluster.noop_run - end - - def node_report_status - if !finished? - {} - elsif skipped? - cluster.node_statuses_transitions.fetch('stopped', {}) - elsif successful? - cluster.node_statuses_transitions.fetch('successful', {}) - else - cluster.node_statuses_transitions.fetch('failed', {}) - end - end - - def not_noop_type?(data) - !['noop', 'stage', 'skipped'].include?(data['type']) - end - - end -end diff --git a/lib/astute/task_proxy_reporter.rb b/lib/astute/task_proxy_reporter.rb deleted file mode 100644 index 077724d4..00000000 --- a/lib/astute/task_proxy_reporter.rb +++ /dev/null @@ -1,155 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require 'digest/md5' - -module Astute - module ProxyReporter - class TaskProxyReporter - - INTEGRATED_STATES = ['error', 'stopped'] - - REPORT_REAL_TASK_STATE_MAP = { - 'running' => 'running', - 'successful' => 'ready', - 'failed' => 'error', - 'skipped' => 'skipped' - } - - REPORT_REAL_NODE_MAP = { - 'virtual_sync_node' => nil - } - - def initialize(up_reporter) - @up_reporter = up_reporter - @messages_cache = [] - end - - def report(original_data) - return if duplicate?(original_data) - - data = original_data.deep_dup - if data['nodes'] - nodes_to_report = get_nodes_to_report(data['nodes']) - return if nodes_to_report.empty? # Let's report only if nodes updated - - data['nodes'] = nodes_to_report - end - - @up_reporter.report(data) - end - - private - - def get_nodes_to_report(nodes) - nodes.map{ |node| node_validate(node) }.compact - end - - def node_validate(original_node) - node = deep_copy(original_node) - return unless node_should_include?(node) - convert_node_name_to_original(node) - return node unless are_fields_valid?(node) - convert_task_status_to_status(node) - normalization_progress(node) - return node - end - - def are_fields_valid?(node) - are_node_basic_fields_valid?(node) && are_task_basic_fields_valid?(node) - end - - def node_should_include?(node) - is_num?(node['uid']) || - ['master', 'virtual_sync_node'].include?(node['uid']) - end - - def valid_task_status?(status) - REPORT_REAL_TASK_STATE_MAP.keys.include? status.to_s - end - - def integrated_status?(status) - INTEGRATED_STATES.include? status.to_s - end - - # Validate of basic fields in message about node - def are_node_basic_fields_valid?(node) - err = [] - err << "Node uid is not provided" unless node['uid'] - - err.any? ? fail_validation(node, err) : true - end - - # Validate of basic fields in message about task - def are_task_basic_fields_valid?(node) - err = [] - - err << "Task status provided '#{node['task_status']}' is not supported" if - !valid_task_status?(node['task_status']) - err << "Task name is not provided" if node['deployment_graph_task_name'].blank? - - err.any? ? fail_validation(node, err) : true - end - - - def convert_task_status_to_status(node) - node['task_status'] = REPORT_REAL_TASK_STATE_MAP.fetch(node['task_status']) - end - - # Normalization of progress field: ensures that the scaling progress was - # in range from 0 to 100 and has a value of 100 fot the integrated node - # status - def normalization_progress(node) - if node['progress'] - node['progress'] = 100 if node['progress'] > 100 - node['progress'] = 0 if node['progress'] < 0 - else - node['progress'] = 100 if integrated_status?(node['status']) - end - end - - def fail_validation(node, err) - msg = "Validation of node:\n#{node.pretty_inspect} for " \ - "report failed: #{err.join('; ')}" - Astute.logger.warn(msg) - false - end - - def convert_node_name_to_original(node) - if REPORT_REAL_NODE_MAP.keys.include?(node['uid']) - node['uid'] = REPORT_REAL_NODE_MAP.fetch(node['uid']) - end - end - - def is_num?(str) - Integer(str) - rescue ArgumentError, TypeError - false - end - - # Save message digest to protect server from - # message flooding. Sure, because of Hash is complicated structure - # which does not respect order and can be generate different strings - # but we still catch most of possible duplicates. - def duplicate?(data) - msg_digest = Digest::MD5.hexdigest(data.to_s) - return true if @messages_cache.include?(msg_digest) - - @messages_cache << msg_digest - return false - end - - end - end -end \ No newline at end of file diff --git a/lib/astute/tasks/cobbler_sync.rb b/lib/astute/tasks/cobbler_sync.rb deleted file mode 100644 index fe1698cd..00000000 --- a/lib/astute/tasks/cobbler_sync.rb +++ /dev/null @@ -1,41 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - class CobblerSync < Task - - def post_initialize(task, context) - @work_thread = nil - end - - private - - def process - cobbler = CobblerManager.new( - task['parameters']['provisioning_info']['engine'], - ctx.reporter - ) - @work_thread = Thread.new { cobbler.sync } - end - - def calculate_status - @work_thread.join and succeed! unless @work_thread.alive? - end - - def validation - validate_presence(task['parameters'], 'provisioning_info') - end - - end -end \ No newline at end of file diff --git a/lib/astute/tasks/copy_files.rb b/lib/astute/tasks/copy_files.rb deleted file mode 100644 index cb675f6f..00000000 --- a/lib/astute/tasks/copy_files.rb +++ /dev/null @@ -1,58 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - class CopyFiles < Task - - def post_initialize(task, context) - @work_thread = nil - @files_status = task['parameters']['files'].inject({}) do |f_s, n| - f_s.merge({ n['src']+n['dst'] => :pending }) - end - end - - private - - def process - task['parameters']['files'].each do |file| - if File.file?(file['src']) && File.readable?(file['src']) - parameters = { - 'content' => File.binread(file['src']), - 'path' => file['dst'], - 'permissions' => file['permissions'] || task['parameters']['permissions'], - 'dir_permissions' => file['dir_permissions'] || task['parameters']['dir_permissions'], - } - @files_status[file['src']+file['dst']] = - upload_file(task['node_id'], parameters) - else - @files_status[file['src']+file['dst']] = false - end - end # files - end - - def calculate_status - if @files_status.values.all?{ |s| s != :pending } - failed! if @files_status.values.include?(false) - succeed! if @files_status.values.all?{ |s| s == true } - return - end - end - - def validation - validate_presence(task, 'node_id') - validate_presence(task['parameters'], 'files') - end - - end -end \ No newline at end of file diff --git a/lib/astute/tasks/erase_node.rb b/lib/astute/tasks/erase_node.rb deleted file mode 100644 index 63f045d0..00000000 --- a/lib/astute/tasks/erase_node.rb +++ /dev/null @@ -1,53 +0,0 @@ -# Copyright 2016 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - class EraseNode < Task - - def summary - {'task_summary' => "Node #{task['node_id']} was erased without reboot"\ - " with result #{@status}"} - end - - private - - def process - erase_node - end - - def calculate_status - succeed! - end - - def validation - validate_presence(task, 'node_id') - end - - def erase_node - remover = MClient.new( - ctx, - "erase_node", - Array(task['node_id']), - _check_result=false) - response = remover.erase_node(:reboot => false) - Astute.logger.debug "#{ctx.task_id}: Data received from node "\ - "#{task['node_id']} :\n#{response.pretty_inspect}" - rescue Astute::MClientTimeout, Astute::MClientError => e - Astute.logger.error("#{ctx.task_id}: #{task_name} mcollective " \ - "erase node command failed with error #{e.message}") - failed! - end - - end -end diff --git a/lib/astute/tasks/master_shell.rb b/lib/astute/tasks/master_shell.rb deleted file mode 100644 index d1f1caff..00000000 --- a/lib/astute/tasks/master_shell.rb +++ /dev/null @@ -1,60 +0,0 @@ -# Copyright 2016 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - class MasterShell < Task - - # Accept to run shell tasks using existing shell asynchronous - # mechanism. It will run task on master node. - - def post_initialize(task, context) - @shell_task = nil - end - - def summary - @shell_task.summary - rescue - {} - end - - private - - def process - @shell_task = Shell.new( - generate_master_shell, - ctx - ) - @shell_task.run - end - - def calculate_status - self.status = @shell_task.status - end - - def validation - validate_presence(task['parameters'], 'cmd') - end - - def setup_default - task['parameters']['timeout'] ||= Astute.config.shell_timeout - task['parameters']['cwd'] ||= Astute.config.shell_cwd - task['parameters']['retries'] ||= Astute.config.shell_retries - task['parameters']['interval'] ||= Astute.config.shell_interval - end - - def generate_master_shell - task.merge('node_id' => 'master') - end - end -end diff --git a/lib/astute/tasks/move_to_bootstrap.rb b/lib/astute/tasks/move_to_bootstrap.rb deleted file mode 100644 index 2ab589ce..00000000 --- a/lib/astute/tasks/move_to_bootstrap.rb +++ /dev/null @@ -1,89 +0,0 @@ -# Copyright 2016 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - class MoveToBootstrap < Task - - def post_initialize(task, context) - @work_thread = nil - end - - def summary - {'task_summary' => "Node #{task['node_id']} was move to bootstrap with"\ - " result #{@status}"} - end - - private - - def process - cobbler = CobblerManager.new( - task['parameters']['provisioning_info']['engine'], - ctx.reporter - ) - - @work_thread = Thread.new do - is_exist = cobbler.existent_node?(task['parameters']['provisioning_info']['slave_name']) - - # Change node type to prevent wrong node detection as provisioned - # Also this type if node will not rebooted, Astute will be allowed - # to try to reboot such nodes again - change_nodes_type('reprovisioned') if is_exist - bootstrap_profile = task['parameters']['provisioning_info']['profile'] || - Astute.config.bootstrap_profile - cobbler.edit_node(task['parameters']['provisioning_info']['slave_name'], - {'profile' => bootstrap_profile}) - cobbler.netboot_node(task['parameters']['provisioning_info']['slave_name'], - true) - - Reboot.new({'node_id' => task['node_id']}, ctx).sync_run if is_exist - Rsyslogd.send_sighup( - ctx, - task['parameters']['provisioning_info']['engine']['master_ip'] - ) - - cobbler.remove_node(task['parameters']['provisioning_info']['slave_name']) - # NOTE(kozhukalov): We try to find out if there are systems - # in the Cobbler with the same MAC addresses. If so, Cobbler is going - # to throw MAC address duplication error. We need to remove these - # nodes. - mac_duplicate_names = cobbler.node_mac_duplicate_names(task['parameters']['provisioning_info']) - cobbler.remove_nodes(mac_duplicate_names.map {|n| {'slave_name' => n}}) - - cobbler.add_node(task['parameters']['provisioning_info']) - end - end - - def calculate_status - @work_thread.join and succeed! unless @work_thread.alive? - end - - def validation - validate_presence(task['parameters'], 'provisioning_info') - validate_presence(task, 'node_id') - end - - def change_nodes_type(type="image") - run_shell_without_check( - task['node_id'], - "echo '#{type}' > /etc/nailgun_systemtype", - _timeout=5 - )[:stdout] - rescue Astute::MClientTimeout, Astute::MClientError => e - Astute.logger.debug("#{ctx.task_id}: #{task_name} mcollective " \ - "change type command failed with error #{e.message}") - nil - end - - end -end \ No newline at end of file diff --git a/lib/astute/tasks/noop.rb b/lib/astute/tasks/noop.rb deleted file mode 100644 index f621da6b..00000000 --- a/lib/astute/tasks/noop.rb +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - class Noop < Task - - private - - def process - - end - - def calculate_status - skipped! - end - - end -end \ No newline at end of file diff --git a/lib/astute/tasks/noop_cobbler_sync.rb b/lib/astute/tasks/noop_cobbler_sync.rb deleted file mode 100644 index 7d77a930..00000000 --- a/lib/astute/tasks/noop_cobbler_sync.rb +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright 2016 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. -require 'astute/tasks/noop' - -module Astute - class NoopCobblerSync < Noop - end -end diff --git a/lib/astute/tasks/noop_copy_files.rb b/lib/astute/tasks/noop_copy_files.rb deleted file mode 100644 index f9d358c5..00000000 --- a/lib/astute/tasks/noop_copy_files.rb +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright 2016 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. -require 'astute/tasks/noop' - -module Astute - class NoopCopyFiles < Noop - end -end diff --git a/lib/astute/tasks/noop_erase_node.rb b/lib/astute/tasks/noop_erase_node.rb deleted file mode 100644 index 3c6fae47..00000000 --- a/lib/astute/tasks/noop_erase_node.rb +++ /dev/null @@ -1,24 +0,0 @@ -# Copyright 2016 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. -require 'astute/tasks/noop' - -module Astute - class NoopEraseNode < Noop - - def summary - {'task_summary' => "Node #{task['node_id']} was erased without reboot (noop mode)"} - end - - end -end diff --git a/lib/astute/tasks/noop_master_shell.rb b/lib/astute/tasks/noop_master_shell.rb deleted file mode 100644 index 9341176d..00000000 --- a/lib/astute/tasks/noop_master_shell.rb +++ /dev/null @@ -1,31 +0,0 @@ -# Copyright 2016 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. -require 'astute/tasks/noop_shell' -require 'astute/tasks/master_shell' - -module Astute - class NoopMasterShell < MasterShell - - private - - def process - @shell_task = NoopShell.new( - generate_master_shell, - ctx - ) - @shell_task.run - end - - end -end diff --git a/lib/astute/tasks/noop_move_to_bootstrap.rb b/lib/astute/tasks/noop_move_to_bootstrap.rb deleted file mode 100644 index 365d4aef..00000000 --- a/lib/astute/tasks/noop_move_to_bootstrap.rb +++ /dev/null @@ -1,24 +0,0 @@ -# Copyright 2016 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. -require 'astute/tasks/noop' - -module Astute - class NoopMoveToBootstrap < Noop - - def summary - {'task_summary' => "Node #{task['node_id']} was move to bootstrap (noop mode)"} - end - - end -end diff --git a/lib/astute/tasks/noop_puppet.rb b/lib/astute/tasks/noop_puppet.rb deleted file mode 100644 index 654c43e2..00000000 --- a/lib/astute/tasks/noop_puppet.rb +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright 2016 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require 'astute/tasks/puppet' - -module Astute - class NoopPuppet < Puppet - - private - - def setup_default - super - task['parameters']['puppet_noop_run'] = true - task['parameters']['raw_report'] = true - end - - end -end diff --git a/lib/astute/tasks/noop_reboot.rb b/lib/astute/tasks/noop_reboot.rb deleted file mode 100644 index 3e367f31..00000000 --- a/lib/astute/tasks/noop_reboot.rb +++ /dev/null @@ -1,24 +0,0 @@ -# Copyright 2016 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. -require 'astute/tasks/noop' - -module Astute - class NoopReboot < Noop - - def summary - {'task_summary' => "Node #{task['node_id']} was rebooted (noop mode)"} - end - - end -end diff --git a/lib/astute/tasks/noop_shell.rb b/lib/astute/tasks/noop_shell.rb deleted file mode 100644 index c38096c1..00000000 --- a/lib/astute/tasks/noop_shell.rb +++ /dev/null @@ -1,36 +0,0 @@ -# Copyright 2016 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. -require 'astute/tasks/shell' - -module Astute - class NoopShell < Shell - - private - - def process - run_shell_without_check( - task['node_id'], - "mkdir -p #{SHELL_MANIFEST_DIR}", - timeout=2 - ) - upload_shell_manifest - @puppet_task = NoopPuppet.new( - generate_puppet_hook, - ctx - ) - @puppet_task.run - end - - end -end diff --git a/lib/astute/tasks/noop_sync.rb b/lib/astute/tasks/noop_sync.rb deleted file mode 100644 index 6096ae9f..00000000 --- a/lib/astute/tasks/noop_sync.rb +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. -require 'astute/tasks/noop' - -module Astute - class NoopSync < Noop - end -end diff --git a/lib/astute/tasks/noop_upload_file.rb b/lib/astute/tasks/noop_upload_file.rb deleted file mode 100644 index d22bbdbe..00000000 --- a/lib/astute/tasks/noop_upload_file.rb +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. -require 'astute/tasks/noop' - -module Astute - class NoopUploadFile < Noop - end -end diff --git a/lib/astute/tasks/noop_upload_files.rb b/lib/astute/tasks/noop_upload_files.rb deleted file mode 100644 index 6ec68c8b..00000000 --- a/lib/astute/tasks/noop_upload_files.rb +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. -require 'astute/tasks/noop' - -module Astute - class NoopUploadFiles < Noop - end -end diff --git a/lib/astute/tasks/puppet.rb b/lib/astute/tasks/puppet.rb deleted file mode 100644 index 92ec697c..00000000 --- a/lib/astute/tasks/puppet.rb +++ /dev/null @@ -1,84 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - class Puppet < Task - - def summary - puppet_task.summary - rescue - {} - end - - private - - def process - Astute.logger.debug "Puppet task options: "\ - "#{task['parameters'].pretty_inspect}" - puppet_task.run - end - - def calculate_status - self.status = puppet_task.status.to_sym - end - - def validation - validate_presence(task, 'node_id') - validate_presence(task['parameters'], 'puppet_manifest') - end - - def setup_default - default_options = { - 'retries' => Astute.config.puppet_retries, - 'puppet_manifest' => '/etc/puppet/manifests/site.pp', - 'puppet_modules' => Astute.config.puppet_module_path, - 'command_prefix' => '', - 'cwd' => Astute.config.shell_cwd, - 'timeout' => Astute.config.puppet_timeout, - 'debug' => false, - 'succeed_retries' => Astute.config.puppet_succeed_retries, - 'undefined_retries' => Astute.config.puppet_undefined_retries, - 'raw_report' => Astute.config.puppet_raw_report, - 'puppet_noop_run' => Astute.config.puppet_noop_run, - 'puppet_start_timeout' => Astute.config.puppet_start_timeout, - 'puppet_start_interval' => Astute.config.puppet_start_interval - } - task['parameters'].compact! - task['parameters'].reverse_merge!(default_options) - task['parameters']['puppet_debug'] = task['parameters']['debug'] - end - - def puppet_task - @puppet_task ||= PuppetJob.new( - task_name, - PuppetMClient.new( - ctx, - task['node_id'], - task['parameters'], - ), - { - 'retries' => task['parameters']['retries'], - 'succeed_retries' => task['parameters']['succeed_retries'], - 'undefined_retries' => task['parameters']['undefined_retries'], - 'timeout' => task['parameters']['timeout'], - 'puppet_start_timeout' => task['parameters'][ - 'puppet_start_timeout'], - 'puppet_start_interval' => task['parameters'][ - 'puppet_start_interval'] - } - ) - end - - end # class -end diff --git a/lib/astute/tasks/reboot.rb b/lib/astute/tasks/reboot.rb deleted file mode 100644 index 54f23813..00000000 --- a/lib/astute/tasks/reboot.rb +++ /dev/null @@ -1,101 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - class Reboot < Task - - def post_initialize(task, context) - @control_time = nil - @time_start = nil - @already_rebooted = false - end - - def summary - {'task_summary' => "Node #{task['node_id']} was rebooted with "\ - "result: #{@status}"} - end - - private - - def process - @control_time = boot_time - @time_start = Time.now.to_i - if @control_time == 0 - failed! - Astute.logger.warn("#{ctx.task_id}: #{task_name} failed because" \ - "task could not get valid info about boot time") - return - end - reboot - end - - def calculate_status - if Time.now.to_i - @time_start > task['parameters']['timeout'] - failed! - Astute.logger.warn("#{ctx.task_id}: #{task_name} failed because" \ - "reboot timeout #{task['parameters']['timeout']} expired") - return - end - - current_bt = boot_time - if current_bt != @control_time && current_bt != 0 - update_online_node_status - succeed! - end - end - - def validation - validate_presence(task, 'node_id') - end - - def setup_default - task.fetch('parameters', {})['timeout'] ||= Astute.config.reboot_timeout - end - - def reboot - run_shell_without_check( - task['node_id'], - RebootCommand::CMD, - _timeout=2 - ) - rescue Astute::MClientTimeout, Astute::MClientError => e - Astute.logger.error("#{ctx.task_id}: #{task_name} mcollective " \ - "reboot command failed with error #{e.message}") - failed! - end - - def boot_time - run_shell_without_check( - task['node_id'], - "stat --printf='%Y' /proc/1", - _timeout=2 - )[:stdout].to_i - rescue Astute::MClientTimeout, Astute::MClientError => e - Astute.logger.debug("#{ctx.task_id}: #{task_name} mcollective " \ - "boot time command failed with error #{e.message}") - 0 - end - - def update_online_node_status - run_shell_without_check( - task['node_id'], - "flock -w 0 -o /var/lock/nailgun-agent.lock -c '/usr/bin/nailgun-agent"\ - " 2>&1 | tee -a /var/log/nailgun-agent.log | "\ - "/usr/bin/logger -t nailgun-agent'", - _timeout=60 # nailgun-agent start with random (30) delay - )[:exit_code] - end - - end -end diff --git a/lib/astute/tasks/shell.rb b/lib/astute/tasks/shell.rb deleted file mode 100644 index fab6c832..00000000 --- a/lib/astute/tasks/shell.rb +++ /dev/null @@ -1,150 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. -require 'erb' - -module Astute - class Shell < Task - - # Accept to run shell tasks using existing puppet asynchronous - # mechanism. It create and upload 2 files: shell script and - # puppet manifest. Then run puppet manifest - - def post_initialize(task, context) - @puppet_task = nil - end - - def summary - @puppet_task.summary - rescue - {} - end - - def node_id - task['node_id'] - end - - private - - SHELL_MANIFEST_DIR = '/etc/puppet/shell_manifests' - - def process - run_shell_without_check( - task['node_id'], - "mkdir -p #{SHELL_MANIFEST_DIR}", - _timeout=2 - ) - upload_shell_manifest - @puppet_task = Puppet.new( - generate_puppet_hook, - ctx - ) - @puppet_task.run - end - - def calculate_status - self.status = @puppet_task.status - end - - def validation - validate_presence(task, 'node_id') - validate_presence(task['parameters'], 'cmd') - end - - def setup_default - task['parameters']['timeout'] ||= Astute.config.shell_timeout - task['parameters']['cwd'] ||= Astute.config.shell_cwd - task['parameters']['retries'] ||= Astute.config.shell_retries - task['parameters']['interval'] ||= Astute.config.shell_interval - end - - def puppet_exec_template - template = <<-eos - # Puppet manifest wrapper for task: <%= task_name %> - notice('MODULAR: <%= task_name %>') - - exec { '<%= task_name %>_shell' : - path => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', - command => '/bin/bash "<%= shell_exec_file_path %>"', - logoutput => true, - timeout => <%= timeout %>, - } - eos - ERB.new(template, nil, '-').result(binding) - end - - def shell_exec_template - command = "cd #{task['parameters']['cwd']} &&" \ - " #{task['parameters']['cmd']}" - template = <<-eos - #!/bin/bash - # Puppet shell wrapper for task: <%= task_name %> - # Manifest: <%= puppet_exec_file_path %> - - <%= command %> - eos - ERB.new(template, nil, '-').result(binding) - end - - def shell_exec_file_path - File.join(SHELL_MANIFEST_DIR, "#{task_name}_command.sh") - end - - def puppet_exec_file_path - File.join(SHELL_MANIFEST_DIR, manifest_name) - end - - def upload_puppet_manifest - upload_file(task['node_id'], { - 'path' => puppet_exec_file_path, - 'content' => puppet_exec_template, - 'permissions' => '0755' - }) - end - - def upload_shell_file - upload_file(task['node_id'], { - 'path' => shell_exec_file_path, - 'content' => shell_exec_template, - 'permissions' => '0755' - }) - end - - def upload_shell_manifest - upload_puppet_manifest - upload_shell_file - end - - def timeout - task['parameters']['timeout'] - end - - def manifest_name - "#{task_name}_manifest.pp" - end - - def generate_puppet_hook - { - 'node_id' => task['node_id'], - 'id' => task['id'], - 'parameters' => { - "puppet_manifest" => manifest_name, - "cwd" => SHELL_MANIFEST_DIR, - "timeout" => task['parameters']['timeout'], - "retries" => task['parameters']['retries'] - } - } - end - - end -end diff --git a/lib/astute/tasks/skipped.rb b/lib/astute/tasks/skipped.rb deleted file mode 100644 index a8828d9c..00000000 --- a/lib/astute/tasks/skipped.rb +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright 2016 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require 'astute/tasks/noop' - -module Astute - class Skipped < Noop - - end -end \ No newline at end of file diff --git a/lib/astute/tasks/stage.rb b/lib/astute/tasks/stage.rb deleted file mode 100644 index 2ed008ba..00000000 --- a/lib/astute/tasks/stage.rb +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright 2016 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require 'astute/tasks/noop' - -module Astute - class Stage < Noop - - end -end \ No newline at end of file diff --git a/lib/astute/tasks/sync.rb b/lib/astute/tasks/sync.rb deleted file mode 100644 index 6c5d269b..00000000 --- a/lib/astute/tasks/sync.rb +++ /dev/null @@ -1,60 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - class Sync < Task - - private - - def process - @shell_task = Shell.new( - generate_shell_hook, - ctx - ) - @shell_task.run - end - - def calculate_status - self.status = @shell_task.status - end - - def validation - validate_presence(task, 'node_id') - validate_presence(task['parameters'], 'dst') - validate_presence(task['parameters'], 'src') - end - - def setup_default - task['parameters']['timeout'] ||= 300 - task['parameters']['retries'] ||= 10 - end - - def generate_shell_hook - path = task['parameters']['dst'] - rsync_cmd = "mkdir -p #{path} && rsync #{Astute.config.rsync_options}" \ - " #{task['parameters']['src']} #{path}" - { - "node_id" => task['node_id'], - "id" => task['id'], - "parameters" => { - "cmd" => rsync_cmd, - "cwd" => "/", - "timeout" => task['parameters']['timeout'], - "retries" => task['parameters']['retries'] - } - } - end - - end -end diff --git a/lib/astute/tasks/upload_file.rb b/lib/astute/tasks/upload_file.rb deleted file mode 100644 index 5c86f58a..00000000 --- a/lib/astute/tasks/upload_file.rb +++ /dev/null @@ -1,48 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - class UploadFile < Task - - def post_initialize(task, context) - @upload_status = :pending - end - - private - - def process - @upload_status = upload_file_with_check(task['node_id'], task['parameters']) - end - - def calculate_status - if [true, false].include? @upload_status - @upload_status ? succeed! : failed! - return - end - end - - def validation - validate_presence(task, 'node_id') - validate_presence(task['parameters'], 'path') - validate_presence(task['parameters'], 'data') - end - - def setup_default - task['parameters']['content'] = task['parameters']['data'] - task['parameters']['timeout'] ||= Astute.config.upload_timeout - task['parameters']['retries'] ||= Astute.config.upload_retries - end - - end -end diff --git a/lib/astute/tasks/upload_files.rb b/lib/astute/tasks/upload_files.rb deleted file mode 100644 index 8d4b9c25..00000000 --- a/lib/astute/tasks/upload_files.rb +++ /dev/null @@ -1,55 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Astute - class UploadFiles < Task - - def post_initialize(task, context) - @nodes_status = task['parameters']['nodes'].inject({}) do |n_s, n| - n_s.merge({ n['uid'] => :pending }) - end - end - - private - - def process - task['parameters']['nodes'].each do |node| - node['files'].each do |file| - parameters = { - 'content' => file['data'], - 'path' => file['dst'], - 'permissions' => file['permissions'] || '0644', - 'dir_permissions' => file['dir_permissions'] || '0755', - } - if @nodes_status[node['uid']] - @nodes_status[node['uid']] = upload_file_with_check(node['uid'], parameters) - end - end - end - end - - def calculate_status - if @nodes_status.values.all? { |v| v != :pending } - failed! if @nodes_status.values.include?(false) - succeed! if @nodes_status.values.all?{ |s| s == true } - return - end - end - - def validation - validate_presence(task['parameters'], 'nodes') - end - - end -end \ No newline at end of file diff --git a/lib/astute/time_observer.rb b/lib/astute/time_observer.rb deleted file mode 100644 index 13c0a200..00000000 --- a/lib/astute/time_observer.rb +++ /dev/null @@ -1,49 +0,0 @@ -# Copyright 2016 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require 'timeout' - -module Astute - class TimeObserver - - def initialize(timeout) - @timeout = timeout - end - - def start - @time_before = Time.now - end - - def since_start - (Time.now - @time_before).to_i - end - - def enough_time? - since_start < time_limit - end - - def time_is_up? - !enough_time? - end - - def left_time - time_limit - since_start - end - - def time_limit - @timeout - end - - end #TimeObserver -end diff --git a/lib/astute/version.rb b/lib/astute/version.rb deleted file mode 100644 index 26216077..00000000 --- a/lib/astute/version.rb +++ /dev/null @@ -1,60 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -module Astute - VERSION = '10.0.0' - class Versioning - def initialize(context) - @ctx = context - end - - def get_versions(nodes_uids, timeout=nil) - result = [] - with_version = [] - rpcutil = MClient.new(@ctx, "rpcutil", nodes_uids, check_result=true, timeout) - inventory = rpcutil.inventory - inventory.each do |node| - if node.results[:data][:agents].include? 'version' - with_version.push(node.results[:sender]) - end - end - no_version = nodes_uids - with_version - if with_version.present? - version = MClient.new(@ctx, "version", with_version, check_result=true, timeout) - versions = version.get_version - versions.each do |node| - uid = node.results[:sender] - result << {'version' => node.results[:data][:version], - 'uid' => uid} - end - end - - # times before versioning - no_version.each do |uid| - result << {'version' => '6.0.0', - 'uid' => uid} - end - result - end - - def split_on_version(nodes_uids, version, timeout=nil) - versions = get_versions(nodes_uids, timeout) - version = Gem::Version.new(version) - smaller = versions.select{ |n| Gem::Version.new(n["version"]) < version } - eq_and_bigger = versions.select{ |n| Gem::Version.new(n["version"]) >= version } - [smaller, eq_and_bigger] - end - end -end diff --git a/lib/fuel_deployment.rb b/lib/fuel_deployment.rb deleted file mode 100644 index e3355b4d..00000000 --- a/lib/fuel_deployment.rb +++ /dev/null @@ -1,24 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require_relative 'fuel_deployment/error' -require_relative 'fuel_deployment/log' -require_relative 'fuel_deployment/version' - -require_relative 'fuel_deployment/task' -require_relative 'fuel_deployment/graph' -require_relative 'fuel_deployment/node' -require_relative 'fuel_deployment/cluster' -require_relative 'fuel_deployment/concurrency/group' -require_relative 'fuel_deployment/concurrency/counter' diff --git a/lib/fuel_deployment/cluster.rb b/lib/fuel_deployment/cluster.rb deleted file mode 100644 index 5a7cc74d..00000000 --- a/lib/fuel_deployment/cluster.rb +++ /dev/null @@ -1,676 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require 'erb' -require 'open3' - -module Deployment - - # The Cluster object contains nodes and controls the deployment flow. - # It loops through the nodes and runs tasks on then - # when the node is ready and the task is available. - # - # attr [Object] id Misc identifier of this process - # @attr_reader [Hash Deployment::Node>] nodes The nodes of this cluster - # @attr [Deployment::Concurrency::Counter] node_concurrency Controls the - # maximum number of nodes running tasks at the same time - class Cluster - # @param [String] id Cluster name - def initialize(id=nil) - @nodes = {} - @uid = id - @node_concurrency = Deployment::Concurrency::Counter.new - @task_concurrency = Deployment::Concurrency::Group.new - @emergency_brake = false - @fault_tolerance_groups = [] - @subgraphs = [] - @dot_task_filter = nil - @dot_node_filter = nil - @dot_plot_number = 0 - end - - include Enumerable - include Deployment::Log - - attr_accessor :uid - attr_accessor :gracefully_stop_mark - attr_accessor :subgraphs - attr_reader :emergency_brake - attr_reader :nodes - attr_reader :node_concurrency - attr_reader :task_concurrency - attr_reader :fault_tolerance_groups - attr_accessor :dot_node_filter - attr_accessor :dot_task_filter - attr_accessor :dot_plot_number - - # Add an existing node object to the cluster - # @param [Deployment::Node] node a new node object - # @raise [Deployment::InvalidArgument] If the object is not a node - # @return [Deployment::Node] - def node_add(node) - raise Deployment::InvalidArgument.new self, 'Cluster can add only nodes!', node unless node.is_a? Deployment::Node - return node_get node if node_present? node - unless node.cluster == self - node.cluster.node_remove node if node.cluster - end - nodes.store prepare_key(node), node - node.cluster = self - node - end - alias :add_node :node_add - - # Create a new node object by its name and add it to the cluster. - # Or, if the node already exists, return the existing node object. - # @param [String, Symbol] node The name of the new node - # @param [Class] node_class Optional custom node class - # @return [Deployment::Node] - def node_create(node, node_class=Deployment::Node) - if node_present? node - node = node_get node - elsif node.is_a? Deployment::Node - node = node_add node - else - node = node_class.new node, self - node = node_add node unless node_present? node - end - node - end - alias :create_node :node_create - alias :new_node :node_create - alias :node_new :node_create - - # Remove a node from this cluster - # @param [Deployment::Node, String, Symbol] node - # @return [void] - def node_remove(node) - return unless node_present? node - nodes.delete prepare_key(node) - end - alias :remove_node :node_remove - - # Retrieve a node object from the cluster - # @param [String, Symbol] node The name of the node to retrieve - # @return [Deployment::Node, nil] - def node_get(node) - nodes.fetch prepare_key(node), nil - end - alias :get_node :node_get - alias :[] :node_get - - def node_present?(node) - nodes.key? prepare_key(node) - end - alias :has_node? :node_present? - alias :key? :node_present? - - # Prepare the hash key from the node - # @param [Deployment::Task,String,Symbol] node - def prepare_key(node) - node = node.name if node.is_a? Deployment::Node - node.to_s.to_sym - end - - # Iterates through all cluster nodes - # @yield Deployment::Node - def each_node(&block) - nodes.each_value(&block) - end - alias :each :each_node - - # Iterates through all the tasks on all nodes - # @yield Deployment::Task - def each_task - return to_enum(:each_task) unless block_given? - each_node do |node| - node.each_task do |task| - yield task - end - end - end - - # Sets up subgraphs for execution - # e.g. user might want to run only a subset - # of tasks: in this case he sends - # an array of subgraphs to be executed. - # Each array consists of starting vertices - # and ending vertices. These vertices are then - # traversed forward or backward - def setup_start_end - cluster_tasks_set = Set.new each_task - tasks_to_include = Set.new - self.subgraphs.each do |subgraph| - setup_start_end_piece(subgraph, cluster_tasks_set).each do |piece| - tasks_to_include.add piece - end - end - to_skip_tasks = cluster_tasks_set - tasks_to_include - to_skip_tasks.each do |task| - warn "Skipping task #{task} due to subgraph evaluation" - task.skip! - end - end - - def setup_start_end_piece(subgraph, cluster) - start_tasks = Set.new - end_tasks = Set.new - subgraph.fetch('start', []).each do |task| - visit(task).each do |t| - start_tasks.add t - end - end - subgraph.fetch('end', []).each do |task| - visit(task, direction: :backward).each do |t| - end_tasks.add t - end - end - start_tasks = start_tasks.empty? ? cluster : start_tasks - end_tasks = end_tasks.empty? ? cluster : end_tasks - start_tasks & end_tasks - end - - - # Iterates through the task that are ready to be run - # @yield Deployment::Task - def each_ready_task - return to_enum(:each_ready_task) unless block_given? - each_task do |task| - yield task if task.ready? - end - end - - # Check if graphs have a closed loop - # @return [true, false] - def has_loop? - begin - topology_sort - false - rescue Deployment::LoopDetected - true - end - end - - # Topology sort all tasks in all graphs - # Tarjan's algorithm - # @return [Array] - # @raise - def topology_sort - topology = [] - permanently_visited = Set.new - temporary_visited = [] - loop do - next_task = each_task.find do |task| - not (permanently_visited.include? task or temporary_visited.include? task) - end - return topology unless next_task - visit(next_task, permanently_visited, temporary_visited).each do |task| - topology.insert 0, task - end - end - topology - end - - # Tarjan's Algorithm visit function - # @return [Array] - # @raise Deployment::LoopDetected If a loop is detected in the graph - # These parameters are carried through the recursion calls: - # @param [Array] topology A list of topologically sorted tasks - # @param [Set] permanently_visited Set of permanently visited tasks - # @param [Array] temporary_visited List of temporary visited tasks - # @param [Symbol direction] direction Which direction to traverse things: :forward or :backward - # @yield [Deployment::Task] - def visit(task, permanently_visited = Set.new, temporary_visited = [], direction: :forward, &block) - unless block_given? - return to_enum(method=:visit, task, permanently_visited, temporary_visited, direction: direction) - end - if temporary_visited.include? task - # This node have already been visited in this small iteration and - # it means that there is a loop. - temporary_visited << task - raise Deployment::LoopDetected.new self, 'Loop detected!', temporary_visited - end - if permanently_visited.include? task - # We have already checked this node for loops in - # its forward dependencies. Skip it. - return - end - # Start a small iteration over this node's forward dependencies - # add this node to the last iteration visit list and run recursion - # on the forward dependencies - temporary_visited << task - task_method = "each_#{direction}_dependency" - task.send(task_method.to_sym) do |_task| - visit(_task, permanently_visited, temporary_visited, direction: direction, &block) - end - # Small iteration have completed without loops. - # We add this node to the list of permanently marked nodes and - # remove in from the temporary marked nodes list. - permanently_visited.add task - temporary_visited.delete task - # Insert this node to the head of topology sort list and return it. - yield task - end - - # Process a single node when it's visited. - # First, poll the node's status nad leave it the node is not ready. - # Then try to get a next task from the node and run it, or leave, if - # there is none available. - # @param [Deployment::Node] node - # @return [void] - def process_node(node) - debug "Process node: #{node}" - hook 'pre_node', node - return if node.skipped? - node.poll - hook 'internal_post_node_poll', node - hook 'post_node_poll', node - return unless node.ready? - ready_task = node.ready_task - return unless ready_task - ready_task.run - hook 'post_node', node - end - - # Run a hook method is this method is defined - # @param [String, Symbol] name Hook name - # @param [Object] args Hook arguments - def hook(name, *args) - name = ('hook_' + name.to_s).to_sym - send name, *args if respond_to? name - end - - # Loops once through all nodes and processes each one - # @return [void] - def process_all_nodes - debug 'Start processing all nodes' - hook 'pre_all' - each_node do |node| - process_node node - end - hook 'post_all' - end - - # Run this deployment process. - # It will loop through all nodes running task - # until the deployment will be considered finished. - # Deployment is finished if all the nodes have all tasks finished - # successfully, or finished with other statuses. - # Actually, it's enough to check only for finished nodes. - # @return [true, false] - def run - ready_nodes = each_ready_task.to_a.join ', ' - info "Starting the deployment process. Starting tasks: #{ready_nodes}" - hook 'internal_pre_run' - hook 'pre_run' - topology_sort - result = loop do - if all_nodes_are_successful? - status = 'All nodes are deployed successfully. '\ - 'Stopping the deployment process!' - result = { - :success => true, - :status => status, - } - break result - end - gracefully_stop! "failed_critical_nodes: #{failed_critical_nodes.inspect}" if has_failed_critical_nodes? - - if all_nodes_are_finished? - status = "All nodes are finished. Failed tasks: "\ - "#{failed_tasks.join ', '} Stopping the "\ - "deployment process!" - result = if has_failed_critical_nodes? - { - :success => false, - :status => status, - :failed_nodes => failed_nodes, - :skipped_nodes => skipped_nodes, - :failed_tasks => failed_tasks - } - else - { - :success => true, - :status => status, - :failed_nodes => failed_nodes, - :skipped_nodes => skipped_nodes, - :failed_tasks => failed_tasks - } - end - break result - end - # run loop over all nodes - process_all_nodes - end - info result[:status] - hook 'post_run', result - result - end - alias :deploy :run - - # Get the list of critical nodes - # @return [Array] - def critical_nodes - select do |node| - node.critical? - end - end - - # Get the list of critical nodes that have failed - # @return [Array] - def failed_critical_nodes - critical_nodes.select do |node| - node.failed? && !node.skipped? - end - end - - # Check if there are some critical nodes - # that have failed - # @return [true, false] - def has_failed_critical_nodes? - failed_critical_nodes.any? - end - - # Get the list of the failed nodes - # @return [Array] - def failed_nodes - select do |node| - node.failed? && !node.skipped? - end - end - - # Get the list of the skipped nodes - # @return [Array] - def skipped_nodes - select do |node| - node.skipped? - end - end - - # Get the list of the failed nodes - # @return [Array] - def failed_tasks - each_task.select do |task| - task.status == :failed - end - end - - # Get the list of tasks that have no forward dependencies - # They are the ending points of the deployment. - # @return [Array] - def ending_tasks - each_task.reject do |task| - task.dependency_forward_any? - end - end - - # Get the list of tasks that have no backward dependencies - # They are the starting points of the deployment. - # @return [Array] - def starting_tasks - each_task.reject do |task| - task.dependency_backward_any? - end - end - - # Get the list of tasks that have no dependencies at all. - # They are most likely have been lost for some reason. - # @return [Array] - def orphan_tasks - each_task.reject do |task| - task.dependency_backward_any? or task.dependency_forward_any? - end - end - - # Check if some nodes are failed - # @return [true, false] - def has_failed_nodes? - failed_nodes.any? - end - - # Check if all nodes are finished - # @return [true, false] - def all_nodes_are_finished? - all? do |node| - node.finished? - end - end - - # Check if all nodes are successful - # @return [true, false] - def all_nodes_are_successful? - all? do |node| - node.successful? - end - end - - # Count the total task number on all nodes - # @return [Integer] - def tasks_total_count - inject(0) do |sum, node| - sum + node.graph.tasks_total_count - end - end - - # Count the total number of the failed tasks - # @return [Integer] - def tasks_failed_count - inject(0) do |sum, node| - sum + node.graph.tasks_failed_count - end - end - - # Count the total number of the successful tasks - # @return [Integer] - def tasks_successful_count - inject(0) do |sum, node| - sum + node.graph.tasks_successful_count - end - end - - # Count the total number of the finished tasks - # @return [Integer] - def tasks_finished_count - inject(0) do |sum, node| - sum + node.graph.tasks_finished_count - end - end - - # Count the total number of the pending tasks - # @return [Integer] - def tasks_pending_count - inject(0) do |sum, node| - sum + node.graph.tasks_pending_count - end - end - - # Generate the deployment graph representation - # in the DOT language - # @return [String] - def to_dot - template = <<-eos -digraph "<%= uid || 'graph' %>" { - node[ style = "filled, solid"]; -<% each_task do |task| -%> -<% next unless task.name =~ dot_task_filter if dot_task_filter -%> -<% next unless task.node.name =~ dot_node_filter if dot_node_filter and task.node -%> - "<%= task %>" [label = "<%= task %>", fillcolor = "<%= task.color %>"]; -<% end -%> - -<% each_task do |task| -%> -<% task.each_forward_dependency do |forward_task| -%> -<% next unless task.name =~ dot_task_filter if dot_task_filter -%> -<% next unless task.node.name =~ dot_node_filter if dot_node_filter and task.node -%> -<% next unless forward_task.name =~ dot_task_filter if dot_task_filter -%> -<% next unless forward_task.node.name =~ dot_node_filter if dot_node_filter and forward_task.node -%> - "<%= task %>" -> "<%= forward_task %>"; -<% end -%> -<% end -%> -} - eos - ERB.new(template, nil, '-').result(binding) - end - - # Plot the graph using the 'dot' binary - # Will use incrementing value unless provided. - # @param [Hash] options - # Will use autogenerated name in the current folder unless provided - # @return [true, false] Successful? - def make_image(options={}) - file = options.fetch :file, nil - suffix = options.fetch :suffix, nil - type = options.fetch :type, 'svg' - - unless file - unless suffix - suffix = dot_plot_number - self.dot_plot_number += 1 - end - if suffix.is_a? Integer - suffix = suffix.to_s.rjust 5, '0' - end - graph_name = uid || 'graph' - file = "#{graph_name}-#{suffix}.#{type}" - end - info "Writing the graph image: '#{suffix}' to the file: '#{file}'" - command = ['dot', '-T', type, '-o', file] - Open3.popen2e(*command) do |stdin, out, process| - stdin.puts to_dot - stdin.close - output = out.read - debug output unless output.empty? - process.value.exitstatus == 0 - end - end - - # Get the array of this cluster's node names. - # They can be used for reference. - # @return [Array] - def node_names - map do |node| - node.name - end.sort - end - - # Set the gracefully_stop condition for this cluster - # If the provided block returns "true" the cluster will - # stop the deployment process. This block will be validated - # on every node visit. - # @param [Proc] block - def stop_condition(&block) - self.gracefully_stop_mark = block - end - - def hook_internal_post_node_poll(*args) - gracefully_stop(args[0]) - validate_fault_tolerance(args[0]) - end - - def hook_internal_pre_run(*args) - return unless has_failed_nodes? - failed_nodes.each { |node| validate_fault_tolerance(node) } - end - - # Check if the deployment process should stop - # @return [true, false] - def gracefully_stop? - return true if @emergency_brake - gracefully_stop_mark_check - @emergency_brake - end - - # Run the gracefully_stop_mark condition block - # and set the deployment to stop if the condition is met. - def gracefully_stop_mark_check - return unless gracefully_stop_mark - if gracefully_stop_mark.call - gracefully_stop! 'gracefully_stop_mark' - end - end - - # If the deployment is being gracefully stopped - # set the node to the skipped state so it will - # excluded from the deployment process. - def gracefully_stop(node) - if gracefully_stop? && node.ready? - node.set_status_skipped - hook 'post_gracefully_stop', node - end - end - - # Set this deployment to gracefully stop - # by marking all nodes to the skipped state instead of running - # new tasks. Optionally, the reason of the stop can be provided. - # @param [String] reason - def gracefully_stop!(reason='unknown reason') - return if @emergency_brake - warn "Setting the deployment to gracefully stop. Reason: #{reason}" - @emergency_brake = true - end - - # Set the fault tolerance group setting for the cluster - # @param [Array] groups - def fault_tolerance_groups=(groups=[]) - @fault_tolerance_groups = groups.select { |group| group['node_ids'].present? } - @fault_tolerance_groups.each { |group| group['failed_node_ids'] = [] } - debug "Setup fault tolerance groups: #{@fault_tolerance_groups}" - end - - # Check if this node if failed for the fault tolerance group - # and stop the deployment if the node is failed and it sets the - # fault tolerance count off the limit. - # @param [Node] node - def validate_fault_tolerance(node) - return if gracefully_stop? - if node.failed? - count_tolerance_fail(node) - gracefully_stop! "fault_tolerance: #{node.inspect}" if fault_tolerance_excess? - end - end - - # Set this node to be failed in the fault tolerance groups - # @param [Node] node - def count_tolerance_fail(node) - fault_tolerance_groups.select do |group| - group['node_ids'].include?(node.name) - end.each do |group| - debug "Count failed node: #{node.name} for group: #{group['name']}" - group['fault_tolerance'] -= 1 - group['node_ids'].delete(node.name) - group['failed_node_ids'] << node.name - end - end - - # Check if there are fault tolerance groups with the fault limit exceeded. - # @return [TrueClass,FalseClass] - def fault_tolerance_excess? - is_failed = fault_tolerance_groups.select { |group| group['fault_tolerance'] < 0 } - return false if is_failed.empty? - warn "Fault tolerance exceeded the stop conditions #{is_failed}" - true - end - - # @return [String] - def to_s - "Cluster[#{uid}]" - end - - # @return [String] - def inspect - message = "#{self}" - message += "{Tasks: #{tasks_finished_count}/#{tasks_total_count} Nodes: #{node_names.join ', '}}" if nodes.any? - message - end - - end -end diff --git a/lib/fuel_deployment/concurrency/counter.rb b/lib/fuel_deployment/concurrency/counter.rb deleted file mode 100644 index f74fb0a1..00000000 --- a/lib/fuel_deployment/concurrency/counter.rb +++ /dev/null @@ -1,103 +0,0 @@ -# Copyright 2016 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Deployment - - # The Concurrency module contains objects that implement the task - # and node concurrency features. - module Concurrency - # The counter object can keep the current and maximum values, - # increment and decrement them and check if the current value - # is not bigger then the maximum value. - # @attr current [Integer] - # @attr maximum [Integer] - class Counter - def initialize(maximum=0, current=0) - self.maximum = maximum - self.current = current - end - - attr_reader :current - attr_reader :maximum - - # Set the current value of this counter - # @param value [Integer] - # @return [Integer] - def current=(value) - @current = to_value value - end - - # Set the maximum value of this counter - # @param value [Integer] - # @return [Integer] - def maximum=(value) - @maximum = to_value value - end - - # Convert a value to a positive integer - # @param value [String,Integer] - # @return [Integer] - def to_value(value) - begin - value = Integer value - return 0 unless value > 0 - value - rescue - 0 - end - end - - # Increase this counter's current value by one - # @return [Integer] - def increment - self.current += 1 - end - alias :inc :increment - - # Decrease this counter's current value by one - # @return [Integer] - def decrement - self.current -= 1 - end - alias :dec :decrement - - # Set this counter's current value to zero - # @return [Integer] - def zero - self.current = 0 - end - - # Is the current value lesser or equal to the maximum value - # @return [true,false] - def active? - return true unless maximum_set? - current < maximum - end - alias :available? :active? - - # Is the current value bigger then the maximum value - # @return [true,false] - def inactive? - not active? - end - alias :overflow? :inactive? - - # Check if the maximum value is set - # @return [true,false] - def maximum_set? - maximum != 0 - end - end - end -end diff --git a/lib/fuel_deployment/concurrency/group.rb b/lib/fuel_deployment/concurrency/group.rb deleted file mode 100644 index 14486a30..00000000 --- a/lib/fuel_deployment/concurrency/group.rb +++ /dev/null @@ -1,100 +0,0 @@ -# Copyright 2016 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Deployment - module Concurrency - # The concurrency group can keep the collection on Counter - # objects, create new ones and retrieve the saved ones by their name - # @attr_reader group [Hash Deployment::Concurrency::Counter>] - class Group - def initialize - @group = {} - end - - attr_accessor :group - - include Enumerable - - # Loop through all defined Counter objects - # @yield [Deployment::Concurrency::Counter] - def each(&block) - group.each_value(&block) - end - - # Create a new Counter object by the given name - # @param key [Symbol, String] - # @return [Deployment::Concurrency::Counter] - def create(key, *args) - key = to_key key - self.set key, Deployment::Concurrency::Counter.new(*args) - end - - # Check if there is a concurrency object by this name - # @param key [String,Symbol] - # @return [true,false] - def key?(key) - key = to_key key - @group.key? key - end - alias :exists? :key? - - # Assign a Concurrency object to a key - # @param key [Symbol, String] - # @param value [Deployment::Concurrency::Counter] - # @return [Deployment::Concurrency::Counter] - def set(key, value) - raise Deployment::InvalidArgument.new self, 'The value should be a Counter object!', value unless value.is_a? Deployment::Concurrency::Counter - key = to_key key - @group[key] = value - end - alias :[]= :set - - # Remove a defined Counter object by its name - # @param key [Symbol, String] - def delete(key) - key = to_key key - @group.delete key if @group.key? key - end - alias :remove :delete - - # Retrieve a Concurrency object by the given name - # or create a new one if there is no one saved ny this name - # @param key [Symbol, String] - # @return [Deployment::Concurrency::Counter] - def get(key) - key = to_key key - return @group[key] if @group.key? key - create key - end - alias :[] :get - - # Convert a value to symbol - # @param key [Symbol,String] - # @return [Symbol] - def to_key(key) - return key if key.is_a? Symbol - processed_key = nil - unless key.nil? - begin - processed_key = key.to_s.to_sym - rescue - nil - end - end - raise Deployment::InvalidArgument.new self, "The value '#{key}' cannot be used as a concurrency name!" unless processed_key - processed_key - end - end - end -end diff --git a/lib/fuel_deployment/error.rb b/lib/fuel_deployment/error.rb deleted file mode 100644 index bd97b10c..00000000 --- a/lib/fuel_deployment/error.rb +++ /dev/null @@ -1,54 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Deployment - # This exception is raised if you have passed an incorrect object to a method - class InvalidArgument < StandardError - attr_reader :argument - def initialize(object, message='Argument is invalid!', argument=nil) - @argument = argument - message = "#{object}: #{message}" - message += " (#{argument})" if argument - super(message) - end - end - - # There is no task with such name is the graph - class NoSuchTask < StandardError - attr_reader :task - def initialize(object, message='There is no such task!', task=nil) - @task = task - message = "#{object}: #{message}" - message += " Name: #{task}" if task - super(message) - end - end - - # You have directly called an abstract method that should be implemented in a subclass - class NotImplemented < StandardError - end - - # Loop detected in the graph - class LoopDetected < StandardError - attr_reader :tasks - def initialize(object, message='Loop detected!', tasks=[]) - @tasks = tasks - message = "#{object}: #{message}" - if tasks.any? - message += " Path: #{tasks.join ', '}" - end - super(message) - end - end -end diff --git a/lib/fuel_deployment/graph.rb b/lib/fuel_deployment/graph.rb deleted file mode 100644 index be9123fd..00000000 --- a/lib/fuel_deployment/graph.rb +++ /dev/null @@ -1,320 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Deployment - - # The graph object contains task objects - # it can add and remove tasks and their dependencies - # count tasks, check if tasks are finished and find - # a next task that is ready to be run. - # The graph should be assigned to a node object. - # - # @attr [Deployment::Node] node The node of this graph - # @attr_reader [Hash Deployment::Task>] tasks The tasks of this graph - class Graph - - # @param [Deployment::Node] node The new node that will be assigned to this graph - # @return [void] - def initialize(node) - @tasks_have_failed = false - @tasks_are_finished = false - @tasks_are_successful = false - self.node = node - @tasks = {} - end - - include Enumerable - include Deployment::Log - - attr_reader :node - attr_reader :tasks - - # Reset the dependency status mnemoization of this task - # @return [void] - def reset - @tasks_have_failed = false - @tasks_are_finished = false - @tasks_are_successful = false - end - - # Prepare the hash key from the task - # @param [Deployment::Task,String,Symbol] task - def prepare_key(task) - task = task.name if task.is_a? Deployment::Task - task.to_s.to_sym - end - - # Retrieve a task object from the graph - # @param [String, Symbol] task The name of the task to retrieve - # @return [Deployment::Task, nil] - def task_get(task) - tasks.fetch prepare_key(task), nil - end - alias :get_task :task_get - alias :[] :task_get - - # Add an existing task object to the graph - # @param [Deployment::Task] task a new task object - # @raise [Deployment::InvalidArgument] If the object is not a task or the task is not from this graph - # @return [Deployment::Task] - def task_add(task) - raise Deployment::InvalidArgument.new self, 'Graph can add only tasks!', task unless task.is_a? Deployment::Task - if task.node != node - task.node.graph.task_remove task if task.node - else - return task_get task if task_present? task - end - tasks.store prepare_key(task), task - task.node = node - reset - task - end - alias :add_task :task_add - alias :add_vertex :task_add - alias :vertex_add :task_add - - # Create a new task object by its name and add it to the graph. - # Or, if the task already exists, return the existing object. - # Assigns the data payload to the created or found task if this - # parameter is provided. - # @param [String, Symbol] task The name of the new task - # @param [Object] data The task data payload - # @param [Class] task_class Optional custom task class - # @return [Deployment::Task] - def task_create(task, data={}, task_class=Deployment::Task) - if task_present? task - task = task_get task - elsif task.is_a? Deployment::Task - task = task_add task - else - task = task_class.new task, node, data - task = task_add task - end - task.data = data if data - task - end - alias :create_task :task_create - alias :add_new_task :task_create - alias :task_add_new :task_create - alias :new_task :task_create - alias :task_new :task_create - - # Create a new task object by name and add it into the graph. - # Then add backward dependencies and forward dependencies for this object. - # @param [String, Symbol, Deployment::Task] task_name The new task name - # @param [Object] data The task data payload - # @param [Array] backward_deps The list of task names, this task depends on - # @param [Array] forward_deps The list of task names that depend on this task - # @return [Deployment::Task] - def task_add_new_with_dependencies(task_name, data=nil, backward_deps=[], forward_deps=[]) - task = task_create task_name, data - backward_deps = [backward_deps] unless backward_deps.is_a? Array - forward_deps = [forward_deps] unless forward_deps.is_a? Array - backward_deps.each do |dependency| - dependency = task_create dependency - add_dependency dependency, task - end - forward_deps.each do |dependency| - dependency = task_create dependency - add_dependency task, dependency - end - task - end - alias :add_new_task_with_dependencies :task_add_new_with_dependencies - - # Check if the task is present in the graph - # @param [Deployment::Task, String, Symbol] task - # @return [true, false] - def task_present?(task) - tasks.key? prepare_key(task) - end - alias :has_task? :task_present? - alias :key? :task_present? - - # Remove a task from this graph - # @param [Deployment::Task, String, Symbol] task - # @return [void] - def task_remove(task) - return unless task_present? task - tasks.delete prepare_key(task) - reset - end - alias :remove_task :task_remove - - # Add a dependency between tasks - # @param [Deployment::Task, String, Symbol] task_from Graph edge from this task - # @param [Deployment::Task, String, Symbol] task_to Graph edge to this task - # @raise [Deployment::InvalidArgument] If you are referencing tasks by name - # and there is no task with such name in this graph - # @return [void] - def add_dependency(task_from, task_to) - unless task_from.is_a? Deployment::Task - task_from = get_task task_from - raise Deployment::NoSuchTask.new self, 'There is no such task in the graph!', task_from unless task_from - end - unless task_to.is_a? Deployment::Task - task_to = get_task task_to - raise Deployment::NoSuchTask.new self, 'There is no such task in the graph!', task_to unless task_to - end - task_to.dependency_backward_add task_from - end - alias :dependency_add :add_dependency - alias :edge_add :add_dependency - alias :add_edge :add_dependency - - # Set the node of this graph - # @param [Deployment::Node] node A new node object - # @raise [Deployment::InvalidArgument] If you pass a wrong object - def node=(node) - raise Deployment::InvalidArgument.new self, 'Not a node used instead of the graph node!', node unless node.is_a? Deployment::Node - @node = node - end - - # Return this graph's node name - # @return [String] - def name - node.name - end - - # Iterate through all the tasks in this graph - # @yield [Deployment::Task] - def each_task(&block) - tasks.each_value(&block) - end - alias :each :each_task - - # Check if all the tasks in this graph are finished - # memorises the positive result - # @return [true, false] - def tasks_are_finished? - return true if @tasks_are_finished - finished = all? do |task| - task.finished? - end - if finished - debug "All tasks on node #{name} are finished" - @tasks_are_finished = true - end - finished - end - alias :finished? :tasks_are_finished? - - # Check if all the tasks in this graph are successful - # memorises the positive result - # @return [true, false] - def tasks_are_successful? - return true if @tasks_are_successful - return false if @tasks_have_failed - successful = all? do |task| - task.successful? || task.skipped? - end - if successful - debug "All tasks on node #{name} are successful" - @tasks_are_successful = true - end - successful - end - alias :successful? :tasks_are_successful? - - # Check if some of the tasks in this graph are failed - # memorises the positive result - # @return [true, false] - def tasks_have_failed? - return true if @tasks_have_failed - failed = select do |task| - task.failed? - end - if failed.any? - debug "Found failed tasks on node #{name}: #{failed.map { |t| t.name }.join ', '}" - @tasks_have_failed = true - end - failed.any? - end - alias :failed? :tasks_have_failed? - - # Find a task in the graph that has all dependencies met - # and can be run right now - # returns nil if there is no such task - # @return [Deployment::Task, nil] - def ready_task - select do |task1| - task1.ready? - end.max_by do |task2| - task2.weight - end - end - alias :next_task :ready_task - - # Get an array of task names - # @return [Array] - def task_names - map do |task| - task.name - end - end - - # Count the total number of tasks - # @return [Integer] - def tasks_total_count - tasks.length - end - - # Count the number of the finished tasks - # @return [Integer] - def tasks_finished_count - count do |task| - task.finished? - end - end - - # Count the number of the failed tasks - # @return [Integer] - def tasks_failed_count - count do |task| - task.failed? - end - end - - # Count the number of the successful tasks - # @return [Integer] - def tasks_successful_count - count do |task| - task.successful? - end - end - - # Count the number of the pending tasks - # @return [Integer] - def tasks_pending_count - count do |task| - task.pending? - end - end - - # @return [String] - def to_s - "Graph[#{name}]" - end - - # @return [String] - def inspect - message = "#{self}{" - message += "Tasks: #{tasks_finished_count}/#{tasks_total_count}" - message += " Finished: #{tasks_are_finished?}" - message += " Failed: #{tasks_have_failed?}" - message += " Successful: #{tasks_are_successful?}" - message + '}' - end - end -end diff --git a/lib/fuel_deployment/log.rb b/lib/fuel_deployment/log.rb deleted file mode 100644 index 6944ec75..00000000 --- a/lib/fuel_deployment/log.rb +++ /dev/null @@ -1,60 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require 'logger' - -module Deployment - - # This module is used by other module for debug logging - # @attr [Logger] logger - module Log - - # Get the logger object - # @return [Logger] - def self.logger - return @logger if @logger - @logger = Logger.new STDOUT - end - - # Set the logger object - # @param [Logger] value - # @raise Deployment::InvalidArgument if the object does not look like a logger - # @return [Logger] - def self.logger=(value) - unless value.respond_to? :debug and value.respond_to? :warn and value.respond_to? :info - raise Deployment::InvalidArgument.new self, 'The object does not look like a logger!', value - end - @logger = value - end - - # Log message with level: debug - # @param [String] message - def debug(message) - Deployment::Log.logger.debug "#{self}: #{message}" - end - - # Log message with level: warn - # @param [String] message - def warn(message) - Deployment::Log.logger.warn "#{self}: #{message}" - end - - # Log message with level: info - # @param [String] message - def info(message) - Deployment::Log.logger.info "#{self}: #{message}" - end - - end -end diff --git a/lib/fuel_deployment/node.rb b/lib/fuel_deployment/node.rb deleted file mode 100644 index e952b4fd..00000000 --- a/lib/fuel_deployment/node.rb +++ /dev/null @@ -1,289 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Deployment - - # The Node class should work with a deployed nodes - # it should be able to somehow run tasks on them and - # query their status. It should also manage it's status - # attribute and the status of the currently running task. - # A Node has a Graph object assigned and can run all methods - # of the Graph object. - # - # @attr [Symbol] status The node's status - # @attr [String] name The node's name - # @attr [Deployment::Task] task The currently running task of this node - # @attr [Deployment::Cluster] cluster The cluster this node is assigned to - # @attr [Deployment::Graph] graph The Graph assigned to this node - # @attr [Numeric, String] id Misc id that can be used by this node - # @attr [true, false] critical This node is critical for the deployment - # and the deployment is considered failed if this node is failed - class Node - # A node can have one of these statuses - ALLOWED_STATUSES = [:online, :busy, :offline, :failed, :successful, :skipped] - # A node is considered finished with one of these statuses - FINISHED_STATUSES = [:failed, :successful, :skipped] - # A node is considered failed with these statuses - FAILED_STATUSES = [:failed] - - # @param [String, Symbol] name - # @param [Deployment::Cluster] cluster - # @param [Object] id - def initialize(name, cluster, id = nil) - @name = name - @status = :online - @task = nil - @critical = false - @uid = id || self.name - self.cluster = cluster - cluster.node_add self - create_new_graph - end - - include Enumerable - include Deployment::Log - - attr_reader :status - attr_reader :name - attr_reader :task - attr_reader :cluster - alias :current_task :task - attr_reader :graph - attr_accessor :uid - attr_reader :critical - alias :critical? :critical - attr_reader :sync_point - alias :sync_point? :sync_point - - # Set a new status of this node - # @param [Symbol, String] value - # @raise [Deployment::InvalidArgument] if the status is not valid - # @return [Symbol] - def status=(value) - value = value.to_sym - raise Deployment::InvalidArgument.new self, 'Invalid node status!', value unless ALLOWED_STATUSES.include? value - status_changes_concurrency @status, value - @status = value - end - - # Set the critical property of this node - # @param [true, false] value - # @return [true, false] - def critical=(value) - @critical = !!value - end - - # Set this node to be a critical node - # @return [true] - def set_critical - debug "Setup #{self} as critical node" - self.critical = true - end - - # Set this node to be a normal node - # @return [false] - def set_normal - debug "Setup #{self} as normal node" - self.critical = false - end - - # Set this node as sync point node - # @return [true] - def set_as_sync_point - self.sync_point = true - end - - # Set this node as normal point node - # @return [false] - def unset_as_sync_point - self.sync_point = false - end - - # Set the sync point property of this node - # @param [true, false] value - # @return [true, false] - def sync_point=(value) - @sync_point = !!value - end - - # Set this node's Cluster Object - # @param [Deployment::Cluster] cluster The new cluster object - # @raise [Deployment::InvalidArgument] if the object is not a Node - # @return [Deployment::Node] - def cluster=(cluster) - raise Deployment::InvalidArgument.new self, 'Not a cluster used instead of the cluster object!', cluster unless cluster.is_a? Deployment::Cluster - @cluster = cluster - end - - # Check if this node has a Concurrency::Counter set - # and it has a defined maximum value - # @return [true,false] - def concurrency_present? - return false unless cluster.is_a? Deployment::Cluster - return false unless cluster.node_concurrency.is_a? Deployment::Concurrency::Counter - cluster.node_concurrency.maximum_set? - end - - # Check if this node has a free concurrency slot to run a new task - # @return [true,false] - def concurrency_available? - return true unless concurrency_present? - cluster.node_concurrency.available? - end - - # Increase or decrease the node concurrency value - # when the node's status is changed. - # @param [Symbol] status_from - # @param [Symbol] status_to - # @return [void] - def status_changes_concurrency(status_from, status_to) - return unless concurrency_present? - if status_to == :busy - cluster.node_concurrency.increment - debug "Increasing node concurrency to: #{cluster.node_concurrency.current}" - elsif status_from == :busy - cluster.node_concurrency.decrement - debug "Decreasing node concurrency to: #{cluster.node_concurrency.current}" - end - end - - # The node have finished all its tasks - # or has one of finished statuses - # @return [true, false] - def finished? - FINISHED_STATUSES.include? status or tasks_are_finished? - end - - # Check if this node is ready to receive a task: it's online and - # concurrency slots are available. - # @return [true, false] - def ready? - online? and concurrency_available? - end - - # The node is online and can accept new tasks - # @return [true, false] - def online? - status == :online - end - - # The node is busy running a task - # @return [true, false] - def busy? - status == :busy - end - - # The node is offline and cannot accept tasks - # @return [true, false] - def offline? - status == :offline - end - - # The node has several failed tasks - # or has the failed status - # @return [true, false] - def failed? - FAILED_STATUSES.include? status or tasks_have_failed? - end - - # The node has all tasks successful - # or has the successful status - # @return [true, false] - def successful? - status == :successful or tasks_are_successful? - end - - # The node is skipped and will not get any tasks - def skipped? - status == :skipped #or tasks_have_only_dep_failed? - end - - ALLOWED_STATUSES.each do |status| - method_name = "set_status_#{status}".to_sym - define_method(method_name) do - self.status = status - end - end - - # Set the new name of this node - # @param [String, Symbol] name - def name=(name) - @name = name.to_s - end - - # Set the new current task of this node - # @param [Deployment::Task, nil] task - # @raise [Deployment::InvalidArgument] if the object is not a task or nil or the task is not in this graph - # @return [Deployment::Task] - def task=(task) - unless task.nil? - raise Deployment::InvalidArgument.new self, 'Task should be a task object or nil!', task unless task.is_a? Deployment::Task - raise Deployment::InvalidArgument.new self, 'Task is not found in the graph!', task unless graph.task_present? task - end - @task = task - end - alias :current_task= :task= - - # Set a new graph object - # @param [Deployment::Graph] graph - # @return [Deployment::Graph] - def graph=(graph) - raise Deployment::InvalidArgument.new self, 'Graph should be a graph object!', graph unless graph.is_a? Deployment::Graph - graph.node = self - @graph = graph - end - - # Create a new empty graph object for this node - # @return [Deployment::Graph] - def create_new_graph - self.graph = Deployment::Graph.new(self) - end - - # @return [String] - def to_s - return "Node[#{uid}]" if uid == name - "Node[#{uid}/#{name}]" - end - - # @return [String] - def inspect - message = "#{self}{Status: #{status}" - message += " Tasks: #{tasks_finished_count}/#{tasks_total_count}" - message += " CurrentTask: #{task.name}, task status: #{task.status}" if task - message + '}' - end - - # Sends all unknown methods to the graph object - def method_missing(method, *args, &block) - graph.send method, *args, &block - end - - # Run the task on this node - # @param [Deployment::Task] task - # @abstract Should be implemented in a subclass - def run(task) - info "Run task: #{task}" - raise Deployment::NotImplemented, 'This method is abstract and should be implemented in a subclass' - end - - # Polls the status of the node - # should update the node's status - # and the status of the current task - # @abstract Should be implemented in a subclass - def poll - raise Deployment::NotImplemented, 'This method is abstract and should be implemented in a subclass' - end - - end -end diff --git a/lib/fuel_deployment/simulator.rb b/lib/fuel_deployment/simulator.rb deleted file mode 100644 index 0d7e5cdf..00000000 --- a/lib/fuel_deployment/simulator.rb +++ /dev/null @@ -1,351 +0,0 @@ -#!/usr/bin/env ruby -# Copyright 2016 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require_relative '../astute/exceptions' -require_relative '../astute/config' -require_relative '../fuel_deployment' -require_relative '../astute/task_deployment' -require_relative '../astute/task_cluster' -require 'active_support/all' -require 'yaml' -require 'optparse' -require 'find' - -module Deployment - class TestNode < Node - def run(task) - debug "Run task: #{task}" - self.task = task - self.status = :busy - end - - def poll - debug 'Poll node status' - if busy? - status = :successful - status = :failed if cluster.tasks_to_fail.include? "#{task.name}/#{task.node.name}" - debug "#{task} finished with: #{status}" - self.task.status = status - self.status = :online - end - end - - attr_accessor :context - end - - class TestCluster < Astute::TaskCluster - def tasks_to_fail - return @tasks_to_fail if @tasks_to_fail - @tasks_to_fail = [] - end - - def tasks_to_fail=(value) - @tasks_to_fail = value - end - - attr_accessor :plot_post_node - attr_accessor :plot_pre_node - - def hook_post_node(*args) - return unless plot_post_node - make_image - end - - def hook_pre_node(*args) - return unless plot_pre_node - make_image - end - end -end - -module Astute - class SimulatorContext - attr_accessor :reporter, :deploy_log_parser - attr_reader :task_id, :status - - def initialize(task_id, reporter=nil, deploy_log_parser=nil) - @task_id = task_id - @reporter = reporter - @status = {} - @deploy_log_parser = deploy_log_parser - end - - def report_and_update_status(_data) - end - - def report(_msg) - end - end -end - -module Astute - class TaskDeployment - def fail_offline_nodes(*_args) - [] - end - end -end - -module Astute - class Simulator - # Parse the simulator CLI options - # @return [Hash] - def options - return @options if @options - @options = {} - parser = OptionParser.new do |opts| - opts.on('-l', '--list-yamls', 'List all deployment YAML files') do - options[:list_yaml_files] = true - end - opts.on('-L', '--list-images', 'List all generated image files') do - options[:list_image_files] = true - end - opts.on('-r', '--remove-yamls', 'Remove all deployment YAML files') do - options[:remove_yaml_files] = true - end - opts.on('-R', '--remove-images', 'Remove all generated image files') do - options[:remove_image_files] = true - end - opts.on('-y', '--yaml FILE', 'Load this file as the tasks graph from Astute') do |value| - options[:yaml] = value - end - opts.on('-f', '--fail task/node,...', Array, 'Set the tasks that will fail during the simulation') do |value| - options[:tasks_to_fail] = value - end - opts.on('-p', '--plot-first', 'Plot the first deployment step') do - options[:plot_first] = true - end - opts.on('-P', '--plot-last', 'Plot the last deployment step') do - options[:plot_last] = true - end - opts.on('-d', '--debug', 'Show debug messages') do - options[:debug] = true - end - opts.on('-N', '--plot-pre-node', 'Make an image snapshot om every node visit before doing anything. It will create a lot of images!') do - options[:plot_pre_node] = true - end - opts.on('-n', '--plot-post-node', 'Make an image snapshot after a task on a node have been run. Only impotent steps will be saved.') do - options[:plot_post_node] = true - end - opts.on('-g', '--graph-task-filter REGEXP', 'Plot only tasks with matching name.') do |value| - options[:graph_task_filter] = Regexp.new value - end - opts.on('-G', '--graph-node-filter REGEXP', 'Plot only tasks with matching node name.') do |value| - options[:graph_node_filter] = Regexp.new value - end - end - parser.banner = <<-eof -Usage: astute-simulator [options] - -This tool uses the Astute task deployment libraries to simulate the deployment process. -It should load the YAML file with the tasks data dumps produced by Astute during the -deployment and run the simulated deployment. The output can be produced either as a -deployment log or as a set of graph image snapshots using Graphviz to render them. - -You can use 'list-images' to locate the dumped YAML files and then -run the simulation like this: - -# astute-simulator -y /path/to/yaml/file.yaml - -The simulation should produce the log output displaying the which tasks and -on which nodes are being run as well as the deployment result status. -You can grep this log to determine the order the task will be started without -creating any graph images. - -You can use 'plot-first' and 'plot-last' options to generate an SVG image of -the initial graph status and the result status of the deployment. It will -generate the 'start' and the 'end' images in the current directory. -You may have to download them from the Fuel master node in order to view them -on your system. The helper tools 'list-images' and 'remove-images' can be used -to manage the generated images. - -Options 'plot-pre-node' and 'plot-post-node' will enable taking snapshots of the -graph status either before the node is processed or after the task have been -run on a node. These images can be very useful for debugging graph ordering -issues but it will take a lot of time to generate them if there are many tasks -in the graph. - -Option 'fail' can be used to simulate a task failure. -The argument is a comma-separated list of task/node pairs like this: - -# astute-simulator -y /path/to/yaml/file.yaml -f ntp-client/2,heat-db/1 -P - -This command will simulate the fail of two task on the node1 and node2. -The final state of the graph will be plotted so the consequences of these failure -can be clearly seen. - -The task status is color coded in the graph image: - -* white - A task has not been run yet. -* cyan - A task is a sync-point (ignores dependency failures) and have not been run yet. -* yellow - A task has all dependencies satisfied or has none and can be started right now. -* blue - A task is running right now. -* green - A task has already been run and was successful. -* red - A task has already been run and have failed. -* orange - A task has some failed dependencies or its node is failed and a task will not run. -* violet - A task is skipped or its node is skipped and a task will not run. - -There are two filtering options 'graph-task-filter' and 'graph-node-filter'. You can use them -to limit the scope of plotted graph only to tasks with name or node name matching the provided -regular expressions. For example, plot only 'openstack' related tasks on the second node: - -# astute-simulator -y /path/to/yaml/file.yaml -g openstack -G '^2$' -p - -Limiting the number of plotted task will speed up the image generation and will make the -graph much more readable. - - eof - parser.parse! - @options[:yaml] = ARGV[0] unless @options[:yaml] - @options - end - - # Output the list of deployment YAML files - def list_yaml_files - yaml_files do |file| - puts file - end - end - - # Output the list of generated image files - def list_image_files - image_files do |file| - puts file - end - end - - # Remove all deployment YAML files - def remove_yaml_files - yaml_files do |file| - puts "Remove: #{file}" - File.unlink file if File.file? file - end - end - - # Remove all generated image files - def remove_image_files - image_files do |file| - puts "Remove: #{file}" - File.unlink file if File.file? file - end - end - - # Find all image files starting from the current folder - def image_files - return to_enum(:image_files) unless block_given? - Find.find('.') do |file| - next unless File.file? file - next unless file.end_with?('.svg') or file.end_with?('.png') - yield file - end - end - - # Find all deployment yaml files in the dot files dir - def yaml_files - return to_enum(:yaml_files) unless block_given? - return unless File.directory? Astute.config.graph_dot_dir - Find.find(Astute.config.graph_dot_dir) do |file| - next unless File.file? file - next unless file.end_with? '.yaml' - yield file - end - end - - # Set the cluster options and run the simulation - # @param cluster [Deployment::Cluster] - def deploy(cluster) - unless cluster.is_a? Deployment::Cluster - raise Astute::DeploymentEngineError, "Argument should be a Cluster object! Got: #{cluster.class}" - end - - if options[:debug] - Deployment::Log.logger.level = Logger::DEBUG - end - - if options[:tasks_to_fail] - cluster.tasks_to_fail = options[:tasks_to_fail] - end - - if options[:graph_task_filter] - cluster.dot_task_filter = options[:graph_task_filter] - end - - if options[:graph_node_filter] - cluster.dot_node_filter = options[:graph_node_filter] - end - - if options[:plot_first] - cluster.make_image(suffix: 'start') - end - - if options[:plot_pre_node] - cluster.plot_pre_node = true - end - - if options[:plot_post_node] - cluster.plot_post_node = true - end - - result = cluster.run - if options[:plot_last] - cluster.make_image(suffix: 'end') - end - cluster.info "Result: #{result.inspect}" - end - - # Create a cluster object from the dumped YAML file - # using the TaskDeployment class from Astute - # @param yaml_file [String] Path to the YAML file - # @return [Deployment::Cluster] - def cluster_from_yaml(yaml_file=nil) - raise Astute::DeploymentEngineError, 'No task YAML file have been provided!' unless yaml_file - raise Astute::DeploymentEngineError, "No such file: #{yaml_file}" unless File.exists? yaml_file - yaml_file_data = YAML.load_file yaml_file - raise Astute::DeploymentEngineError, 'Wrong data! YAML should contain Hash!' unless yaml_file_data.is_a? Hash - context = Astute::SimulatorContext.new 'simulator' - deployment = Astute::TaskDeployment.new context, Deployment::TestCluster, Deployment::TestNode - cluster = deployment.create_cluster yaml_file_data - Deployment::Log.logger.level = Logger::INFO - cluster.uid = 'simulator' - cluster - end - - # Run an action based on options - # @param cluster [Deployment::Cluster] - def run(cluster=nil) - if options[:list_yaml_files] - list_yaml_files - elsif options[:list_image_files] - list_image_files - elsif options[:remove_yaml_files] - remove_yaml_files - elsif options[:remove_image_files] - remove_image_files - else - unless cluster - if options[:yaml] - cluster = cluster_from_yaml options[:yaml] - else - puts 'You have neither provided a task YAML file nor used a helper action!' - puts 'Please, point the simulator at the task graph YAML dump using the "-y" option.' - exit(1) - end - end - deploy cluster - end - end - - end -end diff --git a/lib/fuel_deployment/task.rb b/lib/fuel_deployment/task.rb deleted file mode 100644 index cf32b566..00000000 --- a/lib/fuel_deployment/task.rb +++ /dev/null @@ -1,487 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require 'set' - -module Deployment - - # The Task object represents a single deployment action. - # It should be able to store information of it dependencies and - # the tasks that depend on it. It should also be able to check if - # the dependencies are ready so this task can be run or check if - # there are some failed dependencies. - # Task should maintain it's own status and have both name - # and data payload attributes. Task is always assigned to a node - # object that will be used to run it. - # - # @attr [String] name The task name - # @attr [Deployment::Node] node The node object of this task - # @attr [Symbol] status The status of this task - # @attr_reader [Set] backward_dependencies The Tasks required to run this task - # @attr_reader [Set] forward_dependencies The Tasks that require this Task to run - # @attr [Object] data The data payload of this task - # @attr [Integer] maximum_concurrency The maximum number of this task's instances running on the different nodes at the same time - # @attr [Integer] current_concurrency The number of currently running task with the same name on all nodes - class Task - # A task can be in one of these statuses - ALLOWED_STATUSES = [:pending, :successful, :failed, :dep_failed, :skipped, :running, :ready] - # Task have not run yet - NOT_RUN_STATUSES = [:pending, :ready] - # Task is failed or dependencies have failed - FAILED_STATUSES = [:failed, :dep_failed] - # Task is finished without an error - SUCCESS_STATUSES = [:successful, :skipped] - # Task is finished, successful or not - FINISHED_STATUSES = FAILED_STATUSES + SUCCESS_STATUSES - - # @param [String,Symbol] name The name of this task - # @param [Deployment::Node] node The task will be assigned to this node - # @param [Object] data The data payload. It can be any object and contain any - # information that will be required to actually run the task. - def initialize(name, node, data={}) - self.name = name - @status = :pending - @backward_dependencies = Set.new - @forward_dependencies = Set.new - @data = data - self.node = node - node.add_task self - end - - include Enumerable - include Deployment::Log - - attr_reader :name - attr_reader :node - attr_reader :status - attr_reader :backward_dependencies - attr_reader :forward_dependencies - attr_accessor :data - - # Set this task's Node object - # @param [Deployment::Node] node The new node object - # @raise [Deployment::InvalidArgument] if the object is not a Node - # @return [Deployment::Node] - def node=(node) - raise Deployment::InvalidArgument.new self, 'Not a node used instead of the task node!', node unless node.is_a? Deployment::Node - @node = node - end - - # Set the new task name - # @param [String, Symbol] name - # @return [String] - def name=(name) - @name = name.to_s - end - - def skip! - @data['type'] = 'skipped' - end - - # Set the new task status. The task status can influence the dependency - # status of the tasks that depend on this task then they should be reset to allow them to update - # their status too. - # @param [Symbol, String] value - # @raise [Deployment::InvalidArgument] if the status is not valid - # @return [Symbol] - def status=(value) - value = value.to_s.to_sym - raise Deployment::InvalidArgument.new self, 'Invalid task status!', value unless ALLOWED_STATUSES.include? value - status_changes_concurrency @status, value - @status = value - poll_forward if FINISHED_STATUSES.include? value - value - end - - # Check if this task has a Concurrency::Counter defined in the Group - # identified by this task's name and it has a defined maximum value - # @return [true,false] - def concurrency_present? - return false unless node.is_a? Deployment::Node - return false unless node.cluster.is_a? Deployment::Cluster - return false unless node.cluster.task_concurrency.is_a? Deployment::Concurrency::Group - return false unless node.cluster.task_concurrency.key? name - node.cluster.task_concurrency[name].maximum_set? - end - - # Check if this task has a free concurrency slot to run - # @return [true,false] - def concurrency_available? - return true unless concurrency_present? - node.cluster.task_concurrency[name].available? - end - - # Increase or decrease the task concurrency value - # when the task's status is changed. - # @param [Symbol] status_from - # @param [Symbol] status_to - # @return [void] - def status_changes_concurrency(status_from, status_to) - return unless concurrency_present? - return if status_from == status_to - if status_to == :running - node.cluster.task_concurrency[name].increment - debug "Increasing task concurrency to: #{node.cluster.task_concurrency[name].current}" - elsif status_from == :running - node.cluster.task_concurrency[name].decrement - debug "Decreasing task concurrency to: #{node.cluster.task_concurrency[name].current}" - end - end - - ALLOWED_STATUSES.each do |status| - method_name = "set_status_#{status}".to_sym - define_method(method_name) do - self.status = status - end - end - - # Add a new backward dependency - the task, required to run this task - # @param [Deployment::Task] task - # @raise [Deployment::InvalidArgument] if the task is not a Task object - # @return [Deployment::Task] - def dependency_backward_add(task) - raise Deployment::InvalidArgument.new self, 'Dependency should be a task!', task unless task.is_a? Task - return task if task == self - backward_dependencies.add task - task.forward_dependencies.add self - #reset - task - end - alias :requires :dependency_backward_add - alias :depends :dependency_backward_add - alias :after :dependency_backward_add - alias :dependency_add :dependency_backward_add - alias :add_dependency :dependency_backward_add - - # Add a new forward dependency - the task, that requires this task to run - # @param [Deployment::Task] task - # @raise [Deployment::InvalidArgument] if the task is not a Task object - # @return [Deployment::Task] - def dependency_forward_add(task) - raise Deployment::InvalidArgument.new self, 'Dependency should be a task!', task unless task.is_a? Task - return task if task == self - forward_dependencies.add task - task.backward_dependencies.add self - #reset - task - end - alias :is_required :dependency_forward_add - alias :depended_on :dependency_forward_add - alias :before :dependency_forward_add - - # remove a backward dependency of this task - # @param [Deployment::Task] task - # @raise [Deployment::InvalidArgument] if the task is not a Task object - # @return [Deployment::Task] - def dependency_backward_remove(task) - raise Deployment::InvalidArgument.new self, 'Dependency should be a task!', task unless task.is_a? Task - backward_dependencies.delete task - task.forward_dependencies.delete self - task - end - alias :remove_requires :dependency_backward_remove - alias :remove_depends :dependency_backward_remove - alias :remove_after :dependency_backward_remove - alias :dependency_remove :dependency_backward_remove - alias :remove_dependency :dependency_backward_remove - - # Remove a forward dependency of this task - # @param [Deployment::Task] task - # @raise [Deployment::InvalidArgument] if the task is not a Task object - # @return [Deployment::Task] - def dependency_forward_remove(task) - raise Deployment::InvalidArgument.new self, 'Dependency should be a task!', task unless task.is_a? Task - forward_dependencies.delete task - task.backward_dependencies.delete self - task - end - alias :remove_is_required :dependency_forward_remove - alias :remove_depended_on :dependency_forward_remove - alias :remove_before :dependency_forward_remove - - # Check if this task is within the backward dependencies - # @param [Deployment::Task] task - # @raise [Deployment::InvalidArgument] if the task is not a Task object - # @return [Deployment::Task] - def dependency_backward_present?(task) - raise Deployment::InvalidArgument.new self, 'Dependency should be a task!', task unless task.is_a? Task - backward_dependencies.member? task and task.forward_dependencies.member? self - end - alias :has_requires? :dependency_backward_present? - alias :has_depends? :dependency_backward_present? - alias :has_after? :dependency_backward_present? - alias :dependency_present? :dependency_backward_present? - alias :has_dependency? :dependency_backward_present? - - # Check if this task is within the forward dependencies - # @param [Deployment::Task] task - # @raise [Deployment::InvalidArgument] if the task is not a Task object - # @return [Deployment::Task] - def dependency_forward_present?(task) - raise Deployment::InvalidArgument.new self, 'Dependency should be a task!', task unless task.is_a? Task - forward_dependencies.member? task and task.backward_dependencies.member? self - end - alias :has_is_required? :dependency_forward_present? - alias :has_depended_on? :dependency_forward_present? - alias :has_before? :dependency_forward_present? - - # Check if there are any backward dependencies - # @return [true, false] - def dependency_backward_any? - backward_dependencies.any? - end - alias :any_backward_dependency? :dependency_backward_any? - alias :dependency_any? :dependency_backward_any? - alias :any_dependency? :dependency_backward_any? - - # Check if there are any forward dependencies - # @return [true, false] - def dependency_forward_any? - forward_dependencies.any? - end - alias :any_forward_dependencies? :dependency_forward_any? - - # Iterates through the backward dependencies - # @yield [Deployment::Task] - def each_backward_dependency(&block) - backward_dependencies.each(&block) - end - alias :each :each_backward_dependency - alias :each_dependency :each_backward_dependency - - # Iterates through the forward dependencies - # @yield [Deployment::Task] - def each_forward_dependency(&block) - forward_dependencies.each(&block) - end - - # Count the number of this task's forward dependencies - # multiplied by 10 if they lead to the other nodes and - # recursively adding their weights too. - # This value can be used to determine how important this - # task is and should be selected earlier. - # @return [Integer] - def weight - return @weight if @weight - @weight = each_forward_dependency.inject(0) do |weight, task| - weight += task.node == self.node ? 1 : 10 - weight += task.weight - weight - end - end - - # Check if any of direct backward dependencies of this - # task are failed and set dep_failed status if so. - # @return [true, false] - def check_for_failed_dependencies - return if self.sync_point? - return false if FAILED_STATUSES.include? status - failed = each_backward_dependency.any? do |task| - FAILED_STATUSES.include? task.status - end - self.status = :dep_failed if failed - failed - end - - # Check if all direct backward dependencies of this task - # are in success status and set task to ready if so and task is pending. - # @return [true, false] - def check_for_ready_dependencies - return false unless status == :pending - ready = each_backward_dependency.all? do |task| - ready_statuses = SUCCESS_STATUSES - ready_statuses += FAILED_STATUSES if sync_point? - ready_statuses.include? task.status - end - self.status = :ready if ready - ready - end - - # set the pending tasks to dep_failed if the node have failed - def check_for_node_status - return unless node - if NOT_RUN_STATUSES.include? status - if Deployment::Node::FAILED_STATUSES.include? node.status - self.status = :dep_failed - end - if node.status == :skipped - self.status = :skipped - end - end - end - - # Poll direct task dependencies if - # the failed or ready status of this task should change - def poll_dependencies - check_for_ready_dependencies - check_for_failed_dependencies - check_for_node_status - end - alias :poll :poll_dependencies - - # Ask forward dependencies to check if their - # status should be updated bue to change in this - # task's status. - def poll_forward - each_forward_dependency do |task| - task.check_for_ready_dependencies - task.check_for_failed_dependencies - end - end - - # The task have finished, successful or not, and - # will not run again in this deployment - # @return [true, false] - def finished? - poll_dependencies - FINISHED_STATUSES.include? status - end - - # The task have successfully finished - # @return [true, false] - def successful? - status == :successful - end - - # The task was not run yet - # @return [true, false] - def pending? - status == :pending - end - - # The task have not run yet - # @return [true, false] - def new? - NOT_RUN_STATUSES.include? status - end - - # The task is running right now - # @return [true, false] - def running? - status == :running - end - - # The task is manually skipped - # @return [true, false] - def skipped? - status == :skipped - end - - # The task is ready to run, - # it has all dependencies met and is in pending status - # If the task has maximum concurrency set, it is checked too. - # @return [true, false] - def ready? - poll_dependencies - return false unless concurrency_available? - status == :ready - end - - # This task have been run but unsuccessfully - # @return [true, false] - def failed? - poll_dependencies - FAILED_STATUSES.include? status - end - - # This task have not been run because of failed dependencies - # @return [true, false] - def dep_failed? - status == :dep_failed - end - - def is_skipped? - @data.fetch('type', nil) == 'skipped' - end - - # # This task failed - # # @return [true, false] - # def abortive? - # status == :failed - # end - - #This task is sync point - # @return [true, false] - def sync_point? - self.node.sync_point? - end - - # @return [String] - def to_s - "Task[#{name}/#{node.name}]" - end - - # @return [String] - def inspect - message = "#{self}{Status: #{status}" - message += " After: #{dependency_backward_names.join ', '}" if dependency_backward_any? - message += " Before: #{dependency_forward_names.join ', '}" if dependency_forward_any? - message + '}' - end - - # Get a sorted list of all this task's dependencies - # @return [Array] - def dependency_backward_names - each_backward_dependency.map do |task| - task.to_s - end.sort - end - alias :dependency_names :dependency_backward_names - - # Get a sorted list of all tasks that depend on this task - # @return [Array] - def dependency_forward_names - each_forward_dependency.map do |task| - task.to_s - end.sort - end - - # Choose a color for a task vertex - # according to the tasks status - # @return [Symbol] - def color - poll_dependencies - case status - when :pending; - sync_point? ? :cyan : :white - is_skipped? ? :magenta : :white - when :ready - :yellow - when :successful; - :green - when :failed; - :red - when :dep_failed; - :orange - when :skipped; - :violet - when :running; - :blue - else - :white - end - end - - # Run this task on its node. - # This task will pass itself to the abstract run method of the Node object - # and set it's status to 'running'. - def run - info "Run on node: #{node}" - self.status = :running - node.run self - end - - end -end - diff --git a/lib/fuel_deployment/version.rb b/lib/fuel_deployment/version.rb deleted file mode 100644 index f00ac238..00000000 --- a/lib/fuel_deployment/version.rb +++ /dev/null @@ -1,28 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -# The Deployment module is a library for task based deployment -# Tasks are represented as a graph for each node. During the deployment -# each node is visited and given a next ready task from its graph until -# all nodes have no more tasks to run. -module Deployment - # The current module version - VERSION = '0.4.0' - - # Get the current module version - # @return [String] - def version - VERSION - end -end diff --git a/mcagents/erase_node.ddl b/mcagents/erase_node.ddl deleted file mode 100644 index 7e379f47..00000000 --- a/mcagents/erase_node.ddl +++ /dev/null @@ -1,56 +0,0 @@ -metadata :name => "Erase node bootloader and reboot it", - :description => "Erase node bootloader and reboot it.", - :author => "Andrey Danin", - :license => "MIT", - :version => "10.0.0", - :url => "http://mirantis.com", - :timeout => 40 - -action "erase_node", :description => "Zeroing of boot device" do - display :always - - input :reboot, - :prompt => "Reboot", - :description => "Reboot the node after erasing?", - :type => :boolean, - :validation => :typecheck, - :default => true, - :optional => false - - input :dry_run, - :prompt => "Dry run", - :description => "Do not performing any real changes", - :type => :boolean, - :validation => :typecheck, - :default => false, - :optional => false - - output :status, - :description => "Shell exit code", - :display_as => "Status" - - output :erased, - :description => "Status of erase operation (boolean)", - :display_as => "Erased" - - output :rebooted, - :description => "Status of reboot operation (boolean)", - :display_as => "Rebooted" - - output :error_msg, - :description => "Error messages", - :display_as => "Errors" - - output :debug_msg, - :description => "Debug messages", - :display_as => "Debug" - -end - -action "reboot_node", :description => "Reboot node" do - display :always - - output :debug_msg, - :description => "Debug messages", - :display_as => "Debug" -end diff --git a/mcagents/erase_node.rb b/mcagents/erase_node.rb deleted file mode 100644 index a38a6455..00000000 --- a/mcagents/erase_node.rb +++ /dev/null @@ -1,165 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -require "json" -require "base64" -require 'fileutils' -require 'pathname' - -module MCollective - module Agent - class Erase_node < RPC::Agent - - # Look at https://github.com/torvalds/linux/blob/master/Documentation/devices.txt - # Please also update the device codes here - # https://github.com/openstack/fuel-nailgun-agent/blob/master/agent#L51 - STORAGE_CODES = [3, 8, 65, 66, 67, 68, 69, 70, 71, 104, 105, 106, 107, - 108, 109, 110, 111, 202, 251, 252, 253, 259] - - AGENT_NODISCOVER_FILE = '/etc/nailgun-agent/nodiscover' - - action "erase_node" do - erase_node - end - - action "reboot_node" do - reboot - end - - private - - def erase_node - request_reboot = request.data[:reboot] - dry_run = request.data[:dry_run] - error_msg = [] - reply[:status] = 0 # Shell exitcode behaviour - - begin - prevent_discover unless dry_run - rescue => e - msg = "Can't prevent discover. Reason: #{e.message}" - Log.warn(msg) - end - - begin - reboot if !dry_run && request_reboot - reply[:rebooted] = request_reboot - rescue Exception => e - reply[:rebooted] = false - reply[:status] += 1 - msg = "Can't reboot node. Reason: #{e.message};" - Log.error(msg) - error_msg << "Can't reboot node. Reason: #{e.message};" - end - - unless error_msg.empty? - reply[:error_msg] = error_msg.join(' ') - end - end - - def get_devices(type='all') - raise "Path /sys/block does not exist" unless File.exists?("/sys/block") - Dir["/sys/block/*"].inject([]) do |blocks, block_device_dir| - basename_dir = File.basename(block_device_dir) - dev_name = basename_dir.gsub(/!/, '/') - dev_info = {} - # Query device info from udev - `udevadm info --query=property --name=#{dev_name}`.strip.split.each do |line| - key, value = line.chomp.split(/\=/) - dev_info[key.to_sym] = value - end - if File.exists?("/sys/block/#{basename_dir}/removable") - removable = File.open("/sys/block/#{basename_dir}/removable") { |f| f.read_nonblock(1024).strip } - end - if File.exists?("/sys/block/#{basename_dir}/size") - size = File.open("/sys/block/#{basename_dir}/size") { |f| f.read_nonblock(1024).strip } - else - size = 0 - debug_msg("Can not define device size. File /sys/block/#{basename_dir}/size not found.") - end - - # Check device major number against our storage code list and exclude - # removable devices - if STORAGE_CODES.include?(dev_info[:MAJOR].to_i) && removable =~ /^0$/ - device_root_count = `lsblk -n -r "#{dev_info[:DEVNAME]}" | grep -c '\ /$'`.to_i - # determine if the block device should be returned basked on the - # requested type - if (type.eql? 'all') or (type.eql? 'root' and device_root_count > 0) or (type.eql? 'data' and device_root_count == 0) - debug_msg("get_devices(type=#{type}): adding #{dev_name}") - blocks << {:name => dev_name, :size => size} - end - end - blocks - end - end - - def reboot - debug_msg("Beginning drive erase process") - File.open('/proc/sys/kernel/sysrq','w') { |file| file.write("1\n") } - # turning panic on oops and setting panic timeout to 10 - File.open('/proc/sys/kernel/panic_on_oops', 'w') {|file| file.write("1\n")} - File.open('/proc/sys/kernel/panic','w') {|file| file.write("10\n")} - - begin - get_devices(type='all').each do |dev| - debug_msg("erasing bootstrap code area in MBR of #{dev[:name]}") - # clear out the boot code in MBR - system("dd if=/dev/zero of=/dev/#{dev[:name]} bs=446 count=1") - # clear out the signature - system("dd if=/dev/zero of=/dev/#{dev[:name]} seek=510 bs=1 count=2") - system("sync") - end - - reply[:erased] = true - rescue Exception => e - reply[:erased] = false - reply[:status] += 1 - msg = "MBR can't be erased. Reason: #{e.message};" - Log.error(msg) - error_msg << msg - end - - debug_msg("Drives erased, rebooting in 5 seconds.") - # It should be noted that this is here so that astute will get a reply - # from the deletion task. If it does not get a reply, the deletion may - # fail. LP#1279720 - pid = fork do - # sleep to let parent send response back to server - sleep 5 - # Reboot the system - File.open('/proc/sysrq-trigger','w') { |file| file.write("b\n")} - end - Process.detach(pid) - end - - # Prevent discover by agent while node rebooting - def prevent_discover - lock_path = AGENT_NODISCOVER_FILE - debug_msg("Create file for discovery preventing #{lock_path}") - FileUtils.mkdir_p(Pathname.new(lock_path).dirname) - FileUtils.touch(lock_path) - end - - # In case of node erasing we can lose all - # debug messages, lets send them to orchestrator - def debug_msg(msg) - reply[:debug_msg] = [] unless reply[:debug_msg] - Log.debug(msg) - reply[:debug_msg] << msg - end - - end - end -end diff --git a/mcagents/execute_shell_command.ddl b/mcagents/execute_shell_command.ddl deleted file mode 100644 index c9f80ba9..00000000 --- a/mcagents/execute_shell_command.ddl +++ /dev/null @@ -1,39 +0,0 @@ -metadata :name => "Execute shell command", - :description => "Execute shell command", - :author => "Mirantis Inc.", - :license => "Apache License 2.0", - :version => "10.0.0", - :url => "http://mirantis.com", - :timeout => 3600 - -action "execute", :description => "Execute shell command" do - - input :cmd, - :prompt => "Shell command", - :description => "Shell command for running", - :type => :string, - :validation => '.*', - :optional => false, - :maxlength => 0 - - input :cwd, - :prompt => "CWD", - :description => "Path to folder where command will be run", - :type => :string, - :validation => '.*', - :optional => true, - :default => '/tmp', - :maxlength => 0 - - output :stdout, - :description => "Output from #{:cmd}", - :display_as => "Output" - - output :stderr, - :description => "Stderr from #{:cmd}", - :display_as => "Stderr" - - output :exit_code, - :description => "Exit code of #{:cmd}", - :display_as => "Exit code" -end diff --git a/mcagents/execute_shell_command.rb b/mcagents/execute_shell_command.rb deleted file mode 100644 index 7fc995e7..00000000 --- a/mcagents/execute_shell_command.rb +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -module MCollective - module Agent - class Execute_shell_command < RPC::Agent - - action 'execute' do - Log.debug("about to execute: #{request[:cmd]}") - reply[:exit_code] = run( - request[:cmd], - :stdout => :stdout, - :stderr => :stderr, - :cwd => request.fetch(:cwd, '/tmp') - ) - reply[:stdout] ||= "" - reply[:stderr] ||= "" - end - - end - end -end diff --git a/mcagents/fake.ddl b/mcagents/fake.ddl deleted file mode 100644 index 9c5321fe..00000000 --- a/mcagents/fake.ddl +++ /dev/null @@ -1,14 +0,0 @@ -metadata :name => "Fake Agent", - :description => "Fake Agent", - :author => "Mirantis Inc.", - :license => "Apache License 2.0", - :version => "10.0.0", - :url => "http://mirantis.com", - :timeout => 20 - -action "echo", :description => "Echo request message" do - output :output, - :description => "Just request message", - :display_as => "Echo message" -end - diff --git a/mcagents/fake.rb b/mcagents/fake.rb deleted file mode 100644 index 2b2a684b..00000000 --- a/mcagents/fake.rb +++ /dev/null @@ -1,27 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -module MCollective - module Agent - class Fake < RPC::Agent - - action "echo" do - validate :msg, String - reply[:msg] = "Hello, it is my reply: #{request[:msg]}" - end - - end - end -end diff --git a/mcagents/net_probe.ddl b/mcagents/net_probe.ddl deleted file mode 100644 index 3c3ee2c6..00000000 --- a/mcagents/net_probe.ddl +++ /dev/null @@ -1,51 +0,0 @@ -metadata :name => "Network Probe Agent", - :description => "Check network connectivity between nodes.", - :author => "Andrey Danin", - :license => "MIT", - :version => "10.0.0", - :url => "http://mirantis.com", - :timeout => 600 - -action "start_frame_listeners", :description => "Starts catching packets on interfaces" do - display :always -end - -action "send_probing_frames", :description => "Sends packets with VLAN tags" do - display :always -end - -action "get_probing_info", :description => "Get info about packets catched" do - display :always -end - -action "stop_frame_listeners", :description => "Stop catching packets, dump data to file" do - display :always -end - -action "echo", :description => "Silly echo" do - display :always -end - -action "dhcp_discover", :description => "Find dhcp server for provided interfaces" do - display :always -end - -action "multicast_listen", :description => "Start multicast listeners" do - display :always -end - -action "multicast_send", :description => "Send multicast frames" do - display :always -end - -action "multicast_info", :description => "Request received data from multicast frames" do - display :always -end - -action "check_url_retrieval", :description => "Check if urls are retrievable" do - display :always -end - -action "check_repositories_with_setup", :description => "Setup network and check urls" do - display :always -end diff --git a/mcagents/net_probe.rb b/mcagents/net_probe.rb deleted file mode 100644 index 3cf0371d..00000000 --- a/mcagents/net_probe.rb +++ /dev/null @@ -1,250 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require "json" -require "tempfile" -require "socket" -require "timeout" - -module MCollective - module Agent - class Net_probe :out, :stderr => :err) - end - - action "multicast_send" do - cmd = "fuel-netcheck multicast send" - reply[:status] = run_shell(cmd, :stdout => :out, :stderr => :err) - end - - action "multicast_info" do - reply[:status] = run_shell("fuel-netcheck multicast info", - :stdout => :out, :stderr => :err) - run_shell("fuel-netcheck multicast clean") - end - - action "start_frame_listeners" do - terminate_frame_listeners - start_frame_listeners - end - - action "send_probing_frames" do - send_probing_frames - end - - action "get_probing_info" do - get_probing_info - end - - action "stop_frame_listeners" do - stop_frame_listeners - end - - action "dhcp_discover" do - interfaces = request[:interfaces][get_uid] - format = request.data[:format] || "json" - timeout = request.data[:timeout] || 2 - repeat = request.data[:repeat] || 1 - cmd = "dhcpcheck discover '#{interfaces}' --timeout=#{timeout} --format=#{format} --repeat=#{repeat} " - reply[:status] = run_shell(cmd, :stdout => :out, :stderr => :err) - end - - action "check_url_retrieval" do - urls = request.data[:urls] || [] - - cmd = "urlaccesscheck check --timeout 5 '#{urls.join("' '")}'" - reply[:status] = run_shell(cmd, :stdout => :out, :stderr => :err) - reply[:out] = reply[:out] && reply[:out].length >= 2 ? JSON.parse(reply[:out]) : "" - end - - action "check_repositories_with_setup" do - config = request.data[:data][get_uid] - - cmd = "urlaccesscheck with setup \ - -i #{config['iface']} \ - -g #{config['gateway']} \ - -a #{config['addr']} \ - --vlan #{config['vlan']} \ - --timeout 5 \ - '#{config['urls'].join("' '")}'" - Log.debug("about to execute: #{cmd}") - - reply[:status] = run_shell(cmd, :stdout => :out, :stderr => :err) - reply[:out] = reply[:out] && reply[:out].length >= 2 ? JSON.parse(reply[:out]) : "" - end - - - private - - def get_uid - File.open('/etc/nailgun_uid') do |fo| - uid = fo.gets.chomp - return uid - end - end - - def start_frame_listeners - validate :interfaces, String - config = { - "action" => "listen", - "interfaces" => JSON.parse(request[:interfaces])[get_uid], - "dump_file" => "/var/tmp/net-probe-dump", - "ready_address" => "127.0.0.1", - "ready_port" => 31338, - "collect_timeout" => 500, # collect timeout should be smaller than net_probe.rb agent timeout - } - - if request.data.key?('config') - config.merge!(JSON.parse(request[:config])) - end - - # wipe out old stuff before start - Dir.glob(@pattern).each do |file| - File.delete file - end - - begin - socket = Socket.new( Socket::AF_INET, Socket::SOCK_STREAM, 0) - sockaddr = Socket.pack_sockaddr_in(config['ready_port'], config['ready_address']) - socket.bind(sockaddr) - socket.listen(1) - rescue => e - reply.fail! "Socket error: #{e.to_s}" - else - config_file = net_probe_config(config) - cmd = "net_probe.py -c #{config_file.path}" - pid = fork { `#{cmd}` } - Process.detach(pid) - - # It raises Errno::ESRCH if there is no process, so we check that it runs - sleep 1 - begin - Process.kill(0, pid) - rescue Errno::ESRCH - reply.fail! "Failed to run '#{cmd}'" - end - - begin - Timeout::timeout(120) do - client, clientaddr = socket.accept - status = client.read - client.close - reply.fail! "Wrong listener status: '#{status}'" unless status =~ /READY/ - end - rescue Timeout::Error - stop_frame_listeners - reply.fail! "Listener did not reported status" - end - ensure - begin - socket.shutdown - rescue Errno::ENOTCONN - end - socket.close - end - end - - def send_probing_frames - validate :interfaces, String - config = { "action" => "generate", "uid" => get_uid, - "interfaces" => JSON.parse(request[:interfaces])[get_uid]} - if request.data.key?('config') - config.merge!(JSON.parse(request[:config])) - end - - config_file = net_probe_config(config) - - cmd = "net_probe.py -c #{config_file.path}" - status = run_shell(cmd, :stdout => :out, :stderr => :error) - config_file.unlink - - reply.fail "Failed to send probing frames, cmd='#{cmd}' failed, config: #{config.inspect}" if status != 0 - end - - def get_probing_info - stop_frame_listeners - neighbours = Hash.new - Dir.glob(@pattern).each do |file| - p = JSON.load(File.read(file)) - neighbours.merge!(p) - end - reply[:neighbours] = neighbours - reply[:uid] = get_uid - end - - def net_probe_config(config) - f = Tempfile.new "net_probe" - f.write config.to_json - f.close - f - end - - def terminate_frame_listeners - interval = 2 - 5.times do |_| - if run_shell("pkill -TERM -f net_probe.py") == 1 - return - end - sleep interval - if run_shell("pgrep -f net_probe.py") == 1 - return - end - end - reply.fail! "Cant stop net_probe.py execution." - end - - def stop_frame_listeners - piddir = "/var/run/net_probe" - pidfiles = Dir.glob(File.join(piddir, '*')) - # Send SIGINT to all PIDs in piddir. - pidfiles.each do |f| - begin - Process.kill("INT", File.basename(f).to_i) - rescue Errno::ESRCH - # Unlink pidfile if no such process. - File.unlink(f) - end - end - # Wait while all processes dump data and exit. - while not pidfiles.empty? do - pidfiles.each do |f| - begin - Process.getpgid(File.basename(f).to_i) - rescue Errno::ESRCH - begin - File.unlink(f) - rescue Errno::ENOENT - end - end - end - pidfiles = Dir.glob(File.join(piddir, '*')) - end - end - - def run_shell(*args, **kwargs) - Log.debug("Run shell command with parameters #{args} #{kwargs}") - run(*args, **kwargs) - end - - end - end -end - diff --git a/mcagents/puppetd.ddl b/mcagents/puppetd.ddl deleted file mode 100644 index 44c27ad9..00000000 --- a/mcagents/puppetd.ddl +++ /dev/null @@ -1,144 +0,0 @@ -metadata :name => "puppetd", - :description => "Run puppet, get its status, and enable/disable it", - :author => "R.I.Pienaar", - :license => "Apache License 2.0", - :version => "1.8", - :url => "https://github.com/puppetlabs/mcollective-plugins", - :timeout => 40 - -action "last_run_summary", :description => "Get a summary of the last puppet run" do - display :always - - input :raw_report, - :prompt => "Enable puppet raw report", - :description => "Get raw las run report", - :type => :boolean, - :validation => :typecheck, - :default => false, - :optional => true - - output :time, - :description => "Time per resource type", - :display_as => "Times" - - output :resources, - :description => "Overall resource counts", - :display_as => "Resources" - - output :changes, - :description => "Number of changes", - :display_as => "Changes" - - output :events, - :description => "Number of events", - :display_as => "Events" - - output :version, - :description => "Puppet and Catalog versions", - :display_as => "Versions" - - output :raw_report, - :description => "Full last run report", - :display_as => "Raw report" -end - -action "stop_and_disable", :description => "Stop and disable puppet" do - output :output, - :description => "String indicating status", - :display_as => "Status" -end - -action "enable", :description => "Enable puppet" do - output :output, - :description => "String indicating status", - :display_as => "Status" -end - -action "disable", :description => "Disable puppet" do - output :output, - :description => "String indicating status", - :display_as => "Status" -end - -action "runonce", :description => "Invoke a single puppet run" do - - input :manifest, - :prompt => "Path to manifest", - :description => "Path to manifest (relative or absolutely)", - :type => :string, - :validation => :shellsafe, - :optional => true, - :default => '/etc/puppet/manifests/site.pp', - :maxlength => 0 - - input :modules, - :prompt => "Path to modules folder", - :description => "Path to modules folder (relative or absolutely)", - :type => :string, - :validation => :shellsafe, - :optional => true, - :default => '/etc/puppet/modules', - :maxlength => 0 - - input :cwd, - :prompt => "CWD", - :description => "Path to folder where command will be run", - :type => :string, - :validation => :shellsafe, - :optional => true, - :default => '/tmp', - :maxlength => 0 - - input :puppet_debug, - :prompt => "Puppet debug", - :description => "Puppet run mode: debug", - :type => :boolean, - :validation => :typecheck, - :default => true, - :optional => true - - input :command_prefix, - :prompt => "Puppet command prefix (allows to run puppet with variables)", - :description => "Allows to run puppet with variables (e.g. FACTER_foo=bar)", - :type => :string, - :validation => :shellsafe, - :default => '', - :optional => true, - :maxlength => 0 - - output :output, - :description => "Output from puppet", - :display_as => "Output" -end - -action "status", :description => "Get puppet status" do - display :always - - output :status, - :description => "The status of the puppet: disabled, running, idling or stopped", - :display_as => "Status" - - output :enabled, - :description => "Whether puppet is enabled", - :display_as => "Enabled" - - output :running, - :description => "Whether puppet is running", - :display_as => "Running" - - output :idling, - :description => "Whether puppet is idling", - :display_as => "Idling" - - output :stopped, - :description => "Whether puppet is stopped", - :display_as => "Stopped" - - output :lastrun, - :description => "When puppet last ran", - :display_as => "Last Run" - - output :output, - :description => "String displaying puppet status", - :display_as => "Status" -end diff --git a/mcagents/puppetd.rb b/mcagents/puppetd.rb deleted file mode 100644 index df95b72f..00000000 --- a/mcagents/puppetd.rb +++ /dev/null @@ -1,350 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require 'timeout' -require 'puppet' - -module MCollective - module Agent - # An agent to manage the Puppet Daemon - # - # Configuration Options: - # puppetd.splaytime - Number of seconds within which to splay; no splay - # by default - # puppetd.statefile - Where to find the state.yaml file; defaults to - # /var/lib/puppet/state/state.yaml - # puppetd.lockfile - Where to find the lock file; defaults to - # /var/lib/puppet/state/puppetdlock - # puppetd.puppetd - Where to find the puppet binary; defaults to - # /usr/bin/puppet apply - # puppetd.summary - Where to find the summary file written by Puppet - # 2.6.8 and newer; defaults to - # /var/lib/puppet/state/last_run_summary.yaml - # puppetd.pidfile - Where to find puppet agent's pid file; defaults to - # /var/run/puppet/agent.pid - class Puppetd1, - "changed"=>0, - "total"=>0, - "restarted"=>0, - "out_of_sync"=>0 - }.merge(summary["resources"]) - - ["time", "events", "changes", "version"].each do |dat| - reply[dat.to_sym] = summary[dat] - end - end - - def last_run_report - begin - report = YAML.load_file(@last_report) - rescue - report = nil - end - - changed = [] - failed = [] - if valid_report?(report) - report.resource_statuses.each do |name, resource| - changed << name if resource.changed - failed << name if resource.failed - end - end - # add list of resources into the reply - reply[:resources] = { - "changed_resources" => changed.join(','), - "failed_resources" => failed.join(',') - }.merge(reply[:resources]) - - if valid_report?(report) && request.fetch(:raw_report, false) - if request[:puppet_noop_run] - reply[:raw_report] = get_noop_report_only(report) - else - reply[:raw_report] = File.read(@last_report) - end - end - end - - def set_status - reply[:status] = puppet_daemon_status - reply[:running] = reply[:status] == 'running' ? 1 : 0 - reply[:enabled] = reply[:status] == 'disabled' ? 0 : 1 - reply[:idling] = reply[:status] == 'idling' ? 1 : 0 - reply[:stopped] = reply[:status] == 'stopped' ? 1 : 0 - reply[:lastrun] = 0 - reply[:lastrun] = File.stat(@statefile).mtime.to_i if File.exists?(@statefile) - reply[:runtime] = Time.now.to_i - reply[:lastrun] - reply[:output] = "Currently #{reply[:status]}; last completed run #{reply[:runtime]} seconds ago" - end - - def rm_file file - return true unless File.exists?(file) - begin - File.unlink file - return true - rescue - return false - end - end - - def puppet_daemon_status - err_msg = "" - alive = puppet_pid - disabled = File.exists?(@lockfile) && File::Stat.new(@lockfile).zero? - - if !alive && !expected_puppet_pid.nil? - err_msg << "Process not running but not empty lockfile is present. Trying to remove lockfile..." - err_msg << (rm_file(@lockfile) ? "ok." : "failed.") - end - - reply[:err_msg] = err_msg unless err_msg.empty? - - if disabled - 'disabled' - elsif alive - 'running' - elsif !alive - 'stopped' - end - end - - def runonce - lock_file(@lockmcofile) do - set_status - case (reply[:status]) - when 'disabled' then # can't run - reply.fail "Empty Lock file exists; puppet is disabled." - - when 'running' then # can't run two simultaniously - reply.fail "Lock file and PID file exist; puppet is running." - - when 'stopped' then # just run - runonce_background - else - reply.fail "Unknown puppet status: #{reply[:status]}" - end - end - end - - def runonce_background - rm_file(@last_report) - rm_file(@last_summary) - cwd = request.fetch(:cwd, '/') - manifest = request.fetch(:manifest, '/etc/puppet/manifests/site.pp') - module_path = request.fetch(:modules, '/etc/puppet/modules') - command_prefix = request.fetch(:command_prefix, '') - cmd = [ - command_prefix, - @puppetd, - "-c #{cwd}", - @puppetd_agent, - manifest, - '--modulepath', module_path, - '--basemodulepath', module_path, - '--logdest', 'syslog', - '--trace', - '--reports', 'none', - ] - unless request[:forcerun] - if @splaytime && @splaytime > 0 - cmd << "--splaylimit" << @splaytime << "--splay" - end - end - - if request[:puppet_noop_run] - cmd << '--noop' - else - cmd << '--debug' << '--evaltrace' if request[:puppet_debug] - end - cmd << "--logdest #{@log}" if @log - - cmd = cmd.join(" ") - - output = reply[:output] || '' - run(cmd, :stdout => :output, :chomp => true, :cwd => cwd, :environment => { 'LC_ALL' => 'en_US.UTF-8' }) - reply[:output] = "Called #{cmd}, " + output + (reply[:output] || '') - end - - def stop_and_disable - lock_file(@lockmcofile) do - case puppet_daemon_status - when 'stopped' - disable - when 'disabled' - reply[:output] = "Puppet already stoped and disabled" - return - else - kill_process - disable - end - reply[:output] = "Puppet stoped and disabled" - end - end - - def enable - if File.exists?(@lockfile) - stat = File::Stat.new(@lockfile) - - if stat.zero? - File.unlink(@lockfile) - reply[:output] = "Lock removed" - else - reply[:output] = "Currently running; can't remove lock" - end - else - reply[:output] = "Already enabled" - end - end - - def disable - if File.exists?(@lockfile) - stat = File::Stat.new(@lockfile) - - stat.zero? ? reply[:output] = "Already disabled" : reply.fail("Currently running; can't remove lock") - else - begin - File.open(@lockfile, "w") { |file| } - reply[:output] = "Lock created" - rescue => e - reply.fail "Could not create lock: #{e}" - end - end - end - - private - - def valid_report?(report) - report.is_a?(Puppet::Transaction::Report) && report.resource_statuses - end - - def get_noop_report_only(report) - noop_report = [] - report.logs.each do |log| - # skip info level reports - next if log.level == :info - resource_report = {} - resource_report['source'] = log.source - resource_report['message'] = log.message - resource_report['file'] = log.file unless log.file.nil? - resource_report['line'] = log.line unless log.line.nil? - noop_report.push(resource_report) - end - noop_report - end - - def kill_process - return if ['stopped', 'disabled'].include? puppet_daemon_status - - begin - Timeout.timeout(30) do - Process.kill('TERM', puppet_pid) if puppet_pid - while puppet_pid do - sleep 1 - end - end - rescue Timeout::Error - Process.kill('KILL', puppet_pid) if puppet_pid - end - #FIXME: Daemonized process do not update lock file when we send signal to kill him - raise "Should never happen. Some process block lock file in critical section" unless rm_file(@lockfile) - rescue => e - reply.fail "Failed to kill the puppet daemon (process #{puppet_pid}): #{e}" - end - - def expected_puppet_pid - File.read(@lockfile).to_i - rescue Errno::ENOENT - nil - end - - def puppet_pid - result = `ps -p #{expected_puppet_pid} -o pid,comm --no-headers`.lines.first - result && result.strip.split(' ')[0].to_i - rescue NoMethodError - nil - end - - def lock_file(file_name, &block) - File.open(file_name, 'w+') do |f| - begin - f.flock File::LOCK_EX - yield - ensure - f.flock File::LOCK_UN - end - end - end - - end - end -end diff --git a/mcagents/puppetsync.ddl b/mcagents/puppetsync.ddl deleted file mode 100644 index 7504fe9a..00000000 --- a/mcagents/puppetsync.ddl +++ /dev/null @@ -1,61 +0,0 @@ -metadata:name => "puppetsync", - :description => "Downloads latest version of Puppet manifests to managed servers", - :author => "Mirantis Inc", - :license => "Apache License 2.0", - :version => "10.0.0", - :url => "http://mirantis.com", - :timeout => 300 - -action "rsync", :description => "Download using rsync" do - display :failed - - input :modules_source, - :prompt => "Rsync source URL of modules", - :description => "Where to get modules from. URL with any protocol supported by rsync", - :type => :string, - :validation => :shellsafe, - :optional => false, - :default => 'rsync://10.20.0.2:/puppet/modules/', - :maxlength => 256 - - input :manifests_source, - :prompt => "Rsync source URL of manifests", - :description => "Where to get manifests from. URL with any protocol supported by rsync", - :type => :string, - :validation => :shellsafe, - :optional => false, - :default => 'rsync://10.20.0.2:/puppet/manifests/', - :maxlength => 256 - - input :modules_path, - :prompt => "Rsync destination of modules", - :description => "Where should downloaded modules be saved?", - :type => :string, - :validation => :shellsafe, - :optional => false, - :default => '/etc/puppet/modules/', - :maxlength => 256 - - input :manifests_path, - :prompt => "Rsync destination of manifests", - :description => "Where should downloaded manifests be saved?", - :type => :string, - :validation => :shellsafe, - :optional => false, - :default => '/etc/puppet/manifests/', - :maxlength => 256 - - input :rsync_options, - :prompt => "Options for rsync command run", - :description => "What options should be pathed to rsync command?", - :type => :string, - :validation => :shellsafe, - :optional => false, - :default => '-c -r --delete', - :maxlength => 256 - - output :msg, - :description => "Report message", - :display_as => "Message" - -end diff --git a/mcagents/puppetsync.rb b/mcagents/puppetsync.rb deleted file mode 100644 index 7b185d3b..00000000 --- a/mcagents/puppetsync.rb +++ /dev/null @@ -1,74 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -module MCollective - module Agent - class Puppetsync < RPC::Agent - - action 'rsync' do - ['modules', 'manifests'].each do |type| - # Rsync depend of presence or absence of - source = request.data["#{type}_source".to_sym].chomp('/').concat('/') - path = request.data["#{type}_path".to_sym].chomp('/').concat('/') - cmd = "rsync #{request.data[:rsync_options]} #{source} #{path}" - run_and_respond(cmd) - end - reply[:msg] = "Puppet modules and manifests was sync!" - end - - private - - def run_and_respond(cmd) - stdout, stderr, exit_code = runcommand(cmd) - - if exit_code != 0 - reply.fail! "Fail to upload folder using command #{cmd}. - Exit code: #{exit_code}, stderr: #{stderr}" - end - end - - def runcommand(cmd) - # We cannot use Shell from puppet because - # version 2.3.1 has bug, with returning wrong exit - # code in some cases, in newer version mcollective - # it was fixed - # https://github.com/puppetlabs/marionette-collective - # /commit/10f163550bc6395f1594dacb9f15a86d4a3fde27 - # So, it's just fixed code from Shell#runcommand - thread = Thread.current - stdout = '' - stderr = '' - status = systemu(cmd, {'stdout' => stdout, 'stderr' => stderr}) do |cid| - begin - while(thread.alive?) - sleep 0.1 - end - Process.waitpid(cid) if Process.getpgid(cid) - rescue SystemExit - rescue Errno::ESRCH - rescue Errno::ECHILD - rescue Exception => e - Log.info("Unexpected exception received while waiting for child process: #{e.class}: #{e}") - end - end - - [stdout, stderr, status.exitstatus] - end - - end - end -end \ No newline at end of file diff --git a/mcagents/systemtype.ddl b/mcagents/systemtype.ddl deleted file mode 100644 index 71e47828..00000000 --- a/mcagents/systemtype.ddl +++ /dev/null @@ -1,14 +0,0 @@ -metadata :name => "systemtype", - :description => "Checks system type out of file", - :author => "Mirantis Inc", - :license => "Apache License 2.0", - :version => "10.0.0", - :url => 'http://www.mirantis.com/', - :timeout => 60 - -action "get_type", :description => "Get the type" do - display :always - output :node_type, - :description => "Type out of file", - :display_as => "Node type" -end diff --git a/mcagents/systemtype.rb b/mcagents/systemtype.rb deleted file mode 100644 index fd4558ea..00000000 --- a/mcagents/systemtype.rb +++ /dev/null @@ -1,30 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -module MCollective - module Agent - class Systemtype < RPC::Agent - file = "/etc/nailgun_systemtype" - - action "get_type" do - begin - reply[:node_type] = File.read(file).chomp - rescue - reply.fail! $!.to_s - end - end - end - end -end diff --git a/mcagents/uploadfile.ddl b/mcagents/uploadfile.ddl deleted file mode 100644 index f979f6a0..00000000 --- a/mcagents/uploadfile.ddl +++ /dev/null @@ -1,82 +0,0 @@ -metadata :name => "uploadfile", - :description => "Text file upload agent", - :author => "Mirantis Inc", - :license => "Apache License 2.0", - :version => "10.0.0", - :url => "http://mirantis.com", - :timeout => 60 - -action "upload", :description => "upload file" do - display :failed - - input :path, - :prompt => "Path to save text file", - :description => "Where should file be saved?", - :type => :string, - :validation => :shellsafe, - :optional => false, - :maxlength => 256 - - input :content, - :prompt => "File content", - :description => "What should be contained in file?", - :type => :string, - :validation => '^.+$', - :optional => false, - :maxlength => 0 - - input :user_owner, - :prompt => "User owner of file", - :description => "Who should be owner of the file?", - :type => :string, - :validation => :shellsafe, - :optional => false, - :default => 'root', - :maxlength => 0 - - input :group_owner, - :prompt => "Group owner of file", - :description => "What group should be owner of the file?", - :type => :string, - :validation => :shellsafe, - :optional => false, - :default => 'root', - :maxlength => 0 - - input :permissions, - :prompt => "File permissions", - :description => "What permissions should be set to the file?", - :type => :string, - :validation => '^[0-7]{3,4}$', - :default => '0644', - :optional => false, - :maxlength => 4 - - input :dir_permissions, - :prompt => "Directory permissions", - :description => "What permissions should be set for folder where file will be place?", - :type => :string, - :validation => '^[0-7]{3,4}$', - :optional => true, - :default => '0755', - :maxlength => 4 - - input :overwrite, - :prompt => "Force overwrite", - :description => "Overwrite already existed file?", - :type => :boolean, - :optional => false, - :default => false - - input :parents, - :prompt => "Create intermediate directories as required", - :description => "no error if destination directory existing, make parent directories as needed", - :type => :boolean, - :optional => false, - :default => true - - output :msg, - :description => "Report message", - :display_as => "Message" - -end diff --git a/mcagents/uploadfile.rb b/mcagents/uploadfile.rb deleted file mode 100644 index 52864f41..00000000 --- a/mcagents/uploadfile.rb +++ /dev/null @@ -1,51 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require 'fileutils' - -module MCollective - module Agent - class Uploadfile < RPC::Agent - - action 'upload' do - # this action is used to distribute text file from - # master node to all managed nodes - path = request.data[:path] - dir = File.dirname path - - if !File.directory?(dir) && !request.data[:parents] - reply.fail! "Directory #{dir} does not exist! Use parents=true to force upload." - end - - if File.exist?(path) && !request.data[:overwrite] - reply.fail! "File #{path} already exist! Use overwrite=true to force upload." - end - - # first create target directory on managed server - FileUtils.mkdir_p(dir) unless File.directory?(dir) - FileUtils.chmod(request.data[:dir_permissions].to_i(8), dir) if request.data[:dir_permissions] - - # then create file and save their content - File.open(path, 'w') { |file| file.write(request.data[:content]) } - - # Set user owner, group owner and permissions - FileUtils.chown request.data[:user_owner], request.data[:group_owner], path - FileUtils.chmod request.data[:permissions].to_i(8), path - - reply[:msg] = "File was uploaded!" - end - - end - end -end diff --git a/mcagents/version.ddl b/mcagents/version.ddl deleted file mode 100644 index 221e3a17..00000000 --- a/mcagents/version.ddl +++ /dev/null @@ -1,15 +0,0 @@ -metadata :name => "Version", - :description => "Checks package version", - :author => "Mirantis Inc", - :license => "Apache License 2.0", - :version => "10.0.0", - :url => 'http://www.mirantis.com/', - :timeout => 60 - -action "get_version", :description => "Get the version" do - display :always - output :version, - :description => "Version", - :display_as => "Version" -end - diff --git a/mcagents/version.rb b/mcagents/version.rb deleted file mode 100644 index c80b7457..00000000 --- a/mcagents/version.rb +++ /dev/null @@ -1,24 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module MCollective - module Agent - class Version< RPC::Agent - action "get_version" do - reply[:version] = meta[:version] - end - end - end -end - diff --git a/run_tests.sh b/run_tests.sh deleted file mode 100755 index 18aa59ad..00000000 --- a/run_tests.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash -# astute_rspec_check.sh -# RVM - -set -e - -ROOT_WORKSPACE=$(cd `dirname $0` && pwd -P) - -function license_check() { - # License information must be in every source file - cd $ROOT_WORKSPACE - - - tmpfile=`mktemp -t _fuel-astute_.XXXXXXX` - find * -not -path "docs/*" -regex ".*\.\(rb\)" -type f -print0 | xargs -0 grep -Li License > $tmpfile - files_with_no_license=`wc -l $tmpfile | awk '{print $1}'` - if [ $files_with_no_license -gt 0 ]; then - echo "ERROR: Found files without license, see files below:" - cat $tmpfile - rm -f $tmpfile - exit 1 - fi - rm -f $tmpfile -} - -function ruby_checks() { - cd $ROOT_WORKSPACE - - # Install all ruby dependencies (expect ruby version manager: RVM, rbenv or similar) - bundle install - - # Run unit rspec tests - bundle exec rake spec:unit S=$1 -} - -license_check -ruby_checks $@ diff --git a/spec/example-logs/anaconda.log_ b/spec/example-logs/anaconda.log_ deleted file mode 100644 index 694e02fe..00000000 --- a/spec/example-logs/anaconda.log_ +++ /dev/null @@ -1,572 +0,0 @@ -2014-09-26T14:07:32.588452+01:00 info: kernel command line: initrd=/images/centos-x86_64/initrd.img ksdevice=bootif lang= sshd=1 biosdevname=0 kssendmac locale=en_US text netcfg/choose_interface=52:54:00:00:01:02 udevrules=52:54:00:00:01:02_eth0,52:54:00:00:02:02_eth1,52:54:00:00:03:02_eth2 priority=critical ks=http://10.20.0.2/cblr/svc/op/ks/system/node-5 BOOT_IMAGE=/images/centos-x86_64/vmlinuz BOOTIF=01-52-54-00-00-01-02 -2014-09-26T14:07:32.588633+01:00 info: -2014-09-26T14:07:32.588824+01:00 info: text mode forced from cmdline -2014-09-26T14:07:32.589066+01:00 debug: readNetInfo /tmp/s390net not found, early return -2014-09-26T14:07:32.589315+01:00 info: anaconda version 13.21.215 on x86_64 starting -2014-09-26T14:07:32.589466+01:00 debug: Saving module ipv6 -2014-09-26T14:07:32.589667+01:00 debug: Saving module iscsi_ibft -2014-09-26T14:07:32.589853+01:00 debug: Saving module iscsi_boot_sysfs -2014-09-26T14:07:32.590046+01:00 debug: Saving module pcspkr -2014-09-26T14:07:32.590285+01:00 debug: Saving module edd -2014-09-26T14:07:32.590472+01:00 debug: Saving module floppy -2014-09-26T14:07:32.590668+01:00 debug: Saving module iscsi_tcp -2014-09-26T14:07:32.590845+01:00 debug: Saving module libiscsi_tcp -2014-09-26T14:07:32.591035+01:00 debug: Saving module libiscsi -2014-09-26T14:07:32.591248+01:00 debug: Saving module scsi_transport_iscsi -2014-09-26T14:07:32.591450+01:00 debug: Saving module squashfs -2014-09-26T14:07:32.591647+01:00 debug: Saving module cramfs -2014-09-26T14:07:32.591853+01:00 debug: probing buses -2014-09-26T14:07:32.592019+01:00 debug: waiting for hardware to initialize -2014-09-26T14:07:32.592231+01:00 debug: probing buses -2014-09-26T14:07:32.592445+01:00 debug: waiting for hardware to initialize -2014-09-26T14:07:32.592644+01:00 info: getting kickstart file -2014-09-26T14:07:32.592830+01:00 info: eth0 has link, using it -2014-09-26T14:07:32.593017+01:00 info: doing kickstart... setting it up -2014-09-26T14:07:32.593229+01:00 debug: activating device eth0 -2014-09-26T14:07:32.593400+01:00 info: wait_for_iface_activation (2502): device eth0 activated -2014-09-26T14:07:32.593579+01:00 info: file location: http://10.20.0.2/cblr/svc/op/ks/system/node-5 -2014-09-26T14:07:32.593772+01:00 info: transferring http://10.20.0.2/cblr/svc/op/ks/system/node-5 -2014-09-26T14:07:32.594067+01:00 info: setting up kickstart -2014-09-26T14:07:32.594292+01:00 info: kickstart forcing text mode -2014-09-26T14:07:32.594485+01:00 info: kickstartFromUrl -2014-09-26T14:07:32.594679+01:00 info: results of url ks, url http://10.20.0.2:8080/centos/fuelweb/x86_64/ -2014-09-26T14:07:32.595853+01:00 warning: got to setupCdrom without a CD device -2014-09-26T14:07:32.596062+01:00 info: no stage2= given, assuming http://10.20.0.2:8080/centos/fuelweb/x86_64//images/install.img -2014-09-26T14:07:32.596263+01:00 debug: going to set language to en_US.UTF-8 -2014-09-26T14:07:32.596489+01:00 info: setting language to en_US.UTF-8 -2014-09-26T14:07:32.596695+01:00 info: starting STEP_METHOD -2014-09-26T14:07:32.596868+01:00 debug: loaderData->method is set, adding skipMethodDialog -2014-09-26T14:07:32.597089+01:00 debug: skipMethodDialog is set -2014-09-26T14:07:32.597292+01:00 info: starting STEP_STAGE2 -2014-09-26T14:07:32.597511+01:00 info: URL_STAGE_MAIN: url is http://10.20.0.2:8080/centos/fuelweb/x86_64//images/install.img -2014-09-26T14:07:32.597704+01:00 info: transferring http://10.20.0.2:8080/centos/fuelweb/x86_64//images/updates.img -2014-09-26T14:07:32.597886+01:00 warning: Error downloading http://10.20.0.2:8080/centos/fuelweb/x86_64//images/updates.img: HTTP response code said error -2014-09-26T14:07:32.598060+01:00 info: transferring http://10.20.0.2:8080/centos/fuelweb/x86_64//images/product.img -2014-09-26T14:07:32.598268+01:00 warning: Error downloading http://10.20.0.2:8080/centos/fuelweb/x86_64//images/product.img: HTTP response code said error -2014-09-26T14:07:32.598471+01:00 info: transferring http://10.20.0.2:8080/centos/fuelweb/x86_64//images/install.img -2014-09-26T14:07:32.598623+01:00 info: mounted loopback device /mnt/runtime on /dev/loop0 as /tmp/install.img -2014-09-26T14:07:32.598807+01:00 info: got stage2 at url http://10.20.0.2:8080/centos/fuelweb/x86_64//images/install.img -2014-09-26T14:07:32.598970+01:00 info: Loading SELinux policy -2014-09-26T14:07:32.599138+01:00 info: getting ready to spawn shell now -2014-09-26T14:07:32.599333+01:00 info: Running anaconda script /usr/bin/anaconda -2014-09-26T14:07:32.599600+01:00 info: CentOS Linux is the highest priority installclass, using it -2014-09-26T14:07:32.599716+01:00 info: Running kickstart %%pre script(s) -2014-09-26T14:07:32.599887+01:00 warning: '/bin/sh' specified as full path -2014-09-26T14:07:54.372332+01:00 info: All kickstart %%pre script(s) have been run -2014-09-26T14:07:54.896350+01:00 info: ISCSID is /usr/sbin/iscsid -2014-09-26T14:07:54.896730+01:00 info: no initiator set -2014-09-26T14:07:54.896730+01:00 warning: '/usr/libexec/fcoe/fcoe_edd.sh' specified as full path -2014-09-26T14:07:54.896751+01:00 info: No FCoE EDD info found: No FCoE boot disk information is found in EDD! -2014-09-26T14:07:54.896890+01:00 info: -2014-09-26T14:07:54.897119+01:00 info: no /etc/zfcp.conf; not configuring zfcp -2014-09-26T14:07:54.897271+01:00 info: created new libuser.conf at /tmp/libuser.4GLvXH with instPath="" -2014-09-26T14:07:54.897428+01:00 info: running "ssh-keygen -q -t rsa -f /etc/ssh/ssh_host_rsa_key -C -N " -2014-09-26T14:07:54.897736+01:00 info: created new libuser.conf at /tmp/libuser.48f7tY with instPath="/mnt/sysimage" -2014-09-26T14:07:54.897875+01:00 info: anaconda called with cmdline = ['/usr/bin/anaconda', '--stage2', 'http://10.20.0.2:8080/centos/fuelweb/x86_64//images/install.img', '--kickstart', '/tmp/ks.cfg', '-T', '--selinux', '--lang', 'en_US.UTF-8', '--keymap', 'us', '--repo', 'http://10.20.0.2:8080/centos/fuelweb/x86_64/'] -2014-09-26T14:07:54.898104+01:00 info: Display mode = t -2014-09-26T14:07:54.898172+01:00 info: Default encoding = utf-8 -2014-09-26T14:07:54.898343+01:00 info: Detected 2016M of memory -2014-09-26T14:07:54.898514+01:00 info: Swap attempt of 4032M -2014-09-26T14:07:55.408054+01:00 info: running "ssh-keygen -q -t dsa -f /etc/ssh/ssh_host_dsa_key -C -N " -2014-09-26T14:07:55.408355+01:00 info: ISCSID is /usr/sbin/iscsid -2014-09-26T14:07:55.408355+01:00 info: no initiator set -2014-09-26T14:07:57.019643+01:00 info: setting installation environment hostname to node-5.domain.tld -2014-09-26T14:07:57.019857+01:00 info: setting installation environment hostname to node-5.domain.tld -2014-09-26T14:07:57.020143+01:00 info: setting installation environment hostname to node-5.domain.tld -2014-09-26T14:07:57.020406+01:00 warning: step installtype does not exist -2014-09-26T14:07:57.020693+01:00 warning: step confirminstall does not exist -2014-09-26T14:07:57.021017+01:00 warning: step complete does not exist -2014-09-26T14:07:57.021310+01:00 warning: step complete does not exist -2014-09-26T14:07:57.021584+01:00 warning: step complete does not exist -2014-09-26T14:07:57.021898+01:00 warning: step complete does not exist -2014-09-26T14:07:57.022167+01:00 warning: step complete does not exist -2014-09-26T14:07:57.022453+01:00 warning: step complete does not exist -2014-09-26T14:07:57.022719+01:00 warning: step complete does not exist -2014-09-26T14:07:57.023042+01:00 warning: step complete does not exist -2014-09-26T14:07:57.023345+01:00 warning: step complete does not exist -2014-09-26T14:07:57.023624+01:00 warning: step complete does not exist -2014-09-26T14:07:57.023929+01:00 warning: step complete does not exist -2014-09-26T14:07:57.024204+01:00 warning: step complete does not exist -2014-09-26T14:07:57.024492+01:00 warning: step complete does not exist -2014-09-26T14:07:57.024782+01:00 info: moving (1) to step setuptime -2014-09-26T14:07:57.025061+01:00 debug: setuptime is a direct step -2014-09-26T14:07:57.025348+01:00 warning: '/usr/sbin/hwclock' specified as full path -2014-09-26T14:07:57.025634+01:00 info: leaving (1) step setuptime -2014-09-26T14:07:57.026001+01:00 info: moving (1) to step autopartitionexecute -2014-09-26T14:07:57.026237+01:00 debug: autopartitionexecute is a direct step -2014-09-26T14:07:57.582270+01:00 info: leaving (1) step autopartitionexecute -2014-09-26T14:07:57.582511+01:00 info: moving (1) to step storagedone -2014-09-26T14:07:57.582727+01:00 debug: storagedone is a direct step -2014-09-26T14:07:57.583021+01:00 info: leaving (1) step storagedone -2014-09-26T14:07:57.583319+01:00 info: moving (1) to step enablefilesystems -2014-09-26T14:07:57.583681+01:00 debug: enablefilesystems is a direct step -2014-09-26T14:07:58.133444+01:00 debug: notifying kernel of 'change' event on device /sys/class/block/vda3 -2014-09-26T14:07:58.645340+01:00 debug: notifying kernel of 'change' event on device /sys/class/block/vda4 -2014-09-26T14:07:59.163828+01:00 debug: notifying kernel of 'change' event on device /sys/class/block/vda5 -2014-09-26T14:08:01.676084+01:00 debug: notifying kernel of 'change' event on device /sys/class/block/dm-0 -2014-09-26T14:08:02.178677+01:00 info: failed to set SELinux context for /mnt/sysimage: [Errno 95] Operation not supported -2014-09-26T14:08:02.178842+01:00 debug: isys.py:mount()- going to mount /dev/mapper/os-root on /mnt/sysimage as ext4 with options defaults -2014-09-26T14:08:02.179025+01:00 debug: isys.py:mount()- going to mount /dev/vda3 on /mnt/sysimage/boot as ext4 with options defaults -2014-09-26T14:08:02.179209+01:00 debug: isys.py:mount()- going to mount //dev on /mnt/sysimage/dev as bind with options defaults,bind -2014-09-26T14:08:02.179359+01:00 debug: isys.py:mount()- going to mount devpts on /mnt/sysimage/dev/pts as devpts with options gid=5,mode=620 -2014-09-26T14:08:02.179576+01:00 debug: isys.py:mount()- going to mount tmpfs on /mnt/sysimage/dev/shm as tmpfs with options defaults -2014-09-26T14:08:02.179706+01:00 info: failed to get default SELinux context for /proc: [Errno 2] No such file or directory -2014-09-26T14:08:02.179846+01:00 debug: isys.py:mount()- going to mount proc on /mnt/sysimage/proc as proc with options defaults -2014-09-26T14:08:02.180071+01:00 info: failed to get default SELinux context for /proc: [Errno 2] No such file or directory -2014-09-26T14:08:02.180188+01:00 debug: isys.py:mount()- going to mount sysfs on /mnt/sysimage/sys as sysfs with options defaults -2014-09-26T14:08:02.180403+01:00 info: leaving (1) step enablefilesystems -2014-09-26T14:08:02.180601+01:00 info: moving (1) to step bootloadersetup -2014-09-26T14:08:02.180779+01:00 debug: bootloadersetup is a direct step -2014-09-26T14:08:02.180924+01:00 info: leaving (1) step bootloadersetup -2014-09-26T14:08:02.181086+01:00 info: moving (1) to step reposetup -2014-09-26T14:08:02.181292+01:00 debug: reposetup is a direct step -2014-09-26T14:08:02.702545+01:00 info: added repository nailgun with URL http://10.20.0.2:8080/centos/fuelweb/x86_64 -2014-09-26T14:08:02.702750+01:00 debug: Grabbing http://10.20.0.2:8080/centos/fuelweb/x86_64/repodata/repomd.xml -2014-09-26T14:08:02.703081+01:00 debug: Grabbing http://10.20.0.2:8080/centos/fuelweb/x86_64/repodata/1b5da164a053a2273eb755cb1d9aa43d14c844c1c50dd95c8a083b49384234d4-primary.sqlite.bz2 -2014-09-26T14:08:02.703430+01:00 debug: Grabbing http://10.20.0.2:8080/centos/fuelweb/x86_64/repodata/b4e0b9342ef85d3059ff095fa7f140f654c2cb492837de689a58c581207d9632-comps.xml -2014-09-26T14:08:05.208242+01:00 info: leaving (1) step reposetup -2014-09-26T14:08:05.208492+01:00 info: moving (1) to step basepkgsel -2014-09-26T14:08:05.208492+01:00 debug: basepkgsel is a direct step -2014-09-26T14:08:05.208625+01:00 debug: no package matching rhn-setup -2014-09-26T14:08:05.208863+01:00 warning: not adding Base group -2014-09-26T14:08:05.709984+01:00 info: leaving (1) step basepkgsel -2014-09-26T14:08:05.710241+01:00 info: moving (1) to step postselection -2014-09-26T14:08:05.710552+01:00 debug: postselection is a direct step -2014-09-26T14:08:05.710749+01:00 info: selected kernel package for kernel -2014-09-26T14:08:06.212168+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/fs/ext4/ext4.ko.gz -2014-09-26T14:08:06.212168+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/fs/jbd2/jbd2.ko.gz -2014-09-26T14:08:06.212489+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/fs/mbcache.ko.gz -2014-09-26T14:08:06.212489+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/scsi/fcoe/fcoe.ko.gz -2014-09-26T14:08:06.212747+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/scsi/fcoe/libfcoe.ko.gz -2014-09-26T14:08:06.212865+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/scsi/libfc/libfc.ko.gz -2014-09-26T14:08:06.213038+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/scsi/scsi_transport_fc.ko.gz -2014-09-26T14:08:06.213231+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/scsi/scsi_tgt.ko.gz -2014-09-26T14:08:06.213389+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/crypto/xts.ko.gz -2014-09-26T14:08:06.213725+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/crypto/lrw.ko.gz -2014-09-26T14:08:06.213725+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/crypto/gf128mul.ko.gz -2014-09-26T14:08:06.214013+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/crypto/sha256_generic.ko.gz -2014-09-26T14:08:06.214133+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/crypto/cbc.ko.gz -2014-09-26T14:08:06.214389+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/md/dm-raid.ko.gz -2014-09-26T14:08:06.214389+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/md/dm-crypt.ko.gz -2014-09-26T14:08:06.214591+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/md/dm-round-robin.ko.gz -2014-09-26T14:08:06.214983+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/md/dm-multipath.ko.gz -2014-09-26T14:08:06.214983+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/md/dm-snapshot.ko.gz -2014-09-26T14:08:06.215207+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/md/dm-mirror.ko.gz -2014-09-26T14:08:06.215346+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/md/dm-region-hash.ko.gz -2014-09-26T14:08:06.215486+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/md/dm-log.ko.gz -2014-09-26T14:08:06.215660+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/md/dm-zero.ko.gz -2014-09-26T14:08:06.215826+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/md/dm-mod.ko.gz -2014-09-26T14:08:06.216005+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/md/linear.ko.gz -2014-09-26T14:08:06.216286+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/md/raid10.ko.gz -2014-09-26T14:08:06.216286+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/md/raid456.ko.gz -2014-09-26T14:08:06.216499+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/crypto/async_tx/async_raid6_recov.ko.gz -2014-09-26T14:08:06.216695+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/crypto/async_tx/async_pq.ko.gz -2014-09-26T14:08:06.216861+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/lib/raid6/raid6_pq.ko.gz -2014-09-26T14:08:06.217028+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/crypto/async_tx/async_xor.ko.gz -2014-09-26T14:08:06.217297+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/crypto/xor.ko.gz -2014-09-26T14:08:06.217393+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/crypto/async_tx/async_memcpy.ko.gz -2014-09-26T14:08:06.217532+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/crypto/async_tx/async_tx.ko.gz -2014-09-26T14:08:06.217719+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/md/raid1.ko.gz -2014-09-26T14:08:06.217884+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/md/raid0.ko.gz -2014-09-26T14:08:06.218051+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/net/8021q/8021q.ko.gz -2014-09-26T14:08:06.218218+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/net/802/garp.ko.gz -2014-09-26T14:08:06.218562+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/net/802/stp.ko.gz -2014-09-26T14:08:06.218562+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/net/llc/llc.ko.gz -2014-09-26T14:08:06.218756+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/infiniband/hw/mlx4/mlx4_ib.ko.gz -2014-09-26T14:08:06.218916+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/net/mlx4/mlx4_en.ko.gz -2014-09-26T14:08:06.219118+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/net/mlx4/mlx4_core.ko.gz -2014-09-26T14:08:06.219287+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/infiniband/ulp/ipoib/ib_ipoib.ko.gz -2014-09-26T14:08:06.219453+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/infiniband/core/ib_cm.ko.gz -2014-09-26T14:08:06.219757+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/infiniband/core/ib_sa.ko.gz -2014-09-26T14:08:06.219823+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/infiniband/core/ib_mad.ko.gz -2014-09-26T14:08:06.219984+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/infiniband/core/ib_core.ko.gz -2014-09-26T14:08:06.220148+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/block/virtio_blk.ko.gz -2014-09-26T14:08:06.220315+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/net/virtio_net.ko.gz -2014-09-26T14:08:06.220478+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/virtio/virtio_pci.ko.gz -2014-09-26T14:08:06.220667+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/virtio/virtio_ring.ko.gz -2014-09-26T14:08:06.220944+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/virtio/virtio.ko.gz -2014-09-26T14:08:06.221009+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/ata/pata_acpi.ko.gz -2014-09-26T14:08:06.221174+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/ata/ata_generic.ko.gz -2014-09-26T14:08:06.221340+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/ata/ata_piix.ko.gz -2014-09-26T14:08:06.221505+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/net/ipv6/ipv6.ko.gz -2014-09-26T14:08:06.221694+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/firmware/iscsi_ibft.ko.gz -2014-09-26T14:08:06.221861+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/scsi/iscsi_boot_sysfs.ko.gz -2014-09-26T14:08:06.222139+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/input/misc/pcspkr.ko.gz -2014-09-26T14:08:06.222203+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/firmware/edd.ko.gz -2014-09-26T14:08:06.222366+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/block/floppy.ko.gz -2014-09-26T14:08:06.222533+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/scsi/iscsi_tcp.ko.gz -2014-09-26T14:08:06.222724+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/scsi/libiscsi_tcp.ko.gz -2014-09-26T14:08:06.222889+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/scsi/libiscsi.ko.gz -2014-09-26T14:08:06.223068+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/scsi/scsi_transport_iscsi.ko.gz -2014-09-26T14:08:06.223356+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/fs/squashfs/squashfs.ko.gz -2014-09-26T14:08:06.223356+01:00 debug: Checking for DUD module /lib/modules/2.6.32-431.el6.x86_64/kernel/fs/cramfs/cramfs.ko.gz -2014-09-26T14:08:06.223567+01:00 debug: selecting kernel-devel -2014-09-26T14:08:09.229225+01:00 info: leaving (1) step postselection -2014-09-26T14:08:09.229448+01:00 info: moving (1) to step install -2014-09-26T14:08:09.229845+01:00 info: leaving (1) step install -2014-09-26T14:08:09.230098+01:00 info: moving (1) to step preinstallconfig -2014-09-26T14:08:09.230390+01:00 debug: preinstallconfig is a direct step -2014-09-26T14:08:09.230717+01:00 debug: isys.py:mount()- going to mount /selinux on /mnt/sysimage/selinux as selinuxfs with options defaults -2014-09-26T14:08:09.231093+01:00 debug: isys.py:mount()- going to mount /proc/bus/usb on /mnt/sysimage/proc/bus/usb as usbfs with options defaults -2014-09-26T14:08:09.231455+01:00 info: copy_to_sysimage: source '/etc/multipath/wwids' does not exist. -2014-09-26T14:08:09.231645+01:00 info: copy_to_sysimage: source '/etc/multipath/bindings' does not exist. -2014-09-26T14:08:09.231964+01:00 info: copy_to_sysimage: source '/etc/multipath/wwids' does not exist. -2014-09-26T14:08:09.232258+01:00 info: copy_to_sysimage: source '/etc/multipath/bindings' does not exist. -2014-09-26T14:08:09.232568+01:00 info: leaving (1) step preinstallconfig -2014-09-26T14:08:09.232943+01:00 info: moving (1) to step installpackages -2014-09-26T14:08:09.233242+01:00 debug: installpackages is a direct step -2014-09-26T14:08:09.233507+01:00 info: Preparing to install packages -2014-09-26T14:08:12.260070+01:00 info: Installing libgcc-4.4.7-4.el6.x86_64 -2014-09-26T14:08:12.260070+01:00 info: warning: libgcc-4.4.7-4.el6.x86_64: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY -2014-09-26T14:08:12.260304+01:00 info: Installing setup-2.8.14-20.el6_4.1.noarch -2014-09-26T14:08:12.260501+01:00 info: Installing filesystem-2.4.30-3.el6.x86_64 -2014-09-26T14:08:13.263472+01:00 info: Installing basesystem-10.0-4.el6.noarch -2014-09-26T14:08:13.263669+01:00 info: Installing kernel-headers-2.6.32-431.20.3.el6.x86_64 -2014-09-26T14:08:13.263762+01:00 info: warning: kernel-headers-2.6.32-431.20.3.el6.x86_64: Header V3 RSA/SHA1 Signature, key ID a218cd1f: NOKEY -2014-09-26T14:08:13.764961+01:00 info: Installing rubygem-mixlib-cli-1.2.2-3.el6.noarch -2014-09-26T14:08:13.765124+01:00 info: Installing rubygem-extlib-0.9.13-5.el6.noarch -2014-09-26T14:08:14.266349+01:00 info: Installing ncurses-base-5.7-3.20090208.el6.x86_64 -2014-09-26T14:08:14.266561+01:00 info: Installing tzdata-2014e-1.el6.noarch -2014-09-26T14:08:15.268302+01:00 info: Installing glibc-common-2.12-1.132.el6_5.2.x86_64 -2014-09-26T14:08:24.284548+01:00 info: Installing nss-softokn-freebl-3.14.3-10.el6_5.x86_64 -2014-09-26T14:08:24.284753+01:00 info: Installing glibc-2.12-1.132.el6_5.2.x86_64 -2014-09-26T14:08:25.286991+01:00 info: Installing ncurses-libs-5.7-3.20090208.el6.x86_64 -2014-09-26T14:08:25.286991+01:00 info: Installing bash-4.1.2-15.el6_4.x86_64 -2014-09-26T14:08:25.788361+01:00 info: Installing libattr-2.4.44-7.el6.x86_64 -2014-09-26T14:08:25.788361+01:00 info: Installing libcap-2.16-5.5.el6.x86_64 -2014-09-26T14:08:25.788751+01:00 info: Installing zlib-1.2.3-29.el6.x86_64 -2014-09-26T14:08:25.788861+01:00 info: Installing info-4.13a-8.el6.x86_64 -2014-09-26T14:08:25.789139+01:00 info: Installing popt-1.13-7.el6.x86_64 -2014-09-26T14:08:25.789301+01:00 info: Installing chkconfig-1.3.49.3-2.el6_4.1.x86_64 -2014-09-26T14:08:26.290761+01:00 info: Installing libacl-2.2.49-6.el6.x86_64 -2014-09-26T14:08:26.290761+01:00 info: Installing audit-libs-2.2-4.el6_5.x86_64 -2014-09-26T14:08:26.291065+01:00 info: Installing db4-4.7.25-18.el6_4.x86_64 -2014-09-26T14:08:26.291181+01:00 info: Installing libcom_err-1.41.12-18.el6.x86_64 -2014-09-26T14:08:26.291471+01:00 info: Installing nspr-4.10.2-1.el6_5.x86_64 -2014-09-26T14:08:26.291642+01:00 info: Installing libstdc++-4.4.7-4.el6.x86_64 -2014-09-26T14:08:26.291985+01:00 info: Installing nss-util-3.15.3-1.el6_5.x86_64 -2014-09-26T14:08:26.291985+01:00 info: Installing bzip2-libs-1.0.5-7.el6_0.x86_64 -2014-09-26T14:08:26.793742+01:00 info: Installing readline-6.0-4.el6.x86_64 -2014-09-26T14:08:26.793742+01:00 info: Installing libxml2-2.7.6-14.el6_5.2.x86_64 -2014-09-26T14:08:26.793988+01:00 info: Installing libsepol-2.0.41-4.el6.x86_64 -2014-09-26T14:08:27.295233+01:00 info: Installing libselinux-2.0.94-5.3.el6_4.1.x86_64 -2014-09-26T14:08:27.295322+01:00 info: Installing shadow-utils-4.1.4.2-13.el6.x86_64 -2014-09-26T14:08:27.796830+01:00 info: Installing sed-4.2.1-10.el6.x86_64 -2014-09-26T14:08:27.796984+01:00 info: Installing gmp-4.3.1-7.el6_2.2.x86_64 -2014-09-26T14:08:27.797264+01:00 info: Installing libidn-1.18-2.el6.x86_64 -2014-09-26T14:08:28.298522+01:00 info: Installing gawk-3.1.7-10.el6.x86_64 -2014-09-26T14:08:28.298758+01:00 info: Installing file-libs-5.04-15.el6.x86_64 -2014-09-26T14:08:28.298914+01:00 info: Installing libuuid-2.17.2-12.14.el6_5.x86_64 -2014-09-26T14:08:28.299164+01:00 info: Installing libudev-147-2.51.el6.x86_64 -2014-09-26T14:08:28.299275+01:00 info: Installing dbus-libs-1.2.24-7.el6_3.x86_64 -2014-09-26T14:08:28.800783+01:00 info: Installing libblkid-2.17.2-12.14.el6_5.x86_64 -2014-09-26T14:08:28.801018+01:00 info: Installing findutils-4.4.2-6.el6.x86_64 -2014-09-26T14:08:28.801396+01:00 info: Installing libselinux-utils-2.0.94-5.3.el6_4.1.x86_64 -2014-09-26T14:08:28.801649+01:00 info: Installing lua-5.1.4-4.1.el6.x86_64 -2014-09-26T14:08:28.801932+01:00 info: Installing sqlite-3.6.20-1.el6.x86_64 -2014-09-26T14:08:28.802241+01:00 info: Installing pcre-7.8-6.el6.x86_64 -2014-09-26T14:08:29.303500+01:00 info: Installing grep-2.6.3-4.el6_5.1.x86_64 -2014-09-26T14:08:29.303679+01:00 info: Installing cyrus-sasl-lib-2.1.23-13.el6_3.1.x86_64 -2014-09-26T14:08:29.303835+01:00 info: Installing which-2.19-6.el6.x86_64 -2014-09-26T14:08:29.304089+01:00 info: Installing libpcap-1.4.0-1.20130826git2dbcaa1.el6.x86_64 -2014-09-26T14:08:29.304245+01:00 info: Installing gdbm-1.8.0-36.el6.x86_64 -2014-09-26T14:08:29.304463+01:00 info: Installing perl-Pod-Escapes-1.04-136.el6.x86_64 -2014-09-26T14:08:29.304631+01:00 info: Installing perl-libs-5.10.1-136.el6.x86_64 -2014-09-26T14:08:29.806008+01:00 info: Installing perl-Module-Pluggable-3.90-136.el6.x86_64 -2014-09-26T14:08:29.806008+01:00 info: Installing perl-version-0.77-136.el6.x86_64 -2014-09-26T14:08:29.806249+01:00 info: Installing perl-Pod-Simple-3.13-136.el6.x86_64 -2014-09-26T14:08:29.806393+01:00 info: Installing perl-5.10.1-136.el6.x86_64 -2014-09-26T14:08:33.814058+01:00 info: Installing xz-libs-4.999.9-0.3.beta.20091007git.el6.x86_64 -2014-09-26T14:08:33.814333+01:00 info: Installing elfutils-libelf-0.152-1.el6.x86_64 -2014-09-26T14:08:33.814587+01:00 info: Installing expat-2.0.1-11.el6_2.x86_64 -2014-09-26T14:08:33.814917+01:00 info: Installing libgpg-error-1.7-4.el6.x86_64 -2014-09-26T14:08:33.815240+01:00 info: Installing nss-softokn-3.14.3-10.el6_5.x86_64 -2014-09-26T14:08:34.316658+01:00 info: Installing checkpolicy-2.0.22-1.el6.x86_64 -2014-09-26T14:08:34.316658+01:00 info: Installing bzip2-1.0.5-7.el6_0.x86_64 -2014-09-26T14:08:34.316907+01:00 info: Installing cpio-2.10-11.el6_3.x86_64 -2014-09-26T14:08:34.317089+01:00 info: Installing binutils-2.20.51.0.2-5.36.el6.x86_64 -2014-09-26T14:08:35.319554+01:00 info: Installing libedit-2.11-4.20080712cvs.1.el6.x86_64 -2014-09-26T14:08:35.319760+01:00 info: Installing tcp_wrappers-libs-7.6-57.el6.x86_64 -2014-09-26T14:08:35.320048+01:00 info: Installing pciutils-libs-3.1.10-2.el6.x86_64 -2014-09-26T14:08:35.320271+01:00 info: Installing sysvinit-tools-2.87-5.dsf.el6.x86_64 -2014-09-26T14:08:35.320476+01:00 info: Installing pkgconfig-0.23-9.1.el6.x86_64 -2014-09-26T14:08:35.320699+01:00 info: Installing libyaml-0.1.3-1.el6.x86_64 -2014-09-26T14:08:35.320975+01:00 info: Installing dmidecode-2.11-2.el6.x86_64 -2014-09-26T14:08:35.321122+01:00 info: Installing pth-2.0.7-9.3.el6.x86_64 -2014-09-26T14:08:35.321442+01:00 info: Installing libtasn1-2.3-6.el6_5.x86_64 -2014-09-26T14:08:35.321608+01:00 info: Installing p11-kit-0.18.5-2.el6_5.2.x86_64 -2014-09-26T14:08:35.822988+01:00 info: Installing p11-kit-trust-0.18.5-2.el6_5.2.x86_64 -2014-09-26T14:08:35.822988+01:00 info: Installing ca-certificates-2013.1.95-65.1.el6_5.noarch -2014-09-26T14:08:37.325977+01:00 info: Installing shared-mime-info-0.70-4.el6.x86_64 -2014-09-26T14:08:37.326172+01:00 info: warning: %post(shared-mime-info-0.70-4.el6.x86_64) scriptlet failed, exit status 127 -2014-09-26T14:08:37.326172+01:00 info: Installing glib2-2.26.1-7.el6_5.x86_64 -2014-09-26T14:08:37.827535+01:00 info: Installing gamin-0.1.10-9.el6.x86_64 -2014-09-26T14:08:37.827535+01:00 info: Installing grubby-7.0.15-5.el6.x86_64 -2014-09-26T14:08:37.827885+01:00 info: Installing dbus-glib-0.86-6.el6.x86_64 -2014-09-26T14:08:37.827885+01:00 info: Installing libgcrypt-1.4.5-11.el6_4.x86_64 -2014-09-26T14:08:37.828182+01:00 info: Installing device-mapper-persistent-data-0.2.8-4.el6_5.x86_64 -2014-09-26T14:08:38.329404+01:00 info: Installing libnih-1.0.1-7.el6.x86_64 -2014-09-26T14:08:38.329635+01:00 info: Installing upstart-0.6.5-13.el6_5.3.x86_64 -2014-09-26T14:08:38.329635+01:00 info: Installing file-5.04-15.el6.x86_64 -2014-09-26T14:08:38.329993+01:00 info: Installing ppl-0.10.2-11.el6.x86_64 -2014-09-26T14:08:38.831210+01:00 info: Installing cloog-ppl-0.15.7-1.2.el6.x86_64 -2014-09-26T14:08:38.831210+01:00 info: Installing mpfr-2.4.1-6.el6.x86_64 -2014-09-26T14:08:38.831482+01:00 info: Installing cpp-4.4.7-4.el6.x86_64 -2014-09-26T14:08:39.833716+01:00 info: Installing libutempter-1.1.5-4.1.el6.x86_64 -2014-09-26T14:08:39.833921+01:00 info: Installing MAKEDEV-3.24-6.el6.x86_64 -2014-09-26T14:08:40.335441+01:00 info: Installing vim-minimal-7.2.411-1.8.el6.x86_64 -2014-09-26T14:08:40.335441+01:00 info: Installing procps-3.2.8-25.el6.x86_64 -2014-09-26T14:08:40.335678+01:00 info: Installing net-tools-1.60-110.el6_2.x86_64 -2014-09-26T14:08:40.837004+01:00 info: Installing psmisc-22.6-19.el6_5.x86_64 -2014-09-26T14:08:40.837004+01:00 info: Installing libselinux-ruby-2.0.94-5.3.el6_4.1.x86_64 -2014-09-26T14:08:40.837242+01:00 info: Installing augeas-libs-1.0.0-5.mira1.x86_64 -2014-09-26T14:08:40.837388+01:00 info: Installing tar-1.23-11.el6.x86_64 -2014-09-26T14:08:41.338733+01:00 info: Installing libicu-4.2.1-9.1.el6_2.x86_64 -2014-09-26T14:08:42.340615+01:00 info: Installing libusb-0.1.12-23.el6.x86_64 -2014-09-26T14:08:42.340615+01:00 info: Installing libss-1.41.12-18.el6.x86_64 -2014-09-26T14:08:42.340804+01:00 info: Installing e2fsprogs-libs-1.41.12-18.el6.x86_64 -2014-09-26T14:08:42.340991+01:00 info: Installing db4-utils-4.7.25-18.el6_4.x86_64 -2014-09-26T14:08:42.341172+01:00 info: Installing pinentry-0.7.6-6.el6.x86_64 -2014-09-26T14:08:42.842512+01:00 info: Installing make-3.81-20.el6.x86_64 -2014-09-26T14:08:42.842512+01:00 info: Installing libgomp-4.4.7-4.el6.x86_64 -2014-09-26T14:08:42.842867+01:00 info: Installing diffutils-2.8.1-28.el6.x86_64 -2014-09-26T14:08:42.843016+01:00 info: Installing m4-1.4.13-5.el6.x86_64 -2014-09-26T14:08:42.843158+01:00 info: Installing vim-common-7.2.411-1.8.el6.x86_64 -2014-09-26T14:08:45.348076+01:00 info: Installing glibc-headers-2.12-1.132.el6_5.2.x86_64 -2014-09-26T14:08:45.849254+01:00 info: Installing glibc-devel-2.12-1.132.el6_5.2.x86_64 -2014-09-26T14:08:46.350505+01:00 info: Installing dash-0.5.5.1-4.el6.x86_64 -2014-09-26T14:08:46.350697+01:00 info: Installing ncurses-5.7-3.20090208.el6.x86_64 -2014-09-26T14:08:46.350793+01:00 info: Installing groff-1.18.1.4-21.el6.x86_64 -2014-09-26T14:08:47.352922+01:00 info: Installing less-436-10.el6.x86_64 -2014-09-26T14:08:47.353109+01:00 info: Installing coreutils-libs-8.4-31.el6_5.2.x86_64 -2014-09-26T14:08:47.353314+01:00 info: Installing gzip-1.3.12-19.el6_4.x86_64 -2014-09-26T14:08:47.353540+01:00 info: Installing cracklib-2.8.16-4.el6.x86_64 -2014-09-26T14:08:47.353771+01:00 info: Installing cracklib-dicts-2.8.16-4.el6.x86_64 -2014-09-26T14:08:47.855331+01:00 info: Installing coreutils-8.4-31.el6_5.2.x86_64 -2014-09-26T14:08:48.857357+01:00 info: Installing pam-1.1.1-17.el6.x86_64 -2014-09-26T14:08:49.358399+01:00 info: Installing module-init-tools-3.9-21.el6_4.x86_64 -2014-09-26T14:08:49.358573+01:00 info: Installing hwdata-0.233-9.1.el6.noarch -2014-09-26T14:08:49.859747+01:00 info: Installing redhat-logos-60.0.14-12.el6.centos.noarch -2014-09-26T14:08:50.861265+01:00 info: Installing plymouth-scripts-0.8.3-27.el6.centos.x86_64 -2014-09-26T14:08:50.861265+01:00 info: Installing pciutils-3.1.10-2.el6.x86_64 -2014-09-26T14:08:50.861538+01:00 info: Installing libpciaccess-0.13.1-2.el6.x86_64 -2014-09-26T14:08:50.861538+01:00 info: Installing logrotate-3.8.7-1.el6.x86_64 -2014-09-26T14:08:50.861740+01:00 info: Installing nss-3.15.3-6.el6_5.x86_64 -2014-09-26T14:08:51.362884+01:00 info: Installing nss-sysinit-3.15.3-6.el6_5.x86_64 -2014-09-26T14:08:51.363025+01:00 info: Installing nss-tools-3.15.3-6.el6_5.x86_64 -2014-09-26T14:08:51.363200+01:00 info: Installing openldap-2.4.23-34.el6_5.1.x86_64 -2014-09-26T14:08:51.363529+01:00 info: Installing libuser-0.56.13-5.el6.x86_64 -2014-09-26T14:08:51.363529+01:00 info: Installing libcap-ng-0.6.4-3.el6_0.1.x86_64 -2014-09-26T14:08:51.364095+01:00 info: Installing ethtool-3.5-1.4.el6_5.x86_64 -2014-09-26T14:08:51.364095+01:00 info: Installing mingetty-1.08-5.el6.x86_64 -2014-09-26T14:08:51.865064+01:00 info: Installing vconfig-1.9-8.1.el6.x86_64 -2014-09-26T14:08:51.865064+01:00 info: Installing ruby-shadow-1.4.1-13.el6.x86_64 -2014-09-26T14:08:51.865403+01:00 info: Installing gpm-libs-1.20.6-12.el6.x86_64 -2014-09-26T14:08:51.865403+01:00 info: Installing keyutils-libs-1.4-4.el6.x86_64 -2014-09-26T14:08:51.865619+01:00 info: Installing krb5-libs-1.10.3-15.el6_5.1.x86_64 -2014-09-26T14:08:51.865759+01:00 info: Installing openssl-1.0.1e-16.el6_5.14.x86_64 -2014-09-26T14:08:52.367122+01:00 info: Installing ruby-2.1.1-1.1.x86_64 -2014-09-26T14:09:14.915830+01:00 info: Installing rubygem-json-1.7.7-101.el6.x86_64 -2014-09-26T14:09:15.417056+01:00 info: Installing libssh2-1.4.2-1.el6.x86_64 -2014-09-26T14:09:15.417234+01:00 info: Installing libcurl-7.19.7-37.el6_5.3.x86_64 -2014-09-26T14:09:15.417357+01:00 info: Installing curl-7.19.7-37.el6_5.3.x86_64 -2014-09-26T14:09:15.417588+01:00 info: Installing rpm-libs-4.8.0-37.el6.x86_64 -2014-09-26T14:09:15.918863+01:00 info: Installing rpm-4.8.0-37.el6.x86_64 -2014-09-26T14:09:15.919051+01:00 info: Installing gnupg2-2.0.14-6.el6_4.x86_64 -2014-09-26T14:09:16.420189+01:00 info: Installing gpgme-1.1.8-3.el6.x86_64 -2014-09-26T14:09:16.420189+01:00 info: Installing hiera-1.3.1-1.mira2.noarch -2014-09-26T14:09:16.921636+01:00 info: Installing ruby-augeas-0.5.0-17.3.x86_64 -2014-09-26T14:09:16.921895+01:00 info: Installing rubygem-httpclient-2.3.2-5.el6.noarch -2014-09-26T14:09:16.921895+01:00 info: Installing ruby-rgen-0.6.5-1.el6.noarch -2014-09-26T14:09:16.922145+01:00 info: Installing rubygem-stomp-1.2.16-1.el6.noarch -2014-09-26T14:09:16.922319+01:00 info: Installing mcollective-common-2.3.3-3.el6.noarch -2014-09-26T14:09:17.924444+01:00 info: Installing rubygem-mixlib-log-1.4.1-1.el6.noarch -2014-09-26T14:09:17.924680+01:00 info: Installing rubygem-mixlib-config-1.1.2-1.el6.noarch -2014-09-26T14:09:18.425951+01:00 info: Installing rubygem-systemu-2.5.2-1.el6.noarch -2014-09-26T14:09:18.426157+01:00 info: Installing rubygem-cstruct-1.0.1-1.el6.noarch -2014-09-26T14:09:18.426316+01:00 info: Installing rubygem-rethtool-0.0.3-2.mira1.noarch -2014-09-26T14:09:18.426522+01:00 info: Installing tcpdump-4.0.0-3.20090921gitdf3cb4.2.el6.x86_64 -2014-09-26T14:09:18.927887+01:00 info: Installing bind-libs-9.8.2-0.23.rc1.el6_5.1.x86_64 -2014-09-26T14:09:18.928080+01:00 info: Installing mysql-libs-5.1.73-3.el6_5.x86_64 -2014-09-26T14:09:19.429242+01:00 info: Installing fipscheck-lib-1.2.0-7.el6.x86_64 -2014-09-26T14:09:19.429490+01:00 info: Installing fipscheck-1.2.0-7.el6.x86_64 -2014-09-26T14:09:19.429609+01:00 info: Installing ustr-1.0.4-9.1.el6.x86_64 -2014-09-26T14:09:19.429881+01:00 info: Installing libsemanage-2.0.43-4.2.el6.x86_64 -2014-09-26T14:09:19.434007+01:00 info: Installing libffi-3.0.5-3.2.el6.x86_64 -2014-09-26T14:09:19.434007+01:00 info: Installing python-2.6.6-52.el6.x86_64 -2014-09-26T14:09:19.434032+01:00 info: Installing python-libs-2.6.6-52.el6.x86_64 -2014-09-26T14:09:22.936615+01:00 info: Installing PyYAML-3.10-3.el6.x86_64 -2014-09-26T14:09:23.437984+01:00 info: Installing python-argparse-1.2.1-2.el6.noarch -2014-09-26T14:09:23.437984+01:00 info: Installing python-daemonize-2.2.1-0.mira1.noarch -2014-09-26T14:09:23.438241+01:00 info: Installing python-tablib-0.9.11.20120702git752443f-5.el6.noarch -2014-09-26T14:09:24.440396+01:00 info: Installing python-pypcap-1.1-15.1.x86_64 -2014-09-26T14:09:24.440658+01:00 info: Installing yum-metadata-parser-1.1.2-16.el6.x86_64 -2014-09-26T14:09:24.440963+01:00 info: Installing pygpgme-0.1-18.20090824bzr68.el6.x86_64 -2014-09-26T14:09:24.441240+01:00 info: Installing rpm-python-4.8.0-37.el6.x86_64 -2014-09-26T14:09:24.441570+01:00 info: Installing python-pycurl-7.19.0-8.el6.x86_64 -2014-09-26T14:09:24.441916+01:00 info: Installing python-urlgrabber-3.9.1-9.el6.noarch -2014-09-26T14:09:24.943428+01:00 info: Installing python-stevedore-0.14-1.el6.noarch -2014-09-26T14:09:24.943428+01:00 info: Installing scapy-2.0.0.10-5.el6.noarch -2014-09-26T14:09:25.444900+01:00 info: Installing python-iniparse-0.3.1-2.1.el6.noarch -2014-09-26T14:09:25.444900+01:00 info: Installing yum-plugin-fastestmirror-1.1.30-17.el6_5.noarch -2014-09-26T14:09:25.445244+01:00 info: Installing yum-3.2.29-43.el6.centos.noarch -2014-09-26T14:09:25.946570+01:00 info: Installing python-prettytable-0.7.2-1.el6.noarch -2014-09-26T14:09:25.946758+01:00 info: Installing python-setuptools-0.6.10-3.el6.noarch -2014-09-26T14:09:25.946819+01:00 info: Installing pyparsing-1.5.6-1.el6.noarch -2014-09-26T14:09:26.448102+01:00 info: Installing python-cmd2-0.6.4-7.el6.noarch -2014-09-26T14:09:26.448102+01:00 info: Installing python-cliff-1.4.4-1.el6.noarch -2014-09-26T14:09:26.448533+01:00 info: Installing python-cliff-tablib-1.1-1.2.noarch -2014-09-26T14:09:26.448834+01:00 info: Installing rubygem-yajl-ruby-1.1.0-1.el6.x86_64 -2014-09-26T14:09:26.950205+01:00 info: Installing rubygem-ohai-6.14.0-1.el6.noarch -2014-09-26T14:09:26.950503+01:00 info: Installing slang-2.2.1-1.el6.x86_64 -2014-09-26T14:09:27.451759+01:00 info: Installing newt-0.52.11-3.el6.x86_64 -2014-09-26T14:09:27.451759+01:00 info: Installing newt-python-0.52.11-3.el6.x86_64 -2014-09-26T14:09:27.451983+01:00 info: Installing plymouth-core-libs-0.8.3-27.el6.centos.x86_64 -2014-09-26T14:09:27.452194+01:00 info: Installing rubygem-ipaddress-0.8.0-3.el6.noarch -2014-09-26T14:09:27.452390+01:00 info: Installing kbd-misc-1.15-11.el6.noarch -2014-09-26T14:09:27.953690+01:00 info: Installing centos-release-6-5.el6.centos.11.2.x86_64 -2014-09-26T14:09:27.953886+01:00 info: Installing policycoreutils-2.0.83-19.39.el6.x86_64 -2014-09-26T14:09:28.455035+01:00 info: Installing iptables-1.4.7-11.mira2.x86_64 -2014-09-26T14:09:28.455035+01:00 info: Installing iproute-2.6.32-130.el6.netns.2.mira1.x86_64 -2014-09-26T14:09:28.455280+01:00 info: Installing iputils-20071127-17.el6_4.2.x86_64 -2014-09-26T14:09:28.455496+01:00 info: Installing util-linux-ng-2.17.2-12.14.el6_5.x86_64 -2014-09-26T14:09:29.457697+01:00 info: Installing initscripts-9.03.40-2.el6.centos.1.x86_64 -2014-09-26T14:09:29.959750+01:00 info: Installing udev-147-2.51.el6.x86_64 -2014-09-26T14:09:30.460766+01:00 info: Installing device-mapper-libs-1.02.79-8.el6.x86_64 -2014-09-26T14:09:30.460862+01:00 info: Installing device-mapper-1.02.79-8.el6.x86_64 -2014-09-26T14:09:30.461042+01:00 info: Installing device-mapper-event-libs-1.02.79-8.el6.x86_64 -2014-09-26T14:09:30.461284+01:00 info: Installing openssh-5.3p1-94.el6.x86_64 -2014-09-26T14:09:30.461427+01:00 info: Installing device-mapper-event-1.02.79-8.el6.x86_64 -2014-09-26T14:09:30.461610+01:00 info: Installing lvm2-libs-2.02.100-8.el6.x86_64 -2014-09-26T14:09:30.461774+01:00 info: Installing libdrm-2.4.45-2.el6.x86_64 -2014-09-26T14:09:30.963170+01:00 info: Installing plymouth-0.8.3-27.el6.centos.x86_64 -2014-09-26T14:09:30.963170+01:00 info: Installing mcollective-2.3.3-3.el6.noarch -2014-09-26T14:09:30.963449+01:00 info: Installing kbd-1.15-11.el6.x86_64 -2014-09-26T14:09:30.963563+01:00 info: Installing dracut-004-336.el6_5.2.noarch -2014-09-26T14:09:31.465232+01:00 info: Installing dracut-kernel-004-336.el6_5.2.noarch -2014-09-26T14:09:31.465485+01:00 info: Installing rsyslog-5.8.10-8.el6.x86_64 -2014-09-26T14:09:31.465485+01:00 info: Installing ntpdate-4.2.6p5-1.el6.centos.x86_64 -2014-09-26T14:09:31.966784+01:00 info: Installing cyrus-sasl-2.1.23-13.el6_3.1.x86_64 -2014-09-26T14:09:31.966784+01:00 info: Installing postfix-2.6.6-6.el6_5.x86_64 -2014-09-26T14:09:33.970587+01:00 info: Installing crontabs-1.10-33.el6.noarch -2014-09-26T14:09:33.970587+01:00 info: Installing cronie-anacron-1.4.4-12.el6.x86_64 -2014-09-26T14:09:33.970810+01:00 info: Installing cronie-1.4.4-12.el6.x86_64 -2014-09-26T14:09:33.970951+01:00 info: Installing virt-what-1.11-1.2.el6.x86_64 -2014-09-26T14:09:33.971146+01:00 info: Installing facter-1.7.0-1.el6.x86_64 -2014-09-26T14:09:34.472436+01:00 info: Installing iptables-ipv6-1.4.7-11.mira2.x86_64 -2014-09-26T14:09:34.472436+01:00 info: Installing selinux-policy-3.7.19-231.el6_5.3.noarch -2014-09-26T14:09:35.474512+01:00 info: Installing dhcp-common-4.1.1-38.P1.el6.centos.x86_64 -2014-09-26T14:09:35.474672+01:00 info: Installing linux-firmware-20140317-35.gitdec41bce.mira1.noarch -2014-09-26T14:09:39.481431+01:00 info: Installing rubygem-netaddr-1.5.0-2.el6.noarch -2014-09-26T14:09:39.481431+01:00 info: Installing rubygem-openstack-1.1.2-2.el6.noarch -2014-09-26T14:09:40.483536+01:00 info: Installing kernel-2.6.32-431.20.3.el6.x86_64 -2014-09-26T14:09:46.495149+01:00 info: Installing dhclient-4.1.1-38.P1.el6.centos.x86_64 -2014-09-26T14:09:46.495149+01:00 info: Installing selinux-policy-targeted-3.7.19-231.el6_5.3.noarch -2014-09-26T14:10:17.543656+01:00 info: Installing system-config-firewall-base-1.2.27-5.el6.noarch -2014-09-26T14:10:18.045213+01:00 info: Installing puppet-3.4.2-1.mira2.noarch -2014-09-26T14:10:20.549682+01:00 info: Installing ntp-4.2.6p5-1.el6.centos.x86_64 -2014-09-26T14:10:20.549762+01:00 info: Installing nailgun-mcagents-0.1.0-3.x86_64 -2014-09-26T14:10:20.549929+01:00 info: Installing lvm2-2.02.100-8.el6.x86_64 -2014-09-26T14:10:20.550090+01:00 info: Installing openssh-clients-5.3p1-94.el6.x86_64 -2014-09-26T14:10:21.051387+01:00 info: Installing openssh-server-5.3p1-94.el6.x86_64 -2014-09-26T14:10:21.051387+01:00 info: Installing bfa-firmware-3.2.21.1-2.el6.noarch -2014-09-26T14:10:22.053655+01:00 info: Installing b43-openfwwf-5.2-4.el6.noarch -2014-09-26T14:10:22.053655+01:00 info: Installing aic94xx-firmware-30-2.el6.noarch -2014-09-26T14:10:22.054096+01:00 info: Installing nailgun-agent-0.1.0-3.x86_64 -2014-09-26T14:10:22.054407+01:00 info: Installing authconfig-6.1.12-13.el6.x86_64 -2014-09-26T14:10:22.054705+01:00 info: Installing nailgun-net-check-0.2-3.x86_64 -2014-09-26T14:10:22.055024+01:00 info: Installing yum-utils-1.1.30-17.el6_5.noarch -2014-09-26T14:10:22.556274+01:00 info: Installing python-tasklib-0.1.0-1.x86_64 -2014-09-26T14:10:22.556274+01:00 info: Installing vim-enhanced-7.2.411-1.8.el6.x86_64 -2014-09-26T14:10:22.556806+01:00 info: Installing grub-0.97-83.el6.x86_64 -2014-09-26T14:10:23.058334+01:00 info: Installing nmap-ncat-6.40-3.el6.x86_64 -2014-09-26T14:10:23.058334+01:00 info: Installing bind-utils-9.8.2-0.23.rc1.el6_5.1.x86_64 -2014-09-26T14:10:23.058593+01:00 info: Installing wget-1.12-1.11.el6_5.x86_64 -2014-09-26T14:10:23.559871+01:00 info: Installing passwd-0.77-4.el6_2.2.x86_64 -2014-09-26T14:10:23.559946+01:00 info: Installing sudo-1.8.6p3-12.el6.x86_64 -2014-09-26T14:10:23.560138+01:00 info: Installing audit-2.2-4.el6_5.x86_64 -2014-09-26T14:10:24.061438+01:00 info: Installing gcc-4.4.7-4.el6.x86_64 -2014-09-26T14:10:25.564407+01:00 info: Installing e2fsprogs-1.41.12-18.el6.x86_64 -2014-09-26T14:10:26.065636+01:00 info: Installing gdisk-0.8.4-1.el6.x86_64 -2014-09-26T14:10:26.065834+01:00 info: Installing efibootmgr-0.5.4-11.el6.x86_64 -2014-09-26T14:10:26.066098+01:00 info: Installing mlocate-0.22.2-4.el6.x86_64 -2014-09-26T14:10:26.066435+01:00 info: Installing kernel-devel-2.6.32-431.20.3.el6.x86_64 -2014-09-26T14:10:39.103864+01:00 info: Installing rsync-3.0.6-9.el6_4.1.x86_64 -2014-09-26T14:10:39.103864+01:00 info: Installing acl-2.2.49-6.el6.x86_64 -2014-09-26T14:10:39.104364+01:00 info: Installing attr-2.4.44-7.el6.x86_64 -2014-09-26T14:10:39.104609+01:00 info: Installing telnet-0.17-47.el6_3.1.x86_64 -2014-09-26T14:10:39.104814+01:00 info: Installing daemonize-1.7.3-1.el6.x86_64 -2014-09-26T14:10:39.105021+01:00 info: Installing iwl1000-firmware-39.31.5.1-35.gitdec41bce.mira1.noarch -2014-09-26T14:10:39.105309+01:00 info: Installing iwl5000-firmware-8.83.5.1_1-35.gitdec41bce.mira1.noarch -2014-09-26T14:10:39.105569+01:00 info: Installing ivtv-firmware-20080701-20.2.noarch -2014-09-26T14:10:39.105774+01:00 info: Installing libertas-usb8388-firmware-20140317-35.gitdec41bce.mira1.noarch -2014-09-26T14:10:39.105952+01:00 info: Installing xorg-x11-drv-ati-firmware-20140317-35.gitdec41bce.mira1.noarch -2014-09-26T14:10:39.607162+01:00 info: Installing iwl6000-firmware-9.221.4.1-35.gitdec41bce.mira1.noarch -2014-09-26T14:10:39.607309+01:00 info: Installing atmel-firmware-1.3-7.el6.noarch -2014-09-26T14:10:39.607440+01:00 info: Installing zd1211-firmware-1.4-4.el6.noarch -2014-09-26T14:10:39.607579+01:00 info: Installing iwl4965-firmware-228.61.2.24-35.gitdec41bce.mira1.noarch -2014-09-26T14:10:39.607757+01:00 info: Installing iwl3945-firmware-15.32.2.9-35.gitdec41bce.mira1.noarch -2014-09-26T14:10:39.607913+01:00 info: Installing iwl6000g2a-firmware-17.168.5.3-35.gitdec41bce.mira1.noarch -2014-09-26T14:10:39.608029+01:00 info: Installing iwl6050-firmware-41.28.5.1-35.gitdec41bce.mira1.noarch -2014-09-26T14:10:39.608153+01:00 info: Installing iwl100-firmware-39.31.5.1-35.gitdec41bce.mira1.noarch -2014-09-26T14:10:40.109525+01:00 info: Installing iwl5150-firmware-8.24.2.2-35.gitdec41bce.mira1.noarch -2014-09-26T14:10:40.109525+01:00 info: Installing ipw2100-firmware-1.3-11.el6.noarch -2014-09-26T14:10:40.109749+01:00 info: Installing ipw2200-firmware-3.1-4.el6.noarch -2014-09-26T14:10:40.109952+01:00 info: Installing rootfiles-8.1-6.1.el6.noarch -2014-09-26T14:10:40.110126+01:00 info: Installing ql2400-firmware-20140317-35.gitdec41bce.mira1.noarch -2014-09-26T14:10:40.110331+01:00 info: Installing ql2100-firmware-20140317-35.gitdec41bce.mira1.noarch -2014-09-26T14:10:40.110455+01:00 info: Installing ql2200-firmware-20140317-35.gitdec41bce.mira1.noarch -2014-09-26T14:10:40.110561+01:00 info: Installing ql2500-firmware-20140317-35.gitdec41bce.mira1.noarch -2014-09-26T14:10:40.110695+01:00 info: Installing ql23xx-firmware-20140317-35.gitdec41bce.mira1.noarch -2014-09-26T14:11:35.710737+01:00 info: leaving (1) step installpackages -2014-09-26T14:11:35.710737+01:00 info: moving (1) to step postinstallconfig -2014-09-26T14:11:35.711184+01:00 debug: postinstallconfig is a direct step -2014-09-26T14:11:35.711586+01:00 debug: Removing cachedir: /mnt/sysimage/var/cache/yum/anaconda-CentOS-201311272149.x86_64 -2014-09-26T14:11:35.711893+01:00 debug: Removing headers and packages from /mnt/sysimage/var/cache/yum/nailgun -2014-09-26T14:11:35.712314+01:00 info: leaving (1) step postinstallconfig -2014-09-26T14:11:35.712423+01:00 info: moving (1) to step writeconfig -2014-09-26T14:11:35.712694+01:00 debug: writeconfig is a direct step -2014-09-26T14:11:35.712975+01:00 info: Writing main configuration -2014-09-26T14:11:35.713235+01:00 warning: '/usr/sbin/authconfig' specified as full path -2014-09-26T14:11:35.713603+01:00 warning: '/usr/sbin/lokkit' specified as full path -2014-09-26T14:11:35.713908+01:00 info: *** FINISHED INSTALLING PACKAGES *** -2014-09-26T14:11:36.215452+01:00 warning: '/usr/sbin/lokkit' specified as full path -2014-09-26T14:11:36.215452+01:00 info: removing libuser.conf at /tmp/libuser.48f7tY -2014-09-26T14:11:36.215822+01:00 info: created new libuser.conf at /tmp/libuser.48f7tY with instPath="/mnt/sysimage" -2014-09-26T14:11:36.216120+01:00 info: leaving (1) step writeconfig -2014-09-26T14:11:36.216361+01:00 info: moving (1) to step firstboot -2014-09-26T14:11:36.216583+01:00 debug: firstboot is a direct step -2014-09-26T14:11:36.216822+01:00 info: leaving (1) step firstboot -2014-09-26T14:11:36.217137+01:00 info: moving (1) to step instbootloader -2014-09-26T14:11:36.217399+01:00 debug: instbootloader is a direct step -2014-09-26T14:11:36.217607+01:00 warning: '/sbin/grub-install' specified as full path -2014-09-26T14:11:36.217835+01:00 warning: '/sbin/grub' specified as full path -2014-09-26T14:11:36.768175+01:00 info: leaving (1) step instbootloader -2014-09-26T14:11:36.768175+01:00 info: moving (1) to step reipl -2014-09-26T14:11:36.768462+01:00 debug: reipl is a direct step -2014-09-26T14:11:36.768675+01:00 info: leaving (1) step reipl -2014-09-26T14:11:36.768865+01:00 info: moving (1) to step writeksconfig -2014-09-26T14:11:36.769093+01:00 debug: writeksconfig is a direct step -2014-09-26T14:11:36.769262+01:00 info: Writing autokickstart file -2014-09-26T14:11:36.769431+01:00 info: leaving (1) step writeksconfig -2014-09-26T14:11:36.769674+01:00 info: moving (1) to step setfilecon -2014-09-26T14:11:36.769857+01:00 debug: setfilecon is a direct step -2014-09-26T14:11:36.770023+01:00 info: setting SELinux contexts for anaconda created files -2014-09-26T14:11:39.274964+01:00 info: leaving (1) step setfilecon -2014-09-26T14:11:39.275341+01:00 info: moving (1) to step copylogs -2014-09-26T14:11:39.275735+01:00 debug: copylogs is a direct step -2014-09-26T14:11:39.276147+01:00 info: Copying anaconda logs -2014-09-26T14:11:39.276494+01:00 info: leaving (1) step copylogs -2014-09-26T14:11:39.276786+01:00 info: moving (1) to step methodcomplete -2014-09-26T14:11:39.277084+01:00 debug: methodcomplete is a direct step -2014-09-26T14:11:39.277347+01:00 info: leaving (1) step methodcomplete -2014-09-26T14:11:39.277620+01:00 info: moving (1) to step postscripts -2014-09-26T14:11:39.277940+01:00 debug: postscripts is a direct step -2014-09-26T14:11:39.278261+01:00 info: Running kickstart %%post script(s) -2014-09-26T14:11:39.278495+01:00 warning: '/bin/sh' specified as full path -2014-09-26T14:11:39.785947+01:00 warning: '/bin/sh' specified as full path -2014-09-26T14:11:48.802957+01:00 info: All kickstart %%post script(s) have been run -2014-09-26T14:11:48.802957+01:00 info: leaving (1) step postscripts -2014-09-26T14:11:48.803282+01:00 info: moving (1) to step dopostaction -2014-09-26T14:11:48.803508+01:00 debug: dopostaction is a direct step -2014-09-26T14:11:48.803745+01:00 info: leaving (1) step dopostaction diff --git a/spec/example-logs/fuel-agent-env-1.log_ b/spec/example-logs/fuel-agent-env-1.log_ deleted file mode 100644 index 4780c988..00000000 --- a/spec/example-logs/fuel-agent-env-1.log_ +++ /dev/null @@ -1,2888 +0,0 @@ -2015-04-21 09:49:05.289 656 DEBUG fuel_agent.cmd.agent [-] Input data: {u'image_data': {u'/boot': {u'container': u'gzip', u'uri': u'http://10.20.0.2:8080/targetimages/env_1_ubuntu_1404_amd64-boot.img.gz', u'format': u'ext2'}, u'/': {u'container': u'gzip', u'uri': u'http://10.20.0.2:8080/targetimages/env_1_ubuntu_1404_amd64.img.gz', u'format': u'ext4'}}, u'output': u'/var/www/nailgun/targetimages', u'repos': [{u'name': u'ubuntu', u'section': u'main universe multiverse', u'uri': u'http://archive.ubuntu.com/ubuntu/', u'priority': None, u'suite': u'trusty', u'type': u'deb'}, {u'name': u'ubuntu-updates', u'section': u'main universe multiverse', u'uri': u'http://archive.ubuntu.com/ubuntu/', u'priority': None, u'suite': u'trusty-updates', u'type': u'deb'}, {u'name': u'ubuntu-security', u'section': u'main universe multiverse', u'uri': u'http://archive.ubuntu.com/ubuntu/', u'priority': None, u'suite': u'trusty-security', u'type': u'deb'}, {u'name': u'mos', u'section': u'main restricted', u'uri': u'http://10.20.0.2:8080/2014.2-6.1/ubuntu/x86_64', u'priority': 1050, u'suite': u'mos6.1', u'type': u'deb'}, {u'name': u'mos-updates', u'section': u'main restricted', u'uri': u'http://mirror.fuel-infra.org/mos/ubuntu/', u'priority': 1050, u'suite': u'mos6.1-updates', u'type': u'deb'}, {u'name': u'mos-security', u'section': u'main restricted', u'uri': u'http://mirror.fuel-infra.org/mos/ubuntu/', u'priority': 1050, u'suite': u'mos6.1-security', u'type': u'deb'}, {u'name': u'mos-holdback', u'section': u'main restricted', u'uri': u'http://mirror.fuel-infra.org/mos/ubuntu/', u'priority': 1100, u'suite': u'mos6.1-holdback', u'type': u'deb'}, {u'name': u'Auxiliary', u'section': u'main restricted', u'uri': u'http://10.20.0.2:8080/2014.2-6.1/ubuntu/auxiliary', u'priority': 1050, u'suite': u'auxiliary', u'type': u'deb'}], u'codename': u'trusty'} -2015-04-21 09:49:05.289 656 DEBUG fuel_agent.utils.utils [-] Trying to get driver: fuel_agent.drivers.nailgun_build_image -2015-04-21 09:49:05.329 656 DEBUG stevedore.extension [-] found extension EntryPoint.parse('nailgun = fuel_agent.drivers.nailgun:Nailgun') -2015-04-21 09:49:05.329 656 DEBUG stevedore.extension [-] found extension EntryPoint.parse('nailgun_build_image = fuel_agent.drivers.nailgun:NailgunBuildImage') -2015-04-21 09:49:05.374 656 DEBUG fuel_agent.utils.utils [-] Found driver: NailgunBuildImage -2015-04-21 09:49:05.375 656 INFO fuel_agent.manager [-] --- Building image (do_build_image) --- -2015-04-21 09:49:05.375 656 INFO fuel_agent.manager [-] *** Checking if image exists *** -2015-04-21 09:49:05.381 656 DEBUG fuel_agent.manager [-] At least one of the necessary images is unavailable. Starting build process. -2015-04-21 09:49:05.382 656 INFO fuel_agent.manager [-] *** Preparing image space *** -2015-04-21 09:49:05.382 656 DEBUG fuel_agent.manager [-] Creating temporary sparsed file for the image: file:///var/www/nailgun/targetimages/env_1_ubuntu_1404_amd64-boot.img.gz -2015-04-21 09:49:05.384 656 DEBUG fuel_agent.utils.utils [-] Trying to execute command: truncate -s 2048M /tmp/tmpqn61pJ.fuel-agent-image -2015-04-21 09:49:05.392 656 DEBUG fuel_agent.manager [-] Temporary file: /tmp/tmpqn61pJ.fuel-agent-image -2015-04-21 09:49:05.393 656 DEBUG fuel_agent.manager [-] Looking for a free loop device -2015-04-21 09:49:05.393 656 DEBUG fuel_agent.utils.utils [-] Trying to execute command: losetup --find -2015-04-21 09:49:05.400 656 DEBUG fuel_agent.manager [-] Attaching temporary image file to free loop device -2015-04-21 09:49:05.401 656 DEBUG fuel_agent.utils.utils [-] Trying to execute command: losetup /dev/loop2 /tmp/tmpqn61pJ.fuel-agent-image -2015-04-21 09:49:05.407 656 DEBUG fuel_agent.manager [-] Creating file system on the image -2015-04-21 09:49:05.408 656 DEBUG fuel_agent.utils.utils [-] Trying to execute command: mkfs.ext2 /dev/loop2 -2015-04-21 09:49:05.841 656 DEBUG fuel_agent.manager [-] Creating temporary sparsed file for the image: file:///var/www/nailgun/targetimages/env_1_ubuntu_1404_amd64.img.gz -2015-04-21 09:49:05.842 656 DEBUG fuel_agent.utils.utils [-] Trying to execute command: truncate -s 2048M /tmp/tmpjUWDCE.fuel-agent-image -2015-04-21 09:49:05.852 656 DEBUG fuel_agent.manager [-] Temporary file: /tmp/tmpjUWDCE.fuel-agent-image -2015-04-21 09:49:05.854 656 DEBUG fuel_agent.manager [-] Looking for a free loop device -2015-04-21 09:49:05.854 656 DEBUG fuel_agent.utils.utils [-] Trying to execute command: losetup --find -2015-04-21 09:49:05.862 656 DEBUG fuel_agent.manager [-] Attaching temporary image file to free loop device -2015-04-21 09:49:05.863 656 DEBUG fuel_agent.utils.utils [-] Trying to execute command: losetup /dev/loop3 /tmp/tmpjUWDCE.fuel-agent-image -2015-04-21 09:49:05.869 656 DEBUG fuel_agent.manager [-] Creating file system on the image -2015-04-21 09:49:05.870 656 DEBUG fuel_agent.utils.utils [-] Trying to execute command: mkfs.ext4 /dev/loop3 -2015-04-21 09:49:06.775 656 DEBUG fuel_agent.manager [-] Creating temporary chroot directory -2015-04-21 09:49:06.778 656 DEBUG fuel_agent.manager [-] Temporary chroot: /tmp/tmpUm1u7N.fuel-agent-image -2015-04-21 09:49:06.778 656 DEBUG fuel_agent.manager [-] Mounting target file systems -2015-04-21 09:49:06.780 656 DEBUG fuel_agent.utils.utils [-] Trying to execute command: mount -t ext4 /dev/loop3 /tmp/tmpUm1u7N.fuel-agent-image/ -2015-04-21 09:49:06.801 656 DEBUG fuel_agent.utils.utils [-] Trying to execute command: mount -t ext2 /dev/loop2 /tmp/tmpUm1u7N.fuel-agent-image/boot -2015-04-21 09:49:06.840 656 INFO fuel_agent.manager [-] *** Shipping image content *** -2015-04-21 09:49:06.840 656 DEBUG fuel_agent.manager [-] Installing operating system into image -2015-04-21 09:49:06.841 656 DEBUG fuel_agent.manager [-] Preventing services from being get started -2015-04-21 09:49:06.841 656 DEBUG fuel_agent.manager [-] Installing base operating system using debootstrap -2015-04-21 09:49:06.842 656 DEBUG fuel_agent.utils.utils [-] Trying to execute command: debootstrap --verbose --no-check-gpg --arch=amd64 trusty /tmp/tmpUm1u7N.fuel-agent-image http://archive.ubuntu.com/ubuntu/ -2015-04-21 09:58:46.537 656 DEBUG fuel_agent.utils.build_utils [-] Running deboostrap completed. -stdout: I: Retrieving Release -I: Retrieving Packages -I: Validating Packages -I: Resolving dependencies of required packages... -I: Resolving dependencies of base packages... -I: Checking component main on http://archive.ubuntu.com/ubuntu... -I: Retrieving adduser 3.113+nmu3ubuntu3 -I: Validating adduser 3.113+nmu3ubuntu3 -I: Retrieving apt 1.0.1ubuntu2 -I: Validating apt 1.0.1ubuntu2 -I: Retrieving apt-utils 1.0.1ubuntu2 -I: Validating apt-utils 1.0.1ubuntu2 -I: Retrieving base-files 7.2ubuntu5 -I: Validating base-files 7.2ubuntu5 -I: Retrieving base-passwd 3.5.33 -I: Validating base-passwd 3.5.33 -I: Retrieving bash 4.3-6ubuntu1 -I: Validating bash 4.3-6ubuntu1 -I: Retrieving bsdutils 1:2.20.1-5.1ubuntu20 -I: Validating bsdutils 1:2.20.1-5.1ubuntu20 -I: Retrieving busybox-initramfs 1:1.21.0-1ubuntu1 -I: Validating busybox-initramfs 1:1.21.0-1ubuntu1 -I: Retrieving bzip2 1.0.6-5 -I: Validating bzip2 1.0.6-5 -I: Retrieving console-setup 1.70ubuntu8 -I: Validating console-setup 1.70ubuntu8 -I: Retrieving coreutils 8.21-1ubuntu5 -I: Validating coreutils 8.21-1ubuntu5 -I: Retrieving cpio 2.11+dfsg-1ubuntu1 -I: Validating cpio 2.11+dfsg-1ubuntu1 -I: Retrieving cron 3.0pl1-124ubuntu2 -I: Validating cron 3.0pl1-124ubuntu2 -I: Retrieving dash 0.5.7-4ubuntu1 -I: Validating dash 0.5.7-4ubuntu1 -I: Retrieving debconf 1.5.51ubuntu2 -I: Validating debconf 1.5.51ubuntu2 -I: Retrieving debconf-i18n 1.5.51ubuntu2 -I: Validating debconf-i18n 1.5.51ubuntu2 -I: Retrieving debianutils 4.4 -I: Validating debianutils 4.4 -I: Retrieving dh-python 1.20140128-1ubuntu8 -I: Validating dh-python 1.20140128-1ubuntu8 -I: Retrieving diffutils 1:3.3-1 -I: Validating diffutils 1:3.3-1 -I: Retrieving dmsetup 2:1.02.77-6ubuntu2 -I: Validating dmsetup 2:1.02.77-6ubuntu2 -I: Retrieving dpkg 1.17.5ubuntu5 -I: Validating dpkg 1.17.5ubuntu5 -I: Retrieving e2fslibs 1.42.9-3ubuntu1 -I: Validating e2fslibs 1.42.9-3ubuntu1 -I: Retrieving e2fsprogs 1.42.9-3ubuntu1 -I: Validating e2fsprogs 1.42.9-3ubuntu1 -I: Retrieving eject 2.1.5+deb1+cvs20081104-13.1 -I: Validating eject 2.1.5+deb1+cvs20081104-13.1 -I: Retrieving file 1:5.14-2ubuntu3 -I: Validating file 1:5.14-2ubuntu3 -I: Retrieving findutils 4.4.2-7 -I: Validating findutils 4.4.2-7 -I: Retrieving gcc-4.8-base 4.8.2-19ubuntu1 -I: Validating gcc-4.8-base 4.8.2-19ubuntu1 -I: Retrieving gcc-4.9-base 4.9-20140406-0ubuntu1 -I: Validating gcc-4.9-base 4.9-20140406-0ubuntu1 -I: Retrieving gnupg 1.4.16-1ubuntu2 -I: Validating gnupg 1.4.16-1ubuntu2 -I: Retrieving gpgv 1.4.16-1ubuntu2 -I: Validating gpgv 1.4.16-1ubuntu2 -I: Retrieving grep 2.16-1 -I: Validating grep 2.16-1 -I: Retrieving gzip 1.6-3ubuntu1 -I: Validating gzip 1.6-3ubuntu1 -I: Retrieving hostname 3.15ubuntu1 -I: Validating hostname 3.15ubuntu1 -I: Retrieving ifupdown 0.7.47.2ubuntu4 -I: Validating ifupdown 0.7.47.2ubuntu4 -I: Retrieving init-system-helpers 1.14 -I: Validating init-system-helpers 1.14 -I: Retrieving initramfs-tools 0.103ubuntu4 -I: Validating initramfs-tools 0.103ubuntu4 -I: Retrieving initramfs-tools-bin 0.103ubuntu4 -I: Validating initramfs-tools-bin 0.103ubuntu4 -I: Retrieving initscripts 2.88dsf-41ubuntu6 -I: Validating initscripts 2.88dsf-41ubuntu6 -I: Retrieving insserv 1.14.0-5ubuntu2 -I: Validating insserv 1.14.0-5ubuntu2 -I: Retrieving iproute2 3.12.0-2 -I: Validating iproute2 3.12.0-2 -I: Retrieving iputils-ping 3:20121221-4ubuntu1 -I: Validating iputils-ping 3:20121221-4ubuntu1 -I: Retrieving isc-dhcp-client 4.2.4-7ubuntu12 -I: Validating isc-dhcp-client 4.2.4-7ubuntu12 -I: Retrieving isc-dhcp-common 4.2.4-7ubuntu12 -I: Validating isc-dhcp-common 4.2.4-7ubuntu12 -I: Retrieving kbd 1.15.5-1ubuntu1 -I: Validating kbd 1.15.5-1ubuntu1 -I: Retrieving keyboard-configuration 1.70ubuntu8 -I: Validating keyboard-configuration 1.70ubuntu8 -I: Retrieving klibc-utils 2.0.3-0ubuntu1 -I: Validating klibc-utils 2.0.3-0ubuntu1 -I: Retrieving kmod 15-0ubuntu6 -I: Validating kmod 15-0ubuntu6 -I: Retrieving less 458-2 -I: Validating less 458-2 -I: Retrieving libacl1 2.2.52-1 -I: Validating libacl1 2.2.52-1 -I: Retrieving libapt-inst1.5 1.0.1ubuntu2 -I: Validating libapt-inst1.5 1.0.1ubuntu2 -I: Retrieving libapt-pkg4.12 1.0.1ubuntu2 -I: Validating libapt-pkg4.12 1.0.1ubuntu2 -I: Retrieving libarchive-extract-perl 0.70-1 -I: Validating libarchive-extract-perl 0.70-1 -I: Retrieving libattr1 1:2.4.47-1ubuntu1 -I: Validating libattr1 1:2.4.47-1ubuntu1 -I: Retrieving libaudit-common 1:2.3.2-2ubuntu1 -I: Validating libaudit-common 1:2.3.2-2ubuntu1 -I: Retrieving libaudit1 1:2.3.2-2ubuntu1 -I: Validating libaudit1 1:2.3.2-2ubuntu1 -I: Retrieving libblkid1 2.20.1-5.1ubuntu20 -I: Validating libblkid1 2.20.1-5.1ubuntu20 -I: Retrieving libbsd0 0.6.0-2ubuntu1 -I: Validating libbsd0 0.6.0-2ubuntu1 -I: Retrieving libbz2-1.0 1.0.6-5 -I: Validating libbz2-1.0 1.0.6-5 -I: Retrieving libc-bin 2.19-0ubuntu6 -I: Validating libc-bin 2.19-0ubuntu6 -I: Retrieving libc6 2.19-0ubuntu6 -I: Validating libc6 2.19-0ubuntu6 -I: Retrieving libcap2 1:2.24-0ubuntu2 -I: Validating libcap2 1:2.24-0ubuntu2 -I: Retrieving libcap2-bin 1:2.24-0ubuntu2 -I: Validating libcap2-bin 1:2.24-0ubuntu2 -I: Retrieving libcgmanager0 0.24-0ubuntu5 -I: Validating libcgmanager0 0.24-0ubuntu5 -I: Retrieving libcomerr2 1.42.9-3ubuntu1 -I: Validating libcomerr2 1.42.9-3ubuntu1 -I: Retrieving libdb5.3 5.3.28-3ubuntu3 -I: Validating libdb5.3 5.3.28-3ubuntu3 -I: Retrieving libdbus-1-3 1.6.18-0ubuntu4 -I: Validating libdbus-1-3 1.6.18-0ubuntu4 -I: Retrieving libdebconfclient0 0.187ubuntu1 -I: Validating libdebconfclient0 0.187ubuntu1 -I: Retrieving libdevmapper1.02.1 2:1.02.77-6ubuntu2 -I: Validating libdevmapper1.02.1 2:1.02.77-6ubuntu2 -I: Retrieving libdrm2 2.4.52-1 -I: Validating libdrm2 2.4.52-1 -I: Retrieving libestr0 0.1.9-0ubuntu2 -I: Validating libestr0 0.1.9-0ubuntu2 -I: Retrieving libexpat1 2.1.0-4ubuntu1 -I: Validating libexpat1 2.1.0-4ubuntu1 -I: Retrieving libffi6 3.1~rc1+r3.0.13-12 -I: Validating libffi6 3.1~rc1+r3.0.13-12 -I: Retrieving libfribidi0 0.19.6-1 -I: Validating libfribidi0 0.19.6-1 -I: Retrieving libgcc1 1:4.9-20140406-0ubuntu1 -I: Validating libgcc1 1:4.9-20140406-0ubuntu1 -I: Retrieving libgcrypt11 1.5.3-2ubuntu4 -I: Validating libgcrypt11 1.5.3-2ubuntu4 -I: Retrieving libgdbm3 1.8.3-12build1 -I: Validating libgdbm3 1.8.3-12build1 -I: Retrieving libgnutls-openssl27 2.12.23-12ubuntu2 -I: Validating libgnutls-openssl27 2.12.23-12ubuntu2 -I: Retrieving libgnutls26 2.12.23-12ubuntu2 -I: Validating libgnutls26 2.12.23-12ubuntu2 -I: Retrieving libgpg-error0 1.12-0.2ubuntu1 -I: Validating libgpg-error0 1.12-0.2ubuntu1 -I: Retrieving libjson-c2 0.11-3ubuntu1 -I: Validating libjson-c2 0.11-3ubuntu1 -I: Retrieving libjson0 0.11-3ubuntu1 -I: Validating libjson0 0.11-3ubuntu1 -I: Retrieving libklibc 2.0.3-0ubuntu1 -I: Validating libklibc 2.0.3-0ubuntu1 -I: Retrieving libkmod2 15-0ubuntu6 -I: Validating libkmod2 15-0ubuntu6 -I: Retrieving liblocale-gettext-perl 1.05-7build3 -I: Validating liblocale-gettext-perl 1.05-7build3 -I: Retrieving liblockfile-bin 1.09-6ubuntu1 -I: Validating liblockfile-bin 1.09-6ubuntu1 -I: Retrieving liblockfile1 1.09-6ubuntu1 -I: Validating liblockfile1 1.09-6ubuntu1 -I: Retrieving liblog-message-simple-perl 0.10-1 -I: Validating liblog-message-simple-perl 0.10-1 -I: Retrieving liblzma5 5.1.1alpha+20120614-2ubuntu2 -I: Validating liblzma5 5.1.1alpha+20120614-2ubuntu2 -I: Retrieving libmagic1 1:5.14-2ubuntu3 -I: Validating libmagic1 1:5.14-2ubuntu3 -I: Retrieving libmodule-pluggable-perl 5.1-1 -I: Validating libmodule-pluggable-perl 5.1-1 -I: Retrieving libmount1 2.20.1-5.1ubuntu20 -I: Validating libmount1 2.20.1-5.1ubuntu20 -I: Retrieving libmpdec2 2.4.0-6 -I: Validating libmpdec2 2.4.0-6 -I: Retrieving libncurses5 5.9+20140118-1ubuntu1 -I: Validating libncurses5 5.9+20140118-1ubuntu1 -I: Retrieving libncursesw5 5.9+20140118-1ubuntu1 -I: Validating libncursesw5 5.9+20140118-1ubuntu1 -I: Retrieving libnewt0.52 0.52.15-2ubuntu5 -I: Validating libnewt0.52 0.52.15-2ubuntu5 -I: Retrieving libnih-dbus1 1.0.3-4ubuntu25 -I: Validating libnih-dbus1 1.0.3-4ubuntu25 -I: Retrieving libnih1 1.0.3-4ubuntu25 -I: Validating libnih1 1.0.3-4ubuntu25 -I: Retrieving libp11-kit0 0.20.2-2ubuntu2 -I: Validating libp11-kit0 0.20.2-2ubuntu2 -I: Retrieving libpam-cap 1:2.24-0ubuntu2 -I: Validating libpam-cap 1:2.24-0ubuntu2 -I: Retrieving libpam-modules 1.1.8-1ubuntu2 -I: Validating libpam-modules 1.1.8-1ubuntu2 -I: Retrieving libpam-modules-bin 1.1.8-1ubuntu2 -I: Validating libpam-modules-bin 1.1.8-1ubuntu2 -I: Retrieving libpam-runtime 1.1.8-1ubuntu2 -I: Validating libpam-runtime 1.1.8-1ubuntu2 -I: Retrieving libpam0g 1.1.8-1ubuntu2 -I: Validating libpam0g 1.1.8-1ubuntu2 -I: Retrieving libpcre3 1:8.31-2ubuntu2 -I: Validating libpcre3 1:8.31-2ubuntu2 -I: Retrieving libplymouth2 0.8.8-0ubuntu17 -I: Validating libplymouth2 0.8.8-0ubuntu17 -I: Retrieving libpng12-0 1.2.50-1ubuntu2 -I: Validating libpng12-0 1.2.50-1ubuntu2 -I: Retrieving libpod-latex-perl 0.61-1 -I: Validating libpod-latex-perl 0.61-1 -I: Retrieving libpopt0 1.16-8ubuntu1 -I: Validating libpopt0 1.16-8ubuntu1 -I: Retrieving libprocps3 1:3.3.9-1ubuntu2 -I: Validating libprocps3 1:3.3.9-1ubuntu2 -I: Retrieving libpython3-stdlib 3.4.0-0ubuntu2 -I: Validating libpython3-stdlib 3.4.0-0ubuntu2 -I: Retrieving libpython3.4-minimal 3.4.0-2ubuntu1 -I: Validating libpython3.4-minimal 3.4.0-2ubuntu1 -I: Retrieving libpython3.4-stdlib 3.4.0-2ubuntu1 -I: Validating libpython3.4-stdlib 3.4.0-2ubuntu1 -I: Retrieving libreadline6 6.3-4ubuntu2 -I: Validating libreadline6 6.3-4ubuntu2 -I: Retrieving libselinux1 2.2.2-1 -I: Validating libselinux1 2.2.2-1 -I: Retrieving libsemanage-common 2.2-1 -I: Validating libsemanage-common 2.2-1 -I: Retrieving libsemanage1 2.2-1 -I: Validating libsemanage1 2.2-1 -I: Retrieving libsepol1 2.2-1 -I: Validating libsepol1 2.2-1 -I: Retrieving libslang2 2.2.4-15ubuntu1 -I: Validating libslang2 2.2.4-15ubuntu1 -I: Retrieving libsqlite3-0 3.8.2-1ubuntu2 -I: Validating libsqlite3-0 3.8.2-1ubuntu2 -I: Retrieving libss2 1.42.9-3ubuntu1 -I: Validating libss2 1.42.9-3ubuntu1 -I: Retrieving libssl1.0.0 1.0.1f-1ubuntu2 -I: Validating libssl1.0.0 1.0.1f-1ubuntu2 -I: Retrieving libstdc++6 4.8.2-19ubuntu1 -I: Validating libstdc++6 4.8.2-19ubuntu1 -I: Retrieving libtasn1-6 3.4-3 -I: Validating libtasn1-6 3.4-3 -I: Retrieving libterm-ui-perl 0.42-1 -I: Validating libterm-ui-perl 0.42-1 -I: Retrieving libtext-charwidth-perl 0.04-7build3 -I: Validating libtext-charwidth-perl 0.04-7build3 -I: Retrieving libtext-iconv-perl 1.7-5build2 -I: Validating libtext-iconv-perl 1.7-5build2 -I: Retrieving libtext-soundex-perl 3.4-1build1 -I: Validating libtext-soundex-perl 3.4-1build1 -I: Retrieving libtext-wrapi18n-perl 0.06-7 -I: Validating libtext-wrapi18n-perl 0.06-7 -I: Retrieving libtinfo5 5.9+20140118-1ubuntu1 -I: Validating libtinfo5 5.9+20140118-1ubuntu1 -I: Retrieving libudev1 204-5ubuntu20 -I: Validating libudev1 204-5ubuntu20 -I: Retrieving libusb-0.1-4 2:0.1.12-23.3ubuntu1 -I: Validating libusb-0.1-4 2:0.1.12-23.3ubuntu1 -I: Retrieving libustr-1.0-1 1.0.4-3ubuntu2 -I: Validating libustr-1.0-1 1.0.4-3ubuntu2 -I: Retrieving libuuid1 2.20.1-5.1ubuntu20 -I: Validating libuuid1 2.20.1-5.1ubuntu20 -I: Retrieving locales 2.13+git20120306-12 -I: Validating locales 2.13+git20120306-12 -I: Retrieving lockfile-progs 0.1.17 -I: Validating lockfile-progs 0.1.17 -I: Retrieving login 1:4.1.5.1-1ubuntu9 -I: Validating login 1:4.1.5.1-1ubuntu9 -I: Retrieving logrotate 3.8.7-1ubuntu1 -I: Validating logrotate 3.8.7-1ubuntu1 -I: Retrieving lsb-base 4.1+Debian11ubuntu6 -I: Validating lsb-base 4.1+Debian11ubuntu6 -I: Retrieving lsb-release 4.1+Debian11ubuntu6 -I: Validating lsb-release 4.1+Debian11ubuntu6 -I: Retrieving makedev 2.3.1-93ubuntu1 -I: Validating makedev 2.3.1-93ubuntu1 -I: Retrieving mawk 1.3.3-17ubuntu2 -I: Validating mawk 1.3.3-17ubuntu2 -I: Retrieving mime-support 3.54ubuntu1 -I: Validating mime-support 3.54ubuntu1 -I: Retrieving module-init-tools 15-0ubuntu6 -I: Validating module-init-tools 15-0ubuntu6 -I: Retrieving mount 2.20.1-5.1ubuntu20 -I: Validating mount 2.20.1-5.1ubuntu20 -I: Retrieving mountall 2.53 -I: Validating mountall 2.53 -I: Retrieving multiarch-support 2.19-0ubuntu6 -I: Validating multiarch-support 2.19-0ubuntu6 -I: Retrieving ncurses-base 5.9+20140118-1ubuntu1 -I: Validating ncurses-base 5.9+20140118-1ubuntu1 -I: Retrieving ncurses-bin 5.9+20140118-1ubuntu1 -I: Validating ncurses-bin 5.9+20140118-1ubuntu1 -I: Retrieving net-tools 1.60-25ubuntu2 -I: Validating net-tools 1.60-25ubuntu2 -I: Retrieving netbase 5.2 -I: Validating netbase 5.2 -I: Retrieving netcat-openbsd 1.105-7ubuntu1 -I: Validating netcat-openbsd 1.105-7ubuntu1 -I: Retrieving ntpdate 1:4.2.6.p5+dfsg-3ubuntu2 -I: Validating ntpdate 1:4.2.6.p5+dfsg-3ubuntu2 -I: Retrieving passwd 1:4.1.5.1-1ubuntu9 -I: Validating passwd 1:4.1.5.1-1ubuntu9 -I: Retrieving perl 5.18.2-2ubuntu1 -I: Validating perl 5.18.2-2ubuntu1 -I: Retrieving perl-base 5.18.2-2ubuntu1 -I: Validating perl-base 5.18.2-2ubuntu1 -I: Retrieving perl-modules 5.18.2-2ubuntu1 -I: Validating perl-modules 5.18.2-2ubuntu1 -I: Retrieving plymouth 0.8.8-0ubuntu17 -I: Validating plymouth 0.8.8-0ubuntu17 -I: Retrieving procps 1:3.3.9-1ubuntu2 -I: Validating procps 1:3.3.9-1ubuntu2 -I: Retrieving python3 3.4.0-0ubuntu2 -I: Validating python3 3.4.0-0ubuntu2 -I: Retrieving python3-minimal 3.4.0-0ubuntu2 -I: Validating python3-minimal 3.4.0-0ubuntu2 -I: Retrieving python3.4 3.4.0-2ubuntu1 -I: Validating python3.4 3.4.0-2ubuntu1 -I: Retrieving python3.4-minimal 3.4.0-2ubuntu1 -I: Validating python3.4-minimal 3.4.0-2ubuntu1 -I: Retrieving readline-common 6.3-4ubuntu2 -I: Validating readline-common 6.3-4ubuntu2 -I: Retrieving resolvconf 1.69ubuntu1 -I: Validating resolvconf 1.69ubuntu1 -I: Retrieving rsyslog 7.4.4-1ubuntu2 -I: Validating rsyslog 7.4.4-1ubuntu2 -I: Retrieving sed 4.2.2-4ubuntu1 -I: Validating sed 4.2.2-4ubuntu1 -I: Retrieving sensible-utils 0.0.9 -I: Validating sensible-utils 0.0.9 -I: Retrieving sudo 1.8.9p5-1ubuntu1 -I: Validating sudo 1.8.9p5-1ubuntu1 -I: Retrieving sysv-rc 2.88dsf-41ubuntu6 -I: Validating sysv-rc 2.88dsf-41ubuntu6 -I: Retrieving sysvinit-utils 2.88dsf-41ubuntu6 -I: Validating sysvinit-utils 2.88dsf-41ubuntu6 -I: Retrieving tar 1.27.1-1 -I: Validating tar 1.27.1-1 -I: Retrieving tzdata 2014b-1 -I: Validating tzdata 2014b-1 -I: Retrieving ubuntu-keyring 2012.05.19 -I: Validating ubuntu-keyring 2012.05.19 -I: Retrieving ubuntu-minimal 1.325 -I: Validating ubuntu-minimal 1.325 -I: Retrieving ucf 3.0027+nmu1 -I: Validating ucf 3.0027+nmu1 -I: Retrieving udev 204-5ubuntu20 -I: Validating udev 204-5ubuntu20 -I: Retrieving upstart 1.12.1-0ubuntu4 -I: Validating upstart 1.12.1-0ubuntu4 -I: Retrieving ureadahead 0.100.0-16 -I: Validating ureadahead 0.100.0-16 -I: Retrieving util-linux 2.20.1-5.1ubuntu20 -I: Validating util-linux 2.20.1-5.1ubuntu20 -I: Retrieving vim-common 2:7.4.052-1ubuntu3 -I: Validating vim-common 2:7.4.052-1ubuntu3 -I: Retrieving vim-tiny 2:7.4.052-1ubuntu3 -I: Validating vim-tiny 2:7.4.052-1ubuntu3 -I: Retrieving whiptail 0.52.15-2ubuntu5 -I: Validating whiptail 0.52.15-2ubuntu5 -I: Retrieving xkb-data 2.10.1-1ubuntu1 -I: Validating xkb-data 2.10.1-1ubuntu1 -I: Retrieving zlib1g 1:1.2.8.dfsg-1ubuntu1 -I: Validating zlib1g 1:1.2.8.dfsg-1ubuntu1 -I: Chosen extractor for .deb packages: ar -I: Extracting adduser... -I: Extracting base-files... -I: Extracting base-passwd... -I: Extracting bash... -I: Extracting bsdutils... -I: Extracting busybox-initramfs... -I: Extracting coreutils... -I: Extracting cpio... -I: Extracting dash... -I: Extracting debconf... -I: Extracting debianutils... -I: Extracting diffutils... -I: Extracting dpkg... -I: Extracting e2fslibs... -I: Extracting e2fsprogs... -I: Extracting findutils... -I: Extracting gcc-4.9-base... -I: Extracting grep... -I: Extracting gzip... -I: Extracting hostname... -I: Extracting ifupdown... -I: Extracting initramfs-tools... -I: Extracting initramfs-tools-bin... -I: Extracting initscripts... -I: Extracting insserv... -I: Extracting iproute2... -I: Extracting klibc-utils... -I: Extracting kmod... -I: Extracting libacl1... -I: Extracting libattr1... -I: Extracting libaudit-common... -I: Extracting libaudit1... -I: Extracting libblkid1... -I: Extracting libbz2-1.0... -I: Extracting libc-bin... -I: Extracting libc6... -I: Extracting libcap2... -I: Extracting libcgmanager0... -I: Extracting libcomerr2... -I: Extracting libdb5.3... -I: Extracting libdbus-1-3... -I: Extracting libdebconfclient0... -I: Extracting libdrm2... -I: Extracting libgcc1... -I: Extracting libjson-c2... -I: Extracting libjson0... -I: Extracting libklibc... -I: Extracting libkmod2... -I: Extracting liblzma5... -I: Extracting libmount1... -I: Extracting libncurses5... -I: Extracting libncursesw5... -I: Extracting libnih-dbus1... -I: Extracting libnih1... -I: Extracting libpam-modules... -I: Extracting libpam-modules-bin... -I: Extracting libpam-runtime... -I: Extracting libpam0g... -I: Extracting libpcre3... -I: Extracting libplymouth2... -I: Extracting libpng12-0... -I: Extracting libprocps3... -I: Extracting libselinux1... -I: Extracting libsemanage-common... -I: Extracting libsemanage1... -I: Extracting libsepol1... -I: Extracting libslang2... -I: Extracting libss2... -I: Extracting libtinfo5... -I: Extracting libudev1... -I: Extracting libustr-1.0-1... -I: Extracting libuuid1... -I: Extracting locales... -I: Extracting login... -I: Extracting lsb-base... -I: Extracting makedev... -I: Extracting mawk... -I: Extracting module-init-tools... -I: Extracting mount... -I: Extracting mountall... -I: Extracting multiarch-support... -I: Extracting ncurses-base... -I: Extracting ncurses-bin... -I: Extracting passwd... -I: Extracting perl-base... -I: Extracting plymouth... -I: Extracting procps... -I: Extracting sed... -I: Extracting sensible-utils... -I: Extracting sysv-rc... -I: Extracting sysvinit-utils... -I: Extracting tar... -I: Extracting tzdata... -I: Extracting udev... -I: Extracting upstart... -I: Extracting util-linux... -I: Extracting zlib1g... -I: Installing core packages... -I: Unpacking required packages... -I: Unpacking adduser... -I: Unpacking base-files... -I: Unpacking base-passwd... -I: Unpacking bash... -I: Unpacking bsdutils... -I: Unpacking busybox-initramfs... -I: Unpacking coreutils... -I: Unpacking cpio... -I: Unpacking dash... -I: Unpacking debconf... -I: Unpacking debianutils... -I: Unpacking diffutils... -I: Unpacking dpkg... -I: Unpacking e2fslibs:amd64... -I: Unpacking e2fsprogs... -I: Unpacking findutils... -I: Unpacking gcc-4.9-base:amd64... -I: Unpacking grep... -I: Unpacking gzip... -I: Unpacking hostname... -I: Unpacking ifupdown... -I: Unpacking initramfs-tools... -I: Unpacking initramfs-tools-bin... -I: Unpacking initscripts... -I: Unpacking insserv... -I: Unpacking iproute2... -I: Unpacking klibc-utils... -I: Unpacking kmod... -I: Unpacking libacl1:amd64... -I: Unpacking libattr1:amd64... -I: Unpacking libaudit-common... -I: Unpacking libaudit1:amd64... -I: Unpacking libblkid1:amd64... -I: Unpacking libbz2-1.0:amd64... -I: Unpacking libc-bin... -I: Unpacking libc6:amd64... -I: Unpacking libcap2:amd64... -I: Unpacking libcgmanager0:amd64... -I: Unpacking libcomerr2:amd64... -I: Unpacking libdb5.3:amd64... -I: Unpacking libdbus-1-3:amd64... -I: Unpacking libdebconfclient0:amd64... -I: Unpacking libdrm2:amd64... -I: Unpacking libgcc1:amd64... -I: Unpacking libjson-c2:amd64... -I: Unpacking libjson0:amd64... -I: Unpacking libklibc... -I: Unpacking libkmod2:amd64... -I: Unpacking liblzma5:amd64... -I: Unpacking libmount1:amd64... -I: Unpacking libncurses5:amd64... -I: Unpacking libncursesw5:amd64... -I: Unpacking libnih-dbus1:amd64... -I: Unpacking libnih1:amd64... -I: Unpacking libpam-modules:amd64... -I: Unpacking libpam-modules-bin... -I: Unpacking libpam-runtime... -I: Unpacking libpam0g:amd64... -I: Unpacking libpcre3:amd64... -I: Unpacking libplymouth2:amd64... -I: Unpacking libpng12-0:amd64... -I: Unpacking libprocps3:amd64... -I: Unpacking libselinux1:amd64... -I: Unpacking libsemanage-common... -I: Unpacking libsemanage1:amd64... -I: Unpacking libsepol1:amd64... -I: Unpacking libslang2:amd64... -I: Unpacking libss2:amd64... -I: Unpacking libtinfo5:amd64... -I: Unpacking libudev1:amd64... -I: Unpacking libustr-1.0-1:amd64... -I: Unpacking libuuid1:amd64... -I: Unpacking locales... -I: Unpacking login... -I: Unpacking lsb-base... -I: Unpacking makedev... -I: Unpacking mawk... -I: Unpacking module-init-tools... -I: Unpacking mount... -I: Unpacking mountall... -I: Unpacking multiarch-support... -I: Unpacking ncurses-base... -I: Unpacking ncurses-bin... -I: Unpacking passwd... -I: Unpacking perl-base... -I: Unpacking plymouth... -I: Unpacking procps... -I: Unpacking sed... -I: Unpacking sensible-utils... -I: Unpacking sysv-rc... -I: Unpacking sysvinit-utils... -I: Unpacking tar... -I: Unpacking tzdata... -I: Unpacking udev... -I: Unpacking upstart... -I: Unpacking util-linux... -I: Unpacking zlib1g:amd64... -I: Configuring required packages... -I: Configuring lsb-base... -I: Configuring ncurses-base... -I: Configuring sensible-utils... -I: Configuring libklibc... -I: Configuring gcc-4.9-base:amd64... -I: Configuring klibc-utils... -I: Configuring libsemanage-common... -I: Configuring libaudit-common... -I: Configuring libc6:amd64... -I: Configuring cpio... -I: Configuring debianutils... -I: Configuring bsdutils... -I: Configuring diffutils... -I: Configuring locales... -I: Configuring mawk... -I: Configuring hostname... -I: Configuring findutils... -I: Configuring insserv... -I: Configuring busybox-initramfs... -I: Configuring multiarch-support... -I: Configuring libcap2:amd64... -I: Configuring libustr-1.0-1:amd64... -I: Configuring libdbus-1-3:amd64... -I: Configuring libprocps3:amd64... -I: Configuring libjson-c2:amd64... -I: Configuring libdrm2:amd64... -I: Configuring libsepol1:amd64... -I: Configuring libkmod2:amd64... -I: Configuring zlib1g:amd64... -I: Configuring libgcc1:amd64... -I: Configuring libdebconfclient0:amd64... -I: Configuring base-files... -I: Configuring libattr1:amd64... -I: Configuring e2fslibs:amd64... -I: Configuring base-passwd... -I: Configuring libcomerr2:amd64... -I: Configuring libacl1:amd64... -I: Configuring libslang2:amd64... -I: Configuring libss2:amd64... -I: Configuring liblzma5:amd64... -I: Configuring libnih1:amd64... -I: Configuring libaudit1:amd64... -I: Configuring libdb5.3:amd64... -I: Configuring libpcre3:amd64... -I: Configuring libbz2-1.0:amd64... -I: Configuring libtinfo5:amd64... -I: Configuring libc-bin... -I: Configuring libjson0:amd64... -I: Configuring libnih-dbus1:amd64... -I: Configuring libselinux1:amd64... -I: Configuring libpng12-0:amd64... -I: Configuring iproute2... -I: Configuring coreutils... -I: Configuring makedev... -I: Configuring ncurses-bin... -I: Configuring libsemanage1:amd64... -I: Configuring tar... -I: Configuring libcgmanager0:amd64... -I: Configuring libncurses5:amd64... -I: Configuring libplymouth2:amd64... -I: Configuring dpkg... -I: Configuring libncursesw5:amd64... -I: Configuring sysvinit-utils... -I: Configuring dash... -I: Configuring perl-base... -I: Configuring libudev1:amd64... -I: Configuring mountall... -I: Configuring initramfs-tools-bin... -I: Configuring sed... -I: Configuring grep... -I: Configuring gzip... -I: Configuring bash... -I: Configuring debconf... -I: Configuring libpam0g:amd64... -I: Configuring sysv-rc... -I: Configuring tzdata... -I: Configuring kmod... -I: Configuring libpam-modules-bin... -I: Configuring module-init-tools... -I: Configuring libpam-modules:amd64... -I: Configuring passwd... -I: Configuring libpam-runtime... -I: Configuring login... -I: Configuring libuuid1:amd64... -I: Configuring adduser... -I: Configuring libblkid1:amd64... -I: Configuring util-linux... -I: Configuring libmount1:amd64... -I: Configuring mount... -I: Configuring initscripts... -I: Configuring e2fsprogs... -I: Configuring procps... -I: Configuring ifupdown... -I: Configuring upstart... -I: Configuring udev... -I: Configuring initramfs-tools... -I: Configuring plymouth... -I: Configuring libc-bin... -I: Configuring initramfs-tools... -I: Unpacking the base system... -I: Unpacking apt... -I: Unpacking apt-utils... -I: Unpacking bzip2... -I: Unpacking console-setup... -I: Unpacking cron... -I: Unpacking debconf-i18n... -I: Unpacking dh-python... -I: Unpacking dmsetup... -I: Unpacking eject... -I: Unpacking file... -I: Unpacking gcc-4.8-base:amd64... -I: Unpacking gnupg... -I: Unpacking gpgv... -I: Unpacking init-system-helpers... -I: Unpacking iputils-ping... -I: Unpacking isc-dhcp-client... -I: Unpacking isc-dhcp-common... -I: Unpacking kbd... -I: Unpacking keyboard-configuration... -I: Unpacking less... -I: Unpacking libapt-inst1.5:amd64... -I: Unpacking libapt-pkg4.12:amd64... -I: Unpacking libarchive-extract-perl... -I: Unpacking libbsd0:amd64... -I: Unpacking libcap2-bin... -I: Unpacking libdevmapper1.02.1:amd64... -I: Unpacking libestr0... -I: Unpacking libexpat1:amd64... -I: Unpacking libffi6:amd64... -I: Unpacking libfribidi0:amd64... -I: Unpacking libgcrypt11:amd64... -I: Unpacking libgdbm3:amd64... -I: Unpacking libgnutls-openssl27:amd64... -I: Unpacking libgnutls26:amd64... -I: Unpacking libgpg-error0:amd64... -I: Unpacking liblocale-gettext-perl... -I: Unpacking liblockfile-bin... -I: Unpacking liblockfile1:amd64... -I: Unpacking liblog-message-simple-perl... -I: Unpacking libmagic1:amd64... -I: Unpacking libmodule-pluggable-perl... -I: Unpacking libmpdec2:amd64... -I: Unpacking libnewt0.52:amd64... -I: Unpacking libp11-kit0:amd64... -I: Unpacking libpam-cap:amd64... -I: Unpacking libpod-latex-perl... -I: Unpacking libpopt0:amd64... -I: Unpacking libpython3-stdlib:amd64... -I: Unpacking libpython3.4-minimal:amd64... -I: Unpacking libpython3.4-stdlib:amd64... -I: Unpacking libreadline6:amd64... -I: Unpacking libsqlite3-0:amd64... -I: Unpacking libssl1.0.0:amd64... -I: Unpacking libstdc++6:amd64... -I: Unpacking libtasn1-6:amd64... -I: Unpacking libterm-ui-perl... -I: Unpacking libtext-charwidth-perl... -I: Unpacking libtext-iconv-perl... -I: Unpacking libtext-soundex-perl... -I: Unpacking libtext-wrapi18n-perl... -I: Unpacking libusb-0.1-4:amd64... -I: Unpacking lockfile-progs... -I: Unpacking logrotate... -I: Unpacking lsb-release... -I: Unpacking mime-support... -I: Unpacking net-tools... -I: Unpacking netbase... -I: Unpacking netcat-openbsd... -I: Unpacking ntpdate... -I: Unpacking perl... -I: Unpacking perl-modules... -I: Unpacking python3... -I: Unpacking python3-minimal... -I: Unpacking python3.4... -I: Unpacking python3.4-minimal... -I: Unpacking readline-common... -I: Unpacking resolvconf... -I: Unpacking rsyslog... -I: Unpacking sudo... -I: Unpacking ubuntu-keyring... -I: Unpacking ubuntu-minimal... -I: Unpacking ucf... -I: Unpacking ureadahead... -I: Unpacking vim-common... -I: Unpacking vim-tiny... -I: Unpacking whiptail... -I: Unpacking xkb-data... -I: Configuring the base system... -I: Configuring libpam-cap:amd64... -I: Configuring sudo... -I: Configuring gpgv... -I: Configuring libssl1.0.0:amd64... -I: Configuring libffi6:amd64... -I: Configuring libgdbm3:amd64... -I: Configuring libmpdec2:amd64... -I: Configuring isc-dhcp-common... -I: Configuring libtasn1-6:amd64... -I: Configuring libpython3.4-minimal:amd64... -I: Configuring libpopt0:amd64... -I: Configuring libusb-0.1-4:amd64... -I: Configuring libgpg-error0:amd64... -I: Configuring ucf... -I: Configuring bzip2... -I: Configuring vim-common... -I: Configuring libestr0... -I: Configuring netbase... -I: Configuring libmagic1:amd64... -I: Configuring resolvconf... -I: Configuring file... -I: Configuring libcap2-bin... -I: Configuring libfribidi0:amd64... -I: Configuring libsqlite3-0:amd64... -I: Configuring libtext-iconv-perl... -I: Configuring libexpat1:amd64... -I: Configuring liblockfile-bin... -I: Configuring libnewt0.52:amd64... -I: Configuring net-tools... -I: Configuring gcc-4.8-base:amd64... -I: Configuring ureadahead... -I: Configuring xkb-data... -I: Configuring libbsd0:amd64... -I: Configuring liblocale-gettext-perl... -I: Configuring ubuntu-keyring... -I: Configuring mime-support... -I: Configuring cron... -I: Configuring ntpdate... -I: Configuring libstdc++6:amd64... -I: Configuring isc-dhcp-client... -I: Configuring vim-tiny... -I: Configuring less... -I: Configuring libtext-charwidth-perl... -I: Configuring readline-common... -I: Configuring liblockfile1:amd64... -I: Configuring libtext-wrapi18n-perl... -I: Configuring libgcrypt11:amd64... -I: Configuring whiptail... -I: Configuring libapt-pkg4.12:amd64... -I: Configuring netcat-openbsd... -I: Configuring libapt-inst1.5:amd64... -I: Configuring libreadline6:amd64... -I: Configuring python3.4-minimal... -I: Configuring lockfile-progs... -I: Configuring gnupg... -I: Configuring debconf-i18n... -I: Configuring keyboard-configuration... -I: Configuring libgnutls26:amd64... -I: Configuring libpython3.4-stdlib:amd64... -I: Configuring apt-utils... -I: Configuring libpython3-stdlib:amd64... -I: Configuring apt... -I: Configuring python3.4... -I: Configuring libgnutls-openssl27:amd64... -I: Configuring iputils-ping... -I: Configuring ureadahead... -I: Configuring logrotate... -I: Configuring dmsetup... -I: Configuring dh-python... -I: Configuring python3... -I: Configuring perl-modules... -I: Configuring lsb-release... -I: Configuring console-setup... -I: Configuring eject... -I: Configuring perl... -I: Configuring libpod-latex-perl... -I: Configuring init-system-helpers... -I: Configuring liblog-message-simple-perl... -I: Configuring libtext-soundex-perl... -I: Configuring libarchive-extract-perl... -I: Configuring libterm-ui-perl... -I: Configuring libmodule-pluggable-perl... -I: Configuring rsyslog... -I: Configuring kbd... -I: Configuring ubuntu-minimal... -I: Configuring libc-bin... -I: Configuring initramfs-tools... -I: Base system installed successfully. - -stderr: -2015-04-21 09:58:46.560 656 DEBUG fuel_agent.manager [-] Configuring apt inside chroot -2015-04-21 09:58:46.560 656 DEBUG fuel_agent.manager [-] Setting environment variables -2015-04-21 09:58:46.561 656 DEBUG fuel_agent.manager [-] Allowing unauthenticated repos -2015-04-21 09:58:46.562 656 DEBUG fuel_agent.utils.build_utils [-] Removed file: /tmp/tmpUm1u7N.fuel-agent-image/etc/apt/sources.list -2015-04-21 09:58:46.574 656 DEBUG fuel_agent.utils.build_utils [-] Removed dir: /tmp/tmpUm1u7N.fuel-agent-image/etc/apt/preferences.d -2015-04-21 09:58:46.576 656 DEBUG fuel_agent.utils.build_utils [-] Removed dir: /tmp/tmpUm1u7N.fuel-agent-image/etc/apt/sources.list.d -2015-04-21 09:58:46.595 656 DEBUG fuel_agent.manager [-] Adding repository source: name=ubuntu, uri=http://archive.ubuntu.com/ubuntu/,suite=trusty, section=main universe multiverse -2015-04-21 09:58:46.609 656 DEBUG fuel_agent.manager [-] Adding repository preference: name=ubuntu, priority=None -2015-04-21 09:58:46.610 656 DEBUG fuel_agent.manager [-] Adding repository source: name=ubuntu-updates, uri=http://archive.ubuntu.com/ubuntu/,suite=trusty-updates, section=main universe multiverse -2015-04-21 09:58:46.611 656 DEBUG fuel_agent.manager [-] Adding repository preference: name=ubuntu-updates, priority=None -2015-04-21 09:58:46.611 656 DEBUG fuel_agent.manager [-] Adding repository source: name=ubuntu-security, uri=http://archive.ubuntu.com/ubuntu/,suite=trusty-security, section=main universe multiverse -2015-04-21 09:58:46.612 656 DEBUG fuel_agent.manager [-] Adding repository preference: name=ubuntu-security, priority=None -2015-04-21 09:58:46.613 656 DEBUG fuel_agent.manager [-] Adding repository source: name=mos, uri=http://10.20.0.2:8080/2014.2-6.1/ubuntu/x86_64,suite=mos6.1, section=main restricted -2015-04-21 09:58:46.613 656 DEBUG fuel_agent.manager [-] Adding repository preference: name=mos, priority=1050 -2015-04-21 09:58:46.614 656 DEBUG fuel_agent.manager [-] Adding repository source: name=mos-updates, uri=http://mirror.fuel-infra.org/mos/ubuntu/,suite=mos6.1-updates, section=main restricted -2015-04-21 09:58:46.614 656 DEBUG fuel_agent.manager [-] Adding repository preference: name=mos-updates, priority=1050 -2015-04-21 09:58:46.615 656 DEBUG fuel_agent.manager [-] Adding repository source: name=mos-security, uri=http://mirror.fuel-infra.org/mos/ubuntu/,suite=mos6.1-security, section=main restricted -2015-04-21 09:58:46.615 656 DEBUG fuel_agent.manager [-] Adding repository preference: name=mos-security, priority=1050 -2015-04-21 09:58:46.617 656 DEBUG fuel_agent.manager [-] Adding repository source: name=mos-holdback, uri=http://mirror.fuel-infra.org/mos/ubuntu/,suite=mos6.1-holdback, section=main restricted -2015-04-21 09:58:46.618 656 DEBUG fuel_agent.manager [-] Adding repository preference: name=mos-holdback, priority=1100 -2015-04-21 09:58:46.618 656 DEBUG fuel_agent.manager [-] Adding repository source: name=Auxiliary, uri=http://10.20.0.2:8080/2014.2-6.1/ubuntu/auxiliary,suite=auxiliary, section=main restricted -2015-04-21 09:58:46.618 656 DEBUG fuel_agent.manager [-] Adding repository preference: name=Auxiliary, priority=1050 -2015-04-21 09:58:46.619 656 DEBUG fuel_agent.manager [-] Preventing services from being get started -2015-04-21 09:58:46.619 656 DEBUG fuel_agent.utils.utils [-] Trying to execute command: mount --bind /proc /tmp/tmpUm1u7N.fuel-agent-image/proc -2015-04-21 09:58:46.677 656 DEBUG fuel_agent.manager [-] Installing packages using apt-get: acl anacron bash-completion bridge-utils bsdmainutils build-essential cloud-init curl daemonize debconf-utils gdisk grub-pc linux-firmware linux-firmware-nonfree linux-headers-generic-lts-trusty linux-image-generic-lts-trusty lvm2 mcollective mdadm nailgun-agent nailgun-mcagents nailgun-net-check ntp openssh-client openssh-server puppet python-amqp ruby-augeas ruby-ipaddress ruby-json ruby-netaddr ruby-openstack ruby-shadow ruby-stomp telnet ubuntu-minimal ubuntu-standard uuid-runtime vim virt-what vlan -2015-04-21 09:58:46.678 656 DEBUG fuel_agent.utils.utils [-] Trying to execute command: chroot /tmp/tmpUm1u7N.fuel-agent-image apt-get -y update -2015-04-21 09:59:21.819 656 DEBUG fuel_agent.utils.build_utils [-] Running apt-get update completed. -stdout: Ign http://10.20.0.2:8080 auxiliary InRelease -Ign http://10.20.0.2:8080 mos6.1 InRelease -Ign http://10.20.0.2:8080 auxiliary Release.gpg -Ign http://10.20.0.2:8080 mos6.1 Release.gpg -Get:1 http://10.20.0.2:8080 auxiliary Release [179 B] -Get:2 http://10.20.0.2:8080 mos6.1 Release [6344 B] -Get:3 http://10.20.0.2:8080 mos6.1/main amd64 Packages [68.2 kB] -Get:4 http://10.20.0.2:8080 mos6.1/restricted amd64 Packages [14 B] -Get:5 http://10.20.0.2:8080 auxiliary/main amd64 Packages -Get:6 http://10.20.0.2:8080 auxiliary/restricted amd64 Packages -Ign http://10.20.0.2:8080 auxiliary/main Translation-en -Ign http://10.20.0.2:8080 auxiliary/restricted Translation-en -Ign http://10.20.0.2:8080 mos6.1/main Translation-en -Ign http://10.20.0.2:8080 mos6.1/restricted Translation-en -Ign http://archive.ubuntu.com trusty-security InRelease -Ign http://archive.ubuntu.com trusty-updates InRelease -Ign http://archive.ubuntu.com trusty InRelease -Get:7 http://archive.ubuntu.com trusty-security Release.gpg [933 B] -Ign http://mirror.fuel-infra.org mos6.1-holdback InRelease -Get:8 http://archive.ubuntu.com trusty-updates Release.gpg [933 B] -Ign http://mirror.fuel-infra.org mos6.1-security InRelease -Get:9 http://archive.ubuntu.com trusty Release.gpg [933 B] -Get:10 http://archive.ubuntu.com trusty-security Release [63.5 kB] -Ign http://mirror.fuel-infra.org mos6.1-updates InRelease -Ign http://mirror.fuel-infra.org mos6.1-holdback Release.gpg -Ign http://mirror.fuel-infra.org mos6.1-security Release.gpg -Get:11 http://archive.ubuntu.com trusty-updates Release [63.5 kB] -Ign http://mirror.fuel-infra.org mos6.1-updates Release.gpg -Hit http://archive.ubuntu.com trusty Release -Get:12 http://mirror.fuel-infra.org mos6.1-holdback Release [6362 B] -Get:13 http://archive.ubuntu.com trusty-security/main amd64 Packages [258 kB] -Get:14 http://mirror.fuel-infra.org mos6.1-security Release [6362 B] -Get:15 http://mirror.fuel-infra.org mos6.1-updates Release [6360 B] -Get:16 http://mirror.fuel-infra.org mos6.1-holdback/main amd64 Packages [14 B] -Get:17 http://mirror.fuel-infra.org mos6.1-holdback/restricted amd64 Packages [14 B] -Get:18 http://archive.ubuntu.com trusty-security/universe amd64 Packages [95.9 kB] -Get:19 http://mirror.fuel-infra.org mos6.1-security/main amd64 Packages [14 B] -Get:20 http://mirror.fuel-infra.org mos6.1-security/restricted amd64 Packages [14 B] -Get:21 http://archive.ubuntu.com trusty-security/multiverse amd64 Packages [3451 B] -Get:22 http://archive.ubuntu.com trusty-security/main Translation-en [131 kB] -Get:23 http://mirror.fuel-infra.org mos6.1-updates/main amd64 Packages [14 B] -Get:24 http://archive.ubuntu.com trusty-security/multiverse Translation-en [1580 B] -Get:25 http://mirror.fuel-infra.org mos6.1-updates/restricted amd64 Packages [14 B] -Get:26 http://archive.ubuntu.com trusty-security/universe Translation-en [52.1 kB] -Get:27 http://archive.ubuntu.com trusty-updates/main amd64 Packages [502 kB] -Get:28 http://archive.ubuntu.com trusty-updates/universe amd64 Packages [269 kB] -Get:29 http://archive.ubuntu.com trusty-updates/multiverse amd64 Packages [11.7 kB] -Get:30 http://archive.ubuntu.com trusty-updates/main Translation-en [237 kB] -Get:31 http://archive.ubuntu.com trusty-updates/multiverse Translation-en [6076 B] -Get:32 http://archive.ubuntu.com trusty-updates/universe Translation-en [138 kB] -Hit http://archive.ubuntu.com trusty/main amd64 Packages -Get:33 http://archive.ubuntu.com trusty/universe amd64 Packages [5859 kB] -Ign http://mirror.fuel-infra.org mos6.1-holdback/main Translation-en -Ign http://mirror.fuel-infra.org mos6.1-holdback/restricted Translation-en -Ign http://mirror.fuel-infra.org mos6.1-security/main Translation-en -Ign http://mirror.fuel-infra.org mos6.1-security/restricted Translation-en -Ign http://mirror.fuel-infra.org mos6.1-updates/main Translation-en -Ign http://mirror.fuel-infra.org mos6.1-updates/restricted Translation-en -Get:34 http://archive.ubuntu.com trusty/multiverse amd64 Packages [132 kB] -Get:35 http://archive.ubuntu.com trusty/main Translation-en [762 kB] -Get:36 http://archive.ubuntu.com trusty/multiverse Translation-en [102 kB] -Get:37 http://archive.ubuntu.com trusty/universe Translation-en [4089 kB] -Fetched 12.9 MB in 32s (402 kB/s) -Reading package lists... - -stderr: -2015-04-21 09:59:21.820 656 DEBUG fuel_agent.utils.utils [-] Trying to execute command: chroot /tmp/tmpUm1u7N.fuel-agent-image apt-get -y install acl anacron bash-completion bridge-utils bsdmainutils build-essential cloud-init curl daemonize debconf-utils gdisk grub-pc linux-firmware linux-firmware-nonfree linux-headers-generic-lts-trusty linux-image-generic-lts-trusty lvm2 mcollective mdadm nailgun-agent nailgun-mcagents nailgun-net-check ntp openssh-client openssh-server puppet python-amqp ruby-augeas ruby-ipaddress ruby-json ruby-netaddr ruby-openstack ruby-shadow ruby-stomp telnet ubuntu-minimal ubuntu-standard uuid-runtime vim virt-what vlan -2015-04-21 10:14:45.331 656 DEBUG fuel_agent.utils.build_utils [-] Running apt-get install completed. -stdout: Reading package lists... -Building dependency tree... -ubuntu-minimal is already the newest version. -The following extra packages will be installed: - accountsservice apparmor apt-transport-https augeas-lenses bind9-host - binutils busybox-static ca-certificates cliff-tablib cloud-guest-utils - command-not-found command-not-found-data cpp cpp-4.8 crda dbus dmidecode - dnsutils dosfstools dpkg-dev eatmydata ed facter fakeroot friendly-recovery - ftp fuse g++ g++-4.8 gcc gcc-4.8 geoip-database gettext-base gir1.2-glib-2.0 - groff-base grub-common grub-gfxpayload-lists grub-pc-bin grub2-common hdparm - info install-info iptables iputils-tracepath irqbalance iso-codes iw - krb5-locales language-selector-common libaccountsservice0 - libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl - libapparmor-perl libapparmor1 libasan0 libasn1-8-heimdal libasprintf0c2 - libatomic1 libaugeas0 libbind9-90 libc-dev-bin libc6 libc6-dev libcap-ng0 - libck-connector0 libcloog-isl4 libcurl3 libcurl3-gnutls libdbus-glib-1-2 - libdevmapper-event1.02.1 libdns100 libdpkg-perl libedit2 libelf1 libfakeroot - libfile-fcntllock-perl libfreetype6 libfuse2 libgcc-4.8-dev libgck-1-0 - libgcr-3-common libgcr-base-3-1 libgeoip1 libgirepository-1.0-1 libglib2.0-0 - libglib2.0-data libgmp10 libgomp1 libgpm2 libgssapi-krb5-2 - libgssapi3-heimdal libhcrypto4-heimdal libheimbase1-heimdal - libheimntlm0-heimdal libhx509-5-heimdal libicu52 libidn11 libisc95 - libisccc90 libisccfg90 libisl10 libitm1 libjs-jquery libjs-sphinxdoc - libjs-underscore libk5crypto3 libkeyutils1 libkrb5-26-heimdal libkrb5-3 - libkrb5support0 libldap-2.4-2 liblwres90 libmpc3 libmpfr4 libnfnetlink0 - libnl-3-200 libnl-genl-3-200 libnuma1 libopts25 libpam-systemd - libparted0debian1 libpcap0.8 libpci3 libpipeline1 libpolkit-gobject-1-0 - libpython-stdlib libpython2.7 libpython2.7-minimal libpython2.7-stdlib - libquadmath0 libreadline5 libroken18-heimdal librtmp0 libruby1.9.1 - libsasl2-2 libsasl2-modules libsasl2-modules-db libstdc++-4.8-dev - libsystemd-daemon0 libsystemd-login0 libtimedate-perl libtsan0 libusb-1.0-0 - libwind0-heimdal libwrap0 libx11-6 libx11-data libxau6 libxcb1 libxdmcp6 - libxext6 libxml2 libxmuu1 libxtables10 libyaml-0-2 linux-headers-3.13.0-49 - linux-headers-3.13.0-49-generic linux-headers-generic - linux-image-3.13.0-49-generic linux-image-extra-3.13.0-49-generic - linux-image-generic linux-libc-dev lshw lsof ltrace make man-db manpages - manpages-dev mcollective-common mlocate mtr-tiny nano ncurses-term ntfs-3g - ohai openssh-sftp-server openssl os-prober parted patch pciutils - plymouth-theme-ubuntu-text popularity-contest postfix powermgmt-base ppp - pppconfig pppoeconf psmisc puppet-common python python-apt-common - python-chardet python-cheetah python-cliff python-cliff-doc python-cmd2 - python-configobj python-daemonize python-json-pointer python-jsonpatch - python-minimal python-oauth python-pbr python-pkg-resources - python-prettytable python-pyparsing python-pypcap python-requests - python-scapy python-serial python-setuptools python-six python-stevedore - python-tablib python-urllib3 python-yaml python2.7 python2.7-minimal - python3-apt python3-commandnotfound python3-dbus python3-distupgrade - python3-gdbm python3-gi python3-pycurl python3-software-properties - python3-update-manager rsync ruby ruby-cstruct ruby-hiera ruby-httpclient - ruby-mixlib-cli ruby-mixlib-config ruby-mixlib-log ruby-rethtool ruby-rgen - ruby-safe-yaml ruby-sigar ruby-systemu ruby-yajl ruby1.9.1 sgml-base - shared-mime-info software-properties-common ssh-import-id ssl-cert strace - systemd-services systemd-shim tcpd tcpdump time ubuntu-release-upgrader-core - ufw unattended-upgrades update-manager-core usbutils vim-runtime watershed - wget wireless-regdb xauth xml-core xz-utils -Suggested packages: - gnome-control-center default-mta mail-transport-agent apparmor-profiles - apparmor-docs apparmor-utils augeas-doc binutils-doc wamerican wordlist - whois vacation cpp-doc gcc-4.8-locales dbus-x11 rblcheck debian-keyring - g++-multilib g++-4.8-multilib gcc-4.8-doc libstdc++6-4.8-dbg gcc-multilib - autoconf automake1.9 libtool flex bison gdb gcc-doc gcc-4.8-multilib - libgcc1-dbg libgomp1-dbg libitm1-dbg libatomic1-dbg libasan0-dbg - libtsan0-dbg libbacktrace1-dbg libquadmath0-dbg binutils-gold groff - multiboot-doc grub-emu xorriso desktop-base apmd texinfo-doc-nonfree - traceroute isoquery augeas-tools glibc-doc geoip-bin gpm krb5-doc krb5-user - javascript-common libparted0-dev libparted0-i18n libsasl2-modules-otp - libsasl2-modules-ldap libsasl2-modules-sql libsasl2-modules-gssapi-mit - libsasl2-modules-gssapi-heimdal libstdc++-4.8-doc fdutils linux-doc-3.13.0 - linux-source-3.13.0 linux-tools thin-provisioning-tools make-doc www-browser - man-browser spell ntp-doc ssh-askpass libpam-ssh keychain monkeysphere rssh - molly-guard parted-doc diffutils-doc procmail postfix-mysql postfix-pgsql - postfix-ldap postfix-pcre sasl2-bin dovecot-common postfix-cdb mail-reader - postfix-doc xdialog puppet-el vim-puppet etckeeper ruby-selinux ruby-rrd - librrd-ruby python-doc python-tk python-amqp-doc python-markdown - python-pygments python-memcache python-distribute python-distribute-doc - tcpreplay wireshark graphviz imagemagick python-gnuplot python-crypto - python-pyx ebtables python-visual sox xpdf gv hexer librsvg2-bin - python-pcapy python-wxgtk2.8 python-wxgtk python2.7-doc binfmt-support - python3-apt-dbg python-apt-doc python-dbus-doc python3-dbus-dbg - python3-gdbm-dbg libcurl4-gnutls-dev python3-pycurl-dbg ri ruby-dev - ruby1.9.1-examples ri1.9.1 ruby1.9.1-dev ruby-switch sgml-base-doc - openssl-blacklist cgmanager pm-utils bsd-mailx ctags vim-doc vim-scripts - debhelper -The following NEW packages will be installed: - accountsservice acl anacron apparmor apt-transport-https augeas-lenses - bash-completion bind9-host binutils bridge-utils bsdmainutils - build-essential busybox-static ca-certificates cliff-tablib - cloud-guest-utils cloud-init command-not-found command-not-found-data cpp - cpp-4.8 crda curl daemonize dbus debconf-utils dmidecode dnsutils dosfstools - dpkg-dev eatmydata ed facter fakeroot friendly-recovery ftp fuse g++ g++-4.8 - gcc gcc-4.8 gdisk geoip-database gettext-base gir1.2-glib-2.0 groff-base - grub-common grub-gfxpayload-lists grub-pc grub-pc-bin grub2-common hdparm - info install-info iptables iputils-tracepath irqbalance iso-codes iw - krb5-locales language-selector-common libaccountsservice0 - libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl - libapparmor-perl libapparmor1 libasan0 libasn1-8-heimdal libasprintf0c2 - libatomic1 libaugeas0 libbind9-90 libc-dev-bin libc6-dev libcap-ng0 - libck-connector0 libcloog-isl4 libcurl3 libcurl3-gnutls libdbus-glib-1-2 - libdevmapper-event1.02.1 libdns100 libdpkg-perl libedit2 libelf1 libfakeroot - libfile-fcntllock-perl libfreetype6 libfuse2 libgcc-4.8-dev libgck-1-0 - libgcr-3-common libgcr-base-3-1 libgeoip1 libgirepository-1.0-1 libglib2.0-0 - libglib2.0-data libgmp10 libgomp1 libgpm2 libgssapi-krb5-2 - libgssapi3-heimdal libhcrypto4-heimdal libheimbase1-heimdal - libheimntlm0-heimdal libhx509-5-heimdal libicu52 libidn11 libisc95 - libisccc90 libisccfg90 libisl10 libitm1 libjs-jquery libjs-sphinxdoc - libjs-underscore libk5crypto3 libkeyutils1 libkrb5-26-heimdal libkrb5-3 - libkrb5support0 libldap-2.4-2 liblwres90 libmpc3 libmpfr4 libnfnetlink0 - libnl-3-200 libnl-genl-3-200 libnuma1 libopts25 libpam-systemd - libparted0debian1 libpcap0.8 libpci3 libpipeline1 libpolkit-gobject-1-0 - libpython-stdlib libpython2.7 libpython2.7-minimal libpython2.7-stdlib - libquadmath0 libreadline5 libroken18-heimdal librtmp0 libruby1.9.1 - libsasl2-2 libsasl2-modules libsasl2-modules-db libstdc++-4.8-dev - libsystemd-daemon0 libsystemd-login0 libtimedate-perl libtsan0 libusb-1.0-0 - libwind0-heimdal libwrap0 libx11-6 libx11-data libxau6 libxcb1 libxdmcp6 - libxext6 libxml2 libxmuu1 libxtables10 libyaml-0-2 linux-firmware - linux-firmware-nonfree linux-headers-3.13.0-49 - linux-headers-3.13.0-49-generic linux-headers-generic - linux-headers-generic-lts-trusty linux-image-3.13.0-49-generic - linux-image-extra-3.13.0-49-generic linux-image-generic - linux-image-generic-lts-trusty linux-libc-dev lshw lsof ltrace lvm2 make - man-db manpages manpages-dev mcollective mcollective-common mdadm mlocate - mtr-tiny nailgun-agent nailgun-mcagents nailgun-net-check nano ncurses-term - ntfs-3g ntp ohai openssh-client openssh-server openssh-sftp-server openssl - os-prober parted patch pciutils plymouth-theme-ubuntu-text - popularity-contest postfix powermgmt-base ppp pppconfig pppoeconf psmisc - puppet puppet-common python python-amqp python-apt-common python-chardet - python-cheetah python-cliff python-cliff-doc python-cmd2 python-configobj - python-daemonize python-json-pointer python-jsonpatch python-minimal - python-oauth python-pbr python-pkg-resources python-prettytable - python-pyparsing python-pypcap python-requests python-scapy python-serial - python-setuptools python-six python-stevedore python-tablib python-urllib3 - python-yaml python2.7 python2.7-minimal python3-apt python3-commandnotfound - python3-dbus python3-distupgrade python3-gdbm python3-gi python3-pycurl - python3-software-properties python3-update-manager rsync ruby ruby-augeas - ruby-cstruct ruby-hiera ruby-httpclient ruby-ipaddress ruby-json - ruby-mixlib-cli ruby-mixlib-config ruby-mixlib-log ruby-netaddr - ruby-openstack ruby-rethtool ruby-rgen ruby-safe-yaml ruby-shadow ruby-sigar - ruby-stomp ruby-systemu ruby-yajl ruby1.9.1 sgml-base shared-mime-info - software-properties-common ssh-import-id ssl-cert strace systemd-services - systemd-shim tcpd tcpdump telnet time ubuntu-release-upgrader-core - ubuntu-standard ufw unattended-upgrades update-manager-core usbutils - uuid-runtime vim vim-runtime virt-what vlan watershed wget wireless-regdb - xauth xml-core xz-utils -The following packages will be upgraded: - libc6 -1 upgraded, 307 newly installed, 0 to remove and 63 not upgraded. -Need to get 172 MB of archives. -After this operation, 694 MB of additional disk space will be used. -WARNING: The following packages cannot be authenticated! - python-pbr python-six python-stevedore python-cliff mcollective-common - mcollective nailgun-mcagents python-daemonize nailgun-net-check ruby-hiera - python-cliff-doc ruby-cstruct ruby-httpclient ruby-netaddr ruby-openstack - ruby-rethtool daemonize nailgun-agent python-amqp -Authentication warning overridden. -Get:1 http://10.20.0.2:8080/2014.2-6.1/ubuntu/x86_64/ mos6.1/main python-pbr all 0.10.0-0u~u14.04+mos1 [37.7 kB] -Get:2 http://10.20.0.2:8080/2014.2-6.1/ubuntu/x86_64/ mos6.1/main python-six all 1.9.0-1~u14.04+mos1 [10.9 kB] -Get:3 http://10.20.0.2:8080/2014.2-6.1/ubuntu/x86_64/ mos6.1/main python-stevedore all 1.1.0-0u~u14.04+mos1 [17.2 kB] -Get:4 http://10.20.0.2:8080/2014.2-6.1/ubuntu/x86_64/ mos6.1/main python-cliff all 1.7.0-0u~u14.04+mos1 [22.4 kB] -Get:5 http://10.20.0.2:8080/2014.2-6.1/ubuntu/x86_64/ mos6.1/main mcollective-common all 2.3.1-0~u14.04+mos1 [477 kB] -Get:6 http://10.20.0.2:8080/2014.2-6.1/ubuntu/x86_64/ mos6.1/main mcollective all 2.3.1-0~u14.04+mos1 [4556 B] -Get:7 http://10.20.0.2:8080/2014.2-6.1/ubuntu/x86_64/ mos6.1/main nailgun-mcagents all 6.0.0-fuel6.1+3 [11.2 kB] -Get:8 http://10.20.0.2:8080/2014.2-6.1/ubuntu/x86_64/ mos6.1/main python-daemonize all 2.2.1-0x2go1~git20131219.5~u14.04+mos1 [5488 B] -Get:9 http://10.20.0.2:8080/2014.2-6.1/ubuntu/x86_64/ mos6.1/main nailgun-net-check all 6.0.0-fuel6.1+4 [17.6 kB] -Get:10 http://10.20.0.2:8080/2014.2-6.1/ubuntu/x86_64/ mos6.1/main ruby-hiera all 1.3.1-1puppetlabs1~mos6.1+2 [12.1 kB] -Get:11 http://10.20.0.2:8080/2014.2-6.1/ubuntu/x86_64/ mos6.1/main python-cliff-doc all 1.7.0-0u~u14.04+mos1 [46.4 kB] -Get:12 http://10.20.0.2:8080/2014.2-6.1/ubuntu/x86_64/ mos6.1/main ruby-cstruct all 1.0.1-1~u14.04+mos1 [33.4 kB] -Get:13 http://10.20.0.2:8080/2014.2-6.1/ubuntu/x86_64/ mos6.1/main ruby-httpclient all 2.3.4.1-1~u14.04+mos1 [110 kB] -Get:14 http://10.20.0.2:8080/2014.2-6.1/ubuntu/x86_64/ mos6.1/main ruby-netaddr all 1.5.0-1~u14.04+mos1 [28.2 kB] -Get:15 http://10.20.0.2:8080/2014.2-6.1/ubuntu/x86_64/ mos6.1/main ruby-openstack all 1.1.1-1~u14.04+mos1 [28.9 kB] -Get:16 http://10.20.0.2:8080/2014.2-6.1/ubuntu/x86_64/ mos6.1/main ruby-rethtool all 0.0.5-1~u14.04+mos1 [5770 B] -Get:17 http://10.20.0.2:8080/2014.2-6.1/ubuntu/x86_64/ mos6.1/main daemonize amd64 1.7.4-1~u14.04+mos1 [11.1 kB] -Get:18 http://10.20.0.2:8080/2014.2-6.1/ubuntu/x86_64/ mos6.1/main nailgun-agent all 6.0.0-fuel6.1+5 [7748 B] -Get:19 http://10.20.0.2:8080/2014.2-6.1/ubuntu/x86_64/ mos6.1/main python-amqp all 1.4.5-0u~u14.04+mos1 [40.9 kB] -Get:20 http://archive.ubuntu.com/ubuntu/ trusty-security/main libc6 amd64 2.19-0ubuntu6.6 [4735 kB] -Get:21 http://archive.ubuntu.com/ubuntu/ trusty/main install-info amd64 5.2.0.dfsg.1-2 [51.6 kB] -Get:22 http://archive.ubuntu.com/ubuntu/ trusty/main bash-completion all 1:2.1-4 [154 kB] -Get:23 http://archive.ubuntu.com/ubuntu/ trusty/main iso-codes all 3.52-1 [2073 kB] -Get:24 http://archive.ubuntu.com/ubuntu/ trusty/main libpython2.7-minimal amd64 2.7.6-8 [307 kB] -Get:25 http://archive.ubuntu.com/ubuntu/ trusty/main python2.7-minimal amd64 2.7.6-8 [1190 kB] -Get:26 http://archive.ubuntu.com/ubuntu/ trusty/main libpython2.7-stdlib amd64 2.7.6-8 [1872 kB] -Get:27 http://archive.ubuntu.com/ubuntu/ trusty/main python2.7 amd64 2.7.6-8 [197 kB] -Get:28 http://archive.ubuntu.com/ubuntu/ trusty/main python-minimal amd64 2.7.5-5ubuntu3 [27.5 kB] -Get:29 http://archive.ubuntu.com/ubuntu/ trusty/main libpython-stdlib amd64 2.7.5-5ubuntu3 [7012 B] -Get:30 http://archive.ubuntu.com/ubuntu/ trusty/main python amd64 2.7.5-5ubuntu3 [134 kB] -Get:31 http://archive.ubuntu.com/ubuntu/ trusty-updates/main python-apt-common all 0.9.3.5ubuntu1 [17.1 kB] -Get:32 http://archive.ubuntu.com/ubuntu/ trusty-updates/main python3-apt amd64 0.9.3.5ubuntu1 [139 kB] -Get:33 http://archive.ubuntu.com/ubuntu/ trusty-updates/main libglib2.0-0 amd64 2.40.2-0ubuntu1 [1058 kB] -Get:34 http://archive.ubuntu.com/ubuntu/ trusty/main libdbus-glib-1-2 amd64 0.100.2-1 [74.1 kB] -Get:35 http://archive.ubuntu.com/ubuntu/ trusty/main python3-dbus amd64 1.2.0-2build2 [82.1 kB] -Get:36 http://archive.ubuntu.com/ubuntu/ trusty-security/main libapparmor1 amd64 2.8.95~2430-0ubuntu5.1 [24.6 kB] -Get:37 http://archive.ubuntu.com/ubuntu/ trusty-updates/main libsystemd-login0 amd64 204-5ubuntu20.11 [26.8 kB] -Get:38 http://archive.ubuntu.com/ubuntu/ trusty-security/main dbus amd64 1.6.18-0ubuntu4.3 [231 kB] -Get:39 http://archive.ubuntu.com/ubuntu/ trusty/main libgck-1-0 amd64 3.10.1-1 [76.8 kB] -Get:40 http://archive.ubuntu.com/ubuntu/ trusty/main libgcr-3-common all 3.10.1-1 [8482 B] -Get:41 http://archive.ubuntu.com/ubuntu/ trusty/main libgcr-base-3-1 amd64 3.10.1-1 [180 kB] -Get:42 http://archive.ubuntu.com/ubuntu/ trusty-updates/main libaccountsservice0 amd64 0.6.35-0ubuntu7.1 [69.6 kB] -Get:43 http://archive.ubuntu.com/ubuntu/ trusty-updates/main libpolkit-gobject-1-0 amd64 0.105-4ubuntu2.14.04.1 [34.8 kB] -Get:44 http://archive.ubuntu.com/ubuntu/ trusty-updates/main accountsservice amd64 0.6.35-0ubuntu7.1 [60.4 kB] -Get:45 http://archive.ubuntu.com/ubuntu/ trusty-updates/main language-selector-common all 0.129.3 [204 kB] -Get:46 http://archive.ubuntu.com/ubuntu/ trusty-updates/main libroken18-heimdal amd64 1.6~git20131207+dfsg-1ubuntu1.1 [40.0 kB] -Get:47 http://archive.ubuntu.com/ubuntu/ trusty-updates/main libasn1-8-heimdal amd64 1.6~git20131207+dfsg-1ubuntu1.1 [161 kB] -Get:48 http://archive.ubuntu.com/ubuntu/ trusty-updates/main libasprintf0c2 amd64 0.18.3.1-1ubuntu3 [6712 B] -Get:49 http://archive.ubuntu.com/ubuntu/ trusty/main libcap-ng0 amd64 0.7.3-1ubuntu2 [9876 B] -Get:50 http://archive.ubuntu.com/ubuntu/ trusty-security/main libkrb5support0 amd64 1.12+dfsg-2ubuntu5.1 [30.4 kB] -Get:51 http://archive.ubuntu.com/ubuntu/ trusty-security/main libk5crypto3 amd64 1.12+dfsg-2ubuntu5.1 [79.8 kB] -Get:52 http://archive.ubuntu.com/ubuntu/ trusty/main libkeyutils1 amd64 1.5.6-1 [7318 B] -Get:53 http://archive.ubuntu.com/ubuntu/ trusty-security/main libkrb5-3 amd64 1.12+dfsg-2ubuntu5.1 [262 kB] -Get:54 http://archive.ubuntu.com/ubuntu/ trusty-security/main libgssapi-krb5-2 amd64 1.12+dfsg-2ubuntu5.1 [113 kB] -Get:55 http://archive.ubuntu.com/ubuntu/ trusty/main libidn11 amd64 1.28-1ubuntu2 [93.0 kB] -Get:56 http://archive.ubuntu.com/ubuntu/ trusty-updates/main libhcrypto4-heimdal amd64 1.6~git20131207+dfsg-1ubuntu1.1 [83.9 kB] -Get:57 http://archive.ubuntu.com/ubuntu/ trusty-updates/main libheimbase1-heimdal amd64 1.6~git20131207+dfsg-1ubuntu1.1 [28.9 kB] -Get:58 http://archive.ubuntu.com/ubuntu/ trusty-updates/main libwind0-heimdal amd64 1.6~git20131207+dfsg-1ubuntu1.1 [47.8 kB] -Get:59 http://archive.ubuntu.com/ubuntu/ trusty-updates/main libhx509-5-heimdal amd64 1.6~git20131207+dfsg-1ubuntu1.1 [104 kB] -Get:60 http://archive.ubuntu.com/ubuntu/ trusty-updates/main libkrb5-26-heimdal amd64 1.6~git20131207+dfsg-1ubuntu1.1 [196 kB] -Get:61 http://archive.ubuntu.com/ubuntu/ trusty-updates/main libheimntlm0-heimdal amd64 1.6~git20131207+dfsg-1ubuntu1.1 [15.2 kB] -Get:62 http://archive.ubuntu.com/ubuntu/ trusty-updates/main libgssapi3-heimdal amd64 1.6~git20131207+dfsg-1ubuntu1.1 [89.8 kB] -Get:63 http://archive.ubuntu.com/ubuntu/ trusty/main libsasl2-modules-db amd64 2.1.25.dfsg1-17build1 [14.9 kB] -Get:64 http://archive.ubuntu.com/ubuntu/ trusty/main libsasl2-2 amd64 2.1.25.dfsg1-17build1 [56.5 kB] -Get:65 http://archive.ubuntu.com/ubuntu/ trusty/main libldap-2.4-2 amd64 2.4.31-1+nmu2ubuntu8 [154 kB] -Get:66 http://archive.ubuntu.com/ubuntu/ trusty/main librtmp0 amd64 2.4+20121230.gitdf6c518-1 [57.5 kB] -Get:67 http://archive.ubuntu.com/ubuntu/ trusty-security/main libcurl3-gnutls amd64 7.35.0-1ubuntu2.3 [165 kB] -Get:68 http://archive.ubuntu.com/ubuntu/ trusty/main libedit2 amd64 3.1-20130712-2 [86.7 kB] -Get:69 http://archive.ubuntu.com/ubuntu/ trusty-security/main libelf1 amd64 0.158-0ubuntu5.2 [38.0 kB] -Get:70 http://archive.ubuntu.com/ubuntu/ trusty/main libfuse2 amd64 2.9.2-4ubuntu4 [87.2 kB] -Get:71 http://archive.ubuntu.com/ubuntu/ trusty/main libgeoip1 amd64 1.6.0-1 [71.0 kB] -Get:72 http://archive.ubuntu.com/ubuntu/ trusty/main libnfnetlink0 amd64 1.0.1-2 [15.0 kB] -Get:73 http://archive.ubuntu.com/ubuntu/ trusty-updates/main libnuma1 amd64 2.0.9~rc5-1ubuntu3 [20.3 kB] -Get:74 http://archive.ubuntu.com/ubuntu/ trusty-updates/main libsystemd-daemon0 amd64 204-5ubuntu20.11 [9726 B] -Get:75 http://archive.ubuntu.com/ubuntu/ trusty/main systemd-shim amd64 6-2bzr1 [11.4 kB] -Get:76 http://archive.ubuntu.com/ubuntu/ trusty-updates/main systemd-services amd64 204-5ubuntu20.11 [197 kB] -Get:77 http://archive.ubuntu.com/ubuntu/ trusty-updates/main libpam-systemd amd64 204-5ubuntu20.11 [25.5 kB] -Get:78 http://archive.ubuntu.com/ubuntu/ trusty/main libparted0debian1 amd64 2.3-19ubuntu1 [203 kB] -Get:79 http://archive.ubuntu.com/ubuntu/ trusty/main libpcap0.8 amd64 1.5.3-2 [110 kB] -Get:80 http://archive.ubuntu.com/ubuntu/ trusty/main libpci3 amd64 1:3.2.1-1ubuntu5 [26.1 kB] -Get:81 http://archive.ubuntu.com/ubuntu/ trusty/main libpipeline1 amd64 1.3.0-1 [24.0 kB] -Get:82 http://archive.ubuntu.com/ubuntu/ trusty/main libusb-1.0-0 amd64 2:1.0.17-1ubuntu2 [39.6 kB] -Get:83 http://archive.ubuntu.com/ubuntu/ trusty/main libxau6 amd64 1:1.0.8-1 [8376 B] -Get:84 http://archive.ubuntu.com/ubuntu/ trusty/main libxdmcp6 amd64 1:1.1.1-1 [12.8 kB] -Get:85 http://archive.ubuntu.com/ubuntu/ trusty/main libxcb1 amd64 1.10-2ubuntu1 [38.0 kB] -Get:86 http://archive.ubuntu.com/ubuntu/ trusty/main libx11-data all 2:1.6.2-1ubuntu2 [111 kB] -Get:87 http://archive.ubuntu.com/ubuntu/ trusty/main libx11-6 amd64 2:1.6.2-1ubuntu2 [560 kB] -Get:88 http://archive.ubuntu.com/ubuntu/ trusty-security/main libxext6 amd64 2:1.3.2-1ubuntu0.0.14.04.1 [28.8 kB] -Get:89 http://archive.ubuntu.com/ubuntu/ trusty-security/main libxml2 amd64 2.9.1+dfsg1-3ubuntu4.4 [570 kB] -Get:90 http://archive.ubuntu.com/ubuntu/ trusty/main libxmuu1 amd64 2:1.1.1-1 [11.0 kB] -Get:91 http://archive.ubuntu.com/ubuntu/ trusty/main groff-base amd64 1.22.2-5 [1053 kB] -Get:92 http://archive.ubuntu.com/ubuntu/ trusty/main bsdmainutils amd64 9.0.5ubuntu1 [203 kB] -Get:93 http://archive.ubuntu.com/ubuntu/ trusty-updates/main man-db amd64 2.6.7.1-1ubuntu1 [857 kB] -Get:94 http://archive.ubuntu.com/ubuntu/ trusty/main fuse amd64 2.9.2-4ubuntu4 [25.1 kB] -Get:95 http://archive.ubuntu.com/ubuntu/ trusty/main ntfs-3g amd64 1:2013.1.13AR.1-2ubuntu2 [421 kB] -Get:96 http://archive.ubuntu.com/ubuntu/ trusty/main popularity-contest all 1.57ubuntu1 [31.5 kB] -Get:97 http://archive.ubuntu.com/ubuntu/ trusty/main sgml-base all 1.26+nmu4ubuntu1 [12.5 kB] -Get:98 http://archive.ubuntu.com/ubuntu/ trusty/main libasan0 amd64 4.8.2-19ubuntu1 [63.0 kB] -Get:99 http://archive.ubuntu.com/ubuntu/ trusty/main libatomic1 amd64 4.8.2-19ubuntu1 [8626 B] -Get:100 http://archive.ubuntu.com/ubuntu/ trusty/main libck-connector0 amd64 0.4.5-3.1ubuntu2 [10.5 kB] -Get:101 http://archive.ubuntu.com/ubuntu/ trusty/main libgmp10 amd64 2:5.1.3+dfsg-1ubuntu1 [218 kB] -Get:102 http://archive.ubuntu.com/ubuntu/ trusty/main libisl10 amd64 0.12.2-1 [419 kB] -Get:103 http://archive.ubuntu.com/ubuntu/ trusty/main libcloog-isl4 amd64 0.18.2-1 [57.5 kB] -Get:104 http://archive.ubuntu.com/ubuntu/ trusty-security/main libcurl3 amd64 7.35.0-1ubuntu2.3 [172 kB] -Get:105 http://archive.ubuntu.com/ubuntu/ trusty/main libdevmapper-event1.02.1 amd64 2:1.02.77-6ubuntu2 [10.8 kB] -Get:106 http://archive.ubuntu.com/ubuntu/ trusty-security/main libfreetype6 amd64 2.5.2-1ubuntu2.4 [305 kB] -Get:107 http://archive.ubuntu.com/ubuntu/ trusty/main libgomp1 amd64 4.8.2-19ubuntu1 [23.2 kB] -Get:108 http://archive.ubuntu.com/ubuntu/ trusty/main libgpm2 amd64 1.20.4-6.1 [16.5 kB] -Get:109 http://archive.ubuntu.com/ubuntu/ trusty-security/main libicu52 amd64 52.1-3ubuntu0.2 [6751 kB] -Get:110 http://archive.ubuntu.com/ubuntu/ trusty/main libitm1 amd64 4.8.2-19ubuntu1 [28.5 kB] -Get:111 http://archive.ubuntu.com/ubuntu/ trusty/main libmpfr4 amd64 3.1.2-1 [203 kB] -Get:112 http://archive.ubuntu.com/ubuntu/ trusty/main libnl-3-200 amd64 3.2.21-1 [44.5 kB] -Get:113 http://archive.ubuntu.com/ubuntu/ trusty/main libnl-genl-3-200 amd64 3.2.21-1 [10.2 kB] -Get:114 http://archive.ubuntu.com/ubuntu/ trusty/main libopts25 amd64 1:5.18-2ubuntu2 [55.3 kB] -Get:115 http://archive.ubuntu.com/ubuntu/ trusty/main libpython2.7 amd64 2.7.6-8 [1044 kB] -Get:116 http://archive.ubuntu.com/ubuntu/ trusty/main libquadmath0 amd64 4.8.2-19ubuntu1 [126 kB] -Get:117 http://archive.ubuntu.com/ubuntu/ trusty/main libreadline5 amd64 5.2+dfsg-2 [130 kB] -Get:118 http://archive.ubuntu.com/ubuntu/ trusty/main libtsan0 amd64 4.8.2-19ubuntu1 [94.7 kB] -Get:119 http://archive.ubuntu.com/ubuntu/ trusty/main libwrap0 amd64 7.6.q-25 [46.2 kB] -Get:120 http://archive.ubuntu.com/ubuntu/ trusty-security/main libyaml-0-2 amd64 0.1.4-3ubuntu3.1 [48.1 kB] -Get:121 http://archive.ubuntu.com/ubuntu/ trusty-security/main linux-image-3.13.0-49-generic amd64 3.13.0-49.83 [15.1 MB] -Get:122 http://archive.ubuntu.com/ubuntu/ trusty-security/main ntp amd64 1:4.2.6.p5+dfsg-3ubuntu2.14.04.3 [418 kB] -Get:123 http://archive.ubuntu.com/ubuntu/ trusty/main python-pyparsing all 2.0.1+dfsg1-1build1 [34.3 kB] -Get:124 http://archive.ubuntu.com/ubuntu/ trusty/main python-pkg-resources all 3.3-1ubuntu1 [61.9 kB] -Get:125 http://archive.ubuntu.com/ubuntu/ trusty/main python-setuptools all 3.3-1ubuntu1 [230 kB] -Get:126 http://archive.ubuntu.com/ubuntu/ trusty/main python-cmd2 all 0.6.7-2fakesync1build1 [22.2 kB] -Get:127 http://archive.ubuntu.com/ubuntu/ trusty/main python-json-pointer all 1.0-2build1 [5158 B] -Get:128 http://archive.ubuntu.com/ubuntu/ trusty/main python-jsonpatch all 1.3-4 [9088 B] -Get:129 http://archive.ubuntu.com/ubuntu/ trusty/main python-tablib all 0.9.11-2build1 [253 kB] -Get:130 http://archive.ubuntu.com/ubuntu/ trusty/main python-prettytable all 0.7.2-2ubuntu2 [20.0 kB] -Get:131 http://archive.ubuntu.com/ubuntu/ trusty/main cliff-tablib all 1.1-1 [4106 B] -Get:132 http://archive.ubuntu.com/ubuntu/ trusty/main libmpc3 amd64 1.0.1-1ubuntu1 [38.4 kB] -Get:133 http://archive.ubuntu.com/ubuntu/ trusty-security/main libapparmor-perl amd64 2.8.95~2430-0ubuntu5.1 [26.8 kB] -Get:134 http://archive.ubuntu.com/ubuntu/ trusty-security/main apparmor amd64 2.8.95~2430-0ubuntu5.1 [319 kB] -Get:135 http://archive.ubuntu.com/ubuntu/ trusty-updates/main apt-transport-https amd64 1.0.1ubuntu2.6 [25.1 kB] -Get:136 http://archive.ubuntu.com/ubuntu/ trusty-security/main libisc95 amd64 1:9.9.5.dfsg-3ubuntu0.2 [148 kB] -Get:137 http://archive.ubuntu.com/ubuntu/ trusty-security/main libdns100 amd64 1:9.9.5.dfsg-3ubuntu0.2 [643 kB] -Get:138 http://archive.ubuntu.com/ubuntu/ trusty-security/main libisccc90 amd64 1:9.9.5.dfsg-3ubuntu0.2 [15.7 kB] -Get:139 http://archive.ubuntu.com/ubuntu/ trusty-security/main libisccfg90 amd64 1:9.9.5.dfsg-3ubuntu0.2 [36.1 kB] -Get:140 http://archive.ubuntu.com/ubuntu/ trusty-security/main libbind9-90 amd64 1:9.9.5.dfsg-3ubuntu0.2 [22.0 kB] -Get:141 http://archive.ubuntu.com/ubuntu/ trusty-security/main liblwres90 amd64 1:9.9.5.dfsg-3ubuntu0.2 [32.9 kB] -Get:142 http://archive.ubuntu.com/ubuntu/ trusty-security/main bind9-host amd64 1:9.9.5.dfsg-3ubuntu0.2 [46.4 kB] -Get:143 http://archive.ubuntu.com/ubuntu/ trusty/main busybox-static amd64 1:1.21.0-1ubuntu1 [999 kB] -Get:144 http://archive.ubuntu.com/ubuntu/ trusty-security/main openssl amd64 1.0.1f-1ubuntu2.11 [488 kB] -Get:145 http://archive.ubuntu.com/ubuntu/ trusty-security/main ca-certificates all 20141019ubuntu0.14.04.1 [189 kB] -Get:146 http://archive.ubuntu.com/ubuntu/ trusty/main command-not-found-data amd64 0.3ubuntu12 [791 kB] -Get:147 http://archive.ubuntu.com/ubuntu/ trusty/main python3-gdbm amd64 3.4.0-0ubuntu1 [12.2 kB] -Get:148 http://archive.ubuntu.com/ubuntu/ trusty/main python3-commandnotfound all 0.3ubuntu12 [5744 B] -Get:149 http://archive.ubuntu.com/ubuntu/ trusty/main command-not-found all 0.3ubuntu12 [3652 B] -Get:150 http://archive.ubuntu.com/ubuntu/ trusty/main dmidecode amd64 2.12-2 [45.9 kB] -Get:151 http://archive.ubuntu.com/ubuntu/ trusty-security/main dnsutils amd64 1:9.9.5.dfsg-3ubuntu0.2 [96.9 kB] -Get:152 http://archive.ubuntu.com/ubuntu/ trusty/main dosfstools amd64 3.0.26-1 [59.7 kB] -Get:153 http://archive.ubuntu.com/ubuntu/ trusty/main ed amd64 1.9-2 [52.6 kB] -Get:154 http://archive.ubuntu.com/ubuntu/ trusty/main friendly-recovery all 0.2.25 [9236 B] -Get:155 http://archive.ubuntu.com/ubuntu/ trusty/main ftp amd64 0.17-28 [58.1 kB] -Get:156 http://archive.ubuntu.com/ubuntu/ trusty/main geoip-database all 20140313-1 [1196 kB] -Get:157 http://archive.ubuntu.com/ubuntu/ trusty-updates/main gettext-base amd64 0.18.3.1-1ubuntu3 [48.8 kB] -Get:158 http://archive.ubuntu.com/ubuntu/ trusty-updates/main libgirepository-1.0-1 amd64 1.40.0-1ubuntu0.2 [85.6 kB] -Get:159 http://archive.ubuntu.com/ubuntu/ trusty-updates/main gir1.2-glib-2.0 amd64 1.40.0-1ubuntu0.2 [124 kB] -Get:160 http://archive.ubuntu.com/ubuntu/ trusty/main hdparm amd64 9.43-1ubuntu3 [95.1 kB] -Get:161 http://archive.ubuntu.com/ubuntu/ trusty/main info amd64 5.2.0.dfsg.1-2 [99.1 kB] -Get:162 http://archive.ubuntu.com/ubuntu/ trusty/main libxtables10 amd64 1.4.21-1ubuntu1 [25.9 kB] -Get:163 http://archive.ubuntu.com/ubuntu/ trusty/main iptables amd64 1.4.21-1ubuntu1 [261 kB] -Get:164 http://archive.ubuntu.com/ubuntu/ trusty-updates/main iputils-tracepath amd64 3:20121221-4ubuntu1.1 [32.6 kB] -Get:165 http://archive.ubuntu.com/ubuntu/ trusty-updates/main irqbalance amd64 1.0.6-2ubuntu0.14.04.1 [30.6 kB] -Get:166 http://archive.ubuntu.com/ubuntu/ trusty-security/main krb5-locales all 1.12+dfsg-2ubuntu5.1 [13.2 kB] -Get:167 http://archive.ubuntu.com/ubuntu/ trusty-updates/main libglib2.0-data all 2.40.2-0ubuntu1 [116 kB] -Get:168 http://archive.ubuntu.com/ubuntu/ trusty/main libsasl2-modules amd64 2.1.25.dfsg1-17build1 [64.3 kB] -Get:169 http://archive.ubuntu.com/ubuntu/ trusty-updates/main lshw amd64 02.16-2ubuntu1.2 [224 kB] -Get:170 http://archive.ubuntu.com/ubuntu/ trusty/main lsof amd64 4.86+dfsg-1ubuntu2 [257 kB] -Get:171 http://archive.ubuntu.com/ubuntu/ trusty-updates/main ltrace amd64 0.7.3-4ubuntu5.1 [120 kB] -Get:172 http://archive.ubuntu.com/ubuntu/ trusty/main manpages all 3.54-1ubuntu1 [627 kB] -Get:173 http://archive.ubuntu.com/ubuntu/ trusty/main mlocate amd64 0.26-1ubuntu1 [54.6 kB] -Get:174 http://archive.ubuntu.com/ubuntu/ trusty/main mtr-tiny amd64 0.85-2 [41.7 kB] -Get:175 http://archive.ubuntu.com/ubuntu/ trusty/main nano amd64 2.2.6-1ubuntu1 [194 kB] -Get:176 http://archive.ubuntu.com/ubuntu/ trusty-updates/main openssh-client amd64 1:6.6p1-2ubuntu2 [565 kB] -Get:177 http://archive.ubuntu.com/ubuntu/ trusty/main parted amd64 2.3-19ubuntu1 [44.0 kB] -Get:178 http://archive.ubuntu.com/ubuntu/ trusty/main pciutils amd64 1:3.2.1-1ubuntu5 [269 kB] -Get:179 http://archive.ubuntu.com/ubuntu/ trusty-updates/main plymouth-theme-ubuntu-text amd64 0.8.8-0ubuntu17.1 [7950 B] -Get:180 http://archive.ubuntu.com/ubuntu/ trusty/main powermgmt-base amd64 1.31build1 [9854 B] -Get:181 http://archive.ubuntu.com/ubuntu/ trusty-security/main ppp amd64 2.4.5-5.1ubuntu2.1 [311 kB] -Get:182 http://archive.ubuntu.com/ubuntu/ trusty/main pppconfig all 2.3.19ubuntu1 [34.5 kB] -Get:183 http://archive.ubuntu.com/ubuntu/ trusty/main pppoeconf all 1.20ubuntu1 [17.1 kB] -Get:184 http://archive.ubuntu.com/ubuntu/ trusty/main psmisc amd64 22.20-1ubuntu2 [53.2 kB] -Get:185 http://archive.ubuntu.com/ubuntu/ trusty-updates/main python3-update-manager all 1:0.196.12 [31.5 kB] -Get:186 http://archive.ubuntu.com/ubuntu/ trusty-updates/main python3-distupgrade all 1:0.220.7 [104 kB] -Get:187 http://archive.ubuntu.com/ubuntu/ trusty-updates/main python3-gi amd64 3.12.0-1ubuntu1 [154 kB] -Get:188 http://archive.ubuntu.com/ubuntu/ trusty-security/main rsync amd64 3.1.0-2ubuntu0.1 [283 kB] -Get:189 http://archive.ubuntu.com/ubuntu/ trusty/main shared-mime-info amd64 1.2-0ubuntu3 [415 kB] -Get:190 http://archive.ubuntu.com/ubuntu/ trusty/main strace amd64 4.8-1ubuntu5 [113 kB] -Get:191 http://archive.ubuntu.com/ubuntu/ trusty-security/main tcpdump amd64 4.5.1-2ubuntu1.1 [355 kB] -Get:192 http://archive.ubuntu.com/ubuntu/ trusty/main telnet amd64 0.17-36build2 [67.1 kB] -Get:193 http://archive.ubuntu.com/ubuntu/ trusty/main time amd64 1.7-24 [29.3 kB] -Get:194 http://archive.ubuntu.com/ubuntu/ trusty-updates/main ubuntu-release-upgrader-core all 1:0.220.7 [23.1 kB] -Get:195 http://archive.ubuntu.com/ubuntu/ trusty/main usbutils amd64 1:007-2ubuntu1 [190 kB] -Get:196 http://archive.ubuntu.com/ubuntu/ trusty-security/main wget amd64 1.15-1ubuntu1.14.04.1 [269 kB] -Get:197 http://archive.ubuntu.com/ubuntu/ trusty/main ubuntu-standard amd64 1.325 [2688 B] -Get:198 http://archive.ubuntu.com/ubuntu/ trusty/main ufw all 0.34~rc-0ubuntu2 [129 kB] -Get:199 http://archive.ubuntu.com/ubuntu/ trusty-updates/main update-manager-core all 1:0.196.12 [5252 B] -Get:200 http://archive.ubuntu.com/ubuntu/ trusty-updates/main uuid-runtime amd64 2.20.1-5.1ubuntu20.4 [12.3 kB] -Get:201 http://archive.ubuntu.com/ubuntu/ trusty/main xauth amd64 1:1.0.7-1ubuntu1 [25.8 kB] -Get:202 http://archive.ubuntu.com/ubuntu/ trusty/main xml-core all 0.13+nmu2 [23.3 kB] -Get:203 http://archive.ubuntu.com/ubuntu/ trusty/main acl amd64 2.2.52-1 [43.8 kB] -Get:204 http://archive.ubuntu.com/ubuntu/ trusty/main anacron amd64 2.3-20ubuntu1 [26.2 kB] -Get:205 http://archive.ubuntu.com/ubuntu/ trusty-updates/main augeas-lenses all 1.2.0-0ubuntu1.1 [230 kB] -Get:206 http://archive.ubuntu.com/ubuntu/ trusty-security/main binutils amd64 2.24-5ubuntu3.1 [2076 kB] -Get:207 http://archive.ubuntu.com/ubuntu/ trusty/main bridge-utils amd64 1.5-6ubuntu2 [29.2 kB] -Get:208 http://archive.ubuntu.com/ubuntu/ trusty-security/main libc-dev-bin amd64 2.19-0ubuntu6.6 [68.9 kB] -Get:209 http://archive.ubuntu.com/ubuntu/ trusty-security/main linux-libc-dev amd64 3.13.0-49.83 [779 kB] -Get:210 http://archive.ubuntu.com/ubuntu/ trusty-security/main libc6-dev amd64 2.19-0ubuntu6.6 [1910 kB] -Get:211 http://archive.ubuntu.com/ubuntu/ trusty/main cpp-4.8 amd64 4.8.2-19ubuntu1 [4439 kB] -Get:212 http://archive.ubuntu.com/ubuntu/ trusty/main cpp amd64 4:4.8.2-1ubuntu6 [27.5 kB] -Get:213 http://archive.ubuntu.com/ubuntu/ trusty/main libgcc-4.8-dev amd64 4.8.2-19ubuntu1 [1688 kB] -Get:214 http://archive.ubuntu.com/ubuntu/ trusty/main gcc-4.8 amd64 4.8.2-19ubuntu1 [5012 kB] -Get:215 http://archive.ubuntu.com/ubuntu/ trusty/main gcc amd64 4:4.8.2-1ubuntu6 [5098 B] -Get:216 http://archive.ubuntu.com/ubuntu/ trusty/main libstdc++-4.8-dev amd64 4.8.2-19ubuntu1 [1050 kB] -Get:217 http://archive.ubuntu.com/ubuntu/ trusty/main g++-4.8 amd64 4.8.2-19ubuntu1 [7038 kB] -Get:218 http://archive.ubuntu.com/ubuntu/ trusty/main g++ amd64 4:4.8.2-1ubuntu6 [1490 B] -Get:219 http://archive.ubuntu.com/ubuntu/ trusty/main make amd64 3.81-8.2ubuntu3 [119 kB] -Get:220 http://archive.ubuntu.com/ubuntu/ trusty/main libtimedate-perl all 2.3000-1 [37.2 kB] -Get:221 http://archive.ubuntu.com/ubuntu/ trusty-security/main libdpkg-perl all 1.17.5ubuntu5.4 [179 kB] -Get:222 http://archive.ubuntu.com/ubuntu/ trusty/main xz-utils amd64 5.1.1alpha+20120614-2ubuntu2 [78.8 kB] -Get:223 http://archive.ubuntu.com/ubuntu/ trusty-updates/main patch amd64 2.7.1-4ubuntu2 [84.3 kB] -Get:224 http://archive.ubuntu.com/ubuntu/ trusty-security/main dpkg-dev all 1.17.5ubuntu5.4 [726 kB] -Get:225 http://archive.ubuntu.com/ubuntu/ trusty/main build-essential amd64 11.6ubuntu6 [4838 B] -Get:226 http://archive.ubuntu.com/ubuntu/ trusty/main wireless-regdb all 2013.02.13-1ubuntu1 [6456 B] -Get:227 http://archive.ubuntu.com/ubuntu/ trusty/main crda amd64 1.1.2-1ubuntu2 [15.2 kB] -Get:228 http://archive.ubuntu.com/ubuntu/ trusty-security/main curl amd64 7.35.0-1ubuntu2.3 [123 kB] -Get:229 http://archive.ubuntu.com/ubuntu/ trusty/main debconf-utils all 1.5.51ubuntu2 [57.4 kB] -Get:230 http://archive.ubuntu.com/ubuntu/ trusty/main eatmydata amd64 26-2 [8034 B] -Get:231 http://archive.ubuntu.com/ubuntu/ trusty/main ruby all 1:1.9.3.4 [5334 B] -Get:232 http://archive.ubuntu.com/ubuntu/ trusty-security/main ruby1.9.1 amd64 1.9.3.484-2ubuntu1.2 [35.6 kB] -Get:233 http://archive.ubuntu.com/ubuntu/ trusty-security/main libruby1.9.1 amd64 1.9.3.484-2ubuntu1.2 [2645 kB] -Get:234 http://archive.ubuntu.com/ubuntu/ trusty/main ruby-json amd64 1.8.0-1build1 [49.0 kB] -Get:235 http://archive.ubuntu.com/ubuntu/ trusty/main facter all 1.7.5-1ubuntu1 [67.3 kB] -Get:236 http://archive.ubuntu.com/ubuntu/ trusty/main libfakeroot amd64 1.20-3ubuntu2 [25.4 kB] -Get:237 http://archive.ubuntu.com/ubuntu/ trusty/main fakeroot amd64 1.20-3ubuntu2 [55.0 kB] -Get:238 http://archive.ubuntu.com/ubuntu/ trusty-updates/main grub-common amd64 2.02~beta2-9ubuntu1 [1680 kB] -Get:239 http://archive.ubuntu.com/ubuntu/ trusty-updates/main grub2-common amd64 2.02~beta2-9ubuntu1 [500 kB] -Get:240 http://archive.ubuntu.com/ubuntu/ trusty-updates/main grub-pc-bin amd64 2.02~beta2-9ubuntu1 [882 kB] -Get:241 http://archive.ubuntu.com/ubuntu/ trusty-updates/main grub-pc amd64 2.02~beta2-9ubuntu1 [173 kB] -Get:242 http://archive.ubuntu.com/ubuntu/ trusty/main grub-gfxpayload-lists amd64 0.6 [3506 B] -Get:243 http://archive.ubuntu.com/ubuntu/ trusty/main iw amd64 3.4-1 [51.7 kB] -Get:244 http://archive.ubuntu.com/ubuntu/ trusty/main libalgorithm-diff-perl all 1.19.02-3 [50.0 kB] -Get:245 http://archive.ubuntu.com/ubuntu/ trusty/main libalgorithm-diff-xs-perl amd64 0.04-2build4 [12.6 kB] -Get:246 http://archive.ubuntu.com/ubuntu/ trusty/main libalgorithm-merge-perl all 0.08-2 [12.7 kB] -Get:247 http://archive.ubuntu.com/ubuntu/ trusty-updates/main libaugeas0 amd64 1.2.0-0ubuntu1.1 [135 kB] -Get:248 http://archive.ubuntu.com/ubuntu/ trusty/main libfile-fcntllock-perl amd64 0.14-2build1 [15.9 kB] -Get:249 http://archive.ubuntu.com/ubuntu/ trusty/main libjs-jquery all 1.7.2+dfsg-2ubuntu1 [78.8 kB] -Get:250 http://archive.ubuntu.com/ubuntu/ trusty/main libjs-underscore all 1.4.4-2ubuntu1 [45.6 kB] -Get:251 http://archive.ubuntu.com/ubuntu/ trusty-updates/main libjs-sphinxdoc all 1.2.2+dfsg-1ubuntu1.1 [41.4 kB] -Get:252 http://archive.ubuntu.com/ubuntu/ trusty-updates/main linux-firmware all 1.127.11 [19.9 MB] -Get:253 http://archive.ubuntu.com/ubuntu/ trusty-updates/multiverse linux-firmware-nonfree all 1.14ubuntu3 [2436 kB] -Get:254 http://archive.ubuntu.com/ubuntu/ trusty-security/main linux-headers-3.13.0-49 all 3.13.0-49.83 [8878 kB] -Get:255 http://archive.ubuntu.com/ubuntu/ trusty-security/main linux-headers-3.13.0-49-generic amd64 3.13.0-49.83 [699 kB] -Get:256 http://archive.ubuntu.com/ubuntu/ trusty-security/main linux-headers-generic amd64 3.13.0.49.56 [2790 B] -Get:257 http://archive.ubuntu.com/ubuntu/ trusty-security/main linux-headers-generic-lts-trusty amd64 3.13.0.49.56 [1786 B] -Get:258 http://archive.ubuntu.com/ubuntu/ trusty-security/main linux-image-extra-3.13.0-49-generic amd64 3.13.0-49.83 [36.8 MB] -Get:259 http://archive.ubuntu.com/ubuntu/ trusty-security/main linux-image-generic amd64 3.13.0.49.56 [2804 B] -Get:260 http://archive.ubuntu.com/ubuntu/ trusty-security/main linux-image-generic-lts-trusty amd64 3.13.0.49.56 [1782 B] -Get:261 http://archive.ubuntu.com/ubuntu/ trusty/main watershed amd64 7 [11.4 kB] -Get:262 http://archive.ubuntu.com/ubuntu/ trusty/main lvm2 amd64 2.02.98-6ubuntu2 [470 kB] -Get:263 http://archive.ubuntu.com/ubuntu/ trusty/main manpages-dev all 3.54-1ubuntu1 [1820 kB] -Get:264 http://archive.ubuntu.com/ubuntu/ trusty-updates/main mdadm amd64 3.2.5-5ubuntu4.1 [362 kB] -Get:265 http://archive.ubuntu.com/ubuntu/ trusty/universe python-pypcap amd64 1.1.2+debian-2.2 [25.8 kB] -Get:266 http://archive.ubuntu.com/ubuntu/ trusty/main vlan amd64 1.9-3ubuntu10 [30.3 kB] -Get:267 http://archive.ubuntu.com/ubuntu/ trusty/universe python-scapy all 2.2.0-1 [236 kB] -Get:268 http://archive.ubuntu.com/ubuntu/ trusty-security/main python-yaml amd64 3.10-4ubuntu0.1 [102 kB] -Get:269 http://archive.ubuntu.com/ubuntu/ trusty/main ncurses-term all 5.9+20140118-1ubuntu1 [243 kB] -Get:270 http://archive.ubuntu.com/ubuntu/ trusty/universe ruby-ipaddress all 0.8.0-2 [26.9 kB] -Get:271 http://archive.ubuntu.com/ubuntu/ trusty/universe ruby-sigar amd64 0.7.2-2 [82.5 kB] -Get:272 http://archive.ubuntu.com/ubuntu/ trusty/universe ruby-mixlib-config all 2.1.0-1 [9568 B] -Get:273 http://archive.ubuntu.com/ubuntu/ trusty/universe ruby-mixlib-log all 1.4.1-1 [6438 B] -Get:274 http://archive.ubuntu.com/ubuntu/ trusty/universe ruby-systemu all 2.6.0-1 [8616 B] -Get:275 http://archive.ubuntu.com/ubuntu/ trusty/universe ruby-yajl amd64 1.2.0-1 [37.5 kB] -Get:276 http://archive.ubuntu.com/ubuntu/ trusty/universe ruby-mixlib-cli all 1.4.0-1 [7210 B] -Get:277 http://archive.ubuntu.com/ubuntu/ trusty/universe ohai all 6.14.0-2 [66.8 kB] -Get:278 http://archive.ubuntu.com/ubuntu/ trusty-updates/main openssh-sftp-server amd64 1:6.6p1-2ubuntu2 [34.1 kB] -Get:279 http://archive.ubuntu.com/ubuntu/ trusty-updates/main openssh-server amd64 1:6.6p1-2ubuntu2 [319 kB] -Get:280 http://archive.ubuntu.com/ubuntu/ trusty/main os-prober amd64 1.63ubuntu1 [18.1 kB] -Get:281 http://archive.ubuntu.com/ubuntu/ trusty/main ssl-cert all 1.0.33 [16.6 kB] -Get:282 http://archive.ubuntu.com/ubuntu/ trusty-updates/main postfix amd64 2.11.0-1ubuntu1 [1084 kB] -Get:283 http://archive.ubuntu.com/ubuntu/ trusty/main ruby-augeas amd64 0.5.0-2 [13.2 kB] -Get:284 http://archive.ubuntu.com/ubuntu/ trusty/main ruby-safe-yaml all 1.0.1-1 [16.1 kB] -Get:285 http://archive.ubuntu.com/ubuntu/ trusty/main ruby-shadow amd64 2.2.0-1 [11.2 kB] -Get:286 http://archive.ubuntu.com/ubuntu/ trusty-updates/main puppet-common all 3.4.3-1ubuntu1 [830 kB] -Get:287 http://archive.ubuntu.com/ubuntu/ trusty-updates/main puppet all 3.4.3-1ubuntu1 [12.4 kB] -Get:288 http://archive.ubuntu.com/ubuntu/ trusty/main python-chardet all 2.0.1-2build2 [106 kB] -Get:289 http://archive.ubuntu.com/ubuntu/ trusty/main python-cheetah amd64 2.4.4-3.fakesyncbuild1 [144 kB] -Get:290 http://archive.ubuntu.com/ubuntu/ trusty/main python-configobj all 4.7.2+ds-5build1 [174 kB] -Get:291 http://archive.ubuntu.com/ubuntu/ trusty/main python-oauth all 1.0.1-3build2 [12.8 kB] -Get:292 http://archive.ubuntu.com/ubuntu/ trusty-updates/main python-urllib3 all 1.7.1-1ubuntu3 [39.4 kB] -Get:293 http://archive.ubuntu.com/ubuntu/ trusty-security/main python-requests all 2.2.1-1ubuntu0.2 [43.0 kB] -Get:294 http://archive.ubuntu.com/ubuntu/ trusty/main python-serial all 2.6-1build1 [60.1 kB] -Get:295 http://archive.ubuntu.com/ubuntu/ trusty/main python3-pycurl amd64 7.19.3-0ubuntu3 [47.5 kB] -Get:296 http://archive.ubuntu.com/ubuntu/ trusty-updates/main unattended-upgrades all 0.82.1ubuntu2.2 [25.4 kB] -Get:297 http://archive.ubuntu.com/ubuntu/ trusty-updates/main python3-software-properties all 0.92.37.3 [19.1 kB] -Get:298 http://archive.ubuntu.com/ubuntu/ trusty/main ruby-rgen all 0.6.6-1 [68.7 kB] -Get:299 http://archive.ubuntu.com/ubuntu/ trusty/universe ruby-stomp all 1.3.2-1 [39.0 kB] -Get:300 http://archive.ubuntu.com/ubuntu/ trusty-updates/main software-properties-common all 0.92.37.3 [9376 B] -Get:301 http://archive.ubuntu.com/ubuntu/ trusty/main tcpd amd64 7.6.q-25 [23.0 kB] -Get:302 http://archive.ubuntu.com/ubuntu/ trusty/main vim-runtime all 2:7.4.052-1ubuntu3 [4888 kB] -Get:303 http://archive.ubuntu.com/ubuntu/ trusty/main vim amd64 2:7.4.052-1ubuntu3 [956 kB] -Get:304 http://archive.ubuntu.com/ubuntu/ trusty-updates/main cloud-guest-utils all 0.27-0ubuntu9.1 [13.8 kB] -Get:305 http://archive.ubuntu.com/ubuntu/ trusty-updates/main cloud-init all 0.7.5-0ubuntu1.5 [193 kB] -Get:306 http://archive.ubuntu.com/ubuntu/ trusty/main gdisk amd64 0.8.8-1build1 [186 kB] -Get:307 http://archive.ubuntu.com/ubuntu/ trusty/main ssh-import-id all 3.21-0ubuntu1 [9624 B] -Get:308 http://archive.ubuntu.com/ubuntu/ trusty/universe virt-what amd64 1.13-1 [13.6 kB] -Preconfiguring packages ... -Fetched 172 MB in 1min 36s (1780 kB/s) -(Reading database ... 11517 files and directories currently installed.) -Preparing to unpack .../libc6_2.19-0ubuntu6.6_amd64.deb ... -Unpacking libc6:amd64 (2.19-0ubuntu6.6) over (2.19-0ubuntu6) ... -Setting up libc6:amd64 (2.19-0ubuntu6.6) ... -Processing triggers for libc-bin (2.19-0ubuntu6) ... -Selecting previously unselected package install-info. -(Reading database ... 11517 files and directories currently installed.) -Preparing to unpack .../install-info_5.2.0.dfsg.1-2_amd64.deb ... -Unpacking install-info (5.2.0.dfsg.1-2) ... -Setting up install-info (5.2.0.dfsg.1-2) ... -Selecting previously unselected package bash-completion. -(Reading database ... 11530 files and directories currently installed.) -Preparing to unpack .../bash-completion_1%3a2.1-4_all.deb ... -Unpacking bash-completion (1:2.1-4) ... -Selecting previously unselected package iso-codes. -Preparing to unpack .../iso-codes_3.52-1_all.deb ... -Unpacking iso-codes (3.52-1) ... -Selecting previously unselected package libpython2.7-minimal:amd64. -Preparing to unpack .../libpython2.7-minimal_2.7.6-8_amd64.deb ... -Unpacking libpython2.7-minimal:amd64 (2.7.6-8) ... -Selecting previously unselected package python2.7-minimal. -Preparing to unpack .../python2.7-minimal_2.7.6-8_amd64.deb ... -Unpacking python2.7-minimal (2.7.6-8) ... -Selecting previously unselected package libpython2.7-stdlib:amd64. -Preparing to unpack .../libpython2.7-stdlib_2.7.6-8_amd64.deb ... -Unpacking libpython2.7-stdlib:amd64 (2.7.6-8) ... -Selecting previously unselected package python2.7. -Preparing to unpack .../python2.7_2.7.6-8_amd64.deb ... -Unpacking python2.7 (2.7.6-8) ... -Selecting previously unselected package python-minimal. -Preparing to unpack .../python-minimal_2.7.5-5ubuntu3_amd64.deb ... -Unpacking python-minimal (2.7.5-5ubuntu3) ... -Selecting previously unselected package libpython-stdlib:amd64. -Preparing to unpack .../libpython-stdlib_2.7.5-5ubuntu3_amd64.deb ... -Unpacking libpython-stdlib:amd64 (2.7.5-5ubuntu3) ... -Selecting previously unselected package python. -Preparing to unpack .../python_2.7.5-5ubuntu3_amd64.deb ... -Unpacking python (2.7.5-5ubuntu3) ... -Selecting previously unselected package python-apt-common. -Preparing to unpack .../python-apt-common_0.9.3.5ubuntu1_all.deb ... -Unpacking python-apt-common (0.9.3.5ubuntu1) ... -Selecting previously unselected package python3-apt. -Preparing to unpack .../python3-apt_0.9.3.5ubuntu1_amd64.deb ... -Unpacking python3-apt (0.9.3.5ubuntu1) ... -Selecting previously unselected package libglib2.0-0:amd64. -Preparing to unpack .../libglib2.0-0_2.40.2-0ubuntu1_amd64.deb ... -Unpacking libglib2.0-0:amd64 (2.40.2-0ubuntu1) ... -Selecting previously unselected package libdbus-glib-1-2:amd64. -Preparing to unpack .../libdbus-glib-1-2_0.100.2-1_amd64.deb ... -Unpacking libdbus-glib-1-2:amd64 (0.100.2-1) ... -Selecting previously unselected package python3-dbus. -Preparing to unpack .../python3-dbus_1.2.0-2build2_amd64.deb ... -Unpacking python3-dbus (1.2.0-2build2) ... -Selecting previously unselected package libapparmor1:amd64. -Preparing to unpack .../libapparmor1_2.8.95~2430-0ubuntu5.1_amd64.deb ... -Unpacking libapparmor1:amd64 (2.8.95~2430-0ubuntu5.1) ... -Selecting previously unselected package libsystemd-login0:amd64. -Preparing to unpack .../libsystemd-login0_204-5ubuntu20.11_amd64.deb ... -Unpacking libsystemd-login0:amd64 (204-5ubuntu20.11) ... -Selecting previously unselected package dbus. -Preparing to unpack .../dbus_1.6.18-0ubuntu4.3_amd64.deb ... -Unpacking dbus (1.6.18-0ubuntu4.3) ... -Selecting previously unselected package libgck-1-0:amd64. -Preparing to unpack .../libgck-1-0_3.10.1-1_amd64.deb ... -Unpacking libgck-1-0:amd64 (3.10.1-1) ... -Selecting previously unselected package libgcr-3-common. -Preparing to unpack .../libgcr-3-common_3.10.1-1_all.deb ... -Unpacking libgcr-3-common (3.10.1-1) ... -Selecting previously unselected package libgcr-base-3-1:amd64. -Preparing to unpack .../libgcr-base-3-1_3.10.1-1_amd64.deb ... -Unpacking libgcr-base-3-1:amd64 (3.10.1-1) ... -Selecting previously unselected package libaccountsservice0:amd64. -Preparing to unpack .../libaccountsservice0_0.6.35-0ubuntu7.1_amd64.deb ... -Unpacking libaccountsservice0:amd64 (0.6.35-0ubuntu7.1) ... -Selecting previously unselected package libpolkit-gobject-1-0:amd64. -Preparing to unpack .../libpolkit-gobject-1-0_0.105-4ubuntu2.14.04.1_amd64.deb ... -Unpacking libpolkit-gobject-1-0:amd64 (0.105-4ubuntu2.14.04.1) ... -Selecting previously unselected package accountsservice. -Preparing to unpack .../accountsservice_0.6.35-0ubuntu7.1_amd64.deb ... -Unpacking accountsservice (0.6.35-0ubuntu7.1) ... -Selecting previously unselected package language-selector-common. -Preparing to unpack .../language-selector-common_0.129.3_all.deb ... -Unpacking language-selector-common (0.129.3) ... -Selecting previously unselected package libroken18-heimdal:amd64. -Preparing to unpack .../libroken18-heimdal_1.6~git20131207+dfsg-1ubuntu1.1_amd64.deb ... -Unpacking libroken18-heimdal:amd64 (1.6~git20131207+dfsg-1ubuntu1.1) ... -Selecting previously unselected package libasn1-8-heimdal:amd64. -Preparing to unpack .../libasn1-8-heimdal_1.6~git20131207+dfsg-1ubuntu1.1_amd64.deb ... -Unpacking libasn1-8-heimdal:amd64 (1.6~git20131207+dfsg-1ubuntu1.1) ... -Selecting previously unselected package libasprintf0c2:amd64. -Preparing to unpack .../libasprintf0c2_0.18.3.1-1ubuntu3_amd64.deb ... -Unpacking libasprintf0c2:amd64 (0.18.3.1-1ubuntu3) ... -Selecting previously unselected package libcap-ng0. -Preparing to unpack .../libcap-ng0_0.7.3-1ubuntu2_amd64.deb ... -Unpacking libcap-ng0 (0.7.3-1ubuntu2) ... -Selecting previously unselected package libkrb5support0:amd64. -Preparing to unpack .../libkrb5support0_1.12+dfsg-2ubuntu5.1_amd64.deb ... -Unpacking libkrb5support0:amd64 (1.12+dfsg-2ubuntu5.1) ... -Selecting previously unselected package libk5crypto3:amd64. -Preparing to unpack .../libk5crypto3_1.12+dfsg-2ubuntu5.1_amd64.deb ... -Unpacking libk5crypto3:amd64 (1.12+dfsg-2ubuntu5.1) ... -Selecting previously unselected package libkeyutils1:amd64. -Preparing to unpack .../libkeyutils1_1.5.6-1_amd64.deb ... -Unpacking libkeyutils1:amd64 (1.5.6-1) ... -Selecting previously unselected package libkrb5-3:amd64. -Preparing to unpack .../libkrb5-3_1.12+dfsg-2ubuntu5.1_amd64.deb ... -Unpacking libkrb5-3:amd64 (1.12+dfsg-2ubuntu5.1) ... -Selecting previously unselected package libgssapi-krb5-2:amd64. -Preparing to unpack .../libgssapi-krb5-2_1.12+dfsg-2ubuntu5.1_amd64.deb ... -Unpacking libgssapi-krb5-2:amd64 (1.12+dfsg-2ubuntu5.1) ... -Selecting previously unselected package libidn11:amd64. -Preparing to unpack .../libidn11_1.28-1ubuntu2_amd64.deb ... -Unpacking libidn11:amd64 (1.28-1ubuntu2) ... -Selecting previously unselected package libhcrypto4-heimdal:amd64. -Preparing to unpack .../libhcrypto4-heimdal_1.6~git20131207+dfsg-1ubuntu1.1_amd64.deb ... -Unpacking libhcrypto4-heimdal:amd64 (1.6~git20131207+dfsg-1ubuntu1.1) ... -Selecting previously unselected package libheimbase1-heimdal:amd64. -Preparing to unpack .../libheimbase1-heimdal_1.6~git20131207+dfsg-1ubuntu1.1_amd64.deb ... -Unpacking libheimbase1-heimdal:amd64 (1.6~git20131207+dfsg-1ubuntu1.1) ... -Selecting previously unselected package libwind0-heimdal:amd64. -Preparing to unpack .../libwind0-heimdal_1.6~git20131207+dfsg-1ubuntu1.1_amd64.deb ... -Unpacking libwind0-heimdal:amd64 (1.6~git20131207+dfsg-1ubuntu1.1) ... -Selecting previously unselected package libhx509-5-heimdal:amd64. -Preparing to unpack .../libhx509-5-heimdal_1.6~git20131207+dfsg-1ubuntu1.1_amd64.deb ... -Unpacking libhx509-5-heimdal:amd64 (1.6~git20131207+dfsg-1ubuntu1.1) ... -Selecting previously unselected package libkrb5-26-heimdal:amd64. -Preparing to unpack .../libkrb5-26-heimdal_1.6~git20131207+dfsg-1ubuntu1.1_amd64.deb ... -Unpacking libkrb5-26-heimdal:amd64 (1.6~git20131207+dfsg-1ubuntu1.1) ... -Selecting previously unselected package libheimntlm0-heimdal:amd64. -Preparing to unpack .../libheimntlm0-heimdal_1.6~git20131207+dfsg-1ubuntu1.1_amd64.deb ... -Unpacking libheimntlm0-heimdal:amd64 (1.6~git20131207+dfsg-1ubuntu1.1) ... -Selecting previously unselected package libgssapi3-heimdal:amd64. -Preparing to unpack .../libgssapi3-heimdal_1.6~git20131207+dfsg-1ubuntu1.1_amd64.deb ... -Unpacking libgssapi3-heimdal:amd64 (1.6~git20131207+dfsg-1ubuntu1.1) ... -Selecting previously unselected package libsasl2-modules-db:amd64. -Preparing to unpack .../libsasl2-modules-db_2.1.25.dfsg1-17build1_amd64.deb ... -Unpacking libsasl2-modules-db:amd64 (2.1.25.dfsg1-17build1) ... -Selecting previously unselected package libsasl2-2:amd64. -Preparing to unpack .../libsasl2-2_2.1.25.dfsg1-17build1_amd64.deb ... -Unpacking libsasl2-2:amd64 (2.1.25.dfsg1-17build1) ... -Selecting previously unselected package libldap-2.4-2:amd64. -Preparing to unpack .../libldap-2.4-2_2.4.31-1+nmu2ubuntu8_amd64.deb ... -Unpacking libldap-2.4-2:amd64 (2.4.31-1+nmu2ubuntu8) ... -Selecting previously unselected package librtmp0:amd64. -Preparing to unpack .../librtmp0_2.4+20121230.gitdf6c518-1_amd64.deb ... -Unpacking librtmp0:amd64 (2.4+20121230.gitdf6c518-1) ... -Selecting previously unselected package libcurl3-gnutls:amd64. -Preparing to unpack .../libcurl3-gnutls_7.35.0-1ubuntu2.3_amd64.deb ... -Unpacking libcurl3-gnutls:amd64 (7.35.0-1ubuntu2.3) ... -Selecting previously unselected package libedit2:amd64. -Preparing to unpack .../libedit2_3.1-20130712-2_amd64.deb ... -Unpacking libedit2:amd64 (3.1-20130712-2) ... -Selecting previously unselected package libelf1:amd64. -Preparing to unpack .../libelf1_0.158-0ubuntu5.2_amd64.deb ... -Unpacking libelf1:amd64 (0.158-0ubuntu5.2) ... -Selecting previously unselected package libfuse2:amd64. -Preparing to unpack .../libfuse2_2.9.2-4ubuntu4_amd64.deb ... -Unpacking libfuse2:amd64 (2.9.2-4ubuntu4) ... -Selecting previously unselected package libgeoip1:amd64. -Preparing to unpack .../libgeoip1_1.6.0-1_amd64.deb ... -Unpacking libgeoip1:amd64 (1.6.0-1) ... -Selecting previously unselected package libnfnetlink0:amd64. -Preparing to unpack .../libnfnetlink0_1.0.1-2_amd64.deb ... -Unpacking libnfnetlink0:amd64 (1.0.1-2) ... -Selecting previously unselected package libnuma1:amd64. -Preparing to unpack .../libnuma1_2.0.9~rc5-1ubuntu3_amd64.deb ... -Unpacking libnuma1:amd64 (2.0.9~rc5-1ubuntu3) ... -Selecting previously unselected package libsystemd-daemon0:amd64. -Preparing to unpack .../libsystemd-daemon0_204-5ubuntu20.11_amd64.deb ... -Unpacking libsystemd-daemon0:amd64 (204-5ubuntu20.11) ... -Selecting previously unselected package systemd-shim. -Preparing to unpack .../systemd-shim_6-2bzr1_amd64.deb ... -Adding 'diversion of /usr/share/dbus-1/system-services/org.freedesktop.systemd1.service to /usr/share/dbus-1/system-services/org.freedesktop.systemd1.service.systemd by systemd-shim' -Unpacking systemd-shim (6-2bzr1) ... -Selecting previously unselected package systemd-services. -Preparing to unpack .../systemd-services_204-5ubuntu20.11_amd64.deb ... -Unpacking systemd-services (204-5ubuntu20.11) ... -Selecting previously unselected package libpam-systemd:amd64. -Preparing to unpack .../libpam-systemd_204-5ubuntu20.11_amd64.deb ... -Unpacking libpam-systemd:amd64 (204-5ubuntu20.11) ... -Selecting previously unselected package libparted0debian1:amd64. -Preparing to unpack .../libparted0debian1_2.3-19ubuntu1_amd64.deb ... -Unpacking libparted0debian1:amd64 (2.3-19ubuntu1) ... -Selecting previously unselected package libpcap0.8:amd64. -Preparing to unpack .../libpcap0.8_1.5.3-2_amd64.deb ... -Unpacking libpcap0.8:amd64 (1.5.3-2) ... -Selecting previously unselected package libpci3:amd64. -Preparing to unpack .../libpci3_1%3a3.2.1-1ubuntu5_amd64.deb ... -Unpacking libpci3:amd64 (1:3.2.1-1ubuntu5) ... -Selecting previously unselected package libpipeline1:amd64. -Preparing to unpack .../libpipeline1_1.3.0-1_amd64.deb ... -Unpacking libpipeline1:amd64 (1.3.0-1) ... -Selecting previously unselected package libusb-1.0-0:amd64. -Preparing to unpack .../libusb-1.0-0_2%3a1.0.17-1ubuntu2_amd64.deb ... -Unpacking libusb-1.0-0:amd64 (2:1.0.17-1ubuntu2) ... -Selecting previously unselected package libxau6:amd64. -Preparing to unpack .../libxau6_1%3a1.0.8-1_amd64.deb ... -Unpacking libxau6:amd64 (1:1.0.8-1) ... -Selecting previously unselected package libxdmcp6:amd64. -Preparing to unpack .../libxdmcp6_1%3a1.1.1-1_amd64.deb ... -Unpacking libxdmcp6:amd64 (1:1.1.1-1) ... -Selecting previously unselected package libxcb1:amd64. -Preparing to unpack .../libxcb1_1.10-2ubuntu1_amd64.deb ... -Unpacking libxcb1:amd64 (1.10-2ubuntu1) ... -Selecting previously unselected package libx11-data. -Preparing to unpack .../libx11-data_2%3a1.6.2-1ubuntu2_all.deb ... -Unpacking libx11-data (2:1.6.2-1ubuntu2) ... -Selecting previously unselected package libx11-6:amd64. -Preparing to unpack .../libx11-6_2%3a1.6.2-1ubuntu2_amd64.deb ... -Unpacking libx11-6:amd64 (2:1.6.2-1ubuntu2) ... -Selecting previously unselected package libxext6:amd64. -Preparing to unpack .../libxext6_2%3a1.3.2-1ubuntu0.0.14.04.1_amd64.deb ... -Unpacking libxext6:amd64 (2:1.3.2-1ubuntu0.0.14.04.1) ... -Selecting previously unselected package libxml2:amd64. -Preparing to unpack .../libxml2_2.9.1+dfsg1-3ubuntu4.4_amd64.deb ... -Unpacking libxml2:amd64 (2.9.1+dfsg1-3ubuntu4.4) ... -Selecting previously unselected package libxmuu1:amd64. -Preparing to unpack .../libxmuu1_2%3a1.1.1-1_amd64.deb ... -Unpacking libxmuu1:amd64 (2:1.1.1-1) ... -Selecting previously unselected package groff-base. -Preparing to unpack .../groff-base_1.22.2-5_amd64.deb ... -Unpacking groff-base (1.22.2-5) ... -Selecting previously unselected package bsdmainutils. -Preparing to unpack .../bsdmainutils_9.0.5ubuntu1_amd64.deb ... -Unpacking bsdmainutils (9.0.5ubuntu1) ... -Selecting previously unselected package man-db. -Preparing to unpack .../man-db_2.6.7.1-1ubuntu1_amd64.deb ... -Unpacking man-db (2.6.7.1-1ubuntu1) ... -Selecting previously unselected package fuse. -Preparing to unpack .../fuse_2.9.2-4ubuntu4_amd64.deb ... -Unpacking fuse (2.9.2-4ubuntu4) ... -Processing triggers for mime-support (3.54ubuntu1) ... -Processing triggers for ureadahead (0.100.0-16) ... -Setting up libfuse2:amd64 (2.9.2-4ubuntu4) ... -Setting up fuse (2.9.2-4ubuntu4) ... -Creating fuse group... -Adding group `fuse' (GID 105) ... -Done. -Creating fuse device... -update-initramfs: deferring update (trigger activated) -Processing triggers for libc-bin (2.19-0ubuntu6) ... -Processing triggers for initramfs-tools (0.103ubuntu4) ... -Selecting previously unselected package ntfs-3g. -(Reading database ... 15000 files and directories currently installed.) -Preparing to unpack .../ntfs-3g_1%3a2013.1.13AR.1-2ubuntu2_amd64.deb ... -Unpacking ntfs-3g (1:2013.1.13AR.1-2ubuntu2) ... -Selecting previously unselected package popularity-contest. -Preparing to unpack .../popularity-contest_1.57ubuntu1_all.deb ... -Unpacking popularity-contest (1.57ubuntu1) ... -Selecting previously unselected package sgml-base. -Preparing to unpack .../sgml-base_1.26+nmu4ubuntu1_all.deb ... -Unpacking sgml-base (1.26+nmu4ubuntu1) ... -Selecting previously unselected package libasan0:amd64. -Preparing to unpack .../libasan0_4.8.2-19ubuntu1_amd64.deb ... -Unpacking libasan0:amd64 (4.8.2-19ubuntu1) ... -Selecting previously unselected package libatomic1:amd64. -Preparing to unpack .../libatomic1_4.8.2-19ubuntu1_amd64.deb ... -Unpacking libatomic1:amd64 (4.8.2-19ubuntu1) ... -Selecting previously unselected package libck-connector0:amd64. -Preparing to unpack .../libck-connector0_0.4.5-3.1ubuntu2_amd64.deb ... -Unpacking libck-connector0:amd64 (0.4.5-3.1ubuntu2) ... -Selecting previously unselected package libgmp10:amd64. -Preparing to unpack .../libgmp10_2%3a5.1.3+dfsg-1ubuntu1_amd64.deb ... -Unpacking libgmp10:amd64 (2:5.1.3+dfsg-1ubuntu1) ... -Selecting previously unselected package libisl10:amd64. -Preparing to unpack .../libisl10_0.12.2-1_amd64.deb ... -Unpacking libisl10:amd64 (0.12.2-1) ... -Selecting previously unselected package libcloog-isl4:amd64. -Preparing to unpack .../libcloog-isl4_0.18.2-1_amd64.deb ... -Unpacking libcloog-isl4:amd64 (0.18.2-1) ... -Selecting previously unselected package libcurl3:amd64. -Preparing to unpack .../libcurl3_7.35.0-1ubuntu2.3_amd64.deb ... -Unpacking libcurl3:amd64 (7.35.0-1ubuntu2.3) ... -Selecting previously unselected package libdevmapper-event1.02.1:amd64. -Preparing to unpack .../libdevmapper-event1.02.1_2%3a1.02.77-6ubuntu2_amd64.deb ... -Unpacking libdevmapper-event1.02.1:amd64 (2:1.02.77-6ubuntu2) ... -Selecting previously unselected package libfreetype6:amd64. -Preparing to unpack .../libfreetype6_2.5.2-1ubuntu2.4_amd64.deb ... -Unpacking libfreetype6:amd64 (2.5.2-1ubuntu2.4) ... -Selecting previously unselected package libgomp1:amd64. -Preparing to unpack .../libgomp1_4.8.2-19ubuntu1_amd64.deb ... -Unpacking libgomp1:amd64 (4.8.2-19ubuntu1) ... -Selecting previously unselected package libgpm2:amd64. -Preparing to unpack .../libgpm2_1.20.4-6.1_amd64.deb ... -Unpacking libgpm2:amd64 (1.20.4-6.1) ... -Selecting previously unselected package libicu52:amd64. -Preparing to unpack .../libicu52_52.1-3ubuntu0.2_amd64.deb ... -Unpacking libicu52:amd64 (52.1-3ubuntu0.2) ... -Selecting previously unselected package libitm1:amd64. -Preparing to unpack .../libitm1_4.8.2-19ubuntu1_amd64.deb ... -Unpacking libitm1:amd64 (4.8.2-19ubuntu1) ... -Selecting previously unselected package libmpfr4:amd64. -Preparing to unpack .../libmpfr4_3.1.2-1_amd64.deb ... -Unpacking libmpfr4:amd64 (3.1.2-1) ... -Selecting previously unselected package libnl-3-200:amd64. -Preparing to unpack .../libnl-3-200_3.2.21-1_amd64.deb ... -Unpacking libnl-3-200:amd64 (3.2.21-1) ... -Selecting previously unselected package libnl-genl-3-200:amd64. -Preparing to unpack .../libnl-genl-3-200_3.2.21-1_amd64.deb ... -Unpacking libnl-genl-3-200:amd64 (3.2.21-1) ... -Selecting previously unselected package libopts25:amd64. -Preparing to unpack .../libopts25_1%3a5.18-2ubuntu2_amd64.deb ... -Unpacking libopts25:amd64 (1:5.18-2ubuntu2) ... -Selecting previously unselected package libpython2.7:amd64. -Preparing to unpack .../libpython2.7_2.7.6-8_amd64.deb ... -Unpacking libpython2.7:amd64 (2.7.6-8) ... -Selecting previously unselected package libquadmath0:amd64. -Preparing to unpack .../libquadmath0_4.8.2-19ubuntu1_amd64.deb ... -Unpacking libquadmath0:amd64 (4.8.2-19ubuntu1) ... -Selecting previously unselected package libreadline5:amd64. -Preparing to unpack .../libreadline5_5.2+dfsg-2_amd64.deb ... -Unpacking libreadline5:amd64 (5.2+dfsg-2) ... -Selecting previously unselected package libtsan0:amd64. -Preparing to unpack .../libtsan0_4.8.2-19ubuntu1_amd64.deb ... -Unpacking libtsan0:amd64 (4.8.2-19ubuntu1) ... -Selecting previously unselected package libwrap0:amd64. -Preparing to unpack .../libwrap0_7.6.q-25_amd64.deb ... -Unpacking libwrap0:amd64 (7.6.q-25) ... -Selecting previously unselected package libyaml-0-2:amd64. -Preparing to unpack .../libyaml-0-2_0.1.4-3ubuntu3.1_amd64.deb ... -Unpacking libyaml-0-2:amd64 (0.1.4-3ubuntu3.1) ... -Selecting previously unselected package linux-image-3.13.0-49-generic. -Preparing to unpack .../linux-image-3.13.0-49-generic_3.13.0-49.83_amd64.deb ... -Unpacking linux-image-3.13.0-49-generic (3.13.0-49.83) ... -Selecting previously unselected package ntp. -Preparing to unpack .../ntp_1%3a4.2.6.p5+dfsg-3ubuntu2.14.04.3_amd64.deb ... -Unpacking ntp (1:4.2.6.p5+dfsg-3ubuntu2.14.04.3) ... -Selecting previously unselected package python-pyparsing. -Preparing to unpack .../python-pyparsing_2.0.1+dfsg1-1build1_all.deb ... -Unpacking python-pyparsing (2.0.1+dfsg1-1build1) ... -Selecting previously unselected package python-pkg-resources. -Preparing to unpack .../python-pkg-resources_3.3-1ubuntu1_all.deb ... -Unpacking python-pkg-resources (3.3-1ubuntu1) ... -Selecting previously unselected package python-setuptools. -Preparing to unpack .../python-setuptools_3.3-1ubuntu1_all.deb ... -Unpacking python-setuptools (3.3-1ubuntu1) ... -Selecting previously unselected package python-cmd2. -Preparing to unpack .../python-cmd2_0.6.7-2fakesync1build1_all.deb ... -Unpacking python-cmd2 (0.6.7-2fakesync1build1) ... -Selecting previously unselected package python-json-pointer. -Preparing to unpack .../python-json-pointer_1.0-2build1_all.deb ... -Unpacking python-json-pointer (1.0-2build1) ... -Selecting previously unselected package python-jsonpatch. -Preparing to unpack .../python-jsonpatch_1.3-4_all.deb ... -Unpacking python-jsonpatch (1.3-4) ... -Selecting previously unselected package python-pbr. -Preparing to unpack .../python-pbr_0.10.0-0u~u14.04+mos1_all.deb ... -Unpacking python-pbr (0.10.0-0u~u14.04+mos1) ... -Selecting previously unselected package python-tablib. -Preparing to unpack .../python-tablib_0.9.11-2build1_all.deb ... -Unpacking python-tablib (0.9.11-2build1) ... -Selecting previously unselected package python-prettytable. -Preparing to unpack .../python-prettytable_0.7.2-2ubuntu2_all.deb ... -Unpacking python-prettytable (0.7.2-2ubuntu2) ... -Selecting previously unselected package python-six. -Preparing to unpack .../python-six_1.9.0-1~u14.04+mos1_all.deb ... -Unpacking python-six (1.9.0-1~u14.04+mos1) ... -Selecting previously unselected package python-stevedore. -Preparing to unpack .../python-stevedore_1.1.0-0u~u14.04+mos1_all.deb ... -Unpacking python-stevedore (1.1.0-0u~u14.04+mos1) ... -Selecting previously unselected package python-cliff. -Preparing to unpack .../python-cliff_1.7.0-0u~u14.04+mos1_all.deb ... -Unpacking python-cliff (1.7.0-0u~u14.04+mos1) ... -Selecting previously unselected package cliff-tablib. -Preparing to unpack .../cliff-tablib_1.1-1_all.deb ... -Unpacking cliff-tablib (1.1-1) ... -Selecting previously unselected package libmpc3:amd64. -Preparing to unpack .../libmpc3_1.0.1-1ubuntu1_amd64.deb ... -Unpacking libmpc3:amd64 (1.0.1-1ubuntu1) ... -Selecting previously unselected package libapparmor-perl. -Preparing to unpack .../libapparmor-perl_2.8.95~2430-0ubuntu5.1_amd64.deb ... -Unpacking libapparmor-perl (2.8.95~2430-0ubuntu5.1) ... -Selecting previously unselected package apparmor. -Preparing to unpack .../apparmor_2.8.95~2430-0ubuntu5.1_amd64.deb ... -Unpacking apparmor (2.8.95~2430-0ubuntu5.1) ... -Selecting previously unselected package apt-transport-https. -Preparing to unpack .../apt-transport-https_1.0.1ubuntu2.6_amd64.deb ... -Unpacking apt-transport-https (1.0.1ubuntu2.6) ... -Selecting previously unselected package libisc95. -Preparing to unpack .../libisc95_1%3a9.9.5.dfsg-3ubuntu0.2_amd64.deb ... -Unpacking libisc95 (1:9.9.5.dfsg-3ubuntu0.2) ... -Selecting previously unselected package libdns100. -Preparing to unpack .../libdns100_1%3a9.9.5.dfsg-3ubuntu0.2_amd64.deb ... -Unpacking libdns100 (1:9.9.5.dfsg-3ubuntu0.2) ... -Selecting previously unselected package libisccc90. -Preparing to unpack .../libisccc90_1%3a9.9.5.dfsg-3ubuntu0.2_amd64.deb ... -Unpacking libisccc90 (1:9.9.5.dfsg-3ubuntu0.2) ... -Selecting previously unselected package libisccfg90. -Preparing to unpack .../libisccfg90_1%3a9.9.5.dfsg-3ubuntu0.2_amd64.deb ... -Unpacking libisccfg90 (1:9.9.5.dfsg-3ubuntu0.2) ... -Selecting previously unselected package libbind9-90. -Preparing to unpack .../libbind9-90_1%3a9.9.5.dfsg-3ubuntu0.2_amd64.deb ... -Unpacking libbind9-90 (1:9.9.5.dfsg-3ubuntu0.2) ... -Selecting previously unselected package liblwres90. -Preparing to unpack .../liblwres90_1%3a9.9.5.dfsg-3ubuntu0.2_amd64.deb ... -Unpacking liblwres90 (1:9.9.5.dfsg-3ubuntu0.2) ... -Selecting previously unselected package bind9-host. -Preparing to unpack .../bind9-host_1%3a9.9.5.dfsg-3ubuntu0.2_amd64.deb ... -Unpacking bind9-host (1:9.9.5.dfsg-3ubuntu0.2) ... -Selecting previously unselected package busybox-static. -Preparing to unpack .../busybox-static_1%3a1.21.0-1ubuntu1_amd64.deb ... -Unpacking busybox-static (1:1.21.0-1ubuntu1) ... -Selecting previously unselected package openssl. -Preparing to unpack .../openssl_1.0.1f-1ubuntu2.11_amd64.deb ... -Unpacking openssl (1.0.1f-1ubuntu2.11) ... -Selecting previously unselected package ca-certificates. -Preparing to unpack .../ca-certificates_20141019ubuntu0.14.04.1_all.deb ... -Unpacking ca-certificates (20141019ubuntu0.14.04.1) ... -Selecting previously unselected package command-not-found-data. -Preparing to unpack .../command-not-found-data_0.3ubuntu12_amd64.deb ... -Unpacking command-not-found-data (0.3ubuntu12) ... -Selecting previously unselected package python3-gdbm:amd64. -Preparing to unpack .../python3-gdbm_3.4.0-0ubuntu1_amd64.deb ... -Unpacking python3-gdbm:amd64 (3.4.0-0ubuntu1) ... -Selecting previously unselected package python3-commandnotfound. -Preparing to unpack .../python3-commandnotfound_0.3ubuntu12_all.deb ... -Unpacking python3-commandnotfound (0.3ubuntu12) ... -Selecting previously unselected package command-not-found. -Preparing to unpack .../command-not-found_0.3ubuntu12_all.deb ... -Unpacking command-not-found (0.3ubuntu12) ... -Selecting previously unselected package dmidecode. -Preparing to unpack .../dmidecode_2.12-2_amd64.deb ... -Unpacking dmidecode (2.12-2) ... -Selecting previously unselected package dnsutils. -Preparing to unpack .../dnsutils_1%3a9.9.5.dfsg-3ubuntu0.2_amd64.deb ... -Unpacking dnsutils (1:9.9.5.dfsg-3ubuntu0.2) ... -Selecting previously unselected package dosfstools. -Preparing to unpack .../dosfstools_3.0.26-1_amd64.deb ... -Unpacking dosfstools (3.0.26-1) ... -Selecting previously unselected package ed. -Preparing to unpack .../archives/ed_1.9-2_amd64.deb ... -Unpacking ed (1.9-2) ... -Selecting previously unselected package friendly-recovery. -Preparing to unpack .../friendly-recovery_0.2.25_all.deb ... -Unpacking friendly-recovery (0.2.25) ... -Selecting previously unselected package ftp. -Preparing to unpack .../archives/ftp_0.17-28_amd64.deb ... -Unpacking ftp (0.17-28) ... -Selecting previously unselected package geoip-database. -Preparing to unpack .../geoip-database_20140313-1_all.deb ... -Unpacking geoip-database (20140313-1) ... -Selecting previously unselected package gettext-base. -Preparing to unpack .../gettext-base_0.18.3.1-1ubuntu3_amd64.deb ... -Unpacking gettext-base (0.18.3.1-1ubuntu3) ... -Selecting previously unselected package libgirepository-1.0-1. -Preparing to unpack .../libgirepository-1.0-1_1.40.0-1ubuntu0.2_amd64.deb ... -Unpacking libgirepository-1.0-1 (1.40.0-1ubuntu0.2) ... -Selecting previously unselected package gir1.2-glib-2.0. -Preparing to unpack .../gir1.2-glib-2.0_1.40.0-1ubuntu0.2_amd64.deb ... -Unpacking gir1.2-glib-2.0 (1.40.0-1ubuntu0.2) ... -Selecting previously unselected package hdparm. -Preparing to unpack .../hdparm_9.43-1ubuntu3_amd64.deb ... -Unpacking hdparm (9.43-1ubuntu3) ... -Selecting previously unselected package info. -Preparing to unpack .../info_5.2.0.dfsg.1-2_amd64.deb ... -Unpacking info (5.2.0.dfsg.1-2) ... -Selecting previously unselected package libxtables10. -Preparing to unpack .../libxtables10_1.4.21-1ubuntu1_amd64.deb ... -Unpacking libxtables10 (1.4.21-1ubuntu1) ... -Selecting previously unselected package iptables. -Preparing to unpack .../iptables_1.4.21-1ubuntu1_amd64.deb ... -Unpacking iptables (1.4.21-1ubuntu1) ... -Selecting previously unselected package iputils-tracepath. -Preparing to unpack .../iputils-tracepath_3%3a20121221-4ubuntu1.1_amd64.deb ... -Unpacking iputils-tracepath (3:20121221-4ubuntu1.1) ... -Selecting previously unselected package irqbalance. -Preparing to unpack .../irqbalance_1.0.6-2ubuntu0.14.04.1_amd64.deb ... -Unpacking irqbalance (1.0.6-2ubuntu0.14.04.1) ... -Selecting previously unselected package krb5-locales. -Preparing to unpack .../krb5-locales_1.12+dfsg-2ubuntu5.1_all.deb ... -Unpacking krb5-locales (1.12+dfsg-2ubuntu5.1) ... -Selecting previously unselected package libglib2.0-data. -Preparing to unpack .../libglib2.0-data_2.40.2-0ubuntu1_all.deb ... -Unpacking libglib2.0-data (2.40.2-0ubuntu1) ... -Selecting previously unselected package libsasl2-modules:amd64. -Preparing to unpack .../libsasl2-modules_2.1.25.dfsg1-17build1_amd64.deb ... -Unpacking libsasl2-modules:amd64 (2.1.25.dfsg1-17build1) ... -Selecting previously unselected package lshw. -Preparing to unpack .../lshw_02.16-2ubuntu1.2_amd64.deb ... -Unpacking lshw (02.16-2ubuntu1.2) ... -Selecting previously unselected package lsof. -Preparing to unpack .../lsof_4.86+dfsg-1ubuntu2_amd64.deb ... -Unpacking lsof (4.86+dfsg-1ubuntu2) ... -Selecting previously unselected package ltrace. -Preparing to unpack .../ltrace_0.7.3-4ubuntu5.1_amd64.deb ... -Unpacking ltrace (0.7.3-4ubuntu5.1) ... -Selecting previously unselected package manpages. -Preparing to unpack .../manpages_3.54-1ubuntu1_all.deb ... -Unpacking manpages (3.54-1ubuntu1) ... -Selecting previously unselected package mlocate. -Preparing to unpack .../mlocate_0.26-1ubuntu1_amd64.deb ... -Unpacking mlocate (0.26-1ubuntu1) ... -Selecting previously unselected package mtr-tiny. -Preparing to unpack .../mtr-tiny_0.85-2_amd64.deb ... -Unpacking mtr-tiny (0.85-2) ... -Selecting previously unselected package nano. -Preparing to unpack .../nano_2.2.6-1ubuntu1_amd64.deb ... -Unpacking nano (2.2.6-1ubuntu1) ... -Selecting previously unselected package openssh-client. -Preparing to unpack .../openssh-client_1%3a6.6p1-2ubuntu2_amd64.deb ... -Unpacking openssh-client (1:6.6p1-2ubuntu2) ... -Selecting previously unselected package parted. -Preparing to unpack .../parted_2.3-19ubuntu1_amd64.deb ... -Unpacking parted (2.3-19ubuntu1) ... -Selecting previously unselected package pciutils. -Preparing to unpack .../pciutils_1%3a3.2.1-1ubuntu5_amd64.deb ... -Unpacking pciutils (1:3.2.1-1ubuntu5) ... -Selecting previously unselected package plymouth-theme-ubuntu-text. -Preparing to unpack .../plymouth-theme-ubuntu-text_0.8.8-0ubuntu17.1_amd64.deb ... -Unpacking plymouth-theme-ubuntu-text (0.8.8-0ubuntu17.1) ... -Selecting previously unselected package powermgmt-base. -Preparing to unpack .../powermgmt-base_1.31build1_amd64.deb ... -Unpacking powermgmt-base (1.31build1) ... -Selecting previously unselected package ppp. -Preparing to unpack .../ppp_2.4.5-5.1ubuntu2.1_amd64.deb ... - Removing any system startup links for /etc/init.d/ppp ... -Unpacking ppp (2.4.5-5.1ubuntu2.1) ... -Selecting previously unselected package pppconfig. -Preparing to unpack .../pppconfig_2.3.19ubuntu1_all.deb ... -Unpacking pppconfig (2.3.19ubuntu1) ... -Selecting previously unselected package pppoeconf. -Preparing to unpack .../pppoeconf_1.20ubuntu1_all.deb ... -Unpacking pppoeconf (1.20ubuntu1) ... -Selecting previously unselected package psmisc. -Preparing to unpack .../psmisc_22.20-1ubuntu2_amd64.deb ... -Unpacking psmisc (22.20-1ubuntu2) ... -Selecting previously unselected package python3-update-manager. -Preparing to unpack .../python3-update-manager_1%3a0.196.12_all.deb ... -Unpacking python3-update-manager (1:0.196.12) ... -Selecting previously unselected package python3-distupgrade. -Preparing to unpack .../python3-distupgrade_1%3a0.220.7_all.deb ... -Unpacking python3-distupgrade (1:0.220.7) ... -Selecting previously unselected package python3-gi. -Preparing to unpack .../python3-gi_3.12.0-1ubuntu1_amd64.deb ... -Unpacking python3-gi (3.12.0-1ubuntu1) ... -Selecting previously unselected package rsync. -Preparing to unpack .../rsync_3.1.0-2ubuntu0.1_amd64.deb ... -Unpacking rsync (3.1.0-2ubuntu0.1) ... -Selecting previously unselected package shared-mime-info. -Preparing to unpack .../shared-mime-info_1.2-0ubuntu3_amd64.deb ... -Unpacking shared-mime-info (1.2-0ubuntu3) ... -Selecting previously unselected package strace. -Preparing to unpack .../strace_4.8-1ubuntu5_amd64.deb ... -Unpacking strace (4.8-1ubuntu5) ... -Selecting previously unselected package tcpdump. -Preparing to unpack .../tcpdump_4.5.1-2ubuntu1.1_amd64.deb ... -Unpacking tcpdump (4.5.1-2ubuntu1.1) ... -Selecting previously unselected package telnet. -Preparing to unpack .../telnet_0.17-36build2_amd64.deb ... -Unpacking telnet (0.17-36build2) ... -Selecting previously unselected package time. -Preparing to unpack .../archives/time_1.7-24_amd64.deb ... -Unpacking time (1.7-24) ... -Selecting previously unselected package ubuntu-release-upgrader-core. -Preparing to unpack .../ubuntu-release-upgrader-core_1%3a0.220.7_all.deb ... -Unpacking ubuntu-release-upgrader-core (1:0.220.7) ... -Selecting previously unselected package usbutils. -Preparing to unpack .../usbutils_1%3a007-2ubuntu1_amd64.deb ... -Unpacking usbutils (1:007-2ubuntu1) ... -Selecting previously unselected package wget. -Preparing to unpack .../wget_1.15-1ubuntu1.14.04.1_amd64.deb ... -Unpacking wget (1.15-1ubuntu1.14.04.1) ... -Selecting previously unselected package ubuntu-standard. -Preparing to unpack .../ubuntu-standard_1.325_amd64.deb ... -Unpacking ubuntu-standard (1.325) ... -Selecting previously unselected package ufw. -Preparing to unpack .../ufw_0.34~rc-0ubuntu2_all.deb ... -Unpacking ufw (0.34~rc-0ubuntu2) ... -Selecting previously unselected package update-manager-core. -Preparing to unpack .../update-manager-core_1%3a0.196.12_all.deb ... -Unpacking update-manager-core (1:0.196.12) ... -Selecting previously unselected package uuid-runtime. -Preparing to unpack .../uuid-runtime_2.20.1-5.1ubuntu20.4_amd64.deb ... -Unpacking uuid-runtime (2.20.1-5.1ubuntu20.4) ... -Selecting previously unselected package xauth. -Preparing to unpack .../xauth_1%3a1.0.7-1ubuntu1_amd64.deb ... -Unpacking xauth (1:1.0.7-1ubuntu1) ... -Selecting previously unselected package xml-core. -Preparing to unpack .../xml-core_0.13+nmu2_all.deb ... -Unpacking xml-core (0.13+nmu2) ... -Selecting previously unselected package acl. -Preparing to unpack .../acl_2.2.52-1_amd64.deb ... -Unpacking acl (2.2.52-1) ... -Selecting previously unselected package anacron. -Preparing to unpack .../anacron_2.3-20ubuntu1_amd64.deb ... -Unpacking anacron (2.3-20ubuntu1) ... -Selecting previously unselected package augeas-lenses. -Preparing to unpack .../augeas-lenses_1.2.0-0ubuntu1.1_all.deb ... -Unpacking augeas-lenses (1.2.0-0ubuntu1.1) ... -Selecting previously unselected package binutils. -Preparing to unpack .../binutils_2.24-5ubuntu3.1_amd64.deb ... -Unpacking binutils (2.24-5ubuntu3.1) ... -Selecting previously unselected package bridge-utils. -Preparing to unpack .../bridge-utils_1.5-6ubuntu2_amd64.deb ... -Unpacking bridge-utils (1.5-6ubuntu2) ... -Selecting previously unselected package libc-dev-bin. -Preparing to unpack .../libc-dev-bin_2.19-0ubuntu6.6_amd64.deb ... -Unpacking libc-dev-bin (2.19-0ubuntu6.6) ... -Selecting previously unselected package linux-libc-dev:amd64. -Preparing to unpack .../linux-libc-dev_3.13.0-49.83_amd64.deb ... -Unpacking linux-libc-dev:amd64 (3.13.0-49.83) ... -Selecting previously unselected package libc6-dev:amd64. -Preparing to unpack .../libc6-dev_2.19-0ubuntu6.6_amd64.deb ... -Unpacking libc6-dev:amd64 (2.19-0ubuntu6.6) ... -Selecting previously unselected package cpp-4.8. -Preparing to unpack .../cpp-4.8_4.8.2-19ubuntu1_amd64.deb ... -Unpacking cpp-4.8 (4.8.2-19ubuntu1) ... -Selecting previously unselected package cpp. -Preparing to unpack .../cpp_4%3a4.8.2-1ubuntu6_amd64.deb ... -Unpacking cpp (4:4.8.2-1ubuntu6) ... -Selecting previously unselected package libgcc-4.8-dev:amd64. -Preparing to unpack .../libgcc-4.8-dev_4.8.2-19ubuntu1_amd64.deb ... -Unpacking libgcc-4.8-dev:amd64 (4.8.2-19ubuntu1) ... -Selecting previously unselected package gcc-4.8. -Preparing to unpack .../gcc-4.8_4.8.2-19ubuntu1_amd64.deb ... -Unpacking gcc-4.8 (4.8.2-19ubuntu1) ... -Selecting previously unselected package gcc. -Preparing to unpack .../gcc_4%3a4.8.2-1ubuntu6_amd64.deb ... -Unpacking gcc (4:4.8.2-1ubuntu6) ... -Selecting previously unselected package libstdc++-4.8-dev:amd64. -Preparing to unpack .../libstdc++-4.8-dev_4.8.2-19ubuntu1_amd64.deb ... -Unpacking libstdc++-4.8-dev:amd64 (4.8.2-19ubuntu1) ... -Selecting previously unselected package g++-4.8. -Preparing to unpack .../g++-4.8_4.8.2-19ubuntu1_amd64.deb ... -Unpacking g++-4.8 (4.8.2-19ubuntu1) ... -Selecting previously unselected package g++. -Preparing to unpack .../g++_4%3a4.8.2-1ubuntu6_amd64.deb ... -Unpacking g++ (4:4.8.2-1ubuntu6) ... -Selecting previously unselected package make. -Preparing to unpack .../make_3.81-8.2ubuntu3_amd64.deb ... -Unpacking make (3.81-8.2ubuntu3) ... -Selecting previously unselected package libtimedate-perl. -Preparing to unpack .../libtimedate-perl_2.3000-1_all.deb ... -Unpacking libtimedate-perl (2.3000-1) ... -Selecting previously unselected package libdpkg-perl. -Preparing to unpack .../libdpkg-perl_1.17.5ubuntu5.4_all.deb ... -Unpacking libdpkg-perl (1.17.5ubuntu5.4) ... -Selecting previously unselected package xz-utils. -Preparing to unpack .../xz-utils_5.1.1alpha+20120614-2ubuntu2_amd64.deb ... -Unpacking xz-utils (5.1.1alpha+20120614-2ubuntu2) ... -Selecting previously unselected package patch. -Preparing to unpack .../patch_2.7.1-4ubuntu2_amd64.deb ... -Unpacking patch (2.7.1-4ubuntu2) ... -Selecting previously unselected package dpkg-dev. -Preparing to unpack .../dpkg-dev_1.17.5ubuntu5.4_all.deb ... -Unpacking dpkg-dev (1.17.5ubuntu5.4) ... -Selecting previously unselected package build-essential. -Preparing to unpack .../build-essential_11.6ubuntu6_amd64.deb ... -Unpacking build-essential (11.6ubuntu6) ... -Selecting previously unselected package wireless-regdb. -Preparing to unpack .../wireless-regdb_2013.02.13-1ubuntu1_all.deb ... -Unpacking wireless-regdb (2013.02.13-1ubuntu1) ... -Selecting previously unselected package crda. -Preparing to unpack .../crda_1.1.2-1ubuntu2_amd64.deb ... -Unpacking crda (1.1.2-1ubuntu2) ... -Selecting previously unselected package curl. -Preparing to unpack .../curl_7.35.0-1ubuntu2.3_amd64.deb ... -Unpacking curl (7.35.0-1ubuntu2.3) ... -Selecting previously unselected package debconf-utils. -Preparing to unpack .../debconf-utils_1.5.51ubuntu2_all.deb ... -Unpacking debconf-utils (1.5.51ubuntu2) ... -Selecting previously unselected package eatmydata. -Preparing to unpack .../eatmydata_26-2_amd64.deb ... -Unpacking eatmydata (26-2) ... -Selecting previously unselected package ruby. -Preparing to unpack .../ruby_1%3a1.9.3.4_all.deb ... -Unpacking ruby (1:1.9.3.4) ... -Selecting previously unselected package ruby1.9.1. -Preparing to unpack .../ruby1.9.1_1.9.3.484-2ubuntu1.2_amd64.deb ... -Unpacking ruby1.9.1 (1.9.3.484-2ubuntu1.2) ... -Selecting previously unselected package libruby1.9.1. -Preparing to unpack .../libruby1.9.1_1.9.3.484-2ubuntu1.2_amd64.deb ... -Unpacking libruby1.9.1 (1.9.3.484-2ubuntu1.2) ... -Selecting previously unselected package ruby-json. -Preparing to unpack .../ruby-json_1.8.0-1build1_amd64.deb ... -Unpacking ruby-json (1.8.0-1build1) ... -Selecting previously unselected package facter. -Preparing to unpack .../facter_1.7.5-1ubuntu1_all.deb ... -Unpacking facter (1.7.5-1ubuntu1) ... -Selecting previously unselected package libfakeroot:amd64. -Preparing to unpack .../libfakeroot_1.20-3ubuntu2_amd64.deb ... -Unpacking libfakeroot:amd64 (1.20-3ubuntu2) ... -Selecting previously unselected package fakeroot. -Preparing to unpack .../fakeroot_1.20-3ubuntu2_amd64.deb ... -Unpacking fakeroot (1.20-3ubuntu2) ... -Selecting previously unselected package grub-common. -Preparing to unpack .../grub-common_2.02~beta2-9ubuntu1_amd64.deb ... -Unpacking grub-common (2.02~beta2-9ubuntu1) ... -Selecting previously unselected package grub2-common. -Preparing to unpack .../grub2-common_2.02~beta2-9ubuntu1_amd64.deb ... -Unpacking grub2-common (2.02~beta2-9ubuntu1) ... -Selecting previously unselected package grub-pc-bin. -Preparing to unpack .../grub-pc-bin_2.02~beta2-9ubuntu1_amd64.deb ... -Unpacking grub-pc-bin (2.02~beta2-9ubuntu1) ... -Selecting previously unselected package grub-pc. -Preparing to unpack .../grub-pc_2.02~beta2-9ubuntu1_amd64.deb ... -Unpacking grub-pc (2.02~beta2-9ubuntu1) ... -Selecting previously unselected package grub-gfxpayload-lists. -Preparing to unpack .../grub-gfxpayload-lists_0.6_amd64.deb ... -Unpacking grub-gfxpayload-lists (0.6) ... -Selecting previously unselected package iw. -Preparing to unpack .../archives/iw_3.4-1_amd64.deb ... -Unpacking iw (3.4-1) ... -Selecting previously unselected package libalgorithm-diff-perl. -Preparing to unpack .../libalgorithm-diff-perl_1.19.02-3_all.deb ... -Unpacking libalgorithm-diff-perl (1.19.02-3) ... -Selecting previously unselected package libalgorithm-diff-xs-perl. -Preparing to unpack .../libalgorithm-diff-xs-perl_0.04-2build4_amd64.deb ... -Unpacking libalgorithm-diff-xs-perl (0.04-2build4) ... -Selecting previously unselected package libalgorithm-merge-perl. -Preparing to unpack .../libalgorithm-merge-perl_0.08-2_all.deb ... -Unpacking libalgorithm-merge-perl (0.08-2) ... -Selecting previously unselected package libaugeas0. -Preparing to unpack .../libaugeas0_1.2.0-0ubuntu1.1_amd64.deb ... -Unpacking libaugeas0 (1.2.0-0ubuntu1.1) ... -Selecting previously unselected package libfile-fcntllock-perl. -Preparing to unpack .../libfile-fcntllock-perl_0.14-2build1_amd64.deb ... -Unpacking libfile-fcntllock-perl (0.14-2build1) ... -Selecting previously unselected package libjs-jquery. -Preparing to unpack .../libjs-jquery_1.7.2+dfsg-2ubuntu1_all.deb ... -Unpacking libjs-jquery (1.7.2+dfsg-2ubuntu1) ... -Selecting previously unselected package libjs-underscore. -Preparing to unpack .../libjs-underscore_1.4.4-2ubuntu1_all.deb ... -Unpacking libjs-underscore (1.4.4-2ubuntu1) ... -Selecting previously unselected package libjs-sphinxdoc. -Preparing to unpack .../libjs-sphinxdoc_1.2.2+dfsg-1ubuntu1.1_all.deb ... -Unpacking libjs-sphinxdoc (1.2.2+dfsg-1ubuntu1.1) ... -Selecting previously unselected package linux-firmware. -Preparing to unpack .../linux-firmware_1.127.11_all.deb ... -Unpacking linux-firmware (1.127.11) ... -Selecting previously unselected package linux-firmware-nonfree. -Preparing to unpack .../linux-firmware-nonfree_1.14ubuntu3_all.deb ... -Unpacking linux-firmware-nonfree (1.14ubuntu3) ... -Selecting previously unselected package linux-headers-3.13.0-49. -Preparing to unpack .../linux-headers-3.13.0-49_3.13.0-49.83_all.deb ... -Unpacking linux-headers-3.13.0-49 (3.13.0-49.83) ... -Selecting previously unselected package linux-headers-3.13.0-49-generic. -Preparing to unpack .../linux-headers-3.13.0-49-generic_3.13.0-49.83_amd64.deb ... -Unpacking linux-headers-3.13.0-49-generic (3.13.0-49.83) ... -Selecting previously unselected package linux-headers-generic. -Preparing to unpack .../linux-headers-generic_3.13.0.49.56_amd64.deb ... -Unpacking linux-headers-generic (3.13.0.49.56) ... -Selecting previously unselected package linux-headers-generic-lts-trusty. -Preparing to unpack .../linux-headers-generic-lts-trusty_3.13.0.49.56_amd64.deb ... -Unpacking linux-headers-generic-lts-trusty (3.13.0.49.56) ... -Selecting previously unselected package linux-image-extra-3.13.0-49-generic. -Preparing to unpack .../linux-image-extra-3.13.0-49-generic_3.13.0-49.83_amd64.deb ... -Unpacking linux-image-extra-3.13.0-49-generic (3.13.0-49.83) ... -Selecting previously unselected package linux-image-generic. -Preparing to unpack .../linux-image-generic_3.13.0.49.56_amd64.deb ... -Unpacking linux-image-generic (3.13.0.49.56) ... -Selecting previously unselected package linux-image-generic-lts-trusty. -Preparing to unpack .../linux-image-generic-lts-trusty_3.13.0.49.56_amd64.deb ... -Unpacking linux-image-generic-lts-trusty (3.13.0.49.56) ... -Selecting previously unselected package watershed. -Preparing to unpack .../archives/watershed_7_amd64.deb ... -Unpacking watershed (7) ... -Selecting previously unselected package lvm2. -Preparing to unpack .../lvm2_2.02.98-6ubuntu2_amd64.deb ... -Unpacking lvm2 (2.02.98-6ubuntu2) ... -Selecting previously unselected package manpages-dev. -Preparing to unpack .../manpages-dev_3.54-1ubuntu1_all.deb ... -Unpacking manpages-dev (3.54-1ubuntu1) ... -Selecting previously unselected package mdadm. -Preparing to unpack .../mdadm_3.2.5-5ubuntu4.1_amd64.deb ... -Unpacking mdadm (3.2.5-5ubuntu4.1) ... -Selecting previously unselected package mcollective-common. -Preparing to unpack .../mcollective-common_2.3.1-0~u14.04+mos1_all.deb ... -Unpacking mcollective-common (2.3.1-0~u14.04+mos1) ... -Selecting previously unselected package mcollective. -Preparing to unpack .../mcollective_2.3.1-0~u14.04+mos1_all.deb ... -Unpacking mcollective (2.3.1-0~u14.04+mos1) ... -Selecting previously unselected package nailgun-mcagents. -Preparing to unpack .../nailgun-mcagents_6.0.0-fuel6.1+3_all.deb ... -Unpacking nailgun-mcagents (6.0.0-fuel6.1+3) ... -Selecting previously unselected package python-pypcap. -Preparing to unpack .../python-pypcap_1.1.2+debian-2.2_amd64.deb ... -Unpacking python-pypcap (1.1.2+debian-2.2) ... -Selecting previously unselected package vlan. -Preparing to unpack .../vlan_1.9-3ubuntu10_amd64.deb ... -Unpacking vlan (1.9-3ubuntu10) ... -Selecting previously unselected package python-scapy. -Preparing to unpack .../python-scapy_2.2.0-1_all.deb ... -Unpacking python-scapy (2.2.0-1) ... -Selecting previously unselected package python-daemonize. -Preparing to unpack .../python-daemonize_2.2.1-0x2go1~git20131219.5~u14.04+mos1_all.deb ... -Unpacking python-daemonize (2.2.1-0x2go1~git20131219.5~u14.04+mos1) ... -Selecting previously unselected package python-yaml. -Preparing to unpack .../python-yaml_3.10-4ubuntu0.1_amd64.deb ... -Unpacking python-yaml (3.10-4ubuntu0.1) ... -Selecting previously unselected package nailgun-net-check. -Preparing to unpack .../nailgun-net-check_6.0.0-fuel6.1+4_all.deb ... -Unpacking nailgun-net-check (6.0.0-fuel6.1+4) ... -Selecting previously unselected package ncurses-term. -Preparing to unpack .../ncurses-term_5.9+20140118-1ubuntu1_all.deb ... -Unpacking ncurses-term (5.9+20140118-1ubuntu1) ... -Selecting previously unselected package ruby-ipaddress. -Preparing to unpack .../ruby-ipaddress_0.8.0-2_all.deb ... -Unpacking ruby-ipaddress (0.8.0-2) ... -Selecting previously unselected package ruby-sigar. -Preparing to unpack .../ruby-sigar_0.7.2-2_amd64.deb ... -Unpacking ruby-sigar (0.7.2-2) ... -Selecting previously unselected package ruby-mixlib-config. -Preparing to unpack .../ruby-mixlib-config_2.1.0-1_all.deb ... -Unpacking ruby-mixlib-config (2.1.0-1) ... -Selecting previously unselected package ruby-mixlib-log. -Preparing to unpack .../ruby-mixlib-log_1.4.1-1_all.deb ... -Unpacking ruby-mixlib-log (1.4.1-1) ... -Selecting previously unselected package ruby-systemu. -Preparing to unpack .../ruby-systemu_2.6.0-1_all.deb ... -Unpacking ruby-systemu (2.6.0-1) ... -Selecting previously unselected package ruby-yajl. -Preparing to unpack .../ruby-yajl_1.2.0-1_amd64.deb ... -Unpacking ruby-yajl (1.2.0-1) ... -Selecting previously unselected package ruby-mixlib-cli. -Preparing to unpack .../ruby-mixlib-cli_1.4.0-1_all.deb ... -Unpacking ruby-mixlib-cli (1.4.0-1) ... -Selecting previously unselected package ohai. -Preparing to unpack .../archives/ohai_6.14.0-2_all.deb ... -Unpacking ohai (6.14.0-2) ... -Selecting previously unselected package openssh-sftp-server. -Preparing to unpack .../openssh-sftp-server_1%3a6.6p1-2ubuntu2_amd64.deb ... -Unpacking openssh-sftp-server (1:6.6p1-2ubuntu2) ... -Selecting previously unselected package openssh-server. -Preparing to unpack .../openssh-server_1%3a6.6p1-2ubuntu2_amd64.deb ... -Unpacking openssh-server (1:6.6p1-2ubuntu2) ... -Selecting previously unselected package os-prober. -Preparing to unpack .../os-prober_1.63ubuntu1_amd64.deb ... -Unpacking os-prober (1.63ubuntu1) ... -Selecting previously unselected package ssl-cert. -Preparing to unpack .../ssl-cert_1.0.33_all.deb ... -Unpacking ssl-cert (1.0.33) ... -Selecting previously unselected package postfix. -Preparing to unpack .../postfix_2.11.0-1ubuntu1_amd64.deb ... -Unpacking postfix (2.11.0-1ubuntu1) ... -Selecting previously unselected package ruby-augeas. -Preparing to unpack .../ruby-augeas_0.5.0-2_amd64.deb ... -Unpacking ruby-augeas (0.5.0-2) ... -Selecting previously unselected package ruby-hiera. -Preparing to unpack .../ruby-hiera_1.3.1-1puppetlabs1~mos6.1+2_all.deb ... -Unpacking ruby-hiera (1.3.1-1puppetlabs1~mos6.1+2) ... -Selecting previously unselected package ruby-safe-yaml. -Preparing to unpack .../ruby-safe-yaml_1.0.1-1_all.deb ... -Unpacking ruby-safe-yaml (1.0.1-1) ... -Selecting previously unselected package ruby-shadow. -Preparing to unpack .../ruby-shadow_2.2.0-1_amd64.deb ... -Unpacking ruby-shadow (2.2.0-1) ... -Selecting previously unselected package puppet-common. -Preparing to unpack .../puppet-common_3.4.3-1ubuntu1_all.deb ... -Unpacking puppet-common (3.4.3-1ubuntu1) ... -Selecting previously unselected package puppet. -Preparing to unpack .../puppet_3.4.3-1ubuntu1_all.deb ... -Unpacking puppet (3.4.3-1ubuntu1) ... -Selecting previously unselected package python-chardet. -Preparing to unpack .../python-chardet_2.0.1-2build2_all.deb ... -Unpacking python-chardet (2.0.1-2build2) ... -Selecting previously unselected package python-cheetah. -Preparing to unpack .../python-cheetah_2.4.4-3.fakesyncbuild1_amd64.deb ... -Unpacking python-cheetah (2.4.4-3.fakesyncbuild1) ... -Selecting previously unselected package python-cliff-doc. -Preparing to unpack .../python-cliff-doc_1.7.0-0u~u14.04+mos1_all.deb ... -Unpacking python-cliff-doc (1.7.0-0u~u14.04+mos1) ... -Selecting previously unselected package python-configobj. -Preparing to unpack .../python-configobj_4.7.2+ds-5build1_all.deb ... -Unpacking python-configobj (4.7.2+ds-5build1) ... -Selecting previously unselected package python-oauth. -Preparing to unpack .../python-oauth_1.0.1-3build2_all.deb ... -Unpacking python-oauth (1.0.1-3build2) ... -Selecting previously unselected package python-urllib3. -Preparing to unpack .../python-urllib3_1.7.1-1ubuntu3_all.deb ... -Unpacking python-urllib3 (1.7.1-1ubuntu3) ... -Selecting previously unselected package python-requests. -Preparing to unpack .../python-requests_2.2.1-1ubuntu0.2_all.deb ... -Unpacking python-requests (2.2.1-1ubuntu0.2) ... -Selecting previously unselected package python-serial. -Preparing to unpack .../python-serial_2.6-1build1_all.deb ... -Unpacking python-serial (2.6-1build1) ... -Selecting previously unselected package python3-pycurl. -Preparing to unpack .../python3-pycurl_7.19.3-0ubuntu3_amd64.deb ... -Unpacking python3-pycurl (7.19.3-0ubuntu3) ... -Selecting previously unselected package unattended-upgrades. -Preparing to unpack .../unattended-upgrades_0.82.1ubuntu2.2_all.deb ... -Unpacking unattended-upgrades (0.82.1ubuntu2.2) ... -Selecting previously unselected package python3-software-properties. -Preparing to unpack .../python3-software-properties_0.92.37.3_all.deb ... -Unpacking python3-software-properties (0.92.37.3) ... -Selecting previously unselected package ruby-cstruct. -Preparing to unpack .../ruby-cstruct_1.0.1-1~u14.04+mos1_all.deb ... -Unpacking ruby-cstruct (1.0.1-1~u14.04+mos1) ... -Selecting previously unselected package ruby-httpclient. -Preparing to unpack .../ruby-httpclient_2.3.4.1-1~u14.04+mos1_all.deb ... -Unpacking ruby-httpclient (2.3.4.1-1~u14.04+mos1) ... -Selecting previously unselected package ruby-netaddr. -Preparing to unpack .../ruby-netaddr_1.5.0-1~u14.04+mos1_all.deb ... -Unpacking ruby-netaddr (1.5.0-1~u14.04+mos1) ... -Selecting previously unselected package ruby-openstack. -Preparing to unpack .../ruby-openstack_1.1.1-1~u14.04+mos1_all.deb ... -Unpacking ruby-openstack (1.1.1-1~u14.04+mos1) ... -Selecting previously unselected package ruby-rethtool. -Preparing to unpack .../ruby-rethtool_0.0.5-1~u14.04+mos1_all.deb ... -Unpacking ruby-rethtool (0.0.5-1~u14.04+mos1) ... -Selecting previously unselected package ruby-rgen. -Preparing to unpack .../ruby-rgen_0.6.6-1_all.deb ... -Unpacking ruby-rgen (0.6.6-1) ... -Selecting previously unselected package ruby-stomp. -Preparing to unpack .../ruby-stomp_1.3.2-1_all.deb ... -Unpacking ruby-stomp (1.3.2-1) ... -Selecting previously unselected package software-properties-common. -Preparing to unpack .../software-properties-common_0.92.37.3_all.deb ... -Unpacking software-properties-common (0.92.37.3) ... -Selecting previously unselected package tcpd. -Preparing to unpack .../tcpd_7.6.q-25_amd64.deb ... -Unpacking tcpd (7.6.q-25) ... -Selecting previously unselected package vim-runtime. -Preparing to unpack .../vim-runtime_2%3a7.4.052-1ubuntu3_all.deb ... -Adding 'diversion of /usr/share/vim/vim74/doc/help.txt to /usr/share/vim/vim74/doc/help.txt.vim-tiny by vim-runtime' -Adding 'diversion of /usr/share/vim/vim74/doc/tags to /usr/share/vim/vim74/doc/tags.vim-tiny by vim-runtime' -Unpacking vim-runtime (2:7.4.052-1ubuntu3) ... -Selecting previously unselected package vim. -Preparing to unpack .../vim_2%3a7.4.052-1ubuntu3_amd64.deb ... -Unpacking vim (2:7.4.052-1ubuntu3) ... -Selecting previously unselected package cloud-guest-utils. -Preparing to unpack .../cloud-guest-utils_0.27-0ubuntu9.1_all.deb ... -Unpacking cloud-guest-utils (0.27-0ubuntu9.1) ... -Selecting previously unselected package cloud-init. -Preparing to unpack .../cloud-init_0.7.5-0ubuntu1.5_all.deb ... -Unpacking cloud-init (0.7.5-0ubuntu1.5) ... -Selecting previously unselected package daemonize. -Preparing to unpack .../daemonize_1.7.4-1~u14.04+mos1_amd64.deb ... -Unpacking daemonize (1.7.4-1~u14.04+mos1) ... -Selecting previously unselected package gdisk. -Preparing to unpack .../gdisk_0.8.8-1build1_amd64.deb ... -Unpacking gdisk (0.8.8-1build1) ... -Selecting previously unselected package nailgun-agent. -Preparing to unpack .../nailgun-agent_6.0.0-fuel6.1+5_all.deb ... -Unpacking nailgun-agent (6.0.0-fuel6.1+5) ... -Selecting previously unselected package python-amqp. -Preparing to unpack .../python-amqp_1.4.5-0u~u14.04+mos1_all.deb ... -Unpacking python-amqp (1.4.5-0u~u14.04+mos1) ... -Selecting previously unselected package ssh-import-id. -Preparing to unpack .../ssh-import-id_3.21-0ubuntu1_all.deb ... -Unpacking ssh-import-id (3.21-0ubuntu1) ... -Selecting previously unselected package virt-what. -Preparing to unpack .../virt-what_1.13-1_amd64.deb ... -Unpacking virt-what (1.13-1) ... -Processing triggers for initramfs-tools (0.103ubuntu4) ... -Processing triggers for ureadahead (0.100.0-16) ... -Processing triggers for install-info (5.2.0.dfsg.1-2) ... -Processing triggers for mime-support (3.54ubuntu1) ... -Setting up bash-completion (1:2.1-4) ... -Setting up iso-codes (3.52-1) ... -Setting up libpython2.7-minimal:amd64 (2.7.6-8) ... -Setting up python2.7-minimal (2.7.6-8) ... -Setting up libpython2.7-stdlib:amd64 (2.7.6-8) ... -Setting up python2.7 (2.7.6-8) ... -Setting up python-minimal (2.7.5-5ubuntu3) ... -Setting up libpython-stdlib:amd64 (2.7.5-5ubuntu3) ... -Setting up python (2.7.5-5ubuntu3) ... -Setting up python-apt-common (0.9.3.5ubuntu1) ... -Setting up python3-apt (0.9.3.5ubuntu1) ... -Setting up libglib2.0-0:amd64 (2.40.2-0ubuntu1) ... -No schema files found: doing nothing. -Setting up libdbus-glib-1-2:amd64 (0.100.2-1) ... -Setting up python3-dbus (1.2.0-2build2) ... -Setting up libapparmor1:amd64 (2.8.95~2430-0ubuntu5.1) ... -Setting up libsystemd-login0:amd64 (204-5ubuntu20.11) ... -Setting up dbus (1.6.18-0ubuntu4.3) ... -Setting up libgck-1-0:amd64 (3.10.1-1) ... -Setting up libgcr-3-common (3.10.1-1) ... -Setting up libgcr-base-3-1:amd64 (3.10.1-1) ... -Setting up libaccountsservice0:amd64 (0.6.35-0ubuntu7.1) ... -Setting up libpolkit-gobject-1-0:amd64 (0.105-4ubuntu2.14.04.1) ... -Setting up libroken18-heimdal:amd64 (1.6~git20131207+dfsg-1ubuntu1.1) ... -Setting up libasn1-8-heimdal:amd64 (1.6~git20131207+dfsg-1ubuntu1.1) ... -Setting up libasprintf0c2:amd64 (0.18.3.1-1ubuntu3) ... -Setting up libcap-ng0 (0.7.3-1ubuntu2) ... -Setting up libkrb5support0:amd64 (1.12+dfsg-2ubuntu5.1) ... -Setting up libk5crypto3:amd64 (1.12+dfsg-2ubuntu5.1) ... -Setting up libkeyutils1:amd64 (1.5.6-1) ... -Setting up libkrb5-3:amd64 (1.12+dfsg-2ubuntu5.1) ... -Setting up libgssapi-krb5-2:amd64 (1.12+dfsg-2ubuntu5.1) ... -Setting up libidn11:amd64 (1.28-1ubuntu2) ... -Setting up libhcrypto4-heimdal:amd64 (1.6~git20131207+dfsg-1ubuntu1.1) ... -Setting up libheimbase1-heimdal:amd64 (1.6~git20131207+dfsg-1ubuntu1.1) ... -Setting up libwind0-heimdal:amd64 (1.6~git20131207+dfsg-1ubuntu1.1) ... -Setting up libhx509-5-heimdal:amd64 (1.6~git20131207+dfsg-1ubuntu1.1) ... -Setting up libkrb5-26-heimdal:amd64 (1.6~git20131207+dfsg-1ubuntu1.1) ... -Setting up libheimntlm0-heimdal:amd64 (1.6~git20131207+dfsg-1ubuntu1.1) ... -Setting up libgssapi3-heimdal:amd64 (1.6~git20131207+dfsg-1ubuntu1.1) ... -Setting up libsasl2-modules-db:amd64 (2.1.25.dfsg1-17build1) ... -Setting up libsasl2-2:amd64 (2.1.25.dfsg1-17build1) ... -Setting up libldap-2.4-2:amd64 (2.4.31-1+nmu2ubuntu8) ... -Setting up librtmp0:amd64 (2.4+20121230.gitdf6c518-1) ... -Setting up libcurl3-gnutls:amd64 (7.35.0-1ubuntu2.3) ... -Setting up libedit2:amd64 (3.1-20130712-2) ... -Setting up libelf1:amd64 (0.158-0ubuntu5.2) ... -Setting up libgeoip1:amd64 (1.6.0-1) ... -Setting up libnfnetlink0:amd64 (1.0.1-2) ... -Setting up libnuma1:amd64 (2.0.9~rc5-1ubuntu3) ... -Setting up libsystemd-daemon0:amd64 (204-5ubuntu20.11) ... -Setting up systemd-shim (6-2bzr1) ... -Setting up libparted0debian1:amd64 (2.3-19ubuntu1) ... -Setting up libpcap0.8:amd64 (1.5.3-2) ... -Setting up libpci3:amd64 (1:3.2.1-1ubuntu5) ... -Setting up libpipeline1:amd64 (1.3.0-1) ... -Setting up libusb-1.0-0:amd64 (2:1.0.17-1ubuntu2) ... -Setting up libxau6:amd64 (1:1.0.8-1) ... -Setting up libxdmcp6:amd64 (1:1.1.1-1) ... -Setting up libxcb1:amd64 (1.10-2ubuntu1) ... -Setting up libx11-data (2:1.6.2-1ubuntu2) ... -Setting up libx11-6:amd64 (2:1.6.2-1ubuntu2) ... -Setting up libxext6:amd64 (2:1.3.2-1ubuntu0.0.14.04.1) ... -Setting up libxml2:amd64 (2.9.1+dfsg1-3ubuntu4.4) ... -Setting up libxmuu1:amd64 (2:1.1.1-1) ... -Setting up groff-base (1.22.2-5) ... -Setting up bsdmainutils (9.0.5ubuntu1) ... -update-alternatives: using /usr/bin/bsd-write to provide /usr/bin/write (write) in auto mode -update-alternatives: using /usr/bin/bsd-from to provide /usr/bin/from (from) in auto mode -Setting up man-db (2.6.7.1-1ubuntu1) ... -Setting up ntfs-3g (1:2013.1.13AR.1-2ubuntu2) ... -Setting up popularity-contest (1.57ubuntu1) ... -Setting up sgml-base (1.26+nmu4ubuntu1) ... -Setting up libasan0:amd64 (4.8.2-19ubuntu1) ... -Setting up libatomic1:amd64 (4.8.2-19ubuntu1) ... -Setting up libck-connector0:amd64 (0.4.5-3.1ubuntu2) ... -Setting up libgmp10:amd64 (2:5.1.3+dfsg-1ubuntu1) ... -Setting up libisl10:amd64 (0.12.2-1) ... -Setting up libcloog-isl4:amd64 (0.18.2-1) ... -Setting up libcurl3:amd64 (7.35.0-1ubuntu2.3) ... -Setting up libdevmapper-event1.02.1:amd64 (2:1.02.77-6ubuntu2) ... -Setting up libfreetype6:amd64 (2.5.2-1ubuntu2.4) ... -Setting up libgomp1:amd64 (4.8.2-19ubuntu1) ... -Setting up libgpm2:amd64 (1.20.4-6.1) ... -Setting up libicu52:amd64 (52.1-3ubuntu0.2) ... -Setting up libitm1:amd64 (4.8.2-19ubuntu1) ... -Setting up libmpfr4:amd64 (3.1.2-1) ... -Setting up libnl-3-200:amd64 (3.2.21-1) ... -Setting up libnl-genl-3-200:amd64 (3.2.21-1) ... -Setting up libopts25:amd64 (1:5.18-2ubuntu2) ... -Setting up libpython2.7:amd64 (2.7.6-8) ... -Setting up libquadmath0:amd64 (4.8.2-19ubuntu1) ... -Setting up libreadline5:amd64 (5.2+dfsg-2) ... -Setting up libtsan0:amd64 (4.8.2-19ubuntu1) ... -Setting up libwrap0:amd64 (7.6.q-25) ... -Setting up libyaml-0-2:amd64 (0.1.4-3ubuntu3.1) ... -Setting up linux-image-3.13.0-49-generic (3.13.0-49.83) ... -Setting up ntp (1:4.2.6.p5+dfsg-3ubuntu2.14.04.3) ... -Setting up python-pyparsing (2.0.1+dfsg1-1build1) ... -Setting up python-pkg-resources (3.3-1ubuntu1) ... -Setting up python-setuptools (3.3-1ubuntu1) ... -Setting up python-cmd2 (0.6.7-2fakesync1build1) ... -Setting up python-json-pointer (1.0-2build1) ... -Setting up python-jsonpatch (1.3-4) ... -update-alternatives: using /usr/bin/python2-jsondiff to provide /usr/bin/jsondiff (jsondiff) in auto mode -update-alternatives: using /usr/bin/python2-jsonpatch to provide /usr/bin/jsonpatch (jsonpatch) in auto mode -Setting up python-pbr (0.10.0-0u~u14.04+mos1) ... -Setting up python-tablib (0.9.11-2build1) ... -Setting up python-prettytable (0.7.2-2ubuntu2) ... -Setting up python-six (1.9.0-1~u14.04+mos1) ... -Setting up python-stevedore (1.1.0-0u~u14.04+mos1) ... -Setting up python-cliff (1.7.0-0u~u14.04+mos1) ... -Setting up cliff-tablib (1.1-1) ... -Setting up libmpc3:amd64 (1.0.1-1ubuntu1) ... -Setting up libapparmor-perl (2.8.95~2430-0ubuntu5.1) ... -Setting up apparmor (2.8.95~2430-0ubuntu5.1) ... -Setting up apt-transport-https (1.0.1ubuntu2.6) ... -Setting up libisc95 (1:9.9.5.dfsg-3ubuntu0.2) ... -Setting up libdns100 (1:9.9.5.dfsg-3ubuntu0.2) ... -Setting up libisccc90 (1:9.9.5.dfsg-3ubuntu0.2) ... -Setting up libisccfg90 (1:9.9.5.dfsg-3ubuntu0.2) ... -Setting up libbind9-90 (1:9.9.5.dfsg-3ubuntu0.2) ... -Setting up liblwres90 (1:9.9.5.dfsg-3ubuntu0.2) ... -Setting up bind9-host (1:9.9.5.dfsg-3ubuntu0.2) ... -Setting up busybox-static (1:1.21.0-1ubuntu1) ... -Setting up openssl (1.0.1f-1ubuntu2.11) ... -Setting up ca-certificates (20141019ubuntu0.14.04.1) ... -Setting up command-not-found-data (0.3ubuntu12) ... -Setting up python3-gdbm:amd64 (3.4.0-0ubuntu1) ... -Setting up python3-commandnotfound (0.3ubuntu12) ... -Setting up command-not-found (0.3ubuntu12) ... -Setting up dmidecode (2.12-2) ... -Setting up dnsutils (1:9.9.5.dfsg-3ubuntu0.2) ... -Setting up dosfstools (3.0.26-1) ... -Setting up ed (1.9-2) ... -Setting up friendly-recovery (0.2.25) ... -Setting up ftp (0.17-28) ... -update-alternatives: using /usr/bin/netkit-ftp to provide /usr/bin/ftp (ftp) in auto mode -Setting up geoip-database (20140313-1) ... -Setting up gettext-base (0.18.3.1-1ubuntu3) ... -Setting up libgirepository-1.0-1 (1.40.0-1ubuntu0.2) ... -Setting up gir1.2-glib-2.0 (1.40.0-1ubuntu0.2) ... -Setting up hdparm (9.43-1ubuntu3) ... -Setting up info (5.2.0.dfsg.1-2) ... -update-alternatives: using /usr/bin/info to provide /usr/bin/infobrowser (infobrowser) in auto mode -Setting up libxtables10 (1.4.21-1ubuntu1) ... -Setting up iptables (1.4.21-1ubuntu1) ... -Setting up iputils-tracepath (3:20121221-4ubuntu1.1) ... -update-alternatives: using /usr/bin/traceroute6.iputils to provide /usr/bin/traceroute6 (traceroute6) in auto mode -Setting up irqbalance (1.0.6-2ubuntu0.14.04.1) ... -Setting up krb5-locales (1.12+dfsg-2ubuntu5.1) ... -Setting up libglib2.0-data (2.40.2-0ubuntu1) ... -Setting up libsasl2-modules:amd64 (2.1.25.dfsg1-17build1) ... -Setting up lshw (02.16-2ubuntu1.2) ... -Setting up lsof (4.86+dfsg-1ubuntu2) ... -Setting up ltrace (0.7.3-4ubuntu5.1) ... -Setting up manpages (3.54-1ubuntu1) ... -Setting up mlocate (0.26-1ubuntu1) ... -update-alternatives: using /usr/bin/mlocate to provide /usr/bin/locate (locate) in auto mode -Adding group `mlocate' (GID 108) ... -Done. -Setting up mtr-tiny (0.85-2) ... -Setting up nano (2.2.6-1ubuntu1) ... -update-alternatives: using /bin/nano to provide /usr/bin/editor (editor) in auto mode -update-alternatives: using /bin/nano to provide /usr/bin/pico (pico) in auto mode -Setting up openssh-client (1:6.6p1-2ubuntu2) ... -Setting up parted (2.3-19ubuntu1) ... -Setting up pciutils (1:3.2.1-1ubuntu5) ... -Setting up plymouth-theme-ubuntu-text (0.8.8-0ubuntu17.1) ... -update-alternatives: using /lib/plymouth/themes/ubuntu-text/ubuntu-text.plymouth to provide /lib/plymouth/themes/text.plymouth (text.plymouth) in auto mode -update-initramfs: deferring update (trigger activated) -Setting up powermgmt-base (1.31build1) ... -Setting up ppp (2.4.5-5.1ubuntu2.1) ... -Setting up psmisc (22.20-1ubuntu2) ... -Setting up python3-gi (3.12.0-1ubuntu1) ... -Setting up rsync (3.1.0-2ubuntu0.1) ... - Removing any system startup links for /etc/init.d/rsync ... - Adding system startup for /etc/init.d/rsync ... - /etc/rc0.d/K20rsync -> ../init.d/rsync - /etc/rc1.d/K20rsync -> ../init.d/rsync - /etc/rc6.d/K20rsync -> ../init.d/rsync - /etc/rc2.d/S20rsync -> ../init.d/rsync - /etc/rc3.d/S20rsync -> ../init.d/rsync - /etc/rc4.d/S20rsync -> ../init.d/rsync - /etc/rc5.d/S20rsync -> ../init.d/rsync -Setting up shared-mime-info (1.2-0ubuntu3) ... -Setting up strace (4.8-1ubuntu5) ... -Setting up tcpdump (4.5.1-2ubuntu1.1) ... -Setting up telnet (0.17-36build2) ... -update-alternatives: using /usr/bin/telnet.netkit to provide /usr/bin/telnet (telnet) in auto mode -Setting up time (1.7-24) ... -Setting up usbutils (1:007-2ubuntu1) ... -Setting up wget (1.15-1ubuntu1.14.04.1) ... -Setting up ufw (0.34~rc-0ubuntu2) ... -Setting up uuid-runtime (2.20.1-5.1ubuntu20.4) ... -Setting up xauth (1:1.0.7-1ubuntu1) ... -Setting up xml-core (0.13+nmu2) ... -Setting up acl (2.2.52-1) ... -Setting up anacron (2.3-20ubuntu1) ... -Setting up augeas-lenses (1.2.0-0ubuntu1.1) ... -Setting up binutils (2.24-5ubuntu3.1) ... -Setting up bridge-utils (1.5-6ubuntu2) ... -Setting up libc-dev-bin (2.19-0ubuntu6.6) ... -Setting up linux-libc-dev:amd64 (3.13.0-49.83) ... -Setting up libc6-dev:amd64 (2.19-0ubuntu6.6) ... -Setting up cpp-4.8 (4.8.2-19ubuntu1) ... -Setting up cpp (4:4.8.2-1ubuntu6) ... -Setting up libgcc-4.8-dev:amd64 (4.8.2-19ubuntu1) ... -Setting up gcc-4.8 (4.8.2-19ubuntu1) ... -Setting up gcc (4:4.8.2-1ubuntu6) ... -Setting up libstdc++-4.8-dev:amd64 (4.8.2-19ubuntu1) ... -Setting up g++-4.8 (4.8.2-19ubuntu1) ... -Setting up g++ (4:4.8.2-1ubuntu6) ... -update-alternatives: using /usr/bin/g++ to provide /usr/bin/c++ (c++) in auto mode -Setting up make (3.81-8.2ubuntu3) ... -Setting up libtimedate-perl (2.3000-1) ... -Setting up libdpkg-perl (1.17.5ubuntu5.4) ... -Setting up xz-utils (5.1.1alpha+20120614-2ubuntu2) ... -update-alternatives: using /usr/bin/xz to provide /usr/bin/lzma (lzma) in auto mode -Setting up patch (2.7.1-4ubuntu2) ... -Setting up dpkg-dev (1.17.5ubuntu5.4) ... -Setting up build-essential (11.6ubuntu6) ... -Setting up wireless-regdb (2013.02.13-1ubuntu1) ... -Setting up crda (1.1.2-1ubuntu2) ... -Setting up curl (7.35.0-1ubuntu2.3) ... -Setting up debconf-utils (1.5.51ubuntu2) ... -Setting up eatmydata (26-2) ... -Setting up libfakeroot:amd64 (1.20-3ubuntu2) ... -Setting up fakeroot (1.20-3ubuntu2) ... -update-alternatives: using /usr/bin/fakeroot-sysv to provide /usr/bin/fakeroot (fakeroot) in auto mode -Setting up grub-common (2.02~beta2-9ubuntu1) ... -Setting up iw (3.4-1) ... -Setting up libalgorithm-diff-perl (1.19.02-3) ... -Setting up libalgorithm-diff-xs-perl (0.04-2build4) ... -Setting up libalgorithm-merge-perl (0.08-2) ... -Setting up libaugeas0 (1.2.0-0ubuntu1.1) ... -Setting up libfile-fcntllock-perl (0.14-2build1) ... -Setting up libjs-jquery (1.7.2+dfsg-2ubuntu1) ... -Setting up libjs-underscore (1.4.4-2ubuntu1) ... -Setting up libjs-sphinxdoc (1.2.2+dfsg-1ubuntu1.1) ... -Setting up linux-firmware (1.127.11) ... -Setting up linux-firmware-nonfree (1.14ubuntu3) ... -Setting up linux-headers-3.13.0-49 (3.13.0-49.83) ... -Setting up linux-headers-3.13.0-49-generic (3.13.0-49.83) ... -Setting up linux-headers-generic (3.13.0.49.56) ... -Setting up linux-headers-generic-lts-trusty (3.13.0.49.56) ... -Setting up linux-image-extra-3.13.0-49-generic (3.13.0-49.83) ... -Setting up linux-image-generic (3.13.0.49.56) ... -Setting up linux-image-generic-lts-trusty (3.13.0.49.56) ... -Setting up watershed (7) ... -update-initramfs: deferring update (trigger activated) -Setting up lvm2 (2.02.98-6ubuntu2) ... -update-initramfs: deferring update (trigger activated) -Setting up manpages-dev (3.54-1ubuntu1) ... -Setting up mdadm (3.2.5-5ubuntu4.1) ... -Setting up python-pypcap (1.1.2+debian-2.2) ... -Setting up vlan (1.9-3ubuntu10) ... -Setting up python-scapy (2.2.0-1) ... -Setting up python-daemonize (2.2.1-0x2go1~git20131219.5~u14.04+mos1) ... -Setting up python-yaml (3.10-4ubuntu0.1) ... -Setting up nailgun-net-check (6.0.0-fuel6.1+4) ... -Setting up ncurses-term (5.9+20140118-1ubuntu1) ... -Setting up openssh-sftp-server (1:6.6p1-2ubuntu2) ... -Setting up openssh-server (1:6.6p1-2ubuntu2) ... -Setting up os-prober (1.63ubuntu1) ... -Setting up ssl-cert (1.0.33) ... -Setting up postfix (2.11.0-1ubuntu1) ... -Setting up python-chardet (2.0.1-2build2) ... -Setting up python-cheetah (2.4.4-3.fakesyncbuild1) ... -Setting up python-cliff-doc (1.7.0-0u~u14.04+mos1) ... -Setting up python-configobj (4.7.2+ds-5build1) ... -Setting up python-oauth (1.0.1-3build2) ... -Setting up python-urllib3 (1.7.1-1ubuntu3) ... -Setting up python-requests (2.2.1-1ubuntu0.2) ... -Setting up python-serial (2.6-1build1) ... -Setting up python3-pycurl (7.19.3-0ubuntu3) ... -Setting up unattended-upgrades (0.82.1ubuntu2.2) ... -Setting up tcpd (7.6.q-25) ... -Setting up vim-runtime (2:7.4.052-1ubuntu3) ... -Processing /usr/share/vim/addons/doc -Setting up vim (2:7.4.052-1ubuntu3) ... -update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vim (vim) in auto mode -update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vimdiff (vimdiff) in auto mode -update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/rvim (rvim) in auto mode -update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/rview (rview) in auto mode -update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vi (vi) in auto mode -update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/view (view) in auto mode -update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/ex (ex) in auto mode -Setting up cloud-guest-utils (0.27-0ubuntu9.1) ... -Setting up daemonize (1.7.4-1~u14.04+mos1) ... -Setting up gdisk (0.8.8-1build1) ... -Setting up python-amqp (1.4.5-0u~u14.04+mos1) ... -Setting up ssh-import-id (3.21-0ubuntu1) ... -Setting up virt-what (1.13-1) ... -Processing triggers for ureadahead (0.100.0-16) ... -Setting up systemd-services (204-5ubuntu20.11) ... -Setting up libpam-systemd:amd64 (204-5ubuntu20.11) ... -Setting up pppconfig (2.3.19ubuntu1) ... -Setting up pppoeconf (1.20ubuntu1) ... -Setting up grub2-common (2.02~beta2-9ubuntu1) ... -Setting up grub-pc-bin (2.02~beta2-9ubuntu1) ... -Setting up python3-software-properties (0.92.37.3) ... -Setting up software-properties-common (0.92.37.3) ... -Setting up cloud-init (0.7.5-0ubuntu1.5) ... -Setting up accountsservice (0.6.35-0ubuntu7.1) ... -Setting up language-selector-common (0.129.3) ... -Setting up ubuntu-standard (1.325) ... -Processing triggers for ureadahead (0.100.0-16) ... -Setting up grub-gfxpayload-lists (0.6) ... -Setting up python3-distupgrade (1:0.220.7) ... -Setting up ubuntu-release-upgrader-core (1:0.220.7) ... -Setting up ruby (1:1.9.3.4) ... -Setting up ruby1.9.1 (1.9.3.484-2ubuntu1.2) ... -Setting up libruby1.9.1 (1.9.3.484-2ubuntu1.2) ... -Setting up ruby-json (1.8.0-1build1) ... -Setting up facter (1.7.5-1ubuntu1) ... -Setting up grub-pc (2.02~beta2-9ubuntu1) ... -Setting up mcollective-common (2.3.1-0~u14.04+mos1) ... -Setting up mcollective (2.3.1-0~u14.04+mos1) ... -Setting up ruby-ipaddress (0.8.0-2) ... -Setting up ruby-sigar (0.7.2-2) ... -Setting up ruby-mixlib-config (2.1.0-1) ... -Setting up ruby-mixlib-log (1.4.1-1) ... -Setting up ruby-systemu (2.6.0-1) ... -Setting up ruby-yajl (1.2.0-1) ... -Setting up ruby-mixlib-cli (1.4.0-1) ... -Setting up ohai (6.14.0-2) ... -Setting up ruby-augeas (0.5.0-2) ... -Setting up ruby-hiera (1.3.1-1puppetlabs1~mos6.1+2) ... -Setting up ruby-safe-yaml (1.0.1-1) ... -Setting up ruby-shadow (2.2.0-1) ... -Setting up puppet-common (3.4.3-1ubuntu1) ... -Setting up puppet (3.4.3-1ubuntu1) ... -Setting up ruby-cstruct (1.0.1-1~u14.04+mos1) ... -Setting up ruby-httpclient (2.3.4.1-1~u14.04+mos1) ... -Setting up ruby-netaddr (1.5.0-1~u14.04+mos1) ... -Setting up ruby-openstack (1.1.1-1~u14.04+mos1) ... -Setting up ruby-rethtool (0.0.5-1~u14.04+mos1) ... -Setting up ruby-rgen (0.6.6-1) ... -Setting up ruby-stomp (1.3.2-1) ... -Setting up nailgun-agent (6.0.0-fuel6.1+5) ... -Setting up python3-update-manager (1:0.196.12) ... -Setting up update-manager-core (1:0.196.12) ... -Processing triggers for ureadahead (0.100.0-16) ... -Setting up nailgun-mcagents (6.0.0-fuel6.1+3) ... -Processing triggers for libc-bin (2.19-0ubuntu6) ... -Processing triggers for initramfs-tools (0.103ubuntu4) ... -update-initramfs: Generating /boot/initrd.img-3.13.0-49-generic -Processing triggers for ca-certificates (20141019ubuntu0.14.04.1) ... -Updating certificates in /etc/ssl/certs... 173 added, 0 removed; done. -Running hooks in /etc/ca-certificates/update.d....done. -Processing triggers for sgml-base (1.26+nmu4ubuntu1) ... -Processing triggers for ufw (0.34~rc-0ubuntu2) ... - -stderr: -Extracting templates from packages: 9% -Extracting templates from packages: 19% -Extracting templates from packages: 29% -Extracting templates from packages: 38% -Extracting templates from packages: 48% -Extracting templates from packages: 58% -Extracting templates from packages: 68% -Extracting templates from packages: 77% -Extracting templates from packages: 87% -Extracting templates from packages: 97% -Extracting templates from packages: 100% -Done. -invoke-rc.d: policy-rc.d denied execution of start. -Building database of manual pages ... -update-initramfs: deferring update (trigger activated) -Running depmod. -update-initramfs: deferring update (hook will be called later) -Examining /etc/kernel/postinst.d. -run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 3.13.0-49-generic /boot/vmlinuz-3.13.0-49-generic -run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.13.0-49-generic /boot/vmlinuz-3.13.0-49-generic -update-initramfs: Generating /boot/initrd.img-3.13.0-49-generic -df: Warning: cannot read table of mounted file systems: No such file or directory -invoke-rc.d: policy-rc.d denied execution of start. -invoke-rc.d: policy-rc.d denied execution of start. -invoke-rc.d: policy-rc.d denied execution of reload. -invoke-rc.d: policy-rc.d denied execution of start. -update-rc.d: warning: default stop runlevel arguments (0 1 6) do not match rsync Default-Stop values (none) -invoke-rc.d: policy-rc.d denied execution of restart. - -Creating config file /etc/ufw/before.rules with new version - -Creating config file /etc/ufw/before6.rules with new version - -Creating config file /etc/ufw/after.rules with new version - -Creating config file /etc/ufw/after6.rules with new version -invoke-rc.d: policy-rc.d denied execution of start. -run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 3.13.0-49-generic /boot/vmlinuz-3.13.0-49-generic -run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.13.0-49-generic /boot/vmlinuz-3.13.0-49-generic -update-initramfs: Generating /boot/initrd.img-3.13.0-49-generic -df: Warning: cannot read table of mounted file systems: No such file or directory -W: mdadm: /etc/mdadm/mdadm.conf defines no arrays. - Removing any system startup links for /etc/init.d/mdadm-raid ... -update-initramfs: deferring update (trigger activated) -/usr/sbin/grub-mkconfig: 250: /usr/sbin/grub-mkconfig: cannot create /boot/grub/grub.cfg.new: Directory nonexistent -invoke-rc.d: policy-rc.d denied execution of start. -Creating SSH2 RSA key; this may take some time ... -Creating SSH2 DSA key; this may take some time ... -Creating SSH2 ECDSA key; this may take some time ... -Creating SSH2 ED25519 key; this may take some time ... -invoke-rc.d: policy-rc.d denied execution of start. -Adding group `postfix' (GID 111) ... -Done. -Adding system user `postfix' (UID 105) ... -Adding new user `postfix' (UID 105) with group `postfix' ... -Not creating home directory `/var/spool/postfix'. -Creating /etc/postfix/dynamicmaps.cf -Adding tcp map entry to /etc/postfix/dynamicmaps.cf -Adding sqlite map entry to /etc/postfix/dynamicmaps.cf -Adding group `postdrop' (GID 112) ... -Done. -setting myhostname: fuel.domain.tld -setting alias maps -setting alias database -changing /etc/mailname to fuel.domain.tld -setting myorigin -setting destinations: fuel.domain.tld, localhost.domain.tld, , localhost -setting relayhost: -setting mynetworks: 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 -setting mailbox_size_limit: 0 -setting recipient_delimiter: + -setting inet_interfaces: all -setting inet_protocols: all -/etc/aliases does not exist, creating it. -WARNING: /etc/aliases exists, but does not have a root alias. - -Postfix is now set up with a default configuration. If you need to make -changes, edit -/etc/postfix/main.cf (and others) as needed. To view Postfix configuration -values, see postconf(1). - -After modifying main.cf, be sure to run '/etc/init.d/postfix reload'. - -Running newaliases -invoke-rc.d: policy-rc.d denied execution of restart. -invoke-rc.d: policy-rc.d denied execution of start. -Adding 'diversion of /etc/init/ureadahead.conf to /etc/init/ureadahead.conf.disabled by cloud-init' - -Creating config file /etc/default/grub with new version -device node not found -device node not found -device node not found -device node not found -device node not found -device node not found -device node not found -device node not found -invoke-rc.d: policy-rc.d denied execution of start. -invoke-rc.d: policy-rc.d denied execution of start. -df: Warning: cannot read table of mounted file systems: No such file or directory -W: mdadm: /etc/mdadm/mdadm.conf defines no arrays. - -2015-04-21 10:14:45.339 656 DEBUG fuel_agent.manager [-] Post-install OS configuration -2015-04-21 10:14:45.346 656 DEBUG fuel_agent.utils.utils [-] Trying to execute command: sed -i s%root:[\*,\!]%root:$6$IInX3Cqo$5xytL1VZbZTusOewFnG6couuF0Ia61yS3rbC6P5YbZP2TYclwHqMq9e3Tg8rvQxhxSlBXP1DZhdUamxdOBXK0.% /tmp/tmpUm1u7N.fuel-agent-image/etc/shadow -2015-04-21 10:14:45.392 656 DEBUG fuel_agent.utils.build_utils [-] Removed file: /tmp/tmpUm1u7N.fuel-agent-image/usr/sbin/policy-rc.d -2015-04-21 10:14:45.393 656 DEBUG fuel_agent.utils.build_utils [-] Removed file: /tmp/tmpUm1u7N.fuel-agent-image/etc/apt/apt.conf.d/allow_unsigned_packages -2015-04-21 10:14:45.395 656 DEBUG fuel_agent.utils.build_utils [-] Removed dir: /tmp/tmpUm1u7N.fuel-agent-image/etc/apt/preferences.d -2015-04-21 10:14:45.396 656 DEBUG fuel_agent.utils.build_utils [-] Removed dir: /tmp/tmpUm1u7N.fuel-agent-image/etc/apt/sources.list.d -2015-04-21 10:14:45.396 656 DEBUG fuel_agent.manager [-] Making sure there are no running processes inside chroot before trying to umount chroot -2015-04-21 10:14:45.397 656 DEBUG fuel_agent.utils.utils [-] Trying to execute command: fuser -v /tmp/tmpUm1u7N.fuel-agent-image -2015-04-21 10:14:47.416 656 DEBUG fuel_agent.utils.utils [-] Trying to execute command: fuser -v /tmp/tmpUm1u7N.fuel-agent-image -2015-04-21 10:14:47.428 656 INFO fuel_agent.manager [-] *** Finalizing image space *** -2015-04-21 10:14:47.429 656 DEBUG fuel_agent.utils.fs_utils [-] Trying to umount /tmp/tmpUm1u7N.fuel-agent-image/proc -2015-04-21 10:14:47.429 656 DEBUG fuel_agent.utils.utils [-] Trying to execute command: umount /tmp/tmpUm1u7N.fuel-agent-image/proc -2015-04-21 10:14:47.449 656 DEBUG fuel_agent.manager [-] Umounting target file systems -2015-04-21 10:14:47.450 656 DEBUG fuel_agent.utils.fs_utils [-] Trying to umount /tmp/tmpUm1u7N.fuel-agent-image/boot -2015-04-21 10:14:47.451 656 DEBUG fuel_agent.utils.utils [-] Trying to execute command: umount /tmp/tmpUm1u7N.fuel-agent-image/boot -2015-04-21 10:14:47.491 656 DEBUG fuel_agent.utils.fs_utils [-] Trying to umount /tmp/tmpUm1u7N.fuel-agent-image/ -2015-04-21 10:14:47.492 656 DEBUG fuel_agent.utils.utils [-] Trying to execute command: umount /tmp/tmpUm1u7N.fuel-agent-image/ -2015-04-21 10:14:47.681 656 DEBUG fuel_agent.manager [-] Deattaching loop device from file: /tmp/tmpqn61pJ.fuel-agent-image -2015-04-21 10:14:47.682 656 DEBUG fuel_agent.utils.utils [-] Trying to execute command: losetup -d /dev/loop2 -2015-04-21 10:14:47.697 656 DEBUG fuel_agent.manager [-] Shrinking temporary image file: /tmp/tmpqn61pJ.fuel-agent-image -2015-04-21 10:14:47.698 656 DEBUG fuel_agent.utils.utils [-] Trying to execute command: e2fsck -y -f /tmp/tmpqn61pJ.fuel-agent-image -2015-04-21 10:14:48.121 656 DEBUG fuel_agent.utils.utils [-] Trying to execute command: resize2fs -F -M /tmp/tmpqn61pJ.fuel-agent-image -2015-04-21 10:14:48.786 656 DEBUG fuel_agent.utils.utils [-] Trying to execute command: dumpe2fs /tmp/tmpqn61pJ.fuel-agent-image -2015-04-21 10:14:48.963 656 DEBUG fuel_agent.manager [-] Containerizing temporary image file: /tmp/tmpqn61pJ.fuel-agent-image -2015-04-21 10:14:51.445 656 DEBUG fuel_agent.manager [-] Moving image file to the final location: /var/www/nailgun/targetimages/env_1_ubuntu_1404_amd64-boot.img.gz -2015-04-21 10:14:51.601 656 DEBUG fuel_agent.manager [-] Deattaching loop device from file: /tmp/tmpjUWDCE.fuel-agent-image -2015-04-21 10:14:51.601 656 DEBUG fuel_agent.utils.utils [-] Trying to execute command: losetup -d /dev/loop3 -2015-04-21 10:14:51.613 656 DEBUG fuel_agent.manager [-] Shrinking temporary image file: /tmp/tmpjUWDCE.fuel-agent-image -2015-04-21 10:14:51.613 656 DEBUG fuel_agent.utils.utils [-] Trying to execute command: e2fsck -y -f /tmp/tmpjUWDCE.fuel-agent-image -2015-04-21 10:14:52.160 656 DEBUG fuel_agent.utils.utils [-] Trying to execute command: resize2fs -F -M /tmp/tmpjUWDCE.fuel-agent-image -2015-04-21 10:16:20.362 656 DEBUG fuel_agent.utils.utils [-] Trying to execute command: dumpe2fs /tmp/tmpjUWDCE.fuel-agent-image -2015-04-21 10:16:27.818 656 DEBUG fuel_agent.manager [-] Containerizing temporary image file: /tmp/tmpjUWDCE.fuel-agent-image -2015-04-21 10:22:22.037 656 DEBUG fuel_agent.manager [-] Moving image file to the final location: /var/www/nailgun/targetimages/env_1_ubuntu_1404_amd64.img.gz -2015-04-21 10:22:27.596 656 DEBUG fuel_agent.manager [-] Image metadata: {'images': [{'raw_md5': '488ade077eecf439b7838a18279732d6', 'container': u'gzip', 'raw_size': 33603584, 'container_name': u'env_1_ubuntu_1404_amd64-boot.img.gz', 'raw_name': None, 'container_md5': '1972d4286bcd19bd2a0e9811965a5788', 'format': u'ext2', 'container_size': 27028381}, {'raw_md5': '7115eeb1893b656904a4173719dd205e', 'container': u'gzip', 'raw_size': 1447505920, 'container_name': u'env_1_ubuntu_1404_amd64.img.gz', 'raw_name': None, 'container_md5': 'd7a0d5b813c48882645332638fbb457f', 'format': u'ext4', 'container_size': 558628807}], 'repos': [{'name': u'ubuntu', 'section': u'main universe multiverse', 'uri': u'http://archive.ubuntu.com/ubuntu/', 'priority': None, 'meta': None, 'suite': u'trusty', 'type': 'deb'}, {'name': u'ubuntu-updates', 'section': u'main universe multiverse', 'uri': u'http://archive.ubuntu.com/ubuntu/', 'priority': None, 'meta': None, 'suite': u'trusty-updates', 'type': 'deb'}, {'name': u'ubuntu-security', 'section': u'main universe multiverse', 'uri': u'http://archive.ubuntu.com/ubuntu/', 'priority': None, 'meta': None, 'suite': u'trusty-security', 'type': 'deb'}, {'name': u'mos', 'section': u'main restricted', 'uri': u'http://10.20.0.2:8080/2014.2-6.1/ubuntu/x86_64', 'priority': 1050, 'meta': None, 'suite': u'mos6.1', 'type': 'deb'}, {'name': u'mos-updates', 'section': u'main restricted', 'uri': u'http://mirror.fuel-infra.org/mos/ubuntu/', 'priority': 1050, 'meta': None, 'suite': u'mos6.1-updates', 'type': 'deb'}, {'name': u'mos-security', 'section': u'main restricted', 'uri': u'http://mirror.fuel-infra.org/mos/ubuntu/', 'priority': 1050, 'meta': None, 'suite': u'mos6.1-security', 'type': 'deb'}, {'name': u'mos-holdback', 'section': u'main restricted', 'uri': u'http://mirror.fuel-infra.org/mos/ubuntu/', 'priority': 1100, 'meta': None, 'suite': u'mos6.1-holdback', 'type': 'deb'}, {'name': u'Auxiliary', 'section': u'main restricted', 'uri': u'http://10.20.0.2:8080/2014.2-6.1/ubuntu/auxiliary', 'priority': 1050, 'meta': None, 'suite': u'auxiliary', 'type': 'deb'}], 'packages': ['acl', 'anacron', 'bash-completion', 'bridge-utils', 'bsdmainutils', 'build-essential', 'cloud-init', 'curl', 'daemonize', 'debconf-utils', 'gdisk', 'grub-pc', 'linux-firmware', 'linux-firmware-nonfree', 'linux-headers-generic-lts-trusty', 'linux-image-generic-lts-trusty', 'lvm2', 'mcollective', 'mdadm', 'nailgun-agent', 'nailgun-mcagents', 'nailgun-net-check', 'ntp', 'openssh-client', 'openssh-server', 'puppet', 'python-amqp', 'ruby-augeas', 'ruby-ipaddress', 'ruby-json', 'ruby-netaddr', 'ruby-openstack', 'ruby-shadow', 'ruby-stomp', 'telnet', 'ubuntu-minimal', 'ubuntu-standard', 'uuid-runtime', 'vim', 'virt-what', 'vlan']} -2015-04-21 10:22:27.755 656 INFO fuel_agent.manager [-] --- Building image END (do_build_image) --- diff --git a/spec/example-logs/fuel-agent.log_ b/spec/example-logs/fuel-agent.log_ deleted file mode 100644 index 5b0e8ed9..00000000 --- a/spec/example-logs/fuel-agent.log_ +++ /dev/null @@ -1,902 +0,0 @@ -2015-04-21T10:45:10.718581+00:00 info: 2015-04-21 10:45:10.535 2732 DEBUG fuel_agent.cmd.agent [-] Input data: {u'profile': u'ubuntu_1404_x86_64', u'hostname': u'node-1.domain.tld', u'name_servers_search': u'"domain.tld"', u'uid': u'1', u'interfaces': {u'eth2': {u'static': u'0', u'mac_address': u'52:54:00:00:03:02'}, u'eth1': {u'static': u'0', u'mac_address': u'52:54:00:00:02:02'}, u'eth0': {u'dns_name': u'node-1.domain.tld', u'netmask': u'255.255.255.0', u'mac_address': u'52:54:00:00:01:02', u'ip_address': u'10.20.0.3', u'static': u'0'}}, u'interfaces_extra': {u'eth2': {u'onboot': u'no', u'peerdns': u'no'}, u'eth1': {u'onboot': u'no', u'peerdns': u'no'}, u'eth0': {u'onboot': u'yes', u'peerdns': u'no'}}, u'power_type': u'ssh', u'power_user': u'root', u'kernel_options': {u'udevrules': u'52:54:00:00:01:02_eth0,52:54:00:00:02:02_eth1,52:54:00:00:03:02_eth2', u'netcfg/choose_interface': u'52:54:00:00:01:02'}, u'name': u'node-1', u'power_address': u'10.20.0.3', u'name_servers': u'"10.20.0.2"', u'slave_name': u'node-1', u'netboot_enabled': u'1', u'power_pass': u'/root/.ssh/id_rsa', u'ks_meta': {u'gw': u'10.20.0.2', u'mco_enable': 1, u'mlnx_iser_enabled': False, u'mco_user': u'mcollective', u'install_log_2_syslog': 1, u'image_data': {u'/boot': {u'container': u'gzip', u'uri': u'http://10.20.0.2:8080/targetimages/env_1_ubuntu_1404_amd64-boot.img.gz', u'format': u'ext2'}, u'/': {u'container': u'gzip', u'uri': u'http://10.20.0.2:8080/targetimages/env_1_ubuntu_1404_amd64.img.gz', u'format': u'ext4'}}, u'mco_password': u'oxNXzkOS', u'puppet_master': u'fuel.domain.tld', u'pm_data': {u'kernel_params': u'console=ttyS0,9600 console=tty0 net.ifnames=0 biosdevname=0 rootdelay=90 nomodeset', u'ks_spaces': [{u'name': u'vda', u'extra': [], u'free_space': 50572, u'volumes': [{u'type': u'boot', u'size': 300}, {u'mount': u'/boot', u'type': u'partition', u'file_system': u'ext2', u'name': u'Boot', u'size': 200}, {u'type': u'lvm_meta_pool', u'size': 0}, {u'vg': u'os', u'type': u'pv', u'lvm_meta_size': 64, u'size': 19520}, {u'vg': u'image', u'type': u'pv', u'lvm_meta_size': 64, u'size': 31180}], u'type': u'disk', u'id': u'disk/by-path/pci-0000:00:05.0-virtio-pci-virtio1', u'size': 51200}, {u'_allocate_size': u'min', u'label': u'Base System', u'min_size': 19456, u'volumes': [{u'mount': u'/', u'type': u'lv', u'name': u'root', u'file_system': u'ext4', u'size': 15360}, {u'mount': u'swap', u'type': u'lv', u'name': u'swap', u'file_system': u'swap', u'size': 4096}], u'type': u'vg', u'id': u'os'}, {u'_allocate_size': u'all', u'label': u'Image Storage', u'min_size': 5120, u'volumes': [{u'mount': u'/var/lib/glance', u'type': u'lv', u'name': u'glance', u'file_system': u'xfs', u'size': 31116}], u'type': u'vg', u'id': u'image'}]}, u'mlnx_plugin_mode': u'disabled', u'master_ip': u'10.20.0.2', u'timezone': u'Etc/UTC', u'mlnx_vf_num': u'16', u'admin_net': u'10.20.0.0/24', u'mco_host': u'10.20.0.2', u'authorized_keys': [u'"ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAzGv6U/UPjm+M0Dc35hhsc7z9lCZIAN+9Hh/gmqeJIJdHVl8PsooP8JTDMV6s6jCy53uQOrktDyFyYyoorXA5cZkru2k72VD/0Ku6PCYGzIHVCXgL+KrxAxuMM21bbUqxepA1kDUl2p36greT0hxuTSSXii2Ur/OUx0dGJzrBIP4KPLxERonV4AvRoj+pqVyR0XmOWHrY53ggf2ZBPjE6SNVjjVGwXe4KYXQH5DT0lvoweHDa1Kt85jijmr+oY6jpOK4CJ+9EO6ipFmOy/qvZsEjdtisLC8XZgU8qqWSY2QG/OK7bC3SeouYFJmObfFki/TU8nBLJHwatvf5WdDW5Pw== root@fuel.domain.tld"'], u'mco_vhost': u'mcollective', u'repo_setup': {u'installer_kernel': {u'local': u'/var/www/nailgun/ubuntu/x86_64/images/linux', u'remote_relative': u'dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux'}, u'repos': [{u'name': u'ubuntu', u'section': u'main universe multiverse', u'uri': u'http://archive.ubuntu.com/ubuntu/', u'priority': None, u'suite': u'trusty', u'type': u'deb'}, {u'name': u'ubuntu-updates', u'section': u'main universe multiverse', u'uri': u'http://archive.ubuntu.com/ubuntu/', u'priority': None, u'suite': u'trusty-updates', u'type': u'deb'}, {u'name': u'ubuntu-security', u'section': u'main universe multiverse', u'uri': u'http://archive.ubuntu.com/ubuntu/', u'priority': None, u'suite': u'trusty-security', u'type': u'deb'}, {u'name': u'mos', u'section': u'main restricted', u'uri': u'http://10.20.0.2:8080/2014.2-6.1/ubuntu/x86_64', u'priority': 1050, u'suite': u'mos6.1', u'type': u'deb'}, {u'name': u'mos-updates', u'section': u'main restricted', u'uri': u'http://mirror.fuel-infra.org/mos/ubuntu/', u'priority': 1050, u'suite': u'mos6.1-updates', u'type': u'deb'}, {u'name': u'mos-security', u'section': u'main restricted', u'uri': u'http://mirror.fuel-infra.org/mos/ubuntu/', u'priority': 1050, u'suite': u'mos6.1-security', u'type': u'deb'}, {u'name': u'mos-holdback', u'section': u'main restricted', u'uri': u'http://mirror.fuel-infra.org/mos/ubuntu/', u'priority': 1100, u'suite': u'mos6.1-holdback', u'type': u'deb'}, {u'name': u'Auxiliary', u'section': u'main restricted', u'uri': u'http://10.20.0.2:8080/2014.2-6.1/ubuntu/auxiliary', u'priority': 1050, u'suite': u'auxiliary', u'type': u'deb'}], u'installer_initrd': {u'local': u'/var/www/nailgun/ubuntu/x86_64/images/initrd.gz', u'remote_relative': u'dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz'}, u'metadata': {u'always_editable': True, u'weight': 50, u'label': u'Repositories'}}, u'mco_pskey': u'unset', u'puppet_enable': 0, u'fuel_version': u'6.1', u'puppet_auto_setup': 1, u'mco_auto_setup': 1, u'auth_key': u'""', u'mco_connector': u'rabbitmq'}} -2015-04-21T10:45:10.718639+00:00 info: 2015-04-21 10:45:10.536 2732 DEBUG fuel_agent.utils.utils [-] Trying to get driver: fuel_agent.drivers.nailgun -2015-04-21T10:45:10.718826+00:00 info: 2015-04-21 10:45:10.545 2732 DEBUG stevedore.extension [-] found extension EntryPoint.parse('nailgun = fuel_agent.drivers.nailgun:Nailgun') -2015-04-21T10:45:10.719007+00:00 info: 2015-04-21 10:45:10.560 2732 DEBUG stevedore.extension [-] found extension EntryPoint.parse('nailgun_build_image = fuel_agent.drivers.nailgun:NailgunBuildImage') -2015-04-21T10:45:10.719204+00:00 info: 2015-04-21 10:45:10.560 2732 DEBUG fuel_agent.utils.utils [-] Found driver: Nailgun -2015-04-21T10:45:10.719316+00:00 info: 2015-04-21 10:45:10.560 2732 DEBUG fuel_agent.drivers.nailgun [-] --- Preparing partition scheme --- -2015-04-21T10:45:10.719491+00:00 info: 2015-04-21 10:45:10.581 2732 DEBUG fuel_agent.drivers.nailgun [-] Looping over all disks in provision data -2015-04-21T10:45:10.719679+00:00 info: 2015-04-21 10:45:10.581 2732 DEBUG fuel_agent.drivers.nailgun [-] Processing disk vda -2015-04-21T10:45:10.719840+00:00 info: 2015-04-21 10:45:10.581 2732 DEBUG fuel_agent.drivers.nailgun [-] Adding gpt table on disk vda -2015-04-21T10:45:10.719987+00:00 info: 2015-04-21 10:45:10.581 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: blockdev --report -2015-04-21T10:45:10.720151+00:00 info: 2015-04-21 10:45:10.588 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: udevadm info --query=property --export --name=/dev/vda -2015-04-21T10:45:10.720408+00:00 info: 2015-04-21 10:45:10.594 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: blockdev --getsz --getro --getss --getpbsz --getsize64 --getiomin --getioopt --getra --getalignoff --getmaxsect /dev/vda -2015-04-21T10:45:10.720558+00:00 info: 2015-04-21 10:45:10.600 2732 DEBUG fuel_agent.drivers.nailgun [-] Adding bootloader stage0 on disk vda -2015-04-21T10:45:10.720738+00:00 info: 2015-04-21 10:45:10.600 2732 DEBUG fuel_agent.drivers.nailgun [-] Adding bios_grub partition on disk vda: size=24 -2015-04-21T10:45:10.720900+00:00 info: 2015-04-21 10:45:10.601 2732 DEBUG fuel_agent.drivers.nailgun [-] Adding UEFI partition on disk vda: size=200 -2015-04-21T10:45:10.721041+00:00 info: 2015-04-21 10:45:10.601 2732 DEBUG fuel_agent.drivers.nailgun [-] Looping over all volumes on disk vda -2015-04-21T10:45:10.721203+00:00 info: 2015-04-21 10:45:10.602 2732 DEBUG fuel_agent.drivers.nailgun [-] Processing volume: name=None type=boot size=300 mount=None vg=None -2015-04-21T10:45:10.721358+00:00 info: 2015-04-21 10:45:10.602 2732 DEBUG fuel_agent.drivers.nailgun [-] Processing volume: name=Boot type=partition size=200 mount=/boot vg=None -2015-04-21T10:45:10.721566+00:00 info: 2015-04-21 10:45:10.602 2732 DEBUG fuel_agent.drivers.nailgun [-] Adding partition on disk vda: size=200 -2015-04-21T10:45:10.721808+00:00 info: 2015-04-21 10:45:10.603 2732 DEBUG fuel_agent.drivers.nailgun [-] Partition name: /dev/vda3 -2015-04-21T10:45:10.721900+00:00 info: 2015-04-21 10:45:10.603 2732 DEBUG fuel_agent.drivers.nailgun [-] Adding file system on partition: mount=/boot type=ext2 -2015-04-21T10:45:10.722060+00:00 info: 2015-04-21 10:45:10.603 2732 DEBUG fuel_agent.drivers.nailgun [-] Processing volume: name=None type=lvm_meta_pool size=0 mount=None vg=None -2015-04-21T10:45:10.722220+00:00 info: 2015-04-21 10:45:10.603 2732 DEBUG fuel_agent.drivers.nailgun [-] Volume size is zero. Skipping. -2015-04-21T10:45:10.722438+00:00 info: 2015-04-21 10:45:10.603 2732 DEBUG fuel_agent.drivers.nailgun [-] Processing volume: name=None type=pv size=19520 mount=None vg=os -2015-04-21T10:45:10.722666+00:00 info: 2015-04-21 10:45:10.604 2732 DEBUG fuel_agent.drivers.nailgun [-] Adding partition on disk vda: size=19520 -2015-04-21T10:45:10.722819+00:00 info: 2015-04-21 10:45:10.604 2732 DEBUG fuel_agent.drivers.nailgun [-] Partition name: /dev/vda4 -2015-04-21T10:45:10.723030+00:00 info: 2015-04-21 10:45:10.604 2732 DEBUG fuel_agent.drivers.nailgun [-] Creating pv on partition: pv=/dev/vda4 vg=os -2015-04-21T10:45:10.723153+00:00 info: 2015-04-21 10:45:10.604 2732 DEBUG fuel_agent.drivers.nailgun [-] Processing volume: name=None type=pv size=31180 mount=None vg=image -2015-04-21T10:45:10.723305+00:00 info: 2015-04-21 10:45:10.604 2732 DEBUG fuel_agent.drivers.nailgun [-] Adding partition on disk vda: size=31180 -2015-04-21T10:45:10.723480+00:00 info: 2015-04-21 10:45:10.605 2732 DEBUG fuel_agent.drivers.nailgun [-] Partition name: /dev/vda5 -2015-04-21T10:45:10.723644+00:00 info: 2015-04-21 10:45:10.605 2732 DEBUG fuel_agent.drivers.nailgun [-] Creating pv on partition: pv=/dev/vda5 vg=image -2015-04-21T10:45:10.723808+00:00 info: 2015-04-21 10:45:10.605 2732 DEBUG fuel_agent.drivers.nailgun [-] Adding configdrive partition on disk vda: size=20 -2015-04-21T10:45:10.723966+00:00 info: 2015-04-21 10:45:10.605 2732 DEBUG fuel_agent.drivers.nailgun [-] Looping over all volume groups in provision data -2015-04-21T10:45:10.724133+00:00 info: 2015-04-21 10:45:10.606 2732 DEBUG fuel_agent.drivers.nailgun [-] Processing vg os -2015-04-21T10:45:10.724297+00:00 info: 2015-04-21 10:45:10.606 2732 DEBUG fuel_agent.drivers.nailgun [-] Looping over all logical volumes in vg os -2015-04-21T10:45:10.724485+00:00 info: 2015-04-21 10:45:10.606 2732 DEBUG fuel_agent.drivers.nailgun [-] Processing lv root -2015-04-21T10:45:10.724644+00:00 info: 2015-04-21 10:45:10.606 2732 DEBUG fuel_agent.drivers.nailgun [-] Adding lv to vg os: name=root, size=15360 -2015-04-21T10:45:10.724808+00:00 info: 2015-04-21 10:45:10.606 2732 DEBUG fuel_agent.drivers.nailgun [-] Adding file system on lv: mount=/ type=ext4 -2015-04-21T10:45:10.724967+00:00 info: 2015-04-21 10:45:10.607 2732 DEBUG fuel_agent.drivers.nailgun [-] Processing lv swap -2015-04-21T10:45:10.725134+00:00 info: 2015-04-21 10:45:10.607 2732 DEBUG fuel_agent.drivers.nailgun [-] Adding lv to vg os: name=swap, size=4096 -2015-04-21T10:45:10.725298+00:00 info: 2015-04-21 10:45:10.607 2732 DEBUG fuel_agent.drivers.nailgun [-] Adding file system on lv: mount=swap type=swap -2015-04-21T10:45:10.725499+00:00 info: 2015-04-21 10:45:10.607 2732 DEBUG fuel_agent.drivers.nailgun [-] Processing vg image -2015-04-21T10:45:10.725660+00:00 info: 2015-04-21 10:45:10.607 2732 DEBUG fuel_agent.drivers.nailgun [-] Looping over all logical volumes in vg image -2015-04-21T10:45:10.725820+00:00 info: 2015-04-21 10:45:10.608 2732 DEBUG fuel_agent.drivers.nailgun [-] Processing lv glance -2015-04-21T10:45:10.725981+00:00 info: 2015-04-21 10:45:10.608 2732 DEBUG fuel_agent.drivers.nailgun [-] Adding lv to vg image: name=glance, size=31116 -2015-04-21T10:45:10.726340+00:00 info: 2015-04-21 10:45:10.608 2732 DEBUG fuel_agent.drivers.nailgun [-] Adding file system on lv: mount=/var/lib/glance type=xfs -2015-04-21T10:45:10.726340+00:00 info: 2015-04-21 10:45:10.608 2732 DEBUG fuel_agent.drivers.nailgun [-] Appending kernel parameters: console=ttyS0,9600 console=tty0 net.ifnames=0 biosdevname=0 rootdelay=90 nomodeset -2015-04-21T10:45:10.726567+00:00 info: 2015-04-21 10:45:10.608 2732 DEBUG fuel_agent.drivers.nailgun [-] --- Preparing configdrive scheme --- -2015-04-21T10:45:10.726765+00:00 info: 2015-04-21 10:45:10.609 2732 DEBUG fuel_agent.drivers.nailgun [-] Adding common parameters -2015-04-21T10:45:10.726913+00:00 info: 2015-04-21 10:45:10.609 2732 DEBUG fuel_agent.drivers.nailgun [-] Adding puppet parameters -2015-04-21T10:45:10.727081+00:00 info: 2015-04-21 10:45:10.609 2732 DEBUG fuel_agent.drivers.nailgun [-] Adding mcollective parameters -2015-04-21T10:45:10.727250+00:00 info: 2015-04-21 10:45:10.609 2732 DEBUG fuel_agent.drivers.nailgun [-] Setting configdrive profile ubuntu_1404_x86_64 -2015-04-21T10:45:10.727439+00:00 info: 2015-04-21 10:45:10.609 2732 DEBUG fuel_agent.drivers.nailgun [-] --- Preparing image scheme --- -2015-04-21T10:45:10.727626+00:00 info: 2015-04-21 10:45:10.610 2732 DEBUG fuel_agent.utils.utils [-] Trying to initialize http request object http://10.20.0.2:8080/targetimages/env_1_ubuntu_1404_amd64.yaml, byte range: 0 -2015-04-21T10:45:10.727848+00:00 info: 2015-04-21 10:45:10.629 2732 INFO urllib3.connectionpool [-] Starting new HTTP connection (1): 10.20.0.2 -2015-04-21T10:45:10.727959+00:00 info: 2015-04-21 10:45:10.630 2732 DEBUG urllib3.connectionpool [-] Setting read timeout to -2015-04-21T10:45:10.728161+00:00 info: 2015-04-21 10:45:10.632 2732 DEBUG urllib3.connectionpool [-] "GET /targetimages/env_1_ubuntu_1404_amd64.yaml HTTP/1.1" 206 2361 -2015-04-21T10:45:10.728332+00:00 info: 2015-04-21 10:45:10.632 2732 DEBUG fuel_agent.utils.utils [-] Successful http request to http://10.20.0.2:8080/targetimages/env_1_ubuntu_1404_amd64.yaml on 1 retry -2015-04-21T10:45:10.728511+00:00 info: 2015-04-21 10:45:10.680 2732 DEBUG fuel_agent.drivers.nailgun [-] Looping over all images in provision data -2015-04-21T10:45:10.728745+00:00 info: 2015-04-21 10:45:10.680 2732 DEBUG fuel_agent.drivers.nailgun [-] Adding image for fs /boot: uri=http://10.20.0.2:8080/targetimages/env_1_ubuntu_1404_amd64-boot.img.gz format=ext2 container=gzip -2015-04-21T10:45:10.728860+00:00 info: 2015-04-21 10:45:10.681 2732 DEBUG fuel_agent.drivers.nailgun [-] Adding image for fs /: uri=http://10.20.0.2:8080/targetimages/env_1_ubuntu_1404_amd64.img.gz format=ext4 container=gzip -2015-04-21T10:45:10.729075+00:00 info: 2015-04-21 10:45:10.681 2732 DEBUG fuel_agent.manager [-] --- Provisioning (do_provisioning) --- -2015-04-21T10:45:10.729228+00:00 info: 2015-04-21 10:45:10.681 2732 DEBUG fuel_agent.manager [-] --- Partitioning disks (do_partitioning) --- -2015-04-21T10:45:10.729425+00:00 info: 2015-04-21 10:45:10.681 2732 DEBUG fuel_agent.utils.md_utils [-] Trying to wipe out all md devices -2015-04-21T10:45:10.729655+00:00 info: 2015-04-21 10:45:10.682 2732 DEBUG fuel_agent.utils.md_utils [-] Found md devices: [] -2015-04-21T10:45:10.729824+00:00 info: 2015-04-21 10:45:10.682 2732 DEBUG fuel_agent.utils.md_utils [-] Found md devices: [] -2015-04-21T10:45:10.729955+00:00 info: 2015-04-21 10:45:10.682 2732 DEBUG fuel_agent.utils.md_utils [-] Found md devices: [] -2015-04-21T10:45:10.730107+00:00 info: 2015-04-21 10:45:10.683 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: lvdisplay -C --noheading --units m --options lv_name,lv_size,vg_name,lv_uuid --separator ; -2015-04-21T10:45:10.730274+00:00 info: 2015-04-21 10:45:10.694 2732 DEBUG fuel_agent.utils.lvm_utils [-] Found logical volumes: [] -2015-04-21T10:45:10.730493+00:00 info: 2015-04-21 10:45:10.695 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: vgdisplay -C --noheading --units m --options vg_name,vg_uuid,vg_size,vg_free --separator ; -2015-04-21T10:45:10.730681+00:00 info: 2015-04-21 10:45:10.707 2732 DEBUG fuel_agent.utils.lvm_utils [-] Found volume groups: [] -2015-04-21T10:45:10.730839+00:00 info: 2015-04-21 10:45:10.707 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: pvdisplay -C --noheading --units m --options pv_name,vg_name,pv_size,dev_size,pv_uuid --separator ; -2015-04-21T10:45:10.731004+00:00 info: 2015-04-21 10:45:10.718 2732 DEBUG fuel_agent.utils.lvm_utils [-] Found physical volumes: [] -2015-04-21T10:45:10.731173+00:00 info: 2015-04-21 10:45:10.719 2732 DEBUG fuel_agent.manager [-] Enabling udev's rules blacklisting -2015-04-21T10:45:10.731345+00:00 info: 2015-04-21 10:45:10.723 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: udevadm control --reload-rules -2015-04-21T10:45:11.234074+00:00 info: 2015-04-21 10:45:10.727 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: dd if=/dev/zero bs=1M seek=0 count=5 of=/dev/vda -2015-04-21T10:45:11.234557+00:00 info: 2015-04-21 10:45:10.745 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: dd if=/dev/zero bs=1M seek=22 count=5 of=/dev/vda -2015-04-21T10:45:11.235035+00:00 info: 2015-04-21 10:45:10.766 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: dd if=/dev/zero bs=1M seek=22 count=5 of=/dev/vda -2015-04-21T10:45:11.235556+00:00 info: 2015-04-21 10:45:10.788 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: dd if=/dev/zero bs=1M seek=222 count=5 of=/dev/vda -2015-04-21T10:45:11.235889+00:00 info: 2015-04-21 10:45:10.807 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: dd if=/dev/zero bs=1M seek=222 count=5 of=/dev/vda -2015-04-21T10:45:11.236263+00:00 info: 2015-04-21 10:45:10.828 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: dd if=/dev/zero bs=1M seek=422 count=5 of=/dev/vda -2015-04-21T10:45:11.236627+00:00 info: 2015-04-21 10:45:10.847 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: dd if=/dev/zero bs=1M seek=422 count=5 of=/dev/vda -2015-04-21T10:45:11.236953+00:00 info: 2015-04-21 10:45:10.863 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: dd if=/dev/zero bs=1M seek=19942 count=5 of=/dev/vda -2015-04-21T10:45:11.237312+00:00 info: 2015-04-21 10:45:10.885 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: dd if=/dev/zero bs=1M seek=19942 count=5 of=/dev/vda -2015-04-21T10:45:11.237472+00:00 info: 2015-04-21 10:45:10.907 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: dd if=/dev/zero bs=1M seek=51122 count=5 of=/dev/vda -2015-04-21T10:45:11.237844+00:00 info: 2015-04-21 10:45:10.926 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: dd if=/dev/zero bs=1M seek=51122 count=5 of=/dev/vda -2015-04-21T10:45:11.238240+00:00 info: 2015-04-21 10:45:10.946 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: dd if=/dev/zero bs=1M seek=51142 count=5 of=/dev/vda -2015-04-21T10:45:11.238694+00:00 info: 2015-04-21 10:45:10.969 2732 DEBUG fuel_agent.utils.partition_utils [-] Trying to create gpt partition table on device /dev/vda -2015-04-21T10:45:11.238934+00:00 info: 2015-04-21 10:45:10.970 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: udevadm settle --quiet -2015-04-21T10:45:11.239084+00:00 info: 2015-04-21 10:45:10.976 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: parted -s /dev/vda mklabel gpt -2015-04-21T10:45:11.239417+00:00 info: 2015-04-21 10:45:11.145 2732 DEBUG fuel_agent.utils.partition_utils [-] Parted output: -2015-04-21T10:45:11.239677+00:00 info: -2015-04-21T10:45:11.239891+00:00 info: 2015-04-21 10:45:11.145 2732 DEBUG fuel_agent.utils.partition_utils [-] Trying to create a partition: dev=/dev/vda begin=1 end=25 -2015-04-21T10:45:11.240111+00:00 info: 2015-04-21 10:45:11.146 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: udevadm settle --quiet -2015-04-21T10:45:11.240411+00:00 info: 2015-04-21 10:45:11.152 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: parted -s /dev/vda -m unit MiB print free -2015-04-21T10:45:11.240659+00:00 info: 2015-04-21 10:45:11.170 2732 DEBUG fuel_agent.utils.partition_utils [-] Info output: -2015-04-21T10:45:11.240959+00:00 info: BYT; -2015-04-21T10:45:11.241151+00:00 info: /dev/vda:51200MiB:virtblk:512:512:gpt:Virtio Block Device; -2015-04-21T10:45:11.241418+00:00 info: 1:0.02MiB:51200MiB:51200MiB:free; -2015-04-21T10:45:11.241632+00:00 info: -2015-04-21T10:45:11.241911+00:00 info: 2015-04-21 10:45:11.171 2732 DEBUG fuel_agent.utils.partition_utils [-] Info result: {'generic': {'dev': '/dev/vda', 'physical_block': 512, 'table': 'gpt', 'logical_block': 512, 'model': 'Virtio Block Device', 'size': 51200}, 'parts': [{'begin': 1, 'num': 1, 'end': 51200, 'fstype': 'free', 'size': 51200}]} -2015-04-21T10:45:11.242040+00:00 info: 2015-04-21 10:45:11.171 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: udevadm settle --quiet -2015-04-21T10:45:11.242213+00:00 info: 2015-04-21 10:45:11.179 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: parted -a optimal -s /dev/vda unit MiB mkpart primary 1 25 -2015-04-21T10:45:11.242437+00:00 info: 2015-04-21 10:45:11.215 2732 DEBUG fuel_agent.utils.partition_utils [-] Parted output: -2015-04-21T10:45:11.242655+00:00 info: -2015-04-21T10:45:11.242798+00:00 info: 2015-04-21 10:45:11.216 2732 DEBUG fuel_agent.utils.partition_utils [-] Trying to set partition flag: dev=/dev/vda num=1 flag=bios_grub state=on -2015-04-21T10:45:11.242973+00:00 info: 2015-04-21 10:45:11.217 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: udevadm settle --quiet -2015-04-21T10:45:11.243148+00:00 info: 2015-04-21 10:45:11.224 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: parted -s /dev/vda set 1 bios_grub on -2015-04-21T10:45:11.754973+00:00 info: 2015-04-21 10:45:11.267 2732 DEBUG fuel_agent.utils.partition_utils [-] Parted output: -2015-04-21T10:45:11.755551+00:00 info: -2015-04-21T10:45:11.756258+00:00 info: 2015-04-21 10:45:11.268 2732 DEBUG fuel_agent.utils.partition_utils [-] Trying to create a partition: dev=/dev/vda begin=25 end=225 -2015-04-21T10:45:11.756423+00:00 info: 2015-04-21 10:45:11.268 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: udevadm settle --quiet -2015-04-21T10:45:11.756681+00:00 info: 2015-04-21 10:45:11.275 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: parted -s /dev/vda -m unit MiB print free -2015-04-21T10:45:11.756874+00:00 info: 2015-04-21 10:45:11.303 2732 DEBUG fuel_agent.utils.partition_utils [-] Info output: -2015-04-21T10:45:11.757075+00:00 info: BYT; -2015-04-21T10:45:11.757268+00:00 info: /dev/vda:51200MiB:virtblk:512:512:gpt:Virtio Block Device; -2015-04-21T10:45:11.757508+00:00 info: 1:0.02MiB:1.00MiB:0.98MiB:free; -2015-04-21T10:45:11.757662+00:00 info: 1:1.00MiB:25.0MiB:24.0MiB::primary:bios_grub; -2015-04-21T10:45:11.757865+00:00 info: 1:25.0MiB:51200MiB:51175MiB:free; -2015-04-21T10:45:11.758059+00:00 info: -2015-04-21T10:45:11.758268+00:00 info: 2015-04-21 10:45:11.305 2732 DEBUG fuel_agent.utils.partition_utils [-] Info result: {'generic': {'dev': '/dev/vda', 'physical_block': 512, 'table': 'gpt', 'logical_block': 512, 'model': 'Virtio Block Device', 'size': 51200}, 'parts': [{'begin': 1, 'num': 1, 'end': 1, 'fstype': 'free', 'size': 1}, {'begin': 1, 'num': 1, 'end': 25, 'fstype': None, 'size': 24}, {'begin': 25, 'num': 1, 'end': 51200, 'fstype': 'free', 'size': 51175}]} -2015-04-21T10:45:11.758499+00:00 info: 2015-04-21 10:45:11.305 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: udevadm settle --quiet -2015-04-21T10:45:11.758698+00:00 info: 2015-04-21 10:45:11.313 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: parted -a optimal -s /dev/vda unit MiB mkpart primary 25 225 -2015-04-21T10:45:11.758898+00:00 info: 2015-04-21 10:45:11.362 2732 DEBUG fuel_agent.utils.partition_utils [-] Parted output: -2015-04-21T10:45:11.759039+00:00 info: -2015-04-21T10:45:11.759247+00:00 info: 2015-04-21 10:45:11.363 2732 DEBUG fuel_agent.utils.partition_utils [-] Trying to create a partition: dev=/dev/vda begin=225 end=425 -2015-04-21T10:45:11.759434+00:00 info: 2015-04-21 10:45:11.363 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: udevadm settle --quiet -2015-04-21T10:45:11.759647+00:00 info: 2015-04-21 10:45:11.372 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: parted -s /dev/vda -m unit MiB print free -2015-04-21T10:45:11.759826+00:00 info: 2015-04-21 10:45:11.396 2732 DEBUG fuel_agent.utils.partition_utils [-] Info output: -2015-04-21T10:45:11.760004+00:00 info: BYT; -2015-04-21T10:45:11.760188+00:00 info: /dev/vda:51200MiB:virtblk:512:512:gpt:Virtio Block Device; -2015-04-21T10:45:11.760350+00:00 info: 1:0.02MiB:1.00MiB:0.98MiB:free; -2015-04-21T10:45:11.760575+00:00 info: 1:1.00MiB:25.0MiB:24.0MiB::primary:bios_grub; -2015-04-21T10:45:11.760751+00:00 info: 2:25.0MiB:225MiB:200MiB::primary:; -2015-04-21T10:45:11.760927+00:00 info: 1:225MiB:51200MiB:50975MiB:free; -2015-04-21T10:45:11.761100+00:00 info: -2015-04-21T10:45:11.761307+00:00 info: 2015-04-21 10:45:11.397 2732 DEBUG fuel_agent.utils.partition_utils [-] Info result: {'generic': {'dev': '/dev/vda', 'physical_block': 512, 'table': 'gpt', 'logical_block': 512, 'model': 'Virtio Block Device', 'size': 51200}, 'parts': [{'begin': 1, 'num': 1, 'end': 1, 'fstype': 'free', 'size': 1}, {'begin': 1, 'num': 1, 'end': 25, 'fstype': None, 'size': 24}, {'begin': 25, 'num': 2, 'end': 225, 'fstype': None, 'size': 200}, {'begin': 225, 'num': 1, 'end': 51200, 'fstype': 'free', 'size': 50975}]} -2015-04-21T10:45:11.761518+00:00 info: 2015-04-21 10:45:11.397 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: udevadm settle --quiet -2015-04-21T10:45:11.761763+00:00 info: 2015-04-21 10:45:11.406 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: parted -a optimal -s /dev/vda unit MiB mkpart primary 225 425 -2015-04-21T10:45:11.761934+00:00 info: 2015-04-21 10:45:11.438 2732 DEBUG fuel_agent.utils.partition_utils [-] Parted output: -2015-04-21T10:45:11.762108+00:00 info: -2015-04-21T10:45:11.762291+00:00 info: 2015-04-21 10:45:11.438 2732 DEBUG fuel_agent.utils.partition_utils [-] Trying to create a partition: dev=/dev/vda begin=425 end=19945 -2015-04-21T10:45:11.762512+00:00 info: 2015-04-21 10:45:11.439 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: udevadm settle --quiet -2015-04-21T10:45:11.762696+00:00 info: 2015-04-21 10:45:11.446 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: parted -s /dev/vda -m unit MiB print free -2015-04-21T10:45:11.762871+00:00 info: 2015-04-21 10:45:11.465 2732 DEBUG fuel_agent.utils.partition_utils [-] Info output: -2015-04-21T10:45:11.763032+00:00 info: BYT; -2015-04-21T10:45:11.763229+00:00 info: /dev/vda:51200MiB:virtblk:512:512:gpt:Virtio Block Device; -2015-04-21T10:45:11.763411+00:00 info: 1:0.02MiB:1.00MiB:0.98MiB:free; -2015-04-21T10:45:11.763783+00:00 info: 1:1.00MiB:25.0MiB:24.0MiB::primary:bios_grub; -2015-04-21T10:45:11.763783+00:00 info: 2:25.0MiB:225MiB:200MiB::primary:; -2015-04-21T10:45:11.763965+00:00 info: 3:225MiB:425MiB:200MiB::primary:; -2015-04-21T10:45:11.764142+00:00 info: 1:425MiB:51200MiB:50775MiB:free; -2015-04-21T10:45:11.764298+00:00 info: -2015-04-21T10:45:11.764541+00:00 info: 2015-04-21 10:45:11.466 2732 DEBUG fuel_agent.utils.partition_utils [-] Info result: {'generic': {'dev': '/dev/vda', 'physical_block': 512, 'table': 'gpt', 'logical_block': 512, 'model': 'Virtio Block Device', 'size': 51200}, 'parts': [{'begin': 1, 'num': 1, 'end': 1, 'fstype': 'free', 'size': 1}, {'begin': 1, 'num': 1, 'end': 25, 'fstype': None, 'size': 24}, {'begin': 25, 'num': 2, 'end': 225, 'fstype': None, 'size': 200}, {'begin': 225, 'num': 3, 'end': 425, 'fstype': None, 'size': 200}, {'begin': 425, 'num': 1, 'end': 51200, 'fstype': 'free', 'size': 50775}]} -2015-04-21T10:45:11.764740+00:00 info: 2015-04-21 10:45:11.466 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: udevadm settle --quiet -2015-04-21T10:45:11.764923+00:00 info: 2015-04-21 10:45:11.473 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: parted -a optimal -s /dev/vda unit MiB mkpart primary 425 19945 -2015-04-21T10:45:11.765146+00:00 info: 2015-04-21 10:45:11.506 2732 DEBUG fuel_agent.utils.partition_utils [-] Parted output: -2015-04-21T10:45:11.765313+00:00 info: -2015-04-21T10:45:11.765527+00:00 info: 2015-04-21 10:45:11.506 2732 DEBUG fuel_agent.utils.partition_utils [-] Trying to create a partition: dev=/dev/vda begin=19945 end=51125 -2015-04-21T10:45:11.765699+00:00 info: 2015-04-21 10:45:11.506 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: udevadm settle --quiet -2015-04-21T10:45:11.765887+00:00 info: 2015-04-21 10:45:11.512 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: parted -s /dev/vda -m unit MiB print free -2015-04-21T10:45:11.766082+00:00 info: 2015-04-21 10:45:11.533 2732 DEBUG fuel_agent.utils.partition_utils [-] Info output: -2015-04-21T10:45:11.766265+00:00 info: BYT; -2015-04-21T10:45:11.766444+00:00 info: /dev/vda:51200MiB:virtblk:512:512:gpt:Virtio Block Device; -2015-04-21T10:45:11.766661+00:00 info: 1:0.02MiB:1.00MiB:0.98MiB:free; -2015-04-21T10:45:11.766831+00:00 info: 1:1.00MiB:25.0MiB:24.0MiB::primary:bios_grub; -2015-04-21T10:45:11.767006+00:00 info: 2:25.0MiB:225MiB:200MiB::primary:; -2015-04-21T10:45:11.767245+00:00 info: 3:225MiB:425MiB:200MiB::primary:; -2015-04-21T10:45:11.767446+00:00 info: 4:425MiB:19945MiB:19520MiB::primary:; -2015-04-21T10:45:11.767645+00:00 info: 1:19945MiB:51200MiB:31255MiB:free; -2015-04-21T10:45:11.767816+00:00 info: -2015-04-21T10:45:11.768028+00:00 info: 2015-04-21 10:45:11.534 2732 DEBUG fuel_agent.utils.partition_utils [-] Info result: {'generic': {'dev': '/dev/vda', 'physical_block': 512, 'table': 'gpt', 'logical_block': 512, 'model': 'Virtio Block Device', 'size': 51200}, 'parts': [{'begin': 1, 'num': 1, 'end': 1, 'fstype': 'free', 'size': 1}, {'begin': 1, 'num': 1, 'end': 25, 'fstype': None, 'size': 24}, {'begin': 25, 'num': 2, 'end': 225, 'fstype': None, 'size': 200}, {'begin': 225, 'num': 3, 'end': 425, 'fstype': None, 'size': 200}, {'begin': 425, 'num': 4, 'end': 19945, 'fstype': None, 'size': 19520}, {'begin': 19945, 'num': 1, 'end': 51200, 'fstype': 'free', 'size': 31255}]} -2015-04-21T10:45:11.768205+00:00 info: 2015-04-21 10:45:11.534 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: udevadm settle --quiet -2015-04-21T10:45:11.768639+00:00 info: 2015-04-21 10:45:11.542 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: parted -a optimal -s /dev/vda unit MiB mkpart primary 19945 51125 -2015-04-21T10:45:11.768639+00:00 info: 2015-04-21 10:45:11.602 2732 DEBUG fuel_agent.utils.partition_utils [-] Parted output: -2015-04-21T10:45:11.768760+00:00 info: -2015-04-21T10:45:11.768973+00:00 info: 2015-04-21 10:45:11.603 2732 DEBUG fuel_agent.utils.partition_utils [-] Trying to create a partition: dev=/dev/vda begin=51125 end=51145 -2015-04-21T10:45:11.769151+00:00 info: 2015-04-21 10:45:11.603 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: udevadm settle --quiet -2015-04-21T10:45:11.769332+00:00 info: 2015-04-21 10:45:11.608 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: parted -s /dev/vda -m unit MiB print free -2015-04-21T10:45:11.769677+00:00 info: 2015-04-21 10:45:11.640 2732 DEBUG fuel_agent.utils.partition_utils [-] Info output: -2015-04-21T10:45:11.769677+00:00 info: BYT; -2015-04-21T10:45:11.769880+00:00 info: /dev/vda:51200MiB:virtblk:512:512:gpt:Virtio Block Device; -2015-04-21T10:45:11.770057+00:00 info: 1:0.02MiB:1.00MiB:0.98MiB:free; -2015-04-21T10:45:11.770253+00:00 info: 1:1.00MiB:25.0MiB:24.0MiB::primary:bios_grub; -2015-04-21T10:45:11.770490+00:00 info: 2:25.0MiB:225MiB:200MiB::primary:; -2015-04-21T10:45:11.770664+00:00 info: 3:225MiB:425MiB:200MiB::primary:; -2015-04-21T10:45:11.770838+00:00 info: 4:425MiB:19945MiB:19520MiB::primary:; -2015-04-21T10:45:11.771014+00:00 info: 5:19945MiB:51125MiB:31180MiB::primary:; -2015-04-21T10:45:11.771210+00:00 info: 1:51125MiB:51200MiB:75.0MiB:free; -2015-04-21T10:45:11.771350+00:00 info: -2015-04-21T10:45:11.771613+00:00 info: 2015-04-21 10:45:11.641 2732 DEBUG fuel_agent.utils.partition_utils [-] Info result: {'generic': {'dev': '/dev/vda', 'physical_block': 512, 'table': 'gpt', 'logical_block': 512, 'model': 'Virtio Block Device', 'size': 51200}, 'parts': [{'begin': 1, 'num': 1, 'end': 1, 'fstype': 'free', 'size': 1}, {'begin': 1, 'num': 1, 'end': 25, 'fstype': None, 'size': 24}, {'begin': 25, 'num': 2, 'end': 225, 'fstype': None, 'size': 200}, {'begin': 225, 'num': 3, 'end': 425, 'fstype': None, 'size': 200}, {'begin': 425, 'num': 4, 'end': 19945, 'fstype': None, 'size': 19520}, {'begin': 19945, 'num': 5, 'end': 51125, 'fstype': None, 'size': 31180}, {'begin': 51125, 'num': 1, 'end': 51200, 'fstype': 'free', 'size': 75}]} -2015-04-21T10:45:11.771882+00:00 info: 2015-04-21 10:45:11.642 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: udevadm settle --quiet -2015-04-21T10:45:11.772013+00:00 info: 2015-04-21 10:45:11.648 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: parted -a optimal -s /dev/vda unit MiB mkpart primary 51125 51145 -2015-04-21T10:45:11.772202+00:00 info: 2015-04-21 10:45:11.692 2732 DEBUG fuel_agent.utils.partition_utils [-] Parted output: -2015-04-21T10:45:11.772376+00:00 info: -2015-04-21T10:45:11.772606+00:00 info: 2015-04-21 10:45:11.693 2732 DEBUG fuel_agent.manager [-] Disabling udev's rules blacklisting -2015-04-21T10:45:11.772761+00:00 info: 2015-04-21 10:45:11.698 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: udevadm control --reload-rules -2015-04-21T10:45:11.772946+00:00 info: 2015-04-21 10:45:11.705 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: udevadm trigger -2015-04-21T10:45:11.773147+00:00 info: 2015-04-21 10:45:11.727 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: udevadm settle --quiet -2015-04-21T10:45:42.345843+00:00 info: 2015-04-21 10:45:41.957 2732 DEBUG fuel_agent.utils.md_utils [-] Trying to wipe out all md devices -2015-04-21T10:45:42.346100+00:00 info: 2015-04-21 10:45:41.958 2732 DEBUG fuel_agent.utils.md_utils [-] Found md devices: [] -2015-04-21T10:45:42.346352+00:00 info: 2015-04-21 10:45:41.958 2732 DEBUG fuel_agent.utils.md_utils [-] Found md devices: [] -2015-04-21T10:45:42.346673+00:00 info: 2015-04-21 10:45:41.959 2732 DEBUG fuel_agent.utils.md_utils [-] Found md devices: [] -2015-04-21T10:45:42.346914+00:00 info: 2015-04-21 10:45:41.959 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: lvdisplay -C --noheading --units m --options lv_name,lv_size,vg_name,lv_uuid --separator ; -2015-04-21T10:45:42.347119+00:00 info: 2015-04-21 10:45:41.973 2732 DEBUG fuel_agent.utils.lvm_utils [-] Found logical volumes: [] -2015-04-21T10:45:42.347363+00:00 info: 2015-04-21 10:45:41.974 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: vgdisplay -C --noheading --units m --options vg_name,vg_uuid,vg_size,vg_free --separator ; -2015-04-21T10:45:42.347764+00:00 info: 2015-04-21 10:45:41.986 2732 DEBUG fuel_agent.utils.lvm_utils [-] Found volume groups: [] -2015-04-21T10:45:42.348028+00:00 info: 2015-04-21 10:45:41.986 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: pvdisplay -C --noheading --units m --options pv_name,vg_name,pv_size,dev_size,pv_uuid --separator ; -2015-04-21T10:45:42.348349+00:00 info: 2015-04-21 10:45:41.996 2732 DEBUG fuel_agent.utils.lvm_utils [-] Found physical volumes: [] -2015-04-21T10:45:42.348637+00:00 info: 2015-04-21 10:45:41.997 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: pvdisplay -C --noheading --units m --options pv_name,vg_name,pv_size,dev_size,pv_uuid --separator ; -2015-04-21T10:45:42.348947+00:00 info: 2015-04-21 10:45:42.010 2732 DEBUG fuel_agent.utils.lvm_utils [-] Found physical volumes: [] -2015-04-21T10:45:42.349275+00:00 info: 2015-04-21 10:45:42.011 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: pvcreate --metadatacopies 2 --metadatasize 28m /dev/vda4 -2015-04-21T10:45:42.349573+00:00 info: 2015-04-21 10:45:42.055 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: pvdisplay -C --noheading --units m --options pv_name,vg_name,pv_size,dev_size,pv_uuid --separator ; -2015-04-21T10:45:42.349895+00:00 info: 2015-04-21 10:45:42.079 2732 DEBUG fuel_agent.utils.lvm_utils [-] Found physical volumes: [{'uuid': 'KJjQv1-qUNO-gktc-fd5Q-LiaO-ZDNM-qGo2zf', 'devsize': 19520, 'name': '/dev/vda4', 'psize': 19520, 'vg': None}] -2015-04-21T10:45:42.350187+00:00 info: 2015-04-21 10:45:42.080 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: pvcreate --metadatacopies 2 --metadatasize 28m /dev/vda5 -2015-04-21T10:45:42.350513+00:00 info: 2015-04-21 10:45:42.117 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: vgdisplay -C --noheading --units m --options vg_name,vg_uuid,vg_size,vg_free --separator ; -2015-04-21T10:45:42.350874+00:00 info: 2015-04-21 10:45:42.128 2732 DEBUG fuel_agent.utils.lvm_utils [-] Found volume groups: [] -2015-04-21T10:45:42.351188+00:00 info: 2015-04-21 10:45:42.128 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: pvdisplay -C --noheading --units m --options pv_name,vg_name,pv_size,dev_size,pv_uuid --separator ; -2015-04-21T10:45:42.351554+00:00 info: 2015-04-21 10:45:42.157 2732 DEBUG fuel_agent.utils.lvm_utils [-] Found physical volumes: [{'uuid': 'KJjQv1-qUNO-gktc-fd5Q-LiaO-ZDNM-qGo2zf', 'devsize': 19520, 'name': '/dev/vda4', 'psize': 19520, 'vg': None}, {'uuid': '7ba3OK-emCW-WrPF-0wyD-kcaQ-VU2J-eGjJ7S', 'devsize': 31180, 'name': '/dev/vda5', 'psize': 31180, 'vg': None}] -2015-04-21T10:45:42.351805+00:00 info: 2015-04-21 10:45:42.158 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: vgcreate os /dev/vda4 -2015-04-21T10:45:42.352207+00:00 info: 2015-04-21 10:45:42.209 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: vgdisplay -C --noheading --units m --options vg_name,vg_uuid,vg_size,vg_free --separator ; -2015-04-21T10:45:42.352504+00:00 info: 2015-04-21 10:45:42.225 2732 DEBUG fuel_agent.utils.lvm_utils [-] Found volume groups: [{'size': 19460, 'name': 'os', 'free': 19460, 'uuid': 'NMymzX-6lZL-u34I-moOR-6udc-2YJv-vqyeiI'}] -2015-04-21T10:45:42.352840+00:00 info: 2015-04-21 10:45:42.226 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: pvdisplay -C --noheading --units m --options pv_name,vg_name,pv_size,dev_size,pv_uuid --separator ; -2015-04-21T10:45:42.353143+00:00 info: 2015-04-21 10:45:42.257 2732 DEBUG fuel_agent.utils.lvm_utils [-] Found physical volumes: [{'uuid': 'KJjQv1-qUNO-gktc-fd5Q-LiaO-ZDNM-qGo2zf', 'devsize': 19520, 'name': '/dev/vda4', 'psize': 19460, 'vg': 'os'}, {'uuid': '7ba3OK-emCW-WrPF-0wyD-kcaQ-VU2J-eGjJ7S', 'devsize': 31180, 'name': '/dev/vda5', 'psize': 31180, 'vg': None}] -2015-04-21T10:45:42.353525+00:00 info: 2015-04-21 10:45:42.258 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: vgcreate image /dev/vda5 -2015-04-21T10:45:42.353830+00:00 info: 2015-04-21 10:45:42.313 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: vgdisplay -C --noheading --units m --options vg_name,vg_uuid,vg_size,vg_free --separator ; -2015-04-21T10:45:42.354444+00:00 info: 2015-04-21 10:45:42.335 2732 DEBUG fuel_agent.utils.lvm_utils [-] Found volume groups: [{'size': 31120, 'name': 'image', 'free': 31120, 'uuid': 'aUlrSg-S6oF-pB7R-tan9-sMe8-ycK8-yqbppu'}, {'size': 19460, 'name': 'os', 'free': 19460, 'uuid': 'NMymzX-6lZL-u34I-moOR-6udc-2YJv-vqyeiI'}] -2015-04-21T10:45:42.354444+00:00 info: 2015-04-21 10:45:42.335 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: lvdisplay -C --noheading --units m --options lv_name,lv_size,vg_name,lv_uuid --separator ; -2015-04-21T10:45:42.856276+00:00 info: 2015-04-21 10:45:42.361 2732 DEBUG fuel_agent.utils.lvm_utils [-] Found logical volumes: [] -2015-04-21T10:45:42.856459+00:00 info: 2015-04-21 10:45:42.362 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: lvcreate -L 15360m -n root os -2015-04-21T10:45:42.856747+00:00 info: 2015-04-21 10:45:42.416 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: vgdisplay -C --noheading --units m --options vg_name,vg_uuid,vg_size,vg_free --separator ; -2015-04-21T10:45:42.856988+00:00 info: 2015-04-21 10:45:42.443 2732 DEBUG fuel_agent.utils.lvm_utils [-] Found volume groups: [{'size': 31120, 'name': 'image', 'free': 31120, 'uuid': 'aUlrSg-S6oF-pB7R-tan9-sMe8-ycK8-yqbppu'}, {'size': 19460, 'name': 'os', 'free': 4100, 'uuid': 'NMymzX-6lZL-u34I-moOR-6udc-2YJv-vqyeiI'}] -2015-04-21T10:45:42.857137+00:00 info: 2015-04-21 10:45:42.444 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: lvdisplay -C --noheading --units m --options lv_name,lv_size,vg_name,lv_uuid --separator ; -2015-04-21T10:45:42.857588+00:00 info: 2015-04-21 10:45:42.469 2732 DEBUG fuel_agent.utils.lvm_utils [-] Found logical volumes: [{'path': '/dev/os/root', 'uuid': 'wVovPZ-C8kq-uRpN-DHUK-OLkQ-Dmrf-t89CKa', 'vg': 'os', 'name': 'root', 'size': 15360}] -2015-04-21T10:45:42.857588+00:00 info: 2015-04-21 10:45:42.470 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: lvcreate -L 4096m -n swap os -2015-04-21T10:45:42.857691+00:00 info: 2015-04-21 10:45:42.521 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: vgdisplay -C --noheading --units m --options vg_name,vg_uuid,vg_size,vg_free --separator ; -2015-04-21T10:45:42.857821+00:00 info: 2015-04-21 10:45:42.552 2732 DEBUG fuel_agent.utils.lvm_utils [-] Found volume groups: [{'size': 31120, 'name': 'image', 'free': 31120, 'uuid': 'aUlrSg-S6oF-pB7R-tan9-sMe8-ycK8-yqbppu'}, {'size': 19460, 'name': 'os', 'free': 4, 'uuid': 'NMymzX-6lZL-u34I-moOR-6udc-2YJv-vqyeiI'}] -2015-04-21T10:45:42.858145+00:00 info: 2015-04-21 10:45:42.552 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: lvdisplay -C --noheading --units m --options lv_name,lv_size,vg_name,lv_uuid --separator ; -2015-04-21T10:45:42.858361+00:00 info: 2015-04-21 10:45:42.577 2732 DEBUG fuel_agent.utils.lvm_utils [-] Found logical volumes: [{'path': '/dev/os/root', 'uuid': 'wVovPZ-C8kq-uRpN-DHUK-OLkQ-Dmrf-t89CKa', 'vg': 'os', 'name': 'root', 'size': 15360}, {'path': '/dev/os/swap', 'uuid': 'nKPagB-m1DH-PGq0-nWzB-90Mc-zJOt-566dtr', 'vg': 'os', 'name': 'swap', 'size': 4096}] -2015-04-21T10:45:42.858486+00:00 info: 2015-04-21 10:45:42.578 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: lvcreate -L 31116m -n glance image -2015-04-21T10:45:42.858725+00:00 info: 2015-04-21 10:45:42.629 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: mkswap /dev/mapper/os-swap -2015-04-21T10:45:42.858929+00:00 info: 2015-04-21 10:45:42.647 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: mkfs.xfs /dev/mapper/image-glance -2015-04-21T10:45:42.859113+00:00 info: 2015-04-21 10:45:42.785 2732 DEBUG fuel_agent.manager [-] --- Creating configdrive (do_configdrive) --- -2015-04-21T10:45:42.859278+00:00 info: 2015-04-21 10:45:42.831 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: write-mime-multipart --output=/tmp/user-data /tmp/boothook.txt:text/cloud-boothook /tmp/cloud_config.txt:text/cloud-config -2015-04-21T10:45:43.360807+00:00 info: 2015-04-21 10:45:42.897 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: genisoimage -output /tmp/config-drive.img -volid cidata -joliet -rock /tmp/user-data /tmp/meta-data -2015-04-21T10:45:43.361025+00:00 info: 2015-04-21 10:45:42.907 2732 DEBUG fuel_agent.manager [-] --- Copying images (do_copyimage) --- -2015-04-21T10:45:43.361301+00:00 info: 2015-04-21 10:45:42.908 2732 DEBUG fuel_agent.manager [-] Processing image: http://10.20.0.2:8080/targetimages/env_1_ubuntu_1404_amd64-boot.img.gz -2015-04-21T10:45:43.361542+00:00 info: 2015-04-21 10:45:42.908 2732 DEBUG fuel_agent.manager [-] Appending uri processor: http://10.20.0.2:8080/targetimages/env_1_ubuntu_1404_amd64-boot.img.gz -2015-04-21T10:45:43.361793+00:00 info: 2015-04-21 10:45:42.908 2732 DEBUG fuel_agent.manager [-] Appending HTTP processor -2015-04-21T10:45:43.362082+00:00 info: 2015-04-21 10:45:42.908 2732 DEBUG fuel_agent.manager [-] Appending GZIP processor -2015-04-21T10:45:43.362367+00:00 info: 2015-04-21 10:45:42.909 2732 DEBUG fuel_agent.manager [-] Appending TARGET processor: /dev/vda3 -2015-04-21T10:45:43.362734+00:00 info: 2015-04-21 10:45:42.909 2732 DEBUG fuel_agent.manager [-] Launching image processing chain -2015-04-21T10:45:43.363013+00:00 info: 2015-04-21 10:45:42.909 2732 DEBUG fuel_agent.utils.utils [-] Trying to initialize http request object http://10.20.0.2:8080/targetimages/env_1_ubuntu_1404_amd64-boot.img.gz, byte range: 0 -2015-04-21T10:45:43.363325+00:00 info: 2015-04-21 10:45:42.911 2732 INFO urllib3.connectionpool [-] Starting new HTTP connection (1): 10.20.0.2 -2015-04-21T10:45:43.363659+00:00 info: 2015-04-21 10:45:42.912 2732 DEBUG urllib3.connectionpool [-] Setting read timeout to -2015-04-21T10:45:43.363967+00:00 info: 2015-04-21 10:45:42.914 2732 DEBUG urllib3.connectionpool [-] "GET /targetimages/env_1_ubuntu_1404_amd64-boot.img.gz HTTP/1.1" 206 27028381 -2015-04-21T10:45:43.364227+00:00 info: 2015-04-21 10:45:42.914 2732 DEBUG fuel_agent.utils.utils [-] Successful http request to http://10.20.0.2:8080/targetimages/env_1_ubuntu_1404_amd64-boot.img.gz on 1 retry -2015-04-21T10:45:43.364483+00:00 info: 2015-04-21 10:45:42.914 2732 DEBUG fuel_agent.utils.artifact_utils [-] Expected content length 27028381 for http://10.20.0.2:8080/targetimages/env_1_ubuntu_1404_amd64-boot.img.gz -2015-04-21T10:45:43.364716+00:00 info: 2015-04-21 10:45:42.915 2732 DEBUG fuel_agent.utils.artifact_utils [-] Processor target: /dev/vda3 -2015-04-21T10:45:43.365016+00:00 info: 2015-04-21 10:45:42.915 2732 DEBUG fuel_agent.utils.artifact_utils [-] Opening file: /dev/vda3 for write -2015-04-21T10:45:43.365242+00:00 info: 2015-04-21 10:45:42.944 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 0 -2015-04-21T10:45:43.365457+00:00 info: 2015-04-21 10:45:42.954 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 1 -2015-04-21T10:45:43.365721+00:00 info: 2015-04-21 10:45:42.961 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 2 -2015-04-21T10:45:43.366024+00:00 info: 2015-04-21 10:45:42.967 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 3 -2015-04-21T10:45:43.366272+00:00 info: 2015-04-21 10:45:42.975 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 4 -2015-04-21T10:45:43.366504+00:00 info: 2015-04-21 10:45:42.992 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 5 -2015-04-21T10:45:43.366718+00:00 info: 2015-04-21 10:45:43.016 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 6 -2015-04-21T10:45:43.366973+00:00 info: 2015-04-21 10:45:43.027 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 7 -2015-04-21T10:45:43.367254+00:00 info: 2015-04-21 10:45:43.037 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 8 -2015-04-21T10:45:43.367513+00:00 info: 2015-04-21 10:45:43.044 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 9 -2015-04-21T10:45:43.367789+00:00 info: 2015-04-21 10:45:43.055 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 10 -2015-04-21T10:45:43.368068+00:00 info: 2015-04-21 10:45:43.062 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 11 -2015-04-21T10:45:43.368397+00:00 info: 2015-04-21 10:45:43.073 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 12 -2015-04-21T10:45:43.368640+00:00 info: 2015-04-21 10:45:43.083 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 13 -2015-04-21T10:45:43.368942+00:00 info: 2015-04-21 10:45:43.093 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 14 -2015-04-21T10:45:43.369206+00:00 info: 2015-04-21 10:45:43.103 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 15 -2015-04-21T10:45:43.369468+00:00 info: 2015-04-21 10:45:43.112 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 16 -2015-04-21T10:45:43.369699+00:00 info: 2015-04-21 10:45:43.121 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 17 -2015-04-21T10:45:43.370036+00:00 info: 2015-04-21 10:45:43.131 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 18 -2015-04-21T10:45:43.370213+00:00 info: 2015-04-21 10:45:43.141 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 19 -2015-04-21T10:45:43.370457+00:00 info: 2015-04-21 10:45:43.150 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 20 -2015-04-21T10:45:43.370722+00:00 info: 2015-04-21 10:45:43.159 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 21 -2015-04-21T10:45:43.371029+00:00 info: 2015-04-21 10:45:43.172 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 22 -2015-04-21T10:45:43.371215+00:00 info: 2015-04-21 10:45:43.182 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 23 -2015-04-21T10:45:43.371443+00:00 info: 2015-04-21 10:45:43.193 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 24 -2015-04-21T10:45:43.371667+00:00 info: 2015-04-21 10:45:43.201 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 25 -2015-04-21T10:45:43.371949+00:00 info: 2015-04-21 10:45:43.203 2732 DEBUG fuel_agent.utils.artifact_utils [-] Flushing file: /dev/vda3 -2015-04-21T10:45:43.372196+00:00 info: 2015-04-21 10:45:43.338 2732 DEBUG fuel_agent.utils.artifact_utils [-] File is written: /dev/vda3 -2015-04-21T10:45:43.372448+00:00 info: 2015-04-21 10:45:43.340 2732 DEBUG fuel_agent.manager [-] Trying to compare image checksum -2015-04-21T10:45:43.873875+00:00 info: 2015-04-21 10:45:43.487 2732 DEBUG fuel_agent.manager [-] Checksum matches successfully: md5=488ade077eecf439b7838a18279732d6 -2015-04-21T10:45:43.874119+00:00 info: 2015-04-21 10:45:43.488 2732 DEBUG fuel_agent.manager [-] Extending image file systems -2015-04-21T10:45:43.874348+00:00 info: 2015-04-21 10:45:43.488 2732 DEBUG fuel_agent.manager [-] Extending ext2 /dev/vda3 -2015-04-21T10:45:43.874602+00:00 info: 2015-04-21 10:45:43.488 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: e2fsck -yf /dev/vda3 -2015-04-21T10:45:43.874843+00:00 info: 2015-04-21 10:45:43.544 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: resize2fs /dev/vda3 -2015-04-21T10:45:43.875119+00:00 info: 2015-04-21 10:45:43.625 2732 DEBUG fuel_agent.manager [-] Processing image: http://10.20.0.2:8080/targetimages/env_1_ubuntu_1404_amd64.img.gz -2015-04-21T10:45:43.875387+00:00 info: 2015-04-21 10:45:43.626 2732 DEBUG fuel_agent.manager [-] Appending uri processor: http://10.20.0.2:8080/targetimages/env_1_ubuntu_1404_amd64.img.gz -2015-04-21T10:45:43.875622+00:00 info: 2015-04-21 10:45:43.626 2732 DEBUG fuel_agent.manager [-] Appending HTTP processor -2015-04-21T10:45:43.875847+00:00 info: 2015-04-21 10:45:43.627 2732 DEBUG fuel_agent.manager [-] Appending GZIP processor -2015-04-21T10:45:43.876182+00:00 info: 2015-04-21 10:45:43.627 2732 DEBUG fuel_agent.manager [-] Appending TARGET processor: /dev/mapper/os-root -2015-04-21T10:45:43.876433+00:00 info: 2015-04-21 10:45:43.627 2732 DEBUG fuel_agent.manager [-] Launching image processing chain -2015-04-21T10:45:43.876685+00:00 info: 2015-04-21 10:45:43.628 2732 DEBUG fuel_agent.utils.utils [-] Trying to initialize http request object http://10.20.0.2:8080/targetimages/env_1_ubuntu_1404_amd64.img.gz, byte range: 0 -2015-04-21T10:45:43.876934+00:00 info: 2015-04-21 10:45:43.633 2732 INFO urllib3.connectionpool [-] Starting new HTTP connection (1): 10.20.0.2 -2015-04-21T10:45:43.877179+00:00 info: 2015-04-21 10:45:43.635 2732 DEBUG urllib3.connectionpool [-] Setting read timeout to -2015-04-21T10:45:43.877422+00:00 info: 2015-04-21 10:45:43.637 2732 DEBUG urllib3.connectionpool [-] "GET /targetimages/env_1_ubuntu_1404_amd64.img.gz HTTP/1.1" 206 558628807 -2015-04-21T10:45:43.877675+00:00 info: 2015-04-21 10:45:43.638 2732 DEBUG fuel_agent.utils.utils [-] Successful http request to http://10.20.0.2:8080/targetimages/env_1_ubuntu_1404_amd64.img.gz on 1 retry -2015-04-21T10:45:43.877956+00:00 info: 2015-04-21 10:45:43.638 2732 DEBUG fuel_agent.utils.artifact_utils [-] Expected content length 558628807 for http://10.20.0.2:8080/targetimages/env_1_ubuntu_1404_amd64.img.gz -2015-04-21T10:45:43.878196+00:00 info: 2015-04-21 10:45:43.639 2732 DEBUG fuel_agent.utils.artifact_utils [-] Processor target: /dev/mapper/os-root -2015-04-21T10:45:43.878408+00:00 info: 2015-04-21 10:45:43.639 2732 DEBUG fuel_agent.utils.artifact_utils [-] Opening file: /dev/mapper/os-root for write -2015-04-21T10:45:43.878628+00:00 info: 2015-04-21 10:45:43.743 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 0 -2015-04-21T10:45:44.380227+00:00 info: 2015-04-21 10:45:43.996 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 1 -2015-04-21T10:45:44.380269+00:00 info: 2015-04-21 10:45:44.260 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 2 -2015-04-21T10:45:44.380436+00:00 info: 2015-04-21 10:45:44.343 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 3 -2015-04-21T10:45:44.380735+00:00 info: 2015-04-21 10:45:44.385 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 4 -2015-04-21T10:45:44.881978+00:00 info: 2015-04-21 10:45:44.425 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 5 -2015-04-21T10:45:44.882154+00:00 info: 2015-04-21 10:45:44.466 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 6 -2015-04-21T10:45:44.882393+00:00 info: 2015-04-21 10:45:44.505 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 7 -2015-04-21T10:45:44.882572+00:00 info: 2015-04-21 10:45:44.545 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 8 -2015-04-21T10:45:44.882771+00:00 info: 2015-04-21 10:45:44.586 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 9 -2015-04-21T10:45:44.883023+00:00 info: 2015-04-21 10:45:44.635 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 10 -2015-04-21T10:45:44.883181+00:00 info: 2015-04-21 10:45:44.689 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 11 -2015-04-21T10:45:44.883344+00:00 info: 2015-04-21 10:45:44.742 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 12 -2015-04-21T10:45:44.883530+00:00 info: 2015-04-21 10:45:44.791 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 13 -2015-04-21T10:45:44.883651+00:00 info: 2015-04-21 10:45:44.842 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 14 -2015-04-21T10:45:45.385256+00:00 info: 2015-04-21 10:45:44.895 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 15 -2015-04-21T10:45:45.385617+00:00 info: 2015-04-21 10:45:44.948 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 16 -2015-04-21T10:45:45.385892+00:00 info: 2015-04-21 10:45:44.995 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 17 -2015-04-21T10:45:45.386281+00:00 info: 2015-04-21 10:45:45.025 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 18 -2015-04-21T10:45:45.386538+00:00 info: 2015-04-21 10:45:45.044 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 19 -2015-04-21T10:45:45.387021+00:00 info: 2015-04-21 10:45:45.086 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 20 -2015-04-21T10:45:45.388260+00:00 info: 2015-04-21 10:45:45.135 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 21 -2015-04-21T10:45:45.388260+00:00 info: 2015-04-21 10:45:45.153 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 22 -2015-04-21T10:45:45.388274+00:00 info: 2015-04-21 10:45:45.160 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 23 -2015-04-21T10:45:45.388274+00:00 info: 2015-04-21 10:45:45.167 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 24 -2015-04-21T10:45:45.388390+00:00 info: 2015-04-21 10:45:45.176 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 25 -2015-04-21T10:45:45.389110+00:00 info: 2015-04-21 10:45:45.197 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 26 -2015-04-21T10:45:45.390259+00:00 info: 2015-04-21 10:45:45.217 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 27 -2015-04-21T10:45:45.390259+00:00 info: 2015-04-21 10:45:45.250 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 28 -2015-04-21T10:45:45.390275+00:00 info: 2015-04-21 10:45:45.279 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 29 -2015-04-21T10:45:45.390275+00:00 info: 2015-04-21 10:45:45.294 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 30 -2015-04-21T10:45:45.390283+00:00 info: 2015-04-21 10:45:45.303 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 31 -2015-04-21T10:45:45.390414+00:00 info: 2015-04-21 10:45:45.318 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 32 -2015-04-21T10:45:45.390777+00:00 info: 2015-04-21 10:45:45.338 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 33 -2015-04-21T10:45:45.391126+00:00 info: 2015-04-21 10:45:45.356 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 34 -2015-04-21T10:45:45.391368+00:00 info: 2015-04-21 10:45:45.378 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 35 -2015-04-21T10:45:45.892818+00:00 info: 2015-04-21 10:45:45.401 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 36 -2015-04-21T10:45:45.892920+00:00 info: 2015-04-21 10:45:45.420 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 37 -2015-04-21T10:45:45.893151+00:00 info: 2015-04-21 10:45:45.432 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 38 -2015-04-21T10:45:45.893280+00:00 info: 2015-04-21 10:45:45.452 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 39 -2015-04-21T10:45:45.893405+00:00 info: 2015-04-21 10:45:45.477 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 40 -2015-04-21T10:45:45.893563+00:00 info: 2015-04-21 10:45:45.493 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 41 -2015-04-21T10:45:45.893747+00:00 info: 2015-04-21 10:45:45.511 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 42 -2015-04-21T10:45:45.893954+00:00 info: 2015-04-21 10:45:45.525 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 43 -2015-04-21T10:45:45.894167+00:00 info: 2015-04-21 10:45:45.551 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 44 -2015-04-21T10:45:45.894267+00:00 info: 2015-04-21 10:45:45.573 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 45 -2015-04-21T10:45:45.894405+00:00 info: 2015-04-21 10:45:45.599 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 46 -2015-04-21T10:45:45.894581+00:00 info: 2015-04-21 10:45:45.657 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 47 -2015-04-21T10:45:45.894742+00:00 info: 2015-04-21 10:45:45.687 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 48 -2015-04-21T10:45:45.894893+00:00 info: 2015-04-21 10:45:45.712 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 49 -2015-04-21T10:45:45.895115+00:00 info: 2015-04-21 10:45:45.742 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 50 -2015-04-21T10:45:45.895293+00:00 info: 2015-04-21 10:45:45.762 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 51 -2015-04-21T10:45:45.895459+00:00 info: 2015-04-21 10:45:45.790 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 52 -2015-04-21T10:45:45.895646+00:00 info: 2015-04-21 10:45:45.803 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 53 -2015-04-21T10:45:45.895796+00:00 info: 2015-04-21 10:45:45.825 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 54 -2015-04-21T10:45:45.896018+00:00 info: 2015-04-21 10:45:45.838 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 55 -2015-04-21T10:45:45.896171+00:00 info: 2015-04-21 10:45:45.873 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 56 -2015-04-21T10:45:46.397517+00:00 info: 2015-04-21 10:45:45.902 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 57 -2015-04-21T10:45:46.397599+00:00 info: 2015-04-21 10:45:45.943 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 58 -2015-04-21T10:45:46.397831+00:00 info: 2015-04-21 10:45:45.980 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 59 -2015-04-21T10:45:46.398174+00:00 info: 2015-04-21 10:45:45.998 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 60 -2015-04-21T10:45:46.398334+00:00 info: 2015-04-21 10:45:46.018 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 61 -2015-04-21T10:45:46.398495+00:00 info: 2015-04-21 10:45:46.029 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 62 -2015-04-21T10:45:46.398636+00:00 info: 2015-04-21 10:45:46.037 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 63 -2015-04-21T10:45:46.398838+00:00 info: 2015-04-21 10:45:46.045 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 64 -2015-04-21T10:45:46.398915+00:00 info: 2015-04-21 10:45:46.071 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 65 -2015-04-21T10:45:46.399080+00:00 info: 2015-04-21 10:45:46.091 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 66 -2015-04-21T10:45:46.399258+00:00 info: 2015-04-21 10:45:46.113 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 67 -2015-04-21T10:45:46.399411+00:00 info: 2015-04-21 10:45:46.139 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 68 -2015-04-21T10:45:46.399565+00:00 info: 2015-04-21 10:45:46.154 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 69 -2015-04-21T10:45:46.399721+00:00 info: 2015-04-21 10:45:46.163 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 70 -2015-04-21T10:45:46.399883+00:00 info: 2015-04-21 10:45:46.182 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 71 -2015-04-21T10:45:46.400058+00:00 info: 2015-04-21 10:45:46.193 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 72 -2015-04-21T10:45:46.400231+00:00 info: 2015-04-21 10:45:46.207 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 73 -2015-04-21T10:45:46.400368+00:00 info: 2015-04-21 10:45:46.220 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 74 -2015-04-21T10:45:46.400525+00:00 info: 2015-04-21 10:45:46.246 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 75 -2015-04-21T10:45:46.400697+00:00 info: 2015-04-21 10:45:46.280 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 76 -2015-04-21T10:45:46.400848+00:00 info: 2015-04-21 10:45:46.345 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 77 -2015-04-21T10:45:46.902214+00:00 info: 2015-04-21 10:45:46.409 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 78 -2015-04-21T10:45:46.902349+00:00 info: 2015-04-21 10:45:46.447 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 79 -2015-04-21T10:45:46.902538+00:00 info: 2015-04-21 10:45:46.501 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 80 -2015-04-21T10:45:46.902734+00:00 info: 2015-04-21 10:45:46.566 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 81 -2015-04-21T10:45:46.902974+00:00 info: 2015-04-21 10:45:46.601 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 82 -2015-04-21T10:45:46.903127+00:00 info: 2015-04-21 10:45:46.642 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 83 -2015-04-21T10:45:46.903321+00:00 info: 2015-04-21 10:45:46.687 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 84 -2015-04-21T10:45:46.903517+00:00 info: 2015-04-21 10:45:46.750 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 85 -2015-04-21T10:45:46.903673+00:00 info: 2015-04-21 10:45:46.829 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 86 -2015-04-21T10:45:46.903849+00:00 info: 2015-04-21 10:45:46.874 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 87 -2015-04-21T10:45:46.904035+00:00 info: 2015-04-21 10:45:46.892 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 88 -2015-04-21T10:45:46.904179+00:00 info: 2015-04-21 10:45:46.908 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 89 -2015-04-21T10:45:47.405593+00:00 info: 2015-04-21 10:45:46.935 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 90 -2015-04-21T10:45:47.405725+00:00 info: 2015-04-21 10:45:46.982 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 91 -2015-04-21T10:45:47.406004+00:00 info: 2015-04-21 10:45:47.028 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 92 -2015-04-21T10:45:47.406169+00:00 info: 2015-04-21 10:45:47.065 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 93 -2015-04-21T10:45:47.406368+00:00 info: 2015-04-21 10:45:47.103 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 94 -2015-04-21T10:45:47.406536+00:00 info: 2015-04-21 10:45:47.148 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 95 -2015-04-21T10:45:47.406695+00:00 info: 2015-04-21 10:45:47.203 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 96 -2015-04-21T10:45:47.406851+00:00 info: 2015-04-21 10:45:47.252 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 97 -2015-04-21T10:45:47.407084+00:00 info: 2015-04-21 10:45:47.293 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 98 -2015-04-21T10:45:47.407276+00:00 info: 2015-04-21 10:45:47.342 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 99 -2015-04-21T10:45:47.407423+00:00 info: 2015-04-21 10:45:47.386 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 100 -2015-04-21T10:45:48.006440+00:00 info: 2015-04-21 10:45:47.428 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 101 -2015-04-21T10:45:48.006440+00:00 info: 2015-04-21 10:45:47.487 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 102 -2015-04-21T10:45:48.006477+00:00 info: 2015-04-21 10:45:47.525 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 103 -2015-04-21T10:45:48.006477+00:00 info: 2015-04-21 10:45:47.569 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 104 -2015-04-21T10:45:48.006486+00:00 info: 2015-04-21 10:45:47.626 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 105 -2015-04-21T10:45:48.006486+00:00 info: 2015-04-21 10:45:47.683 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 106 -2015-04-21T10:45:48.006491+00:00 info: 2015-04-21 10:45:47.712 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 107 -2015-04-21T10:45:48.006491+00:00 info: 2015-04-21 10:45:47.755 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 108 -2015-04-21T10:45:48.006496+00:00 info: 2015-04-21 10:45:47.914 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 109 -2015-04-21T10:45:48.414888+00:00 info: 2015-04-21 10:45:48.224 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 110 -2015-04-21T10:45:48.415034+00:00 info: 2015-04-21 10:45:48.355 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 111 -2015-04-21T10:45:48.916757+00:00 info: 2015-04-21 10:45:48.663 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 112 -2015-04-21T10:45:48.916757+00:00 info: 2015-04-21 10:45:48.796 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 113 -2015-04-21T10:45:48.917385+00:00 info: 2015-04-21 10:45:48.863 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 114 -2015-04-21T10:45:48.917385+00:00 info: 2015-04-21 10:45:48.893 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 115 -2015-04-21T10:45:48.917398+00:00 info: 2015-04-21 10:45:48.921 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 116 -2015-04-21T10:45:49.418547+00:00 info: 2015-04-21 10:45:48.954 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 117 -2015-04-21T10:45:49.418720+00:00 info: 2015-04-21 10:45:49.001 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 118 -2015-04-21T10:45:49.418897+00:00 info: 2015-04-21 10:45:49.058 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 119 -2015-04-21T10:45:49.419097+00:00 info: 2015-04-21 10:45:49.110 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 120 -2015-04-21T10:45:49.419289+00:00 info: 2015-04-21 10:45:49.174 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 121 -2015-04-21T10:45:49.419438+00:00 info: 2015-04-21 10:45:49.250 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 122 -2015-04-21T10:45:49.419598+00:00 info: 2015-04-21 10:45:49.311 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 123 -2015-04-21T10:45:49.419780+00:00 info: 2015-04-21 10:45:49.372 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 124 -2015-04-21T10:45:49.419988+00:00 info: 2015-04-21 10:45:49.412 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 125 -2015-04-21T10:45:49.921448+00:00 info: 2015-04-21 10:45:49.457 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 126 -2015-04-21T10:45:49.921580+00:00 info: 2015-04-21 10:45:49.494 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 127 -2015-04-21T10:45:49.921789+00:00 info: 2015-04-21 10:45:49.554 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 128 -2015-04-21T10:45:49.922056+00:00 info: 2015-04-21 10:45:49.609 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 129 -2015-04-21T10:45:49.922245+00:00 info: 2015-04-21 10:45:49.659 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 130 -2015-04-21T10:45:49.922434+00:00 info: 2015-04-21 10:45:49.696 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 131 -2015-04-21T10:45:49.922626+00:00 info: 2015-04-21 10:45:49.752 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 132 -2015-04-21T10:45:49.922811+00:00 info: 2015-04-21 10:45:49.786 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 133 -2015-04-21T10:45:49.923026+00:00 info: 2015-04-21 10:45:49.835 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 134 -2015-04-21T10:45:49.923214+00:00 info: 2015-04-21 10:45:49.889 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 135 -2015-04-21T10:45:50.424735+00:00 info: 2015-04-21 10:45:49.934 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 136 -2015-04-21T10:45:50.424916+00:00 info: 2015-04-21 10:45:49.968 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 137 -2015-04-21T10:45:50.425349+00:00 info: 2015-04-21 10:45:50.008 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 138 -2015-04-21T10:45:50.425500+00:00 info: 2015-04-21 10:45:50.039 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 139 -2015-04-21T10:45:50.425738+00:00 info: 2015-04-21 10:45:50.093 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 140 -2015-04-21T10:45:50.426056+00:00 info: 2015-04-21 10:45:50.134 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 141 -2015-04-21T10:45:50.426248+00:00 info: 2015-04-21 10:45:50.181 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 142 -2015-04-21T10:45:50.426437+00:00 info: 2015-04-21 10:45:50.222 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 143 -2015-04-21T10:45:50.426624+00:00 info: 2015-04-21 10:45:50.257 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 144 -2015-04-21T10:45:50.426857+00:00 info: 2015-04-21 10:45:50.319 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 145 -2015-04-21T10:45:50.427083+00:00 info: 2015-04-21 10:45:50.404 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 146 -2015-04-21T10:45:50.928861+00:00 info: 2015-04-21 10:45:50.480 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 147 -2015-04-21T10:45:50.929221+00:00 info: 2015-04-21 10:45:50.528 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 148 -2015-04-21T10:45:50.929491+00:00 info: 2015-04-21 10:45:50.577 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 149 -2015-04-21T10:45:50.929830+00:00 info: 2015-04-21 10:45:50.619 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 150 -2015-04-21T10:45:51.431563+00:00 info: 2015-04-21 10:45:51.070 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 151 -2015-04-21T10:45:51.431563+00:00 info: 2015-04-21 10:45:51.107 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 152 -2015-04-21T10:45:51.431864+00:00 info: 2015-04-21 10:45:51.141 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 153 -2015-04-21T10:45:51.432120+00:00 info: 2015-04-21 10:45:51.183 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 154 -2015-04-21T10:45:51.432376+00:00 info: 2015-04-21 10:45:51.315 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 155 -2015-04-21T10:45:51.432722+00:00 info: 2015-04-21 10:45:51.359 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 156 -2015-04-21T10:45:52.435026+00:00 info: 2015-04-21 10:45:52.101 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 157 -2015-04-21T10:45:52.435281+00:00 info: 2015-04-21 10:45:52.143 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 158 -2015-04-21T10:45:52.435516+00:00 info: 2015-04-21 10:45:52.196 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 159 -2015-04-21T10:45:52.936671+00:00 info: 2015-04-21 10:45:52.559 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 160 -2015-04-21T10:45:53.822373+00:00 info: 2015-04-21 10:45:53.077 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 161 -2015-04-21T10:45:54.456789+00:00 info: 2015-04-21 10:45:54.259 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 162 -2015-04-21T10:45:54.942530+00:00 info: 2015-04-21 10:45:54.588 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 163 -2015-04-21T10:45:54.942828+00:00 info: 2015-04-21 10:45:54.636 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 164 -2015-04-21T10:45:54.942990+00:00 info: 2015-04-21 10:45:54.688 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 165 -2015-04-21T10:45:54.943316+00:00 info: 2015-04-21 10:45:54.752 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 166 -2015-04-21T10:45:54.943538+00:00 info: 2015-04-21 10:45:54.822 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 167 -2015-04-21T10:45:54.943755+00:00 info: 2015-04-21 10:45:54.884 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 168 -2015-04-21T10:45:54.944136+00:00 info: 2015-04-21 10:45:54.936 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 169 -2015-04-21T10:45:55.445507+00:00 info: 2015-04-21 10:45:55.029 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 170 -2015-04-21T10:45:55.445836+00:00 info: 2015-04-21 10:45:55.091 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 171 -2015-04-21T10:45:55.446076+00:00 info: 2015-04-21 10:45:55.135 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 172 -2015-04-21T10:45:55.446337+00:00 info: 2015-04-21 10:45:55.198 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 173 -2015-04-21T10:45:55.446548+00:00 info: 2015-04-21 10:45:55.235 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 174 -2015-04-21T10:45:55.446750+00:00 info: 2015-04-21 10:45:55.276 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 175 -2015-04-21T10:45:55.447124+00:00 info: 2015-04-21 10:45:55.327 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 176 -2015-04-21T10:45:55.447328+00:00 info: 2015-04-21 10:45:55.392 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 177 -2015-04-21T10:45:55.950571+00:00 info: 2015-04-21 10:45:55.456 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 178 -2015-04-21T10:45:55.950571+00:00 info: 2015-04-21 10:45:55.508 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 179 -2015-04-21T10:45:55.950604+00:00 info: 2015-04-21 10:45:55.537 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 180 -2015-04-21T10:45:55.950604+00:00 info: 2015-04-21 10:45:55.554 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 181 -2015-04-21T10:45:55.950612+00:00 info: 2015-04-21 10:45:55.564 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 182 -2015-04-21T10:45:55.950612+00:00 info: 2015-04-21 10:45:55.573 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 183 -2015-04-21T10:45:55.950912+00:00 info: 2015-04-21 10:45:55.589 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 184 -2015-04-21T10:45:55.951004+00:00 info: 2015-04-21 10:45:55.606 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 185 -2015-04-21T10:45:55.951369+00:00 info: 2015-04-21 10:45:55.615 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 186 -2015-04-21T10:45:55.951721+00:00 info: 2015-04-21 10:45:55.634 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 187 -2015-04-21T10:45:55.951999+00:00 info: 2015-04-21 10:45:55.642 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 188 -2015-04-21T10:45:55.952308+00:00 info: 2015-04-21 10:45:55.652 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 189 -2015-04-21T10:45:55.952603+00:00 info: 2015-04-21 10:45:55.660 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 190 -2015-04-21T10:45:55.952866+00:00 info: 2015-04-21 10:45:55.668 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 191 -2015-04-21T10:45:55.953204+00:00 info: 2015-04-21 10:45:55.681 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 192 -2015-04-21T10:45:55.953464+00:00 info: 2015-04-21 10:45:55.695 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 193 -2015-04-21T10:45:55.953849+00:00 info: 2015-04-21 10:45:55.709 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 194 -2015-04-21T10:45:55.954206+00:00 info: 2015-04-21 10:45:55.720 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 195 -2015-04-21T10:45:55.954503+00:00 info: 2015-04-21 10:45:55.725 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 196 -2015-04-21T10:45:55.954900+00:00 info: 2015-04-21 10:45:55.742 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 197 -2015-04-21T10:45:55.955279+00:00 info: 2015-04-21 10:45:55.752 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 198 -2015-04-21T10:45:55.955483+00:00 info: 2015-04-21 10:45:55.764 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 199 -2015-04-21T10:45:55.955734+00:00 info: 2015-04-21 10:45:55.770 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 200 -2015-04-21T10:45:55.955823+00:00 info: 2015-04-21 10:45:55.789 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 201 -2015-04-21T10:45:55.956006+00:00 info: 2015-04-21 10:45:55.798 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 202 -2015-04-21T10:45:55.956174+00:00 info: 2015-04-21 10:45:55.814 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 203 -2015-04-21T10:45:55.956334+00:00 info: 2015-04-21 10:45:55.822 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 204 -2015-04-21T10:45:55.956538+00:00 info: 2015-04-21 10:45:55.840 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 205 -2015-04-21T10:45:55.956678+00:00 info: 2015-04-21 10:45:55.856 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 206 -2015-04-21T10:45:55.956846+00:00 info: 2015-04-21 10:45:55.899 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 207 -2015-04-21T10:45:55.957009+00:00 info: 2015-04-21 10:45:55.911 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 208 -2015-04-21T10:45:55.957160+00:00 info: 2015-04-21 10:45:55.930 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 209 -2015-04-21T10:45:55.957337+00:00 info: 2015-04-21 10:45:55.948 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 210 -2015-04-21T10:45:56.459008+00:00 info: 2015-04-21 10:45:55.961 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 211 -2015-04-21T10:45:56.459281+00:00 info: 2015-04-21 10:45:55.970 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 212 -2015-04-21T10:45:56.459543+00:00 info: 2015-04-21 10:45:55.978 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 213 -2015-04-21T10:45:56.459786+00:00 info: 2015-04-21 10:45:55.995 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 214 -2015-04-21T10:45:56.460039+00:00 info: 2015-04-21 10:45:56.003 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 215 -2015-04-21T10:45:56.460286+00:00 info: 2015-04-21 10:45:56.013 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 216 -2015-04-21T10:45:56.460532+00:00 info: 2015-04-21 10:45:56.022 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 217 -2015-04-21T10:45:56.460861+00:00 info: 2015-04-21 10:45:56.038 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 218 -2015-04-21T10:45:56.461101+00:00 info: 2015-04-21 10:45:56.048 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 219 -2015-04-21T10:45:56.461338+00:00 info: 2015-04-21 10:45:56.056 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 220 -2015-04-21T10:45:56.461530+00:00 info: 2015-04-21 10:45:56.064 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 221 -2015-04-21T10:45:56.461834+00:00 info: 2015-04-21 10:45:56.071 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 222 -2015-04-21T10:45:56.462146+00:00 info: 2015-04-21 10:45:56.081 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 223 -2015-04-21T10:45:56.462359+00:00 info: 2015-04-21 10:45:56.099 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 224 -2015-04-21T10:45:56.462620+00:00 info: 2015-04-21 10:45:56.114 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 225 -2015-04-21T10:45:56.462877+00:00 info: 2015-04-21 10:45:56.122 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 226 -2015-04-21T10:45:56.463115+00:00 info: 2015-04-21 10:45:56.137 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 227 -2015-04-21T10:45:56.463334+00:00 info: 2015-04-21 10:45:56.153 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 228 -2015-04-21T10:45:56.463697+00:00 info: 2015-04-21 10:45:56.159 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 229 -2015-04-21T10:45:56.463830+00:00 info: 2015-04-21 10:45:56.165 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 230 -2015-04-21T10:45:56.464109+00:00 info: 2015-04-21 10:45:56.170 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 231 -2015-04-21T10:45:56.464371+00:00 info: 2015-04-21 10:45:56.176 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 232 -2015-04-21T10:45:56.464587+00:00 info: 2015-04-21 10:45:56.183 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 233 -2015-04-21T10:45:56.464790+00:00 info: 2015-04-21 10:45:56.191 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 234 -2015-04-21T10:45:56.465025+00:00 info: 2015-04-21 10:45:56.200 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 235 -2015-04-21T10:45:56.465341+00:00 info: 2015-04-21 10:45:56.216 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 236 -2015-04-21T10:45:56.465540+00:00 info: 2015-04-21 10:45:56.239 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 237 -2015-04-21T10:45:56.465801+00:00 info: 2015-04-21 10:45:56.249 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 238 -2015-04-21T10:45:56.466004+00:00 info: 2015-04-21 10:45:56.258 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 239 -2015-04-21T10:45:56.466272+00:00 info: 2015-04-21 10:45:56.268 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 240 -2015-04-21T10:45:56.466594+00:00 info: 2015-04-21 10:45:56.276 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 241 -2015-04-21T10:45:56.466767+00:00 info: 2015-04-21 10:45:56.287 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 242 -2015-04-21T10:45:56.466982+00:00 info: 2015-04-21 10:45:56.295 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 243 -2015-04-21T10:45:56.467230+00:00 info: 2015-04-21 10:45:56.324 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 244 -2015-04-21T10:45:56.467469+00:00 info: 2015-04-21 10:45:56.333 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 245 -2015-04-21T10:45:56.467926+00:00 info: 2015-04-21 10:45:56.352 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 246 -2015-04-21T10:45:56.468052+00:00 info: 2015-04-21 10:45:56.360 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 247 -2015-04-21T10:45:56.468352+00:00 info: 2015-04-21 10:45:56.373 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 248 -2015-04-21T10:45:56.468551+00:00 info: 2015-04-21 10:45:56.382 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 249 -2015-04-21T10:45:56.468767+00:00 info: 2015-04-21 10:45:56.391 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 250 -2015-04-21T10:45:56.468985+00:00 info: 2015-04-21 10:45:56.396 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 251 -2015-04-21T10:45:56.469239+00:00 info: 2015-04-21 10:45:56.401 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 252 -2015-04-21T10:45:56.469573+00:00 info: 2015-04-21 10:45:56.406 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 253 -2015-04-21T10:45:56.469860+00:00 info: 2015-04-21 10:45:56.431 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 254 -2015-04-21T10:45:56.470113+00:00 info: 2015-04-21 10:45:56.438 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 255 -2015-04-21T10:45:56.470352+00:00 info: 2015-04-21 10:45:56.444 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 256 -2015-04-21T10:45:56.470558+00:00 info: 2015-04-21 10:45:56.452 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 257 -2015-04-21T10:45:56.470769+00:00 info: 2015-04-21 10:45:56.463 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 258 -2015-04-21T10:45:56.972451+00:00 info: 2015-04-21 10:45:56.473 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 259 -2015-04-21T10:45:56.972451+00:00 info: 2015-04-21 10:45:56.481 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 260 -2015-04-21T10:45:56.972692+00:00 info: 2015-04-21 10:45:56.485 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 261 -2015-04-21T10:45:56.972899+00:00 info: 2015-04-21 10:45:56.496 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 262 -2015-04-21T10:45:56.973020+00:00 info: 2015-04-21 10:45:56.500 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 263 -2015-04-21T10:45:56.973219+00:00 info: 2015-04-21 10:45:56.506 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 264 -2015-04-21T10:45:56.973368+00:00 info: 2015-04-21 10:45:56.511 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 265 -2015-04-21T10:45:56.973598+00:00 info: 2015-04-21 10:45:56.519 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 266 -2015-04-21T10:45:56.973948+00:00 info: 2015-04-21 10:45:56.524 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 267 -2015-04-21T10:45:56.974172+00:00 info: 2015-04-21 10:45:56.528 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 268 -2015-04-21T10:45:56.974631+00:00 info: 2015-04-21 10:45:56.533 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 269 -2015-04-21T10:45:56.974821+00:00 info: 2015-04-21 10:45:56.545 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 270 -2015-04-21T10:45:56.975161+00:00 info: 2015-04-21 10:45:56.549 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 271 -2015-04-21T10:45:56.975314+00:00 info: 2015-04-21 10:45:56.562 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 272 -2015-04-21T10:45:56.975603+00:00 info: 2015-04-21 10:45:56.568 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 273 -2015-04-21T10:45:56.976041+00:00 info: 2015-04-21 10:45:56.574 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 274 -2015-04-21T10:45:56.976419+00:00 info: 2015-04-21 10:45:56.633 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 275 -2015-04-21T10:45:56.976595+00:00 info: 2015-04-21 10:45:56.638 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 276 -2015-04-21T10:45:56.976818+00:00 info: 2015-04-21 10:45:56.649 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 277 -2015-04-21T10:45:56.977136+00:00 info: 2015-04-21 10:45:56.654 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 278 -2015-04-21T10:45:56.977382+00:00 info: 2015-04-21 10:45:56.674 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 279 -2015-04-21T10:45:56.977784+00:00 info: 2015-04-21 10:45:56.679 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 280 -2015-04-21T10:45:56.978148+00:00 info: 2015-04-21 10:45:56.684 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 281 -2015-04-21T10:45:56.978331+00:00 info: 2015-04-21 10:45:56.689 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 282 -2015-04-21T10:45:56.978510+00:00 info: 2015-04-21 10:45:56.693 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 283 -2015-04-21T10:45:56.978681+00:00 info: 2015-04-21 10:45:56.701 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 284 -2015-04-21T10:45:56.978855+00:00 info: 2015-04-21 10:45:56.706 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 285 -2015-04-21T10:45:56.979082+00:00 info: 2015-04-21 10:45:56.722 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 286 -2015-04-21T10:45:56.979405+00:00 info: 2015-04-21 10:45:56.727 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 287 -2015-04-21T10:45:56.979405+00:00 info: 2015-04-21 10:45:56.732 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 288 -2015-04-21T10:45:56.979540+00:00 info: 2015-04-21 10:45:56.738 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 289 -2015-04-21T10:45:56.979779+00:00 info: 2015-04-21 10:45:56.749 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 290 -2015-04-21T10:45:56.979929+00:00 info: 2015-04-21 10:45:56.756 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 291 -2015-04-21T10:45:56.980061+00:00 info: 2015-04-21 10:45:56.768 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 292 -2015-04-21T10:45:56.980265+00:00 info: 2015-04-21 10:45:56.781 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 293 -2015-04-21T10:45:56.980363+00:00 info: 2015-04-21 10:45:56.790 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 294 -2015-04-21T10:45:56.980533+00:00 info: 2015-04-21 10:45:56.799 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 295 -2015-04-21T10:45:56.980669+00:00 info: 2015-04-21 10:45:56.806 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 296 -2015-04-21T10:45:56.980827+00:00 info: 2015-04-21 10:45:56.812 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 297 -2015-04-21T10:45:56.980987+00:00 info: 2015-04-21 10:45:56.819 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 298 -2015-04-21T10:45:56.981168+00:00 info: 2015-04-21 10:45:56.826 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 299 -2015-04-21T10:45:56.981379+00:00 info: 2015-04-21 10:45:56.843 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 300 -2015-04-21T10:45:56.981543+00:00 info: 2015-04-21 10:45:56.850 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 301 -2015-04-21T10:45:56.981676+00:00 info: 2015-04-21 10:45:56.860 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 302 -2015-04-21T10:45:56.981870+00:00 info: 2015-04-21 10:45:56.868 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 303 -2015-04-21T10:45:56.982001+00:00 info: 2015-04-21 10:45:56.880 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 304 -2015-04-21T10:45:56.982184+00:00 info: 2015-04-21 10:45:56.890 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 305 -2015-04-21T10:45:56.982347+00:00 info: 2015-04-21 10:45:56.898 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 306 -2015-04-21T10:45:56.982500+00:00 info: 2015-04-21 10:45:56.905 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 307 -2015-04-21T10:45:56.982836+00:00 info: 2015-04-21 10:45:56.913 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 308 -2015-04-21T10:45:56.983032+00:00 info: 2015-04-21 10:45:56.919 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 309 -2015-04-21T10:45:56.983032+00:00 info: 2015-04-21 10:45:56.926 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 310 -2015-04-21T10:45:56.983242+00:00 info: 2015-04-21 10:45:56.934 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 311 -2015-04-21T10:45:56.983415+00:00 info: 2015-04-21 10:45:56.941 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 312 -2015-04-21T10:45:56.983582+00:00 info: 2015-04-21 10:45:56.948 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 313 -2015-04-21T10:45:56.983747+00:00 info: 2015-04-21 10:45:56.955 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 314 -2015-04-21T10:45:56.983920+00:00 info: 2015-04-21 10:45:56.962 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 315 -2015-04-21T10:45:56.984138+00:00 info: 2015-04-21 10:45:56.969 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 316 -2015-04-21T10:45:56.984328+00:00 info: 2015-04-21 10:45:56.975 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 317 -2015-04-21T10:45:57.485698+00:00 info: 2015-04-21 10:45:56.985 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 318 -2015-04-21T10:45:57.485698+00:00 info: 2015-04-21 10:45:56.991 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 319 -2015-04-21T10:45:57.485971+00:00 info: 2015-04-21 10:45:57.003 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 320 -2015-04-21T10:45:57.486276+00:00 info: 2015-04-21 10:45:57.010 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 321 -2015-04-21T10:45:57.486429+00:00 info: 2015-04-21 10:45:57.016 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 322 -2015-04-21T10:45:57.486613+00:00 info: 2015-04-21 10:45:57.023 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 323 -2015-04-21T10:45:57.486773+00:00 info: 2015-04-21 10:45:57.032 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 324 -2015-04-21T10:45:57.486964+00:00 info: 2015-04-21 10:45:57.039 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 325 -2015-04-21T10:45:57.487215+00:00 info: 2015-04-21 10:45:57.045 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 326 -2015-04-21T10:45:57.487393+00:00 info: 2015-04-21 10:45:57.067 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 327 -2015-04-21T10:45:57.487539+00:00 info: 2015-04-21 10:45:57.097 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 328 -2015-04-21T10:45:57.487697+00:00 info: 2015-04-21 10:45:57.125 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 329 -2015-04-21T10:45:57.487826+00:00 info: 2015-04-21 10:45:57.155 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 330 -2015-04-21T10:45:57.487995+00:00 info: 2015-04-21 10:45:57.189 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 331 -2015-04-21T10:45:57.488318+00:00 info: 2015-04-21 10:45:57.222 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 332 -2015-04-21T10:45:57.488364+00:00 info: 2015-04-21 10:45:57.252 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 333 -2015-04-21T10:45:57.488580+00:00 info: 2015-04-21 10:45:57.279 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 334 -2015-04-21T10:45:57.488731+00:00 info: 2015-04-21 10:45:57.314 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 335 -2015-04-21T10:45:57.488878+00:00 info: 2015-04-21 10:45:57.360 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 336 -2015-04-21T10:45:57.489070+00:00 info: 2015-04-21 10:45:57.389 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 337 -2015-04-21T10:45:57.489244+00:00 info: 2015-04-21 10:45:57.420 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 338 -2015-04-21T10:45:57.489543+00:00 info: 2015-04-21 10:45:57.454 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 339 -2015-04-21T10:45:57.489627+00:00 info: 2015-04-21 10:45:57.489 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 340 -2015-04-21T10:45:57.991060+00:00 info: 2015-04-21 10:45:57.530 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 341 -2015-04-21T10:45:57.991246+00:00 info: 2015-04-21 10:45:57.563 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 342 -2015-04-21T10:45:57.991340+00:00 info: 2015-04-21 10:45:57.584 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 343 -2015-04-21T10:45:57.991570+00:00 info: 2015-04-21 10:45:57.594 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 344 -2015-04-21T10:45:57.991730+00:00 info: 2015-04-21 10:45:57.603 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 345 -2015-04-21T10:45:57.991959+00:00 info: 2015-04-21 10:45:57.611 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 346 -2015-04-21T10:45:57.992472+00:00 info: 2015-04-21 10:45:57.616 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 347 -2015-04-21T10:45:57.992472+00:00 info: 2015-04-21 10:45:57.621 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 348 -2015-04-21T10:45:57.992486+00:00 info: 2015-04-21 10:45:57.629 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 349 -2015-04-21T10:45:57.992766+00:00 info: 2015-04-21 10:45:57.635 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 350 -2015-04-21T10:45:57.992766+00:00 info: 2015-04-21 10:45:57.643 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 351 -2015-04-21T10:45:57.992847+00:00 info: 2015-04-21 10:45:57.671 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 352 -2015-04-21T10:45:57.993056+00:00 info: 2015-04-21 10:45:57.703 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 353 -2015-04-21T10:45:57.993248+00:00 info: 2015-04-21 10:45:57.739 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 354 -2015-04-21T10:45:57.993378+00:00 info: 2015-04-21 10:45:57.768 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 355 -2015-04-21T10:45:57.993520+00:00 info: 2015-04-21 10:45:57.795 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 356 -2015-04-21T10:45:57.993740+00:00 info: 2015-04-21 10:45:57.843 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 357 -2015-04-21T10:45:57.994008+00:00 info: 2015-04-21 10:45:57.872 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 358 -2015-04-21T10:45:57.994100+00:00 info: 2015-04-21 10:45:57.900 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 359 -2015-04-21T10:45:57.994345+00:00 info: 2015-04-21 10:45:57.931 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 360 -2015-04-21T10:45:57.994459+00:00 info: 2015-04-21 10:45:57.961 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 361 -2015-04-21T10:45:57.994618+00:00 info: 2015-04-21 10:45:57.992 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 362 -2015-04-21T10:45:58.496003+00:00 info: 2015-04-21 10:45:58.023 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 363 -2015-04-21T10:45:58.496188+00:00 info: 2015-04-21 10:45:58.056 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 364 -2015-04-21T10:45:58.496297+00:00 info: 2015-04-21 10:45:58.093 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 365 -2015-04-21T10:45:58.496490+00:00 info: 2015-04-21 10:45:58.120 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 366 -2015-04-21T10:45:58.496638+00:00 info: 2015-04-21 10:45:58.145 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 367 -2015-04-21T10:45:58.496766+00:00 info: 2015-04-21 10:45:58.173 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 368 -2015-04-21T10:45:58.496907+00:00 info: 2015-04-21 10:45:58.204 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 369 -2015-04-21T10:45:58.497087+00:00 info: 2015-04-21 10:45:58.279 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 370 -2015-04-21T10:45:58.497257+00:00 info: 2015-04-21 10:45:58.304 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 371 -2015-04-21T10:45:58.497425+00:00 info: 2015-04-21 10:45:58.327 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 372 -2015-04-21T10:45:58.497609+00:00 info: 2015-04-21 10:45:58.362 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 373 -2015-04-21T10:45:58.497811+00:00 info: 2015-04-21 10:45:58.391 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 374 -2015-04-21T10:45:58.497966+00:00 info: 2015-04-21 10:45:58.434 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 375 -2015-04-21T10:45:58.498109+00:00 info: 2015-04-21 10:45:58.484 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 376 -2015-04-21T10:45:58.999592+00:00 info: 2015-04-21 10:45:58.516 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 377 -2015-04-21T10:45:58.999777+00:00 info: 2015-04-21 10:45:58.551 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 378 -2015-04-21T10:45:59.000066+00:00 info: 2015-04-21 10:45:58.654 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 379 -2015-04-21T10:45:59.000313+00:00 info: 2015-04-21 10:45:58.699 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 380 -2015-04-21T10:45:59.000532+00:00 info: 2015-04-21 10:45:58.734 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 381 -2015-04-21T10:45:59.000754+00:00 info: 2015-04-21 10:45:58.766 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 382 -2015-04-21T10:45:59.000975+00:00 info: 2015-04-21 10:45:58.840 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 383 -2015-04-21T10:45:59.001307+00:00 info: 2015-04-21 10:45:58.885 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 384 -2015-04-21T10:45:59.001518+00:00 info: 2015-04-21 10:45:58.914 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 385 -2015-04-21T10:45:59.001858+00:00 info: 2015-04-21 10:45:58.951 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 386 -2015-04-21T10:45:59.002089+00:00 info: 2015-04-21 10:45:58.990 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 387 -2015-04-21T10:45:59.503696+00:00 info: 2015-04-21 10:45:59.029 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 388 -2015-04-21T10:45:59.503696+00:00 info: 2015-04-21 10:45:59.061 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 389 -2015-04-21T10:45:59.504151+00:00 info: 2015-04-21 10:45:59.089 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 390 -2015-04-21T10:45:59.504424+00:00 info: 2015-04-21 10:45:59.124 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 391 -2015-04-21T10:45:59.504565+00:00 info: 2015-04-21 10:45:59.169 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 392 -2015-04-21T10:45:59.504753+00:00 info: 2015-04-21 10:45:59.202 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 393 -2015-04-21T10:45:59.504960+00:00 info: 2015-04-21 10:45:59.251 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 394 -2015-04-21T10:45:59.505159+00:00 info: 2015-04-21 10:45:59.281 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 395 -2015-04-21T10:45:59.505426+00:00 info: 2015-04-21 10:45:59.310 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 396 -2015-04-21T10:45:59.505821+00:00 info: 2015-04-21 10:45:59.338 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 397 -2015-04-21T10:45:59.505821+00:00 info: 2015-04-21 10:45:59.363 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 398 -2015-04-21T10:45:59.505993+00:00 info: 2015-04-21 10:45:59.459 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 399 -2015-04-21T10:46:00.007322+00:00 info: 2015-04-21 10:45:59.694 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 400 -2015-04-21T10:46:00.007494+00:00 info: 2015-04-21 10:45:59.723 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 401 -2015-04-21T10:46:00.007692+00:00 info: 2015-04-21 10:45:59.762 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 402 -2015-04-21T10:46:00.007860+00:00 info: 2015-04-21 10:45:59.800 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 403 -2015-04-21T10:46:00.008042+00:00 info: 2015-04-21 10:45:59.835 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 404 -2015-04-21T10:46:00.008245+00:00 info: 2015-04-21 10:45:59.876 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 405 -2015-04-21T10:46:00.008420+00:00 info: 2015-04-21 10:45:59.916 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 406 -2015-04-21T10:46:00.008634+00:00 info: 2015-04-21 10:45:59.946 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 407 -2015-04-21T10:46:00.008772+00:00 info: 2015-04-21 10:45:59.978 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 408 -2015-04-21T10:46:00.009005+00:00 info: 2015-04-21 10:46:00.007 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 409 -2015-04-21T10:46:00.510490+00:00 info: 2015-04-21 10:46:00.044 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 410 -2015-04-21T10:46:00.510490+00:00 info: 2015-04-21 10:46:00.076 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 411 -2015-04-21T10:46:00.510668+00:00 info: 2015-04-21 10:46:00.106 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 412 -2015-04-21T10:46:00.510898+00:00 info: 2015-04-21 10:46:00.143 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 413 -2015-04-21T10:46:00.511033+00:00 info: 2015-04-21 10:46:00.179 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 414 -2015-04-21T10:46:00.511210+00:00 info: 2015-04-21 10:46:00.197 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 415 -2015-04-21T10:46:00.511372+00:00 info: 2015-04-21 10:46:00.207 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 416 -2015-04-21T10:46:00.511534+00:00 info: 2015-04-21 10:46:00.231 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 417 -2015-04-21T10:46:00.511693+00:00 info: 2015-04-21 10:46:00.257 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 418 -2015-04-21T10:46:00.511849+00:00 info: 2015-04-21 10:46:00.282 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 419 -2015-04-21T10:46:00.512120+00:00 info: 2015-04-21 10:46:00.308 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 420 -2015-04-21T10:46:00.512282+00:00 info: 2015-04-21 10:46:00.340 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 421 -2015-04-21T10:46:00.512537+00:00 info: 2015-04-21 10:46:00.370 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 422 -2015-04-21T10:46:00.512769+00:00 info: 2015-04-21 10:46:00.391 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 423 -2015-04-21T10:46:00.512946+00:00 info: 2015-04-21 10:46:00.417 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 424 -2015-04-21T10:46:00.513188+00:00 info: 2015-04-21 10:46:00.441 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 425 -2015-04-21T10:46:00.513304+00:00 info: 2015-04-21 10:46:00.467 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 426 -2015-04-21T10:46:00.513464+00:00 info: 2015-04-21 10:46:00.500 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 427 -2015-04-21T10:46:01.014750+00:00 info: 2015-04-21 10:46:00.531 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 428 -2015-04-21T10:46:01.014750+00:00 info: 2015-04-21 10:46:00.570 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 429 -2015-04-21T10:46:01.014782+00:00 info: 2015-04-21 10:46:00.599 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 430 -2015-04-21T10:46:01.014894+00:00 info: 2015-04-21 10:46:00.633 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 431 -2015-04-21T10:46:01.015106+00:00 info: 2015-04-21 10:46:00.658 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 432 -2015-04-21T10:46:01.015301+00:00 info: 2015-04-21 10:46:00.683 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 433 -2015-04-21T10:46:01.015433+00:00 info: 2015-04-21 10:46:00.711 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 434 -2015-04-21T10:46:01.015593+00:00 info: 2015-04-21 10:46:00.737 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 435 -2015-04-21T10:46:01.015720+00:00 info: 2015-04-21 10:46:00.762 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 436 -2015-04-21T10:46:01.015870+00:00 info: 2015-04-21 10:46:00.787 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 437 -2015-04-21T10:46:01.016026+00:00 info: 2015-04-21 10:46:00.859 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 438 -2015-04-21T10:46:01.016207+00:00 info: 2015-04-21 10:46:00.963 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 439 -2015-04-21T10:46:01.517658+00:00 info: 2015-04-21 10:46:01.052 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 440 -2015-04-21T10:46:01.517744+00:00 info: 2015-04-21 10:46:01.156 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 441 -2015-04-21T10:46:01.517931+00:00 info: 2015-04-21 10:46:01.225 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 442 -2015-04-21T10:46:01.518095+00:00 info: 2015-04-21 10:46:01.266 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 443 -2015-04-21T10:46:01.518307+00:00 info: 2015-04-21 10:46:01.299 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 444 -2015-04-21T10:46:01.518448+00:00 info: 2015-04-21 10:46:01.336 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 445 -2015-04-21T10:46:01.518636+00:00 info: 2015-04-21 10:46:01.384 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 446 -2015-04-21T10:46:01.518823+00:00 info: 2015-04-21 10:46:01.418 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 447 -2015-04-21T10:46:01.519571+00:00 info: 2015-04-21 10:46:01.443 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 448 -2015-04-21T10:46:01.519571+00:00 info: 2015-04-21 10:46:01.469 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 449 -2015-04-21T10:46:01.519675+00:00 info: 2015-04-21 10:46:01.500 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 450 -2015-04-21T10:46:02.020793+00:00 info: 2015-04-21 10:46:01.528 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 451 -2015-04-21T10:46:02.021007+00:00 info: 2015-04-21 10:46:01.555 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 452 -2015-04-21T10:46:02.021280+00:00 info: 2015-04-21 10:46:01.582 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 453 -2015-04-21T10:46:02.021559+00:00 info: 2015-04-21 10:46:01.605 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 454 -2015-04-21T10:46:02.021847+00:00 info: 2015-04-21 10:46:01.631 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 455 -2015-04-21T10:46:02.022068+00:00 info: 2015-04-21 10:46:01.660 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 456 -2015-04-21T10:46:02.022339+00:00 info: 2015-04-21 10:46:01.683 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 457 -2015-04-21T10:46:02.022597+00:00 info: 2015-04-21 10:46:01.712 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 458 -2015-04-21T10:46:02.022849+00:00 info: 2015-04-21 10:46:01.737 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 459 -2015-04-21T10:46:02.023080+00:00 info: 2015-04-21 10:46:01.765 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 460 -2015-04-21T10:46:02.023331+00:00 info: 2015-04-21 10:46:01.785 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 461 -2015-04-21T10:46:02.023570+00:00 info: 2015-04-21 10:46:01.801 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 462 -2015-04-21T10:46:02.023876+00:00 info: 2015-04-21 10:46:01.824 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 463 -2015-04-21T10:46:02.024078+00:00 info: 2015-04-21 10:46:01.846 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 464 -2015-04-21T10:46:02.024347+00:00 info: 2015-04-21 10:46:01.880 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 465 -2015-04-21T10:46:02.024588+00:00 info: 2015-04-21 10:46:01.917 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 466 -2015-04-21T10:46:02.024919+00:00 info: 2015-04-21 10:46:01.946 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 467 -2015-04-21T10:46:02.025056+00:00 info: 2015-04-21 10:46:01.973 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 468 -2015-04-21T10:46:02.025301+00:00 info: 2015-04-21 10:46:01.995 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 469 -2015-04-21T10:46:02.025554+00:00 info: 2015-04-21 10:46:02.020 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 470 -2015-04-21T10:46:02.527180+00:00 info: 2015-04-21 10:46:02.042 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 471 -2015-04-21T10:46:02.527418+00:00 info: 2015-04-21 10:46:02.066 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 472 -2015-04-21T10:46:02.527739+00:00 info: 2015-04-21 10:46:02.090 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 473 -2015-04-21T10:46:02.528019+00:00 info: 2015-04-21 10:46:02.113 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 474 -2015-04-21T10:46:02.528291+00:00 info: 2015-04-21 10:46:02.136 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 475 -2015-04-21T10:46:02.528555+00:00 info: 2015-04-21 10:46:02.157 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 476 -2015-04-21T10:46:02.529259+00:00 info: 2015-04-21 10:46:02.180 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 477 -2015-04-21T10:46:02.529259+00:00 info: 2015-04-21 10:46:02.204 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 478 -2015-04-21T10:46:02.529556+00:00 info: 2015-04-21 10:46:02.227 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 479 -2015-04-21T10:46:02.529908+00:00 info: 2015-04-21 10:46:02.248 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 480 -2015-04-21T10:46:02.530079+00:00 info: 2015-04-21 10:46:02.269 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 481 -2015-04-21T10:46:02.530346+00:00 info: 2015-04-21 10:46:02.291 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 482 -2015-04-21T10:46:02.530549+00:00 info: 2015-04-21 10:46:02.317 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 483 -2015-04-21T10:46:02.530778+00:00 info: 2015-04-21 10:46:02.340 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 484 -2015-04-21T10:46:02.531002+00:00 info: 2015-04-21 10:46:02.362 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 485 -2015-04-21T10:46:02.531295+00:00 info: 2015-04-21 10:46:02.375 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 486 -2015-04-21T10:46:02.531552+00:00 info: 2015-04-21 10:46:02.398 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 487 -2015-04-21T10:46:02.531730+00:00 info: 2015-04-21 10:46:02.422 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 488 -2015-04-21T10:46:02.531927+00:00 info: 2015-04-21 10:46:02.447 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 489 -2015-04-21T10:46:02.532280+00:00 info: 2015-04-21 10:46:02.479 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 490 -2015-04-21T10:46:02.532476+00:00 info: 2015-04-21 10:46:02.508 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 491 -2015-04-21T10:46:02.532697+00:00 info: 2015-04-21 10:46:02.533 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 492 -2015-04-21T10:46:03.034229+00:00 info: 2015-04-21 10:46:02.560 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 493 -2015-04-21T10:46:03.034904+00:00 info: 2015-04-21 10:46:02.586 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 494 -2015-04-21T10:46:03.034904+00:00 info: 2015-04-21 10:46:02.596 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 495 -2015-04-21T10:46:03.035056+00:00 info: 2015-04-21 10:46:02.620 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 496 -2015-04-21T10:46:03.035366+00:00 info: 2015-04-21 10:46:02.654 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 497 -2015-04-21T10:46:03.035625+00:00 info: 2015-04-21 10:46:02.687 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 498 -2015-04-21T10:46:03.035798+00:00 info: 2015-04-21 10:46:02.713 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 499 -2015-04-21T10:46:03.035981+00:00 info: 2015-04-21 10:46:02.744 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 500 -2015-04-21T10:46:03.036154+00:00 info: 2015-04-21 10:46:02.789 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 501 -2015-04-21T10:46:03.036312+00:00 info: 2015-04-21 10:46:02.835 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 502 -2015-04-21T10:46:03.036472+00:00 info: 2015-04-21 10:46:02.880 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 503 -2015-04-21T10:46:03.036624+00:00 info: 2015-04-21 10:46:02.927 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 504 -2015-04-21T10:46:03.036776+00:00 info: 2015-04-21 10:46:02.994 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 505 -2015-04-21T10:46:03.538135+00:00 info: 2015-04-21 10:46:03.048 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 506 -2015-04-21T10:46:03.538248+00:00 info: 2015-04-21 10:46:03.103 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 507 -2015-04-21T10:46:03.538546+00:00 info: 2015-04-21 10:46:03.150 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 508 -2015-04-21T10:46:03.538657+00:00 info: 2015-04-21 10:46:03.199 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 509 -2015-04-21T10:46:03.538788+00:00 info: 2015-04-21 10:46:03.239 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 510 -2015-04-21T10:46:03.539003+00:00 info: 2015-04-21 10:46:03.299 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 511 -2015-04-21T10:46:03.539170+00:00 info: 2015-04-21 10:46:03.346 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 512 -2015-04-21T10:46:03.539431+00:00 info: 2015-04-21 10:46:03.406 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 513 -2015-04-21T10:46:03.539635+00:00 info: 2015-04-21 10:46:03.450 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 514 -2015-04-21T10:46:03.539785+00:00 info: 2015-04-21 10:46:03.482 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 515 -2015-04-21T10:46:03.539986+00:00 info: 2015-04-21 10:46:03.511 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 516 -2015-04-21T10:46:03.540126+00:00 info: 2015-04-21 10:46:03.538 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 517 -2015-04-21T10:46:04.041622+00:00 info: 2015-04-21 10:46:03.564 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 518 -2015-04-21T10:46:04.041622+00:00 info: 2015-04-21 10:46:03.591 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 519 -2015-04-21T10:46:04.041870+00:00 info: 2015-04-21 10:46:03.619 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 520 -2015-04-21T10:46:04.042048+00:00 info: 2015-04-21 10:46:03.649 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 521 -2015-04-21T10:46:04.042242+00:00 info: 2015-04-21 10:46:03.678 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 522 -2015-04-21T10:46:04.042410+00:00 info: 2015-04-21 10:46:03.713 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 523 -2015-04-21T10:46:04.042569+00:00 info: 2015-04-21 10:46:03.766 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 524 -2015-04-21T10:46:04.042730+00:00 info: 2015-04-21 10:46:03.800 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 525 -2015-04-21T10:46:04.042896+00:00 info: 2015-04-21 10:46:03.833 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 526 -2015-04-21T10:46:04.043049+00:00 info: 2015-04-21 10:46:03.870 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 527 -2015-04-21T10:46:04.043246+00:00 info: 2015-04-21 10:46:03.903 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 528 -2015-04-21T10:46:04.043434+00:00 info: 2015-04-21 10:46:03.938 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 529 -2015-04-21T10:46:04.043592+00:00 info: 2015-04-21 10:46:03.974 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 530 -2015-04-21T10:46:04.043748+00:00 info: 2015-04-21 10:46:04.010 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 531 -2015-04-21T10:46:04.043925+00:00 info: 2015-04-21 10:46:04.036 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 532 -2015-04-21T10:46:04.044097+00:00 info: 2015-04-21 10:46:04.038 2732 DEBUG fuel_agent.utils.artifact_utils [-] Flushing file: /dev/mapper/os-root -2015-04-21T10:46:06.049626+00:00 info: 2015-04-21 10:46:05.748 2732 DEBUG fuel_agent.utils.artifact_utils [-] File is written: /dev/mapper/os-root -2015-04-21T10:46:06.049848+00:00 info: 2015-04-21 10:46:05.748 2732 DEBUG fuel_agent.manager [-] Trying to compare image checksum -2015-04-21T10:46:12.562785+00:00 info: 2015-04-21 10:46:12.509 2732 DEBUG fuel_agent.manager [-] Checksum matches successfully: md5=7115eeb1893b656904a4173719dd205e -2015-04-21T10:46:12.562785+00:00 info: 2015-04-21 10:46:12.510 2732 DEBUG fuel_agent.manager [-] Extending image file systems -2015-04-21T10:46:12.563037+00:00 info: 2015-04-21 10:46:12.510 2732 DEBUG fuel_agent.manager [-] Extending ext4 /dev/mapper/os-root -2015-04-21T10:46:12.563254+00:00 info: 2015-04-21 10:46:12.510 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: e2fsck -yf /dev/mapper/os-root -2015-04-21T10:46:13.064674+00:00 info: 2015-04-21 10:46:12.851 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: resize2fs /dev/mapper/os-root -2015-04-21T10:46:15.570831+00:00 info: 2015-04-21 10:46:15.486 2732 DEBUG fuel_agent.manager [-] Processing image: file:///tmp/config-drive.img -2015-04-21T10:46:15.571091+00:00 info: 2015-04-21 10:46:15.487 2732 DEBUG fuel_agent.manager [-] Appending uri processor: file:///tmp/config-drive.img -2015-04-21T10:46:15.571442+00:00 info: 2015-04-21 10:46:15.487 2732 DEBUG fuel_agent.manager [-] Appending FILE processor -2015-04-21T10:46:15.571614+00:00 info: 2015-04-21 10:46:15.488 2732 DEBUG fuel_agent.manager [-] Appending TARGET processor: /dev/vda6 -2015-04-21T10:46:15.571869+00:00 info: 2015-04-21 10:46:15.488 2732 DEBUG fuel_agent.manager [-] Launching image processing chain -2015-04-21T10:46:15.572091+00:00 info: 2015-04-21 10:46:15.489 2732 DEBUG fuel_agent.utils.artifact_utils [-] Processor target: /dev/vda6 -2015-04-21T10:46:15.572371+00:00 info: 2015-04-21 10:46:15.489 2732 DEBUG fuel_agent.utils.artifact_utils [-] Opening file: /dev/vda6 for write -2015-04-21T10:46:15.572570+00:00 info: 2015-04-21 10:46:15.490 2732 DEBUG fuel_agent.utils.artifact_utils [-] Next chunk: 0 -2015-04-21T10:46:15.572763+00:00 info: 2015-04-21 10:46:15.492 2732 DEBUG fuel_agent.utils.artifact_utils [-] Flushing file: /dev/vda6 -2015-04-21T10:46:15.573043+00:00 info: 2015-04-21 10:46:15.505 2732 DEBUG fuel_agent.utils.artifact_utils [-] File is written: /dev/vda6 -2015-04-21T10:46:15.573314+00:00 info: 2015-04-21 10:46:15.505 2732 DEBUG fuel_agent.manager [-] Trying to compare image checksum -2015-04-21T10:46:15.573595+00:00 info: 2015-04-21 10:46:15.509 2732 DEBUG fuel_agent.manager [-] Checksum matches successfully: md5=69633ef9e3191c97686c8e1e18863dfb -2015-04-21T10:46:15.573798+00:00 info: 2015-04-21 10:46:15.509 2732 DEBUG fuel_agent.manager [-] Extending image file systems -2015-04-21T10:46:15.574016+00:00 info: 2015-04-21 10:46:15.510 2732 DEBUG fuel_agent.manager [-] --- Installing bootloader (do_bootloader) --- -2015-04-21T10:46:15.574215+00:00 info: 2015-04-21 10:46:15.510 2732 DEBUG fuel_agent.manager [-] Mounting target file systems -2015-04-21T10:46:15.574455+00:00 info: 2015-04-21 10:46:15.511 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: mount -t ext4 /dev/mapper/os-root /tmp/target/ -2015-04-21T10:46:15.574747+00:00 info: 2015-04-21 10:46:15.536 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: mount -t ext2 /dev/vda3 /tmp/target/boot -2015-04-21T10:46:15.574936+00:00 info: 2015-04-21 10:46:15.553 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: mount -t xfs /dev/mapper/image-glance /tmp/target/var/lib/glance -2015-04-21T10:46:16.077090+00:00 info: 2015-04-21 10:46:15.605 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: mount --bind /sys /tmp/target/sys -2015-04-21T10:46:16.077368+00:00 info: 2015-04-21 10:46:15.614 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: mount --bind /dev /tmp/target/dev -2015-04-21T10:46:16.077657+00:00 info: 2015-04-21 10:46:15.623 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: mount --bind /proc /tmp/target/proc -2015-04-21T10:46:16.077887+00:00 info: 2015-04-21 10:46:15.630 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: chroot /tmp/target grep -v rootfs /proc/mounts -2015-04-21T10:46:16.078171+00:00 info: 2015-04-21 10:46:15.646 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: blkid -o value -s UUID /dev/vda3 -2015-04-21T10:46:16.078499+00:00 info: 2015-04-21 10:46:15.663 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: blkid -o value -s UUID /dev/mapper/os-root -2015-04-21T10:46:16.078726+00:00 info: 2015-04-21 10:46:15.679 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: blkid -o value -s UUID /dev/mapper/os-swap -2015-04-21T10:46:16.078947+00:00 info: 2015-04-21 10:46:15.703 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: blkid -o value -s UUID /dev/mapper/image-glance -2015-04-21T10:46:16.079172+00:00 info: 2015-04-21 10:46:15.723 2732 DEBUG fuel_agent.utils.grub_utils [-] Looking for grub-install: trying /sbin/grub-install -2015-04-21T10:46:16.079581+00:00 info: 2015-04-21 10:46:15.724 2732 DEBUG fuel_agent.utils.grub_utils [-] Looking for grub-install: trying /sbin/grub2-install -2015-04-21T10:46:16.079764+00:00 info: 2015-04-21 10:46:15.724 2732 DEBUG fuel_agent.utils.grub_utils [-] Looking for grub-install: trying /usr/sbin/grub-install -2015-04-21T10:46:16.080005+00:00 info: 2015-04-21 10:46:15.725 2732 DEBUG fuel_agent.utils.grub_utils [-] grub-install found: /usr/sbin/grub-install -2015-04-21T10:46:16.080227+00:00 info: 2015-04-21 10:46:15.725 2732 DEBUG fuel_agent.utils.grub_utils [-] Trying to run /usr/sbin/grub-install --version -2015-04-21T10:46:16.080480+00:00 info: 2015-04-21 10:46:15.725 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: chroot /tmp/target /usr/sbin/grub-install --version -2015-04-21T10:46:16.080769+00:00 info: 2015-04-21 10:46:15.740 2732 DEBUG fuel_agent.utils.grub_utils [-] Looks like grub version is 2 -2015-04-21T10:46:16.081042+00:00 info: 2015-04-21 10:46:15.744 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: chroot /tmp/target /usr/sbin/grub-mkconfig -o /boot/grub/grub.cfg -2015-04-21T10:46:23.128574+00:00 info: 2015-04-21 10:46:23.007 2732 DEBUG fuel_agent.utils.grub_utils [-] Looking for grub-install: trying /sbin/grub-install -2015-04-21T10:46:23.128730+00:00 info: 2015-04-21 10:46:23.007 2732 DEBUG fuel_agent.utils.grub_utils [-] Looking for grub-install: trying /sbin/grub2-install -2015-04-21T10:46:23.128892+00:00 info: 2015-04-21 10:46:23.008 2732 DEBUG fuel_agent.utils.grub_utils [-] Looking for grub-install: trying /usr/sbin/grub-install -2015-04-21T10:46:23.129054+00:00 info: 2015-04-21 10:46:23.008 2732 DEBUG fuel_agent.utils.grub_utils [-] grub-install found: /usr/sbin/grub-install -2015-04-21T10:46:23.129287+00:00 info: 2015-04-21 10:46:23.008 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: chroot /tmp/target /usr/sbin/grub-install /dev/vda -2015-04-21T10:46:24.633184+00:00 info: 2015-04-21 10:46:24.314 2732 DEBUG fuel_agent.manager [-] Umounting target file systems -2015-04-21T10:46:24.633613+00:00 info: 2015-04-21 10:46:24.315 2732 DEBUG fuel_agent.utils.fs_utils [-] Trying to umount /tmp/target/proc -2015-04-21T10:46:24.634048+00:00 info: 2015-04-21 10:46:24.315 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: umount /tmp/target/proc -2015-04-21T10:46:24.634499+00:00 info: 2015-04-21 10:46:24.322 2732 DEBUG fuel_agent.utils.fs_utils [-] Trying to umount /tmp/target/dev -2015-04-21T10:46:24.634954+00:00 info: 2015-04-21 10:46:24.323 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: umount /tmp/target/dev -2015-04-21T10:46:24.635438+00:00 info: 2015-04-21 10:46:24.330 2732 DEBUG fuel_agent.utils.fs_utils [-] Trying to umount /tmp/target/sys -2015-04-21T10:46:24.635876+00:00 info: 2015-04-21 10:46:24.330 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: umount /tmp/target/sys -2015-04-21T10:46:24.636253+00:00 info: 2015-04-21 10:46:24.337 2732 DEBUG fuel_agent.utils.fs_utils [-] Trying to umount /tmp/target/var/lib/glance -2015-04-21T10:46:24.636756+00:00 info: 2015-04-21 10:46:24.337 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: umount /tmp/target/var/lib/glance -2015-04-21T10:46:24.637165+00:00 info: 2015-04-21 10:46:24.388 2732 DEBUG fuel_agent.utils.fs_utils [-] Trying to umount /tmp/target/boot -2015-04-21T10:46:24.637552+00:00 info: 2015-04-21 10:46:24.389 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: umount /tmp/target/boot -2015-04-21T10:46:24.637978+00:00 info: 2015-04-21 10:46:24.401 2732 DEBUG fuel_agent.utils.fs_utils [-] Trying to umount /tmp/target/ -2015-04-21T10:46:24.638335+00:00 info: 2015-04-21 10:46:24.401 2732 DEBUG fuel_agent.utils.utils [-] Trying to execute command: umount /tmp/target/ -2015-04-21T10:46:24.638808+00:00 info: 2015-04-21 10:46:24.448 2732 DEBUG fuel_agent.manager [-] --- Provisioning END (do_provisioning) --- diff --git a/spec/example-logs/main-menu.log_ b/spec/example-logs/main-menu.log_ deleted file mode 100644 index 14f01136..00000000 --- a/spec/example-logs/main-menu.log_ +++ /dev/null @@ -1,36 +0,0 @@ -2014-09-29T12:31:31.677593+01:00 debug: DEBUG: resolver (libc6-udeb): package doesn't exist (ignored) -2014-09-29T12:31:31.677593+01:00 debug: DEBUG: resolver (libnewt0.52): package doesn't exist (ignored) -2014-09-29T12:31:31.685596+01:00 info: INFO: Menu item 'localechooser' selected -2014-09-29T12:31:32.082056+01:00 debug: DEBUG: resolver (libc6-udeb): package doesn't exist (ignored) -2014-09-29T12:31:32.082056+01:00 debug: DEBUG: resolver (libnewt0.52): package doesn't exist (ignored) -2014-09-29T12:31:32.089182+01:00 info: INFO: Menu item 'console-setup-udeb' selected -2014-09-29T12:31:32.089182+01:00 info: INFO: Falling back to the package description for console-setup-pc-ekmap -2014-09-29T12:31:32.089300+01:00 info: INFO: Falling back to the package description for console-setup-pc-ekmap -2014-09-29T12:31:32.759362+01:00 debug: DEBUG: resolver (libc6-udeb): package doesn't exist (ignored) -2014-09-29T12:31:32.759362+01:00 debug: DEBUG: resolver (libnewt0.52): package doesn't exist (ignored) -2014-09-29T12:31:32.766763+01:00 info: INFO: Menu item 'choose-mirror' selected -2014-09-29T12:31:32.812971+01:00 debug: DEBUG: resolver (libc6-udeb): package doesn't exist (ignored) -2014-09-29T12:31:32.812971+01:00 debug: DEBUG: resolver (libnewt0.52): package doesn't exist (ignored) -2014-09-29T12:31:32.820644+01:00 info: INFO: Menu item 'download-installer' selected -2014-09-29T12:31:53.678947+01:00 debug: DEBUG: resolver (libnewt0.52): package doesn't exist (ignored) -2014-09-29T12:31:53.707813+01:00 info: INFO: Menu item 'network-console' selected -2014-09-29T12:31:54.645858+01:00 debug: DEBUG: resolver (libnewt0.52): package doesn't exist (ignored) -2014-09-29T12:31:54.676886+01:00 info: INFO: Menu item 'user-setup-udeb' selected -2014-09-29T12:31:55.301215+01:00 debug: DEBUG: resolver (libnewt0.52): package doesn't exist (ignored) -2014-09-29T12:31:55.330447+01:00 info: INFO: Menu item 'clock-setup' selected -2014-09-29T12:31:55.952573+01:00 debug: DEBUG: resolver (libnewt0.52): package doesn't exist (ignored) -2014-09-29T12:31:55.982505+01:00 info: INFO: Menu item 'disk-detect' selected -2014-09-29T12:31:59.444722+01:00 debug: DEBUG: resolver (libnewt0.52): package doesn't exist (ignored) -2014-09-29T12:31:59.480962+01:00 info: INFO: Menu item 'partman-base' selected -2014-09-29T12:32:16.110889+01:00 debug: DEBUG: resolver (libnewt0.52): package doesn't exist (ignored) -2014-09-29T12:32:16.142964+01:00 info: INFO: Menu item 'bootstrap-base' selected -2014-09-29T12:35:14.096885+01:00 debug: DEBUG: resolver (libnewt0.52): package doesn't exist (ignored) -2014-09-29T12:35:14.125297+01:00 info: INFO: Menu item 'apt-setup-udeb' selected -2014-09-29T12:35:20.952044+01:00 debug: DEBUG: resolver (libnewt0.52): package doesn't exist (ignored) -2014-09-29T12:35:20.985106+01:00 info: INFO: Menu item 'pkgsel' selected -2014-09-29T12:38:13.923683+01:00 info: (process:3404): No packages found matching language-support-en. -2014-09-29T12:38:13.923683+01:00 info: (process:3404): update-initramfs: Generating /boot/initrd.img-3.2.0-65-generic -2014-09-29T12:38:14.557343+01:00 debug: DEBUG: resolver (libnewt0.52): package doesn't exist (ignored) -2014-09-29T12:38:14.584550+01:00 info: INFO: Menu item 'nobootloader' selected -2014-09-29T12:38:15.234880+01:00 debug: DEBUG: resolver (libnewt0.52): package doesn't exist (ignored) -2014-09-29T12:38:15.261169+01:00 info: INFO: Menu item 'finish-install' selected diff --git a/spec/example-logs/puppet-agent.log.ha.compute b/spec/example-logs/puppet-agent.log.ha.compute deleted file mode 100644 index 771d6da8..00000000 --- a/spec/example-logs/puppet-agent.log.ha.compute +++ /dev/null @@ -1,86 +0,0 @@ -2013-01-30T11:46:13 notice: Reopening log files -2013-01-30T11:46:37 notice: (/Stage[main]/Nova::Utilities/Package[euca2ools]/ensure) created -2013-01-30T11:46:39 notice: (/Stage[main]/Nova::Compute/Package[bridge-utils]/ensure) created -2013-01-30T11:46:51 notice: (/Stage[main]/Mysql::Python/Package[python-mysqldb]/ensure) created -2013-01-30T11:46:54 notice: (/Stage[main]/Nova::Utilities/Package[screen]/ensure) created -2013-01-30T11:46:54 notice: (/Stage[main]/Nova::Compute::Libvirt/Exec[symlink-qemu-kvm]/returns) executed successfully -2013-01-30T11:46:59 notice: (/Stage[main]/Nova::Utilities/Package[parted]/ensure) created -2013-01-30T11:48:03 notice: (/Stage[main]/Nova::Compute::Libvirt/Package[libvirt]/ensure) created -2013-01-30T11:48:33 notice: (/Stage[main]/Keystone::Python/Package[python-keystone]/ensure) created -2013-01-30T11:49:33 notice: (/Stage[main]/Nova::Api/Nova::Generic_service[api]/Package[nova-api]/ensure) created -2013-01-30T11:49:35 notice: (/Stage[main]/Nova::Compute::Libvirt/Package[dnsmasq-utils]/ensure) created -2013-01-30T11:49:35 notice: (/Stage[main]/Nova::Network::Vlan/Nova_config[DEFAULT/network_manager]/value) value changed 'nova.network.manager.FlatDHCPManager' to 'nova.network.manager.VlanManager' -2013-01-30T11:49:35 notice: (/Stage[main]/Nova::Compute/Nova_config[DEFAULT/vncserver_proxyclient_address]/ensure) created -2013-01-30T11:49:35 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_hosts]/ensure) created -2013-01-30T11:49:35 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/osapi_compute_listen]/ensure) created -2013-01-30T11:49:35 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/ec2_listen]/ensure) created -2013-01-30T11:49:35 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/admin_password]/value) value changed '%SERVICE_PASSWORD%' to 'nova' -2013-01-30T11:49:35 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/admin_user]/value) value changed '%SERVICE_USER%' to 'nova' -2013-01-30T11:49:35 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/glance_api_servers]/ensure) created -2013-01-30T11:49:35 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_userid]/ensure) created -2013-01-30T11:49:35 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_ha_queues]/ensure) created -2013-01-30T11:49:35 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_password]/ensure) created -2013-01-30T11:49:35 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/verbose]/ensure) created -2013-01-30T11:49:35 notice: (/Stage[main]/Nova::Api/Nova_config[DEFAULT/enabled_apis]/ensure) created -2013-01-30T11:49:35 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/sql_connection]/value) value changed 'mysql://nova:nova@localhost/nova' to 'mysql://nova:nova@192.168.0.6/nova' -2013-01-30T11:49:35 notice: (/Stage[main]/Nova::Compute/Nova_config[DEFAULT/vnc_enabled]/ensure) created -2013-01-30T11:49:35 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_virtual_host]/ensure) created -2013-01-30T11:49:35 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/image_service]/ensure) created -2013-01-30T11:49:35 notice: (/Stage[main]/Nova::Api/Nova_config[DEFAULT/volume_api_class]/ensure) created -2013-01-30T11:49:35 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/auth_host]/value) value changed '127.0.0.1' to '192.168.0.6' -2013-01-30T11:49:35 notice: (/Stage[main]/Nova::Network::Vlan/Nova_config[DEFAULT/force_dhcp_release]/value) value changed 'True' to 'true' -2013-01-30T11:49:35 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_port]/ensure) created -2013-01-30T11:49:35 notice: (/Stage[main]/Nova::Network::Vlan/Nova_config[DEFAULT/vlan_start]/ensure) created -2013-01-30T11:49:36 notice: (/Stage[main]/Nova/User[nova]/shell) shell changed '/sbin/nologin' to '/bin/bash' -2013-01-30T11:49:36 notice: (/Stage[main]/Nova/File[/var/log/nova]/group) group changed 'root' to 'nova' -2013-01-30T11:49:36 notice: (/Stage[main]/Nova/File[/var/log/nova]/mode) mode changed '0755' to '0751' -2013-01-30T11:49:36 notice: (/Stage[main]/Nova::Api/Nova_config[DEFAULT/api_paste_config]/ensure) created -2013-01-30T11:49:36 notice: (/Stage[main]/Nova::Compute/Nova_config[DEFAULT/novncproxy_base_url]/ensure) created -2013-01-30T11:49:36 notice: (/Stage[main]/Nova::Network::Vlan/Nova_config[DEFAULT/public_interface]/ensure) created -2013-01-30T11:49:36 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/service_down_time]/ensure) created -2013-01-30T11:49:36 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/admin_tenant_name]/value) value changed '%SERVICE_TENANT_NAME%' to 'services' -2013-01-30T11:49:38 notice: (/Stage[main]/Nova/Package[python-amqp]/ensure) created -2013-01-30T11:49:39 notice: (/Stage[main]/Nova::Compute::Libvirt/Nova_config[DEFAULT/vncserver_listen]/ensure) created -2013-01-30T11:50:44 notice: (/Stage[main]/Nova::Compute/Nova::Generic_service[compute]/Package[nova-compute]/ensure) created -2013-01-30T11:50:44 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/osapi_volume_listen]/ensure) created -2013-01-30T11:50:44 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/signing_dir]/ensure) created -2013-01-30T11:50:44 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/metadata_listen]/ensure) created -2013-01-30T11:50:44 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/auth_strategy]/ensure) created -2013-01-30T11:50:48 notice: (/Stage[main]/Nova::Compute::Libvirt/Package[avahi]/ensure) created -2013-01-30T11:50:53 notice: (/Stage[main]/Nova::Utilities/Package[unzip]/ensure) created -2013-01-30T11:50:53 notice: (/Stage[main]/Osnailyfacter::Test_compute/File[/tmp/compute-file]/ensure) defined content as '{md5}1b7628cdc1398d36048932f1eff47a63' -2013-01-30T11:50:53 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rpc_backend]/value) value changed 'nova.openstack.common.rpc.impl_qpid' to 'nova.rpc.impl_kombu' -2013-01-30T11:50:53 notice: (/Stage[main]/Nova::Network::Vlan/Nova_config[DEFAULT/fixed_range]/ensure) created -2013-01-30T11:50:53 notice: (/Stage[main]/Nova::Network::Vlan/Nova_config[DEFAULT/dhcp_domain]/ensure) created -2013-01-30T11:50:53 notice: (/Stage[main]/Nova::Network/Sysctl::Value[net.ipv4.ip_forward]/Sysctl[net.ipv4.ip_forward]/val) val changed '0' to '1' -2013-01-30T11:50:56 notice: (/Stage[main]/Nova::Network/Nova::Generic_service[network]/Package[nova-network]/ensure) created -2013-01-30T11:50:56 notice: (/Stage[main]/Openstack::Compute/Nova_config[DEFAULT/metadata_host]/ensure) created -2013-01-30T11:50:56 notice: (/Stage[main]/Openstack::Compute/Nova_config[DEFAULT/memcached_servers]/ensure) created -2013-01-30T11:50:58 notice: (/Stage[main]/Openstack::Compute/Augeas[sysconfig-libvirt]/returns) executed successfully -2013-01-30T11:50:58 notice: (/Stage[main]/Openstack::Compute/Nova_config[DEFAULT/send_arp_for_ha]/ensure) created -2013-01-30T11:50:58 notice: (/Stage[main]/Openstack::Compute/Nova_config[DEFAULT/multi_host]/ensure) created -2013-01-30T11:50:58 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/allow_resize_to_same_host]/ensure) created -2013-01-30T11:50:58 notice: (/Stage[main]/Nova::Network/Sysctl::Value[net.ipv4.ip_forward]/Exec[exec_sysctl_net.ipv4.ip_forward]/returns) net.ipv4.ip_forward = 1 -2013-01-30T11:50:58 notice: (/Stage[main]/Nova::Network/Sysctl::Value[net.ipv4.ip_forward]/Exec[exec_sysctl_net.ipv4.ip_forward]/returns) executed successfully -2013-01-30T11:50:59 notice: (/Stage[main]/Openstack::Compute/Augeas[libvirt-conf]/returns) executed successfully -2013-01-30T11:50:59 notice: (/Stage[main]/Nova::Compute::Libvirt/Service[messagebus]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:50:59 notice: (/Stage[main]/Nova::Compute::Libvirt/Service[avahi-daemon]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:50:59 notice: (/Stage[main]/Nova::Compute::Libvirt/Service[libvirt]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:51:00 notice: (/Stage[main]/Nova::Compute::Libvirt/Service[libvirt]) Triggered 'refresh' from 1 events -2013-01-30T11:51:00 notice: (/Stage[main]/Nova::Compute::Libvirt/Nova_config[DEFAULT/libvirt_type]/ensure) created -2013-01-30T11:51:00 notice: (/Stage[main]/Nova::Network::Vlan/Nova_config[DEFAULT/vlan_interface]/ensure) created -2013-01-30T11:51:00 notice: (/Stage[main]/Nova::Compute::Libvirt/Nova_config[DEFAULT/connection_type]/ensure) created -2013-01-30T11:51:00 notice: (/Stage[main]/Nova/File[/etc/nova/nova.conf]/owner) owner changed 'root' to 'nova' -2013-01-30T11:51:00 notice: (/Stage[main]/Nova/Exec[post-nova_config]/returns) Nova config has changed -2013-01-30T11:51:00 notice: (/Stage[main]/Nova/Exec[post-nova_config]) Triggered 'refresh' from 86 events -2013-01-30T11:51:01 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]/returns) 2013-01-30 11:51:01 DEBUG nova.utils [-] backend from (pid=4334) __get_backend /usr/lib/python2.6/site-packages/nova/utils.py:494 -2013-01-30T11:51:01 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]/returns) executed successfully -2013-01-30T11:51:02 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]/returns) 2013-01-30 11:51:02 DEBUG nova.utils [-] backend from (pid=4398) __get_backend /usr/lib/python2.6/site-packages/nova/utils.py:494 -2013-01-30T11:51:02 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]) Triggered 'refresh' from 1 events -2013-01-30T11:51:02 notice: (/Stage[main]/Nova::Api/Nova::Generic_service[api]/Service[nova-api]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:51:03 notice: (/Stage[main]/Nova::Api/Nova::Generic_service[api]/Service[nova-api]) Triggered 'refresh' from 47 events -2013-01-30T11:51:05 notice: (/Stage[main]/Nova::Compute/Nova::Generic_service[compute]/Service[nova-compute]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:51:07 notice: (/Stage[main]/Nova::Compute/Nova::Generic_service[compute]/Service[nova-compute]) Triggered 'refresh' from 4 events -2013-01-30T11:51:09 notice: (/Stage[main]/Nova::Network/Nova::Generic_service[network]/Service[nova-network]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:51:11 notice: (/Stage[main]/Nova::Network/Nova::Generic_service[network]/Service[nova-network]) Triggered 'refresh' from 4 events -2013-01-30T11:51:12 notice: Finished catalog run in 287.81 seconds diff --git a/spec/example-logs/puppet-agent.log.ha.contr.1 b/spec/example-logs/puppet-agent.log.ha.contr.1 deleted file mode 100644 index 3efe63af..00000000 --- a/spec/example-logs/puppet-agent.log.ha.contr.1 +++ /dev/null @@ -1,950 +0,0 @@ -2013-01-30T10:46:55 notice: Reopening log files -2013-01-30T10:47:46 notice: (/Stage[main]/Nova::Utilities/Package[euca2ools]/ensure) created -2013-01-30T10:47:46 notice: (/Stage[main]/Concat::Setup/File[/var/lib/puppet/concat]/ensure) created -2013-01-30T10:47:49 notice: (/Stage[main]/Mysql::Python/Package[python-mysqldb]/ensure) created -2013-01-30T10:47:49 notice: (/Stage[main]/Concat::Setup/File[/var/lib/puppet/concat/bin]/ensure) created -2013-01-30T10:47:49 notice: (/Stage[main]/Concat::Setup/File[/var/lib/puppet/concat/bin/concatfragments.sh]/ensure) defined content as '{md5}256169ee61115a6b717b2844d2ea3128' -2013-01-30T10:47:51 notice: (/Stage[main]/Nova::Utilities/Package[screen]/ensure) created -2013-01-30T10:47:53 notice: (/Stage[main]/Xinetd/Package[xinetd]/ensure) created -2013-01-30T10:47:54 notice: (/Stage[main]/Memcached/User[memcached]/ensure) created -2013-01-30T10:47:57 notice: (/Stage[main]/Memcached/Package[memcached]/ensure) created -2013-01-30T10:47:57 notice: (/Stage[main]/Memcached/File[/etc/sysconfig/memcached]/content) content changed '{md5}05503957e3796fbe6fddd756a7a102a0' to '{md5}3a3961445528bdeda6d7b8b5564dfcfc' -2013-01-30T10:47:58 notice: (/Stage[main]/Memcached/Service[memcached]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T10:47:59 notice: (/Stage[main]/Memcached/Service[memcached]) Triggered 'refresh' from 1 events -2013-01-30T10:47:59 notice: (/Stage[main]/Osnailyfacter::Test_controller/File[/tmp/controller-file]/ensure) defined content as '{md5}7f5c51282c4b1242e12addba8cc331fa' -2013-01-30T10:48:04 notice: (/Stage[main]/Horizon/Package[mod_wsgi]/ensure) created -2013-01-30T10:48:08 notice: (/Stage[main]/Swift::Xfs/Package[xfsprogs]/ensure) created -2013-01-30T10:48:12 notice: (/Stage[main]/Nova::Utilities/Package[parted]/ensure) created -2013-01-30T10:48:12 notice: (/Stage[main]/Openstack::Firewall/File[iptables]/ensure) defined content as '{md5}7efd2b2c624fb433a1538c229ae20e1f' -2013-01-30T10:48:12 notice: (/Stage[main]/Openstack::Firewall/Exec[startup-firewall]/returns) executed successfully -2013-01-30T10:48:33 notice: (/Stage[main]/Keystone::Python/Package[python-keystone]/ensure) created -2013-01-30T10:48:39 notice: (/Stage[main]/Openstack::Glance/Package[swift]/ensure) created -2013-01-30T10:49:38 notice: (/Stage[main]/Nova::Api/Nova::Generic_service[api]/Package[nova-api]/ensure) created -2013-01-30T10:49:38 notice: (/Stage[main]/Openstack::Swift::Proxy/File[/tmp/swift_keystone_test.rb]/ensure) defined content as '{md5}9921c28fffe90ef152603443c7a9a4d3' -2013-01-30T10:49:45 notice: (/Stage[main]/Nova/Package[python-amqp]/ensure) created -2013-01-30T10:49:45 notice: (/Stage[main]/Swift/File[/var/lib/swift]/ensure) created -2013-01-30T10:49:45 notice: (/Stage[main]/Swift/File[/etc/swift]/owner) owner changed 'root' to 'swift' -2013-01-30T10:49:45 notice: (/Stage[main]/Swift/File[/etc/swift]/group) group changed 'root' to 'swift' -2013-01-30T10:49:45 notice: (/Stage[main]/Swift/File[/etc/swift]/mode) mode changed '0755' to '2770' -2013-01-30T10:49:45 notice: (/Stage[main]/Swift/File[/etc/swift/swift.conf]/content) content changed '{md5}5f2a4640b3293fedc9e8e249408f3044' to '{md5}32a608237a8eeb3fb48db3fda8a239e0' -2013-01-30T10:49:45 notice: (/Stage[main]/Swift/File[/etc/swift/swift.conf]/owner) owner changed 'root' to 'swift' -2013-01-30T10:49:45 notice: (/Stage[main]/Swift/File[/var/cache/swift]/ensure) created -2013-01-30T10:49:45 notice: (/Stage[main]/Swift/File[/var/run/swift]/group) group changed 'root' to 'swift' -2013-01-30T10:49:45 notice: (/Stage[main]/Xinetd/File[/etc/xinetd.conf]/content) content changed '{md5}9ff8cc688dd9f0dfc45e5afd25c427a7' to '{md5}1680192de4cef61a23dca13cdfff07c7' -2013-01-30T10:49:45 notice: (/Stage[main]/Xinetd/File[/etc/xinetd.conf]/owner) owner changed 'root' to 'swift' -2013-01-30T10:49:45 notice: (/Stage[main]/Xinetd/File[/etc/xinetd.conf]/group) group changed 'root' to 'swift' -2013-01-30T10:49:45 notice: (/Stage[main]/Xinetd/File[/etc/xinetd.conf]/mode) mode changed '0600' to '0664' -2013-01-30T10:49:48 notice: (/Stage[main]/Nova::Utilities/Package[unzip]/ensure) created -2013-01-30T10:49:48 notice: (/Stage[main]/Openstack::Auth_file/File[/root/openrc]/ensure) defined content as '{md5}70358e4313c4c6852303bf9d0f24fb81' -2013-01-30T10:50:08 notice: (/Stage[main]/Horizon/Package[openstack-dashboard]/ensure) created -2013-01-30T10:50:08 notice: (/Stage[main]/Horizon/File[/var/log/horizon]/ensure) created -2013-01-30T10:50:08 notice: (/Stage[main]/Horizon/File_line[horizon_redirect_rule]/ensure) created -2013-01-30T10:50:11 notice: (/Stage[main]/Openstack::Controller_ha/Package[socat]/ensure) created -2013-01-30T10:50:11 notice: (/Stage[main]/Haproxy/Concat[/etc/haproxy/haproxy.cfg]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg]/ensure) created -2013-01-30T10:50:11 notice: (/Stage[main]/Haproxy/Concat[/etc/haproxy/haproxy.cfg]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments]/ensure) created -2013-01-30T10:50:11 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[mysqld]/Haproxy::Balancermember[mysqld]/Concat::Fragment[mysqld_balancermember_mysqld]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/95-mysqld_mysqld_mysqld_balancermember_mysqld]/ensure) created -2013-01-30T10:50:11 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[glance-api]/Haproxy::Balancermember[glance-api]/Concat::Fragment[glance-api_balancermember_glance-api]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/80-glance-api_glance-api_glance-api_balancermember_glance-api]/ensure) created -2013-01-30T10:50:11 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[nova-api-1]/Haproxy::Balancermember[nova-api-1]/Concat::Fragment[nova-api-1_balancermember_nova-api-1]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/40-nova-api-1_nova-api-1_nova-api-1_balancermember_nova-api-1]/ensure) created -2013-01-30T10:50:11 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[quantum]/Haproxy::Balancermember[quantum]/Concat::Fragment[quantum_balancermember_quantum]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/85-quantum_quantum_quantum_balancermember_quantum]/ensure) created -2013-01-30T10:50:11 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[glance-reg]/Haproxy::Balancermember[glance-reg]/Concat::Fragment[glance-reg_balancermember_glance-reg]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/90-glance-reg_glance-reg_glance-reg_balancermember_glance-reg]/ensure) created -2013-01-30T10:50:11 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[nova-api-1]/Haproxy::Listen[nova-api-1]/Concat::Fragment[nova-api-1-listen_block]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/39-nova-api-1_nova-api-1-listen_block]/ensure) created -2013-01-30T10:50:11 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[mysqld]/Haproxy::Listen[mysqld]/Concat::Fragment[mysqld-listen_block]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/94-mysqld_mysqld-listen_block]/ensure) created -2013-01-30T10:50:11 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[swift]/Haproxy::Listen[swift]/Concat::Fragment[swift-listen_block]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/95-swift_swift-listen_block]/ensure) created -2013-01-30T10:50:11 notice: (/Stage[main]/Haproxy/Concat[/etc/haproxy/haproxy.cfg]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments.concat]/ensure) created -2013-01-30T10:50:11 notice: (/Stage[main]/Haproxy/Concat::Fragment[haproxy-base]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/10_haproxy-base]/ensure) created -2013-01-30T10:50:11 notice: (/Stage[main]/Haproxy/Concat::Fragment[00-header]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/01_00-header]/ensure) created -2013-01-30T10:50:11 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[glance-api]/Haproxy::Listen[glance-api]/Concat::Fragment[glance-api-listen_block]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/79-glance-api_glance-api-listen_block]/ensure) created -2013-01-30T10:50:11 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[swift]/Haproxy::Balancermember[swift]/Concat::Fragment[swift_balancermember_swift]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/96-swift_swift_swift_balancermember_swift]/ensure) created -2013-01-30T10:50:11 notice: (/Stage[main]/Haproxy/Concat[/etc/haproxy/haproxy.cfg]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments.concat.out]/ensure) created -2013-01-30T10:50:11 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[nova-api-4]/Haproxy::Listen[nova-api-4]/Concat::Fragment[nova-api-4-listen_block]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/69-nova-api-4_nova-api-4-listen_block]/ensure) created -2013-01-30T10:50:11 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[nova-api-2]/Haproxy::Balancermember[nova-api-2]/Concat::Fragment[nova-api-2_balancermember_nova-api-2]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/50-nova-api-2_nova-api-2_nova-api-2_balancermember_nova-api-2]/ensure) created -2013-01-30T10:50:11 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[nova-api-2]/Haproxy::Listen[nova-api-2]/Concat::Fragment[nova-api-2-listen_block]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/49-nova-api-2_nova-api-2-listen_block]/ensure) created -2013-01-30T10:50:11 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[keystone-1]/Haproxy::Listen[keystone-1]/Concat::Fragment[keystone-1-listen_block]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/19-keystone-1_keystone-1-listen_block]/ensure) created -2013-01-30T10:50:12 notice: (/Stage[main]/Horizon/File[/etc/openstack-dashboard/local_settings]/content) content changed '{md5}d114fa06522fa1016ab2bdede4cfd7bf' to '{md5}6f16dcbc1a76f8ae51dd6fe7157af42d' -2013-01-30T10:50:12 notice: (/Stage[main]/Horizon/File[/etc/openstack-dashboard/local_settings]/owner) owner changed 'root' to 'apache' -2013-01-30T10:50:12 notice: (/Stage[main]/Horizon/File[/etc/openstack-dashboard/local_settings]/group) group changed 'root' to 'apache' -2013-01-30T10:50:12 notice: (/Stage[main]/Swift/File[/home/swift]/ensure) created -2013-01-30T10:50:12 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Create[container]/Exec[create_container]/returns) executed successfully -2013-01-30T10:50:12 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Create[object]/Exec[create_object]/returns) executed successfully -2013-01-30T10:50:12 notice: (Ring_container_device[192.168.0.2:6001](provider=swift_ring_builder)) node name: 192.168.0.2:6001 -2013-01-30T10:50:12 notice: (Ring_container_device[192.168.0.2:6001](provider=swift_ring_builder)) available devs: [] -2013-01-30T10:50:12 err: (/Stage[main]/Swift::Storage::Container/Ring_container_device[192.168.0.2:6001]) Could not evaluate: Device not found check device on 192.168.0.2:6001 -2013-01-30T10:50:12 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[container]/Exec[hours_passed_container]) Dependency Ring_container_device[192.168.0.2:6001] has failures: true -2013-01-30T10:50:12 warning: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[container]/Exec[hours_passed_container]) Skipping because of failed dependencies -2013-01-30T10:50:12 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[container]/Exec[rebalance_container]) Dependency Ring_container_device[192.168.0.2:6001] has failures: true -2013-01-30T10:50:12 warning: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[container]/Exec[rebalance_container]) Skipping because of failed dependencies -2013-01-30T10:50:13 notice: (Ring_object_device[192.168.0.2:6000](provider=swift_ring_builder)) node name: 192.168.0.2:6000 -2013-01-30T10:50:13 notice: (Ring_object_device[192.168.0.2:6000](provider=swift_ring_builder)) available devs: [] -2013-01-30T10:50:13 err: (/Stage[main]/Swift::Storage::Object/Ring_object_device[192.168.0.2:6000]) Could not evaluate: Device not found check device on 192.168.0.2:6000 -2013-01-30T10:50:13 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[object]/Exec[hours_passed_object]) Dependency Ring_object_device[192.168.0.2:6000] has failures: true -2013-01-30T10:50:13 warning: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[object]/Exec[hours_passed_object]) Skipping because of failed dependencies -2013-01-30T10:50:13 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[object]/Exec[rebalance_object]) Dependency Ring_object_device[192.168.0.2:6000] has failures: true -2013-01-30T10:50:13 warning: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[object]/Exec[rebalance_object]) Skipping because of failed dependencies -2013-01-30T10:50:22 notice: (/Stage[main]/Nova::Vncproxy/Package[python-numpy]/ensure) created -2013-01-30T10:51:58 notice: (/Stage[main]/Nova::Utilities/Package[libguestfs-tools-c]/ensure) created -2013-01-30T10:51:58 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6001]/Concat[/etc/swift/container-server.conf]/File[/var/lib/puppet/concat/_etc_swift_container-server.conf]/ensure) created -2013-01-30T10:51:58 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6001]/Concat[/etc/swift/container-server.conf]/File[/var/lib/puppet/concat/_etc_swift_container-server.conf/fragments]/ensure) created -2013-01-30T10:51:58 notice: (/Stage[main]/Swift::Storage::All/File[/srv/node]/ensure) created -2013-01-30T10:51:58 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6001]/Concat[/etc/swift/container-server.conf]/File[/var/lib/puppet/concat/_etc_swift_container-server.conf/fragments.concat]/ensure) created -2013-01-30T10:51:58 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6002]/Concat[/etc/swift/account-server.conf]/File[/var/lib/puppet/concat/_etc_swift_account-server.conf]/ensure) created -2013-01-30T10:51:58 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6002]/Concat[/etc/swift/account-server.conf]/File[/var/lib/puppet/concat/_etc_swift_account-server.conf/fragments.concat]/ensure) created -2013-01-30T10:51:58 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6002]/Concat[/etc/swift/account-server.conf]/File[/var/lib/puppet/concat/_etc_swift_account-server.conf/fragments.concat.out]/ensure) created -2013-01-30T10:51:58 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6002]/Concat[/etc/swift/account-server.conf]/File[/var/lib/puppet/concat/_etc_swift_account-server.conf/fragments]/ensure) created -2013-01-30T10:51:58 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6002]/Concat::Fragment[swift-account-6002]/File[/var/lib/puppet/concat/_etc_swift_account-server.conf/fragments/00_swift-account-6002]/ensure) created -2013-01-30T10:51:58 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6001]/Concat[/etc/swift/container-server.conf]/File[/var/lib/puppet/concat/_etc_swift_container-server.conf/fragments.concat.out]/ensure) created -2013-01-30T10:51:58 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[keystone-2]/Haproxy::Balancermember[keystone-2]/Concat::Fragment[keystone-2_balancermember_keystone-2]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/30-keystone-2_keystone-2_keystone-2_balancermember_keystone-2]/ensure) created -2013-01-30T10:51:58 notice: (/Stage[main]/Rsync::Server/File[/etc/rsync.d]/ensure) created -2013-01-30T10:51:58 notice: (/Stage[main]/Rsync::Server/File[/etc/rsync.d/header]/ensure) defined content as '{md5}81c93e6021cb444faaac0cd902198ce2' -2013-01-30T10:51:58 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6001]/Rsync::Server::Module[container]/File[/etc/rsync.d/frag-container]/ensure) defined content as '{md5}f34ae17bc92c6dac2f9e4535cc52d6f4' -2013-01-30T10:51:58 notice: (/Stage[main]/Openstack::Controller_ha/Keepalived_dhcp_hook[eth0.102]/File[/etc/dhcp/dhclient-eth0.102-down-hooks]/ensure) defined content as '{md5}d5bdb51453a200b5822441bcc6072cae' -2013-01-30T10:51:59 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6000]/Concat[/etc/swift/object-server.conf]/File[/var/lib/puppet/concat/_etc_swift_object-server.conf]/ensure) created -2013-01-30T10:51:59 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6000]/Concat[/etc/swift/object-server.conf]/File[/var/lib/puppet/concat/_etc_swift_object-server.conf/fragments]/ensure) created -2013-01-30T10:51:59 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6000]/Concat[/etc/swift/object-server.conf]/File[/var/lib/puppet/concat/_etc_swift_object-server.conf/fragments.concat.out]/ensure) created -2013-01-30T10:51:59 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6000]/Concat::Fragment[swift-object-6000]/File[/var/lib/puppet/concat/_etc_swift_object-server.conf/fragments/00_swift-object-6000]/ensure) created -2013-01-30T10:51:59 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6000]/Rsync::Server::Module[object]/File[/etc/rsync.d/frag-object]/ensure) defined content as '{md5}6599fe18f7573876515cdb791157facc' -2013-01-30T10:51:59 notice: (/Stage[main]/Nova::Network/Sysctl::Value[net.ipv4.ip_forward]/Sysctl[net.ipv4.ip_forward]/val) val changed '0' to '1' -2013-01-30T10:51:59 notice: (/Stage[main]/Openstack::Controller_ha/Keepalived_dhcp_hook[eth0.101]/File[/etc/dhcp/dhclient-eth0.101-down-hooks]/ensure) defined content as '{md5}150162dde6c8e637d6192de84fd26fde' -2013-01-30T10:51:59 notice: (/Stage[main]/Openstack::Controller_ha/Keepalived_dhcp_hook[eth0.101]/File[/etc/dhcp/dhclient-eth0.101-up-hooks]/ensure) defined content as '{md5}beeb771a9fc99bc9f3b01258a2c947a2' -2013-01-30T10:51:59 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Create[account]/Exec[create_account]/returns) executed successfully -2013-01-30T10:51:59 notice: (Ring_account_device[192.168.0.2:6002](provider=swift_ring_builder)) node name: 192.168.0.2:6002 -2013-01-30T10:51:59 notice: (Ring_account_device[192.168.0.2:6002](provider=swift_ring_builder)) available devs: [] -2013-01-30T10:51:59 err: (/Stage[main]/Swift::Storage::Account/Ring_account_device[192.168.0.2:6002]) Could not evaluate: Device not found check device on 192.168.0.2:6002 -2013-01-30T10:51:59 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[account]/Exec[hours_passed_account]) Dependency Ring_account_device[192.168.0.2:6002] has failures: true -2013-01-30T10:51:59 warning: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[account]/Exec[hours_passed_account]) Skipping because of failed dependencies -2013-01-30T10:51:59 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[account]/Exec[rebalance_account]) Dependency Ring_account_device[192.168.0.2:6002] has failures: true -2013-01-30T10:51:59 warning: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[account]/Exec[rebalance_account]) Skipping because of failed dependencies -2013-01-30T10:51:59 notice: (/Stage[main]/Swift::Ringserver/Rsync::Server::Module[swift_server]/File[/etc/rsync.d/frag-swift_server]) Dependency Ring_container_device[192.168.0.2:6001] has failures: true -2013-01-30T10:51:59 notice: (/Stage[main]/Swift::Ringserver/Rsync::Server::Module[swift_server]/File[/etc/rsync.d/frag-swift_server]) Dependency Ring_account_device[192.168.0.2:6002] has failures: true -2013-01-30T10:51:59 notice: (/Stage[main]/Swift::Ringserver/Rsync::Server::Module[swift_server]/File[/etc/rsync.d/frag-swift_server]) Dependency Ring_object_device[192.168.0.2:6000] has failures: true -2013-01-30T10:51:59 warning: (/Stage[main]/Swift::Ringserver/Rsync::Server::Module[swift_server]/File[/etc/rsync.d/frag-swift_server]) Skipping because of failed dependencies -2013-01-30T10:51:59 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6001]/Concat::Fragment[swift-container-6001]/File[/var/lib/puppet/concat/_etc_swift_container-server.conf/fragments/00_swift-container-6001]/ensure) created -2013-01-30T10:52:00 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6001]/Concat[/etc/swift/container-server.conf]/Exec[concat_/etc/swift/container-server.conf]/returns) executed successfully -2013-01-30T10:52:00 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6001]/Concat[/etc/swift/container-server.conf]/Exec[concat_/etc/swift/container-server.conf]) Triggered 'refresh' from 3 events -2013-01-30T10:52:00 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6001]/Concat[/etc/swift/container-server.conf]/File[/etc/swift/container-server.conf]/ensure) defined content as '{md5}a6951489e072481239e499a6eb753933' -2013-01-30T10:52:00 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[keystone-2]/Haproxy::Listen[keystone-2]/Concat::Fragment[keystone-2-listen_block]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/29-keystone-2_keystone-2-listen_block]/ensure) created -2013-01-30T10:52:00 notice: (/Stage[main]/Nova::Network/Sysctl::Value[net.ipv4.ip_forward]/Exec[exec_sysctl_net.ipv4.ip_forward]/returns) net.ipv4.ip_forward = 1 -2013-01-30T10:52:00 notice: (/Stage[main]/Nova::Network/Sysctl::Value[net.ipv4.ip_forward]/Exec[exec_sysctl_net.ipv4.ip_forward]/returns) executed successfully -2013-01-30T10:52:00 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/File[/srv/loopback-device]/ensure) created -2013-01-30T10:52:00 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[horizon]/Haproxy::Listen[horizon]/Concat::Fragment[horizon-listen_block]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/14-horizon_horizon-listen_block]/ensure) created -2013-01-30T10:52:00 notice: (/Stage[main]/Rsync::Server/Xinetd::Service[rsync]/File[/etc/xinetd.d/rsync]/content) content changed '{md5}fd32314f3157aaf15712e6da7758060d' to '{md5}b5745641b26d03ebddd24b143319f385' -2013-01-30T10:52:00 notice: (/Stage[main]/Rsync::Server/Xinetd::Service[rsync]/File[/etc/xinetd.d/rsync]/owner) owner changed 'root' to 'swift' -2013-01-30T10:52:00 notice: (/Stage[main]/Rsync::Server/Xinetd::Service[rsync]/File[/etc/xinetd.d/rsync]/group) group changed 'root' to 'swift' -2013-01-30T10:52:00 notice: (/Stage[main]/Xinetd/Service[xinetd]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T10:52:00 notice: (/Stage[main]/Xinetd/Service[xinetd]) Triggered 'refresh' from 3 events -2013-01-30T10:52:01 notice: (/Stage[main]/Horizon/File_line[httpd_listen_on_internal_network_only]/ensure) created -2013-01-30T10:52:01 notice: (/Stage[main]/Horizon/Service[$::horizon::params::http_service]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T10:52:02 notice: (/Stage[main]/Horizon/Service[$::horizon::params::http_service]) Triggered 'refresh' from 6 events -2013-01-30T10:52:03 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Exec[create_partition-1]/returns) 0+0 records in -2013-01-30T10:52:03 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Exec[create_partition-1]/returns) 0+0 records out -2013-01-30T10:52:03 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Exec[create_partition-1]/returns) 0 bytes (0 B) copied, 1.4742e-05 s, 0.0 kB/s -2013-01-30T10:52:03 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Exec[create_partition-1]/returns) executed successfully -2013-01-30T10:52:03 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Exec[mkfs-1]/returns) meta-data=/srv/loopback-device/1 isize=1024 agcount=4, agsize=65548 blks -2013-01-30T10:52:03 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Exec[mkfs-1]/returns) = sectsz=512 attr=2 -2013-01-30T10:52:03 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Exec[mkfs-1]/returns) data = bsize=4096 blocks=262189, imaxpct=25 -2013-01-30T10:52:03 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Exec[mkfs-1]/returns) = sunit=0 swidth=0 blks -2013-01-30T10:52:03 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Exec[mkfs-1]/returns) naming =version 2 bsize=4096 ascii-ci=0 -2013-01-30T10:52:03 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Exec[mkfs-1]/returns) log =internal log bsize=4096 blocks=2560, version=2 -2013-01-30T10:52:03 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Exec[mkfs-1]/returns) = sectsz=512 sunit=0 blks, lazy-count=1 -2013-01-30T10:52:03 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Exec[mkfs-1]/returns) realtime =none extsz=4096 blocks=0, rtextents=0 -2013-01-30T10:52:03 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Exec[mkfs-1]) Triggered 'refresh' from 1 events -2013-01-30T10:52:03 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Swift::Storage::Mount[1]/File[/srv/node/1]/ensure) created -2013-01-30T10:52:03 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Swift::Storage::Mount[1]/Mount[/srv/node/1]/ensure) defined 'ensure' as 'defined' -2013-01-30T10:52:03 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Swift::Storage::Mount[1]/Mount[/srv/node/1]) Triggered 'refresh' from 2 events -2013-01-30T10:52:04 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Swift::Storage::Mount[1]/Exec[mount_1]/returns) executed successfully -2013-01-30T10:52:04 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Swift::Storage::Mount[1]/Exec[mount_1]) Triggered 'refresh' from 1 events -2013-01-30T10:52:04 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Swift::Storage::Mount[1]/Exec[fix_mount_permissions_1]) Triggered 'refresh' from 3 events -2013-01-30T10:52:04 notice: (/Stage[main]/Glance/Group[glance]/ensure) created -2013-01-30T10:52:04 notice: (/Stage[main]/Glance/User[glance]/ensure) created -2013-01-30T10:52:08 notice: (/Stage[main]/Glance/Package[glance]/ensure) created -2013-01-30T10:52:08 notice: (/Stage[main]/Glance::Backend::Swift/Glance_api_config[DEFAULT/swift_store_auth_address]/value) value changed '127.0.0.1:5000/v2.0/' to 'http://192.168.0.6:5000/v2.0/' -2013-01-30T10:52:09 notice: (/Stage[main]/Glance::Api/Glance_api_config[keystone_authtoken/signing_dirname]/ensure) created -2013-01-30T10:52:09 notice: (/Stage[main]/Glance::Api/Glance_api_config[DEFAULT/debug]/value) value changed 'False' to 'true' -2013-01-30T10:52:09 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/admin_user]/ensure) created -2013-01-30T10:52:09 notice: (/Stage[main]/Glance::Api/Glance_api_config[DEFAULT/sql_connection]/value) value changed 'mysql://glance:glance@localhost/glance' to 'mysql://glance:nova@192.168.0.6/glance' -2013-01-30T10:52:09 notice: (/Stage[main]/Glance::Api/Glance_api_config[DEFAULT/bind_host]/value) value changed '0.0.0.0' to '192.168.0.2' -2013-01-30T10:52:09 notice: (/Stage[main]/Glance::Backend::Swift/Glance_api_config[DEFAULT/default_store]/value) value changed 'file' to 'swift' -2013-01-30T10:52:09 notice: (/Stage[main]/Glance::Backend::Swift/Glance_api_config[DEFAULT/swift_store_create_container_on_put]/value) value changed 'False' to 'True' -2013-01-30T10:52:09 notice: (/Stage[main]/Glance::Api/Glance_api_config[paste_deploy/flavor]/ensure) created -2013-01-30T10:52:09 notice: (/Stage[main]/Glance::Backend::Swift/Glance_api_config[DEFAULT/swift_store_user]/value) value changed 'jdoe:jdoe' to 'services:glance' -2013-01-30T10:52:09 notice: (/Stage[main]/Glance::Api/Glance_api_config[keystone_authtoken/auth_host]/value) value changed '127.0.0.1' to '192.168.0.6' -2013-01-30T10:52:09 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/verbose]/value) value changed 'True' to 'true' -2013-01-30T10:52:09 notice: (/Stage[main]/Glance::Api/Glance_api_config[keystone_authtoken/admin_password]/value) value changed '%SERVICE_PASSWORD%' to 'nova' -2013-01-30T10:52:09 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/admin_tenant_name]/ensure) created -2013-01-30T10:52:09 notice: (/Stage[main]/Glance::Api/Glance_api_config[keystone_authtoken/admin_tenant_name]/value) value changed '%SERVICE_TENANT_NAME%' to 'services' -2013-01-30T10:52:09 notice: (/Stage[main]/Glance::Backend::Swift/Glance_api_config[DEFAULT/swift_store_key]/value) value changed 'a86850deb2742ec3cb41518e26aa2d89' to 'nova' -2013-01-30T10:52:09 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/admin_password]/ensure) created -2013-01-30T10:52:09 notice: (/Stage[main]/Glance::Api/Glance_api_config[DEFAULT/registry_host]/value) value changed '0.0.0.0' to '192.168.0.6' -2013-01-30T10:52:09 notice: (/Stage[main]/Glance::Api/Glance_api_config[keystone_authtoken/auth_uri]/ensure) created -2013-01-30T10:52:09 notice: (/Stage[main]/Glance/File[/etc/glance/]/owner) owner changed 'root' to 'glance' -2013-01-30T10:52:09 notice: (/Stage[main]/Glance/File[/etc/glance/]/mode) mode changed '0755' to '0770' -2013-01-30T10:52:09 notice: (/Stage[main]/Glance::Api/Glance_api_config[keystone_authtoken/admin_user]/value) value changed '%SERVICE_USER%' to 'glance' -2013-01-30T10:52:09 notice: (/Stage[main]/Glance::Api/Glance_api_config[keystone_authtoken/signing_dir]/ensure) created -2013-01-30T10:52:09 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/registry_host]/value) value changed '0.0.0.0' to '192.168.0.6' -2013-01-30T10:52:09 notice: (/Stage[main]/Glance/File[glance-logging.conf]/ensure) defined content as '{md5}71fa2daa8e89a992f4225e850fd879e4' -2013-01-30T10:52:09 notice: (/Stage[main]/Glance::Api/File[/etc/glance/glance-cache.conf]/owner) owner changed 'root' to 'glance' -2013-01-30T10:52:09 notice: (/Stage[main]/Glance::Api/File[/etc/glance/glance-api.conf]/owner) owner changed 'root' to 'glance' -2013-01-30T10:52:09 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/debug]/value) value changed 'False' to 'true' -2013-01-30T10:52:09 notice: (/Stage[main]/Glance::Api/Glance_api_config[DEFAULT/verbose]/value) value changed 'True' to 'true' -2013-01-30T10:52:11 notice: (/Stage[main]/Keepalived::Install/Package[keepalived]/ensure) created -2013-01-30T10:52:11 notice: (/Stage[main]/Keepalived::Config/Concat[/etc/keepalived/keepalived.conf]/File[/var/lib/puppet/concat/_etc_keepalived_keepalived.conf]/ensure) created -2013-01-30T10:52:11 notice: (/Stage[main]/Keepalived::Config/Concat[/etc/keepalived/keepalived.conf]/File[/var/lib/puppet/concat/_etc_keepalived_keepalived.conf/fragments]/ensure) created -2013-01-30T10:52:11 notice: (/Stage[main]/Openstack::Controller_ha/Keepalived::Instance[2]/Concat::Fragment[keepalived_2]/File[/var/lib/puppet/concat/_etc_keepalived_keepalived.conf/fragments/50_keepalived_2]/ensure) created -2013-01-30T10:52:11 notice: (/Stage[main]/Keepalived::Config/Concat[/etc/keepalived/keepalived.conf]/File[/var/lib/puppet/concat/_etc_keepalived_keepalived.conf/fragments.concat]/ensure) created -2013-01-30T10:52:11 notice: (/Stage[main]/Openstack::Controller_ha/Keepalived::Instance[1]/Concat::Fragment[keepalived_1]/File[/var/lib/puppet/concat/_etc_keepalived_keepalived.conf/fragments/50_keepalived_1]/ensure) created -2013-01-30T10:52:11 notice: (/Stage[main]/Keepalived::Config/Concat::Fragment[global_config]/File[/var/lib/puppet/concat/_etc_keepalived_keepalived.conf/fragments/01_global_config]/ensure) created -2013-01-30T10:52:12 notice: (/Stage[main]/Keepalived::Config/Concat[/etc/keepalived/keepalived.conf]/Exec[concat_/etc/keepalived/keepalived.conf]/returns) /var/lib/puppet/concat/bin/concatfragments.sh: line 108: [: too many arguments -2013-01-30T10:52:12 notice: (/Stage[main]/Keepalived::Config/Concat[/etc/keepalived/keepalived.conf]/Exec[concat_/etc/keepalived/keepalived.conf]/returns) executed successfully -2013-01-30T10:52:12 notice: (/Stage[main]/Keepalived::Config/Concat[/etc/keepalived/keepalived.conf]/Exec[concat_/etc/keepalived/keepalived.conf]) Triggered 'refresh' from 5 events -2013-01-30T10:52:12 notice: (/Stage[main]/Keepalived::Config/Concat[/etc/keepalived/keepalived.conf]/File[/etc/keepalived/keepalived.conf]/content) content changed '{md5}e79dca9e58978e8035e7d4ad25e2ce67' to '{md5}6c3df9d008e205fc97ac1501178e7a76' -2013-01-30T10:52:12 notice: (/Stage[main]/Keepalived::Config/Concat[/etc/keepalived/keepalived.conf]/File[/etc/keepalived/keepalived.conf]/mode) mode changed '0640' to '0644' -2013-01-30T10:52:12 notice: (/Stage[main]/Keepalived::Service/Service[keepalived]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T10:52:12 notice: (/Stage[main]/Keepalived::Service/Service[keepalived]) Triggered 'refresh' from 1 events -2013-01-30T10:52:12 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[keystone-1]/Haproxy::Balancermember[keystone-1]/Concat::Fragment[keystone-1_balancermember_keystone-1]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/20-keystone-1_keystone-1_keystone-1_balancermember_keystone-1]/ensure) created -2013-01-30T10:52:12 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[nova-api-4]/Haproxy::Balancermember[nova-api-4]/Concat::Fragment[nova-api-4_balancermember_nova-api-4]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/70-nova-api-4_nova-api-4_nova-api-4_balancermember_nova-api-4]/ensure) created -2013-01-30T10:52:12 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[quantum]/Haproxy::Listen[quantum]/Concat::Fragment[quantum-listen_block]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/84-quantum_quantum-listen_block]/ensure) created -2013-01-30T10:52:12 notice: (/Stage[main]/Swift::Storage::Object/Swift::Storage::Generic[object]/File[/etc/swift/object-server/]/ensure) created -2013-01-30T10:52:12 notice: (/Stage[main]/Swift::Storage::Account/Swift::Storage::Generic[account]/File[/etc/swift/account-server/]/ensure) created -2013-01-30T10:52:15 notice: (/Stage[main]/Swift::Storage::Account/Swift::Storage::Generic[account]/Package[swift-account]/ensure) created -2013-01-30T10:52:18 notice: (/Stage[main]/Swift::Storage::Container/Swift::Storage::Generic[container]/Package[swift-container]/ensure) created -2013-01-30T10:52:19 err: (/Service[swift-container-replicator]/ensure) change from stopped to running failed: Could not start Service[swift-container-replicator]: Execution of '/usr/bin/swift-init container-replicator start' returned 1: at /etc/puppet/modules/swift/manifests/storage/generic.pp:61 -2013-01-30T10:52:19 notice: (/Service[swift-container-replicator]) Triggered 'refresh' from 2 events -2013-01-30T10:52:19 notice: (/Stage[main]/Swift::Storage::Container/Swift::Storage::Generic[container]/File[/etc/swift/container-server/]/owner) owner changed 'root' to 'swift' -2013-01-30T10:52:19 notice: (/Stage[main]/Swift::Storage::Container/Swift::Storage::Generic[container]/File[/etc/swift/container-server/]/group) group changed 'root' to 'swift' -2013-01-30T10:52:21 notice: (/Stage[main]/Swift::Storage::Object/Swift::Storage::Generic[object]/Package[swift-object]/ensure) created -2013-01-30T10:52:22 notice: (/Stage[main]/Swift::Storage::Container/Swift::Storage::Generic[container]/Service[swift-container]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T10:52:22 notice: (/Stage[main]/Swift::Storage::Container/Swift::Storage::Generic[container]/Service[swift-container]) Triggered 'refresh' from 2 events -2013-01-30T10:52:22 notice: (/Stage[main]/Swift::Proxy/Package[swift-proxy]) Dependency Ring_container_device[192.168.0.2:6001] has failures: true -2013-01-30T10:52:22 notice: (/Stage[main]/Swift::Proxy/Package[swift-proxy]) Dependency Ring_account_device[192.168.0.2:6002] has failures: true -2013-01-30T10:52:22 notice: (/Stage[main]/Swift::Proxy/Package[swift-proxy]) Dependency Ring_object_device[192.168.0.2:6000] has failures: true -2013-01-30T10:52:22 warning: (/Stage[main]/Swift::Proxy/Package[swift-proxy]) Skipping because of failed dependencies -2013-01-30T10:52:22 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf]) Dependency Ring_container_device[192.168.0.2:6001] has failures: true -2013-01-30T10:52:22 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf]) Dependency Ring_account_device[192.168.0.2:6002] has failures: true -2013-01-30T10:52:22 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf]) Dependency Ring_object_device[192.168.0.2:6000] has failures: true -2013-01-30T10:52:22 warning: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf]) Skipping because of failed dependencies -2013-01-30T10:52:22 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments.concat]) Dependency Ring_container_device[192.168.0.2:6001] has failures: true -2013-01-30T10:52:22 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments.concat]) Dependency Ring_account_device[192.168.0.2:6002] has failures: true -2013-01-30T10:52:22 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments.concat]) Dependency Ring_object_device[192.168.0.2:6000] has failures: true -2013-01-30T10:52:22 warning: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments.concat]) Skipping because of failed dependencies -2013-01-30T10:52:22 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments.concat.out]) Dependency Ring_container_device[192.168.0.2:6001] has failures: true -2013-01-30T10:52:22 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments.concat.out]) Dependency Ring_account_device[192.168.0.2:6002] has failures: true -2013-01-30T10:52:22 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments.concat.out]) Dependency Ring_object_device[192.168.0.2:6000] has failures: true -2013-01-30T10:52:22 warning: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments.concat.out]) Skipping because of failed dependencies -2013-01-30T10:52:22 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments]) Dependency Ring_container_device[192.168.0.2:6001] has failures: true -2013-01-30T10:52:22 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments]) Dependency Ring_account_device[192.168.0.2:6002] has failures: true -2013-01-30T10:52:22 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments]) Dependency Ring_object_device[192.168.0.2:6000] has failures: true -2013-01-30T10:52:22 warning: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments]) Skipping because of failed dependencies -2013-01-30T10:52:22 notice: (/Stage[main]/Swift::Proxy/Concat::Fragment[swift_proxy]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/00_swift_proxy]) Dependency Ring_container_device[192.168.0.2:6001] has failures: true -2013-01-30T10:52:22 notice: (/Stage[main]/Swift::Proxy/Concat::Fragment[swift_proxy]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/00_swift_proxy]) Dependency Ring_account_device[192.168.0.2:6002] has failures: true -2013-01-30T10:52:22 notice: (/Stage[main]/Swift::Proxy/Concat::Fragment[swift_proxy]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/00_swift_proxy]) Dependency Ring_object_device[192.168.0.2:6000] has failures: true -2013-01-30T10:52:22 warning: (/Stage[main]/Swift::Proxy/Concat::Fragment[swift_proxy]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/00_swift_proxy]) Skipping because of failed dependencies -2013-01-30T10:52:22 notice: (/Stage[main]/Swift::Proxy::S3token/Concat::Fragment[swift_s3token]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/28_swift_s3token]) Dependency Ring_container_device[192.168.0.2:6001] has failures: true -2013-01-30T10:52:23 notice: (/Stage[main]/Swift::Proxy::S3token/Concat::Fragment[swift_s3token]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/28_swift_s3token]) Dependency Ring_account_device[192.168.0.2:6002] has failures: true -2013-01-30T10:52:23 notice: (/Stage[main]/Swift::Proxy::S3token/Concat::Fragment[swift_s3token]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/28_swift_s3token]) Dependency Ring_object_device[192.168.0.2:6000] has failures: true -2013-01-30T10:52:23 warning: (/Stage[main]/Swift::Proxy::S3token/Concat::Fragment[swift_s3token]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/28_swift_s3token]) Skipping because of failed dependencies -2013-01-30T10:52:23 notice: (/Stage[main]/Swift::Proxy::Catch_errors/Concat::Fragment[swift_catch_errors]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/24_swift_catch_errors]) Dependency Ring_container_device[192.168.0.2:6001] has failures: true -2013-01-30T10:52:23 notice: (/Stage[main]/Swift::Proxy::Catch_errors/Concat::Fragment[swift_catch_errors]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/24_swift_catch_errors]) Dependency Ring_account_device[192.168.0.2:6002] has failures: true -2013-01-30T10:52:23 notice: (/Stage[main]/Swift::Proxy::Catch_errors/Concat::Fragment[swift_catch_errors]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/24_swift_catch_errors]) Dependency Ring_object_device[192.168.0.2:6000] has failures: true -2013-01-30T10:52:23 warning: (/Stage[main]/Swift::Proxy::Catch_errors/Concat::Fragment[swift_catch_errors]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/24_swift_catch_errors]) Skipping because of failed dependencies -2013-01-30T10:52:23 notice: (/Stage[main]/Swift::Proxy::Healthcheck/Concat::Fragment[swift_healthcheck]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/25_swift_healthcheck]) Dependency Ring_container_device[192.168.0.2:6001] has failures: true -2013-01-30T10:52:23 notice: (/Stage[main]/Swift::Proxy::Healthcheck/Concat::Fragment[swift_healthcheck]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/25_swift_healthcheck]) Dependency Ring_account_device[192.168.0.2:6002] has failures: true -2013-01-30T10:52:23 notice: (/Stage[main]/Swift::Proxy::Healthcheck/Concat::Fragment[swift_healthcheck]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/25_swift_healthcheck]) Dependency Ring_object_device[192.168.0.2:6000] has failures: true -2013-01-30T10:52:23 warning: (/Stage[main]/Swift::Proxy::Healthcheck/Concat::Fragment[swift_healthcheck]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/25_swift_healthcheck]) Skipping because of failed dependencies -2013-01-30T10:52:23 notice: (/Stage[main]/Swift::Proxy::Cache/Concat::Fragment[swift_cache]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/23_swift_cache]) Dependency Ring_container_device[192.168.0.2:6001] has failures: true -2013-01-30T10:52:23 notice: (/Stage[main]/Swift::Proxy::Cache/Concat::Fragment[swift_cache]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/23_swift_cache]) Dependency Ring_account_device[192.168.0.2:6002] has failures: true -2013-01-30T10:52:23 notice: (/Stage[main]/Swift::Proxy::Cache/Concat::Fragment[swift_cache]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/23_swift_cache]) Dependency Ring_object_device[192.168.0.2:6000] has failures: true -2013-01-30T10:52:23 warning: (/Stage[main]/Swift::Proxy::Cache/Concat::Fragment[swift_cache]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/23_swift_cache]) Skipping because of failed dependencies -2013-01-30T10:52:23 notice: (/Stage[main]/Swift::Proxy::Keystone/Concat::Fragment[swift_keystone]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/79_swift_keystone]) Dependency Ring_container_device[192.168.0.2:6001] has failures: true -2013-01-30T10:52:23 notice: (/Stage[main]/Swift::Proxy::Keystone/Concat::Fragment[swift_keystone]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/79_swift_keystone]) Dependency Ring_account_device[192.168.0.2:6002] has failures: true -2013-01-30T10:52:23 notice: (/Stage[main]/Swift::Proxy::Keystone/Concat::Fragment[swift_keystone]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/79_swift_keystone]) Dependency Ring_object_device[192.168.0.2:6000] has failures: true -2013-01-30T10:52:23 warning: (/Stage[main]/Swift::Proxy::Keystone/Concat::Fragment[swift_keystone]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/79_swift_keystone]) Skipping because of failed dependencies -2013-01-30T10:52:23 notice: (/Stage[main]/Swift::Proxy::Ratelimit/Concat::Fragment[swift_ratelimit]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/26_swift_ratelimit]) Dependency Ring_container_device[192.168.0.2:6001] has failures: true -2013-01-30T10:52:23 notice: (/Stage[main]/Swift::Proxy::Ratelimit/Concat::Fragment[swift_ratelimit]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/26_swift_ratelimit]) Dependency Ring_account_device[192.168.0.2:6002] has failures: true -2013-01-30T10:52:23 notice: (/Stage[main]/Swift::Proxy::Ratelimit/Concat::Fragment[swift_ratelimit]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/26_swift_ratelimit]) Dependency Ring_object_device[192.168.0.2:6000] has failures: true -2013-01-30T10:52:23 warning: (/Stage[main]/Swift::Proxy::Ratelimit/Concat::Fragment[swift_ratelimit]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/26_swift_ratelimit]) Skipping because of failed dependencies -2013-01-30T10:52:23 notice: (/Stage[main]/Swift::Proxy::Swift3/Concat::Fragment[swift_swift3]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/27_swift_swift3]) Dependency Ring_container_device[192.168.0.2:6001] has failures: true -2013-01-30T10:52:23 notice: (/Stage[main]/Swift::Proxy::Swift3/Concat::Fragment[swift_swift3]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/27_swift_swift3]) Dependency Ring_account_device[192.168.0.2:6002] has failures: true -2013-01-30T10:52:23 notice: (/Stage[main]/Swift::Proxy::Swift3/Concat::Fragment[swift_swift3]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/27_swift_swift3]) Dependency Ring_object_device[192.168.0.2:6000] has failures: true -2013-01-30T10:52:23 warning: (/Stage[main]/Swift::Proxy::Swift3/Concat::Fragment[swift_swift3]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/27_swift_swift3]) Skipping because of failed dependencies -2013-01-30T10:52:23 notice: (/Stage[main]/Swift::Proxy::Authtoken/Keystone::Client::Authtoken[/etc/swift/proxy-server.conf]/Concat::Fragment[_etc_swift_proxy-server.conf_authtoken]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/80__etc_swift_proxy-server.conf_authtoken]) Dependency Ring_container_device[192.168.0.2:6001] has failures: true -2013-01-30T10:52:23 notice: (/Stage[main]/Swift::Proxy::Authtoken/Keystone::Client::Authtoken[/etc/swift/proxy-server.conf]/Concat::Fragment[_etc_swift_proxy-server.conf_authtoken]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/80__etc_swift_proxy-server.conf_authtoken]) Dependency Ring_account_device[192.168.0.2:6002] has failures: true -2013-01-30T10:52:23 notice: (/Stage[main]/Swift::Proxy::Authtoken/Keystone::Client::Authtoken[/etc/swift/proxy-server.conf]/Concat::Fragment[_etc_swift_proxy-server.conf_authtoken]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/80__etc_swift_proxy-server.conf_authtoken]) Dependency Ring_object_device[192.168.0.2:6000] has failures: true -2013-01-30T10:52:23 warning: (/Stage[main]/Swift::Proxy::Authtoken/Keystone::Client::Authtoken[/etc/swift/proxy-server.conf]/Concat::Fragment[_etc_swift_proxy-server.conf_authtoken]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/80__etc_swift_proxy-server.conf_authtoken]) Skipping because of failed dependencies -2013-01-30T10:52:23 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/Exec[concat_/etc/swift/proxy-server.conf]) Dependency Ring_account_device[192.168.0.2:6002] has failures: true -2013-01-30T10:52:23 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/Exec[concat_/etc/swift/proxy-server.conf]) Dependency Ring_object_device[192.168.0.2:6000] has failures: true -2013-01-30T10:52:23 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/Exec[concat_/etc/swift/proxy-server.conf]) Dependency Ring_container_device[192.168.0.2:6001] has failures: true -2013-01-30T10:52:23 warning: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/Exec[concat_/etc/swift/proxy-server.conf]) Skipping because of failed dependencies -2013-01-30T10:52:23 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/etc/swift/proxy-server.conf]) Dependency Ring_account_device[192.168.0.2:6002] has failures: true -2013-01-30T10:52:23 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/etc/swift/proxy-server.conf]) Dependency Ring_object_device[192.168.0.2:6000] has failures: true -2013-01-30T10:52:23 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/etc/swift/proxy-server.conf]) Dependency Ring_container_device[192.168.0.2:6001] has failures: true -2013-01-30T10:52:23 warning: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/etc/swift/proxy-server.conf]) Skipping because of failed dependencies -2013-01-30T10:52:23 notice: (/Stage[main]/Swift::Proxy/Service[swift-proxy]) Dependency Ring_account_device[192.168.0.2:6002] has failures: true -2013-01-30T10:52:23 notice: (/Stage[main]/Swift::Proxy/Service[swift-proxy]) Dependency Ring_object_device[192.168.0.2:6000] has failures: true -2013-01-30T10:52:23 notice: (/Stage[main]/Swift::Proxy/Service[swift-proxy]) Dependency Ring_container_device[192.168.0.2:6001] has failures: true -2013-01-30T10:52:23 warning: (/Stage[main]/Swift::Proxy/Service[swift-proxy]) Skipping because of failed dependencies -2013-01-30T10:52:23 notice: (/Stage[main]/Rabbitmq::Server/Package[qpid-cpp-server]/ensure) created -2013-01-30T10:54:24 notice: (/Stage[main]/Rabbitmq::Server/Package[rabbitmq-server]/ensure) created -2013-01-30T10:54:24 notice: (/Stage[main]/Rabbitmq::Server/Exec[rabbitmq_stop]/returns) Stopping rabbitmq-server: RabbitMQ is not running -2013-01-30T10:54:24 notice: (/Stage[main]/Rabbitmq::Server/Exec[rabbitmq_stop]/returns) rabbitmq-server. -2013-01-30T10:54:24 notice: (/Stage[main]/Rabbitmq::Server/Exec[rabbitmq_stop]/returns) executed successfully -2013-01-30T10:54:24 notice: (/Stage[main]/Rabbitmq::Server/File[erlang_cookie]/content) content changed '{md5}025d224a10b6a0babb8f5f7407f77a96' to '{md5}b28788594da393660db1e4f20d296c10' -2013-01-30T10:54:24 notice: (/Stage[main]/Rabbitmq::Server/File[rabbitmq.config]/ensure) defined content as '{md5}f22d1aa923c4727590fa559e8643fcf8' -2013-01-30T10:54:24 notice: (/Stage[main]/Rabbitmq::Server/File[rabbitmq-env.config]/ensure) defined content as '{md5}2980dac99b8f2195a50ef6e459ffedae' -2013-01-30T10:54:28 notice: (/Stage[main]/Rabbitmq::Service/Service[rabbitmq-server]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T10:54:36 notice: (/Stage[main]/Rabbitmq::Service/Service[rabbitmq-server]) Triggered 'refresh' from 1 events -2013-01-30T10:54:36 notice: (/Stage[main]/Rabbitmq::Server/Rabbitmq_user[guest]/ensure) removed -2013-01-30T10:54:37 notice: (/Stage[main]/Nova::Rabbitmq/Rabbitmq_user[nova]/ensure) created -2013-01-30T10:54:38 notice: (/Stage[main]/Nova::Rabbitmq/Rabbitmq_user_permissions[nova@/]/ensure) created -2013-01-30T10:54:38 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[glance-reg]/Haproxy::Listen[glance-reg]/Concat::Fragment[glance-reg-listen_block]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/89-glance-reg_glance-reg-listen_block]/ensure) created -2013-01-30T10:54:39 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6002]/Concat[/etc/swift/account-server.conf]/Exec[concat_/etc/swift/account-server.conf]/returns) executed successfully -2013-01-30T10:54:39 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6002]/Concat[/etc/swift/account-server.conf]/Exec[concat_/etc/swift/account-server.conf]) Triggered 'refresh' from 3 events -2013-01-30T10:54:39 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6002]/Concat[/etc/swift/account-server.conf]/File[/etc/swift/account-server.conf]/content) content changed '{md5}68d75de69955941c8fd8f40b0dbbb31b' to '{md5}58d15925aa4d741323ce5bfd41680fe2' -2013-01-30T10:54:39 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6002]/Concat[/etc/swift/account-server.conf]/File[/etc/swift/account-server.conf]/owner) owner changed 'root' to 'swift' -2013-01-30T10:54:39 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6002]/Concat[/etc/swift/account-server.conf]/File[/etc/swift/account-server.conf]/mode) mode changed '0660' to '0640' -2013-01-30T10:54:40 err: (/Service[swift-account-replicator]/ensure) change from stopped to running failed: Could not start Service[swift-account-replicator]: Execution of '/usr/bin/swift-init account-replicator start' returned 1: at /etc/puppet/modules/swift/manifests/storage/generic.pp:61 -2013-01-30T10:54:40 notice: (/Service[swift-account-replicator]) Triggered 'refresh' from 2 events -2013-01-30T10:54:41 notice: (/Stage[main]/Swift::Storage::Account/Swift::Storage::Generic[account]/Service[swift-account]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T10:54:42 notice: (/Stage[main]/Swift::Storage::Account/Swift::Storage::Generic[account]/Service[swift-account]) Triggered 'refresh' from 2 events -2013-01-30T10:54:43 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Exec[create_partition-2]/returns) 0+0 records in -2013-01-30T10:54:43 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Exec[create_partition-2]/returns) 0+0 records out -2013-01-30T10:54:43 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Exec[create_partition-2]/returns) 0 bytes (0 B) copied, 1.4652e-05 s, 0.0 kB/s -2013-01-30T10:54:43 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Exec[create_partition-2]/returns) executed successfully -2013-01-30T10:54:45 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Exec[mkfs-2]/returns) meta-data=/srv/loopback-device/2 isize=1024 agcount=4, agsize=65548 blks -2013-01-30T10:54:45 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Exec[mkfs-2]/returns) = sectsz=512 attr=2 -2013-01-30T10:54:45 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Exec[mkfs-2]/returns) data = bsize=4096 blocks=262189, imaxpct=25 -2013-01-30T10:54:45 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Exec[mkfs-2]/returns) = sunit=0 swidth=0 blks -2013-01-30T10:54:45 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Exec[mkfs-2]/returns) naming =version 2 bsize=4096 ascii-ci=0 -2013-01-30T10:54:45 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Exec[mkfs-2]/returns) log =internal log bsize=4096 blocks=2560, version=2 -2013-01-30T10:54:45 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Exec[mkfs-2]/returns) = sectsz=512 sunit=0 blks, lazy-count=1 -2013-01-30T10:54:45 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Exec[mkfs-2]/returns) realtime =none extsz=4096 blocks=0, rtextents=0 -2013-01-30T10:54:45 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Exec[mkfs-2]) Triggered 'refresh' from 1 events -2013-01-30T10:54:45 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Swift::Storage::Mount[2]/File[/srv/node/2]/ensure) created -2013-01-30T10:54:45 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Swift::Storage::Mount[2]/Mount[/srv/node/2]/ensure) defined 'ensure' as 'defined' -2013-01-30T10:54:45 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Swift::Storage::Mount[2]/Mount[/srv/node/2]) Triggered 'refresh' from 2 events -2013-01-30T10:54:45 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Swift::Storage::Mount[2]/Exec[mount_2]/returns) executed successfully -2013-01-30T10:54:45 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Swift::Storage::Mount[2]/Exec[mount_2]) Triggered 'refresh' from 1 events -2013-01-30T10:54:45 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Swift::Storage::Mount[2]/Exec[fix_mount_permissions_2]) Triggered 'refresh' from 3 events -2013-01-30T10:54:45 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6002]/Rsync::Server::Module[account]/File[/etc/rsync.d/frag-account]/ensure) defined content as '{md5}5c536b07e578ed18d4c7eedd2d76a225' -2013-01-30T10:54:45 notice: (/Stage[main]/Rsync::Server/Exec[compile fragments]) Dependency Ring_container_device[192.168.0.2:6001] has failures: true -2013-01-30T10:54:45 notice: (/Stage[main]/Rsync::Server/Exec[compile fragments]) Dependency Ring_account_device[192.168.0.2:6002] has failures: true -2013-01-30T10:54:45 notice: (/Stage[main]/Rsync::Server/Exec[compile fragments]) Dependency Ring_object_device[192.168.0.2:6000] has failures: true -2013-01-30T10:54:45 warning: (/Stage[main]/Rsync::Server/Exec[compile fragments]) Skipping because of failed dependencies -2013-01-30T10:54:45 notice: (/Stage[main]/Rsync::Server/Exec[compile fragments]) Triggered 'refresh' from 4 events -2013-01-30T10:54:45 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[horizon]/Haproxy::Balancermember[horizon]/Concat::Fragment[horizon_balancermember_horizon]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/15-horizon_horizon_horizon_balancermember_horizon]/ensure) created -2013-01-30T10:54:46 notice: (/Stage[main]/Haproxy/Concat[/etc/haproxy/haproxy.cfg]/Exec[concat_/etc/haproxy/haproxy.cfg]/returns) executed successfully -2013-01-30T10:54:46 notice: (/Stage[main]/Haproxy/Concat[/etc/haproxy/haproxy.cfg]/Exec[concat_/etc/haproxy/haproxy.cfg]) Triggered 'refresh' from 26 events -2013-01-30T10:54:46 notice: (/Stage[main]/Haproxy/Concat[/etc/haproxy/haproxy.cfg]/File[/etc/haproxy/haproxy.cfg]/content) content changed '{md5}1f337186b0e1ba5ee82760cb437fb810' to '{md5}fdf25f95cf3036f7752f4a95de32a2ad' -2013-01-30T10:54:46 notice: (/Stage[main]/Haproxy/Service[haproxy]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T10:54:46 notice: (/Stage[main]/Haproxy/Service[haproxy]) Triggered 'refresh' from 1 events -2013-01-30T10:54:46 notice: (/Stage[main]/Galera/File[/etc/mysql]/ensure) created -2013-01-30T10:54:47 notice: (/Stage[main]/Galera/File[/etc/my.cnf]/ensure) defined content as '{md5}9c703ee12b3b1cef32501cdeeb24feef' -2013-01-30T10:54:50 notice: (/Stage[main]/Galera/Package[openssl098e]/ensure) created -2013-01-30T10:54:54 notice: (/Stage[main]/Galera/Package[galera]/ensure) created -2013-01-30T10:55:02 notice: (/Stage[main]/Galera/Package[MySQL-client]/ensure) created -2013-01-30T10:55:02 notice: (/Stage[main]/Galera/File[/tmp/wsrep-init-file]/ensure) created -2013-01-30T10:55:02 notice: (/Stage[main]/Galera/File[/etc/mysql/conf.d]/ensure) created -2013-01-30T10:55:02 notice: (/Stage[main]/Galera/File[/etc/mysql/conf.d/wsrep.cnf]/ensure) created -2013-01-30T10:55:27 notice: (/Stage[main]/Galera/Package[MySQL-server]/ensure) created -2013-01-30T10:55:28 notice: (/Stage[main]/Galera/Exec[set-mysql-password]) Triggered 'refresh' from 2 events -2013-01-30T10:55:43 notice: (/Stage[main]/Galera/Exec[wait-initial-sync]) Triggered 'refresh' from 1 events -2013-01-30T10:55:59 notice: (/Stage[main]/Galera/Exec[kill-initial-mysql]/returns) mysqld_safe: no process killed -2013-01-30T10:55:59 notice: (/Stage[main]/Galera/Exec[kill-initial-mysql]) Triggered 'refresh' from 1 events -2013-01-30T10:55:59 notice: (/Stage[main]/Galera/Exec[rm-init-file]/returns) executed successfully -2013-01-30T10:56:32 notice: (/Stage[main]/Galera/Service[mysql-galera]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T10:56:32 notice: (/Stage[main]/Galera/Service[mysql-galera]) Triggered 'refresh' from 1 events -2013-01-30T10:56:47 notice: (/Stage[main]/Galera/Exec[wait-for-synced-state]/returns) executed successfully -2013-01-30T10:56:48 notice: (/Stage[main]/Openstack::Controller_ha/Exec[wait-for-haproxy-mysql-backend]/returns) executed successfully -2013-01-30T10:56:48 notice: (/Stage[main]/Glance::Db::Mysql/Mysql::Db[glance]/Database[glance]/ensure) created -2013-01-30T10:56:48 notice: (/Stage[main]/Nova::Db::Mysql/Mysql::Db[nova]/Database[nova]/ensure) created -2013-01-30T10:56:48 notice: (/Stage[main]/Nova::Db::Mysql/Nova::Db::Mysql::Host_access[]/Database_user[nova@]/ensure) created -2013-01-30T10:56:48 notice: (/Stage[main]/Nova::Db::Mysql/Mysql::Db[nova]/Database_user[nova@127.0.0.1]/ensure) created -2013-01-30T10:56:49 notice: (/Stage[main]/Nova::Db::Mysql/Nova::Db::Mysql::Host_access[]/Database_grant[nova@/nova]/privileges) privileges changed '' to 'all' -2013-01-30T10:56:49 notice: (/Stage[main]/Nova::Db::Mysql/Nova::Db::Mysql::Host_access[slave-1]/Database_user[nova@slave-1]/ensure) created -2013-01-30T10:56:49 notice: (/Stage[main]/Nova::Db::Mysql/Nova::Db::Mysql::Host_access[slave-1]/Database_grant[nova@slave-1/nova]/privileges) privileges changed '' to 'all' -2013-01-30T10:56:50 notice: (/Stage[main]/Glance::Db::Mysql/Glance::Db::Mysql::Host_access[slave-1]/Database_user[glance@slave-1]/ensure) created -2013-01-30T10:56:50 notice: (/Stage[main]/Glance::Db::Mysql/Glance::Db::Mysql::Host_access[slave-1]/Database_grant[glance@slave-1/glance]/privileges) privileges changed '' to 'all' -2013-01-30T10:57:05 notice: (/Stage[main]/Nova::Db::Mysql/Mysql::Db[nova]/Database_grant[nova@127.0.0.1/nova]/privileges) privileges changed '' to 'all' -2013-01-30T10:57:05 notice: (/Stage[main]/Nova::Network::Vlan/Nova_config[DEFAULT/network_manager]/value) value changed 'nova.network.manager.FlatDHCPManager' to 'nova.network.manager.VlanManager' -2013-01-30T10:57:05 notice: (/Stage[main]/Nova::Network/Nova_config[DEFAULT/floating_range]/ensure) created -2013-01-30T10:57:05 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_hosts]/ensure) created -2013-01-30T10:57:05 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_volumes]/ensure) created -2013-01-30T10:57:05 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/osapi_compute_listen]/ensure) created -2013-01-30T10:57:05 notice: (/Stage[main]/Openstack::Controller/Nova_config[DEFAULT/memcached_servers]/ensure) created -2013-01-30T10:57:05 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/ec2_listen]/ensure) created -2013-01-30T10:57:05 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/admin_password]/value) value changed '%SERVICE_PASSWORD%' to 'nova' -2013-01-30T10:57:05 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_max_injected_file_content_bytes]/ensure) created -2013-01-30T10:57:05 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/admin_user]/value) value changed '%SERVICE_USER%' to 'nova' -2013-01-30T10:57:05 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/glance_api_servers]/ensure) created -2013-01-30T10:57:06 notice: (/Stage[main]/Nova::Vncproxy/Nova_config[DEFAULT/novncproxy_host]/ensure) created -2013-01-30T10:57:06 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_userid]/ensure) created -2013-01-30T10:57:06 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_ha_queues]/ensure) created -2013-01-30T10:57:06 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_password]/ensure) created -2013-01-30T10:57:06 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/verbose]/ensure) created -2013-01-30T10:57:06 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_cores]/ensure) created -2013-01-30T10:57:08 notice: (/Stage[main]/Nova::Consoleauth/Nova::Generic_service[consoleauth]/Package[nova-consoleauth]/ensure) created -2013-01-30T10:57:08 notice: (/Stage[main]/Nova::Api/Nova_config[DEFAULT/enabled_apis]/ensure) created -2013-01-30T10:57:08 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/sql_connection]/value) value changed 'mysql://nova:nova@localhost/nova' to 'mysql://nova:nova@192.168.0.6/nova' -2013-01-30T10:57:08 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_virtual_host]/ensure) created -2013-01-30T10:57:08 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/image_service]/ensure) created -2013-01-30T10:57:08 notice: (/Stage[main]/Nova::Api/Nova_config[DEFAULT/volume_api_class]/ensure) created -2013-01-30T10:57:08 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_max_injected_files]/ensure) created -2013-01-30T10:57:08 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/auth_host]/value) value changed '127.0.0.1' to '192.168.0.6' -2013-01-30T10:57:08 notice: (/Stage[main]/Nova::Vncproxy/Nova_config[DEFAULT/novncproxy_port]/ensure) created -2013-01-30T10:57:08 notice: (/Stage[main]/Nova::Network::Vlan/Nova_config[DEFAULT/force_dhcp_release]/value) value changed 'True' to 'true' -2013-01-30T10:57:08 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_port]/ensure) created -2013-01-30T10:57:48 notice: (/Stage[main]/Nova::Vncproxy/Nova::Generic_service[vncproxy]/Package[nova-vncproxy]/ensure) created -2013-01-30T10:57:48 notice: (/Stage[main]/Nova::Network::Vlan/Nova_config[DEFAULT/vlan_start]/ensure) created -2013-01-30T10:57:49 notice: (/Stage[main]/Nova/User[nova]/shell) shell changed '/sbin/nologin' to '/bin/bash' -2013-01-30T10:57:49 notice: (/Stage[main]/Nova/File[/var/log/nova]/group) group changed 'root' to 'nova' -2013-01-30T10:57:49 notice: (/Stage[main]/Nova/File[/var/log/nova]/mode) mode changed '0755' to '0751' -2013-01-30T10:57:49 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_max_injected_file_path_bytes]/ensure) created -2013-01-30T10:57:49 notice: (/Stage[main]/Nova::Api/Nova_config[DEFAULT/api_paste_config]/ensure) created -2013-01-30T10:57:49 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_floating_ips]/ensure) created -2013-01-30T10:57:49 notice: (/Stage[main]/Openstack::Nova::Controller/Nova_config[DEFAULT/multi_host]/ensure) created -2013-01-30T10:57:49 notice: (/Stage[main]/Nova::Network::Vlan/Nova_config[DEFAULT/public_interface]/ensure) created -2013-01-30T10:57:49 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/service_down_time]/ensure) created -2013-01-30T10:57:49 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/admin_tenant_name]/value) value changed '%SERVICE_TENANT_NAME%' to 'services' -2013-01-30T10:57:49 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_gigabytes]/ensure) created -2013-01-30T10:57:49 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_instances]/ensure) created -2013-01-30T10:57:49 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/osapi_volume_listen]/ensure) created -2013-01-30T10:57:49 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/signing_dir]/ensure) created -2013-01-30T10:57:49 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/metadata_listen]/ensure) created -2013-01-30T10:57:49 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/auth_strategy]/ensure) created -2013-01-30T10:57:49 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_metadata_items]/ensure) created -2013-01-30T10:57:49 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rpc_backend]/value) value changed 'nova.openstack.common.rpc.impl_qpid' to 'nova.rpc.impl_kombu' -2013-01-30T10:57:49 notice: (/Stage[main]/Nova::Network::Vlan/Nova_config[DEFAULT/fixed_range]/ensure) created -2013-01-30T10:57:49 notice: (/Stage[main]/Nova::Network::Vlan/Nova_config[DEFAULT/dhcp_domain]/ensure) created -2013-01-30T10:57:49 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/allow_resize_to_same_host]/ensure) created -2013-01-30T10:57:49 notice: (/Stage[main]/Glance::Db::Mysql/Glance::Db::Mysql::Host_access[]/Database_user[glance@]/ensure) created -2013-01-30T10:57:51 notice: (/Stage[main]/Glance::Db::Mysql/Glance::Db::Mysql::Host_access[]/Database_grant[glance@/glance]/privileges) privileges changed '' to 'all' -2013-01-30T10:57:51 notice: (/Stage[main]/Nova::Network::Vlan/Nova_config[DEFAULT/vlan_interface]/ensure) created -2013-01-30T10:57:51 notice: (/Stage[main]/Nova/File[/etc/nova/nova.conf]/owner) owner changed 'root' to 'nova' -2013-01-30T10:57:52 notice: (/Stage[main]/Keystone::Db::Mysql/Mysql::Db[keystone]/Database[keystone]/ensure) created -2013-01-30T10:57:52 notice: (/Stage[main]/Keystone::Db::Mysql/Mysql::Db[keystone]/Database_user[keystone@127.0.0.1]/ensure) created -2013-01-30T10:57:52 notice: (/Stage[main]/Keystone::Db::Mysql/Keystone::Db::Mysql::Host_access[]/Database_user[keystone@]/ensure) created -2013-01-30T10:57:52 notice: (/Stage[main]/Keystone::Db::Mysql/Mysql::Db[keystone]/Database_grant[keystone@127.0.0.1/keystone]/privileges) privileges changed '' to 'all' -2013-01-30T10:57:53 notice: (/Stage[main]/Keystone::Db::Mysql/Keystone::Db::Mysql::Host_access[]/Database_grant[keystone@/keystone]/privileges) privileges changed '' to 'all' -2013-01-30T10:57:53 notice: (/Stage[main]/Keystone::Db::Mysql/Keystone::Db::Mysql::Host_access[slave-1]/Database_user[keystone@slave-1]/ensure) created -2013-01-30T10:57:53 notice: (/Stage[main]/Keystone::Db::Mysql/Keystone::Db::Mysql::Host_access[slave-1]/Database_grant[keystone@slave-1/keystone]/privileges) privileges changed '' to 'all' -2013-01-30T10:57:57 notice: (/Stage[main]/Keystone/Package[keystone]/ensure) created -2013-01-30T10:57:58 notice: (/Stage[main]/Keystone/Keystone_config[sql/connection]/value) value changed 'mysql://keystone:keystone@localhost/keystone' to 'mysql://keystone:nova@192.168.0.6/keystone' -2013-01-30T10:57:58 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/public_port]/ensure) created -2013-01-30T10:57:58 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/compute_port]/ensure) created -2013-01-30T10:57:58 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/debug]/ensure) created -2013-01-30T10:57:58 notice: (/Stage[main]/Keystone/Keystone_config[policy/driver]/ensure) created -2013-01-30T10:57:58 notice: (/Stage[main]/Keystone/Keystone_config[sql/idle_timeout]/ensure) created -2013-01-30T10:57:58 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/admin_token]/ensure) created -2013-01-30T10:57:58 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/bind_host]/ensure) created -2013-01-30T10:57:58 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/admin_port]/ensure) created -2013-01-30T10:57:58 notice: (/Stage[main]/Keystone/File[/etc/keystone]/owner) owner changed 'root' to 'keystone' -2013-01-30T10:57:58 notice: (/Stage[main]/Keystone/File[/etc/keystone]/group) group changed 'root' to 'keystone' -2013-01-30T10:57:58 notice: (/Stage[main]/Glance::Db::Mysql/Mysql::Db[glance]/Database_user[glance@127.0.0.1]/ensure) created -2013-01-30T10:57:58 notice: (/Stage[main]/Glance::Db::Mysql/Mysql::Db[glance]/Database_grant[glance@127.0.0.1/glance]/privileges) privileges changed '' to 'all' -2013-01-30T10:57:59 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[keystone_authtoken/signing_dir]/ensure) created -2013-01-30T10:57:59 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[keystone_authtoken/auth_host]/value) value changed '127.0.0.1' to '192.168.0.6' -2013-01-30T10:57:59 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[DEFAULT/bind_host]/value) value changed '0.0.0.0' to '192.168.0.2' -2013-01-30T10:57:59 notice: (/Stage[main]/Glance::Registry/File[/etc/glance/glance-registry.conf]/owner) owner changed 'root' to 'glance' -2013-01-30T10:57:59 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[keystone_authtoken/admin_password]/value) value changed '%SERVICE_PASSWORD%' to 'nova' -2013-01-30T10:57:59 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[paste_deploy/flavor]/ensure) created -2013-01-30T10:57:59 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[keystone_authtoken/signing_dirname]/ensure) created -2013-01-30T10:57:59 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[DEFAULT/sql_connection]/value) value changed 'mysql://glance:glance@localhost/glance' to 'mysql://glance:nova@192.168.0.6/glance' -2013-01-30T10:57:59 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[DEFAULT/debug]/value) value changed 'False' to 'true' -2013-01-30T10:57:59 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[DEFAULT/verbose]/value) value changed 'True' to 'true' -2013-01-30T10:57:59 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[keystone_authtoken/admin_tenant_name]/value) value changed '%SERVICE_TENANT_NAME%' to 'services' -2013-01-30T10:57:59 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[keystone_authtoken/admin_user]/value) value changed '%SERVICE_USER%' to 'glance' -2013-01-30T10:57:59 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6000]/Concat[/etc/swift/object-server.conf]/File[/var/lib/puppet/concat/_etc_swift_object-server.conf/fragments.concat]/ensure) created -2013-01-30T10:57:59 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6000]/Concat[/etc/swift/object-server.conf]/Exec[concat_/etc/swift/object-server.conf]/returns) executed successfully -2013-01-30T10:57:59 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6000]/Concat[/etc/swift/object-server.conf]/Exec[concat_/etc/swift/object-server.conf]) Triggered 'refresh' from 3 events -2013-01-30T10:57:59 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6000]/Concat[/etc/swift/object-server.conf]/File[/etc/swift/object-server.conf]/content) content changed '{md5}bd9ae72e0cc70c89655071d96b32b172' to '{md5}515231e92e97604524c99a0610532d32' -2013-01-30T10:57:59 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6000]/Concat[/etc/swift/object-server.conf]/File[/etc/swift/object-server.conf]/owner) owner changed 'root' to 'swift' -2013-01-30T10:57:59 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6000]/Concat[/etc/swift/object-server.conf]/File[/etc/swift/object-server.conf]/mode) mode changed '0660' to '0640' -2013-01-30T10:57:59 notice: (/Stage[main]/Swift::Storage::Object/Swift::Storage::Generic[object]/Service[swift-object]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T10:58:00 notice: (/Stage[main]/Swift::Storage::Object/Swift::Storage::Generic[object]/Service[swift-object]) Triggered 'refresh' from 2 events -2013-01-30T10:58:00 err: (/Service[swift-object-replicator]/ensure) change from stopped to running failed: Could not start Service[swift-object-replicator]: Execution of '/usr/bin/swift-init object-replicator start' returned 1: at /etc/puppet/modules/swift/manifests/storage/generic.pp:61 -2013-01-30T10:58:00 notice: (/Service[swift-object-replicator]) Triggered 'refresh' from 2 events -2013-01-30T10:58:00 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/verbose]/ensure) created -2013-01-30T10:58:03 notice: (/Stage[main]/Keystone/Exec[keystone-manage db_sync]) Triggered 'refresh' from 12 events -2013-01-30T10:58:05 notice: (/Stage[main]/Keystone/Service[keystone]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T10:58:06 notice: (/Stage[main]/Keystone/Service[keystone]) Triggered 'refresh' from 13 events -2013-01-30T10:58:18 notice: (/Stage[main]/Nova::Keystone::Auth/Keystone_service[nova_volume]/ensure) created -2013-01-30T10:58:19 notice: (/Stage[main]/Keystone::Roles::Admin/Keystone_tenant[admin]/ensure) created -2013-01-30T10:58:19 notice: (/Stage[main]/Keystone::Roles::Admin/Keystone_role[Member]/ensure) created -2013-01-30T10:58:20 notice: (/Stage[main]/Nova::Keystone::Auth/Keystone_service[nova_ec2]/ensure) created -2013-01-30T10:58:21 notice: (/Stage[main]/Nova::Keystone::Auth/Keystone_endpoint[nova_volume]/ensure) created -2013-01-30T10:58:21 notice: (/Stage[main]/Nova::Keystone::Auth/Keystone_endpoint[nova_ec2]/ensure) created -2013-01-30T10:58:22 notice: (/Stage[main]/Keystone::Roles::Admin/Keystone_tenant[services]/ensure) created -2013-01-30T10:58:23 notice: (/Stage[main]/Nova::Keystone::Auth/Keystone_user[nova]/ensure) created -2013-01-30T10:58:23 notice: (/Stage[main]/Glance::Keystone::Auth/Keystone_user[glance]/ensure) created -2013-01-30T10:58:24 notice: (/Stage[main]/Keystone::Roles::Admin/Keystone_role[admin]/ensure) created -2013-01-30T10:58:27 notice: (/Stage[main]/Glance::Keystone::Auth/Keystone_user_role[glance@services]/ensure) created -2013-01-30T10:58:28 notice: (/Stage[main]/Keystone::Endpoint/Keystone_service[keystone]/ensure) created -2013-01-30T10:58:28 notice: (/Stage[main]/Keystone::Endpoint/Keystone_endpoint[keystone]/ensure) created -2013-01-30T10:58:28 notice: (/Stage[main]/Glance::Keystone::Auth/Keystone_service[glance]/ensure) created -2013-01-30T10:58:29 notice: (/Stage[main]/Glance::Keystone::Auth/Keystone_endpoint[glance]/ensure) created -2013-01-30T10:58:31 notice: (/Stage[main]/Nova::Keystone::Auth/Keystone_user_role[nova@services]/ensure) created -2013-01-30T10:58:31 notice: (/Stage[main]/Keystone::Roles::Admin/Keystone_user[admin]/ensure) created -2013-01-30T10:58:33 notice: (/Stage[main]/Keystone::Roles::Admin/Keystone_user_role[admin@admin]/ensure) created -2013-01-30T10:58:33 notice: (/Stage[main]/Swift::Keystone::Auth/Keystone_service[swift_s3]/ensure) created -2013-01-30T10:58:34 notice: (/Stage[main]/Swift::Keystone::Auth/Keystone_endpoint[swift_s3]/ensure) created -2013-01-30T10:58:34 notice: (/Stage[main]/Nova::Keystone::Auth/Keystone_service[nova]/ensure) created -2013-01-30T10:58:36 notice: (/Stage[main]/Nova::Keystone::Auth/Keystone_endpoint[nova]/ensure) created -2013-01-30T10:58:36 notice: (/Stage[main]/Swift::Keystone::Auth/Keystone_service[swift]/ensure) created -2013-01-30T10:58:37 notice: (/Stage[main]/Swift::Keystone::Auth/Keystone_endpoint[swift]/ensure) created -2013-01-30T10:58:38 notice: (/Stage[main]/Swift::Keystone::Auth/Keystone_user[swift]/ensure) created -2013-01-30T10:58:41 notice: (/Stage[main]/Swift::Keystone::Auth/Keystone_user_role[swift@services]/ensure) created -2013-01-30T10:58:41 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/auth_url]/ensure) created -2013-01-30T10:58:48 notice: (/Stage[main]/Glance::Registry/Exec[glance-manage db_sync]) Triggered 'refresh' from 39 events -2013-01-30T10:58:49 notice: (/Stage[main]/Glance::Registry/Service[glance-registry]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T10:58:49 notice: (/Stage[main]/Glance::Registry/Service[glance-registry]) Triggered 'refresh' from 13 events -2013-01-30T10:58:51 notice: (/Stage[main]/Glance::Api/Service[glance-api]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T10:58:51 notice: (/Stage[main]/Glance::Api/Service[glance-api]) Triggered 'refresh' from 29 events -2013-01-30T10:58:51 notice: (/Stage[main]/Openstack::Img::Cirros/Package[cirros-testvm]) Dependency Ring_object_device[192.168.0.2:6000] has failures: true -2013-01-30T10:58:51 notice: (/Stage[main]/Openstack::Img::Cirros/Package[cirros-testvm]) Dependency Ring_container_device[192.168.0.2:6001] has failures: true -2013-01-30T10:58:51 notice: (/Stage[main]/Openstack::Img::Cirros/Package[cirros-testvm]) Dependency Ring_account_device[192.168.0.2:6002] has failures: true -2013-01-30T10:58:51 warning: (/Stage[main]/Openstack::Img::Cirros/Package[cirros-testvm]) Skipping because of failed dependencies -2013-01-30T10:58:51 notice: (/Stage[main]/Openstack::Img::Cirros/Exec[upload-img]) Dependency Ring_object_device[192.168.0.2:6000] has failures: true -2013-01-30T10:58:51 notice: (/Stage[main]/Openstack::Img::Cirros/Exec[upload-img]) Dependency Ring_container_device[192.168.0.2:6001] has failures: true -2013-01-30T10:58:51 notice: (/Stage[main]/Openstack::Img::Cirros/Exec[upload-img]) Dependency Ring_account_device[192.168.0.2:6002] has failures: true -2013-01-30T10:58:51 warning: (/Stage[main]/Openstack::Img::Cirros/Exec[upload-img]) Skipping because of failed dependencies -2013-01-30T10:58:52 notice: (/Stage[main]/Nova/Exec[post-nova_config]/returns) Nova config has changed -2013-01-30T10:58:52 notice: (/Stage[main]/Nova/Exec[post-nova_config]) Triggered 'refresh' from 94 events -2013-01-30T10:59:33 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]/returns) 2013-01-30 10:58:53 DEBUG nova.utils [-] backend from (pid=7520) __get_backend /usr/lib/python2.6/site-packages/nova/utils.py:494 -2013-01-30T10:59:33 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]/returns) executed successfully -2013-01-30T10:59:34 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]/returns) 2013-01-30 10:59:33 DEBUG nova.utils [-] backend from (pid=7587) __get_backend /usr/lib/python2.6/site-packages/nova/utils.py:494 -2013-01-30T10:59:34 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]) Triggered 'refresh' from 2 events -2013-01-30T10:59:34 notice: (/Stage[main]/Nova::Cert/Nova::Generic_service[cert]/Service[nova-cert]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T10:59:34 notice: (/Stage[main]/Nova::Cert/Nova::Generic_service[cert]/Service[nova-cert]) Triggered 'refresh' from 3 events -2013-01-30T10:59:35 notice: (/Stage[main]/Nova::Vncproxy/Nova::Generic_service[vncproxy]/Service[nova-vncproxy]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T10:59:36 notice: (/Stage[main]/Nova::Vncproxy/Nova::Generic_service[vncproxy]/Service[nova-vncproxy]) Triggered 'refresh' from 4 events -2013-01-30T10:59:36 notice: (/Stage[main]/Nova::Objectstore/Nova::Generic_service[objectstore]/Service[nova-objectstore]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T10:59:37 notice: (/Stage[main]/Nova::Objectstore/Nova::Generic_service[objectstore]/Service[nova-objectstore]) Triggered 'refresh' from 3 events -2013-01-30T10:59:41 notice: (/Stage[main]/Nova::Network/Nova::Manage::Floating[nova-vm-floating]/Nova_floating[nova-vm-floating]/ensure) created -2013-01-30T10:59:41 notice: (/Stage[main]/Nova::Consoleauth/Nova::Generic_service[consoleauth]/Service[nova-consoleauth]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T10:59:42 notice: (/Stage[main]/Nova::Consoleauth/Nova::Generic_service[consoleauth]/Service[nova-consoleauth]) Triggered 'refresh' from 4 events -2013-01-30T10:59:42 notice: (/Stage[main]/Nova::Api/Nova::Generic_service[api]/Service[nova-api]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T10:59:43 notice: (/Stage[main]/Nova::Api/Nova::Generic_service[api]/Service[nova-api]) Triggered 'refresh' from 51 events -2013-01-30T10:59:43 notice: (/Stage[main]/Nova::Scheduler/Nova::Generic_service[scheduler]/Service[nova-scheduler]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T10:59:44 notice: (/Stage[main]/Nova::Scheduler/Nova::Generic_service[scheduler]/Service[nova-scheduler]) Triggered 'refresh' from 3 events -2013-01-30T10:59:50 notice: (/Stage[main]/Nova::Network/Nova::Manage::Network[nova-vm-net]/Nova_network[nova-vm-net]/ensure) created -2013-01-30T10:59:50 notice: Finished catalog run in 731.03 seconds -SEPARATOR -2013-01-30T11:28:15 notice: Reopening log files -2013-01-30T11:29:52 notice: (/Stage[main]/Openstack::Firewall/Exec[startup-firewall]/returns) executed successfully -2013-01-30T11:29:52 notice: (/Stage[main]/Openstack::Controller_ha/Exec[up-private-interface]/returns) executed successfully -2013-01-30T11:29:52 notice: (/Stage[main]/Openstack::Controller_ha/Exec[up-internal-interface]/returns) executed successfully -2013-01-30T11:29:53 notice: (/Stage[main]/Openstack::Controller_ha/Exec[up-public-interface]/returns) executed successfully -2013-01-30T11:29:54 notice: (Ring_object_device[192.168.0.4:6000](provider=swift_ring_builder)) node name: 192.168.0.4:6000 -2013-01-30T11:29:54 notice: (Ring_object_device[192.168.0.4:6000](provider=swift_ring_builder)) available devs: [] -2013-01-30T11:29:54 err: (/Stage[main]/Openstack::Swift::Proxy/Ring_object_device[192.168.0.4:6000]) Could not evaluate: Device not found check device on 192.168.0.4:6000 -2013-01-30T11:29:54 notice: (Ring_container_device[192.168.0.2:6001](provider=swift_ring_builder)) node name: 192.168.0.2:6001 -2013-01-30T11:29:54 notice: (Ring_container_device[192.168.0.2:6001](provider=swift_ring_builder)) available devs: ["1", "2"] -2013-01-30T11:29:55 notice: (Ring_container_device[192.168.0.2:6001](provider=swift_ring_builder)) *** create device: 2 -2013-01-30T11:29:55 notice: (Ring_container_device[192.168.0.2:6001](provider=swift_ring_builder)) *** create device: 1 -2013-01-30T11:29:55 notice: (/Stage[main]/Swift::Storage::Container/Ring_container_device[192.168.0.2:6001]/ensure) created -2013-01-30T11:29:55 notice: (Ring_container_device[192.168.0.3:6001](provider=swift_ring_builder)) node name: 192.168.0.3:6001 -2013-01-30T11:29:55 notice: (Ring_container_device[192.168.0.3:6001](provider=swift_ring_builder)) available devs: [] -2013-01-30T11:29:55 err: (/Stage[main]/Openstack::Swift::Proxy/Ring_container_device[192.168.0.3:6001]) Could not evaluate: Device not found check device on 192.168.0.3:6001 -2013-01-30T11:29:55 notice: (Ring_object_device[192.168.0.3:6000](provider=swift_ring_builder)) node name: 192.168.0.3:6000 -2013-01-30T11:29:55 notice: (Ring_object_device[192.168.0.3:6000](provider=swift_ring_builder)) available devs: [] -2013-01-30T11:29:55 err: (/Stage[main]/Openstack::Swift::Proxy/Ring_object_device[192.168.0.3:6000]) Could not evaluate: Device not found check device on 192.168.0.3:6000 -2013-01-30T11:29:55 notice: (Ring_object_device[192.168.0.2:6000](provider=swift_ring_builder)) node name: 192.168.0.2:6000 -2013-01-30T11:29:55 notice: (Ring_object_device[192.168.0.2:6000](provider=swift_ring_builder)) available devs: ["1", "2"] -2013-01-30T11:29:56 notice: (Ring_object_device[192.168.0.2:6000](provider=swift_ring_builder)) *** create device: 2 -2013-01-30T11:29:56 notice: (Ring_object_device[192.168.0.2:6000](provider=swift_ring_builder)) *** create device: 1 -2013-01-30T11:29:56 notice: (/Stage[main]/Swift::Storage::Object/Ring_object_device[192.168.0.2:6000]/ensure) created -2013-01-30T11:29:56 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[object]/Exec[hours_passed_object]) Dependency Ring_object_device[192.168.0.4:6000] has failures: true -2013-01-30T11:29:56 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[object]/Exec[hours_passed_object]) Dependency Ring_object_device[192.168.0.3:6000] has failures: true -2013-01-30T11:29:56 warning: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[object]/Exec[hours_passed_object]) Skipping because of failed dependencies -2013-01-30T11:29:57 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[object]/Exec[hours_passed_object]/returns) Traceback (most recent call last): -2013-01-30T11:29:57 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[object]/Exec[hours_passed_object]/returns) File "/usr/bin/swift-ring-builder", line 730, in -2013-01-30T11:29:57 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[object]/Exec[hours_passed_object]/returns) Commands.__dict__.get(command, Commands.unknown)() -2013-01-30T11:29:57 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[object]/Exec[hours_passed_object]/returns) File "/usr/bin/swift-ring-builder", line 651, in pretend_min_part_hours_passed -2013-01-30T11:29:57 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[object]/Exec[hours_passed_object]/returns) builder.pretend_min_part_hours_passed() -2013-01-30T11:29:57 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[object]/Exec[hours_passed_object]/returns) File "/usr/lib/python2.6/site-packages/swift/common/ring/builder.py", line 408, in pretend_min_part_hours_passed -2013-01-30T11:29:57 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[object]/Exec[hours_passed_object]/returns) self._last_part_moves[part] = 0xff -2013-01-30T11:29:57 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[object]/Exec[hours_passed_object]/returns) TypeError: 'NoneType' object does not support item assignment -2013-01-30T11:29:57 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[object]/Exec[hours_passed_object]) Triggered 'refresh' from 1 events -2013-01-30T11:29:57 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[object]/Exec[rebalance_object]) Dependency Ring_object_device[192.168.0.4:6000] has failures: true -2013-01-30T11:29:57 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[object]/Exec[rebalance_object]) Dependency Ring_object_device[192.168.0.3:6000] has failures: true -2013-01-30T11:29:57 warning: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[object]/Exec[rebalance_object]) Skipping because of failed dependencies -2013-01-30T11:30:54 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[object]/Exec[rebalance_object]/returns) Reassigned 262144 (100.00%) partitions. Balance is now 0.00. -2013-01-30T11:30:54 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[object]/Exec[rebalance_object]) Triggered 'refresh' from 1 events -2013-01-30T11:30:55 notice: (Ring_account_device[192.168.0.4:6002](provider=swift_ring_builder)) node name: 192.168.0.4:6002 -2013-01-30T11:30:55 notice: (Ring_account_device[192.168.0.4:6002](provider=swift_ring_builder)) available devs: [] -2013-01-30T11:30:55 err: (/Stage[main]/Openstack::Swift::Proxy/Ring_account_device[192.168.0.4:6002]) Could not evaluate: Device not found check device on 192.168.0.4:6002 -2013-01-30T11:30:55 notice: (Ring_account_device[192.168.0.3:6002](provider=swift_ring_builder)) node name: 192.168.0.3:6002 -2013-01-30T11:30:55 notice: (Ring_account_device[192.168.0.3:6002](provider=swift_ring_builder)) available devs: [] -2013-01-30T11:30:55 err: (/Stage[main]/Openstack::Swift::Proxy/Ring_account_device[192.168.0.3:6002]) Could not evaluate: Device not found check device on 192.168.0.3:6002 -2013-01-30T11:30:55 notice: (Ring_account_device[192.168.0.2:6002](provider=swift_ring_builder)) node name: 192.168.0.2:6002 -2013-01-30T11:30:55 notice: (Ring_account_device[192.168.0.2:6002](provider=swift_ring_builder)) available devs: ["1", "2"] -2013-01-30T11:30:56 notice: (Ring_account_device[192.168.0.2:6002](provider=swift_ring_builder)) *** create device: 2 -2013-01-30T11:30:56 notice: (Ring_account_device[192.168.0.2:6002](provider=swift_ring_builder)) *** create device: 1 -2013-01-30T11:30:56 notice: (/Stage[main]/Swift::Storage::Account/Ring_account_device[192.168.0.2:6002]/ensure) created -2013-01-30T11:30:56 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[account]/Exec[hours_passed_account]) Dependency Ring_account_device[192.168.0.4:6002] has failures: true -2013-01-30T11:30:56 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[account]/Exec[hours_passed_account]) Dependency Ring_account_device[192.168.0.3:6002] has failures: true -2013-01-30T11:30:56 warning: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[account]/Exec[hours_passed_account]) Skipping because of failed dependencies -2013-01-30T11:30:56 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[account]/Exec[hours_passed_account]/returns) Traceback (most recent call last): -2013-01-30T11:30:56 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[account]/Exec[hours_passed_account]/returns) File "/usr/bin/swift-ring-builder", line 730, in -2013-01-30T11:30:56 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[account]/Exec[hours_passed_account]/returns) Commands.__dict__.get(command, Commands.unknown)() -2013-01-30T11:30:56 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[account]/Exec[hours_passed_account]/returns) File "/usr/bin/swift-ring-builder", line 651, in pretend_min_part_hours_passed -2013-01-30T11:30:56 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[account]/Exec[hours_passed_account]/returns) builder.pretend_min_part_hours_passed() -2013-01-30T11:30:56 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[account]/Exec[hours_passed_account]/returns) File "/usr/lib/python2.6/site-packages/swift/common/ring/builder.py", line 408, in pretend_min_part_hours_passed -2013-01-30T11:30:56 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[account]/Exec[hours_passed_account]/returns) self._last_part_moves[part] = 0xff -2013-01-30T11:30:56 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[account]/Exec[hours_passed_account]/returns) TypeError: 'NoneType' object does not support item assignment -2013-01-30T11:30:56 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[account]/Exec[hours_passed_account]) Triggered 'refresh' from 1 events -2013-01-30T11:30:56 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[account]/Exec[rebalance_account]) Dependency Ring_account_device[192.168.0.3:6002] has failures: true -2013-01-30T11:30:56 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[account]/Exec[rebalance_account]) Dependency Ring_account_device[192.168.0.4:6002] has failures: true -2013-01-30T11:30:56 warning: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[account]/Exec[rebalance_account]) Skipping because of failed dependencies -2013-01-30T11:31:54 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[account]/Exec[rebalance_account]/returns) Reassigned 262144 (100.00%) partitions. Balance is now 0.00. -2013-01-30T11:31:54 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[account]/Exec[rebalance_account]) Triggered 'refresh' from 1 events -2013-01-30T11:31:56 notice: (Ring_container_device[192.168.0.4:6001](provider=swift_ring_builder)) node name: 192.168.0.4:6001 -2013-01-30T11:31:56 notice: (Ring_container_device[192.168.0.4:6001](provider=swift_ring_builder)) available devs: [] -2013-01-30T11:31:56 err: (/Stage[main]/Openstack::Swift::Proxy/Ring_container_device[192.168.0.4:6001]) Could not evaluate: Device not found check device on 192.168.0.4:6001 -2013-01-30T11:31:56 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[container]/Exec[hours_passed_container]) Dependency Ring_container_device[192.168.0.3:6001] has failures: true -2013-01-30T11:31:56 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[container]/Exec[hours_passed_container]) Dependency Ring_container_device[192.168.0.4:6001] has failures: true -2013-01-30T11:31:56 warning: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[container]/Exec[hours_passed_container]) Skipping because of failed dependencies -2013-01-30T11:31:56 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[container]/Exec[hours_passed_container]/returns) Traceback (most recent call last): -2013-01-30T11:31:56 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[container]/Exec[hours_passed_container]/returns) File "/usr/bin/swift-ring-builder", line 730, in -2013-01-30T11:31:56 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[container]/Exec[hours_passed_container]/returns) Commands.__dict__.get(command, Commands.unknown)() -2013-01-30T11:31:56 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[container]/Exec[hours_passed_container]/returns) File "/usr/bin/swift-ring-builder", line 651, in pretend_min_part_hours_passed -2013-01-30T11:31:56 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[container]/Exec[hours_passed_container]/returns) builder.pretend_min_part_hours_passed() -2013-01-30T11:31:56 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[container]/Exec[hours_passed_container]/returns) File "/usr/lib/python2.6/site-packages/swift/common/ring/builder.py", line 408, in pretend_min_part_hours_passed -2013-01-30T11:31:56 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[container]/Exec[hours_passed_container]/returns) self._last_part_moves[part] = 0xff -2013-01-30T11:31:56 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[container]/Exec[hours_passed_container]/returns) TypeError: 'NoneType' object does not support item assignment -2013-01-30T11:31:56 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[container]/Exec[hours_passed_container]) Triggered 'refresh' from 1 events -2013-01-30T11:31:56 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[container]/Exec[rebalance_container]) Dependency Ring_container_device[192.168.0.3:6001] has failures: true -2013-01-30T11:31:56 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[container]/Exec[rebalance_container]) Dependency Ring_container_device[192.168.0.4:6001] has failures: true -2013-01-30T11:31:56 warning: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[container]/Exec[rebalance_container]) Skipping because of failed dependencies -2013-01-30T11:32:53 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[container]/Exec[rebalance_container]/returns) Reassigned 262144 (100.00%) partitions. Balance is now 0.00. -2013-01-30T11:32:53 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[container]/Exec[rebalance_container]) Triggered 'refresh' from 1 events -2013-01-30T11:32:53 notice: (/Stage[main]/Swift::Ringserver/Rsync::Server::Module[swift_server]/File[/etc/rsync.d/frag-swift_server]) Dependency Ring_object_device[192.168.0.4:6000] has failures: true -2013-01-30T11:32:53 notice: (/Stage[main]/Swift::Ringserver/Rsync::Server::Module[swift_server]/File[/etc/rsync.d/frag-swift_server]) Dependency Ring_object_device[192.168.0.3:6000] has failures: true -2013-01-30T11:32:53 notice: (/Stage[main]/Swift::Ringserver/Rsync::Server::Module[swift_server]/File[/etc/rsync.d/frag-swift_server]) Dependency Ring_account_device[192.168.0.3:6002] has failures: true -2013-01-30T11:32:53 notice: (/Stage[main]/Swift::Ringserver/Rsync::Server::Module[swift_server]/File[/etc/rsync.d/frag-swift_server]) Dependency Ring_account_device[192.168.0.4:6002] has failures: true -2013-01-30T11:32:53 notice: (/Stage[main]/Swift::Ringserver/Rsync::Server::Module[swift_server]/File[/etc/rsync.d/frag-swift_server]) Dependency Ring_container_device[192.168.0.3:6001] has failures: true -2013-01-30T11:32:53 notice: (/Stage[main]/Swift::Ringserver/Rsync::Server::Module[swift_server]/File[/etc/rsync.d/frag-swift_server]) Dependency Ring_container_device[192.168.0.4:6001] has failures: true -2013-01-30T11:32:53 warning: (/Stage[main]/Swift::Ringserver/Rsync::Server::Module[swift_server]/File[/etc/rsync.d/frag-swift_server]) Skipping because of failed dependencies -2013-01-30T11:32:53 notice: (/Stage[main]/Swift::Storage::Object/Swift::Storage::Generic[object]/File[/etc/swift/object-server/]/owner) owner changed 'root' to 'swift' -2013-01-30T11:32:53 notice: (/Stage[main]/Swift::Storage::Object/Swift::Storage::Generic[object]/File[/etc/swift/object-server/]/group) group changed 'root' to 'swift' -2013-01-30T11:32:53 notice: (/Stage[main]/Swift::Storage::Account/Swift::Storage::Generic[account]/File[/etc/swift/account-server/]/owner) owner changed 'root' to 'swift' -2013-01-30T11:32:53 notice: (/Stage[main]/Swift::Storage::Account/Swift::Storage::Generic[account]/File[/etc/swift/account-server/]/group) group changed 'root' to 'swift' -2013-01-30T11:32:54 notice: (/Service[swift-container-replicator]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Package[swift-proxy]) Dependency Ring_object_device[192.168.0.4:6000] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Package[swift-proxy]) Dependency Ring_object_device[192.168.0.3:6000] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Package[swift-proxy]) Dependency Ring_account_device[192.168.0.4:6002] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Package[swift-proxy]) Dependency Ring_account_device[192.168.0.3:6002] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Package[swift-proxy]) Dependency Ring_container_device[192.168.0.3:6001] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Package[swift-proxy]) Dependency Ring_container_device[192.168.0.4:6001] has failures: true -2013-01-30T11:32:54 warning: (/Stage[main]/Swift::Proxy/Package[swift-proxy]) Skipping because of failed dependencies -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf]) Dependency Ring_object_device[192.168.0.4:6000] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf]) Dependency Ring_object_device[192.168.0.3:6000] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf]) Dependency Ring_account_device[192.168.0.4:6002] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf]) Dependency Ring_account_device[192.168.0.3:6002] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf]) Dependency Ring_container_device[192.168.0.3:6001] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf]) Dependency Ring_container_device[192.168.0.4:6001] has failures: true -2013-01-30T11:32:54 warning: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf]) Skipping because of failed dependencies -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments.concat]) Dependency Ring_container_device[192.168.0.4:6001] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments.concat]) Dependency Ring_account_device[192.168.0.4:6002] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments.concat]) Dependency Ring_account_device[192.168.0.3:6002] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments.concat]) Dependency Ring_object_device[192.168.0.4:6000] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments.concat]) Dependency Ring_container_device[192.168.0.3:6001] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments.concat]) Dependency Ring_object_device[192.168.0.3:6000] has failures: true -2013-01-30T11:32:54 warning: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments.concat]) Skipping because of failed dependencies -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments.concat.out]) Dependency Ring_container_device[192.168.0.4:6001] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments.concat.out]) Dependency Ring_account_device[192.168.0.4:6002] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments.concat.out]) Dependency Ring_account_device[192.168.0.3:6002] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments.concat.out]) Dependency Ring_object_device[192.168.0.4:6000] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments.concat.out]) Dependency Ring_container_device[192.168.0.3:6001] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments.concat.out]) Dependency Ring_object_device[192.168.0.3:6000] has failures: true -2013-01-30T11:32:54 warning: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments.concat.out]) Skipping because of failed dependencies -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments]) Dependency Ring_container_device[192.168.0.4:6001] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments]) Dependency Ring_account_device[192.168.0.4:6002] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments]) Dependency Ring_account_device[192.168.0.3:6002] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments]) Dependency Ring_object_device[192.168.0.4:6000] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments]) Dependency Ring_container_device[192.168.0.3:6001] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments]) Dependency Ring_object_device[192.168.0.3:6000] has failures: true -2013-01-30T11:32:54 warning: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments]) Skipping because of failed dependencies -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Concat::Fragment[swift_proxy]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/00_swift_proxy]) Dependency Ring_container_device[192.168.0.4:6001] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Concat::Fragment[swift_proxy]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/00_swift_proxy]) Dependency Ring_account_device[192.168.0.4:6002] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Concat::Fragment[swift_proxy]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/00_swift_proxy]) Dependency Ring_account_device[192.168.0.3:6002] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Concat::Fragment[swift_proxy]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/00_swift_proxy]) Dependency Ring_object_device[192.168.0.4:6000] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Concat::Fragment[swift_proxy]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/00_swift_proxy]) Dependency Ring_container_device[192.168.0.3:6001] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy/Concat::Fragment[swift_proxy]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/00_swift_proxy]) Dependency Ring_object_device[192.168.0.3:6000] has failures: true -2013-01-30T11:32:54 warning: (/Stage[main]/Swift::Proxy/Concat::Fragment[swift_proxy]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/00_swift_proxy]) Skipping because of failed dependencies -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::S3token/Concat::Fragment[swift_s3token]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/28_swift_s3token]) Dependency Ring_container_device[192.168.0.4:6001] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::S3token/Concat::Fragment[swift_s3token]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/28_swift_s3token]) Dependency Ring_account_device[192.168.0.4:6002] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::S3token/Concat::Fragment[swift_s3token]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/28_swift_s3token]) Dependency Ring_account_device[192.168.0.3:6002] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::S3token/Concat::Fragment[swift_s3token]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/28_swift_s3token]) Dependency Ring_object_device[192.168.0.4:6000] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::S3token/Concat::Fragment[swift_s3token]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/28_swift_s3token]) Dependency Ring_container_device[192.168.0.3:6001] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::S3token/Concat::Fragment[swift_s3token]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/28_swift_s3token]) Dependency Ring_object_device[192.168.0.3:6000] has failures: true -2013-01-30T11:32:54 warning: (/Stage[main]/Swift::Proxy::S3token/Concat::Fragment[swift_s3token]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/28_swift_s3token]) Skipping because of failed dependencies -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::Catch_errors/Concat::Fragment[swift_catch_errors]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/24_swift_catch_errors]) Dependency Ring_container_device[192.168.0.4:6001] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::Catch_errors/Concat::Fragment[swift_catch_errors]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/24_swift_catch_errors]) Dependency Ring_account_device[192.168.0.4:6002] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::Catch_errors/Concat::Fragment[swift_catch_errors]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/24_swift_catch_errors]) Dependency Ring_account_device[192.168.0.3:6002] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::Catch_errors/Concat::Fragment[swift_catch_errors]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/24_swift_catch_errors]) Dependency Ring_object_device[192.168.0.4:6000] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::Catch_errors/Concat::Fragment[swift_catch_errors]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/24_swift_catch_errors]) Dependency Ring_container_device[192.168.0.3:6001] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::Catch_errors/Concat::Fragment[swift_catch_errors]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/24_swift_catch_errors]) Dependency Ring_object_device[192.168.0.3:6000] has failures: true -2013-01-30T11:32:54 warning: (/Stage[main]/Swift::Proxy::Catch_errors/Concat::Fragment[swift_catch_errors]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/24_swift_catch_errors]) Skipping because of failed dependencies -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::Healthcheck/Concat::Fragment[swift_healthcheck]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/25_swift_healthcheck]) Dependency Ring_container_device[192.168.0.4:6001] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::Healthcheck/Concat::Fragment[swift_healthcheck]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/25_swift_healthcheck]) Dependency Ring_account_device[192.168.0.4:6002] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::Healthcheck/Concat::Fragment[swift_healthcheck]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/25_swift_healthcheck]) Dependency Ring_account_device[192.168.0.3:6002] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::Healthcheck/Concat::Fragment[swift_healthcheck]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/25_swift_healthcheck]) Dependency Ring_object_device[192.168.0.4:6000] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::Healthcheck/Concat::Fragment[swift_healthcheck]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/25_swift_healthcheck]) Dependency Ring_container_device[192.168.0.3:6001] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::Healthcheck/Concat::Fragment[swift_healthcheck]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/25_swift_healthcheck]) Dependency Ring_object_device[192.168.0.3:6000] has failures: true -2013-01-30T11:32:54 warning: (/Stage[main]/Swift::Proxy::Healthcheck/Concat::Fragment[swift_healthcheck]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/25_swift_healthcheck]) Skipping because of failed dependencies -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::Cache/Concat::Fragment[swift_cache]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/23_swift_cache]) Dependency Ring_container_device[192.168.0.4:6001] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::Cache/Concat::Fragment[swift_cache]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/23_swift_cache]) Dependency Ring_account_device[192.168.0.4:6002] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::Cache/Concat::Fragment[swift_cache]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/23_swift_cache]) Dependency Ring_account_device[192.168.0.3:6002] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::Cache/Concat::Fragment[swift_cache]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/23_swift_cache]) Dependency Ring_object_device[192.168.0.4:6000] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::Cache/Concat::Fragment[swift_cache]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/23_swift_cache]) Dependency Ring_container_device[192.168.0.3:6001] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::Cache/Concat::Fragment[swift_cache]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/23_swift_cache]) Dependency Ring_object_device[192.168.0.3:6000] has failures: true -2013-01-30T11:32:54 warning: (/Stage[main]/Swift::Proxy::Cache/Concat::Fragment[swift_cache]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/23_swift_cache]) Skipping because of failed dependencies -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::Keystone/Concat::Fragment[swift_keystone]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/79_swift_keystone]) Dependency Ring_container_device[192.168.0.4:6001] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::Keystone/Concat::Fragment[swift_keystone]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/79_swift_keystone]) Dependency Ring_account_device[192.168.0.4:6002] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::Keystone/Concat::Fragment[swift_keystone]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/79_swift_keystone]) Dependency Ring_account_device[192.168.0.3:6002] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::Keystone/Concat::Fragment[swift_keystone]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/79_swift_keystone]) Dependency Ring_object_device[192.168.0.4:6000] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::Keystone/Concat::Fragment[swift_keystone]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/79_swift_keystone]) Dependency Ring_container_device[192.168.0.3:6001] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::Keystone/Concat::Fragment[swift_keystone]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/79_swift_keystone]) Dependency Ring_object_device[192.168.0.3:6000] has failures: true -2013-01-30T11:32:54 warning: (/Stage[main]/Swift::Proxy::Keystone/Concat::Fragment[swift_keystone]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/79_swift_keystone]) Skipping because of failed dependencies -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::Ratelimit/Concat::Fragment[swift_ratelimit]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/26_swift_ratelimit]) Dependency Ring_container_device[192.168.0.4:6001] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::Ratelimit/Concat::Fragment[swift_ratelimit]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/26_swift_ratelimit]) Dependency Ring_account_device[192.168.0.4:6002] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::Ratelimit/Concat::Fragment[swift_ratelimit]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/26_swift_ratelimit]) Dependency Ring_account_device[192.168.0.3:6002] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::Ratelimit/Concat::Fragment[swift_ratelimit]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/26_swift_ratelimit]) Dependency Ring_object_device[192.168.0.4:6000] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::Ratelimit/Concat::Fragment[swift_ratelimit]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/26_swift_ratelimit]) Dependency Ring_container_device[192.168.0.3:6001] has failures: true -2013-01-30T11:32:54 notice: (/Stage[main]/Swift::Proxy::Ratelimit/Concat::Fragment[swift_ratelimit]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/26_swift_ratelimit]) Dependency Ring_object_device[192.168.0.3:6000] has failures: true -2013-01-30T11:32:54 warning: (/Stage[main]/Swift::Proxy::Ratelimit/Concat::Fragment[swift_ratelimit]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/26_swift_ratelimit]) Skipping because of failed dependencies -2013-01-30T11:32:55 notice: (/Stage[main]/Swift::Proxy::Swift3/Concat::Fragment[swift_swift3]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/27_swift_swift3]) Dependency Ring_container_device[192.168.0.4:6001] has failures: true -2013-01-30T11:32:55 notice: (/Stage[main]/Swift::Proxy::Swift3/Concat::Fragment[swift_swift3]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/27_swift_swift3]) Dependency Ring_account_device[192.168.0.4:6002] has failures: true -2013-01-30T11:32:55 notice: (/Stage[main]/Swift::Proxy::Swift3/Concat::Fragment[swift_swift3]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/27_swift_swift3]) Dependency Ring_account_device[192.168.0.3:6002] has failures: true -2013-01-30T11:32:55 notice: (/Stage[main]/Swift::Proxy::Swift3/Concat::Fragment[swift_swift3]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/27_swift_swift3]) Dependency Ring_object_device[192.168.0.4:6000] has failures: true -2013-01-30T11:32:55 notice: (/Stage[main]/Swift::Proxy::Swift3/Concat::Fragment[swift_swift3]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/27_swift_swift3]) Dependency Ring_container_device[192.168.0.3:6001] has failures: true -2013-01-30T11:32:55 notice: (/Stage[main]/Swift::Proxy::Swift3/Concat::Fragment[swift_swift3]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/27_swift_swift3]) Dependency Ring_object_device[192.168.0.3:6000] has failures: true -2013-01-30T11:32:55 warning: (/Stage[main]/Swift::Proxy::Swift3/Concat::Fragment[swift_swift3]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/27_swift_swift3]) Skipping because of failed dependencies -2013-01-30T11:32:55 notice: (/Stage[main]/Swift::Proxy::Authtoken/Keystone::Client::Authtoken[/etc/swift/proxy-server.conf]/Concat::Fragment[_etc_swift_proxy-server.conf_authtoken]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/80__etc_swift_proxy-server.conf_authtoken]) Dependency Ring_container_device[192.168.0.4:6001] has failures: true -2013-01-30T11:32:55 notice: (/Stage[main]/Swift::Proxy::Authtoken/Keystone::Client::Authtoken[/etc/swift/proxy-server.conf]/Concat::Fragment[_etc_swift_proxy-server.conf_authtoken]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/80__etc_swift_proxy-server.conf_authtoken]) Dependency Ring_account_device[192.168.0.4:6002] has failures: true -2013-01-30T11:32:55 notice: (/Stage[main]/Swift::Proxy::Authtoken/Keystone::Client::Authtoken[/etc/swift/proxy-server.conf]/Concat::Fragment[_etc_swift_proxy-server.conf_authtoken]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/80__etc_swift_proxy-server.conf_authtoken]) Dependency Ring_account_device[192.168.0.3:6002] has failures: true -2013-01-30T11:32:55 notice: (/Stage[main]/Swift::Proxy::Authtoken/Keystone::Client::Authtoken[/etc/swift/proxy-server.conf]/Concat::Fragment[_etc_swift_proxy-server.conf_authtoken]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/80__etc_swift_proxy-server.conf_authtoken]) Dependency Ring_object_device[192.168.0.4:6000] has failures: true -2013-01-30T11:32:55 notice: (/Stage[main]/Swift::Proxy::Authtoken/Keystone::Client::Authtoken[/etc/swift/proxy-server.conf]/Concat::Fragment[_etc_swift_proxy-server.conf_authtoken]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/80__etc_swift_proxy-server.conf_authtoken]) Dependency Ring_container_device[192.168.0.3:6001] has failures: true -2013-01-30T11:32:55 notice: (/Stage[main]/Swift::Proxy::Authtoken/Keystone::Client::Authtoken[/etc/swift/proxy-server.conf]/Concat::Fragment[_etc_swift_proxy-server.conf_authtoken]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/80__etc_swift_proxy-server.conf_authtoken]) Dependency Ring_object_device[192.168.0.3:6000] has failures: true -2013-01-30T11:32:55 warning: (/Stage[main]/Swift::Proxy::Authtoken/Keystone::Client::Authtoken[/etc/swift/proxy-server.conf]/Concat::Fragment[_etc_swift_proxy-server.conf_authtoken]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/80__etc_swift_proxy-server.conf_authtoken]) Skipping because of failed dependencies -2013-01-30T11:32:55 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/Exec[concat_/etc/swift/proxy-server.conf]) Dependency Ring_container_device[192.168.0.4:6001] has failures: true -2013-01-30T11:32:55 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/Exec[concat_/etc/swift/proxy-server.conf]) Dependency Ring_account_device[192.168.0.4:6002] has failures: true -2013-01-30T11:32:55 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/Exec[concat_/etc/swift/proxy-server.conf]) Dependency Ring_account_device[192.168.0.3:6002] has failures: true -2013-01-30T11:32:55 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/Exec[concat_/etc/swift/proxy-server.conf]) Dependency Ring_object_device[192.168.0.4:6000] has failures: true -2013-01-30T11:32:55 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/Exec[concat_/etc/swift/proxy-server.conf]) Dependency Ring_container_device[192.168.0.3:6001] has failures: true -2013-01-30T11:32:55 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/Exec[concat_/etc/swift/proxy-server.conf]) Dependency Ring_object_device[192.168.0.3:6000] has failures: true -2013-01-30T11:32:55 warning: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/Exec[concat_/etc/swift/proxy-server.conf]) Skipping because of failed dependencies -2013-01-30T11:32:55 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/etc/swift/proxy-server.conf]) Dependency Ring_container_device[192.168.0.4:6001] has failures: true -2013-01-30T11:32:55 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/etc/swift/proxy-server.conf]) Dependency Ring_account_device[192.168.0.4:6002] has failures: true -2013-01-30T11:32:55 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/etc/swift/proxy-server.conf]) Dependency Ring_account_device[192.168.0.3:6002] has failures: true -2013-01-30T11:32:55 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/etc/swift/proxy-server.conf]) Dependency Ring_object_device[192.168.0.4:6000] has failures: true -2013-01-30T11:32:55 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/etc/swift/proxy-server.conf]) Dependency Ring_container_device[192.168.0.3:6001] has failures: true -2013-01-30T11:32:55 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/etc/swift/proxy-server.conf]) Dependency Ring_object_device[192.168.0.3:6000] has failures: true -2013-01-30T11:32:55 warning: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/etc/swift/proxy-server.conf]) Skipping because of failed dependencies -2013-01-30T11:32:55 notice: (/Stage[main]/Swift::Proxy/Service[swift-proxy]) Dependency Ring_container_device[192.168.0.4:6001] has failures: true -2013-01-30T11:32:55 notice: (/Stage[main]/Swift::Proxy/Service[swift-proxy]) Dependency Ring_account_device[192.168.0.4:6002] has failures: true -2013-01-30T11:32:55 notice: (/Stage[main]/Swift::Proxy/Service[swift-proxy]) Dependency Ring_account_device[192.168.0.3:6002] has failures: true -2013-01-30T11:32:55 notice: (/Stage[main]/Swift::Proxy/Service[swift-proxy]) Dependency Ring_object_device[192.168.0.4:6000] has failures: true -2013-01-30T11:32:55 notice: (/Stage[main]/Swift::Proxy/Service[swift-proxy]) Dependency Ring_container_device[192.168.0.3:6001] has failures: true -2013-01-30T11:32:55 notice: (/Stage[main]/Swift::Proxy/Service[swift-proxy]) Dependency Ring_object_device[192.168.0.3:6000] has failures: true -2013-01-30T11:32:55 warning: (/Stage[main]/Swift::Proxy/Service[swift-proxy]) Skipping because of failed dependencies -2013-01-30T11:32:55 notice: (/Stage[main]/Rabbitmq::Server/Package[qpid-cpp-server]/ensure) created -2013-01-30T11:32:57 notice: (/Service[swift-account-replicator]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:32:57 notice: (/Stage[main]/Rsync::Server/Exec[compile fragments]) Dependency Ring_container_device[192.168.0.4:6001] has failures: true -2013-01-30T11:32:57 notice: (/Stage[main]/Rsync::Server/Exec[compile fragments]) Dependency Ring_account_device[192.168.0.3:6002] has failures: true -2013-01-30T11:32:57 notice: (/Stage[main]/Rsync::Server/Exec[compile fragments]) Dependency Ring_account_device[192.168.0.4:6002] has failures: true -2013-01-30T11:32:57 notice: (/Stage[main]/Rsync::Server/Exec[compile fragments]) Dependency Ring_object_device[192.168.0.4:6000] has failures: true -2013-01-30T11:32:57 notice: (/Stage[main]/Rsync::Server/Exec[compile fragments]) Dependency Ring_container_device[192.168.0.3:6001] has failures: true -2013-01-30T11:32:57 notice: (/Stage[main]/Rsync::Server/Exec[compile fragments]) Dependency Ring_object_device[192.168.0.3:6000] has failures: true -2013-01-30T11:32:57 warning: (/Stage[main]/Rsync::Server/Exec[compile fragments]) Skipping because of failed dependencies -2013-01-30T11:32:58 notice: (/Stage[main]/Galera/File[/tmp/wsrep-init-file]/ensure) created -2013-01-30T11:32:59 notice: (/Stage[main]/Galera/Exec[rm-init-file]/returns) executed successfully -2013-01-30T11:33:09 notice: (/Stage[main]/Galera/Exec[wait-for-synced-state]/returns) executed successfully -2013-01-30T11:33:09 notice: (/Stage[main]/Openstack::Controller_ha/Exec[wait-for-haproxy-mysql-backend]/returns) executed successfully -2013-01-30T11:33:40 notice: (/Stage[main]/Galera::Galera_master_final_config/Exec[first-galera-node-final-config]/returns) executed successfully -2013-01-30T11:33:46 notice: (/Service[swift-object-replicator]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:33:58 notice: (/Stage[main]/Openstack::Img::Cirros/Package[cirros-testvm]) Dependency Ring_container_device[192.168.0.4:6001] has failures: true -2013-01-30T11:33:58 notice: (/Stage[main]/Openstack::Img::Cirros/Package[cirros-testvm]) Dependency Ring_account_device[192.168.0.3:6002] has failures: true -2013-01-30T11:33:58 notice: (/Stage[main]/Openstack::Img::Cirros/Package[cirros-testvm]) Dependency Ring_account_device[192.168.0.4:6002] has failures: true -2013-01-30T11:33:58 notice: (/Stage[main]/Openstack::Img::Cirros/Package[cirros-testvm]) Dependency Ring_object_device[192.168.0.4:6000] has failures: true -2013-01-30T11:33:58 notice: (/Stage[main]/Openstack::Img::Cirros/Package[cirros-testvm]) Dependency Ring_object_device[192.168.0.3:6000] has failures: true -2013-01-30T11:33:58 notice: (/Stage[main]/Openstack::Img::Cirros/Package[cirros-testvm]) Dependency Ring_container_device[192.168.0.3:6001] has failures: true -2013-01-30T11:33:58 warning: (/Stage[main]/Openstack::Img::Cirros/Package[cirros-testvm]) Skipping because of failed dependencies -2013-01-30T11:33:58 notice: (/Stage[main]/Openstack::Img::Cirros/Exec[upload-img]) Dependency Ring_container_device[192.168.0.4:6001] has failures: true -2013-01-30T11:33:58 notice: (/Stage[main]/Openstack::Img::Cirros/Exec[upload-img]) Dependency Ring_account_device[192.168.0.3:6002] has failures: true -2013-01-30T11:33:58 notice: (/Stage[main]/Openstack::Img::Cirros/Exec[upload-img]) Dependency Ring_account_device[192.168.0.4:6002] has failures: true -2013-01-30T11:33:58 notice: (/Stage[main]/Openstack::Img::Cirros/Exec[upload-img]) Dependency Ring_object_device[192.168.0.4:6000] has failures: true -2013-01-30T11:33:58 notice: (/Stage[main]/Openstack::Img::Cirros/Exec[upload-img]) Dependency Ring_object_device[192.168.0.3:6000] has failures: true -2013-01-30T11:33:58 notice: (/Stage[main]/Openstack::Img::Cirros/Exec[upload-img]) Dependency Ring_container_device[192.168.0.3:6001] has failures: true -2013-01-30T11:33:58 warning: (/Stage[main]/Openstack::Img::Cirros/Exec[upload-img]) Skipping because of failed dependencies -2013-01-30T11:33:59 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]/returns) 2013-01-30 11:33:59 DEBUG nova.utils [-] backend from (pid=11462) __get_backend /usr/lib/python2.6/site-packages/nova/utils.py:494 -2013-01-30T11:33:59 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]/returns) executed successfully -2013-01-30T11:34:00 notice: (/Stage[main]/Nova::Cert/Nova::Generic_service[cert]/Service[nova-cert]) Triggered 'refresh' from 1 events -2013-01-30T11:34:00 notice: (/Stage[main]/Nova::Vncproxy/Nova::Generic_service[vncproxy]/Service[nova-vncproxy]) Triggered 'refresh' from 1 events -2013-01-30T11:34:02 notice: (/Stage[main]/Nova::Objectstore/Nova::Generic_service[objectstore]/Service[nova-objectstore]) Triggered 'refresh' from 1 events -2013-01-30T11:34:04 notice: (/Stage[main]/Nova::Consoleauth/Nova::Generic_service[consoleauth]/Service[nova-consoleauth]) Triggered 'refresh' from 1 events -2013-01-30T11:34:06 notice: (/Stage[main]/Nova::Api/Nova::Generic_service[api]/Service[nova-api]) Triggered 'refresh' from 1 events -2013-01-30T11:34:07 notice: (/Stage[main]/Nova::Scheduler/Nova::Generic_service[scheduler]/Service[nova-scheduler]) Triggered 'refresh' from 1 events -2013-01-30T11:34:11 notice: Finished catalog run in 261.96 seconds -SEPARATOR -2013-01-30T11:34:20 notice: Reopening log files -2013-01-30T11:35:00 notice: (/Stage[main]/Openstack::Firewall/Exec[startup-firewall]/returns) executed successfully -2013-01-30T11:35:01 notice: (/Stage[main]/Openstack::Controller_ha/Exec[up-private-interface]/returns) executed successfully -2013-01-30T11:35:01 notice: (/Stage[main]/Openstack::Controller_ha/Exec[up-internal-interface]/returns) executed successfully -2013-01-30T11:35:01 notice: (/Stage[main]/Openstack::Controller_ha/Exec[up-public-interface]/returns) executed successfully -2013-01-30T11:35:03 notice: (Ring_object_device[192.168.0.4:6000](provider=swift_ring_builder)) node name: 192.168.0.4:6000 -2013-01-30T11:35:03 notice: (Ring_object_device[192.168.0.4:6000](provider=swift_ring_builder)) available devs: ["1", "2"] -2013-01-30T11:35:04 notice: (Ring_object_device[192.168.0.4:6000](provider=swift_ring_builder)) *** create device: 2 -2013-01-30T11:35:04 notice: (Ring_object_device[192.168.0.4:6000](provider=swift_ring_builder)) *** create device: 1 -2013-01-30T11:35:04 notice: (/Stage[main]/Openstack::Swift::Proxy/Ring_object_device[192.168.0.4:6000]/ensure) created -2013-01-30T11:35:05 notice: (Ring_container_device[192.168.0.2:6001](provider=swift_ring_builder)) node name: 192.168.0.2:6001 -2013-01-30T11:35:05 notice: (Ring_container_device[192.168.0.2:6001](provider=swift_ring_builder)) available devs: ["1", "2"] -2013-01-30T11:35:05 notice: (Ring_container_device[192.168.0.3:6001](provider=swift_ring_builder)) node name: 192.168.0.3:6001 -2013-01-30T11:35:05 notice: (Ring_container_device[192.168.0.3:6001](provider=swift_ring_builder)) available devs: ["1", "2"] -2013-01-30T11:35:06 notice: (Ring_container_device[192.168.0.3:6001](provider=swift_ring_builder)) *** create device: 2 -2013-01-30T11:35:06 notice: (Ring_container_device[192.168.0.3:6001](provider=swift_ring_builder)) *** create device: 1 -2013-01-30T11:35:06 notice: (/Stage[main]/Openstack::Swift::Proxy/Ring_container_device[192.168.0.3:6001]/ensure) created -2013-01-30T11:35:06 notice: (Ring_object_device[192.168.0.3:6000](provider=swift_ring_builder)) node name: 192.168.0.3:6000 -2013-01-30T11:35:06 notice: (Ring_object_device[192.168.0.3:6000](provider=swift_ring_builder)) available devs: ["1", "2"] -2013-01-30T11:35:07 notice: (Ring_object_device[192.168.0.3:6000](provider=swift_ring_builder)) *** create device: 2 -2013-01-30T11:35:07 notice: (Ring_object_device[192.168.0.3:6000](provider=swift_ring_builder)) *** create device: 1 -2013-01-30T11:35:08 notice: (/Stage[main]/Openstack::Swift::Proxy/Ring_object_device[192.168.0.3:6000]/ensure) created -2013-01-30T11:35:08 notice: (Ring_object_device[192.168.0.2:6000](provider=swift_ring_builder)) node name: 192.168.0.2:6000 -2013-01-30T11:35:08 notice: (Ring_object_device[192.168.0.2:6000](provider=swift_ring_builder)) available devs: ["1", "2"] -2013-01-30T11:35:08 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[object]/Exec[hours_passed_object]/returns) executed successfully -2013-01-30T11:35:09 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[object]/Exec[hours_passed_object]) Triggered 'refresh' from 1 events -2013-01-30T11:35:56 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[object]/Exec[rebalance_object]/returns) Reassigned 262144 (100.00%) partitions. Balance is now 100.15. -2013-01-30T11:35:56 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[object]/Exec[rebalance_object]/returns) ------------------------------------------------------------------------------- -2013-01-30T11:35:56 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[object]/Exec[rebalance_object]/returns) NOTE: Balance of 100.15 indicates you should push this -2013-01-30T11:35:56 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[object]/Exec[rebalance_object]/returns) ring, wait at least 1 hours, and rebalance/repush. -2013-01-30T11:35:56 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[object]/Exec[rebalance_object]/returns) ------------------------------------------------------------------------------- -2013-01-30T11:35:56 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[object]/Exec[rebalance_object]/returns) executed successfully -2013-01-30T11:36:17 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[object]/Exec[rebalance_object]/returns) No partitions could be reassigned. -2013-01-30T11:36:17 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[object]/Exec[rebalance_object]/returns) Either none need to be or none can be due to min_part_hours [1]. -2013-01-30T11:36:17 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[object]/Exec[rebalance_object]) Triggered 'refresh' from 1 events -2013-01-30T11:36:18 notice: (Ring_account_device[192.168.0.4:6002](provider=swift_ring_builder)) node name: 192.168.0.4:6002 -2013-01-30T11:36:18 notice: (Ring_account_device[192.168.0.4:6002](provider=swift_ring_builder)) available devs: ["1", "2"] -2013-01-30T11:36:18 notice: (Ring_account_device[192.168.0.4:6002](provider=swift_ring_builder)) *** create device: 2 -2013-01-30T11:36:18 notice: (Ring_account_device[192.168.0.4:6002](provider=swift_ring_builder)) *** create device: 1 -2013-01-30T11:36:19 notice: (/Stage[main]/Openstack::Swift::Proxy/Ring_account_device[192.168.0.4:6002]/ensure) created -2013-01-30T11:36:19 notice: (Ring_account_device[192.168.0.3:6002](provider=swift_ring_builder)) node name: 192.168.0.3:6002 -2013-01-30T11:36:19 notice: (Ring_account_device[192.168.0.3:6002](provider=swift_ring_builder)) available devs: ["1", "2"] -2013-01-30T11:36:20 notice: (Ring_account_device[192.168.0.3:6002](provider=swift_ring_builder)) *** create device: 2 -2013-01-30T11:36:20 notice: (Ring_account_device[192.168.0.3:6002](provider=swift_ring_builder)) *** create device: 1 -2013-01-30T11:36:21 notice: (/Stage[main]/Openstack::Swift::Proxy/Ring_account_device[192.168.0.3:6002]/ensure) created -2013-01-30T11:36:21 notice: (Ring_account_device[192.168.0.2:6002](provider=swift_ring_builder)) node name: 192.168.0.2:6002 -2013-01-30T11:36:21 notice: (Ring_account_device[192.168.0.2:6002](provider=swift_ring_builder)) available devs: ["1", "2"] -2013-01-30T11:36:22 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[account]/Exec[hours_passed_account]/returns) executed successfully -2013-01-30T11:36:22 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[account]/Exec[hours_passed_account]) Triggered 'refresh' from 1 events -2013-01-30T11:37:10 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[account]/Exec[rebalance_account]/returns) Reassigned 262144 (100.00%) partitions. Balance is now 100.27. -2013-01-30T11:37:10 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[account]/Exec[rebalance_account]/returns) ------------------------------------------------------------------------------- -2013-01-30T11:37:10 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[account]/Exec[rebalance_account]/returns) NOTE: Balance of 100.27 indicates you should push this -2013-01-30T11:37:10 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[account]/Exec[rebalance_account]/returns) ring, wait at least 1 hours, and rebalance/repush. -2013-01-30T11:37:10 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[account]/Exec[rebalance_account]/returns) ------------------------------------------------------------------------------- -2013-01-30T11:37:10 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[account]/Exec[rebalance_account]/returns) executed successfully -2013-01-30T11:37:32 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[account]/Exec[rebalance_account]/returns) No partitions could be reassigned. -2013-01-30T11:37:32 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[account]/Exec[rebalance_account]/returns) Either none need to be or none can be due to min_part_hours [1]. -2013-01-30T11:37:32 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[account]/Exec[rebalance_account]) Triggered 'refresh' from 1 events -2013-01-30T11:37:34 notice: (Ring_container_device[192.168.0.4:6001](provider=swift_ring_builder)) node name: 192.168.0.4:6001 -2013-01-30T11:37:34 notice: (Ring_container_device[192.168.0.4:6001](provider=swift_ring_builder)) available devs: ["1", "2"] -2013-01-30T11:37:34 notice: (Ring_container_device[192.168.0.4:6001](provider=swift_ring_builder)) *** create device: 2 -2013-01-30T11:37:35 notice: (Ring_container_device[192.168.0.4:6001](provider=swift_ring_builder)) *** create device: 1 -2013-01-30T11:37:35 notice: (/Stage[main]/Openstack::Swift::Proxy/Ring_container_device[192.168.0.4:6001]/ensure) created -2013-01-30T11:37:35 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[container]/Exec[hours_passed_container]/returns) executed successfully -2013-01-30T11:37:36 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[container]/Exec[hours_passed_container]) Triggered 'refresh' from 1 events -2013-01-30T11:38:23 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[container]/Exec[rebalance_container]/returns) Reassigned 262144 (100.00%) partitions. Balance is now 100.13. -2013-01-30T11:38:23 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[container]/Exec[rebalance_container]/returns) ------------------------------------------------------------------------------- -2013-01-30T11:38:23 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[container]/Exec[rebalance_container]/returns) NOTE: Balance of 100.13 indicates you should push this -2013-01-30T11:38:23 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[container]/Exec[rebalance_container]/returns) ring, wait at least 1 hours, and rebalance/repush. -2013-01-30T11:38:23 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[container]/Exec[rebalance_container]/returns) ------------------------------------------------------------------------------- -2013-01-30T11:38:23 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[container]/Exec[rebalance_container]/returns) executed successfully -2013-01-30T11:38:46 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[container]/Exec[rebalance_container]/returns) No partitions could be reassigned. -2013-01-30T11:38:46 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[container]/Exec[rebalance_container]/returns) Either none need to be or none can be due to min_part_hours [1]. -2013-01-30T11:38:46 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[container]/Exec[rebalance_container]) Triggered 'refresh' from 1 events -2013-01-30T11:38:46 notice: (/Stage[main]/Swift::Ringserver/Rsync::Server::Module[swift_server]/File[/etc/rsync.d/frag-swift_server]/ensure) defined content as '{md5}7fae4818c72b8e958b2f3fcbe3c76d82' -2013-01-30T11:38:48 notice: (/Stage[main]/Swift::Proxy/Package[swift-proxy]/ensure) created -2013-01-30T11:38:48 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf]/ensure) created -2013-01-30T11:38:48 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments.concat]/ensure) created -2013-01-30T11:38:48 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments.concat.out]/ensure) created -2013-01-30T11:38:48 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments]/ensure) created -2013-01-30T11:38:48 notice: (/Stage[main]/Swift::Proxy/Concat::Fragment[swift_proxy]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/00_swift_proxy]/ensure) created -2013-01-30T11:38:48 notice: (/Stage[main]/Swift::Proxy::S3token/Concat::Fragment[swift_s3token]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/28_swift_s3token]/ensure) created -2013-01-30T11:38:48 notice: (/Stage[main]/Swift::Proxy::Catch_errors/Concat::Fragment[swift_catch_errors]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/24_swift_catch_errors]/ensure) created -2013-01-30T11:38:48 notice: (/Stage[main]/Swift::Proxy::Healthcheck/Concat::Fragment[swift_healthcheck]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/25_swift_healthcheck]/ensure) created -2013-01-30T11:38:48 notice: (/Stage[main]/Swift::Proxy::Cache/Concat::Fragment[swift_cache]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/23_swift_cache]/ensure) created -2013-01-30T11:38:48 notice: (/Stage[main]/Swift::Proxy::Keystone/Concat::Fragment[swift_keystone]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/79_swift_keystone]/ensure) created -2013-01-30T11:38:48 notice: (/Stage[main]/Swift::Proxy::Ratelimit/Concat::Fragment[swift_ratelimit]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/26_swift_ratelimit]/ensure) created -2013-01-30T11:38:48 notice: (/Stage[main]/Swift::Proxy::Swift3/Concat::Fragment[swift_swift3]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/27_swift_swift3]/ensure) created -2013-01-30T11:38:49 notice: (/Stage[main]/Swift::Proxy::Authtoken/Keystone::Client::Authtoken[/etc/swift/proxy-server.conf]/Concat::Fragment[_etc_swift_proxy-server.conf_authtoken]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/80__etc_swift_proxy-server.conf_authtoken]/ensure) created -2013-01-30T11:38:49 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/Exec[concat_/etc/swift/proxy-server.conf]/returns) executed successfully -2013-01-30T11:38:49 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/Exec[concat_/etc/swift/proxy-server.conf]) Triggered 'refresh' from 11 events -2013-01-30T11:38:49 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/etc/swift/proxy-server.conf]/content) content changed '{md5}b6581fa5a48beaa38dae9450d67b0d28' to '{md5}e46a68b307fb3b8cf307b15f9eefd9af' -2013-01-30T11:38:49 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/etc/swift/proxy-server.conf]/owner) owner changed 'root' to 'swift' -2013-01-30T11:38:50 notice: (/Stage[main]/Swift::Proxy/Service[swift-proxy]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:38:50 notice: (/Stage[main]/Swift::Proxy/Service[swift-proxy]) Triggered 'refresh' from 1 events -2013-01-30T11:38:51 notice: (/Stage[main]/Rabbitmq::Server/Package[qpid-cpp-server]/ensure) created -2013-01-30T11:38:54 notice: (/Stage[main]/Rsync::Server/Exec[compile fragments]) Triggered 'refresh' from 1 events -2013-01-30T11:38:54 notice: (/Stage[main]/Galera/File[/tmp/wsrep-init-file]/ensure) created -2013-01-30T11:38:54 notice: (/Stage[main]/Galera/Exec[rm-init-file]/returns) executed successfully -2013-01-30T11:39:05 notice: (/Stage[main]/Galera/Exec[wait-for-synced-state]/returns) executed successfully -2013-01-30T11:39:05 notice: (/Stage[main]/Openstack::Controller_ha/Exec[wait-for-haproxy-mysql-backend]/returns) executed successfully -2013-01-30T11:39:36 notice: (/Stage[main]/Galera::Galera_master_final_config/Exec[first-galera-node-final-config]/returns) executed successfully -2013-01-30T11:39:56 notice: (/Stage[main]/Openstack::Img::Cirros/Package[cirros-testvm]/ensure) created -2013-01-30T11:40:09 notice: (/Stage[main]/Openstack::Img::Cirros/Exec[upload-img]/returns) Added new image with ID: 38024dfd-7583-4fcb-86c7-56efc8b922e0 -2013-01-30T11:40:09 notice: (/Stage[main]/Openstack::Img::Cirros/Exec[upload-img]/returns) executed successfully -2013-01-30T11:40:10 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]/returns) 2013-01-30 11:40:10 DEBUG nova.utils [-] backend from (pid=13971) __get_backend /usr/lib/python2.6/site-packages/nova/utils.py:494 -2013-01-30T11:40:10 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]/returns) executed successfully -2013-01-30T11:40:11 notice: (/Stage[main]/Nova::Cert/Nova::Generic_service[cert]/Service[nova-cert]) Triggered 'refresh' from 1 events -2013-01-30T11:40:11 notice: (/Stage[main]/Nova::Vncproxy/Nova::Generic_service[vncproxy]/Service[nova-vncproxy]) Triggered 'refresh' from 1 events -2013-01-30T11:40:13 notice: (/Stage[main]/Nova::Objectstore/Nova::Generic_service[objectstore]/Service[nova-objectstore]) Triggered 'refresh' from 1 events -2013-01-30T11:40:16 notice: (/Stage[main]/Nova::Consoleauth/Nova::Generic_service[consoleauth]/Service[nova-consoleauth]) Triggered 'refresh' from 1 events -2013-01-30T11:40:20 notice: (/Stage[main]/Nova::Api/Nova::Generic_service[api]/Service[nova-api]) Triggered 'refresh' from 1 events -2013-01-30T11:40:24 notice: (/Stage[main]/Nova::Scheduler/Nova::Generic_service[scheduler]/Service[nova-scheduler]) Triggered 'refresh' from 1 events -2013-01-30T11:40:27 notice: Finished catalog run in 329.72 seconds -SEPARATOR -2013-01-30T11:40:36 notice: Reopening log files -2013-01-30T11:42:08 notice: (/Stage[main]/Openstack::Firewall/Exec[startup-firewall]/returns) executed successfully -2013-01-30T11:42:09 notice: (/Stage[main]/Openstack::Controller_ha/Exec[up-private-interface]/returns) executed successfully -2013-01-30T11:42:09 notice: (/Stage[main]/Openstack::Controller_ha/Exec[up-internal-interface]/returns) executed successfully -2013-01-30T11:42:09 notice: (/Stage[main]/Openstack::Controller_ha/Exec[up-public-interface]/returns) executed successfully -2013-01-30T11:42:10 notice: (Ring_object_device[192.168.0.4:6000](provider=swift_ring_builder)) node name: 192.168.0.4:6000 -2013-01-30T11:42:10 notice: (Ring_object_device[192.168.0.4:6000](provider=swift_ring_builder)) available devs: ["1", "2"] -2013-01-30T11:42:11 notice: (Ring_container_device[192.168.0.2:6001](provider=swift_ring_builder)) node name: 192.168.0.2:6001 -2013-01-30T11:42:11 notice: (Ring_container_device[192.168.0.2:6001](provider=swift_ring_builder)) available devs: ["1", "2"] -2013-01-30T11:42:11 notice: (Ring_container_device[192.168.0.3:6001](provider=swift_ring_builder)) node name: 192.168.0.3:6001 -2013-01-30T11:42:11 notice: (Ring_container_device[192.168.0.3:6001](provider=swift_ring_builder)) available devs: ["1", "2"] -2013-01-30T11:42:12 notice: (Ring_object_device[192.168.0.3:6000](provider=swift_ring_builder)) node name: 192.168.0.3:6000 -2013-01-30T11:42:12 notice: (Ring_object_device[192.168.0.3:6000](provider=swift_ring_builder)) available devs: ["1", "2"] -2013-01-30T11:42:12 notice: (Ring_object_device[192.168.0.2:6000](provider=swift_ring_builder)) node name: 192.168.0.2:6000 -2013-01-30T11:42:12 notice: (Ring_object_device[192.168.0.2:6000](provider=swift_ring_builder)) available devs: ["1", "2"] -2013-01-30T11:42:13 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[object]/Exec[hours_passed_object]/returns) executed successfully -2013-01-30T11:43:00 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[object]/Exec[rebalance_object]/returns) Reassigned 262144 (100.00%) partitions. Balance is now 0.00. -2013-01-30T11:43:00 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[object]/Exec[rebalance_object]/returns) executed successfully -2013-01-30T11:43:01 notice: (Ring_account_device[192.168.0.4:6002](provider=swift_ring_builder)) node name: 192.168.0.4:6002 -2013-01-30T11:43:01 notice: (Ring_account_device[192.168.0.4:6002](provider=swift_ring_builder)) available devs: ["1", "2"] -2013-01-30T11:43:01 notice: (Ring_account_device[192.168.0.3:6002](provider=swift_ring_builder)) node name: 192.168.0.3:6002 -2013-01-30T11:43:01 notice: (Ring_account_device[192.168.0.3:6002](provider=swift_ring_builder)) available devs: ["1", "2"] -2013-01-30T11:43:01 notice: (Ring_account_device[192.168.0.2:6002](provider=swift_ring_builder)) node name: 192.168.0.2:6002 -2013-01-30T11:43:01 notice: (Ring_account_device[192.168.0.2:6002](provider=swift_ring_builder)) available devs: ["1", "2"] -2013-01-30T11:43:02 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[account]/Exec[hours_passed_account]/returns) executed successfully -2013-01-30T11:43:47 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[account]/Exec[rebalance_account]/returns) Reassigned 262144 (100.00%) partitions. Balance is now 0.00. -2013-01-30T11:43:47 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[account]/Exec[rebalance_account]/returns) executed successfully -2013-01-30T11:43:51 notice: (Ring_container_device[192.168.0.4:6001](provider=swift_ring_builder)) node name: 192.168.0.4:6001 -2013-01-30T11:43:51 notice: (Ring_container_device[192.168.0.4:6001](provider=swift_ring_builder)) available devs: ["1", "2"] -2013-01-30T11:43:51 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[container]/Exec[hours_passed_container]/returns) executed successfully -2013-01-30T11:44:43 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[container]/Exec[rebalance_container]/returns) Reassigned 262144 (100.00%) partitions. Balance is now 0.00. -2013-01-30T11:44:43 notice: (/Stage[main]/Swift::Ringbuilder/Swift::Ringbuilder::Rebalance[container]/Exec[rebalance_container]/returns) executed successfully -2013-01-30T11:44:46 notice: (/Stage[main]/Rabbitmq::Server/Package[qpid-cpp-server]/ensure) created -2013-01-30T11:44:50 notice: (/Stage[main]/Galera/File[/tmp/wsrep-init-file]/ensure) created -2013-01-30T11:44:50 notice: (/Stage[main]/Galera/Exec[rm-init-file]/returns) executed successfully -2013-01-30T11:45:00 notice: (/Stage[main]/Galera/Exec[wait-for-synced-state]/returns) executed successfully -2013-01-30T11:45:00 notice: (/Stage[main]/Openstack::Controller_ha/Exec[wait-for-haproxy-mysql-backend]/returns) executed successfully -2013-01-30T11:45:30 notice: (/Stage[main]/Galera::Galera_master_final_config/Exec[first-galera-node-final-config]/returns) executed successfully -2013-01-30T11:45:51 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]/returns) 2013-01-30 11:45:51 DEBUG nova.utils [-] backend from (pid=24869) __get_backend /usr/lib/python2.6/site-packages/nova/utils.py:494 -2013-01-30T11:45:51 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]/returns) executed successfully -2013-01-30T11:45:52 notice: (/Stage[main]/Nova::Cert/Nova::Generic_service[cert]/Service[nova-cert]) Triggered 'refresh' from 1 events -2013-01-30T11:45:53 notice: (/Stage[main]/Nova::Vncproxy/Nova::Generic_service[vncproxy]/Service[nova-vncproxy]) Triggered 'refresh' from 1 events -2013-01-30T11:45:55 notice: (/Stage[main]/Nova::Objectstore/Nova::Generic_service[objectstore]/Service[nova-objectstore]) Triggered 'refresh' from 1 events -2013-01-30T11:45:57 notice: (/Stage[main]/Nova::Consoleauth/Nova::Generic_service[consoleauth]/Service[nova-consoleauth]) Triggered 'refresh' from 1 events -2013-01-30T11:45:59 notice: (/Stage[main]/Nova::Api/Nova::Generic_service[api]/Service[nova-api]) Triggered 'refresh' from 1 events -2013-01-30T11:46:01 notice: (/Stage[main]/Nova::Scheduler/Nova::Generic_service[scheduler]/Service[nova-scheduler]) Triggered 'refresh' from 1 events -2013-01-30T11:46:04 notice: Finished catalog run in 239.73 seconds diff --git a/spec/example-logs/puppet-agent.log.ha.contr.2 b/spec/example-logs/puppet-agent.log.ha.contr.2 deleted file mode 100644 index 19b40bec..00000000 --- a/spec/example-logs/puppet-agent.log.ha.contr.2 +++ /dev/null @@ -1,451 +0,0 @@ -2013-01-30T11:00:03 notice: Reopening log files -2013-01-30T11:00:53 notice: (/Stage[main]/Nova::Utilities/Package[euca2ools]/ensure) created -2013-01-30T11:00:53 notice: (/Stage[main]/Concat::Setup/File[/var/lib/puppet/concat]/ensure) created -2013-01-30T11:00:57 notice: (/Stage[main]/Mysql::Python/Package[python-mysqldb]/ensure) created -2013-01-30T11:00:57 notice: (/Stage[main]/Concat::Setup/File[/var/lib/puppet/concat/bin]/ensure) created -2013-01-30T11:00:57 notice: (/Stage[main]/Concat::Setup/File[/var/lib/puppet/concat/bin/concatfragments.sh]/ensure) defined content as '{md5}256169ee61115a6b717b2844d2ea3128' -2013-01-30T11:00:59 notice: (/Stage[main]/Nova::Utilities/Package[screen]/ensure) created -2013-01-30T11:01:03 notice: (/Stage[main]/Xinetd/Package[xinetd]/ensure) created -2013-01-30T11:01:03 notice: (/Stage[main]/Memcached/User[memcached]/ensure) created -2013-01-30T11:01:05 notice: (/Stage[main]/Memcached/Package[memcached]/ensure) created -2013-01-30T11:01:05 notice: (/Stage[main]/Memcached/File[/etc/sysconfig/memcached]/content) content changed '{md5}05503957e3796fbe6fddd756a7a102a0' to '{md5}3a3961445528bdeda6d7b8b5564dfcfc' -2013-01-30T11:01:06 notice: (/Stage[main]/Memcached/Service[memcached]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:01:06 notice: (/Stage[main]/Memcached/Service[memcached]) Triggered 'refresh' from 1 events -2013-01-30T11:01:06 notice: (/Stage[main]/Osnailyfacter::Test_controller/File[/tmp/controller-file]/ensure) defined content as '{md5}7f5c51282c4b1242e12addba8cc331fa' -2013-01-30T11:01:14 notice: (/Stage[main]/Horizon/Package[mod_wsgi]/ensure) created -2013-01-30T11:01:18 notice: (/Stage[main]/Swift::Xfs/Package[xfsprogs]/ensure) created -2013-01-30T11:01:24 notice: (/Stage[main]/Nova::Utilities/Package[parted]/ensure) created -2013-01-30T11:01:24 notice: (/Stage[main]/Openstack::Firewall/File[iptables]/ensure) defined content as '{md5}7efd2b2c624fb433a1538c229ae20e1f' -2013-01-30T11:01:25 notice: (/Stage[main]/Openstack::Firewall/Exec[startup-firewall]/returns) executed successfully -2013-01-30T11:01:55 notice: (/Stage[main]/Keystone::Python/Package[python-keystone]/ensure) created -2013-01-30T11:02:05 notice: (/Stage[main]/Openstack::Glance/Package[swift]/ensure) created -2013-01-30T11:03:03 notice: (/Stage[main]/Nova::Api/Nova::Generic_service[api]/Package[nova-api]/ensure) created -2013-01-30T11:03:04 notice: (/Stage[main]/Openstack::Swift::Proxy/File[/tmp/swift_keystone_test.rb]/ensure) defined content as '{md5}9921c28fffe90ef152603443c7a9a4d3' -2013-01-30T11:03:06 notice: (/Stage[main]/Nova/Package[python-amqp]/ensure) created -2013-01-30T11:03:06 notice: (/Stage[main]/Swift/File[/var/lib/swift]/ensure) created -2013-01-30T11:03:06 notice: (/Stage[main]/Swift/File[/etc/swift]/owner) owner changed 'root' to 'swift' -2013-01-30T11:03:06 notice: (/Stage[main]/Swift/File[/etc/swift]/group) group changed 'root' to 'swift' -2013-01-30T11:03:06 notice: (/Stage[main]/Swift/File[/etc/swift]/mode) mode changed '0755' to '2770' -2013-01-30T11:03:06 notice: (/Stage[main]/Swift/File[/etc/swift/swift.conf]/content) content changed '{md5}5f2a4640b3293fedc9e8e249408f3044' to '{md5}32a608237a8eeb3fb48db3fda8a239e0' -2013-01-30T11:03:06 notice: (/Stage[main]/Swift/File[/etc/swift/swift.conf]/owner) owner changed 'root' to 'swift' -2013-01-30T11:03:06 notice: (/Stage[main]/Swift/File[/var/cache/swift]/ensure) created -2013-01-30T11:03:06 notice: (/Stage[main]/Swift/File[/var/run/swift]/group) group changed 'root' to 'swift' -2013-01-30T11:03:06 notice: (/Stage[main]/Xinetd/File[/etc/xinetd.conf]/content) content changed '{md5}9ff8cc688dd9f0dfc45e5afd25c427a7' to '{md5}1680192de4cef61a23dca13cdfff07c7' -2013-01-30T11:03:06 notice: (/Stage[main]/Xinetd/File[/etc/xinetd.conf]/owner) owner changed 'root' to 'swift' -2013-01-30T11:03:06 notice: (/Stage[main]/Xinetd/File[/etc/xinetd.conf]/group) group changed 'root' to 'swift' -2013-01-30T11:03:06 notice: (/Stage[main]/Xinetd/File[/etc/xinetd.conf]/mode) mode changed '0600' to '0664' -2013-01-30T11:03:10 notice: (/Stage[main]/Nova::Utilities/Package[unzip]/ensure) created -2013-01-30T11:03:10 notice: (/Stage[main]/Openstack::Auth_file/File[/root/openrc]/ensure) defined content as '{md5}70358e4313c4c6852303bf9d0f24fb81' -2013-01-30T11:03:25 notice: (/Stage[main]/Horizon/Package[openstack-dashboard]/ensure) created -2013-01-30T11:03:25 notice: (/Stage[main]/Horizon/File[/var/log/horizon]/ensure) created -2013-01-30T11:03:25 notice: (/Stage[main]/Horizon/File_line[horizon_redirect_rule]/ensure) created -2013-01-30T11:03:27 notice: (/Stage[main]/Openstack::Controller_ha/Package[socat]/ensure) created -2013-01-30T11:03:27 notice: (/Stage[main]/Haproxy/Concat[/etc/haproxy/haproxy.cfg]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg]/ensure) created -2013-01-30T11:03:28 notice: (/Stage[main]/Haproxy/Concat[/etc/haproxy/haproxy.cfg]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments]/ensure) created -2013-01-30T11:03:28 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[mysqld]/Haproxy::Balancermember[mysqld]/Concat::Fragment[mysqld_balancermember_mysqld]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/95-mysqld_mysqld_mysqld_balancermember_mysqld]/ensure) created -2013-01-30T11:03:28 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[glance-api]/Haproxy::Balancermember[glance-api]/Concat::Fragment[glance-api_balancermember_glance-api]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/80-glance-api_glance-api_glance-api_balancermember_glance-api]/ensure) created -2013-01-30T11:03:28 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[nova-api-1]/Haproxy::Balancermember[nova-api-1]/Concat::Fragment[nova-api-1_balancermember_nova-api-1]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/40-nova-api-1_nova-api-1_nova-api-1_balancermember_nova-api-1]/ensure) created -2013-01-30T11:03:28 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[quantum]/Haproxy::Balancermember[quantum]/Concat::Fragment[quantum_balancermember_quantum]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/85-quantum_quantum_quantum_balancermember_quantum]/ensure) created -2013-01-30T11:03:28 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[glance-reg]/Haproxy::Balancermember[glance-reg]/Concat::Fragment[glance-reg_balancermember_glance-reg]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/90-glance-reg_glance-reg_glance-reg_balancermember_glance-reg]/ensure) created -2013-01-30T11:03:28 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[nova-api-1]/Haproxy::Listen[nova-api-1]/Concat::Fragment[nova-api-1-listen_block]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/39-nova-api-1_nova-api-1-listen_block]/ensure) created -2013-01-30T11:03:28 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[mysqld]/Haproxy::Listen[mysqld]/Concat::Fragment[mysqld-listen_block]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/94-mysqld_mysqld-listen_block]/ensure) created -2013-01-30T11:03:28 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[swift]/Haproxy::Listen[swift]/Concat::Fragment[swift-listen_block]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/95-swift_swift-listen_block]/ensure) created -2013-01-30T11:03:28 notice: (/Stage[main]/Haproxy/Concat[/etc/haproxy/haproxy.cfg]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments.concat]/ensure) created -2013-01-30T11:03:28 notice: (/Stage[main]/Haproxy/Concat::Fragment[haproxy-base]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/10_haproxy-base]/ensure) created -2013-01-30T11:03:28 notice: (/Stage[main]/Haproxy/Concat::Fragment[00-header]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/01_00-header]/ensure) created -2013-01-30T11:03:28 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[glance-api]/Haproxy::Listen[glance-api]/Concat::Fragment[glance-api-listen_block]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/79-glance-api_glance-api-listen_block]/ensure) created -2013-01-30T11:03:28 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[swift]/Haproxy::Balancermember[swift]/Concat::Fragment[swift_balancermember_swift]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/96-swift_swift_swift_balancermember_swift]/ensure) created -2013-01-30T11:03:28 notice: (/Stage[main]/Haproxy/Concat[/etc/haproxy/haproxy.cfg]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments.concat.out]/ensure) created -2013-01-30T11:03:28 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[nova-api-4]/Haproxy::Listen[nova-api-4]/Concat::Fragment[nova-api-4-listen_block]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/69-nova-api-4_nova-api-4-listen_block]/ensure) created -2013-01-30T11:03:28 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[nova-api-2]/Haproxy::Balancermember[nova-api-2]/Concat::Fragment[nova-api-2_balancermember_nova-api-2]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/50-nova-api-2_nova-api-2_nova-api-2_balancermember_nova-api-2]/ensure) created -2013-01-30T11:03:28 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[nova-api-2]/Haproxy::Listen[nova-api-2]/Concat::Fragment[nova-api-2-listen_block]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/49-nova-api-2_nova-api-2-listen_block]/ensure) created -2013-01-30T11:03:28 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[keystone-1]/Haproxy::Listen[keystone-1]/Concat::Fragment[keystone-1-listen_block]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/19-keystone-1_keystone-1-listen_block]/ensure) created -2013-01-30T11:03:28 notice: (/Stage[main]/Horizon/File[/etc/openstack-dashboard/local_settings]/content) content changed '{md5}d114fa06522fa1016ab2bdede4cfd7bf' to '{md5}6f16dcbc1a76f8ae51dd6fe7157af42d' -2013-01-30T11:03:28 notice: (/Stage[main]/Horizon/File[/etc/openstack-dashboard/local_settings]/owner) owner changed 'root' to 'apache' -2013-01-30T11:03:28 notice: (/Stage[main]/Horizon/File[/etc/openstack-dashboard/local_settings]/group) group changed 'root' to 'apache' -2013-01-30T11:03:28 notice: (/Stage[main]/Swift/File[/home/swift]/ensure) created -2013-01-30T11:03:35 notice: (/Stage[main]/Nova::Vncproxy/Package[python-numpy]/ensure) created -2013-01-30T11:05:13 notice: (/Stage[main]/Nova::Utilities/Package[libguestfs-tools-c]/ensure) created -2013-01-30T11:05:13 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6001]/Concat[/etc/swift/container-server.conf]/File[/var/lib/puppet/concat/_etc_swift_container-server.conf]/ensure) created -2013-01-30T11:05:13 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6001]/Concat[/etc/swift/container-server.conf]/File[/var/lib/puppet/concat/_etc_swift_container-server.conf/fragments]/ensure) created -2013-01-30T11:05:13 notice: (/Stage[main]/Swift::Storage::All/File[/srv/node]/ensure) created -2013-01-30T11:05:13 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6001]/Concat[/etc/swift/container-server.conf]/File[/var/lib/puppet/concat/_etc_swift_container-server.conf/fragments.concat]/ensure) created -2013-01-30T11:05:14 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6002]/Concat[/etc/swift/account-server.conf]/File[/var/lib/puppet/concat/_etc_swift_account-server.conf]/ensure) created -2013-01-30T11:05:14 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6002]/Concat[/etc/swift/account-server.conf]/File[/var/lib/puppet/concat/_etc_swift_account-server.conf/fragments.concat]/ensure) created -2013-01-30T11:05:14 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6002]/Concat[/etc/swift/account-server.conf]/File[/var/lib/puppet/concat/_etc_swift_account-server.conf/fragments.concat.out]/ensure) created -2013-01-30T11:05:14 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6002]/Concat[/etc/swift/account-server.conf]/File[/var/lib/puppet/concat/_etc_swift_account-server.conf/fragments]/ensure) created -2013-01-30T11:05:14 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6002]/Concat::Fragment[swift-account-6002]/File[/var/lib/puppet/concat/_etc_swift_account-server.conf/fragments/00_swift-account-6002]/ensure) created -2013-01-30T11:05:14 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6001]/Concat[/etc/swift/container-server.conf]/File[/var/lib/puppet/concat/_etc_swift_container-server.conf/fragments.concat.out]/ensure) created -2013-01-30T11:05:14 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[keystone-2]/Haproxy::Balancermember[keystone-2]/Concat::Fragment[keystone-2_balancermember_keystone-2]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/30-keystone-2_keystone-2_keystone-2_balancermember_keystone-2]/ensure) created -2013-01-30T11:05:24 notice: (/Stage[main]/Rsync::Server/File[/etc/rsync.d]/ensure) created -2013-01-30T11:05:24 notice: (/Stage[main]/Rsync::Server/File[/etc/rsync.d/header]/ensure) defined content as '{md5}81c93e6021cb444faaac0cd902198ce2' -2013-01-30T11:05:24 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6001]/Rsync::Server::Module[container]/File[/etc/rsync.d/frag-container]/ensure) defined content as '{md5}f34ae17bc92c6dac2f9e4535cc52d6f4' -2013-01-30T11:05:24 notice: (/Stage[main]/Openstack::Controller_ha/Keepalived_dhcp_hook[eth0.102]/File[/etc/dhcp/dhclient-eth0.102-down-hooks]/ensure) defined content as '{md5}d5bdb51453a200b5822441bcc6072cae' -2013-01-30T11:05:34 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6000]/Concat[/etc/swift/object-server.conf]/File[/var/lib/puppet/concat/_etc_swift_object-server.conf]/ensure) created -2013-01-30T11:05:34 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6000]/Concat[/etc/swift/object-server.conf]/File[/var/lib/puppet/concat/_etc_swift_object-server.conf/fragments]/ensure) created -2013-01-30T11:05:34 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6000]/Concat[/etc/swift/object-server.conf]/File[/var/lib/puppet/concat/_etc_swift_object-server.conf/fragments.concat.out]/ensure) created -2013-01-30T11:05:34 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6000]/Concat::Fragment[swift-object-6000]/File[/var/lib/puppet/concat/_etc_swift_object-server.conf/fragments/00_swift-object-6000]/ensure) created -2013-01-30T11:05:34 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6000]/Rsync::Server::Module[object]/File[/etc/rsync.d/frag-object]/ensure) defined content as '{md5}6599fe18f7573876515cdb791157facc' -2013-01-30T11:05:34 notice: (/Stage[main]/Nova::Network/Sysctl::Value[net.ipv4.ip_forward]/Sysctl[net.ipv4.ip_forward]/val) val changed '0' to '1' -2013-01-30T11:05:34 notice: (/Stage[main]/Openstack::Controller_ha/Keepalived_dhcp_hook[eth0.101]/File[/etc/dhcp/dhclient-eth0.101-down-hooks]/ensure) defined content as '{md5}150162dde6c8e637d6192de84fd26fde' -2013-01-30T11:05:34 notice: (/Stage[main]/Openstack::Controller_ha/Keepalived_dhcp_hook[eth0.101]/File[/etc/dhcp/dhclient-eth0.101-up-hooks]/ensure) defined content as '{md5}beeb771a9fc99bc9f3b01258a2c947a2' -2013-01-30T11:05:34 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6001]/Concat::Fragment[swift-container-6001]/File[/var/lib/puppet/concat/_etc_swift_container-server.conf/fragments/00_swift-container-6001]/ensure) created -2013-01-30T11:05:34 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6001]/Concat[/etc/swift/container-server.conf]/Exec[concat_/etc/swift/container-server.conf]/returns) executed successfully -2013-01-30T11:05:34 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6001]/Concat[/etc/swift/container-server.conf]/Exec[concat_/etc/swift/container-server.conf]) Triggered 'refresh' from 3 events -2013-01-30T11:05:34 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6001]/Concat[/etc/swift/container-server.conf]/File[/etc/swift/container-server.conf]/ensure) defined content as '{md5}f0497d0e2e8f6a42dc405f29ce78b1e3' -2013-01-30T11:05:34 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[keystone-2]/Haproxy::Listen[keystone-2]/Concat::Fragment[keystone-2-listen_block]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/29-keystone-2_keystone-2-listen_block]/ensure) created -2013-01-30T11:05:35 notice: (/Stage[main]/Nova::Network/Sysctl::Value[net.ipv4.ip_forward]/Exec[exec_sysctl_net.ipv4.ip_forward]/returns) net.ipv4.ip_forward = 1 -2013-01-30T11:05:35 notice: (/Stage[main]/Nova::Network/Sysctl::Value[net.ipv4.ip_forward]/Exec[exec_sysctl_net.ipv4.ip_forward]/returns) executed successfully -2013-01-30T11:05:35 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/File[/srv/loopback-device]/ensure) created -2013-01-30T11:05:35 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[horizon]/Haproxy::Listen[horizon]/Concat::Fragment[horizon-listen_block]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/14-horizon_horizon-listen_block]/ensure) created -2013-01-30T11:05:35 notice: (/Stage[main]/Rsync::Server/Xinetd::Service[rsync]/File[/etc/xinetd.d/rsync]/content) content changed '{md5}fd32314f3157aaf15712e6da7758060d' to '{md5}b5745641b26d03ebddd24b143319f385' -2013-01-30T11:05:35 notice: (/Stage[main]/Rsync::Server/Xinetd::Service[rsync]/File[/etc/xinetd.d/rsync]/owner) owner changed 'root' to 'swift' -2013-01-30T11:05:35 notice: (/Stage[main]/Rsync::Server/Xinetd::Service[rsync]/File[/etc/xinetd.d/rsync]/group) group changed 'root' to 'swift' -2013-01-30T11:05:35 notice: (/Stage[main]/Xinetd/Service[xinetd]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:05:36 notice: (/Stage[main]/Xinetd/Service[xinetd]) Triggered 'refresh' from 3 events -2013-01-30T11:05:36 notice: (/Stage[main]/Horizon/File_line[httpd_listen_on_internal_network_only]/ensure) created -2013-01-30T11:05:37 notice: (/Stage[main]/Horizon/Service[$::horizon::params::http_service]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:05:39 notice: (/Stage[main]/Horizon/Service[$::horizon::params::http_service]) Triggered 'refresh' from 6 events -2013-01-30T11:05:39 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Exec[create_partition-1]/returns) 0+0 records in -2013-01-30T11:05:39 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Exec[create_partition-1]/returns) 0+0 records out -2013-01-30T11:05:39 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Exec[create_partition-1]/returns) 0 bytes (0 B) copied, 1.562e-05 s, 0.0 kB/s -2013-01-30T11:05:39 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Exec[create_partition-1]/returns) executed successfully -2013-01-30T11:05:40 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Exec[mkfs-1]/returns) meta-data=/srv/loopback-device/1 isize=1024 agcount=4, agsize=65548 blks -2013-01-30T11:05:40 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Exec[mkfs-1]/returns) = sectsz=512 attr=2 -2013-01-30T11:05:40 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Exec[mkfs-1]/returns) data = bsize=4096 blocks=262189, imaxpct=25 -2013-01-30T11:05:40 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Exec[mkfs-1]/returns) = sunit=0 swidth=0 blks -2013-01-30T11:05:40 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Exec[mkfs-1]/returns) naming =version 2 bsize=4096 ascii-ci=0 -2013-01-30T11:05:40 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Exec[mkfs-1]/returns) log =internal log bsize=4096 blocks=2560, version=2 -2013-01-30T11:05:40 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Exec[mkfs-1]/returns) = sectsz=512 sunit=0 blks, lazy-count=1 -2013-01-30T11:05:40 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Exec[mkfs-1]/returns) realtime =none extsz=4096 blocks=0, rtextents=0 -2013-01-30T11:05:40 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Exec[mkfs-1]) Triggered 'refresh' from 1 events -2013-01-30T11:05:40 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Swift::Storage::Mount[1]/File[/srv/node/1]/ensure) created -2013-01-30T11:05:40 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Swift::Storage::Mount[1]/Mount[/srv/node/1]/ensure) defined 'ensure' as 'defined' -2013-01-30T11:05:40 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Swift::Storage::Mount[1]/Mount[/srv/node/1]) Triggered 'refresh' from 2 events -2013-01-30T11:05:40 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Swift::Storage::Mount[1]/Exec[mount_1]/returns) executed successfully -2013-01-30T11:05:41 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Swift::Storage::Mount[1]/Exec[mount_1]) Triggered 'refresh' from 1 events -2013-01-30T11:05:41 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Swift::Storage::Mount[1]/Exec[fix_mount_permissions_1]) Triggered 'refresh' from 3 events -2013-01-30T11:05:41 notice: (/Stage[main]/Glance/Group[glance]/ensure) created -2013-01-30T11:05:41 notice: (/Stage[main]/Glance/User[glance]/ensure) created -2013-01-30T11:05:47 notice: (/Stage[main]/Glance/Package[glance]/ensure) created -2013-01-30T11:05:47 notice: (/Stage[main]/Glance::Backend::Swift/Glance_api_config[DEFAULT/swift_store_auth_address]/value) value changed '127.0.0.1:5000/v2.0/' to 'http://192.168.0.6:5000/v2.0/' -2013-01-30T11:05:47 notice: (/Stage[main]/Glance::Api/Glance_api_config[keystone_authtoken/signing_dirname]/ensure) created -2013-01-30T11:05:47 notice: (/Stage[main]/Glance::Api/Glance_api_config[DEFAULT/debug]/value) value changed 'False' to 'true' -2013-01-30T11:05:47 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/admin_user]/ensure) created -2013-01-30T11:05:47 notice: (/Stage[main]/Glance::Api/Glance_api_config[DEFAULT/sql_connection]/value) value changed 'mysql://glance:glance@localhost/glance' to 'mysql://glance:nova@192.168.0.6/glance' -2013-01-30T11:05:47 notice: (/Stage[main]/Glance::Api/Glance_api_config[DEFAULT/bind_host]/value) value changed '0.0.0.0' to '192.168.0.3' -2013-01-30T11:05:47 notice: (/Stage[main]/Glance::Backend::Swift/Glance_api_config[DEFAULT/default_store]/value) value changed 'file' to 'swift' -2013-01-30T11:05:47 notice: (/Stage[main]/Glance::Backend::Swift/Glance_api_config[DEFAULT/swift_store_create_container_on_put]/value) value changed 'False' to 'True' -2013-01-30T11:05:47 notice: (/Stage[main]/Glance::Api/Glance_api_config[paste_deploy/flavor]/ensure) created -2013-01-30T11:05:47 notice: (/Stage[main]/Glance::Backend::Swift/Glance_api_config[DEFAULT/swift_store_user]/value) value changed 'jdoe:jdoe' to 'services:glance' -2013-01-30T11:05:47 notice: (/Stage[main]/Glance::Api/Glance_api_config[keystone_authtoken/auth_host]/value) value changed '127.0.0.1' to '192.168.0.6' -2013-01-30T11:05:47 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/verbose]/value) value changed 'True' to 'true' -2013-01-30T11:05:47 notice: (/Stage[main]/Glance::Api/Glance_api_config[keystone_authtoken/admin_password]/value) value changed '%SERVICE_PASSWORD%' to 'nova' -2013-01-30T11:05:47 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/admin_tenant_name]/ensure) created -2013-01-30T11:05:47 notice: (/Stage[main]/Glance::Api/Glance_api_config[keystone_authtoken/admin_tenant_name]/value) value changed '%SERVICE_TENANT_NAME%' to 'services' -2013-01-30T11:05:47 notice: (/Stage[main]/Glance::Backend::Swift/Glance_api_config[DEFAULT/swift_store_key]/value) value changed 'a86850deb2742ec3cb41518e26aa2d89' to 'nova' -2013-01-30T11:05:47 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/admin_password]/ensure) created -2013-01-30T11:05:47 notice: (/Stage[main]/Glance::Api/Glance_api_config[DEFAULT/registry_host]/value) value changed '0.0.0.0' to '192.168.0.6' -2013-01-30T11:05:47 notice: (/Stage[main]/Glance::Api/Glance_api_config[keystone_authtoken/auth_uri]/ensure) created -2013-01-30T11:05:47 notice: (/Stage[main]/Glance/File[/etc/glance/]/owner) owner changed 'root' to 'glance' -2013-01-30T11:05:47 notice: (/Stage[main]/Glance/File[/etc/glance/]/mode) mode changed '0755' to '0770' -2013-01-30T11:05:47 notice: (/Stage[main]/Glance::Api/Glance_api_config[keystone_authtoken/admin_user]/value) value changed '%SERVICE_USER%' to 'glance' -2013-01-30T11:05:47 notice: (/Stage[main]/Glance::Api/Glance_api_config[keystone_authtoken/signing_dir]/ensure) created -2013-01-30T11:05:47 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/registry_host]/value) value changed '0.0.0.0' to '192.168.0.6' -2013-01-30T11:05:48 notice: (/Stage[main]/Glance/File[glance-logging.conf]/ensure) defined content as '{md5}71fa2daa8e89a992f4225e850fd879e4' -2013-01-30T11:05:48 notice: (/Stage[main]/Glance::Api/File[/etc/glance/glance-cache.conf]/owner) owner changed 'root' to 'glance' -2013-01-30T11:05:48 notice: (/Stage[main]/Glance::Api/File[/etc/glance/glance-api.conf]/owner) owner changed 'root' to 'glance' -2013-01-30T11:05:48 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/debug]/value) value changed 'False' to 'true' -2013-01-30T11:05:48 notice: (/Stage[main]/Glance::Api/Glance_api_config[DEFAULT/verbose]/value) value changed 'True' to 'true' -2013-01-30T11:05:50 notice: (/Stage[main]/Keepalived::Install/Package[keepalived]/ensure) created -2013-01-30T11:05:50 notice: (/Stage[main]/Keepalived::Config/Concat[/etc/keepalived/keepalived.conf]/File[/var/lib/puppet/concat/_etc_keepalived_keepalived.conf]/ensure) created -2013-01-30T11:05:51 notice: (/Stage[main]/Keepalived::Config/Concat[/etc/keepalived/keepalived.conf]/File[/var/lib/puppet/concat/_etc_keepalived_keepalived.conf/fragments]/ensure) created -2013-01-30T11:05:51 notice: (/Stage[main]/Openstack::Controller_ha/Keepalived::Instance[2]/Concat::Fragment[keepalived_2]/File[/var/lib/puppet/concat/_etc_keepalived_keepalived.conf/fragments/50_keepalived_2]/ensure) created -2013-01-30T11:05:51 notice: (/Stage[main]/Keepalived::Config/Concat[/etc/keepalived/keepalived.conf]/File[/var/lib/puppet/concat/_etc_keepalived_keepalived.conf/fragments.concat]/ensure) created -2013-01-30T11:05:51 notice: (/Stage[main]/Openstack::Controller_ha/Keepalived::Instance[1]/Concat::Fragment[keepalived_1]/File[/var/lib/puppet/concat/_etc_keepalived_keepalived.conf/fragments/50_keepalived_1]/ensure) created -2013-01-30T11:05:51 notice: (/Stage[main]/Keepalived::Config/Concat::Fragment[global_config]/File[/var/lib/puppet/concat/_etc_keepalived_keepalived.conf/fragments/01_global_config]/ensure) created -2013-01-30T11:05:51 notice: (/Stage[main]/Keepalived::Config/Concat[/etc/keepalived/keepalived.conf]/Exec[concat_/etc/keepalived/keepalived.conf]/returns) /var/lib/puppet/concat/bin/concatfragments.sh: line 108: [: too many arguments -2013-01-30T11:05:51 notice: (/Stage[main]/Keepalived::Config/Concat[/etc/keepalived/keepalived.conf]/Exec[concat_/etc/keepalived/keepalived.conf]/returns) executed successfully -2013-01-30T11:05:51 notice: (/Stage[main]/Keepalived::Config/Concat[/etc/keepalived/keepalived.conf]/Exec[concat_/etc/keepalived/keepalived.conf]) Triggered 'refresh' from 5 events -2013-01-30T11:05:51 notice: (/Stage[main]/Keepalived::Config/Concat[/etc/keepalived/keepalived.conf]/File[/etc/keepalived/keepalived.conf]/content) content changed '{md5}e79dca9e58978e8035e7d4ad25e2ce67' to '{md5}b0c0fed15bce5900037840ca219adfb5' -2013-01-30T11:05:51 notice: (/Stage[main]/Keepalived::Config/Concat[/etc/keepalived/keepalived.conf]/File[/etc/keepalived/keepalived.conf]/mode) mode changed '0640' to '0644' -2013-01-30T11:05:51 notice: (/Stage[main]/Keepalived::Service/Service[keepalived]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:05:52 notice: (/Stage[main]/Keepalived::Service/Service[keepalived]) Triggered 'refresh' from 1 events -2013-01-30T11:05:52 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[keystone-1]/Haproxy::Balancermember[keystone-1]/Concat::Fragment[keystone-1_balancermember_keystone-1]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/20-keystone-1_keystone-1_keystone-1_balancermember_keystone-1]/ensure) created -2013-01-30T11:05:52 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[nova-api-4]/Haproxy::Balancermember[nova-api-4]/Concat::Fragment[nova-api-4_balancermember_nova-api-4]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/70-nova-api-4_nova-api-4_nova-api-4_balancermember_nova-api-4]/ensure) created -2013-01-30T11:06:02 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[quantum]/Haproxy::Listen[quantum]/Concat::Fragment[quantum-listen_block]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/84-quantum_quantum-listen_block]/ensure) created -2013-01-30T11:06:02 notice: (/Stage[main]/Swift::Storage::Object/Swift::Storage::Generic[object]/File[/etc/swift/object-server/]/ensure) created -2013-01-30T11:06:02 notice: (/Stage[main]/Swift::Storage::Account/Swift::Storage::Generic[account]/File[/etc/swift/account-server/]/ensure) created -2013-01-30T11:06:05 notice: (/Stage[main]/Swift::Storage::Account/Swift::Storage::Generic[account]/Package[swift-account]/ensure) created -2013-01-30T11:06:07 notice: (/Stage[main]/Swift::Storage::Container/Swift::Storage::Generic[container]/Package[swift-container]/ensure) created -2013-01-30T11:06:07 err: (/Service[swift-container-replicator]/ensure) change from stopped to running failed: Could not start Service[swift-container-replicator]: Execution of '/usr/bin/swift-init container-replicator start' returned 1: at /etc/puppet/modules/swift/manifests/storage/generic.pp:61 -2013-01-30T11:06:07 notice: (/Service[swift-container-replicator]) Triggered 'refresh' from 2 events -2013-01-30T11:06:07 notice: (/Stage[main]/Swift::Storage::Container/Swift::Storage::Generic[container]/File[/etc/swift/container-server/]/owner) owner changed 'root' to 'swift' -2013-01-30T11:06:07 notice: (/Stage[main]/Swift::Storage::Container/Swift::Storage::Generic[container]/File[/etc/swift/container-server/]/group) group changed 'root' to 'swift' -2013-01-30T11:06:10 notice: (/Stage[main]/Swift::Storage::Object/Swift::Storage::Generic[object]/Package[swift-object]/ensure) created -2013-01-30T11:06:11 notice: (/Stage[main]/Swift::Storage::Container/Swift::Storage::Generic[container]/Service[swift-container]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:06:12 notice: (/Stage[main]/Swift::Storage::Container/Swift::Storage::Generic[container]/Service[swift-container]) Triggered 'refresh' from 2 events -2013-01-30T11:06:15 notice: (/Stage[main]/Swift::Proxy/Package[swift-proxy]/ensure) created -2013-01-30T11:06:15 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf]/ensure) created -2013-01-30T11:06:15 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments.concat]/ensure) created -2013-01-30T11:06:15 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments.concat.out]/ensure) created -2013-01-30T11:06:15 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments]/ensure) created -2013-01-30T11:06:15 notice: (/Stage[main]/Swift::Proxy/Concat::Fragment[swift_proxy]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/00_swift_proxy]/ensure) created -2013-01-30T11:06:15 notice: (/Stage[main]/Swift::Proxy::S3token/Concat::Fragment[swift_s3token]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/28_swift_s3token]/ensure) created -2013-01-30T11:06:15 notice: (/Stage[main]/Swift::Proxy::Catch_errors/Concat::Fragment[swift_catch_errors]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/24_swift_catch_errors]/ensure) created -2013-01-30T11:06:15 notice: (/Stage[main]/Swift::Proxy::Healthcheck/Concat::Fragment[swift_healthcheck]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/25_swift_healthcheck]/ensure) created -2013-01-30T11:06:15 notice: (/Stage[main]/Swift::Proxy::Cache/Concat::Fragment[swift_cache]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/23_swift_cache]/ensure) created -2013-01-30T11:06:15 notice: (/Stage[main]/Swift::Proxy::Keystone/Concat::Fragment[swift_keystone]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/79_swift_keystone]/ensure) created -2013-01-30T11:06:15 notice: (/Stage[main]/Swift::Proxy::Ratelimit/Concat::Fragment[swift_ratelimit]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/26_swift_ratelimit]/ensure) created -2013-01-30T11:06:15 notice: (/Stage[main]/Swift::Proxy::Swift3/Concat::Fragment[swift_swift3]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/27_swift_swift3]/ensure) created -2013-01-30T11:06:16 notice: (/Stage[main]/Swift::Proxy::Authtoken/Keystone::Client::Authtoken[/etc/swift/proxy-server.conf]/Concat::Fragment[_etc_swift_proxy-server.conf_authtoken]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/80__etc_swift_proxy-server.conf_authtoken]/ensure) created -2013-01-30T11:06:16 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/Exec[concat_/etc/swift/proxy-server.conf]/returns) executed successfully -2013-01-30T11:06:16 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/Exec[concat_/etc/swift/proxy-server.conf]) Triggered 'refresh' from 11 events -2013-01-30T11:06:16 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/etc/swift/proxy-server.conf]/content) content changed '{md5}b6581fa5a48beaa38dae9450d67b0d28' to '{md5}9d2d408cec205ea9bbb5e5e22691dc76' -2013-01-30T11:06:16 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/etc/swift/proxy-server.conf]/owner) owner changed 'root' to 'swift' -2013-01-30T11:06:16 notice: (/Stage[main]/Swift::Proxy/Service[swift-proxy]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:06:17 notice: (/Stage[main]/Swift::Proxy/Service[swift-proxy]) Triggered 'refresh' from 1 events -2013-01-30T11:06:17 notice: (/Stage[main]/Rabbitmq::Server/Package[qpid-cpp-server]/ensure) created -2013-01-30T11:08:31 notice: (/Stage[main]/Rabbitmq::Server/Package[rabbitmq-server]/ensure) created -2013-01-30T11:08:32 notice: (/Stage[main]/Rabbitmq::Server/Exec[rabbitmq_stop]/returns) Stopping rabbitmq-server: RabbitMQ is not running -2013-01-30T11:08:32 notice: (/Stage[main]/Rabbitmq::Server/Exec[rabbitmq_stop]/returns) rabbitmq-server. -2013-01-30T11:08:32 notice: (/Stage[main]/Rabbitmq::Server/Exec[rabbitmq_stop]/returns) executed successfully -2013-01-30T11:08:32 notice: (/Stage[main]/Rabbitmq::Server/File[erlang_cookie]/content) content changed '{md5}2a03a34108a295ae469819b1abfcb101' to '{md5}b28788594da393660db1e4f20d296c10' -2013-01-30T11:08:32 notice: (/Stage[main]/Rabbitmq::Server/File[rabbitmq.config]/ensure) defined content as '{md5}f22d1aa923c4727590fa559e8643fcf8' -2013-01-30T11:08:32 notice: (/Stage[main]/Rabbitmq::Server/File[rabbitmq-env.config]/ensure) defined content as '{md5}2980dac99b8f2195a50ef6e459ffedae' -2013-01-30T11:08:38 notice: (/Stage[main]/Rabbitmq::Service/Service[rabbitmq-server]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:08:44 notice: (/Stage[main]/Rabbitmq::Service/Service[rabbitmq-server]) Triggered 'refresh' from 1 events -2013-01-30T11:08:45 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[glance-reg]/Haproxy::Listen[glance-reg]/Concat::Fragment[glance-reg-listen_block]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/89-glance-reg_glance-reg-listen_block]/ensure) created -2013-01-30T11:08:45 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6002]/Concat[/etc/swift/account-server.conf]/Exec[concat_/etc/swift/account-server.conf]/returns) executed successfully -2013-01-30T11:08:46 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6002]/Concat[/etc/swift/account-server.conf]/Exec[concat_/etc/swift/account-server.conf]) Triggered 'refresh' from 3 events -2013-01-30T11:08:46 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6002]/Concat[/etc/swift/account-server.conf]/File[/etc/swift/account-server.conf]/content) content changed '{md5}68d75de69955941c8fd8f40b0dbbb31b' to '{md5}e9c2995f2c596f4cbc11f6639eb5c0fb' -2013-01-30T11:08:46 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6002]/Concat[/etc/swift/account-server.conf]/File[/etc/swift/account-server.conf]/owner) owner changed 'root' to 'swift' -2013-01-30T11:08:46 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6002]/Concat[/etc/swift/account-server.conf]/File[/etc/swift/account-server.conf]/mode) mode changed '0660' to '0640' -2013-01-30T11:08:46 err: (/Service[swift-account-replicator]/ensure) change from stopped to running failed: Could not start Service[swift-account-replicator]: Execution of '/usr/bin/swift-init account-replicator start' returned 1: at /etc/puppet/modules/swift/manifests/storage/generic.pp:61 -2013-01-30T11:08:46 notice: (/Service[swift-account-replicator]) Triggered 'refresh' from 2 events -2013-01-30T11:08:48 notice: (/Stage[main]/Swift::Storage::Account/Swift::Storage::Generic[account]/Service[swift-account]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:08:49 notice: (/Stage[main]/Swift::Storage::Account/Swift::Storage::Generic[account]/Service[swift-account]) Triggered 'refresh' from 2 events -2013-01-30T11:08:49 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Exec[create_partition-2]/returns) 0+0 records in -2013-01-30T11:08:49 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Exec[create_partition-2]/returns) 0+0 records out -2013-01-30T11:08:49 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Exec[create_partition-2]/returns) 0 bytes (0 B) copied, 1.4634e-05 s, 0.0 kB/s -2013-01-30T11:08:49 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Exec[create_partition-2]/returns) executed successfully -2013-01-30T11:08:50 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Exec[mkfs-2]/returns) meta-data=/srv/loopback-device/2 isize=1024 agcount=4, agsize=65548 blks -2013-01-30T11:08:50 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Exec[mkfs-2]/returns) = sectsz=512 attr=2 -2013-01-30T11:08:50 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Exec[mkfs-2]/returns) data = bsize=4096 blocks=262189, imaxpct=25 -2013-01-30T11:08:50 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Exec[mkfs-2]/returns) = sunit=0 swidth=0 blks -2013-01-30T11:08:50 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Exec[mkfs-2]/returns) naming =version 2 bsize=4096 ascii-ci=0 -2013-01-30T11:08:50 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Exec[mkfs-2]/returns) log =internal log bsize=4096 blocks=2560, version=2 -2013-01-30T11:08:50 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Exec[mkfs-2]/returns) = sectsz=512 sunit=0 blks, lazy-count=1 -2013-01-30T11:08:50 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Exec[mkfs-2]/returns) realtime =none extsz=4096 blocks=0, rtextents=0 -2013-01-30T11:08:50 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Exec[mkfs-2]) Triggered 'refresh' from 1 events -2013-01-30T11:08:50 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Swift::Storage::Mount[2]/File[/srv/node/2]/ensure) created -2013-01-30T11:08:50 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Swift::Storage::Mount[2]/Mount[/srv/node/2]/ensure) defined 'ensure' as 'defined' -2013-01-30T11:08:50 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Swift::Storage::Mount[2]/Mount[/srv/node/2]) Triggered 'refresh' from 2 events -2013-01-30T11:08:51 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Swift::Storage::Mount[2]/Exec[mount_2]/returns) executed successfully -2013-01-30T11:08:51 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Swift::Storage::Mount[2]/Exec[mount_2]) Triggered 'refresh' from 1 events -2013-01-30T11:08:51 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Swift::Storage::Mount[2]/Exec[fix_mount_permissions_2]) Triggered 'refresh' from 3 events -2013-01-30T11:08:51 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6002]/Rsync::Server::Module[account]/File[/etc/rsync.d/frag-account]/ensure) defined content as '{md5}5c536b07e578ed18d4c7eedd2d76a225' -2013-01-30T11:08:51 notice: (/Stage[main]/Rsync::Server/Exec[compile fragments]) Triggered 'refresh' from 4 events -2013-01-30T11:08:51 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[horizon]/Haproxy::Balancermember[horizon]/Concat::Fragment[horizon_balancermember_horizon]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/15-horizon_horizon_horizon_balancermember_horizon]/ensure) created -2013-01-30T11:08:52 notice: (/Stage[main]/Haproxy/Concat[/etc/haproxy/haproxy.cfg]/Exec[concat_/etc/haproxy/haproxy.cfg]/returns) executed successfully -2013-01-30T11:08:52 notice: (/Stage[main]/Haproxy/Concat[/etc/haproxy/haproxy.cfg]/Exec[concat_/etc/haproxy/haproxy.cfg]) Triggered 'refresh' from 26 events -2013-01-30T11:08:52 notice: (/Stage[main]/Haproxy/Concat[/etc/haproxy/haproxy.cfg]/File[/etc/haproxy/haproxy.cfg]/content) content changed '{md5}1f337186b0e1ba5ee82760cb437fb810' to '{md5}9f86f0ac91477b48d33f24cf1d560774' -2013-01-30T11:08:52 notice: (/Stage[main]/Haproxy/Service[haproxy]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:08:52 notice: (/Stage[main]/Haproxy/Service[haproxy]) Triggered 'refresh' from 1 events -2013-01-30T11:08:52 notice: (/Stage[main]/Galera/File[/etc/mysql]/ensure) created -2013-01-30T11:08:53 notice: (/Stage[main]/Galera/File[/etc/my.cnf]/ensure) defined content as '{md5}9c703ee12b3b1cef32501cdeeb24feef' -2013-01-30T11:08:56 notice: (/Stage[main]/Galera/Package[openssl098e]/ensure) created -2013-01-30T11:09:00 notice: (/Stage[main]/Galera/Package[galera]/ensure) created -2013-01-30T11:09:08 notice: (/Stage[main]/Galera/Package[MySQL-client]/ensure) created -2013-01-30T11:09:08 notice: (/Stage[main]/Galera/File[/tmp/wsrep-init-file]/ensure) created -2013-01-30T11:09:08 notice: (/Stage[main]/Galera/File[/etc/mysql/conf.d]/ensure) created -2013-01-30T11:09:08 notice: (/Stage[main]/Galera/File[/etc/mysql/conf.d/wsrep.cnf]/ensure) created -2013-01-30T11:09:35 notice: (/Stage[main]/Galera/Package[MySQL-server]/ensure) created -2013-01-30T11:09:36 notice: (/Stage[main]/Galera/Exec[set-mysql-password]) Triggered 'refresh' from 2 events -2013-01-30T11:10:08 notice: (/Stage[main]/Galera/Exec[wait-initial-sync]) Triggered 'refresh' from 1 events -2013-01-30T11:10:25 notice: (/Stage[main]/Galera/Exec[kill-initial-mysql]/returns) mysqld_safe: no process killed -2013-01-30T11:10:25 notice: (/Stage[main]/Galera/Exec[kill-initial-mysql]) Triggered 'refresh' from 1 events -2013-01-30T11:10:25 notice: (/Stage[main]/Galera/Exec[rm-init-file]/returns) executed successfully -2013-01-30T11:10:58 notice: (/Stage[main]/Galera/Service[mysql-galera]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:12:06 notice: (/Stage[main]/Galera/Service[mysql-galera]) Triggered 'refresh' from 1 events -2013-01-30T11:12:23 notice: (/Stage[main]/Galera/Exec[wait-for-synced-state]/returns) executed successfully -2013-01-30T11:12:23 notice: (/Stage[main]/Openstack::Controller_ha/Exec[wait-for-haproxy-mysql-backend]/returns) executed successfully -2013-01-30T11:12:24 notice: (/Stage[main]/Nova::Db::Mysql/Mysql::Db[nova]/Database[nova]/charset) charset changed 'utf8' to 'latin1' -2013-01-30T11:12:24 notice: (/Stage[main]/Nova::Db::Mysql/Nova::Db::Mysql::Host_access[slave-2]/Database_user[nova@slave-2]/ensure) created -2013-01-30T11:12:25 notice: (/Stage[main]/Nova::Db::Mysql/Nova::Db::Mysql::Host_access[slave-2]/Database_grant[nova@slave-2/nova]/privileges) privileges changed '' to 'all' -2013-01-30T11:12:25 notice: (/Stage[main]/Nova::Network::Vlan/Nova_config[DEFAULT/network_manager]/value) value changed 'nova.network.manager.FlatDHCPManager' to 'nova.network.manager.VlanManager' -2013-01-30T11:12:25 notice: (/Stage[main]/Nova::Network/Nova_config[DEFAULT/floating_range]/ensure) created -2013-01-30T11:12:25 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_hosts]/ensure) created -2013-01-30T11:12:25 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_volumes]/ensure) created -2013-01-30T11:12:25 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/osapi_compute_listen]/ensure) created -2013-01-30T11:12:25 notice: (/Stage[main]/Openstack::Controller/Nova_config[DEFAULT/memcached_servers]/ensure) created -2013-01-30T11:12:25 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/ec2_listen]/ensure) created -2013-01-30T11:12:25 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/admin_password]/value) value changed '%SERVICE_PASSWORD%' to 'nova' -2013-01-30T11:12:25 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_max_injected_file_content_bytes]/ensure) created -2013-01-30T11:12:25 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/admin_user]/value) value changed '%SERVICE_USER%' to 'nova' -2013-01-30T11:12:25 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/glance_api_servers]/ensure) created -2013-01-30T11:12:25 notice: (/Stage[main]/Nova::Vncproxy/Nova_config[DEFAULT/novncproxy_host]/ensure) created -2013-01-30T11:12:25 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_userid]/ensure) created -2013-01-30T11:12:25 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_ha_queues]/ensure) created -2013-01-30T11:12:25 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_password]/ensure) created -2013-01-30T11:12:25 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/verbose]/ensure) created -2013-01-30T11:12:25 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_cores]/ensure) created -2013-01-30T11:12:28 notice: (/Stage[main]/Nova::Consoleauth/Nova::Generic_service[consoleauth]/Package[nova-consoleauth]/ensure) created -2013-01-30T11:12:28 notice: (/Stage[main]/Nova::Api/Nova_config[DEFAULT/enabled_apis]/ensure) created -2013-01-30T11:12:28 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/sql_connection]/value) value changed 'mysql://nova:nova@localhost/nova' to 'mysql://nova:nova@192.168.0.6/nova' -2013-01-30T11:12:28 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_virtual_host]/ensure) created -2013-01-30T11:12:28 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/image_service]/ensure) created -2013-01-30T11:12:28 notice: (/Stage[main]/Nova::Api/Nova_config[DEFAULT/volume_api_class]/ensure) created -2013-01-30T11:12:28 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_max_injected_files]/ensure) created -2013-01-30T11:12:28 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/auth_host]/value) value changed '127.0.0.1' to '192.168.0.6' -2013-01-30T11:12:28 notice: (/Stage[main]/Nova::Vncproxy/Nova_config[DEFAULT/novncproxy_port]/ensure) created -2013-01-30T11:12:28 notice: (/Stage[main]/Nova::Network::Vlan/Nova_config[DEFAULT/force_dhcp_release]/value) value changed 'True' to 'true' -2013-01-30T11:12:28 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_port]/ensure) created -2013-01-30T11:13:10 notice: (/Stage[main]/Nova::Vncproxy/Nova::Generic_service[vncproxy]/Package[nova-vncproxy]/ensure) created -2013-01-30T11:13:10 notice: (/Stage[main]/Nova::Network::Vlan/Nova_config[DEFAULT/vlan_start]/ensure) created -2013-01-30T11:13:10 notice: (/Stage[main]/Nova/User[nova]/shell) shell changed '/sbin/nologin' to '/bin/bash' -2013-01-30T11:13:10 notice: (/Stage[main]/Nova/File[/var/log/nova]/group) group changed 'root' to 'nova' -2013-01-30T11:13:10 notice: (/Stage[main]/Nova/File[/var/log/nova]/mode) mode changed '0755' to '0751' -2013-01-30T11:13:10 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_max_injected_file_path_bytes]/ensure) created -2013-01-30T11:13:10 notice: (/Stage[main]/Nova::Api/Nova_config[DEFAULT/api_paste_config]/ensure) created -2013-01-30T11:13:10 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_floating_ips]/ensure) created -2013-01-30T11:13:10 notice: (/Stage[main]/Openstack::Nova::Controller/Nova_config[DEFAULT/multi_host]/ensure) created -2013-01-30T11:13:10 notice: (/Stage[main]/Nova::Network::Vlan/Nova_config[DEFAULT/public_interface]/ensure) created -2013-01-30T11:13:10 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/service_down_time]/ensure) created -2013-01-30T11:13:10 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/admin_tenant_name]/value) value changed '%SERVICE_TENANT_NAME%' to 'services' -2013-01-30T11:13:10 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_gigabytes]/ensure) created -2013-01-30T11:13:10 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_instances]/ensure) created -2013-01-30T11:13:10 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/osapi_volume_listen]/ensure) created -2013-01-30T11:13:10 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/signing_dir]/ensure) created -2013-01-30T11:13:10 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/metadata_listen]/ensure) created -2013-01-30T11:13:10 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/auth_strategy]/ensure) created -2013-01-30T11:13:10 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_metadata_items]/ensure) created -2013-01-30T11:13:10 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rpc_backend]/value) value changed 'nova.openstack.common.rpc.impl_qpid' to 'nova.rpc.impl_kombu' -2013-01-30T11:13:10 notice: (/Stage[main]/Nova::Network::Vlan/Nova_config[DEFAULT/fixed_range]/ensure) created -2013-01-30T11:13:10 notice: (/Stage[main]/Nova::Network::Vlan/Nova_config[DEFAULT/dhcp_domain]/ensure) created -2013-01-30T11:13:10 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/allow_resize_to_same_host]/ensure) created -2013-01-30T11:13:10 notice: (/Stage[main]/Glance::Db::Mysql/Glance::Db::Mysql::Host_access[slave-2]/Database_user[glance@slave-2]/ensure) created -2013-01-30T11:13:12 notice: (/Stage[main]/Glance::Db::Mysql/Glance::Db::Mysql::Host_access[slave-2]/Database_grant[glance@slave-2/glance]/privileges) privileges changed '' to 'all' -2013-01-30T11:13:13 notice: (/Stage[main]/Nova::Network::Vlan/Nova_config[DEFAULT/vlan_interface]/ensure) created -2013-01-30T11:13:13 notice: (/Stage[main]/Nova/File[/etc/nova/nova.conf]/owner) owner changed 'root' to 'nova' -2013-01-30T11:13:13 notice: (/Stage[main]/Keystone::Db::Mysql/Keystone::Db::Mysql::Host_access[slave-2]/Database_user[keystone@slave-2]/ensure) created -2013-01-30T11:13:14 notice: (/Stage[main]/Keystone::Db::Mysql/Keystone::Db::Mysql::Host_access[slave-2]/Database_grant[keystone@slave-2/keystone]/privileges) privileges changed '' to 'all' -2013-01-30T11:13:17 notice: (/Stage[main]/Keystone/Package[keystone]/ensure) created -2013-01-30T11:13:18 notice: (/Stage[main]/Keystone/Keystone_config[sql/connection]/value) value changed 'mysql://keystone:keystone@localhost/keystone' to 'mysql://keystone:nova@192.168.0.6/keystone' -2013-01-30T11:13:18 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/public_port]/ensure) created -2013-01-30T11:13:18 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/compute_port]/ensure) created -2013-01-30T11:13:18 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/debug]/ensure) created -2013-01-30T11:13:18 notice: (/Stage[main]/Keystone/Keystone_config[policy/driver]/ensure) created -2013-01-30T11:13:18 notice: (/Stage[main]/Keystone/Keystone_config[sql/idle_timeout]/ensure) created -2013-01-30T11:13:18 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/admin_token]/ensure) created -2013-01-30T11:13:18 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/bind_host]/ensure) created -2013-01-30T11:13:18 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/admin_port]/ensure) created -2013-01-30T11:13:18 notice: (/Stage[main]/Keystone/File[/etc/keystone]/owner) owner changed 'root' to 'keystone' -2013-01-30T11:13:18 notice: (/Stage[main]/Keystone/File[/etc/keystone]/group) group changed 'root' to 'keystone' -2013-01-30T11:13:18 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[keystone_authtoken/signing_dir]/ensure) created -2013-01-30T11:13:18 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[keystone_authtoken/auth_host]/value) value changed '127.0.0.1' to '192.168.0.6' -2013-01-30T11:13:18 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[DEFAULT/bind_host]/value) value changed '0.0.0.0' to '192.168.0.3' -2013-01-30T11:13:18 notice: (/Stage[main]/Glance::Registry/File[/etc/glance/glance-registry.conf]/owner) owner changed 'root' to 'glance' -2013-01-30T11:13:18 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[keystone_authtoken/admin_password]/value) value changed '%SERVICE_PASSWORD%' to 'nova' -2013-01-30T11:13:18 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[paste_deploy/flavor]/ensure) created -2013-01-30T11:13:18 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[keystone_authtoken/signing_dirname]/ensure) created -2013-01-30T11:13:18 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[DEFAULT/sql_connection]/value) value changed 'mysql://glance:glance@localhost/glance' to 'mysql://glance:nova@192.168.0.6/glance' -2013-01-30T11:13:18 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[DEFAULT/debug]/value) value changed 'False' to 'true' -2013-01-30T11:13:18 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[DEFAULT/verbose]/value) value changed 'True' to 'true' -2013-01-30T11:13:18 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[keystone_authtoken/admin_tenant_name]/value) value changed '%SERVICE_TENANT_NAME%' to 'services' -2013-01-30T11:13:18 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[keystone_authtoken/admin_user]/value) value changed '%SERVICE_USER%' to 'glance' -2013-01-30T11:13:18 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6000]/Concat[/etc/swift/object-server.conf]/File[/var/lib/puppet/concat/_etc_swift_object-server.conf/fragments.concat]/ensure) created -2013-01-30T11:13:18 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6000]/Concat[/etc/swift/object-server.conf]/Exec[concat_/etc/swift/object-server.conf]/returns) executed successfully -2013-01-30T11:13:19 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6000]/Concat[/etc/swift/object-server.conf]/Exec[concat_/etc/swift/object-server.conf]) Triggered 'refresh' from 3 events -2013-01-30T11:13:19 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6000]/Concat[/etc/swift/object-server.conf]/File[/etc/swift/object-server.conf]/content) content changed '{md5}bd9ae72e0cc70c89655071d96b32b172' to '{md5}d9963f6c96a2e062ca131508db7a2158' -2013-01-30T11:13:19 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6000]/Concat[/etc/swift/object-server.conf]/File[/etc/swift/object-server.conf]/owner) owner changed 'root' to 'swift' -2013-01-30T11:13:19 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6000]/Concat[/etc/swift/object-server.conf]/File[/etc/swift/object-server.conf]/mode) mode changed '0660' to '0640' -2013-01-30T11:13:19 notice: (/Stage[main]/Swift::Storage::Object/Swift::Storage::Generic[object]/Service[swift-object]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:13:19 notice: (/Stage[main]/Swift::Storage::Object/Swift::Storage::Generic[object]/Service[swift-object]) Triggered 'refresh' from 2 events -2013-01-30T11:13:20 err: (/Service[swift-object-replicator]/ensure) change from stopped to running failed: Could not start Service[swift-object-replicator]: Execution of '/usr/bin/swift-init object-replicator start' returned 1: at /etc/puppet/modules/swift/manifests/storage/generic.pp:61 -2013-01-30T11:13:20 notice: (/Service[swift-object-replicator]) Triggered 'refresh' from 2 events -2013-01-30T11:13:20 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/verbose]/ensure) created -2013-01-30T11:13:21 notice: (/Stage[main]/Keystone/Exec[keystone-manage db_sync]) Triggered 'refresh' from 11 events -2013-01-30T11:13:23 notice: (/Stage[main]/Keystone/Service[keystone]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:13:24 notice: (/Stage[main]/Keystone/Service[keystone]) Triggered 'refresh' from 13 events -2013-01-30T11:13:45 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/auth_url]/ensure) created -2013-01-30T11:13:45 notice: (/Stage[main]/Glance::Registry/Exec[glance-manage db_sync]) Triggered 'refresh' from 38 events -2013-01-30T11:13:46 notice: (/Stage[main]/Glance::Registry/Service[glance-registry]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:13:46 notice: (/Stage[main]/Glance::Registry/Service[glance-registry]) Triggered 'refresh' from 13 events -2013-01-30T11:13:47 notice: (/Stage[main]/Glance::Api/Service[glance-api]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:13:47 notice: (/Stage[main]/Glance::Api/Service[glance-api]) Triggered 'refresh' from 29 events -2013-01-30T11:13:48 notice: (/Stage[main]/Nova/Exec[post-nova_config]/returns) Nova config has changed -2013-01-30T11:13:48 notice: (/Stage[main]/Nova/Exec[post-nova_config]) Triggered 'refresh' from 94 events -2013-01-30T11:13:50 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]/returns) 2013-01-30 11:13:49 DEBUG nova.utils [-] backend from (pid=8202) __get_backend /usr/lib/python2.6/site-packages/nova/utils.py:494 -2013-01-30T11:13:50 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]/returns) executed successfully -2013-01-30T11:13:51 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]/returns) 2013-01-30 11:13:51 DEBUG nova.utils [-] backend from (pid=8214) __get_backend /usr/lib/python2.6/site-packages/nova/utils.py:494 -2013-01-30T11:13:51 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]) Triggered 'refresh' from 2 events -2013-01-30T11:13:52 notice: (/Stage[main]/Nova::Cert/Nova::Generic_service[cert]/Service[nova-cert]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:13:52 notice: (/Stage[main]/Nova::Cert/Nova::Generic_service[cert]/Service[nova-cert]) Triggered 'refresh' from 3 events -2013-01-30T11:13:54 notice: (/Stage[main]/Nova::Vncproxy/Nova::Generic_service[vncproxy]/Service[nova-vncproxy]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:13:55 notice: (/Stage[main]/Nova::Vncproxy/Nova::Generic_service[vncproxy]/Service[nova-vncproxy]) Triggered 'refresh' from 4 events -2013-01-30T11:13:56 notice: (/Stage[main]/Nova::Objectstore/Nova::Generic_service[objectstore]/Service[nova-objectstore]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:13:57 notice: (/Stage[main]/Nova::Objectstore/Nova::Generic_service[objectstore]/Service[nova-objectstore]) Triggered 'refresh' from 3 events -2013-01-30T11:13:59 notice: (/Stage[main]/Nova::Consoleauth/Nova::Generic_service[consoleauth]/Service[nova-consoleauth]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:13:59 notice: (/Stage[main]/Nova::Consoleauth/Nova::Generic_service[consoleauth]/Service[nova-consoleauth]) Triggered 'refresh' from 4 events -2013-01-30T11:14:00 notice: (/Stage[main]/Nova::Api/Nova::Generic_service[api]/Service[nova-api]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:14:01 notice: (/Stage[main]/Nova::Api/Nova::Generic_service[api]/Service[nova-api]) Triggered 'refresh' from 51 events -2013-01-30T11:14:02 notice: (/Stage[main]/Nova::Scheduler/Nova::Generic_service[scheduler]/Service[nova-scheduler]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:14:03 notice: (/Stage[main]/Nova::Scheduler/Nova::Generic_service[scheduler]/Service[nova-scheduler]) Triggered 'refresh' from 3 events -2013-01-30T11:14:07 notice: Finished catalog run in 802.32 seconds -SEPARATOR -2013-01-30T11:28:15 notice: Reopening log files -2013-01-30T11:29:44 notice: (/Stage[main]/Openstack::Firewall/Exec[startup-firewall]/returns) executed successfully -2013-01-30T11:29:45 notice: (/Stage[main]/Openstack::Controller_ha/Exec[up-private-interface]/returns) executed successfully -2013-01-30T11:29:45 notice: (/Stage[main]/Openstack::Controller_ha/Exec[up-internal-interface]/returns) executed successfully -2013-01-30T11:29:45 notice: (/Stage[main]/Openstack::Controller_ha/Exec[up-public-interface]/returns) executed successfully -2013-01-30T11:30:19 notice: (/Stage[main]/Swift::Storage::Object/Swift::Storage::Generic[object]/File[/etc/swift/object-server/]/owner) owner changed 'root' to 'swift' -2013-01-30T11:30:19 notice: (/Stage[main]/Swift::Storage::Object/Swift::Storage::Generic[object]/File[/etc/swift/object-server/]/group) group changed 'root' to 'swift' -2013-01-30T11:30:19 notice: (/Stage[main]/Swift::Storage::Account/Swift::Storage::Generic[account]/File[/etc/swift/account-server/]/owner) owner changed 'root' to 'swift' -2013-01-30T11:30:19 notice: (/Stage[main]/Swift::Storage::Account/Swift::Storage::Generic[account]/File[/etc/swift/account-server/]/group) group changed 'root' to 'swift' -2013-01-30T11:30:20 err: (/Service[swift-container-replicator]/ensure) change from stopped to running failed: Could not start Service[swift-container-replicator]: Execution of '/usr/bin/swift-init container-replicator start' returned 1: at /etc/puppet/modules/swift/manifests/storage/generic.pp:61 -2013-01-30T11:30:21 notice: (/Stage[main]/Swift::Proxy/Service[swift-proxy]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:30:22 notice: (/Stage[main]/Rabbitmq::Server/Package[qpid-cpp-server]/ensure) created -2013-01-30T11:30:23 err: (/Service[swift-account-replicator]/ensure) change from stopped to running failed: Could not start Service[swift-account-replicator]: Execution of '/usr/bin/swift-init account-replicator start' returned 1: at /etc/puppet/modules/swift/manifests/storage/generic.pp:61 -2013-01-30T11:30:25 notice: (/Stage[main]/Galera/File[/tmp/wsrep-init-file]/ensure) created -2013-01-30T11:30:25 notice: (/Stage[main]/Galera/Exec[rm-init-file]/returns) executed successfully -2013-01-30T11:30:35 notice: (/Stage[main]/Galera/Exec[wait-for-synced-state]/returns) executed successfully -2013-01-30T11:30:35 notice: (/Stage[main]/Openstack::Controller_ha/Exec[wait-for-haproxy-mysql-backend]/returns) executed successfully -2013-01-30T11:30:41 err: (/Service[swift-object-replicator]/ensure) change from stopped to running failed: Could not start Service[swift-object-replicator]: Execution of '/usr/bin/swift-init object-replicator start' returned 1: at /etc/puppet/modules/swift/manifests/storage/generic.pp:61 -2013-01-30T11:30:51 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]/returns) 2013-01-30 11:30:50 DEBUG nova.utils [-] backend from (pid=19300) __get_backend /usr/lib/python2.6/site-packages/nova/utils.py:494 -2013-01-30T11:30:51 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]/returns) executed successfully -2013-01-30T11:30:51 notice: (/Stage[main]/Nova::Cert/Nova::Generic_service[cert]/Service[nova-cert]) Triggered 'refresh' from 1 events -2013-01-30T11:30:52 notice: (/Stage[main]/Nova::Vncproxy/Nova::Generic_service[vncproxy]/Service[nova-vncproxy]) Triggered 'refresh' from 1 events -2013-01-30T11:30:54 notice: (/Stage[main]/Nova::Objectstore/Nova::Generic_service[objectstore]/Service[nova-objectstore]) Triggered 'refresh' from 1 events -2013-01-30T11:30:56 notice: (/Stage[main]/Nova::Consoleauth/Nova::Generic_service[consoleauth]/Service[nova-consoleauth]) Triggered 'refresh' from 1 events -2013-01-30T11:30:58 notice: (/Stage[main]/Nova::Api/Nova::Generic_service[api]/Service[nova-api]) Triggered 'refresh' from 1 events -2013-01-30T11:30:59 notice: (/Stage[main]/Nova::Scheduler/Nova::Generic_service[scheduler]/Service[nova-scheduler]) Triggered 'refresh' from 1 events -2013-01-30T11:31:03 notice: Finished catalog run in 81.92 seconds -SEPARATOR -2013-01-30T11:40:36 notice: Reopening log files -2013-01-30T11:42:01 notice: (/Stage[main]/Openstack::Firewall/Exec[startup-firewall]/returns) executed successfully -2013-01-30T11:42:01 notice: (/Stage[main]/Openstack::Controller_ha/Exec[up-private-interface]/returns) executed successfully -2013-01-30T11:42:02 notice: (/Stage[main]/Openstack::Controller_ha/Exec[up-internal-interface]/returns) executed successfully -2013-01-30T11:42:02 notice: (/Stage[main]/Openstack::Controller_ha/Exec[up-public-interface]/returns) executed successfully -2013-01-30T11:42:24 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Ringsync[account]/Rsync::Get[/etc/swift/account.ring.gz]/Exec[rsync /etc/swift/account.ring.gz]/returns) executed successfully -2013-01-30T11:42:44 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Ringsync[object]/Rsync::Get[/etc/swift/object.ring.gz]/Exec[rsync /etc/swift/object.ring.gz]/returns) executed successfully -2013-01-30T11:43:06 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Ringsync[container]/Rsync::Get[/etc/swift/container.ring.gz]/Exec[rsync /etc/swift/container.ring.gz]/returns) executed successfully -2013-01-30T11:43:07 notice: (/Service[swift-container-replicator]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:43:08 notice: (/Stage[main]/Swift::Proxy/Service[swift-proxy]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:43:09 notice: (/Stage[main]/Swift::Proxy/Service[swift-proxy]) Triggered 'refresh' from 3 events -2013-01-30T11:43:09 notice: (/Stage[main]/Rabbitmq::Server/Package[qpid-cpp-server]/ensure) created -2013-01-30T11:43:11 notice: (/Service[swift-account-replicator]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:43:13 notice: (/Stage[main]/Galera/File[/tmp/wsrep-init-file]/ensure) created -2013-01-30T11:43:13 notice: (/Stage[main]/Galera/Exec[rm-init-file]/returns) executed successfully -2013-01-30T11:43:23 notice: (/Stage[main]/Galera/Exec[wait-for-synced-state]/returns) executed successfully -2013-01-30T11:43:23 notice: (/Stage[main]/Openstack::Controller_ha/Exec[wait-for-haproxy-mysql-backend]/returns) executed successfully -2013-01-30T11:43:30 notice: (/Service[swift-object-replicator]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:43:42 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]/returns) 2013-01-30 11:43:41 DEBUG nova.utils [-] backend from (pid=21513) __get_backend /usr/lib/python2.6/site-packages/nova/utils.py:494 -2013-01-30T11:43:42 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]/returns) executed successfully -2013-01-30T11:43:42 notice: (/Stage[main]/Nova::Cert/Nova::Generic_service[cert]/Service[nova-cert]) Triggered 'refresh' from 1 events -2013-01-30T11:43:43 notice: (/Stage[main]/Nova::Vncproxy/Nova::Generic_service[vncproxy]/Service[nova-vncproxy]) Triggered 'refresh' from 1 events -2013-01-30T11:43:45 notice: (/Stage[main]/Nova::Objectstore/Nova::Generic_service[objectstore]/Service[nova-objectstore]) Triggered 'refresh' from 1 events -2013-01-30T11:43:47 notice: (/Stage[main]/Nova::Consoleauth/Nova::Generic_service[consoleauth]/Service[nova-consoleauth]) Triggered 'refresh' from 1 events -2013-01-30T11:43:49 notice: (/Stage[main]/Nova::Api/Nova::Generic_service[api]/Service[nova-api]) Triggered 'refresh' from 1 events -2013-01-30T11:43:51 notice: (/Stage[main]/Nova::Scheduler/Nova::Generic_service[scheduler]/Service[nova-scheduler]) Triggered 'refresh' from 1 events -2013-01-30T11:43:54 notice: Finished catalog run in 116.05 seconds diff --git a/spec/example-logs/puppet-agent.log.ha.contr.3 b/spec/example-logs/puppet-agent.log.ha.contr.3 deleted file mode 100644 index 0cc96d8d..00000000 --- a/spec/example-logs/puppet-agent.log.ha.contr.3 +++ /dev/null @@ -1,450 +0,0 @@ -2013-01-30T11:14:18 notice: Reopening log files -2013-01-30T11:15:05 notice: (/Stage[main]/Nova::Utilities/Package[euca2ools]/ensure) created -2013-01-30T11:15:05 notice: (/Stage[main]/Concat::Setup/File[/var/lib/puppet/concat]/ensure) created -2013-01-30T11:15:09 notice: (/Stage[main]/Mysql::Python/Package[python-mysqldb]/ensure) created -2013-01-30T11:15:09 notice: (/Stage[main]/Concat::Setup/File[/var/lib/puppet/concat/bin]/ensure) created -2013-01-30T11:15:10 notice: (/Stage[main]/Concat::Setup/File[/var/lib/puppet/concat/bin/concatfragments.sh]/ensure) defined content as '{md5}256169ee61115a6b717b2844d2ea3128' -2013-01-30T11:15:12 notice: (/Stage[main]/Nova::Utilities/Package[screen]/ensure) created -2013-01-30T11:15:15 notice: (/Stage[main]/Xinetd/Package[xinetd]/ensure) created -2013-01-30T11:15:16 notice: (/Stage[main]/Memcached/User[memcached]/ensure) created -2013-01-30T11:15:19 notice: (/Stage[main]/Memcached/Package[memcached]/ensure) created -2013-01-30T11:15:19 notice: (/Stage[main]/Memcached/File[/etc/sysconfig/memcached]/content) content changed '{md5}05503957e3796fbe6fddd756a7a102a0' to '{md5}3a3961445528bdeda6d7b8b5564dfcfc' -2013-01-30T11:15:20 notice: (/Stage[main]/Memcached/Service[memcached]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:15:20 notice: (/Stage[main]/Memcached/Service[memcached]) Triggered 'refresh' from 1 events -2013-01-30T11:15:20 notice: (/Stage[main]/Osnailyfacter::Test_controller/File[/tmp/controller-file]/ensure) defined content as '{md5}7f5c51282c4b1242e12addba8cc331fa' -2013-01-30T11:15:27 notice: (/Stage[main]/Horizon/Package[mod_wsgi]/ensure) created -2013-01-30T11:15:31 notice: (/Stage[main]/Swift::Xfs/Package[xfsprogs]/ensure) created -2013-01-30T11:15:37 notice: (/Stage[main]/Nova::Utilities/Package[parted]/ensure) created -2013-01-30T11:15:37 notice: (/Stage[main]/Openstack::Firewall/File[iptables]/ensure) defined content as '{md5}7efd2b2c624fb433a1538c229ae20e1f' -2013-01-30T11:15:38 notice: (/Stage[main]/Openstack::Firewall/Exec[startup-firewall]/returns) executed successfully -2013-01-30T11:16:05 notice: (/Stage[main]/Keystone::Python/Package[python-keystone]/ensure) created -2013-01-30T11:16:15 notice: (/Stage[main]/Openstack::Glance/Package[swift]/ensure) created -2013-01-30T11:17:26 notice: (/Stage[main]/Nova::Api/Nova::Generic_service[api]/Package[nova-api]/ensure) created -2013-01-30T11:17:27 notice: (/Stage[main]/Openstack::Swift::Proxy/File[/tmp/swift_keystone_test.rb]/ensure) defined content as '{md5}9921c28fffe90ef152603443c7a9a4d3' -2013-01-30T11:17:31 notice: (/Stage[main]/Nova/Package[python-amqp]/ensure) created -2013-01-30T11:17:31 notice: (/Stage[main]/Swift/File[/var/lib/swift]/ensure) created -2013-01-30T11:17:31 notice: (/Stage[main]/Swift/File[/etc/swift]/owner) owner changed 'root' to 'swift' -2013-01-30T11:17:31 notice: (/Stage[main]/Swift/File[/etc/swift]/group) group changed 'root' to 'swift' -2013-01-30T11:17:31 notice: (/Stage[main]/Swift/File[/etc/swift]/mode) mode changed '0755' to '2770' -2013-01-30T11:17:31 notice: (/Stage[main]/Swift/File[/etc/swift/swift.conf]/content) content changed '{md5}5f2a4640b3293fedc9e8e249408f3044' to '{md5}32a608237a8eeb3fb48db3fda8a239e0' -2013-01-30T11:17:31 notice: (/Stage[main]/Swift/File[/etc/swift/swift.conf]/owner) owner changed 'root' to 'swift' -2013-01-30T11:17:31 notice: (/Stage[main]/Swift/File[/var/cache/swift]/ensure) created -2013-01-30T11:17:31 notice: (/Stage[main]/Swift/File[/var/run/swift]/group) group changed 'root' to 'swift' -2013-01-30T11:17:32 notice: (/Stage[main]/Xinetd/File[/etc/xinetd.conf]/content) content changed '{md5}9ff8cc688dd9f0dfc45e5afd25c427a7' to '{md5}1680192de4cef61a23dca13cdfff07c7' -2013-01-30T11:17:32 notice: (/Stage[main]/Xinetd/File[/etc/xinetd.conf]/owner) owner changed 'root' to 'swift' -2013-01-30T11:17:32 notice: (/Stage[main]/Xinetd/File[/etc/xinetd.conf]/group) group changed 'root' to 'swift' -2013-01-30T11:17:32 notice: (/Stage[main]/Xinetd/File[/etc/xinetd.conf]/mode) mode changed '0600' to '0664' -2013-01-30T11:17:36 notice: (/Stage[main]/Nova::Utilities/Package[unzip]/ensure) created -2013-01-30T11:17:36 notice: (/Stage[main]/Openstack::Auth_file/File[/root/openrc]/ensure) defined content as '{md5}70358e4313c4c6852303bf9d0f24fb81' -2013-01-30T11:17:53 notice: (/Stage[main]/Horizon/Package[openstack-dashboard]/ensure) created -2013-01-30T11:17:53 notice: (/Stage[main]/Horizon/File[/var/log/horizon]/ensure) created -2013-01-30T11:17:53 notice: (/Stage[main]/Horizon/File_line[horizon_redirect_rule]/ensure) created -2013-01-30T11:17:55 notice: (/Stage[main]/Openstack::Controller_ha/Package[socat]/ensure) created -2013-01-30T11:17:55 notice: (/Stage[main]/Haproxy/Concat[/etc/haproxy/haproxy.cfg]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg]/ensure) created -2013-01-30T11:17:55 notice: (/Stage[main]/Haproxy/Concat[/etc/haproxy/haproxy.cfg]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments]/ensure) created -2013-01-30T11:17:55 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[mysqld]/Haproxy::Balancermember[mysqld]/Concat::Fragment[mysqld_balancermember_mysqld]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/95-mysqld_mysqld_mysqld_balancermember_mysqld]/ensure) created -2013-01-30T11:17:55 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[glance-api]/Haproxy::Balancermember[glance-api]/Concat::Fragment[glance-api_balancermember_glance-api]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/80-glance-api_glance-api_glance-api_balancermember_glance-api]/ensure) created -2013-01-30T11:17:56 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[nova-api-1]/Haproxy::Balancermember[nova-api-1]/Concat::Fragment[nova-api-1_balancermember_nova-api-1]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/40-nova-api-1_nova-api-1_nova-api-1_balancermember_nova-api-1]/ensure) created -2013-01-30T11:17:56 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[quantum]/Haproxy::Balancermember[quantum]/Concat::Fragment[quantum_balancermember_quantum]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/85-quantum_quantum_quantum_balancermember_quantum]/ensure) created -2013-01-30T11:17:56 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[glance-reg]/Haproxy::Balancermember[glance-reg]/Concat::Fragment[glance-reg_balancermember_glance-reg]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/90-glance-reg_glance-reg_glance-reg_balancermember_glance-reg]/ensure) created -2013-01-30T11:17:56 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[nova-api-1]/Haproxy::Listen[nova-api-1]/Concat::Fragment[nova-api-1-listen_block]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/39-nova-api-1_nova-api-1-listen_block]/ensure) created -2013-01-30T11:17:56 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[mysqld]/Haproxy::Listen[mysqld]/Concat::Fragment[mysqld-listen_block]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/94-mysqld_mysqld-listen_block]/ensure) created -2013-01-30T11:17:56 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[swift]/Haproxy::Listen[swift]/Concat::Fragment[swift-listen_block]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/95-swift_swift-listen_block]/ensure) created -2013-01-30T11:17:56 notice: (/Stage[main]/Haproxy/Concat[/etc/haproxy/haproxy.cfg]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments.concat]/ensure) created -2013-01-30T11:17:56 notice: (/Stage[main]/Haproxy/Concat::Fragment[haproxy-base]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/10_haproxy-base]/ensure) created -2013-01-30T11:17:56 notice: (/Stage[main]/Haproxy/Concat::Fragment[00-header]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/01_00-header]/ensure) created -2013-01-30T11:17:56 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[glance-api]/Haproxy::Listen[glance-api]/Concat::Fragment[glance-api-listen_block]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/79-glance-api_glance-api-listen_block]/ensure) created -2013-01-30T11:17:56 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[swift]/Haproxy::Balancermember[swift]/Concat::Fragment[swift_balancermember_swift]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/96-swift_swift_swift_balancermember_swift]/ensure) created -2013-01-30T11:17:56 notice: (/Stage[main]/Haproxy/Concat[/etc/haproxy/haproxy.cfg]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments.concat.out]/ensure) created -2013-01-30T11:17:56 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[nova-api-4]/Haproxy::Listen[nova-api-4]/Concat::Fragment[nova-api-4-listen_block]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/69-nova-api-4_nova-api-4-listen_block]/ensure) created -2013-01-30T11:17:56 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[nova-api-2]/Haproxy::Balancermember[nova-api-2]/Concat::Fragment[nova-api-2_balancermember_nova-api-2]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/50-nova-api-2_nova-api-2_nova-api-2_balancermember_nova-api-2]/ensure) created -2013-01-30T11:17:56 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[nova-api-2]/Haproxy::Listen[nova-api-2]/Concat::Fragment[nova-api-2-listen_block]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/49-nova-api-2_nova-api-2-listen_block]/ensure) created -2013-01-30T11:17:56 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[keystone-1]/Haproxy::Listen[keystone-1]/Concat::Fragment[keystone-1-listen_block]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/19-keystone-1_keystone-1-listen_block]/ensure) created -2013-01-30T11:17:56 notice: (/Stage[main]/Horizon/File[/etc/openstack-dashboard/local_settings]/content) content changed '{md5}d114fa06522fa1016ab2bdede4cfd7bf' to '{md5}6f16dcbc1a76f8ae51dd6fe7157af42d' -2013-01-30T11:17:56 notice: (/Stage[main]/Horizon/File[/etc/openstack-dashboard/local_settings]/owner) owner changed 'root' to 'apache' -2013-01-30T11:17:56 notice: (/Stage[main]/Horizon/File[/etc/openstack-dashboard/local_settings]/group) group changed 'root' to 'apache' -2013-01-30T11:17:56 notice: (/Stage[main]/Swift/File[/home/swift]/ensure) created -2013-01-30T11:18:02 notice: (/Stage[main]/Nova::Vncproxy/Package[python-numpy]/ensure) created -2013-01-30T11:19:24 notice: (/Stage[main]/Nova::Utilities/Package[libguestfs-tools-c]/ensure) created -2013-01-30T11:19:24 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6001]/Concat[/etc/swift/container-server.conf]/File[/var/lib/puppet/concat/_etc_swift_container-server.conf]/ensure) created -2013-01-30T11:19:24 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6001]/Concat[/etc/swift/container-server.conf]/File[/var/lib/puppet/concat/_etc_swift_container-server.conf/fragments]/ensure) created -2013-01-30T11:19:24 notice: (/Stage[main]/Swift::Storage::All/File[/srv/node]/ensure) created -2013-01-30T11:19:24 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6001]/Concat[/etc/swift/container-server.conf]/File[/var/lib/puppet/concat/_etc_swift_container-server.conf/fragments.concat]/ensure) created -2013-01-30T11:19:24 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6002]/Concat[/etc/swift/account-server.conf]/File[/var/lib/puppet/concat/_etc_swift_account-server.conf]/ensure) created -2013-01-30T11:19:24 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6002]/Concat[/etc/swift/account-server.conf]/File[/var/lib/puppet/concat/_etc_swift_account-server.conf/fragments.concat]/ensure) created -2013-01-30T11:19:24 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6002]/Concat[/etc/swift/account-server.conf]/File[/var/lib/puppet/concat/_etc_swift_account-server.conf/fragments.concat.out]/ensure) created -2013-01-30T11:19:24 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6002]/Concat[/etc/swift/account-server.conf]/File[/var/lib/puppet/concat/_etc_swift_account-server.conf/fragments]/ensure) created -2013-01-30T11:19:24 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6002]/Concat::Fragment[swift-account-6002]/File[/var/lib/puppet/concat/_etc_swift_account-server.conf/fragments/00_swift-account-6002]/ensure) created -2013-01-30T11:19:25 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6001]/Concat[/etc/swift/container-server.conf]/File[/var/lib/puppet/concat/_etc_swift_container-server.conf/fragments.concat.out]/ensure) created -2013-01-30T11:19:25 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[keystone-2]/Haproxy::Balancermember[keystone-2]/Concat::Fragment[keystone-2_balancermember_keystone-2]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/30-keystone-2_keystone-2_keystone-2_balancermember_keystone-2]/ensure) created -2013-01-30T11:19:35 notice: (/Stage[main]/Rsync::Server/File[/etc/rsync.d]/ensure) created -2013-01-30T11:19:35 notice: (/Stage[main]/Rsync::Server/File[/etc/rsync.d/header]/ensure) defined content as '{md5}81c93e6021cb444faaac0cd902198ce2' -2013-01-30T11:19:35 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6001]/Rsync::Server::Module[container]/File[/etc/rsync.d/frag-container]/ensure) defined content as '{md5}f34ae17bc92c6dac2f9e4535cc52d6f4' -2013-01-30T11:19:35 notice: (/Stage[main]/Openstack::Controller_ha/Keepalived_dhcp_hook[eth0.102]/File[/etc/dhcp/dhclient-eth0.102-down-hooks]/ensure) defined content as '{md5}d5bdb51453a200b5822441bcc6072cae' -2013-01-30T11:19:45 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6000]/Concat[/etc/swift/object-server.conf]/File[/var/lib/puppet/concat/_etc_swift_object-server.conf]/ensure) created -2013-01-30T11:19:45 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6000]/Concat[/etc/swift/object-server.conf]/File[/var/lib/puppet/concat/_etc_swift_object-server.conf/fragments]/ensure) created -2013-01-30T11:19:45 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6000]/Concat[/etc/swift/object-server.conf]/File[/var/lib/puppet/concat/_etc_swift_object-server.conf/fragments.concat.out]/ensure) created -2013-01-30T11:19:45 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6000]/Concat::Fragment[swift-object-6000]/File[/var/lib/puppet/concat/_etc_swift_object-server.conf/fragments/00_swift-object-6000]/ensure) created -2013-01-30T11:19:45 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6000]/Rsync::Server::Module[object]/File[/etc/rsync.d/frag-object]/ensure) defined content as '{md5}6599fe18f7573876515cdb791157facc' -2013-01-30T11:19:45 notice: (/Stage[main]/Nova::Network/Sysctl::Value[net.ipv4.ip_forward]/Sysctl[net.ipv4.ip_forward]/val) val changed '0' to '1' -2013-01-30T11:19:45 notice: (/Stage[main]/Openstack::Controller_ha/Keepalived_dhcp_hook[eth0.101]/File[/etc/dhcp/dhclient-eth0.101-down-hooks]/ensure) defined content as '{md5}150162dde6c8e637d6192de84fd26fde' -2013-01-30T11:19:45 notice: (/Stage[main]/Openstack::Controller_ha/Keepalived_dhcp_hook[eth0.101]/File[/etc/dhcp/dhclient-eth0.101-up-hooks]/ensure) defined content as '{md5}beeb771a9fc99bc9f3b01258a2c947a2' -2013-01-30T11:19:45 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6001]/Concat::Fragment[swift-container-6001]/File[/var/lib/puppet/concat/_etc_swift_container-server.conf/fragments/00_swift-container-6001]/ensure) created -2013-01-30T11:19:45 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6001]/Concat[/etc/swift/container-server.conf]/Exec[concat_/etc/swift/container-server.conf]/returns) executed successfully -2013-01-30T11:19:45 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6001]/Concat[/etc/swift/container-server.conf]/Exec[concat_/etc/swift/container-server.conf]) Triggered 'refresh' from 3 events -2013-01-30T11:19:45 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6001]/Concat[/etc/swift/container-server.conf]/File[/etc/swift/container-server.conf]/ensure) defined content as '{md5}5b79511c6c52bc963aa08f0a3e60654e' -2013-01-30T11:19:45 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[keystone-2]/Haproxy::Listen[keystone-2]/Concat::Fragment[keystone-2-listen_block]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/29-keystone-2_keystone-2-listen_block]/ensure) created -2013-01-30T11:19:46 notice: (/Stage[main]/Nova::Network/Sysctl::Value[net.ipv4.ip_forward]/Exec[exec_sysctl_net.ipv4.ip_forward]/returns) net.ipv4.ip_forward = 1 -2013-01-30T11:19:46 notice: (/Stage[main]/Nova::Network/Sysctl::Value[net.ipv4.ip_forward]/Exec[exec_sysctl_net.ipv4.ip_forward]/returns) executed successfully -2013-01-30T11:19:46 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/File[/srv/loopback-device]/ensure) created -2013-01-30T11:19:46 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[horizon]/Haproxy::Listen[horizon]/Concat::Fragment[horizon-listen_block]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/14-horizon_horizon-listen_block]/ensure) created -2013-01-30T11:19:46 notice: (/Stage[main]/Rsync::Server/Xinetd::Service[rsync]/File[/etc/xinetd.d/rsync]/content) content changed '{md5}fd32314f3157aaf15712e6da7758060d' to '{md5}b5745641b26d03ebddd24b143319f385' -2013-01-30T11:19:46 notice: (/Stage[main]/Rsync::Server/Xinetd::Service[rsync]/File[/etc/xinetd.d/rsync]/owner) owner changed 'root' to 'swift' -2013-01-30T11:19:46 notice: (/Stage[main]/Rsync::Server/Xinetd::Service[rsync]/File[/etc/xinetd.d/rsync]/group) group changed 'root' to 'swift' -2013-01-30T11:19:46 notice: (/Stage[main]/Xinetd/Service[xinetd]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:19:46 notice: (/Stage[main]/Xinetd/Service[xinetd]) Triggered 'refresh' from 3 events -2013-01-30T11:19:46 notice: (/Stage[main]/Horizon/File_line[httpd_listen_on_internal_network_only]/ensure) created -2013-01-30T11:19:46 notice: (/Stage[main]/Horizon/Service[$::horizon::params::http_service]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:19:48 notice: (/Stage[main]/Horizon/Service[$::horizon::params::http_service]) Triggered 'refresh' from 6 events -2013-01-30T11:19:48 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Exec[create_partition-1]/returns) 0+0 records in -2013-01-30T11:19:48 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Exec[create_partition-1]/returns) 0+0 records out -2013-01-30T11:19:48 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Exec[create_partition-1]/returns) 0 bytes (0 B) copied, 1.487e-05 s, 0.0 kB/s -2013-01-30T11:19:48 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Exec[create_partition-1]/returns) executed successfully -2013-01-30T11:19:48 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Exec[mkfs-1]/returns) meta-data=/srv/loopback-device/1 isize=1024 agcount=4, agsize=65548 blks -2013-01-30T11:19:48 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Exec[mkfs-1]/returns) = sectsz=512 attr=2 -2013-01-30T11:19:48 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Exec[mkfs-1]/returns) data = bsize=4096 blocks=262189, imaxpct=25 -2013-01-30T11:19:48 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Exec[mkfs-1]/returns) = sunit=0 swidth=0 blks -2013-01-30T11:19:48 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Exec[mkfs-1]/returns) naming =version 2 bsize=4096 ascii-ci=0 -2013-01-30T11:19:48 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Exec[mkfs-1]/returns) log =internal log bsize=4096 blocks=2560, version=2 -2013-01-30T11:19:48 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Exec[mkfs-1]/returns) = sectsz=512 sunit=0 blks, lazy-count=1 -2013-01-30T11:19:48 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Exec[mkfs-1]/returns) realtime =none extsz=4096 blocks=0, rtextents=0 -2013-01-30T11:19:48 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Exec[mkfs-1]) Triggered 'refresh' from 1 events -2013-01-30T11:19:48 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Swift::Storage::Mount[1]/File[/srv/node/1]/ensure) created -2013-01-30T11:19:49 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Swift::Storage::Mount[1]/Mount[/srv/node/1]/ensure) defined 'ensure' as 'defined' -2013-01-30T11:19:49 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Swift::Storage::Mount[1]/Mount[/srv/node/1]) Triggered 'refresh' from 2 events -2013-01-30T11:19:49 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Swift::Storage::Mount[1]/Exec[mount_1]/returns) executed successfully -2013-01-30T11:19:50 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Swift::Storage::Mount[1]/Exec[mount_1]) Triggered 'refresh' from 1 events -2013-01-30T11:19:50 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[1]/Swift::Storage::Xfs[1]/Swift::Storage::Mount[1]/Exec[fix_mount_permissions_1]) Triggered 'refresh' from 3 events -2013-01-30T11:19:50 notice: (/Stage[main]/Glance/Group[glance]/ensure) created -2013-01-30T11:19:50 notice: (/Stage[main]/Glance/User[glance]/ensure) created -2013-01-30T11:19:56 notice: (/Stage[main]/Glance/Package[glance]/ensure) created -2013-01-30T11:19:56 notice: (/Stage[main]/Glance::Backend::Swift/Glance_api_config[DEFAULT/swift_store_auth_address]/value) value changed '127.0.0.1:5000/v2.0/' to 'http://192.168.0.6:5000/v2.0/' -2013-01-30T11:19:56 notice: (/Stage[main]/Glance::Api/Glance_api_config[keystone_authtoken/signing_dirname]/ensure) created -2013-01-30T11:19:56 notice: (/Stage[main]/Glance::Api/Glance_api_config[DEFAULT/debug]/value) value changed 'False' to 'true' -2013-01-30T11:19:56 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/admin_user]/ensure) created -2013-01-30T11:19:56 notice: (/Stage[main]/Glance::Api/Glance_api_config[DEFAULT/sql_connection]/value) value changed 'mysql://glance:glance@localhost/glance' to 'mysql://glance:nova@192.168.0.6/glance' -2013-01-30T11:19:56 notice: (/Stage[main]/Glance::Api/Glance_api_config[DEFAULT/bind_host]/value) value changed '0.0.0.0' to '192.168.0.4' -2013-01-30T11:19:56 notice: (/Stage[main]/Glance::Backend::Swift/Glance_api_config[DEFAULT/default_store]/value) value changed 'file' to 'swift' -2013-01-30T11:19:56 notice: (/Stage[main]/Glance::Backend::Swift/Glance_api_config[DEFAULT/swift_store_create_container_on_put]/value) value changed 'False' to 'True' -2013-01-30T11:19:56 notice: (/Stage[main]/Glance::Api/Glance_api_config[paste_deploy/flavor]/ensure) created -2013-01-30T11:19:56 notice: (/Stage[main]/Glance::Backend::Swift/Glance_api_config[DEFAULT/swift_store_user]/value) value changed 'jdoe:jdoe' to 'services:glance' -2013-01-30T11:19:56 notice: (/Stage[main]/Glance::Api/Glance_api_config[keystone_authtoken/auth_host]/value) value changed '127.0.0.1' to '192.168.0.6' -2013-01-30T11:19:56 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/verbose]/value) value changed 'True' to 'true' -2013-01-30T11:19:56 notice: (/Stage[main]/Glance::Api/Glance_api_config[keystone_authtoken/admin_password]/value) value changed '%SERVICE_PASSWORD%' to 'nova' -2013-01-30T11:19:56 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/admin_tenant_name]/ensure) created -2013-01-30T11:19:56 notice: (/Stage[main]/Glance::Api/Glance_api_config[keystone_authtoken/admin_tenant_name]/value) value changed '%SERVICE_TENANT_NAME%' to 'services' -2013-01-30T11:19:56 notice: (/Stage[main]/Glance::Backend::Swift/Glance_api_config[DEFAULT/swift_store_key]/value) value changed 'a86850deb2742ec3cb41518e26aa2d89' to 'nova' -2013-01-30T11:19:56 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/admin_password]/ensure) created -2013-01-30T11:19:56 notice: (/Stage[main]/Glance::Api/Glance_api_config[DEFAULT/registry_host]/value) value changed '0.0.0.0' to '192.168.0.6' -2013-01-30T11:19:56 notice: (/Stage[main]/Glance::Api/Glance_api_config[keystone_authtoken/auth_uri]/ensure) created -2013-01-30T11:19:56 notice: (/Stage[main]/Glance/File[/etc/glance/]/owner) owner changed 'root' to 'glance' -2013-01-30T11:19:56 notice: (/Stage[main]/Glance/File[/etc/glance/]/mode) mode changed '0755' to '0770' -2013-01-30T11:19:56 notice: (/Stage[main]/Glance::Api/Glance_api_config[keystone_authtoken/admin_user]/value) value changed '%SERVICE_USER%' to 'glance' -2013-01-30T11:19:56 notice: (/Stage[main]/Glance::Api/Glance_api_config[keystone_authtoken/signing_dir]/ensure) created -2013-01-30T11:19:56 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/registry_host]/value) value changed '0.0.0.0' to '192.168.0.6' -2013-01-30T11:19:57 notice: (/Stage[main]/Glance/File[glance-logging.conf]/ensure) defined content as '{md5}71fa2daa8e89a992f4225e850fd879e4' -2013-01-30T11:19:57 notice: (/Stage[main]/Glance::Api/File[/etc/glance/glance-cache.conf]/owner) owner changed 'root' to 'glance' -2013-01-30T11:19:57 notice: (/Stage[main]/Glance::Api/File[/etc/glance/glance-api.conf]/owner) owner changed 'root' to 'glance' -2013-01-30T11:19:57 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/debug]/value) value changed 'False' to 'true' -2013-01-30T11:19:57 notice: (/Stage[main]/Glance::Api/Glance_api_config[DEFAULT/verbose]/value) value changed 'True' to 'true' -2013-01-30T11:20:00 notice: (/Stage[main]/Keepalived::Install/Package[keepalived]/ensure) created -2013-01-30T11:20:00 notice: (/Stage[main]/Keepalived::Config/Concat[/etc/keepalived/keepalived.conf]/File[/var/lib/puppet/concat/_etc_keepalived_keepalived.conf]/ensure) created -2013-01-30T11:20:00 notice: (/Stage[main]/Keepalived::Config/Concat[/etc/keepalived/keepalived.conf]/File[/var/lib/puppet/concat/_etc_keepalived_keepalived.conf/fragments]/ensure) created -2013-01-30T11:20:00 notice: (/Stage[main]/Openstack::Controller_ha/Keepalived::Instance[2]/Concat::Fragment[keepalived_2]/File[/var/lib/puppet/concat/_etc_keepalived_keepalived.conf/fragments/50_keepalived_2]/ensure) created -2013-01-30T11:20:00 notice: (/Stage[main]/Keepalived::Config/Concat[/etc/keepalived/keepalived.conf]/File[/var/lib/puppet/concat/_etc_keepalived_keepalived.conf/fragments.concat]/ensure) created -2013-01-30T11:20:00 notice: (/Stage[main]/Openstack::Controller_ha/Keepalived::Instance[1]/Concat::Fragment[keepalived_1]/File[/var/lib/puppet/concat/_etc_keepalived_keepalived.conf/fragments/50_keepalived_1]/ensure) created -2013-01-30T11:20:00 notice: (/Stage[main]/Keepalived::Config/Concat::Fragment[global_config]/File[/var/lib/puppet/concat/_etc_keepalived_keepalived.conf/fragments/01_global_config]/ensure) created -2013-01-30T11:20:00 notice: (/Stage[main]/Keepalived::Config/Concat[/etc/keepalived/keepalived.conf]/Exec[concat_/etc/keepalived/keepalived.conf]/returns) /var/lib/puppet/concat/bin/concatfragments.sh: line 108: [: too many arguments -2013-01-30T11:20:00 notice: (/Stage[main]/Keepalived::Config/Concat[/etc/keepalived/keepalived.conf]/Exec[concat_/etc/keepalived/keepalived.conf]/returns) executed successfully -2013-01-30T11:20:01 notice: (/Stage[main]/Keepalived::Config/Concat[/etc/keepalived/keepalived.conf]/Exec[concat_/etc/keepalived/keepalived.conf]) Triggered 'refresh' from 5 events -2013-01-30T11:20:01 notice: (/Stage[main]/Keepalived::Config/Concat[/etc/keepalived/keepalived.conf]/File[/etc/keepalived/keepalived.conf]/content) content changed '{md5}e79dca9e58978e8035e7d4ad25e2ce67' to '{md5}0f64db8e75be1d62a1c1894ea185f050' -2013-01-30T11:20:01 notice: (/Stage[main]/Keepalived::Config/Concat[/etc/keepalived/keepalived.conf]/File[/etc/keepalived/keepalived.conf]/mode) mode changed '0640' to '0644' -2013-01-30T11:20:01 notice: (/Stage[main]/Keepalived::Service/Service[keepalived]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:20:02 notice: (/Stage[main]/Keepalived::Service/Service[keepalived]) Triggered 'refresh' from 1 events -2013-01-30T11:20:02 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[keystone-1]/Haproxy::Balancermember[keystone-1]/Concat::Fragment[keystone-1_balancermember_keystone-1]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/20-keystone-1_keystone-1_keystone-1_balancermember_keystone-1]/ensure) created -2013-01-30T11:20:02 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[nova-api-4]/Haproxy::Balancermember[nova-api-4]/Concat::Fragment[nova-api-4_balancermember_nova-api-4]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/70-nova-api-4_nova-api-4_nova-api-4_balancermember_nova-api-4]/ensure) created -2013-01-30T11:20:12 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[quantum]/Haproxy::Listen[quantum]/Concat::Fragment[quantum-listen_block]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/84-quantum_quantum-listen_block]/ensure) created -2013-01-30T11:20:12 notice: (/Stage[main]/Swift::Storage::Object/Swift::Storage::Generic[object]/File[/etc/swift/object-server/]/ensure) created -2013-01-30T11:20:12 notice: (/Stage[main]/Swift::Storage::Account/Swift::Storage::Generic[account]/File[/etc/swift/account-server/]/ensure) created -2013-01-30T11:20:15 notice: (/Stage[main]/Swift::Storage::Account/Swift::Storage::Generic[account]/Package[swift-account]/ensure) created -2013-01-30T11:20:18 notice: (/Stage[main]/Swift::Storage::Container/Swift::Storage::Generic[container]/Package[swift-container]/ensure) created -2013-01-30T11:20:19 err: (/Service[swift-container-replicator]/ensure) change from stopped to running failed: Could not start Service[swift-container-replicator]: Execution of '/usr/bin/swift-init container-replicator start' returned 1: at /etc/puppet/modules/swift/manifests/storage/generic.pp:61 -2013-01-30T11:20:19 notice: (/Service[swift-container-replicator]) Triggered 'refresh' from 2 events -2013-01-30T11:20:19 notice: (/Stage[main]/Swift::Storage::Container/Swift::Storage::Generic[container]/File[/etc/swift/container-server/]/owner) owner changed 'root' to 'swift' -2013-01-30T11:20:19 notice: (/Stage[main]/Swift::Storage::Container/Swift::Storage::Generic[container]/File[/etc/swift/container-server/]/group) group changed 'root' to 'swift' -2013-01-30T11:20:21 notice: (/Stage[main]/Swift::Storage::Object/Swift::Storage::Generic[object]/Package[swift-object]/ensure) created -2013-01-30T11:20:22 notice: (/Stage[main]/Swift::Storage::Container/Swift::Storage::Generic[container]/Service[swift-container]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:20:22 notice: (/Stage[main]/Swift::Storage::Container/Swift::Storage::Generic[container]/Service[swift-container]) Triggered 'refresh' from 2 events -2013-01-30T11:20:25 notice: (/Stage[main]/Swift::Proxy/Package[swift-proxy]/ensure) created -2013-01-30T11:20:25 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf]/ensure) created -2013-01-30T11:20:25 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments.concat]/ensure) created -2013-01-30T11:20:25 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments.concat.out]/ensure) created -2013-01-30T11:20:25 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments]/ensure) created -2013-01-30T11:20:25 notice: (/Stage[main]/Swift::Proxy/Concat::Fragment[swift_proxy]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/00_swift_proxy]/ensure) created -2013-01-30T11:20:25 notice: (/Stage[main]/Swift::Proxy::S3token/Concat::Fragment[swift_s3token]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/28_swift_s3token]/ensure) created -2013-01-30T11:20:25 notice: (/Stage[main]/Swift::Proxy::Catch_errors/Concat::Fragment[swift_catch_errors]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/24_swift_catch_errors]/ensure) created -2013-01-30T11:20:25 notice: (/Stage[main]/Swift::Proxy::Healthcheck/Concat::Fragment[swift_healthcheck]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/25_swift_healthcheck]/ensure) created -2013-01-30T11:20:25 notice: (/Stage[main]/Swift::Proxy::Cache/Concat::Fragment[swift_cache]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/23_swift_cache]/ensure) created -2013-01-30T11:20:25 notice: (/Stage[main]/Swift::Proxy::Keystone/Concat::Fragment[swift_keystone]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/79_swift_keystone]/ensure) created -2013-01-30T11:20:25 notice: (/Stage[main]/Swift::Proxy::Ratelimit/Concat::Fragment[swift_ratelimit]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/26_swift_ratelimit]/ensure) created -2013-01-30T11:20:25 notice: (/Stage[main]/Swift::Proxy::Swift3/Concat::Fragment[swift_swift3]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/27_swift_swift3]/ensure) created -2013-01-30T11:20:25 notice: (/Stage[main]/Swift::Proxy::Authtoken/Keystone::Client::Authtoken[/etc/swift/proxy-server.conf]/Concat::Fragment[_etc_swift_proxy-server.conf_authtoken]/File[/var/lib/puppet/concat/_etc_swift_proxy-server.conf/fragments/80__etc_swift_proxy-server.conf_authtoken]/ensure) created -2013-01-30T11:20:26 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/Exec[concat_/etc/swift/proxy-server.conf]/returns) executed successfully -2013-01-30T11:20:26 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/Exec[concat_/etc/swift/proxy-server.conf]) Triggered 'refresh' from 11 events -2013-01-30T11:20:26 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/etc/swift/proxy-server.conf]/content) content changed '{md5}b6581fa5a48beaa38dae9450d67b0d28' to '{md5}8d2d03495da02438bd24cc04f7a90b2a' -2013-01-30T11:20:26 notice: (/Stage[main]/Swift::Proxy/Concat[/etc/swift/proxy-server.conf]/File[/etc/swift/proxy-server.conf]/owner) owner changed 'root' to 'swift' -2013-01-30T11:20:27 notice: (/Stage[main]/Swift::Proxy/Service[swift-proxy]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:20:27 notice: (/Stage[main]/Swift::Proxy/Service[swift-proxy]) Triggered 'refresh' from 1 events -2013-01-30T11:20:28 notice: (/Stage[main]/Rabbitmq::Server/Package[qpid-cpp-server]/ensure) created -2013-01-30T11:22:30 notice: (/Stage[main]/Rabbitmq::Server/Package[rabbitmq-server]/ensure) created -2013-01-30T11:22:30 notice: (/Stage[main]/Rabbitmq::Server/Exec[rabbitmq_stop]/returns) Stopping rabbitmq-server: RabbitMQ is not running -2013-01-30T11:22:30 notice: (/Stage[main]/Rabbitmq::Server/Exec[rabbitmq_stop]/returns) rabbitmq-server. -2013-01-30T11:22:30 notice: (/Stage[main]/Rabbitmq::Server/Exec[rabbitmq_stop]/returns) executed successfully -2013-01-30T11:22:30 notice: (/Stage[main]/Rabbitmq::Server/File[erlang_cookie]/content) content changed '{md5}5ca36383f027148bc87612d81fec252a' to '{md5}b28788594da393660db1e4f20d296c10' -2013-01-30T11:22:30 notice: (/Stage[main]/Rabbitmq::Server/File[rabbitmq.config]/ensure) defined content as '{md5}f22d1aa923c4727590fa559e8643fcf8' -2013-01-30T11:22:30 notice: (/Stage[main]/Rabbitmq::Server/File[rabbitmq-env.config]/ensure) defined content as '{md5}2980dac99b8f2195a50ef6e459ffedae' -2013-01-30T11:22:42 notice: (/Stage[main]/Rabbitmq::Service/Service[rabbitmq-server]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:22:49 notice: (/Stage[main]/Rabbitmq::Service/Service[rabbitmq-server]) Triggered 'refresh' from 1 events -2013-01-30T11:22:50 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[glance-reg]/Haproxy::Listen[glance-reg]/Concat::Fragment[glance-reg-listen_block]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/89-glance-reg_glance-reg-listen_block]/ensure) created -2013-01-30T11:22:50 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6002]/Concat[/etc/swift/account-server.conf]/Exec[concat_/etc/swift/account-server.conf]/returns) executed successfully -2013-01-30T11:22:50 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6002]/Concat[/etc/swift/account-server.conf]/Exec[concat_/etc/swift/account-server.conf]) Triggered 'refresh' from 3 events -2013-01-30T11:22:50 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6002]/Concat[/etc/swift/account-server.conf]/File[/etc/swift/account-server.conf]/content) content changed '{md5}68d75de69955941c8fd8f40b0dbbb31b' to '{md5}47ca0c31c97ed0dd8a6c6cc38cce3160' -2013-01-30T11:22:50 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6002]/Concat[/etc/swift/account-server.conf]/File[/etc/swift/account-server.conf]/owner) owner changed 'root' to 'swift' -2013-01-30T11:22:50 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6002]/Concat[/etc/swift/account-server.conf]/File[/etc/swift/account-server.conf]/mode) mode changed '0660' to '0640' -2013-01-30T11:22:51 err: (/Service[swift-account-replicator]/ensure) change from stopped to running failed: Could not start Service[swift-account-replicator]: Execution of '/usr/bin/swift-init account-replicator start' returned 1: at /etc/puppet/modules/swift/manifests/storage/generic.pp:61 -2013-01-30T11:22:51 notice: (/Service[swift-account-replicator]) Triggered 'refresh' from 2 events -2013-01-30T11:22:51 notice: (/Stage[main]/Swift::Storage::Account/Swift::Storage::Generic[account]/Service[swift-account]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:22:52 notice: (/Stage[main]/Swift::Storage::Account/Swift::Storage::Generic[account]/Service[swift-account]) Triggered 'refresh' from 2 events -2013-01-30T11:22:52 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Exec[create_partition-2]/returns) 0+0 records in -2013-01-30T11:22:52 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Exec[create_partition-2]/returns) 0+0 records out -2013-01-30T11:22:52 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Exec[create_partition-2]/returns) 0 bytes (0 B) copied, 1.4544e-05 s, 0.0 kB/s -2013-01-30T11:22:52 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Exec[create_partition-2]/returns) executed successfully -2013-01-30T11:22:53 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Exec[mkfs-2]/returns) meta-data=/srv/loopback-device/2 isize=1024 agcount=4, agsize=65548 blks -2013-01-30T11:22:53 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Exec[mkfs-2]/returns) = sectsz=512 attr=2 -2013-01-30T11:22:53 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Exec[mkfs-2]/returns) data = bsize=4096 blocks=262189, imaxpct=25 -2013-01-30T11:22:53 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Exec[mkfs-2]/returns) = sunit=0 swidth=0 blks -2013-01-30T11:22:53 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Exec[mkfs-2]/returns) naming =version 2 bsize=4096 ascii-ci=0 -2013-01-30T11:22:53 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Exec[mkfs-2]/returns) log =internal log bsize=4096 blocks=2560, version=2 -2013-01-30T11:22:53 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Exec[mkfs-2]/returns) = sectsz=512 sunit=0 blks, lazy-count=1 -2013-01-30T11:22:53 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Exec[mkfs-2]/returns) realtime =none extsz=4096 blocks=0, rtextents=0 -2013-01-30T11:22:53 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Exec[mkfs-2]) Triggered 'refresh' from 1 events -2013-01-30T11:22:53 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Swift::Storage::Mount[2]/File[/srv/node/2]/ensure) created -2013-01-30T11:22:53 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Swift::Storage::Mount[2]/Mount[/srv/node/2]/ensure) defined 'ensure' as 'defined' -2013-01-30T11:22:53 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Swift::Storage::Mount[2]/Mount[/srv/node/2]) Triggered 'refresh' from 2 events -2013-01-30T11:22:53 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Swift::Storage::Mount[2]/Exec[mount_2]/returns) executed successfully -2013-01-30T11:22:53 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Swift::Storage::Mount[2]/Exec[mount_2]) Triggered 'refresh' from 1 events -2013-01-30T11:22:53 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Storage::Loopback[2]/Swift::Storage::Xfs[2]/Swift::Storage::Mount[2]/Exec[fix_mount_permissions_2]) Triggered 'refresh' from 3 events -2013-01-30T11:22:53 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6002]/Rsync::Server::Module[account]/File[/etc/rsync.d/frag-account]/ensure) defined content as '{md5}5c536b07e578ed18d4c7eedd2d76a225' -2013-01-30T11:22:53 notice: (/Stage[main]/Rsync::Server/Exec[compile fragments]) Triggered 'refresh' from 4 events -2013-01-30T11:22:53 notice: (/Stage[main]/Openstack::Controller_ha/Haproxy_service[horizon]/Haproxy::Balancermember[horizon]/Concat::Fragment[horizon_balancermember_horizon]/File[/var/lib/puppet/concat/_etc_haproxy_haproxy.cfg/fragments/15-horizon_horizon_horizon_balancermember_horizon]/ensure) created -2013-01-30T11:22:53 notice: (/Stage[main]/Haproxy/Concat[/etc/haproxy/haproxy.cfg]/Exec[concat_/etc/haproxy/haproxy.cfg]/returns) executed successfully -2013-01-30T11:22:53 notice: (/Stage[main]/Haproxy/Concat[/etc/haproxy/haproxy.cfg]/Exec[concat_/etc/haproxy/haproxy.cfg]) Triggered 'refresh' from 26 events -2013-01-30T11:22:53 notice: (/Stage[main]/Haproxy/Concat[/etc/haproxy/haproxy.cfg]/File[/etc/haproxy/haproxy.cfg]/content) content changed '{md5}1f337186b0e1ba5ee82760cb437fb810' to '{md5}88cfb25e046978e0c16fa67068edb72e' -2013-01-30T11:22:54 notice: (/Stage[main]/Haproxy/Service[haproxy]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:22:54 notice: (/Stage[main]/Haproxy/Service[haproxy]) Triggered 'refresh' from 1 events -2013-01-30T11:22:54 notice: (/Stage[main]/Galera/File[/etc/mysql]/ensure) created -2013-01-30T11:22:54 notice: (/Stage[main]/Galera/File[/etc/my.cnf]/ensure) defined content as '{md5}9c703ee12b3b1cef32501cdeeb24feef' -2013-01-30T11:22:57 notice: (/Stage[main]/Galera/Package[openssl098e]/ensure) created -2013-01-30T11:23:01 notice: (/Stage[main]/Galera/Package[galera]/ensure) created -2013-01-30T11:23:11 notice: (/Stage[main]/Galera/Package[MySQL-client]/ensure) created -2013-01-30T11:23:11 notice: (/Stage[main]/Galera/File[/tmp/wsrep-init-file]/ensure) created -2013-01-30T11:23:11 notice: (/Stage[main]/Galera/File[/etc/mysql/conf.d]/ensure) created -2013-01-30T11:23:11 notice: (/Stage[main]/Galera/File[/etc/mysql/conf.d/wsrep.cnf]/ensure) created -2013-01-30T11:23:34 notice: (/Stage[main]/Galera/Package[MySQL-server]/ensure) created -2013-01-30T11:23:34 notice: (/Stage[main]/Galera/Exec[set-mysql-password]) Triggered 'refresh' from 2 events -2013-01-30T11:24:10 notice: (/Stage[main]/Galera/Exec[wait-initial-sync]) Triggered 'refresh' from 1 events -2013-01-30T11:24:25 notice: (/Stage[main]/Galera/Exec[kill-initial-mysql]/returns) mysqld_safe: no process killed -2013-01-30T11:24:25 notice: (/Stage[main]/Galera/Exec[kill-initial-mysql]) Triggered 'refresh' from 1 events -2013-01-30T11:24:25 notice: (/Stage[main]/Galera/Exec[rm-init-file]/returns) executed successfully -2013-01-30T11:24:58 notice: (/Stage[main]/Galera/Service[mysql-galera]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:26:04 notice: (/Stage[main]/Galera/Service[mysql-galera]) Triggered 'refresh' from 1 events -2013-01-30T11:26:25 notice: (/Stage[main]/Galera/Exec[wait-for-synced-state]/returns) executed successfully -2013-01-30T11:26:25 notice: (/Stage[main]/Openstack::Controller_ha/Exec[wait-for-haproxy-mysql-backend]/returns) executed successfully -2013-01-30T11:26:25 notice: (/Stage[main]/Nova::Db::Mysql/Nova::Db::Mysql::Host_access[slave-3]/Database_user[nova@slave-3]/ensure) created -2013-01-30T11:26:25 notice: (/Stage[main]/Glance::Db::Mysql/Glance::Db::Mysql::Host_access[slave-3]/Database_user[glance@slave-3]/ensure) created -2013-01-30T11:26:26 notice: (/Stage[main]/Glance::Db::Mysql/Glance::Db::Mysql::Host_access[slave-3]/Database_grant[glance@slave-3/glance]/privileges) privileges changed '' to 'all' -2013-01-30T11:26:28 notice: (/Stage[main]/Nova::Db::Mysql/Nova::Db::Mysql::Host_access[slave-3]/Database_grant[nova@slave-3/nova]/privileges) privileges changed '' to 'all' -2013-01-30T11:26:28 notice: (/Stage[main]/Nova::Network::Vlan/Nova_config[DEFAULT/network_manager]/value) value changed 'nova.network.manager.FlatDHCPManager' to 'nova.network.manager.VlanManager' -2013-01-30T11:26:28 notice: (/Stage[main]/Nova::Network/Nova_config[DEFAULT/floating_range]/ensure) created -2013-01-30T11:26:28 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_hosts]/ensure) created -2013-01-30T11:26:28 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_volumes]/ensure) created -2013-01-30T11:26:28 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/osapi_compute_listen]/ensure) created -2013-01-30T11:26:28 notice: (/Stage[main]/Openstack::Controller/Nova_config[DEFAULT/memcached_servers]/ensure) created -2013-01-30T11:26:28 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/ec2_listen]/ensure) created -2013-01-30T11:26:28 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/admin_password]/value) value changed '%SERVICE_PASSWORD%' to 'nova' -2013-01-30T11:26:28 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_max_injected_file_content_bytes]/ensure) created -2013-01-30T11:26:28 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/admin_user]/value) value changed '%SERVICE_USER%' to 'nova' -2013-01-30T11:26:28 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/glance_api_servers]/ensure) created -2013-01-30T11:26:28 notice: (/Stage[main]/Nova::Vncproxy/Nova_config[DEFAULT/novncproxy_host]/ensure) created -2013-01-30T11:26:28 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_userid]/ensure) created -2013-01-30T11:26:28 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_ha_queues]/ensure) created -2013-01-30T11:26:28 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_password]/ensure) created -2013-01-30T11:26:28 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/verbose]/ensure) created -2013-01-30T11:26:28 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_cores]/ensure) created -2013-01-30T11:26:31 notice: (/Stage[main]/Nova::Consoleauth/Nova::Generic_service[consoleauth]/Package[nova-consoleauth]/ensure) created -2013-01-30T11:26:31 notice: (/Stage[main]/Nova::Api/Nova_config[DEFAULT/enabled_apis]/ensure) created -2013-01-30T11:26:31 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/sql_connection]/value) value changed 'mysql://nova:nova@localhost/nova' to 'mysql://nova:nova@192.168.0.6/nova' -2013-01-30T11:26:31 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_virtual_host]/ensure) created -2013-01-30T11:26:31 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/image_service]/ensure) created -2013-01-30T11:26:31 notice: (/Stage[main]/Nova::Api/Nova_config[DEFAULT/volume_api_class]/ensure) created -2013-01-30T11:26:31 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_max_injected_files]/ensure) created -2013-01-30T11:26:31 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/auth_host]/value) value changed '127.0.0.1' to '192.168.0.6' -2013-01-30T11:26:31 notice: (/Stage[main]/Nova::Vncproxy/Nova_config[DEFAULT/novncproxy_port]/ensure) created -2013-01-30T11:26:31 notice: (/Stage[main]/Nova::Network::Vlan/Nova_config[DEFAULT/force_dhcp_release]/value) value changed 'True' to 'true' -2013-01-30T11:26:31 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_port]/ensure) created -2013-01-30T11:27:04 notice: (/Stage[main]/Nova::Vncproxy/Nova::Generic_service[vncproxy]/Package[nova-vncproxy]/ensure) created -2013-01-30T11:27:04 notice: (/Stage[main]/Nova::Network::Vlan/Nova_config[DEFAULT/vlan_start]/ensure) created -2013-01-30T11:27:05 notice: (/Stage[main]/Nova/User[nova]/shell) shell changed '/sbin/nologin' to '/bin/bash' -2013-01-30T11:27:05 notice: (/Stage[main]/Nova/File[/var/log/nova]/group) group changed 'root' to 'nova' -2013-01-30T11:27:05 notice: (/Stage[main]/Nova/File[/var/log/nova]/mode) mode changed '0755' to '0751' -2013-01-30T11:27:05 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_max_injected_file_path_bytes]/ensure) created -2013-01-30T11:27:05 notice: (/Stage[main]/Nova::Api/Nova_config[DEFAULT/api_paste_config]/ensure) created -2013-01-30T11:27:05 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_floating_ips]/ensure) created -2013-01-30T11:27:05 notice: (/Stage[main]/Openstack::Nova::Controller/Nova_config[DEFAULT/multi_host]/ensure) created -2013-01-30T11:27:05 notice: (/Stage[main]/Nova::Network::Vlan/Nova_config[DEFAULT/public_interface]/ensure) created -2013-01-30T11:27:05 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/service_down_time]/ensure) created -2013-01-30T11:27:05 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/admin_tenant_name]/value) value changed '%SERVICE_TENANT_NAME%' to 'services' -2013-01-30T11:27:05 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_gigabytes]/ensure) created -2013-01-30T11:27:05 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_instances]/ensure) created -2013-01-30T11:27:05 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/osapi_volume_listen]/ensure) created -2013-01-30T11:27:05 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/signing_dir]/ensure) created -2013-01-30T11:27:05 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/metadata_listen]/ensure) created -2013-01-30T11:27:05 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/auth_strategy]/ensure) created -2013-01-30T11:27:05 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_metadata_items]/ensure) created -2013-01-30T11:27:05 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rpc_backend]/value) value changed 'nova.openstack.common.rpc.impl_qpid' to 'nova.rpc.impl_kombu' -2013-01-30T11:27:05 notice: (/Stage[main]/Nova::Network::Vlan/Nova_config[DEFAULT/fixed_range]/ensure) created -2013-01-30T11:27:05 notice: (/Stage[main]/Nova::Network::Vlan/Nova_config[DEFAULT/dhcp_domain]/ensure) created -2013-01-30T11:27:05 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/allow_resize_to_same_host]/ensure) created -2013-01-30T11:27:06 notice: (/Stage[main]/Nova::Network::Vlan/Nova_config[DEFAULT/vlan_interface]/ensure) created -2013-01-30T11:27:06 notice: (/Stage[main]/Nova/File[/etc/nova/nova.conf]/owner) owner changed 'root' to 'nova' -2013-01-30T11:27:06 notice: (/Stage[main]/Keystone::Db::Mysql/Keystone::Db::Mysql::Host_access[slave-3]/Database_user[keystone@slave-3]/ensure) created -2013-01-30T11:27:07 notice: (/Stage[main]/Keystone::Db::Mysql/Keystone::Db::Mysql::Host_access[slave-3]/Database_grant[keystone@slave-3/keystone]/privileges) privileges changed '' to 'all' -2013-01-30T11:27:09 notice: (/Stage[main]/Keystone/Package[keystone]/ensure) created -2013-01-30T11:27:09 notice: (/Stage[main]/Keystone/Keystone_config[sql/connection]/value) value changed 'mysql://keystone:keystone@localhost/keystone' to 'mysql://keystone:nova@192.168.0.6/keystone' -2013-01-30T11:27:09 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/public_port]/ensure) created -2013-01-30T11:27:09 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/compute_port]/ensure) created -2013-01-30T11:27:09 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/debug]/ensure) created -2013-01-30T11:27:09 notice: (/Stage[main]/Keystone/Keystone_config[policy/driver]/ensure) created -2013-01-30T11:27:09 notice: (/Stage[main]/Keystone/Keystone_config[sql/idle_timeout]/ensure) created -2013-01-30T11:27:09 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/admin_token]/ensure) created -2013-01-30T11:27:09 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/bind_host]/ensure) created -2013-01-30T11:27:09 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/admin_port]/ensure) created -2013-01-30T11:27:09 notice: (/Stage[main]/Keystone/File[/etc/keystone]/owner) owner changed 'root' to 'keystone' -2013-01-30T11:27:09 notice: (/Stage[main]/Keystone/File[/etc/keystone]/group) group changed 'root' to 'keystone' -2013-01-30T11:27:10 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[keystone_authtoken/signing_dir]/ensure) created -2013-01-30T11:27:10 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[keystone_authtoken/auth_host]/value) value changed '127.0.0.1' to '192.168.0.6' -2013-01-30T11:27:10 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[DEFAULT/bind_host]/value) value changed '0.0.0.0' to '192.168.0.4' -2013-01-30T11:27:10 notice: (/Stage[main]/Glance::Registry/File[/etc/glance/glance-registry.conf]/owner) owner changed 'root' to 'glance' -2013-01-30T11:27:10 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[keystone_authtoken/admin_password]/value) value changed '%SERVICE_PASSWORD%' to 'nova' -2013-01-30T11:27:10 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[paste_deploy/flavor]/ensure) created -2013-01-30T11:27:10 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[keystone_authtoken/signing_dirname]/ensure) created -2013-01-30T11:27:10 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[DEFAULT/sql_connection]/value) value changed 'mysql://glance:glance@localhost/glance' to 'mysql://glance:nova@192.168.0.6/glance' -2013-01-30T11:27:10 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[DEFAULT/debug]/value) value changed 'False' to 'true' -2013-01-30T11:27:10 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[DEFAULT/verbose]/value) value changed 'True' to 'true' -2013-01-30T11:27:10 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[keystone_authtoken/admin_tenant_name]/value) value changed '%SERVICE_TENANT_NAME%' to 'services' -2013-01-30T11:27:10 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[keystone_authtoken/admin_user]/value) value changed '%SERVICE_USER%' to 'glance' -2013-01-30T11:27:10 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6000]/Concat[/etc/swift/object-server.conf]/File[/var/lib/puppet/concat/_etc_swift_object-server.conf/fragments.concat]/ensure) created -2013-01-30T11:27:10 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6000]/Concat[/etc/swift/object-server.conf]/Exec[concat_/etc/swift/object-server.conf]/returns) executed successfully -2013-01-30T11:27:10 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6000]/Concat[/etc/swift/object-server.conf]/Exec[concat_/etc/swift/object-server.conf]) Triggered 'refresh' from 3 events -2013-01-30T11:27:10 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6000]/Concat[/etc/swift/object-server.conf]/File[/etc/swift/object-server.conf]/content) content changed '{md5}bd9ae72e0cc70c89655071d96b32b172' to '{md5}cbf8e9bca187c13fef5b7c3130e1d6b0' -2013-01-30T11:27:10 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6000]/Concat[/etc/swift/object-server.conf]/File[/etc/swift/object-server.conf]/owner) owner changed 'root' to 'swift' -2013-01-30T11:27:10 notice: (/Stage[main]/Swift::Storage::All/Swift::Storage::Server[6000]/Concat[/etc/swift/object-server.conf]/File[/etc/swift/object-server.conf]/mode) mode changed '0660' to '0640' -2013-01-30T11:27:10 notice: (/Stage[main]/Swift::Storage::Object/Swift::Storage::Generic[object]/Service[swift-object]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:27:11 notice: (/Stage[main]/Swift::Storage::Object/Swift::Storage::Generic[object]/Service[swift-object]) Triggered 'refresh' from 2 events -2013-01-30T11:27:11 err: (/Service[swift-object-replicator]/ensure) change from stopped to running failed: Could not start Service[swift-object-replicator]: Execution of '/usr/bin/swift-init object-replicator start' returned 1: at /etc/puppet/modules/swift/manifests/storage/generic.pp:61 -2013-01-30T11:27:11 notice: (/Service[swift-object-replicator]) Triggered 'refresh' from 2 events -2013-01-30T11:27:12 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/verbose]/ensure) created -2013-01-30T11:27:13 notice: (/Stage[main]/Keystone/Exec[keystone-manage db_sync]) Triggered 'refresh' from 11 events -2013-01-30T11:27:14 notice: (/Stage[main]/Keystone/Service[keystone]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:27:15 notice: (/Stage[main]/Keystone/Service[keystone]) Triggered 'refresh' from 13 events -2013-01-30T11:27:36 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/auth_url]/ensure) created -2013-01-30T11:27:37 notice: (/Stage[main]/Glance::Registry/Exec[glance-manage db_sync]) Triggered 'refresh' from 38 events -2013-01-30T11:27:37 notice: (/Stage[main]/Glance::Registry/Service[glance-registry]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:27:38 notice: (/Stage[main]/Glance::Registry/Service[glance-registry]) Triggered 'refresh' from 13 events -2013-01-30T11:27:38 notice: (/Stage[main]/Glance::Api/Service[glance-api]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:27:39 notice: (/Stage[main]/Glance::Api/Service[glance-api]) Triggered 'refresh' from 29 events -2013-01-30T11:27:39 notice: (/Stage[main]/Nova/Exec[post-nova_config]/returns) Nova config has changed -2013-01-30T11:27:39 notice: (/Stage[main]/Nova/Exec[post-nova_config]) Triggered 'refresh' from 94 events -2013-01-30T11:27:41 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]/returns) 2013-01-30 11:27:41 DEBUG nova.utils [-] backend from (pid=8486) __get_backend /usr/lib/python2.6/site-packages/nova/utils.py:494 -2013-01-30T11:27:41 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]/returns) executed successfully -2013-01-30T11:27:43 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]/returns) 2013-01-30 11:27:42 DEBUG nova.utils [-] backend from (pid=8506) __get_backend /usr/lib/python2.6/site-packages/nova/utils.py:494 -2013-01-30T11:27:43 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]) Triggered 'refresh' from 1 events -2013-01-30T11:27:44 notice: (/Stage[main]/Nova::Cert/Nova::Generic_service[cert]/Service[nova-cert]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:27:47 notice: (/Stage[main]/Nova::Cert/Nova::Generic_service[cert]/Service[nova-cert]) Triggered 'refresh' from 3 events -2013-01-30T11:27:50 notice: (/Stage[main]/Nova::Vncproxy/Nova::Generic_service[vncproxy]/Service[nova-vncproxy]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:27:51 notice: (/Stage[main]/Nova::Vncproxy/Nova::Generic_service[vncproxy]/Service[nova-vncproxy]) Triggered 'refresh' from 4 events -2013-01-30T11:27:52 notice: (/Stage[main]/Nova::Objectstore/Nova::Generic_service[objectstore]/Service[nova-objectstore]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:27:53 notice: (/Stage[main]/Nova::Objectstore/Nova::Generic_service[objectstore]/Service[nova-objectstore]) Triggered 'refresh' from 3 events -2013-01-30T11:27:55 notice: (/Stage[main]/Nova::Consoleauth/Nova::Generic_service[consoleauth]/Service[nova-consoleauth]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:27:55 notice: (/Stage[main]/Nova::Consoleauth/Nova::Generic_service[consoleauth]/Service[nova-consoleauth]) Triggered 'refresh' from 4 events -2013-01-30T11:27:56 notice: (/Stage[main]/Nova::Api/Nova::Generic_service[api]/Service[nova-api]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:27:57 notice: (/Stage[main]/Nova::Api/Nova::Generic_service[api]/Service[nova-api]) Triggered 'refresh' from 51 events -2013-01-30T11:27:58 notice: (/Stage[main]/Nova::Scheduler/Nova::Generic_service[scheduler]/Service[nova-scheduler]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:27:59 notice: (/Stage[main]/Nova::Scheduler/Nova::Generic_service[scheduler]/Service[nova-scheduler]) Triggered 'refresh' from 3 events -2013-01-30T11:28:03 notice: Finished catalog run in 786.94 seconds -SEPARATOR -2013-01-30T11:28:15 notice: Reopening log files -2013-01-30T11:29:42 notice: (/Stage[main]/Openstack::Firewall/Exec[startup-firewall]/returns) executed successfully -2013-01-30T11:29:43 notice: (/Stage[main]/Openstack::Controller_ha/Exec[up-private-interface]/returns) executed successfully -2013-01-30T11:29:43 notice: (/Stage[main]/Openstack::Controller_ha/Exec[up-internal-interface]/returns) executed successfully -2013-01-30T11:29:43 notice: (/Stage[main]/Openstack::Controller_ha/Exec[up-public-interface]/returns) executed successfully -2013-01-30T11:30:16 notice: (/Stage[main]/Swift::Storage::Object/Swift::Storage::Generic[object]/File[/etc/swift/object-server/]/owner) owner changed 'root' to 'swift' -2013-01-30T11:30:16 notice: (/Stage[main]/Swift::Storage::Object/Swift::Storage::Generic[object]/File[/etc/swift/object-server/]/group) group changed 'root' to 'swift' -2013-01-30T11:30:16 notice: (/Stage[main]/Swift::Storage::Account/Swift::Storage::Generic[account]/File[/etc/swift/account-server/]/owner) owner changed 'root' to 'swift' -2013-01-30T11:30:16 notice: (/Stage[main]/Swift::Storage::Account/Swift::Storage::Generic[account]/File[/etc/swift/account-server/]/group) group changed 'root' to 'swift' -2013-01-30T11:30:17 err: (/Service[swift-container-replicator]/ensure) change from stopped to running failed: Could not start Service[swift-container-replicator]: Execution of '/usr/bin/swift-init container-replicator start' returned 1: at /etc/puppet/modules/swift/manifests/storage/generic.pp:61 -2013-01-30T11:30:18 notice: (/Stage[main]/Swift::Proxy/Service[swift-proxy]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:30:19 notice: (/Stage[main]/Rabbitmq::Server/Package[qpid-cpp-server]/ensure) created -2013-01-30T11:30:21 err: (/Service[swift-account-replicator]/ensure) change from stopped to running failed: Could not start Service[swift-account-replicator]: Execution of '/usr/bin/swift-init account-replicator start' returned 1: at /etc/puppet/modules/swift/manifests/storage/generic.pp:61 -2013-01-30T11:30:22 notice: (/Stage[main]/Galera/File[/tmp/wsrep-init-file]/ensure) created -2013-01-30T11:30:23 notice: (/Stage[main]/Galera/Exec[rm-init-file]/returns) executed successfully -2013-01-30T11:30:33 notice: (/Stage[main]/Galera/Exec[wait-for-synced-state]/returns) executed successfully -2013-01-30T11:30:33 notice: (/Stage[main]/Openstack::Controller_ha/Exec[wait-for-haproxy-mysql-backend]/returns) executed successfully -2013-01-30T11:30:38 err: (/Service[swift-object-replicator]/ensure) change from stopped to running failed: Could not start Service[swift-object-replicator]: Execution of '/usr/bin/swift-init object-replicator start' returned 1: at /etc/puppet/modules/swift/manifests/storage/generic.pp:61 -2013-01-30T11:30:49 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]/returns) 2013-01-30 11:30:48 DEBUG nova.utils [-] backend from (pid=10387) __get_backend /usr/lib/python2.6/site-packages/nova/utils.py:494 -2013-01-30T11:30:49 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]/returns) executed successfully -2013-01-30T11:30:50 notice: (/Stage[main]/Nova::Cert/Nova::Generic_service[cert]/Service[nova-cert]) Triggered 'refresh' from 1 events -2013-01-30T11:30:52 notice: (/Stage[main]/Nova::Vncproxy/Nova::Generic_service[vncproxy]/Service[nova-vncproxy]) Triggered 'refresh' from 1 events -2013-01-30T11:30:53 notice: (/Stage[main]/Nova::Objectstore/Nova::Generic_service[objectstore]/Service[nova-objectstore]) Triggered 'refresh' from 1 events -2013-01-30T11:30:56 notice: (/Stage[main]/Nova::Consoleauth/Nova::Generic_service[consoleauth]/Service[nova-consoleauth]) Triggered 'refresh' from 1 events -2013-01-30T11:30:58 notice: (/Stage[main]/Nova::Api/Nova::Generic_service[api]/Service[nova-api]) Triggered 'refresh' from 1 events -2013-01-30T11:31:00 notice: (/Stage[main]/Nova::Scheduler/Nova::Generic_service[scheduler]/Service[nova-scheduler]) Triggered 'refresh' from 1 events -2013-01-30T11:31:02 notice: Finished catalog run in 83.22 seconds -SEPARATOR -2013-01-30T11:40:36 notice: Reopening log files -2013-01-30T11:42:02 notice: (/Stage[main]/Openstack::Firewall/Exec[startup-firewall]/returns) executed successfully -2013-01-30T11:42:03 notice: (/Stage[main]/Openstack::Controller_ha/Exec[up-private-interface]/returns) executed successfully -2013-01-30T11:42:03 notice: (/Stage[main]/Openstack::Controller_ha/Exec[up-internal-interface]/returns) executed successfully -2013-01-30T11:42:03 notice: (/Stage[main]/Openstack::Controller_ha/Exec[up-public-interface]/returns) executed successfully -2013-01-30T11:42:25 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Ringsync[account]/Rsync::Get[/etc/swift/account.ring.gz]/Exec[rsync /etc/swift/account.ring.gz]/returns) executed successfully -2013-01-30T11:42:46 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Ringsync[object]/Rsync::Get[/etc/swift/object.ring.gz]/Exec[rsync /etc/swift/object.ring.gz]/returns) executed successfully -2013-01-30T11:43:08 notice: (/Stage[main]/Openstack::Swift::Storage-node/Swift::Ringsync[container]/Rsync::Get[/etc/swift/container.ring.gz]/Exec[rsync /etc/swift/container.ring.gz]/returns) executed successfully -2013-01-30T11:43:09 notice: (/Service[swift-container-replicator]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:43:10 notice: (/Stage[main]/Swift::Proxy/Service[swift-proxy]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:43:10 notice: (/Stage[main]/Swift::Proxy/Service[swift-proxy]) Triggered 'refresh' from 3 events -2013-01-30T11:43:11 notice: (/Stage[main]/Rabbitmq::Server/Package[qpid-cpp-server]/ensure) created -2013-01-30T11:43:13 notice: (/Service[swift-account-replicator]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:43:14 notice: (/Stage[main]/Galera/File[/tmp/wsrep-init-file]/ensure) created -2013-01-30T11:43:14 notice: (/Stage[main]/Galera/Exec[rm-init-file]/returns) executed successfully -2013-01-30T11:43:25 notice: (/Stage[main]/Galera/Exec[wait-for-synced-state]/returns) executed successfully -2013-01-30T11:43:25 notice: (/Stage[main]/Openstack::Controller_ha/Exec[wait-for-haproxy-mysql-backend]/returns) executed successfully -2013-01-30T11:43:30 notice: (/Service[swift-object-replicator]/ensure) ensure changed 'stopped' to 'running' -2013-01-30T11:43:42 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]/returns) 2013-01-30 11:43:42 DEBUG nova.utils [-] backend from (pid=12561) __get_backend /usr/lib/python2.6/site-packages/nova/utils.py:494 -2013-01-30T11:43:42 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]/returns) executed successfully -2013-01-30T11:43:42 notice: (/Stage[main]/Nova::Cert/Nova::Generic_service[cert]/Service[nova-cert]) Triggered 'refresh' from 1 events -2013-01-30T11:43:43 notice: (/Stage[main]/Nova::Vncproxy/Nova::Generic_service[vncproxy]/Service[nova-vncproxy]) Triggered 'refresh' from 1 events -2013-01-30T11:43:45 notice: (/Stage[main]/Nova::Objectstore/Nova::Generic_service[objectstore]/Service[nova-objectstore]) Triggered 'refresh' from 1 events -2013-01-30T11:43:47 notice: (/Stage[main]/Nova::Consoleauth/Nova::Generic_service[consoleauth]/Service[nova-consoleauth]) Triggered 'refresh' from 1 events -2013-01-30T11:43:50 notice: (/Stage[main]/Nova::Api/Nova::Generic_service[api]/Service[nova-api]) Triggered 'refresh' from 1 events -2013-01-30T11:43:54 notice: (/Stage[main]/Nova::Scheduler/Nova::Generic_service[scheduler]/Service[nova-scheduler]) Triggered 'refresh' from 1 events -2013-01-30T11:43:57 notice: Finished catalog run in 117.64 seconds diff --git a/spec/example-logs/puppet-agent.log.multi.compute b/spec/example-logs/puppet-agent.log.multi.compute deleted file mode 100644 index 83b1f3a0..00000000 --- a/spec/example-logs/puppet-agent.log.multi.compute +++ /dev/null @@ -1,454 +0,0 @@ -2014-09-26T14:22:48.154478+01:00 warning: You cannot collect exported resources without storeconfigs being set; the collection will be ignored on line 253 in file /etc/puppet/modules/openstack/manifests/compute.pp -2014-09-26T14:22:48.167644+01:00 warning: You cannot collect exported resources without storeconfigs being set; the collection will be ignored on line 300 in file /etc/puppet/modules/openstack/manifests/compute.pp -2014-09-26T14:22:49.783782+01:00 warning: (Scope(Class[Nova])) The sql_connection parameter is deprecated, use database_connection instead. -2014-09-26T14:22:50.772696+01:00 notice: (Scope(Class[L23network::Hosts_file])) Generating host entry node-4 192.168.0.1 node-4.domain.tld -2014-09-26T14:22:50.772696+01:00 notice: (Scope(Class[L23network::Hosts_file])) Generating host entry node-5 192.168.0.2 node-5.domain.tld -2014-09-26T14:22:53.539179+01:00 notice: Compiled catalog for node-5.domain.tld in environment production in 6.18 seconds -2014-09-26T14:22:58.896922+01:00 notice: ***** Beginning deployment of node node-5 with role compute ***** -2014-09-26T14:22:58.897105+01:00 notice: (/Stage[zero]/Begin_deployment/Notify[***** Beginning deployment of node node-5 with role compute *****]/message) defined 'message' as '***** Beginning deployment of node node-5 with role compute *****' -2014-09-26T14:22:58.946479+01:00 notice: (/Stage[first]/Rsyslog::Config/File[/etc/sysconfig/rsyslog]/content) content changed '{md5}a4344bd783e70527688cd6925d91d73c' to '{md5}b4e6400ef8a7e91355a1885b19cab475' -2014-09-26T14:22:58.947557+01:00 notice: (/Stage[first]/Rsyslog::Config/File[/etc/sysconfig/rsyslog]/mode) mode changed '0644' to '0640' -2014-09-26T14:22:58.978222+01:00 notice: (/Stage[first]/Rsyslog::Config/File[/etc/rsyslog.conf]/content) content changed '{md5}8b91b32300134e98ef4aee632ed61e21' to '{md5}9f3264650a3099197ddc2efaee61e8d2' -2014-09-26T14:22:58.979338+01:00 notice: (/Stage[first]/Rsyslog::Config/File[/etc/rsyslog.conf]/mode) mode changed '0644' to '0640' -2014-09-26T14:22:59.007926+01:00 notice: (/Stage[first]/Rsyslog::Config/File[/var/spool/rsyslog/]/ensure) created -2014-09-26T14:22:59.035154+01:00 notice: (/Stage[first]/Openstack::Logrotate/File[/etc/logrotate.d/20-fuel.conf]/ensure) defined content as '{md5}9b86108a0bf82b391720174d655e22d3' -2014-09-26T14:22:59.083441+01:00 notice: (/Stage[first]/Anacron::Config/File[/etc/cron.d/0hourly]/content) content changed '{md5}4b98b6b029e76aa6e0fa3fde2ec5572a' to '{md5}20cd70641561aa0e2b2cebb651be0b70' -2014-09-26T14:22:59.216443+01:00 notice: (/Stage[first]/Openstack::Logrotate/Exec[logrotate_check]/returns) executed successfully -2014-09-26T14:22:59.250280+01:00 notice: (/Stage[first]/Openstack::Logrotate/File[/etc/logrotate.d/10-fuel.conf]/ensure) defined content as '{md5}9e8aa0c0a7e6ebbe509f47c85e392be0' -2014-09-26T14:22:59.917830+01:00 notice: (/Stage[first]/Rsyslog::Config/File[/var/lib/rsyslog]/mode) mode changed '0700' to '0750' -2014-09-26T14:23:00.045468+01:00 notice: (/Stage[first]/Anacron::Config/File[/etc/cron.hourly/logrotate]/ensure) defined content as '{md5}717db7b00ec43521f181264b7ad6e054' -2014-09-26T14:23:00.076875+01:00 notice: (/Stage[first]/Anacron::Config/File[/etc/anacrontab]/content) content changed '{md5}8241db83d5edf01c71734e41e383e205' to '{md5}2196478af0166c40de3a58c442a4a58b' -2014-09-26T14:23:00.078699+01:00 notice: (/Stage[first]/Anacron::Config/File[/etc/anacrontab]/mode) mode changed '0600' to '0644' -2014-09-26T14:23:00.102219+01:00 notice: (/Stage[first]/Rsyslog::Client/File[/etc/rsyslog.d/]/mode) mode changed '0755' to '0750' -2014-09-26T14:23:00.106675+01:00 notice: (/Stage[first]/Rsyslog::Client/File[/etc/rsyslog.d/10-log2master.conf]/ensure) removed -2014-09-26T14:23:00.128912+01:00 notice: (/Stage[first]/Openstack::Logging/File[/etc/rsyslog.d/52-sahara.conf]/ensure) created -2014-09-26T14:23:00.143280+01:00 notice: (/Stage[first]/Openstack::Logging/File[/etc/rsyslog.d/02-ha.conf]/ensure) created -2014-09-26T14:23:00.157976+01:00 notice: (/Stage[first]/Openstack::Logging/File[/etc/rsyslog.d/54-heat.conf]/ensure) created -2014-09-26T14:23:00.173272+01:00 notice: (/Stage[first]/Openstack::Logging/File[/etc/rsyslog.d/04-mysql.conf]/ensure) created -2014-09-26T14:23:00.189036+01:00 notice: (/Stage[first]/Openstack::Logging/File[/etc/rsyslog.d/53-murano.conf]/ensure) created -2014-09-26T14:23:00.203121+01:00 notice: (/Stage[first]/Openstack::Logging/File[/etc/rsyslog.d/90-local.conf]/ensure) defined content as '{md5}3a6ca3a5e27a7cfedc9a64f7f809b006' -2014-09-26T14:23:00.217952+01:00 notice: (/Stage[first]/Openstack::Logging/File[/etc/rsyslog.d//61-mco-nailgun-agent.conf]/ensure) defined content as '{md5}4e33c427facb142af96a4a2d2666fa4a' -2014-09-26T14:23:00.234112+01:00 notice: (/Stage[first]/Openstack::Logging/Rsyslog::Imfile[61-mco_agent_debug]/File[/etc/rsyslog.d/61-mco_agent_debug.conf]/ensure) defined content as '{md5}699ea1cec33fc1d5140b5f46a6b604b8' -2014-09-26T14:23:00.250232+01:00 notice: (/Stage[first]/Rsyslog::Client/File[/etc/rsyslog.d/client.conf]/ensure) created -2014-09-26T14:23:00.269454+01:00 notice: (/Stage[first]/Openstack::Logging/File[/etc/rsyslog.d/70-zabbix-server.conf]/ensure) defined content as '{md5}7e33db6f50c4e71e99819961a1f52acb' -2014-09-26T14:23:00.284430+01:00 notice: (/Stage[first]/Openstack::Logging/File[/etc/rsyslog.d/03-dashboard.conf]/ensure) created -2014-09-26T14:23:00.302733+01:00 notice: (/Stage[first]/Openstack::Logging/File[/etc/rsyslog.d/00-remote.conf]/ensure) defined content as '{md5}5698c5b41b2d6a31bf3f863a9433c29e' -2014-09-26T14:23:00.326802+01:00 notice: (/Stage[first]/Openstack::Logging/File[/etc/rsyslog.d/20-keystone.conf]/ensure) created -2014-09-26T14:23:00.351521+01:00 notice: (/Stage[first]/Openstack::Logging/Rsyslog::Imfile[04-rabbitmq]/File[/etc/rsyslog.d/04-rabbitmq.conf]/ensure) defined content as '{md5}07f4b26f793e70b77ba34b293dd1b497' -2014-09-26T14:23:00.375831+01:00 notice: (/Stage[first]/Openstack::Logging/File[/etc/rsyslog.d/40-glance.conf]/ensure) created -2014-09-26T14:23:00.400750+01:00 notice: (/Stage[first]/Openstack::Logging/Rsyslog::Imfile[04-rabbitmq-sasl]/File[/etc/rsyslog.d/04-rabbitmq-sasl.conf]/ensure) defined content as '{md5}97817a073792dc70107f52bcf3dca3e4' -2014-09-26T14:23:00.430984+01:00 notice: (/Stage[first]/Openstack::Logging/File[/etc/rsyslog.d/10-nova.conf]/ensure) created -2014-09-26T14:23:00.451955+01:00 notice: (/Stage[first]/Openstack::Logging/File[/etc/rsyslog.d/60-puppet-apply.conf]/ensure) defined content as '{md5}fb71c918d7a4370f7871437b6c1825b5' -2014-09-26T14:23:00.486235+01:00 notice: (/Stage[first]/Openstack::Logging/Rsyslog::Imfile[04-rabbitmq-shutdown_err]/File[/etc/rsyslog.d/04-rabbitmq-shutdown_err.conf]/ensure) defined content as '{md5}5e25bcb317391064a7c39494c0402d15' -2014-09-26T14:23:00.512735+01:00 notice: (/Stage[first]/Openstack::Logging/File[/etc/rsyslog.d/51-ceilometer.conf]/ensure) created -2014-09-26T14:23:00.525998+01:00 notice: (/Stage[first]/Openstack::Logging/Rsyslog::Imfile[04-rabbitmq-startup_err]/File[/etc/rsyslog.d/04-rabbitmq-startup_err.conf]/ensure) defined content as '{md5}29192db56d3bbbd40b28f9406510ba59' -2014-09-26T14:23:00.551768+01:00 notice: (/Stage[first]/Openstack::Logging/File[/etc/rsyslog.d//30-cinder.conf]/ensure) created -2014-09-26T14:23:00.574305+01:00 notice: (/Stage[first]/Anacron::Config/File[/etc/cron.hourly/0anacron]/content) content changed '{md5}0033096afd5c735bc99821f847bd61a2' to '{md5}252f2087c57e2e06accf20f00634c132' -2014-09-26T14:23:00.782307+01:00 notice: (/Stage[first]/Openstack::Checksum_udp/Exec[checksum_fill_udp]/returns) executed successfully -2014-09-26T14:23:00.806626+01:00 notice: (/Stage[first]/Openstack::Logging/File[/etc/rsyslog.d/50-neutron.conf]/ensure) created -2014-09-26T14:23:01.220816+01:00 notice: (/Stage[first]/Rsyslog::Service/Service[rsyslog]) Triggered 'refresh' from 1 events -2014-09-26T14:23:01.253708+01:00 notice: (/Stage[netconfig]/L23network::Hosts_file/Host[node-5]/ensure) created -2014-09-26T14:23:01.260076+01:00 notice: (/Stage[netconfig]/L23network::Hosts_file/Host[node-4]/ensure) created -2014-09-26T14:23:01.415401+01:00 notice: (/Stage[netconfig]/Openstack::Keepalive/Sysctl::Value[net.ipv4.tcp_keepalive_intvl]/Sysctl[net.ipv4.tcp_keepalive_intvl]/ensure) created -2014-09-26T14:23:01.681389+01:00 notice: (/Stage[netconfig]/Openstack::Keepalive/Sysctl::Value[net.ipv4.tcp_keepalive_intvl]/Exec[exec_sysctl_net.ipv4.tcp_keepalive_intvl]/returns) executed successfully -2014-09-26T14:23:01.791691+01:00 notice: (/Stage[netconfig]/Openstack::Keepalive/Sysctl::Value[net.ipv4.tcp_keepalive_time]/Sysctl[net.ipv4.tcp_keepalive_time]/ensure) created -2014-09-26T14:23:01.933786+01:00 notice: (/Stage[netconfig]/Openstack::Keepalive/Sysctl::Value[net.ipv4.tcp_keepalive_time]/Exec[exec_sysctl_net.ipv4.tcp_keepalive_time]/returns) executed successfully -2014-09-26T14:23:01.956409+01:00 notice: (/Stage[netconfig]/Openstack::Keepalive/Sysctl::Value[net.ipv4.tcp_keepalive_probes]/Sysctl[net.ipv4.tcp_keepalive_probes]/ensure) created -2014-09-26T14:23:02.102000+01:00 notice: (/Stage[netconfig]/Openstack::Keepalive/Sysctl::Value[net.ipv4.tcp_keepalive_probes]/Exec[exec_sysctl_net.ipv4.tcp_keepalive_probes]/returns) executed successfully -2014-09-26T14:23:02.174500+01:00 notice: Installing package kmod-openvswitch from absent to 1.10.2-1.el6 -2014-09-26T14:24:11.983744+01:00 notice: (/Stage[netconfig]/L23network::L2/Package[openvswitch-datapath]/ensure) created -2014-09-26T14:24:12.032322+01:00 notice: eth0 => 10.20.0.4/24, -2014-09-26T14:24:12.033344+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_main_interfaces[eth0]/Notify[eth0 => 10.20.0.4/24, ]/message) defined 'message' as 'eth0 => 10.20.0.4/24, ' -2014-09-26T14:24:12.047484+01:00 notice: eth2 => none, -2014-09-26T14:24:12.047484+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_main_interfaces[eth2]/Notify[eth2 => none, ]/message) defined 'message' as 'eth2 => none, ' -2014-09-26T14:24:12.092790+01:00 notice: eth1 => 172.16.0.3/24, 172.16.0.1 -2014-09-26T14:24:12.093816+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_main_interfaces[eth1]/Notify[eth1 => 172.16.0.3/24, 172.16.0.1]/message) defined 'message' as 'eth1 => 172.16.0.3/24, 172.16.0.1' -2014-09-26T14:24:12.126264+01:00 notice: (/Stage[netconfig]/L23network::L2::Centos_upndown_scripts/File[/sbin/ifup-local]/ensure) created -2014-09-26T14:24:12.147697+01:00 notice: (/Stage[netconfig]/L23network::L2::Centos_upndown_scripts/File[/sbin/ifdown-local]/ensure) created -2014-09-26T14:24:12.364218+01:00 notice: Installing package openvswitch from absent to 1.10.2-1 -2014-09-26T14:24:14.962500+01:00 notice: (/Stage[netconfig]/L23network::L2/Package[openvswitch-common]/ensure) created -2014-09-26T14:24:16.053446+01:00 notice: (/Stage[netconfig]/L23network::L2/Service[openvswitch-service]/ensure) ensure changed 'stopped' to 'running' -2014-09-26T14:24:16.380527+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_main_interfaces[eth0]/L23network::L3::Ifconfig[eth0]/File[/etc/sysconfig/network-scripts/network-functions-ipv6]/mode) mode changed '0644' to '0755' -2014-09-26T14:24:16.386450+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_main_interfaces[eth0]/L23network::L3::Ifconfig[eth0]/File[/etc/sysconfig/network-scripts/network-functions]/mode) mode changed '0644' to '0755' -2014-09-26T14:24:16.392411+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_main_interfaces[eth0]/L23network::L3::Ifconfig[eth0]/File[/etc/sysconfig/network-scripts/ifcfg-lo]/mode) mode changed '0644' to '0755' -2014-09-26T14:24:16.462916+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_main_interfaces[eth1]/L23network::L3::Ifconfig[eth1]/L23network::L3::Defaultroute[172.16.0.1]/Cfg[172.16.0.1]/value) value changed '10.20.0.2' to '172.16.0.1' -2014-09-26T14:24:16.604678+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_main_interfaces[eth1]/L23network::L3::Ifconfig[eth1]/L23network::L3::Defaultroute[172.16.0.1]/Exec[Default route of 172.16.0.1 metric ]/returns) executed successfully -2014-09-26T14:24:16.630802+01:00 notice: Interface:eth2 IP:none/ -2014-09-26T14:24:16.631958+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_main_interfaces[eth2]/L23network::L3::Ifconfig[eth2]/Notify[ifconfig_eth2]/message) defined 'message' as 'Interface:eth2 IP:none/' -2014-09-26T14:24:16.646461+01:00 notice: Interface:eth1 IP:172.16.0.3/255.255.255.0 -2014-09-26T14:24:16.647560+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_main_interfaces[eth1]/L23network::L3::Ifconfig[eth1]/Notify[ifconfig_eth1]/message) defined 'message' as 'Interface:eth1 IP:172.16.0.3/255.255.255.0' -2014-09-26T14:24:16.654597+01:00 notice: Interface:eth0 IP:10.20.0.4/255.255.255.0 -2014-09-26T14:24:16.655783+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_main_interfaces[eth0]/L23network::L3::Ifconfig[eth0]/Notify[ifconfig_eth0]/message) defined 'message' as 'Interface:eth0 IP:10.20.0.4/255.255.255.0' -2014-09-26T14:24:16.663470+01:00 notice: (/Stage[netconfig]/Openstack::Keepalive/Sysctl::Value[net.ipv4.tcp_retries2]/Sysctl[net.ipv4.tcp_retries2]/ensure) created -2014-09-26T14:24:17.165274+01:00 notice: (/Stage[netconfig]/Openstack::Keepalive/Sysctl::Value[net.ipv4.tcp_retries2]/Exec[exec_sysctl_net.ipv4.tcp_retries2]/returns) executed successfully -2014-09-26T14:24:17.201802+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_main_interfaces[eth1]/L23network::L3::Ifconfig[eth1]/File[/etc/sysconfig/network-scripts/ifcfg-eth1]/content) content changed '{md5}a321fffa064881548a02a57efbce044d' to '{md5}1b413ec798e5a6f334edc7015e8d89b4' -2014-09-26T14:24:17.221184+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_main_interfaces[eth0]/L23network::L3::Ifconfig[eth0]/File[/etc/sysconfig/network-scripts/ifcfg-eth0]/content) content changed '{md5}f14b18d9f5768c47c9711910e3293325' to '{md5}586534ee16120b978156f879f20c6c81' -2014-09-26T14:24:17.242282+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_main_interfaces[eth2]/L23network::L3::Ifconfig[eth2]/File[/etc/sysconfig/network-scripts/ifcfg-eth2]/content) content changed '{md5}4db8d67f6bb88303fb62b1bcd936821d' to '{md5}ed6bcfb7508dcefd3ed8af4f8e1fa073' -2014-09-26T14:24:17.587889+01:00 notice: (L3_if_downup[eth1](provider=ruby)) Interface 'eth1' down. -2014-09-26T14:24:20.781627+01:00 notice: (L3_if_downup[eth1](provider=ruby)) Interface 'eth1' flush. -2014-09-26T14:24:26.129033+01:00 notice: (L3_if_downup[eth1](provider=ruby)) Interface 'eth1' up. -2014-09-26T14:24:26.130136+01:00 notice: (L3_if_downup[eth1](provider=ruby)) Interface 'eth1' has good carrier. -2014-09-26T14:24:26.130286+01:00 notice: (L3_if_downup[eth1](provider=ruby)) Interface 'eth1' Don't checked. -2014-09-26T14:24:26.131476+01:00 notice: (L3_if_downup[eth1](provider=ruby)) Interface 'eth1' done. -2014-09-26T14:24:26.131727+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_main_interfaces[eth1]/L23network::L3::Ifconfig[eth1]/L3_if_downup[eth1]) Triggered 'refresh' from 1 events -2014-09-26T14:24:34.799673+01:00 notice: (L3_if_downup[eth0](provider=ruby)) Interface 'eth0' down. -2014-09-26T14:24:34.799673+01:00 notice: (L3_if_downup[eth0](provider=ruby)) Interface 'eth0' flush. -2014-09-26T14:24:34.800132+01:00 notice: (L3_if_downup[eth0](provider=ruby)) Interface 'eth0' up. -2014-09-26T14:24:34.800132+01:00 notice: (L3_if_downup[eth0](provider=ruby)) Interface 'eth0' has good carrier. -2014-09-26T14:24:34.800878+01:00 notice: (L3_if_downup[eth0](provider=ruby)) Interface 'eth0' Don't checked. -2014-09-26T14:24:34.802064+01:00 notice: (L3_if_downup[eth0](provider=ruby)) Interface 'eth0' done. -2014-09-26T14:24:34.802218+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_main_interfaces[eth0]/L23network::L3::Ifconfig[eth0]/L3_if_downup[eth0]) Triggered 'refresh' from 1 events -2014-09-26T14:24:35.043838+01:00 notice: (L3_if_downup[eth2](provider=ruby)) Interface 'eth2' down. -2014-09-26T14:24:38.114784+01:00 notice: (L3_if_downup[eth2](provider=ruby)) Interface 'eth2' flush. -2014-09-26T14:24:41.302499+01:00 notice: (L3_if_downup[eth2](provider=ruby)) Interface 'eth2' up. -2014-09-26T14:24:41.305003+01:00 notice: (L3_if_downup[eth2](provider=ruby)) Interface 'eth2' has good carrier. -2014-09-26T14:24:41.306181+01:00 notice: (L3_if_downup[eth2](provider=ruby)) Interface 'eth2' Don't checked. -2014-09-26T14:24:41.306523+01:00 notice: (L3_if_downup[eth2](provider=ruby)) Interface 'eth2' done. -2014-09-26T14:24:41.308149+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_main_interfaces[eth2]/L23network::L3::Ifconfig[eth2]/L3_if_downup[eth2]) Triggered 'refresh' from 1 events -2014-09-26T14:24:41.390846+01:00 notice: eth0.103 => none, -2014-09-26T14:24:41.391958+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_sub_interfaces[eth0.103]/Notify[eth0.103 => none, ]/message) defined 'message' as 'eth0.103 => none, ' -2014-09-26T14:24:41.423085+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_sub_interfaces[eth0.103]/L23network::L3::Ifconfig[eth0.103]/File[/etc/sysconfig/network-scripts/ifcfg-eth0.103]/ensure) created -2014-09-26T14:24:41.429595+01:00 notice: eth0.101 => 192.168.0.2/24, -2014-09-26T14:24:41.430825+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_sub_interfaces[eth0.101]/Notify[eth0.101 => 192.168.0.2/24, ]/message) defined 'message' as 'eth0.101 => 192.168.0.2/24, ' -2014-09-26T14:24:41.453221+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_sub_interfaces[eth0.101]/L23network::L3::Ifconfig[eth0.101]/File[/etc/sysconfig/network-scripts/ifcfg-eth0.101]/ensure) created -2014-09-26T14:24:41.469270+01:00 notice: eth0.102 => 192.168.1.2/24, -2014-09-26T14:24:41.470364+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_sub_interfaces[eth0.102]/Notify[eth0.102 => 192.168.1.2/24, ]/message) defined 'message' as 'eth0.102 => 192.168.1.2/24, ' -2014-09-26T14:24:41.479163+01:00 notice: Interface:eth0.102 IP:192.168.1.2/255.255.255.0 -2014-09-26T14:24:41.480295+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_sub_interfaces[eth0.102]/L23network::L3::Ifconfig[eth0.102]/Notify[ifconfig_eth0.102]/message) defined 'message' as 'Interface:eth0.102 IP:192.168.1.2/255.255.255.0' -2014-09-26T14:24:41.494468+01:00 notice: Interface:eth0.101 IP:192.168.0.2/255.255.255.0 -2014-09-26T14:24:41.495586+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_sub_interfaces[eth0.101]/L23network::L3::Ifconfig[eth0.101]/Notify[ifconfig_eth0.101]/message) defined 'message' as 'Interface:eth0.101 IP:192.168.0.2/255.255.255.0' -2014-09-26T14:24:41.497961+01:00 notice: (L3_if_downup[eth0.101](provider=ruby)) Carrier is DOWN, 'eth0.101' skipping carrier test -2014-09-26T14:24:41.643974+01:00 notice: (L3_if_downup[eth0.101](provider=ruby)) Interface 'eth0.101' down. -2014-09-26T14:24:44.688502+01:00 notice: (L3_if_downup[eth0.101](provider=ruby)) Can't flush interface 'eth0.101'. -2014-09-26T14:24:46.922863+01:00 notice: (L3_if_downup[eth0.101](provider=ruby)) Interface 'eth0.101' up. -2014-09-26T14:24:46.924093+01:00 notice: (L3_if_downup[eth0.101](provider=ruby)) Interface 'eth0.101' Don't checked. -2014-09-26T14:24:46.924396+01:00 notice: (L3_if_downup[eth0.101](provider=ruby)) Interface 'eth0.101' done. -2014-09-26T14:24:46.925175+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_sub_interfaces[eth0.101]/L23network::L3::Ifconfig[eth0.101]/L3_if_downup[eth0.101]) Triggered 'refresh' from 1 events -2014-09-26T14:24:46.981327+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_sub_interfaces[eth0.102]/L23network::L3::Ifconfig[eth0.102]/File[/etc/sysconfig/network-scripts/ifcfg-eth0.102]/ensure) created -2014-09-26T14:24:46.985707+01:00 notice: (L3_if_downup[eth0.102](provider=ruby)) Carrier is DOWN, 'eth0.102' skipping carrier test -2014-09-26T14:24:47.117539+01:00 notice: (L3_if_downup[eth0.102](provider=ruby)) Interface 'eth0.102' down. -2014-09-26T14:24:50.161484+01:00 notice: (L3_if_downup[eth0.102](provider=ruby)) Can't flush interface 'eth0.102'. -2014-09-26T14:24:52.363658+01:00 notice: (L3_if_downup[eth0.102](provider=ruby)) Interface 'eth0.102' up. -2014-09-26T14:24:52.363943+01:00 notice: (L3_if_downup[eth0.102](provider=ruby)) Interface 'eth0.102' Don't checked. -2014-09-26T14:24:52.363943+01:00 notice: (L3_if_downup[eth0.102](provider=ruby)) Interface 'eth0.102' done. -2014-09-26T14:24:52.363943+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_sub_interfaces[eth0.102]/L23network::L3::Ifconfig[eth0.102]/L3_if_downup[eth0.102]) Triggered 'refresh' from 1 events -2014-09-26T14:24:52.380993+01:00 notice: Interface:eth0.103 IP:none/ -2014-09-26T14:24:52.382074+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_sub_interfaces[eth0.103]/L23network::L3::Ifconfig[eth0.103]/Notify[ifconfig_eth0.103]/message) defined 'message' as 'Interface:eth0.103 IP:none/' -2014-09-26T14:24:52.384644+01:00 notice: (L3_if_downup[eth0.103](provider=ruby)) Carrier is DOWN, 'eth0.103' skipping carrier test -2014-09-26T14:24:52.528350+01:00 notice: (L3_if_downup[eth0.103](provider=ruby)) Interface 'eth0.103' down. -2014-09-26T14:24:55.569899+01:00 notice: (L3_if_downup[eth0.103](provider=ruby)) Can't flush interface 'eth0.103'. -2014-09-26T14:24:55.715065+01:00 notice: (L3_if_downup[eth0.103](provider=ruby)) Interface 'eth0.103' up. -2014-09-26T14:24:55.715314+01:00 notice: (L3_if_downup[eth0.103](provider=ruby)) Interface 'eth0.103' Don't checked. -2014-09-26T14:24:55.715314+01:00 notice: (L3_if_downup[eth0.103](provider=ruby)) Interface 'eth0.103' done. -2014-09-26T14:24:55.716191+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_sub_interfaces[eth0.103]/L23network::L3::Ifconfig[eth0.103]/L3_if_downup[eth0.103]) Triggered 'refresh' from 1 events -2014-09-26T14:24:56.248446+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[105 nova ]/ensure) created -2014-09-26T14:24:56.631613+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[103 swift]/ensure) created -2014-09-26T14:24:56.994681+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[104 glance]/ensure) created -2014-09-26T14:24:57.314977+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[115 openvswitch db]/ensure) created -2014-09-26T14:24:57.558435+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[334 accept gre]/ensure) created -2014-09-26T14:24:57.799897+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[000 accept all icmp requests]/ensure) created -2014-09-26T14:24:58.029086+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[107 memcached tcp]/ensure) created -2014-09-26T14:24:58.204312+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[112 ntp-server]/ensure) created -2014-09-26T14:24:58.917002+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[020 ssh]/ensure) created -2014-09-26T14:24:59.737948+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[107 memcached udp]/ensure) created -2014-09-26T14:25:00.121829+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[108 rsync]/ensure) created -2014-09-26T14:25:00.416657+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[106 rabbitmq ]/ensure) created -2014-09-26T14:25:00.646872+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[117 libvirt]/ensure) created -2014-09-26T14:25:01.057132+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[111 dns-server]/ensure) created -2014-09-26T14:25:01.857477+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[333 notrack gre]/ensure) created -2014-09-26T14:25:02.240497+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[102 keystone]/ensure) created -2014-09-26T14:25:02.514614+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[109 iscsi ]/ensure) created -2014-09-26T14:25:02.741679+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[114 corosync-output]/ensure) created -2014-09-26T14:25:03.341827+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[118 vnc ports]/ensure) created -2014-09-26T14:25:03.758508+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[118 libvirt migration]/ensure) created -2014-09-26T14:25:04.011770+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[111 dhcp-server]/ensure) created -2014-09-26T14:25:04.436200+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[101 mysql]/ensure) created -2014-09-26T14:25:05.282432+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[110 neutron ]/ensure) created -2014-09-26T14:25:05.616405+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[001 accept all to lo interface]/ensure) created -2014-09-26T14:25:05.856425+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[002 accept related established rules]/ensure) created -2014-09-26T14:25:06.462694+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[113 corosync-input]/ensure) created -2014-09-26T14:25:06.832883+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[116 nrpe-server]/ensure) created -2014-09-26T14:25:07.279081+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[100 http]/ensure) created -2014-09-26T14:25:07.936171+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[999 drop all other requests]/ensure) created -2014-09-26T14:25:08.249651+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[119 ceilometer]/ensure) created -2014-09-26T14:25:08.907869+01:00 notice: (/Stage[main]/Os_common/Firewall[004 remote puppet ]/ensure) created -2014-09-26T14:25:09.132015+01:00 notice: Installing package bridge-utils from absent to 1.2-10.el6 -2014-09-26T14:25:10.525416+01:00 notice: (/Stage[main]/Nova::Compute/Package[bridge-utils]/ensure) created -2014-09-26T14:25:10.598024+01:00 notice: Installing package MySQL-python from absent to 1.2.5-1.el6 -2014-09-26T14:25:12.877176+01:00 notice: (/Stage[main]/Mysql::Python/Package[python-mysqldb]/ensure) created -2014-09-26T14:25:13.077864+01:00 notice: (/Stage[main]/Os_common/Firewall[003 remote rabbitmq ]/ensure) created -2014-09-26T14:25:13.455589+01:00 notice: Installing package python-novaclient from absent to 2.17.0-fuel5.1.mira1 -2014-09-26T14:25:19.361894+01:00 notice: (/Stage[main]/Nova::Client/Package[python-novaclient]/ensure) created -2014-09-26T14:25:19.491052+01:00 notice: Installing package libvirt from absent to 1.2.5-1.mira1 -2014-09-26T14:25:45.217785+01:00 notice: (/Stage[main]/Nova::Compute::Libvirt/Package[libvirt]/ensure) created -2014-09-26T14:25:45.322775+01:00 notice: Installing package python-keystone from absent to 2014.1.1-fuel5.1.mira6 -2014-09-26T14:25:59.692157+01:00 notice: (/Stage[main]/Keystone::Python/Package[python-keystone]/ensure) created -2014-09-26T14:25:59.797969+01:00 notice: Installing package openstack-nova-compute from absent to 2014.1.1-fuel5.1.mira8 -2014-09-26T14:26:47.618777+01:00 notice: (/Stage[main]/Nova::Compute/Nova::Generic_service[compute]/Package[nova-compute]/ensure) created -2014-09-26T14:26:47.647924+01:00 notice: (/Stage[main]/Puppet::Pull/File[/usr/local/bin/puppet-pull]/ensure) created -2014-09-26T14:26:47.734414+01:00 notice: Installing package dnsmasq-utils from absent to 2.65-5.el6 -2014-09-26T14:26:49.169742+01:00 notice: (/Stage[main]/Nova::Network::Flatdhcp/Package[dnsmasq-utils]/ensure) created -2014-09-26T14:26:49.390546+01:00 notice: (/Stage[main]/Nova/User[nova]/shell) shell changed '/sbin/nologin' to '/bin/false' -2014-09-26T14:26:49.627881+01:00 notice: (/Stage[main]/Nova::Network::Flatdhcp/Nova_config[DEFAULT/flat_interface]/ensure) created -2014-09-26T14:26:49.684338+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/debug]/ensure) created -2014-09-26T14:26:49.854582+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/log_dir]/ensure) created -2014-09-26T14:26:49.910212+01:00 notice: (/Stage[main]/Nova::Network::Flatdhcp/Nova_config[DEFAULT/network_manager]/ensure) created -2014-09-26T14:26:49.963202+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/amqp_durable_queues]/ensure) created -2014-09-26T14:26:50.022823+01:00 notice: (/Stage[main]/Nova::Compute/Nova_config[DEFAULT/vncserver_proxyclient_address]/ensure) created -2014-09-26T14:26:50.074251+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_hosts]/ensure) created -2014-09-26T14:26:50.249752+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/notify_api_faults]/ensure) created -2014-09-26T14:26:50.339835+01:00 notice: (/Stage[main]/Nova::Network::Flatdhcp/Nova_config[DEFAULT/flat_network_bridge]/ensure) created -2014-09-26T14:26:50.424943+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/memcached_servers]/ensure) created -2014-09-26T14:26:50.563273+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_use_ssl]/ensure) created -2014-09-26T14:26:50.618430+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/notification_driver]/ensure) created -2014-09-26T14:26:50.674848+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/glance_api_servers]/ensure) created -2014-09-26T14:26:50.756494+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_userid]/ensure) created -2014-09-26T14:26:50.807075+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_ha_queues]/ensure) created -2014-09-26T14:26:50.887086+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/state_path]/ensure) created -2014-09-26T14:26:50.937106+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_password]/ensure) created -2014-09-26T14:26:50.989104+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/report_interval]/ensure) created -2014-09-26T14:26:51.137126+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/verbose]/ensure) created -2014-09-26T14:26:51.146325+01:00 notice: (/Stage[main]/Nova/File[/var/log/nova]/group) group changed 'root' to 'nova' -2014-09-26T14:26:51.147664+01:00 notice: (/Stage[main]/Nova/File[/var/log/nova]/mode) mode changed '0755' to '0750' -2014-09-26T14:26:51.306420+01:00 notice: (/Stage[main]/Nova/Nova_config[database/idle_timeout]/ensure) created -2014-09-26T14:26:51.420186+01:00 notice: (/Stage[main]/Nova::Compute::Libvirt/Nova_config[libvirt/disk_cachemodes]/ensure) created -2014-09-26T14:26:51.483929+01:00 notice: (/Stage[main]/Nova::Compute/Nova_config[DEFAULT/vnc_enabled]/ensure) created -2014-09-26T14:26:51.536411+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_virtual_host]/ensure) created -2014-09-26T14:26:51.624862+01:00 notice: (/Stage[main]/Nova::Network::Flatdhcp/Nova_config[DEFAULT/dhcpbridge]/ensure) created -2014-09-26T14:26:51.682687+01:00 notice: (/Stage[main]/Nova::Network::Flatdhcp/Nova_config[DEFAULT/dhcpbridge_flagfile]/ensure) created -2014-09-26T14:26:51.831530+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/image_service]/ensure) created -2014-09-26T14:26:51.919350+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/notify_on_state_change]/ensure) created -2014-09-26T14:26:51.976079+01:00 notice: (/Stage[main]/Nova::Compute/Nova_config[DEFAULT/instance_usage_audit]/ensure) created -2014-09-26T14:26:52.033433+01:00 notice: (/Stage[main]/Nova::Network::Flatdhcp/Nova_config[DEFAULT/force_dhcp_release]/ensure) created -2014-09-26T14:26:52.085783+01:00 notice: (/Stage[main]/Nova/Nova_config[database/connection]/ensure) created -2014-09-26T14:26:52.138541+01:00 notice: (/Stage[main]/Nova::Compute::Libvirt/Nova_config[libvirt/cpu_mode]/ensure) created -2014-09-26T14:26:52.212505+01:00 notice: (/Stage[main]/Nova::Compute::Libvirt/Nova_config[libvirt/virt_type]/ensure) created -2014-09-26T14:26:52.271139+01:00 notice: (/Stage[main]/Nova::Compute/Nova_config[DEFAULT/novncproxy_base_url]/ensure) created -2014-09-26T14:26:52.328506+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/lock_path]/ensure) created -2014-09-26T14:26:52.474780+01:00 notice: (/Stage[main]/Nova::Network::Flatdhcp/Nova_config[DEFAULT/public_interface]/ensure) created -2014-09-26T14:26:52.529476+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/service_down_time]/ensure) created -2014-09-26T14:26:52.587056+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/syslog_log_facility]/ensure) created -2014-09-26T14:26:52.645243+01:00 notice: (/Stage[main]/Nova::Compute::Libvirt/Nova_config[DEFAULT/vncserver_listen]/ensure) created -2014-09-26T14:26:52.696710+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/notification_topics]/ensure) created -2014-09-26T14:26:52.748360+01:00 notice: (/Stage[main]/Nova::Compute/Nova_config[DEFAULT/instance_usage_audit_period]/ensure) created -2014-09-26T14:26:52.807928+01:00 notice: (/Stage[main]/Nova::Api/Nova_config[DEFAULT/osapi_compute_listen]/ensure) created -2014-09-26T14:26:52.858584+01:00 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/auth_port]/ensure) created -2014-09-26T14:26:52.910868+01:00 notice: (/Stage[main]/Nova::Api/Nova_config[DEFAULT/ec2_listen]/ensure) created -2014-09-26T14:26:53.048142+01:00 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/admin_password]/ensure) created -2014-09-26T14:26:53.103158+01:00 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/admin_user]/ensure) created -2014-09-26T14:26:53.159781+01:00 notice: (/Stage[main]/Nova::Api/Nova_config[conductor/workers]/ensure) created -2014-09-26T14:26:53.213692+01:00 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/auth_protocol]/ensure) created -2014-09-26T14:26:53.266707+01:00 notice: (/Stage[main]/Nova::Api/Nova_config[DEFAULT/enabled_apis]/ensure) created -2014-09-26T14:26:53.324803+01:00 notice: (/Stage[main]/Nova::Api/Nova_config[DEFAULT/volume_api_class]/ensure) created -2014-09-26T14:26:53.375056+01:00 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/auth_host]/ensure) created -2014-09-26T14:26:53.486467+01:00 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/admin_tenant_name]/ensure) created -2014-09-26T14:26:53.627263+01:00 notice: (/Stage[main]/Nova::Api/Nova_config[DEFAULT/use_forwarded_for]/ensure) created -2014-09-26T14:26:53.689904+01:00 notice: (/Stage[main]/Nova::Api/Nova_config[DEFAULT/osapi_volume_listen]/ensure) created -2014-09-26T14:26:53.743526+01:00 notice: (/Stage[main]/Nova::Api/Nova_config[DEFAULT/metadata_listen]/ensure) created -2014-09-26T14:26:53.797107+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/auth_strategy]/ensure) created -2014-09-26T14:26:53.854846+01:00 notice: (/Stage[main]/Nova::Compute::Libvirt/Nova_config[DEFAULT/compute_driver]/ensure) created -2014-09-26T14:26:53.907110+01:00 notice: (/Stage[main]/Nova::Api/Nova_config[DEFAULT/osapi_compute_workers]/ensure) created -2014-09-26T14:26:53.987066+01:00 notice: (/Stage[main]/Osnailyfacter::Test_compute/File[/tmp/compute-file]/ensure) defined content as '{md5}7279b4c82eec3e84e18d72b4ecd19ae1' -2014-09-26T14:26:54.052706+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rootwrap_config]/ensure) created -2014-09-26T14:26:54.106038+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rpc_backend]/ensure) created -2014-09-26T14:26:54.167622+01:00 notice: (/Stage[main]/Nova::Network::Flatdhcp/Nova_config[DEFAULT/fixed_range]/ensure) created -2014-09-26T14:26:54.321529+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/use_syslog]/ensure) created -2014-09-26T14:26:54.380672+01:00 notice: (/Stage[main]/Nova::Api/Nova_config[DEFAULT/metadata_workers]/ensure) created -2014-09-26T14:26:54.452933+01:00 notice: (/Stage[main]/Nova::Network::Flatdhcp/Nova_config[DEFAULT/dhcp_domain]/ensure) created -2014-09-26T14:26:54.518740+01:00 notice: (/Stage[main]/Osnailyfacter::Cluster_simple/Nova_config[DEFAULT/use_cow_images]/ensure) created -2014-09-26T14:26:54.578025+01:00 notice: (/Stage[main]/Osnailyfacter::Cluster_simple/Nova_config[DEFAULT/compute_scheduler_driver]/ensure) created -2014-09-26T14:26:54.636485+01:00 notice: (/Stage[main]/Osnailyfacter::Cluster_simple/Nova_config[DEFAULT/start_guests_on_host_boot]/ensure) created -2014-09-26T14:26:54.698196+01:00 notice: (/Stage[main]/Nova::Network/Sysctl::Value[net.ipv4.ip_forward]/Sysctl[net.ipv4.ip_forward]/val) val changed '0' to '1' -2014-09-26T14:26:54.923584+01:00 notice: Installing package openstack-nova-network from absent to 2014.1.1-fuel5.1.mira8 -2014-09-26T14:26:56.920464+01:00 notice: (/Stage[main]/Nova::Network/Nova::Generic_service[network]/Package[nova-network]/ensure) created -2014-09-26T14:26:56.933093+01:00 notice: Module openstack cannot notify service nova-compute on packages update -2014-09-26T14:26:56.934318+01:00 notice: (/Stage[main]/Openstack::Compute/Notify[Module openstack cannot notify service nova-compute on packages update]/message) defined 'message' as 'Module openstack cannot notify service nova-compute on packages update' -2014-09-26T14:26:57.151107+01:00 notice: Installing package euca2ools from absent to 2.1.3-1.el6 -2014-09-26T14:26:59.883028+01:00 notice: (/Stage[main]/Openstack::Compute/Package[euca2ools]/ensure) created -2014-09-26T14:26:59.975340+01:00 notice: (/Stage[main]/Openstack::Compute/Nova_config[DEFAULT/metadata_host]/ensure) created -2014-09-26T14:26:59.984480+01:00 notice: Module openstack cannot notify service nova-computeon packages update -2014-09-26T14:26:59.985607+01:00 notice: (/Stage[main]/Openstack::Compute/Notify[Module openstack cannot notify service nova-computeon packages update]/message) defined 'message' as 'Module openstack cannot notify service nova-computeon packages update' -2014-09-26T14:27:00.051464+01:00 notice: (/Stage[main]/Openstack::Compute/Nova_config[DEFAULT/live_migration_flag]/ensure) created -2014-09-26T14:27:00.060634+01:00 notice: (/Stage[main]/Openstack::Compute/File_line[no_qemu_selinux]/ensure) created -2014-09-26T14:27:00.115930+01:00 notice: Installing package screen from absent to 4.0.3-16.el6 -2014-09-26T14:27:01.823032+01:00 notice: (/Stage[main]/Openstack::Compute/Package[screen]/ensure) created -2014-09-26T14:27:01.968643+01:00 notice: (/Stage[main]/Openstack::Compute/Augeas[sysconfig-libvirt]/returns) executed successfully -2014-09-26T14:27:02.034878+01:00 notice: (/Stage[main]/Openstack::Compute/Nova_config[DEFAULT/cinder_catalog_info]/ensure) created -2014-09-26T14:27:02.095129+01:00 notice: (/Stage[main]/Openstack::Compute/Nova_config[DEFAULT/send_arp_for_ha]/ensure) created -2014-09-26T14:27:02.149926+01:00 notice: Installing package cpufreq-init from absent to 1.0.0-0.el6 -2014-09-26T14:27:03.853699+01:00 notice: (/Stage[main]/Openstack::Compute/Package[cpufreq-init]/ensure) created -2014-09-26T14:27:03.963871+01:00 notice: (/Stage[main]/Openstack::Compute/Nova_config[DEFAULT/multi_host]/ensure) created -2014-09-26T14:27:04.022870+01:00 notice: (/Stage[main]/Openstack::Compute/Nova_config[DEFAULT/use_syslog_rfc_format]/ensure) created -2014-09-26T14:27:04.239964+01:00 notice: Installing package avahi from absent to 0.6.25-12.el6 -2014-09-26T14:27:06.851945+01:00 notice: (/Stage[main]/Openstack::Compute/Package[avahi]/ensure) created -2014-09-26T14:27:07.076280+01:00 notice: Installing package unzip from absent to 6.0-1.el6 -2014-09-26T14:27:09.146759+01:00 notice: (/Stage[main]/Openstack::Compute/Package[unzip]/ensure) created -2014-09-26T14:27:09.164212+01:00 notice: (/Stage[main]/Openstack::Compute/Install_ssh_keys[nova_ssh_key_for_migration]/ensure) created -2014-09-26T14:27:09.192713+01:00 notice: (/Stage[main]/Openstack::Compute/File[/var/lib/nova/.ssh/config]/ensure) created -2014-09-26T14:27:09.368330+01:00 notice: (/Stage[main]/Openstack::Compute/Nova_config[DEFAULT/allow_resize_to_same_host]/ensure) created -2014-09-26T14:27:09.518906+01:00 notice: (/Stage[main]/Nova::Network/Sysctl::Value[net.ipv4.ip_forward]/Exec[exec_sysctl_net.ipv4.ip_forward]/returns) net.ipv4.ip_forward = 1 -2014-09-26T14:27:09.521075+01:00 notice: (/Stage[main]/Nova::Network/Sysctl::Value[net.ipv4.ip_forward]/Exec[exec_sysctl_net.ipv4.ip_forward]/returns) executed successfully -2014-09-26T14:27:09.810159+01:00 notice: (/Stage[main]/Openstack::Compute/Service[libvirt-guests]/ensure) ensure changed 'stopped' to 'running' -2014-09-26T14:27:10.526221+01:00 notice: (/Stage[main]/Openstack::Compute/Augeas[libvirt-conf]/returns) executed successfully -2014-09-26T14:27:10.675896+01:00 notice: (/Stage[main]/Nova::Compute::Libvirt/Service[messagebus]/ensure) ensure changed 'stopped' to 'running' -2014-09-26T14:27:10.840043+01:00 notice: (/Stage[main]/Openstack::Compute/Service[avahi-daemon]/ensure) ensure changed 'stopped' to 'running' -2014-09-26T14:27:10.970500+01:00 notice: (/Stage[main]/Nova::Compute::Libvirt/Service[libvirt]/ensure) ensure changed 'stopped' to 'running' -2014-09-26T14:27:11.029145+01:00 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/auth_uri]/ensure) created -2014-09-26T14:27:11.151597+01:00 notice: Installing package openstack-nova-api from absent to 2014.1.1-fuel5.1.mira8 -2014-09-26T14:27:12.740718+01:00 notice: (/Stage[main]/Nova::Api/Nova::Generic_service[api]/Package[nova-api]/ensure) created -2014-09-26T14:27:12.781344+01:00 notice: (/Stage[main]/Nova::Api/Nova_paste_api_ini[filter:ratelimit/limits]/ensure) created -2014-09-26T14:27:12.851846+01:00 notice: (/Stage[main]/Openstack::Compute/Nova_config[DEFAULT/connection_type]/ensure) created -2014-09-26T14:27:12.922835+01:00 notice: (/Stage[main]/Nova::Network::Flatdhcp/Nova_config[DEFAULT/flat_injected]/ensure) created -2014-09-26T14:27:13.092486+01:00 notice: (/Stage[main]/Nova/File[/etc/nova/nova.conf]/owner) owner changed 'root' to 'nova' -2014-09-26T14:27:13.180503+01:00 notice: (/Stage[main]/Nova/Exec[post-nova_config]/returns) Nova config has changed -2014-09-26T14:27:13.182168+01:00 notice: (/Stage[main]/Nova/Exec[post-nova_config]) Triggered 'refresh' from 77 events -2014-09-26T14:27:14.649520+01:00 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]) Triggered 'refresh' from 1 events -2014-09-26T14:27:15.026873+01:00 notice: (/Stage[main]/Nova::Api/Nova::Generic_service[api]/Service[nova-api]/ensure) ensure changed 'stopped' to 'running' -2014-09-26T14:27:15.358802+01:00 notice: (/Stage[main]/Nova::Compute/Nova::Generic_service[compute]/Service[nova-compute]/ensure) ensure changed 'stopped' to 'running' -2014-09-26T14:27:15.655586+01:00 notice: (/Stage[main]/Nova::Network/Nova::Generic_service[network]/Service[nova-network]/ensure) ensure changed 'stopped' to 'running' -2014-09-26T14:27:15.816634+01:00 notice: Finished catalog run in 258.79 seconds -2014-09-26T14:27:27.201731+01:00 info: Loading facts in /etc/puppet/modules/ceph/lib/facter/ceph_conf.rb -2014-09-26T14:27:27.202810+01:00 info: Loading facts in /etc/puppet/modules/ceph/lib/facter/cinder_conf.rb -2014-09-26T14:27:27.203891+01:00 info: Loading facts in /etc/puppet/modules/ceph/lib/facter/glance_api_conf.rb -2014-09-26T14:27:27.205011+01:00 info: Loading facts in /etc/puppet/modules/ceph/lib/facter/nova_compute.rb -2014-09-26T14:27:27.206133+01:00 info: Loading facts in /etc/puppet/modules/ceph/lib/facter/keystone_conf.rb -2014-09-26T14:27:27.206294+01:00 info: Loading facts in /etc/puppet/modules/ceph/lib/facter/ceph_osd.rb -2014-09-26T14:27:27.207223+01:00 info: Loading facts in /etc/puppet/modules/firewall/lib/facter/iptables_version.rb -2014-09-26T14:27:27.208560+01:00 info: Loading facts in /etc/puppet/modules/firewall/lib/facter/iptables_persistent_version.rb -2014-09-26T14:27:27.209646+01:00 info: Loading facts in /etc/puppet/modules/firewall/lib/facter/ip6tables_version.rb -2014-09-26T14:27:27.211236+01:00 info: Loading facts in /etc/puppet/modules/osnailyfacter/lib/facter/naily.rb -2014-09-26T14:27:27.212573+01:00 info: Loading facts in /etc/puppet/modules/neutron/lib/facter/defaultroute.rb -2014-09-26T14:27:27.214746+01:00 info: Loading facts in /etc/puppet/modules/puppet/lib/facter/cacert.rb -2014-09-26T14:27:27.216020+01:00 info: Loading facts in /etc/puppet/modules/puppet/lib/facter/hostcert.rb -2014-09-26T14:27:27.217360+01:00 info: Loading facts in /etc/puppet/modules/puppet/lib/facter/localacacert.rb -2014-09-26T14:27:27.218761+01:00 info: Loading facts in /etc/puppet/modules/puppet/lib/facter/cakey.rb -2014-09-26T14:27:27.220105+01:00 info: Loading facts in /etc/puppet/modules/puppet/lib/facter/hostprivkey.rb -2014-09-26T14:27:27.221765+01:00 info: Loading facts in /etc/puppet/modules/puppet/lib/facter/puppet_semantic_version.rb -2014-09-26T14:27:27.222835+01:00 info: Loading facts in /etc/puppet/modules/puppet/lib/facter/cacrl.rb -2014-09-26T14:27:27.224735+01:00 info: Loading facts in /etc/puppet/modules/puppet/lib/facter/certname.rb -2014-09-26T14:27:27.225828+01:00 info: Loading facts in /etc/puppet/modules/galera/lib/facter/mysql_log_file_size_real.rb -2014-09-26T14:27:27.226995+01:00 info: Loading facts in /etc/puppet/modules/galera/lib/facter/galera_gcomm_empty.rb -2014-09-26T14:27:27.228145+01:00 info: Loading facts in /etc/puppet/modules/corosync/lib/facter/pacemaker_hostname.rb -2014-09-26T14:27:27.229203+01:00 info: Loading facts in /etc/puppet/modules/swift/lib/facter/swift_mountpoints.rb -2014-09-26T14:27:27.297138+01:00 info: Loading facts in /etc/puppet/modules/concat/lib/facter/concat_basedir.rb -2014-09-26T14:27:27.298131+01:00 info: Loading facts in /etc/puppet/modules/lvm/lib/facter/lvm_support.rb -2014-09-26T14:27:27.469496+01:00 info: Loading facts in /etc/puppet/modules/l23network/lib/facter/openvswitch.rb -2014-09-26T14:27:27.481273+01:00 info: Loading facts in /etc/puppet/modules/l23network/lib/facter/check_kern_module.rb -2014-09-26T14:27:27.482985+01:00 info: Loading facts in /etc/puppet/modules/l23network/lib/facter/ovs_vlan_splinters.rb -2014-09-26T14:27:27.485845+01:00 info: Loading facts in /etc/puppet/modules/l23network/lib/facter/default_route.rb -2014-09-26T14:27:27.487817+01:00 info: Loading facts in /etc/puppet/modules/l23network/lib/facter/fqdn_hostname.rb -2014-09-26T14:27:27.488916+01:00 info: Loading facts in /etc/puppet/modules/stdlib/lib/facter/puppet_vardir.rb -2014-09-26T14:27:27.490007+01:00 info: Loading facts in /etc/puppet/modules/stdlib/lib/facter/facter_dot_d.rb -2014-09-26T14:27:27.491697+01:00 info: Loading facts in /etc/puppet/modules/stdlib/lib/facter/pe_version.rb -2014-09-26T14:27:27.493652+01:00 info: Loading facts in /etc/puppet/modules/stdlib/lib/facter/root_home.rb -2014-09-26T14:27:27.494192+01:00 info: Loading facts in /etc/puppet/modules/nailgun/lib/facter/fuel_version.rb -2014-09-26T14:27:27.495288+01:00 info: Loading facts in /etc/puppet/modules/nailgun/lib/facter/generate_fuel_key.rb -2014-09-26T14:27:27.496421+01:00 info: Loading facts in /etc/puppet/modules/nailgun/lib/facter/iops.rb -2014-09-26T14:27:28.773060+01:00 debug: importing '/etc/puppet/modules/l23network/manifests/init.pp' in environment production -2014-09-26T14:27:28.778691+01:00 debug: importing '/etc/puppet/modules/l23network/manifests/hosts_file.pp' in environment production -2014-09-26T14:27:28.783343+01:00 debug: Automatically imported l23network::hosts_file from l23network/hosts_file into production -2014-09-26T14:27:28.792939+01:00 debug: hiera(): Hiera YAML backend starting -2014-09-26T14:27:28.794041+01:00 debug: hiera(): Looking up l23network::hosts_file::hosts_file in YAML backend -2014-09-26T14:27:28.795125+01:00 debug: hiera(): Looking for data source common -2014-09-26T14:27:28.796243+01:00 notice: (Scope(Class[L23network::Hosts_file])) Generating host entry node-4 192.168.0.1 node-4.domain.tld -2014-09-26T14:27:28.796510+01:00 notice: (Scope(Class[L23network::Hosts_file])) Generating host entry node-5 192.168.0.2 node-5.domain.tld -2014-09-26T14:27:28.826424+01:00 debug: (Host[node-5]) Adding default for target -2014-09-26T14:27:28.827394+01:00 debug: (Host[node-5]) Adding default for ensure -2014-09-26T14:27:28.828480+01:00 debug: (Host[node-4]) Adding default for target -2014-09-26T14:27:28.828761+01:00 debug: (Host[node-4]) Adding default for ensure -2014-09-26T14:27:28.829565+01:00 notice: Compiled catalog for node-5.local in environment production in 0.14 seconds -2014-09-26T14:27:28.846462+01:00 debug: Creating default schedules -2014-09-26T14:27:28.965090+01:00 debug: Puppet::Type::User::ProviderDirectoryservice: file /usr/bin/dsimport does not exist -2014-09-26T14:27:28.966067+01:00 debug: Puppet::Type::User::ProviderUser_role_add: file roleadd does not exist -2014-09-26T14:27:28.967227+01:00 debug: Puppet::Type::User::ProviderLdap: true value when expecting false -2014-09-26T14:27:28.967565+01:00 debug: Puppet::Type::User::ProviderPw: file pw does not exist -2014-09-26T14:27:29.032556+01:00 debug: Using settings: adding file resource 'publickeydir': 'File[/var/lib/puppet/ssl/public_keys]{:backup=>false, :loglevel=>:debug, :links=>:follow, :owner=>"puppet", :path=>"/var/lib/puppet/ssl/public_keys", :ensure=>:directory}' -2014-09-26T14:27:29.033986+01:00 debug: Using settings: adding file resource 'clientyamldir': 'File[/var/lib/puppet/client_yaml]{:backup=>false, :loglevel=>:debug, :links=>:follow, :mode=>"750", :path=>"/var/lib/puppet/client_yaml", :ensure=>:directory}' -2014-09-26T14:27:29.034703+01:00 debug: Using settings: adding file resource 'privatekeydir': 'File[/var/lib/puppet/ssl/private_keys]{:backup=>false, :loglevel=>:debug, :links=>:follow, :owner=>"puppet", :mode=>"750", :path=>"/var/lib/puppet/ssl/private_keys", :ensure=>:directory}' -2014-09-26T14:27:29.034987+01:00 debug: Using settings: adding file resource 'plugindest': 'File[/var/lib/puppet/lib]{:backup=>false, :loglevel=>:debug, :links=>:follow, :path=>"/var/lib/puppet/lib", :ensure=>:directory}' -2014-09-26T14:27:29.035875+01:00 debug: Using settings: adding file resource 'hiera_config': 'File[/etc/puppet/hiera.yaml]{:backup=>false, :loglevel=>:debug, :links=>:follow, :path=>"/etc/puppet/hiera.yaml", :ensure=>:file}' -2014-09-26T14:27:29.037000+01:00 debug: Using settings: adding file resource 'clientbucketdir': 'File[/var/lib/puppet/clientbucket]{:backup=>false, :loglevel=>:debug, :links=>:follow, :mode=>"750", :path=>"/var/lib/puppet/clientbucket", :ensure=>:directory}' -2014-09-26T14:27:29.073967+01:00 debug: Puppet::Type::Group::ProviderDirectoryservice: file /usr/bin/dscl does not exist -2014-09-26T14:27:29.075006+01:00 debug: Puppet::Type::Group::ProviderLdap: true value when expecting false -2014-09-26T14:27:29.075403+01:00 debug: Puppet::Type::Group::ProviderPw: file pw does not exist -2014-09-26T14:27:29.076673+01:00 debug: Using settings: adding file resource 'rundir': 'File[/var/run/puppet]{:backup=>false, :group=>"puppet", :loglevel=>:debug, :links=>:follow, :owner=>"puppet", :mode=>"755", :path=>"/var/run/puppet", :ensure=>:directory}' -2014-09-26T14:27:29.077796+01:00 debug: Using settings: adding file resource 'pluginfactdest': 'File[/var/lib/puppet/facts.d]{:backup=>false, :loglevel=>:debug, :links=>:follow, :path=>"/var/lib/puppet/facts.d", :ensure=>:directory}' -2014-09-26T14:27:29.078924+01:00 debug: Using settings: adding file resource 'graphdir': 'File[/var/lib/puppet/state/graphs]{:backup=>false, :loglevel=>:debug, :links=>:follow, :path=>"/var/lib/puppet/state/graphs", :ensure=>:directory}' -2014-09-26T14:27:29.080046+01:00 debug: Using settings: adding file resource 'logdir': 'File[/var/log/puppet]{:backup=>false, :group=>"puppet", :loglevel=>:debug, :links=>:follow, :owner=>"puppet", :mode=>"750", :path=>"/var/log/puppet", :ensure=>:directory}' -2014-09-26T14:27:29.080428+01:00 debug: Using settings: adding file resource 'ssldir': 'File[/var/lib/puppet/ssl]{:backup=>false, :loglevel=>:debug, :links=>:follow, :owner=>"puppet", :mode=>"771", :path=>"/var/lib/puppet/ssl", :ensure=>:directory}' -2014-09-26T14:27:29.081155+01:00 debug: Using settings: adding file resource 'statefile': 'File[/var/lib/puppet/state/state.yaml]{:backup=>false, :loglevel=>:debug, :links=>:follow, :mode=>"660", :path=>"/var/lib/puppet/state/state.yaml", :ensure=>:file}' -2014-09-26T14:27:29.081470+01:00 debug: Using settings: adding file resource 'statedir': 'File[/var/lib/puppet/state]{:backup=>false, :loglevel=>:debug, :links=>:follow, :mode=>"1755", :path=>"/var/lib/puppet/state", :ensure=>:directory}' -2014-09-26T14:27:29.082251+01:00 debug: Using settings: adding file resource 'vardir': 'File[/var/lib/puppet]{:backup=>false, :group=>"puppet", :loglevel=>:debug, :links=>:follow, :owner=>"puppet", :path=>"/var/lib/puppet", :ensure=>:directory}' -2014-09-26T14:27:29.083439+01:00 debug: Using settings: adding file resource 'requestdir': 'File[/var/lib/puppet/ssl/certificate_requests]{:backup=>false, :loglevel=>:debug, :links=>:follow, :owner=>"puppet", :path=>"/var/lib/puppet/ssl/certificate_requests", :ensure=>:directory}' -2014-09-26T14:27:29.084558+01:00 debug: Using settings: adding file resource 'client_datadir': 'File[/var/lib/puppet/client_data]{:backup=>false, :loglevel=>:debug, :links=>:follow, :mode=>"750", :path=>"/var/lib/puppet/client_data", :ensure=>:directory}' -2014-09-26T14:27:29.085759+01:00 debug: Using settings: adding file resource 'lastrunfile': 'File[/var/lib/puppet/state/last_run_summary.yaml]{:backup=>false, :loglevel=>:debug, :links=>:follow, :mode=>"644", :path=>"/var/lib/puppet/state/last_run_summary.yaml", :ensure=>:file}' -2014-09-26T14:27:29.086091+01:00 debug: Using settings: adding file resource 'privatedir': 'File[/var/lib/puppet/ssl/private]{:backup=>false, :loglevel=>:debug, :links=>:follow, :owner=>"puppet", :mode=>"750", :path=>"/var/lib/puppet/ssl/private", :ensure=>:directory}' -2014-09-26T14:27:29.086826+01:00 debug: Using settings: adding file resource 'certdir': 'File[/var/lib/puppet/ssl/certs]{:backup=>false, :loglevel=>:debug, :links=>:follow, :owner=>"puppet", :path=>"/var/lib/puppet/ssl/certs", :ensure=>:directory}' -2014-09-26T14:27:29.087982+01:00 debug: Using settings: adding file resource 'confdir': 'File[/etc/puppet]{:backup=>false, :loglevel=>:debug, :links=>:follow, :path=>"/etc/puppet", :ensure=>:directory}' -2014-09-26T14:27:29.131475+01:00 debug: (/File[/var/lib/puppet/state/graphs]) Autorequiring File[/var/lib/puppet/state] -2014-09-26T14:27:29.132621+01:00 debug: (/File[/var/lib/puppet/lib]) Autorequiring File[/var/lib/puppet] -2014-09-26T14:27:29.133785+01:00 debug: (/File[/var/lib/puppet/clientbucket]) Autorequiring File[/var/lib/puppet] -2014-09-26T14:27:29.134905+01:00 debug: (/File[/var/lib/puppet/client_yaml]) Autorequiring File[/var/lib/puppet] -2014-09-26T14:27:29.136123+01:00 debug: (/File[/var/lib/puppet/ssl/public_keys]) Autorequiring File[/var/lib/puppet/ssl] -2014-09-26T14:27:29.137279+01:00 debug: (/File[/var/lib/puppet/state/last_run_summary.yaml]) Autorequiring File[/var/lib/puppet/state] -2014-09-26T14:27:29.138438+01:00 debug: (/File[/var/lib/puppet/client_data]) Autorequiring File[/var/lib/puppet] -2014-09-26T14:27:29.138808+01:00 debug: (/File[/var/lib/puppet/state]) Autorequiring File[/var/lib/puppet] -2014-09-26T14:27:29.139551+01:00 debug: (/File[/var/lib/puppet/state/state.yaml]) Autorequiring File[/var/lib/puppet/state] -2014-09-26T14:27:29.140684+01:00 debug: (/File[/var/lib/puppet/ssl]) Autorequiring File[/var/lib/puppet] -2014-09-26T14:27:29.141791+01:00 debug: (/File[/etc/puppet/hiera.yaml]) Autorequiring File[/etc/puppet] -2014-09-26T14:27:29.142874+01:00 debug: (/File[/var/lib/puppet/ssl/certs]) Autorequiring File[/var/lib/puppet/ssl] -2014-09-26T14:27:29.144087+01:00 debug: (/File[/var/lib/puppet/ssl/certificate_requests]) Autorequiring File[/var/lib/puppet/ssl] -2014-09-26T14:27:29.145229+01:00 debug: (/File[/var/lib/puppet/facts.d]) Autorequiring File[/var/lib/puppet] -2014-09-26T14:27:29.146391+01:00 debug: (/File[/var/lib/puppet/ssl/private_keys]) Autorequiring File[/var/lib/puppet/ssl] -2014-09-26T14:27:29.146666+01:00 debug: (/File[/var/lib/puppet/ssl/private]) Autorequiring File[/var/lib/puppet/ssl] -2014-09-26T14:27:29.209845+01:00 debug: Finishing transaction 69940878395280 -2014-09-26T14:27:29.222894+01:00 debug: Loaded state in 0.01 seconds -2014-09-26T14:27:29.410145+01:00 info: Loading facts in /etc/puppet/modules/ceph/lib/facter/ceph_conf.rb -2014-09-26T14:27:29.411309+01:00 info: Loading facts in /etc/puppet/modules/ceph/lib/facter/cinder_conf.rb -2014-09-26T14:27:29.412519+01:00 info: Loading facts in /etc/puppet/modules/ceph/lib/facter/glance_api_conf.rb -2014-09-26T14:27:29.413678+01:00 info: Loading facts in /etc/puppet/modules/ceph/lib/facter/nova_compute.rb -2014-09-26T14:27:29.414781+01:00 info: Loading facts in /etc/puppet/modules/ceph/lib/facter/keystone_conf.rb -2014-09-26T14:27:29.415092+01:00 info: Loading facts in /etc/puppet/modules/ceph/lib/facter/ceph_osd.rb -2014-09-26T14:27:29.415917+01:00 info: Loading facts in /etc/puppet/modules/firewall/lib/facter/iptables_version.rb -2014-09-26T14:27:29.417067+01:00 info: Loading facts in /etc/puppet/modules/firewall/lib/facter/iptables_persistent_version.rb -2014-09-26T14:27:29.418253+01:00 info: Loading facts in /etc/puppet/modules/firewall/lib/facter/ip6tables_version.rb -2014-09-26T14:27:29.419353+01:00 info: Loading facts in /etc/puppet/modules/osnailyfacter/lib/facter/naily.rb -2014-09-26T14:27:29.420539+01:00 info: Loading facts in /etc/puppet/modules/neutron/lib/facter/defaultroute.rb -2014-09-26T14:27:29.421709+01:00 info: Loading facts in /etc/puppet/modules/puppet/lib/facter/cacert.rb -2014-09-26T14:27:29.422815+01:00 info: Loading facts in /etc/puppet/modules/puppet/lib/facter/hostcert.rb -2014-09-26T14:27:29.423948+01:00 info: Loading facts in /etc/puppet/modules/puppet/lib/facter/localacacert.rb -2014-09-26T14:27:29.425124+01:00 info: Loading facts in /etc/puppet/modules/puppet/lib/facter/cakey.rb -2014-09-26T14:27:29.426341+01:00 info: Loading facts in /etc/puppet/modules/puppet/lib/facter/hostprivkey.rb -2014-09-26T14:27:29.427419+01:00 info: Loading facts in /etc/puppet/modules/puppet/lib/facter/puppet_semantic_version.rb -2014-09-26T14:27:29.428497+01:00 info: Loading facts in /etc/puppet/modules/puppet/lib/facter/cacrl.rb -2014-09-26T14:27:29.429648+01:00 info: Loading facts in /etc/puppet/modules/puppet/lib/facter/certname.rb -2014-09-26T14:27:29.431053+01:00 info: Loading facts in /etc/puppet/modules/galera/lib/facter/mysql_log_file_size_real.rb -2014-09-26T14:27:29.432165+01:00 info: Loading facts in /etc/puppet/modules/galera/lib/facter/galera_gcomm_empty.rb -2014-09-26T14:27:29.433358+01:00 info: Loading facts in /etc/puppet/modules/corosync/lib/facter/pacemaker_hostname.rb -2014-09-26T14:27:29.434458+01:00 info: Loading facts in /etc/puppet/modules/swift/lib/facter/swift_mountpoints.rb -2014-09-26T14:27:29.505291+01:00 info: Loading facts in /etc/puppet/modules/concat/lib/facter/concat_basedir.rb -2014-09-26T14:27:29.506753+01:00 info: Loading facts in /etc/puppet/modules/lvm/lib/facter/lvm_support.rb -2014-09-26T14:27:29.690856+01:00 info: Loading facts in /etc/puppet/modules/l23network/lib/facter/openvswitch.rb -2014-09-26T14:27:29.703437+01:00 info: Loading facts in /etc/puppet/modules/l23network/lib/facter/check_kern_module.rb -2014-09-26T14:27:29.705594+01:00 info: Loading facts in /etc/puppet/modules/l23network/lib/facter/ovs_vlan_splinters.rb -2014-09-26T14:27:29.708297+01:00 info: Loading facts in /etc/puppet/modules/l23network/lib/facter/default_route.rb -2014-09-26T14:27:29.709805+01:00 info: Loading facts in /etc/puppet/modules/l23network/lib/facter/fqdn_hostname.rb -2014-09-26T14:27:29.711044+01:00 info: Loading facts in /etc/puppet/modules/stdlib/lib/facter/puppet_vardir.rb -2014-09-26T14:27:29.712148+01:00 info: Loading facts in /etc/puppet/modules/stdlib/lib/facter/facter_dot_d.rb -2014-09-26T14:27:29.714011+01:00 info: Loading facts in /etc/puppet/modules/stdlib/lib/facter/pe_version.rb -2014-09-26T14:27:29.715963+01:00 info: Loading facts in /etc/puppet/modules/stdlib/lib/facter/root_home.rb -2014-09-26T14:27:29.718002+01:00 info: Loading facts in /etc/puppet/modules/nailgun/lib/facter/fuel_version.rb -2014-09-26T14:27:29.719154+01:00 info: Loading facts in /etc/puppet/modules/nailgun/lib/facter/generate_fuel_key.rb -2014-09-26T14:27:29.720815+01:00 info: Loading facts in /etc/puppet/modules/nailgun/lib/facter/iops.rb -2014-09-26T14:27:31.135741+01:00 debug: Loaded state in 0.01 seconds -2014-09-26T14:27:31.233181+01:00 info: Applying configuration version '1411738048' -2014-09-26T14:27:31.249607+01:00 debug: Prefetching parsed resources for host -2014-09-26T14:27:31.275415+01:00 debug: Finishing transaction 69940877355340 -2014-09-26T14:27:31.276547+01:00 debug: Storing state -2014-09-26T14:27:31.338787+01:00 debug: Stored state in 0.06 seconds -2014-09-26T14:27:31.339931+01:00 notice: Finished catalog run in 0.22 seconds -2014-09-26T14:27:31.351455+01:00 debug: Using settings: adding file resource 'rrddir': 'File[/var/lib/puppet/rrd]{:backup=>false, :group=>"puppet", :loglevel=>:debug, :links=>:follow, :owner=>"puppet", :mode=>"750", :path=>"/var/lib/puppet/rrd", :ensure=>:directory}' -2014-09-26T14:27:31.362634+01:00 debug: (/File[/var/lib/puppet/rrd]/ensure) created -2014-09-26T14:27:31.363871+01:00 debug: Finishing transaction 69940877782620 -2014-09-26T14:27:31.364848+01:00 debug: Received report to process from node-5.local -2014-09-26T14:27:31.368431+01:00 debug: Processing report from node-5.local with processor Puppet::Reports::Store diff --git a/spec/example-logs/puppet-agent.log.multi.contr b/spec/example-logs/puppet-agent.log.multi.contr deleted file mode 100644 index 94b35a83..00000000 --- a/spec/example-logs/puppet-agent.log.multi.contr +++ /dev/null @@ -1,752 +0,0 @@ -2014-09-26T14:12:27.694480+01:00 warning: You cannot collect exported resources without storeconfigs being set; the collection will be ignored on line 123 in file /etc/puppet/modules/openstack/manifests/nova/controller.pp -2014-09-26T14:12:27.764244+01:00 warning: You cannot collect exported resources without storeconfigs being set; the collection will be ignored on line 348 in file /etc/puppet/modules/openstack/manifests/nova/controller.pp -2014-09-26T14:12:30.485493+01:00 warning: (Scope(Class[Nova::Keystone::Auth])) The cinder parameter is deprecated and has no effect. -2014-09-26T14:12:31.428588+01:00 warning: (Scope(Class[Nova])) The sql_connection parameter is deprecated, use database_connection instead. -2014-09-26T14:12:31.668342+01:00 notice: (Scope(Class[Openstack::Nova::Controller])) will apply following limits: (POST, *, .*, 100000 , MINUTE);(POST, %(*/servers), ^/servers, 100000 , DAY);(PUT, %(*) , .*, 1000 , MINUTE);(GET, %(*changes-since*), .*changes-since.*, 100000, MINUTE);(DELETE, %(*), .*, 100000 , MINUTE) -2014-09-26T14:12:33.568484+01:00 notice: (Scope(Class[L23network::Hosts_file])) Generating host entry node-4 192.168.0.1 node-4.domain.tld -2014-09-26T14:12:33.568484+01:00 notice: (Scope(Class[L23network::Hosts_file])) Generating host entry node-5 192.168.0.2 node-5.domain.tld -2014-09-26T14:12:34.885438+01:00 warning: Not collecting exported resources without storeconfigs -2014-09-26T14:12:35.397775+01:00 warning: Not collecting exported resources without storeconfigs -2014-09-26T14:12:35.904152+01:00 warning: Not collecting exported resources without storeconfigs -2014-09-26T14:12:36.285690+01:00 warning: Not collecting exported resources without storeconfigs -2014-09-26T14:12:38.261572+01:00 notice: Compiled catalog for node-4.domain.tld in environment production in 12.51 seconds -2014-09-26T14:12:47.626741+01:00 notice: ***** Beginning deployment of node node-4 with role controller ***** -2014-09-26T14:12:47.626741+01:00 notice: (/Stage[zero]/Begin_deployment/Notify[***** Beginning deployment of node node-4 with role controller *****]/message) defined 'message' as '***** Beginning deployment of node node-4 with role controller *****' -2014-09-26T14:12:47.676066+01:00 notice: (/Stage[first]/Rsyslog::Config/File[/etc/sysconfig/rsyslog]/content) content changed '{md5}a4344bd783e70527688cd6925d91d73c' to '{md5}b4e6400ef8a7e91355a1885b19cab475' -2014-09-26T14:12:47.676965+01:00 notice: (/Stage[first]/Rsyslog::Config/File[/etc/sysconfig/rsyslog]/mode) mode changed '0644' to '0640' -2014-09-26T14:12:47.840389+01:00 notice: (/Stage[first]/Rsyslog::Config/File[/etc/rsyslog.conf]/content) content changed '{md5}8b91b32300134e98ef4aee632ed61e21' to '{md5}9f3264650a3099197ddc2efaee61e8d2' -2014-09-26T14:12:47.841214+01:00 notice: (/Stage[first]/Rsyslog::Config/File[/etc/rsyslog.conf]/mode) mode changed '0644' to '0640' -2014-09-26T14:12:47.875647+01:00 notice: (/Stage[first]/Rsyslog::Config/File[/var/spool/rsyslog/]/ensure) created -2014-09-26T14:12:47.901041+01:00 notice: (/Stage[first]/Openstack::Logrotate/File[/etc/logrotate.d/20-fuel.conf]/ensure) defined content as '{md5}9b86108a0bf82b391720174d655e22d3' -2014-09-26T14:12:47.956542+01:00 notice: (/Stage[first]/Anacron::Config/File[/etc/cron.d/0hourly]/content) content changed '{md5}4b98b6b029e76aa6e0fa3fde2ec5572a' to '{md5}20cd70641561aa0e2b2cebb651be0b70' -2014-09-26T14:12:48.089204+01:00 notice: (/Stage[first]/Openstack::Logrotate/Exec[logrotate_check]/returns) executed successfully -2014-09-26T14:12:48.115958+01:00 notice: (/Stage[first]/Openstack::Logrotate/File[/etc/logrotate.d/10-fuel.conf]/ensure) defined content as '{md5}9e8aa0c0a7e6ebbe509f47c85e392be0' -2014-09-26T14:12:49.108428+01:00 notice: (/Stage[first]/Rsyslog::Config/File[/var/lib/rsyslog]/mode) mode changed '0700' to '0750' -2014-09-26T14:12:49.134085+01:00 notice: (/Stage[first]/Anacron::Config/File[/etc/cron.hourly/logrotate]/ensure) defined content as '{md5}717db7b00ec43521f181264b7ad6e054' -2014-09-26T14:12:49.156005+01:00 notice: (/Stage[first]/Anacron::Config/File[/etc/anacrontab]/content) content changed '{md5}8241db83d5edf01c71734e41e383e205' to '{md5}2196478af0166c40de3a58c442a4a58b' -2014-09-26T14:12:49.157097+01:00 notice: (/Stage[first]/Anacron::Config/File[/etc/anacrontab]/mode) mode changed '0600' to '0644' -2014-09-26T14:12:49.182750+01:00 notice: (/Stage[first]/Rsyslog::Client/File[/etc/rsyslog.d/]/mode) mode changed '0755' to '0750' -2014-09-26T14:12:49.187283+01:00 notice: (/Stage[first]/Rsyslog::Client/File[/etc/rsyslog.d/10-log2master.conf]/ensure) removed -2014-09-26T14:12:49.201823+01:00 notice: (/Stage[first]/Openstack::Logging/File[/etc/rsyslog.d/52-sahara.conf]/ensure) created -2014-09-26T14:12:49.216507+01:00 notice: (/Stage[first]/Openstack::Logging/File[/etc/rsyslog.d/02-ha.conf]/ensure) created -2014-09-26T14:12:49.231716+01:00 notice: (/Stage[first]/Openstack::Logging/File[/etc/rsyslog.d/54-heat.conf]/ensure) created -2014-09-26T14:12:49.246428+01:00 notice: (/Stage[first]/Openstack::Logging/File[/etc/rsyslog.d/04-mysql.conf]/ensure) created -2014-09-26T14:12:49.261238+01:00 notice: (/Stage[first]/Openstack::Logging/File[/etc/rsyslog.d/53-murano.conf]/ensure) created -2014-09-26T14:12:49.277030+01:00 notice: (/Stage[first]/Openstack::Logging/File[/etc/rsyslog.d/90-local.conf]/ensure) defined content as '{md5}3a6ca3a5e27a7cfedc9a64f7f809b006' -2014-09-26T14:12:49.292691+01:00 notice: (/Stage[first]/Openstack::Logging/File[/etc/rsyslog.d//61-mco-nailgun-agent.conf]/ensure) defined content as '{md5}4e33c427facb142af96a4a2d2666fa4a' -2014-09-26T14:12:49.308530+01:00 notice: (/Stage[first]/Openstack::Logging/Rsyslog::Imfile[61-mco_agent_debug]/File[/etc/rsyslog.d/61-mco_agent_debug.conf]/ensure) defined content as '{md5}699ea1cec33fc1d5140b5f46a6b604b8' -2014-09-26T14:12:49.333859+01:00 notice: (/Stage[first]/Rsyslog::Client/File[/etc/rsyslog.d/client.conf]/ensure) created -2014-09-26T14:12:49.365425+01:00 notice: (/Stage[first]/Openstack::Logging/File[/etc/rsyslog.d/70-zabbix-server.conf]/ensure) defined content as '{md5}7e33db6f50c4e71e99819961a1f52acb' -2014-09-26T14:12:49.389478+01:00 notice: (/Stage[first]/Openstack::Logging/File[/etc/rsyslog.d/03-dashboard.conf]/ensure) created -2014-09-26T14:12:49.410917+01:00 notice: (/Stage[first]/Openstack::Logging/File[/etc/rsyslog.d/00-remote.conf]/ensure) defined content as '{md5}5698c5b41b2d6a31bf3f863a9433c29e' -2014-09-26T14:12:49.431984+01:00 notice: (/Stage[first]/Openstack::Logging/File[/etc/rsyslog.d/20-keystone.conf]/ensure) created -2014-09-26T14:12:49.452068+01:00 notice: (/Stage[first]/Openstack::Logging/Rsyslog::Imfile[04-rabbitmq]/File[/etc/rsyslog.d/04-rabbitmq.conf]/ensure) defined content as '{md5}e1123ec86c7a0b6af5a5675c47535f54' -2014-09-26T14:12:49.473829+01:00 notice: (/Stage[first]/Openstack::Logging/File[/etc/rsyslog.d/40-glance.conf]/ensure) created -2014-09-26T14:12:49.496090+01:00 notice: (/Stage[first]/Openstack::Logging/Rsyslog::Imfile[04-rabbitmq-sasl]/File[/etc/rsyslog.d/04-rabbitmq-sasl.conf]/ensure) defined content as '{md5}9292ad4f286079cff8062d1610f492ff' -2014-09-26T14:12:49.526063+01:00 notice: (/Stage[first]/Openstack::Logging/File[/etc/rsyslog.d/10-nova.conf]/ensure) created -2014-09-26T14:12:49.548176+01:00 notice: (/Stage[first]/Openstack::Logging/File[/etc/rsyslog.d/60-puppet-apply.conf]/ensure) defined content as '{md5}fb71c918d7a4370f7871437b6c1825b5' -2014-09-26T14:12:49.566278+01:00 notice: (/Stage[first]/Openstack::Logging/Rsyslog::Imfile[04-rabbitmq-shutdown_err]/File[/etc/rsyslog.d/04-rabbitmq-shutdown_err.conf]/ensure) defined content as '{md5}5e25bcb317391064a7c39494c0402d15' -2014-09-26T14:12:49.586725+01:00 notice: (/Stage[first]/Openstack::Logging/File[/etc/rsyslog.d/51-ceilometer.conf]/ensure) created -2014-09-26T14:12:49.602853+01:00 notice: (/Stage[first]/Openstack::Logging/Rsyslog::Imfile[04-rabbitmq-startup_err]/File[/etc/rsyslog.d/04-rabbitmq-startup_err.conf]/ensure) defined content as '{md5}29192db56d3bbbd40b28f9406510ba59' -2014-09-26T14:12:49.622364+01:00 notice: (/Stage[first]/Openstack::Logging/File[/etc/rsyslog.d//30-cinder.conf]/ensure) created -2014-09-26T14:12:49.648165+01:00 notice: (/Stage[first]/Anacron::Config/File[/etc/cron.hourly/0anacron]/content) content changed '{md5}0033096afd5c735bc99821f847bd61a2' to '{md5}252f2087c57e2e06accf20f00634c132' -2014-09-26T14:12:50.404489+01:00 notice: (/Stage[first]/Openstack::Checksum_udp/Exec[checksum_fill_udp]/returns) executed successfully -2014-09-26T14:12:50.422850+01:00 notice: (/Stage[first]/Openstack::Logging/File[/etc/rsyslog.d/50-neutron.conf]/ensure) created -2014-09-26T14:12:51.998929+01:00 notice: (/Stage[first]/Rsyslog::Service/Service[rsyslog]) Triggered 'refresh' from 1 events -2014-09-26T14:12:52.212609+01:00 notice: (/Stage[netconfig]/L23network::Hosts_file/Host[node-5]/ensure) created -2014-09-26T14:12:52.219305+01:00 notice: (/Stage[netconfig]/L23network::Hosts_file/Host[node-4]/ensure) created -2014-09-26T14:12:52.260822+01:00 notice: (/Stage[netconfig]/Openstack::Keepalive/Sysctl::Value[net.ipv4.tcp_keepalive_intvl]/Sysctl[net.ipv4.tcp_keepalive_intvl]/ensure) created -2014-09-26T14:12:52.468396+01:00 notice: (/Stage[netconfig]/Openstack::Keepalive/Sysctl::Value[net.ipv4.tcp_keepalive_intvl]/Exec[exec_sysctl_net.ipv4.tcp_keepalive_intvl]/returns) executed successfully -2014-09-26T14:12:52.585645+01:00 notice: (/Stage[netconfig]/Openstack::Keepalive/Sysctl::Value[net.ipv4.tcp_keepalive_time]/Sysctl[net.ipv4.tcp_keepalive_time]/ensure) created -2014-09-26T14:12:52.732006+01:00 notice: (/Stage[netconfig]/Openstack::Keepalive/Sysctl::Value[net.ipv4.tcp_keepalive_time]/Exec[exec_sysctl_net.ipv4.tcp_keepalive_time]/returns) executed successfully -2014-09-26T14:12:52.755535+01:00 notice: (/Stage[netconfig]/Openstack::Keepalive/Sysctl::Value[net.ipv4.tcp_keepalive_probes]/Sysctl[net.ipv4.tcp_keepalive_probes]/ensure) created -2014-09-26T14:12:52.896789+01:00 notice: (/Stage[netconfig]/Openstack::Keepalive/Sysctl::Value[net.ipv4.tcp_keepalive_probes]/Exec[exec_sysctl_net.ipv4.tcp_keepalive_probes]/returns) executed successfully -2014-09-26T14:12:52.959757+01:00 notice: Installing package kmod-openvswitch from absent to 1.10.2-1.el6 -2014-09-26T14:14:00.758801+01:00 notice: (/Stage[netconfig]/L23network::L2/Package[openvswitch-datapath]/ensure) created -2014-09-26T14:14:00.787679+01:00 notice: eth0 => 10.20.0.3/24, -2014-09-26T14:14:00.788838+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_main_interfaces[eth0]/Notify[eth0 => 10.20.0.3/24, ]/message) defined 'message' as 'eth0 => 10.20.0.3/24, ' -2014-09-26T14:14:00.969004+01:00 notice: eth2 => none, -2014-09-26T14:14:00.970047+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_main_interfaces[eth2]/Notify[eth2 => none, ]/message) defined 'message' as 'eth2 => none, ' -2014-09-26T14:14:01.000918+01:00 notice: eth1 => 172.16.0.2/24, 172.16.0.1 -2014-09-26T14:14:01.002089+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_main_interfaces[eth1]/Notify[eth1 => 172.16.0.2/24, 172.16.0.1]/message) defined 'message' as 'eth1 => 172.16.0.2/24, 172.16.0.1' -2014-09-26T14:14:01.032904+01:00 notice: (/Stage[netconfig]/L23network::L2::Centos_upndown_scripts/File[/sbin/ifup-local]/ensure) created -2014-09-26T14:14:01.053463+01:00 notice: (/Stage[netconfig]/L23network::L2::Centos_upndown_scripts/File[/sbin/ifdown-local]/ensure) created -2014-09-26T14:14:01.176598+01:00 notice: Installing package openvswitch from absent to 1.10.2-1 -2014-09-26T14:14:03.374210+01:00 notice: (/Stage[netconfig]/L23network::L2/Package[openvswitch-common]/ensure) created -2014-09-26T14:14:03.906101+01:00 notice: (/Stage[netconfig]/L23network::L2/Service[openvswitch-service]/ensure) ensure changed 'stopped' to 'running' -2014-09-26T14:14:04.152640+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_main_interfaces[eth0]/L23network::L3::Ifconfig[eth0]/File[/etc/sysconfig/network-scripts/network-functions-ipv6]/mode) mode changed '0644' to '0755' -2014-09-26T14:14:04.158637+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_main_interfaces[eth0]/L23network::L3::Ifconfig[eth0]/File[/etc/sysconfig/network-scripts/network-functions]/mode) mode changed '0644' to '0755' -2014-09-26T14:14:04.164694+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_main_interfaces[eth0]/L23network::L3::Ifconfig[eth0]/File[/etc/sysconfig/network-scripts/ifcfg-lo]/mode) mode changed '0644' to '0755' -2014-09-26T14:14:04.454542+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_main_interfaces[eth1]/L23network::L3::Ifconfig[eth1]/L23network::L3::Defaultroute[172.16.0.1]/Cfg[172.16.0.1]/value) value changed '10.20.0.2' to '172.16.0.1' -2014-09-26T14:14:04.723261+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_main_interfaces[eth1]/L23network::L3::Ifconfig[eth1]/L23network::L3::Defaultroute[172.16.0.1]/Exec[Default route of 172.16.0.1 metric ]/returns) executed successfully -2014-09-26T14:14:04.762500+01:00 notice: Interface:eth2 IP:none/ -2014-09-26T14:14:04.763703+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_main_interfaces[eth2]/L23network::L3::Ifconfig[eth2]/Notify[ifconfig_eth2]/message) defined 'message' as 'Interface:eth2 IP:none/' -2014-09-26T14:14:04.786406+01:00 notice: Interface:eth1 IP:172.16.0.2/255.255.255.0 -2014-09-26T14:14:04.787539+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_main_interfaces[eth1]/L23network::L3::Ifconfig[eth1]/Notify[ifconfig_eth1]/message) defined 'message' as 'Interface:eth1 IP:172.16.0.2/255.255.255.0' -2014-09-26T14:14:04.797976+01:00 notice: Interface:eth0 IP:10.20.0.3/255.255.255.0 -2014-09-26T14:14:04.799109+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_main_interfaces[eth0]/L23network::L3::Ifconfig[eth0]/Notify[ifconfig_eth0]/message) defined 'message' as 'Interface:eth0 IP:10.20.0.3/255.255.255.0' -2014-09-26T14:14:04.811592+01:00 notice: (/Stage[netconfig]/Openstack::Keepalive/Sysctl::Value[net.ipv4.tcp_retries2]/Sysctl[net.ipv4.tcp_retries2]/ensure) created -2014-09-26T14:14:05.078596+01:00 notice: (/Stage[netconfig]/Openstack::Keepalive/Sysctl::Value[net.ipv4.tcp_retries2]/Exec[exec_sysctl_net.ipv4.tcp_retries2]/returns) executed successfully -2014-09-26T14:14:05.136784+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_main_interfaces[eth1]/L23network::L3::Ifconfig[eth1]/File[/etc/sysconfig/network-scripts/ifcfg-eth1]/content) content changed '{md5}28ef8c21659906b0ecd058f2dbd28e1a' to '{md5}ed66f08480950eaf85dbbc9a10d2185c' -2014-09-26T14:14:05.160957+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_main_interfaces[eth0]/L23network::L3::Ifconfig[eth0]/File[/etc/sysconfig/network-scripts/ifcfg-eth0]/content) content changed '{md5}c0c572b52da47ffe5d7b982fe9c101b6' to '{md5}f12e8145827ca05451e179eeef0f8024' -2014-09-26T14:14:05.182086+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_main_interfaces[eth2]/L23network::L3::Ifconfig[eth2]/File[/etc/sysconfig/network-scripts/ifcfg-eth2]/content) content changed '{md5}4681da16c93c79852be6946ca5b574c3' to '{md5}ed6bcfb7508dcefd3ed8af4f8e1fa073' -2014-09-26T14:14:05.389205+01:00 notice: (L3_if_downup[eth1](provider=ruby)) Interface 'eth1' down. -2014-09-26T14:14:08.457991+01:00 notice: (L3_if_downup[eth1](provider=ruby)) Interface 'eth1' flush. -2014-09-26T14:14:13.692451+01:00 notice: (L3_if_downup[eth1](provider=ruby)) Interface 'eth1' up. -2014-09-26T14:14:13.694298+01:00 notice: (L3_if_downup[eth1](provider=ruby)) Interface 'eth1' has good carrier. -2014-09-26T14:14:13.695451+01:00 notice: (L3_if_downup[eth1](provider=ruby)) Interface 'eth1' Don't checked. -2014-09-26T14:14:13.696592+01:00 notice: (L3_if_downup[eth1](provider=ruby)) Interface 'eth1' done. -2014-09-26T14:14:13.698646+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_main_interfaces[eth1]/L23network::L3::Ifconfig[eth1]/L3_if_downup[eth1]) Triggered 'refresh' from 1 events -2014-09-26T14:14:26.567791+01:00 notice: (L3_if_downup[eth0](provider=ruby)) Interface 'eth0' down. -2014-09-26T14:14:26.567791+01:00 notice: (L3_if_downup[eth0](provider=ruby)) Interface 'eth0' flush. -2014-09-26T14:14:26.570757+01:00 notice: (L3_if_downup[eth0](provider=ruby)) Interface 'eth0' up. -2014-09-26T14:14:26.570757+01:00 notice: (L3_if_downup[eth0](provider=ruby)) Interface 'eth0' has good carrier. -2014-09-26T14:14:26.570757+01:00 notice: (L3_if_downup[eth0](provider=ruby)) Interface 'eth0' Don't checked. -2014-09-26T14:14:26.570757+01:00 notice: (L3_if_downup[eth0](provider=ruby)) Interface 'eth0' done. -2014-09-26T14:14:26.570757+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_main_interfaces[eth0]/L23network::L3::Ifconfig[eth0]/L3_if_downup[eth0]) Triggered 'refresh' from 1 events -2014-09-26T14:14:26.570757+01:00 notice: (L3_if_downup[eth2](provider=ruby)) Interface 'eth2' down. -2014-09-26T14:14:26.570757+01:00 notice: (L3_if_downup[eth2](provider=ruby)) Interface 'eth2' flush. -2014-09-26T14:14:28.582054+01:00 notice: (L3_if_downup[eth2](provider=ruby)) Interface 'eth2' up. -2014-09-26T14:14:28.584496+01:00 notice: (L3_if_downup[eth2](provider=ruby)) Interface 'eth2' has good carrier. -2014-09-26T14:14:28.585643+01:00 notice: (L3_if_downup[eth2](provider=ruby)) Interface 'eth2' Don't checked. -2014-09-26T14:14:28.586773+01:00 notice: (L3_if_downup[eth2](provider=ruby)) Interface 'eth2' done. -2014-09-26T14:14:28.587133+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_main_interfaces[eth2]/L23network::L3::Ifconfig[eth2]/L3_if_downup[eth2]) Triggered 'refresh' from 1 events -2014-09-26T14:14:28.648731+01:00 notice: eth0.103 => none, -2014-09-26T14:14:28.649840+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_sub_interfaces[eth0.103]/Notify[eth0.103 => none, ]/message) defined 'message' as 'eth0.103 => none, ' -2014-09-26T14:14:28.686979+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_sub_interfaces[eth0.103]/L23network::L3::Ifconfig[eth0.103]/File[/etc/sysconfig/network-scripts/ifcfg-eth0.103]/ensure) created -2014-09-26T14:14:28.691095+01:00 notice: eth0.102 => 192.168.1.1/24, -2014-09-26T14:14:28.692226+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_sub_interfaces[eth0.102]/Notify[eth0.102 => 192.168.1.1/24, ]/message) defined 'message' as 'eth0.102 => 192.168.1.1/24, ' -2014-09-26T14:14:28.701322+01:00 notice: Interface:eth0.102 IP:192.168.1.1/255.255.255.0 -2014-09-26T14:14:28.702465+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_sub_interfaces[eth0.102]/L23network::L3::Ifconfig[eth0.102]/Notify[ifconfig_eth0.102]/message) defined 'message' as 'Interface:eth0.102 IP:192.168.1.1/255.255.255.0' -2014-09-26T14:14:28.729058+01:00 notice: eth0.101 => 192.168.0.1/24, -2014-09-26T14:14:28.730206+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_sub_interfaces[eth0.101]/Notify[eth0.101 => 192.168.0.1/24, ]/message) defined 'message' as 'eth0.101 => 192.168.0.1/24, ' -2014-09-26T14:14:28.759586+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_sub_interfaces[eth0.101]/L23network::L3::Ifconfig[eth0.101]/File[/etc/sysconfig/network-scripts/ifcfg-eth0.101]/ensure) created -2014-09-26T14:14:28.769983+01:00 notice: Interface:eth0.101 IP:192.168.0.1/255.255.255.0 -2014-09-26T14:14:28.771507+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_sub_interfaces[eth0.101]/L23network::L3::Ifconfig[eth0.101]/Notify[ifconfig_eth0.101]/message) defined 'message' as 'Interface:eth0.101 IP:192.168.0.1/255.255.255.0' -2014-09-26T14:14:28.778022+01:00 notice: (L3_if_downup[eth0.101](provider=ruby)) Carrier is DOWN, 'eth0.101' skipping carrier test -2014-09-26T14:14:29.150827+01:00 notice: (L3_if_downup[eth0.101](provider=ruby)) Interface 'eth0.101' down. -2014-09-26T14:14:32.430296+01:00 notice: (L3_if_downup[eth0.101](provider=ruby)) Can't flush interface 'eth0.101'. -2014-09-26T14:14:34.880968+01:00 notice: (L3_if_downup[eth0.101](provider=ruby)) Interface 'eth0.101' up. -2014-09-26T14:14:34.881317+01:00 notice: (L3_if_downup[eth0.101](provider=ruby)) Interface 'eth0.101' Don't checked. -2014-09-26T14:14:34.881317+01:00 notice: (L3_if_downup[eth0.101](provider=ruby)) Interface 'eth0.101' done. -2014-09-26T14:14:34.881317+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_sub_interfaces[eth0.101]/L23network::L3::Ifconfig[eth0.101]/L3_if_downup[eth0.101]) Triggered 'refresh' from 1 events -2014-09-26T14:14:35.099293+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_sub_interfaces[eth0.102]/L23network::L3::Ifconfig[eth0.102]/File[/etc/sysconfig/network-scripts/ifcfg-eth0.102]/ensure) created -2014-09-26T14:14:35.104465+01:00 notice: (L3_if_downup[eth0.102](provider=ruby)) Carrier is DOWN, 'eth0.102' skipping carrier test -2014-09-26T14:14:35.292704+01:00 notice: (L3_if_downup[eth0.102](provider=ruby)) Interface 'eth0.102' down. -2014-09-26T14:14:38.388156+01:00 notice: (L3_if_downup[eth0.102](provider=ruby)) Can't flush interface 'eth0.102'. -2014-09-26T14:14:40.655745+01:00 notice: (L3_if_downup[eth0.102](provider=ruby)) Interface 'eth0.102' up. -2014-09-26T14:14:40.656049+01:00 notice: (L3_if_downup[eth0.102](provider=ruby)) Interface 'eth0.102' Don't checked. -2014-09-26T14:14:40.656049+01:00 notice: (L3_if_downup[eth0.102](provider=ruby)) Interface 'eth0.102' done. -2014-09-26T14:14:40.656049+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_sub_interfaces[eth0.102]/L23network::L3::Ifconfig[eth0.102]/L3_if_downup[eth0.102]) Triggered 'refresh' from 1 events -2014-09-26T14:14:40.689998+01:00 notice: Interface:eth0.103 IP:none/ -2014-09-26T14:14:40.691077+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_sub_interfaces[eth0.103]/L23network::L3::Ifconfig[eth0.103]/Notify[ifconfig_eth0.103]/message) defined 'message' as 'Interface:eth0.103 IP:none/' -2014-09-26T14:14:40.695336+01:00 notice: (L3_if_downup[eth0.103](provider=ruby)) Carrier is DOWN, 'eth0.103' skipping carrier test -2014-09-26T14:14:40.882254+01:00 notice: (L3_if_downup[eth0.103](provider=ruby)) Interface 'eth0.103' down. -2014-09-26T14:14:43.972274+01:00 notice: (L3_if_downup[eth0.103](provider=ruby)) Can't flush interface 'eth0.103'. -2014-09-26T14:14:44.163748+01:00 notice: (L3_if_downup[eth0.103](provider=ruby)) Interface 'eth0.103' up. -2014-09-26T14:14:44.164826+01:00 notice: (L3_if_downup[eth0.103](provider=ruby)) Interface 'eth0.103' Don't checked. -2014-09-26T14:14:44.165101+01:00 notice: (L3_if_downup[eth0.103](provider=ruby)) Interface 'eth0.103' done. -2014-09-26T14:14:44.165979+01:00 notice: (/Stage[netconfig]/Osnailyfacter::Network_setup/Setup_sub_interfaces[eth0.103]/L23network::L3::Ifconfig[eth0.103]/L3_if_downup[eth0.103]) Triggered 'refresh' from 1 events -2014-09-26T14:14:44.496633+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[105 nova ]/ensure) created -2014-09-26T14:14:44.728626+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[103 swift]/ensure) created -2014-09-26T14:14:44.940025+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[104 glance]/ensure) created -2014-09-26T14:14:45.153155+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[115 openvswitch db]/ensure) created -2014-09-26T14:14:45.822131+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[334 accept gre]/ensure) created -2014-09-26T14:14:46.981112+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[000 accept all icmp requests]/ensure) created -2014-09-26T14:14:47.808821+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[107 memcached tcp]/ensure) created -2014-09-26T14:14:48.266712+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[112 ntp-server]/ensure) created -2014-09-26T14:14:48.817632+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[020 ssh]/ensure) created -2014-09-26T14:14:49.025350+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[107 memcached udp]/ensure) created -2014-09-26T14:14:49.253002+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[108 rsync]/ensure) created -2014-09-26T14:14:49.962165+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[106 rabbitmq ]/ensure) created -2014-09-26T14:14:50.997302+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[117 libvirt]/ensure) created -2014-09-26T14:14:51.422974+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[111 dns-server]/ensure) created -2014-09-26T14:14:51.732540+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[333 notrack gre]/ensure) created -2014-09-26T14:14:51.979453+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[102 keystone]/ensure) created -2014-09-26T14:14:52.719306+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[109 iscsi ]/ensure) created -2014-09-26T14:14:53.216206+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[114 corosync-output]/ensure) created -2014-09-26T14:14:53.540529+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[118 vnc ports]/ensure) created -2014-09-26T14:14:53.789189+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[118 libvirt migration]/ensure) created -2014-09-26T14:14:54.543309+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[111 dhcp-server]/ensure) created -2014-09-26T14:14:55.001979+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[101 mysql]/ensure) created -2014-09-26T14:14:55.290839+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[110 neutron ]/ensure) created -2014-09-26T14:14:56.042439+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[001 accept all to lo interface]/ensure) created -2014-09-26T14:14:56.539891+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[002 accept related established rules]/ensure) created -2014-09-26T14:14:56.856777+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[113 corosync-input]/ensure) created -2014-09-26T14:14:57.592708+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[116 nrpe-server]/ensure) created -2014-09-26T14:14:58.088950+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[100 http]/ensure) created -2014-09-26T14:14:58.475779+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[999 drop all other requests]/ensure) created -2014-09-26T14:14:59.235190+01:00 notice: (/Stage[openstack-firewall]/Openstack::Firewall/Firewall[119 ceilometer]/ensure) created -2014-09-26T14:14:59.713490+01:00 notice: (/Stage[main]/Os_common/Firewall[004 remote puppet ]/ensure) created -2014-09-26T14:15:00.100239+01:00 notice: Installing package MySQL-python from absent to 1.2.5-1.el6 -2014-09-26T14:15:03.185870+01:00 notice: (/Stage[main]/Mysql::Python/Package[python-mysqldb]/ensure) created -2014-09-26T14:15:03.880789+01:00 notice: (/Stage[main]/Os_common/Firewall[003 remote rabbitmq ]/ensure) created -2014-09-26T14:15:04.098177+01:00 notice: Installing package memcached from absent to 1.4.4-3.el6 -2014-09-26T14:15:06.237674+01:00 notice: (/Stage[main]/Memcached/Package[memcached]/ensure) created -2014-09-26T14:15:06.266589+01:00 notice: (/Stage[main]/Memcached/File[/etc/sysconfig/memcached]/content) content changed '{md5}05503957e3796fbe6fddd756a7a102a0' to '{md5}b01fd44521d8d677620fbe258be5d7ed' -2014-09-26T14:15:06.462389+01:00 notice: (/Stage[main]/Memcached/Service[memcached]/ensure) ensure changed 'stopped' to 'running' -2014-09-26T14:15:06.538487+01:00 notice: Installing package openstack-glance from absent to 2014.1.1-fuel5.1.mira3 -2014-09-26T14:15:26.922927+01:00 notice: (/Stage[main]/Glance/Package[openstack-glance]/ensure) created -2014-09-26T14:15:26.941725+01:00 notice: (/Stage[main]/Glance::Backend::File/Glance_api_config[DEFAULT/filesystem_store_datadir]/ensure) created -2014-09-26T14:15:26.963022+01:00 notice: (/Stage[main]/Glance::Backend::File/Glance_api_config[DEFAULT/default_store]/ensure) created -2014-09-26T14:15:26.985230+01:00 notice: (/Stage[main]/Glance::Notify::Rabbitmq/Glance_api_config[DEFAULT/rabbit_use_ssl]/ensure) created -2014-09-26T14:15:27.006911+01:00 notice: (/Stage[main]/Glance::Notify::Rabbitmq/Glance_api_config[DEFAULT/rabbit_notification_topic]/ensure) created -2014-09-26T14:15:27.312287+01:00 notice: Installing package nodejs-less from absent to 1.3.3-3.el6 -2014-09-26T14:15:31.336119+01:00 notice: (/Stage[main]/Horizon/Package[nodejs-less]/ensure) created -2014-09-26T14:15:31.526668+01:00 notice: (/Stage[main]/Osnailyfacter::Test_controller/File[/tmp/controller-file]/ensure) defined content as '{md5}7279b4c82eec3e84e18d72b4ecd19ae1' -2014-09-26T14:15:31.586283+01:00 notice: (/Stage[main]/Glance::Notify::Rabbitmq/Glance_api_config[DEFAULT/rabbit_ha_queues]/ensure) created -2014-09-26T14:15:31.685217+01:00 notice: Installing package mod_wsgi from absent to 3.2-1.el6 -2014-09-26T14:15:35.537989+01:00 notice: (/Stage[main]/Horizon/Package[mod_wsgi]/ensure) created -2014-09-26T14:15:35.613859+01:00 notice: Installing package openstack-heat-engine from absent to 2014.1.1-fuel5.1.mira7 -2014-09-26T14:15:43.297314+01:00 notice: (/Stage[main]/Heat::Engine/Package[heat-engine]/ensure) created -2014-09-26T14:15:43.357710+01:00 notice: Installing package openstack-heat-api-cloudwatch from absent to 2014.1.1-fuel5.1.mira7 -2014-09-26T14:15:44.723290+01:00 notice: (/Stage[main]/Heat::Api_cloudwatch/Package[heat-api-cloudwatch]/ensure) created -2014-09-26T14:15:44.763619+01:00 notice: (/Stage[main]/Glance::Notify::Rabbitmq/Glance_api_config[DEFAULT/rabbit_password]/ensure) created -2014-09-26T14:15:44.792278+01:00 notice: (/Stage[main]/Glance::Notify::Rabbitmq/Glance_api_config[DEFAULT/rabbit_virtual_host]/ensure) created -2014-09-26T14:15:44.872024+01:00 notice: (/Stage[main]/Glance::Notify::Rabbitmq/Glance_api_config[DEFAULT/rabbit_userid]/ensure) created -2014-09-26T14:15:45.190470+01:00 notice: Installing package MySQL-client from absent to 5.5.28-7 -2014-09-26T14:15:50.904044+01:00 notice: (/Stage[main]/Mysql/Package[mysql-client]/ensure) created -2014-09-26T14:15:51.014222+01:00 notice: Installing package python-lesscpy from absent to 0.9j-3.el6 -2014-09-26T14:15:53.051475+01:00 notice: (/Stage[main]/Horizon/Package[python-lesscpy]/ensure) created -2014-09-26T14:15:53.173181+01:00 notice: Installing package MySQL-server from absent to 5.5.28-7 -2014-09-26T14:16:07.272871+01:00 notice: (/Stage[main]/Mysql::Server/Package[mysql-server]/ensure) created -2014-09-26T14:16:09.639278+01:00 notice: (/Stage[main]/Mysql::Server/Service[mysql]/ensure) ensure changed 'stopped' to 'running' -2014-09-26T14:16:09.915455+01:00 notice: (/Stage[main]/Mysql::Password/Exec[set_mysql_rootpw]/returns) executed successfully -2014-09-26T14:16:09.951616+01:00 notice: Module openstack cannot notify service heat-engine on package update -2014-09-26T14:16:09.952754+01:00 notice: (/Stage[main]/Openstack::Heat/Notify[Module openstack cannot notify service heat-engine on package update]/message) defined 'message' as 'Module openstack cannot notify service heat-engine on package update' -2014-09-26T14:16:10.103066+01:00 notice: Installing package openstack-heat-api from absent to 2014.1.1-fuel5.1.mira7 -2014-09-26T14:16:11.514504+01:00 notice: (/Stage[main]/Heat::Api/Package[heat-api]/ensure) created -2014-09-26T14:16:11.625221+01:00 notice: Installing package python-keystone from absent to 2014.1.1-fuel5.1.mira6 -2014-09-26T14:16:15.848265+01:00 notice: (/Stage[main]/Keystone::Python/Package[python-keystone]/ensure) created -2014-09-26T14:16:15.988716+01:00 notice: (/Stage[main]/Openstack::Glance/Glance_api_config[DEFAULT/scrub_time]/ensure) created -2014-09-26T14:16:15.996309+01:00 notice: (/Stage[main]/Openstack::Glance/Glance_registry_config[keystone_authtoken/signing_dir]/ensure) created -2014-09-26T14:16:16.013237+01:00 notice: (/Stage[main]/Openstack::Glance/Glance_api_config[DEFAULT/sql_max_overflow]/ensure) created -2014-09-26T14:16:16.022662+01:00 notice: (/Stage[main]/Openstack::Glance/Glance_cache_config[DEFAULT/image_cache_invalid_entry_grace_period]/ensure) created -2014-09-26T14:16:16.037535+01:00 notice: (/Stage[main]/Openstack::Glance/Glance_api_config[keystone_authtoken/signing_dirname]/ensure) created -2014-09-26T14:16:16.058339+01:00 notice: (/Stage[main]/Openstack::Glance/Glance_api_config[DEFAULT/image_cache_dir]/ensure) created -2014-09-26T14:16:16.069914+01:00 notice: (/Stage[main]/Openstack::Glance/Glance_registry_config[DEFAULT/sql_max_overflow]/ensure) created -2014-09-26T14:16:16.093787+01:00 notice: (/Stage[main]/Openstack::Glance/Glance_api_config[DEFAULT/sql_max_pool_size]/ensure) created -2014-09-26T14:16:16.105936+01:00 notice: (/Stage[main]/Openstack::Glance/Glance_cache_config[DEFAULT/sql_max_overflow]/ensure) created -2014-09-26T14:16:16.118126+01:00 notice: (/Stage[main]/Openstack::Glance/Glance_cache_config[DEFAULT/sql_max_retries]/ensure) created -2014-09-26T14:16:16.141210+01:00 notice: (/Stage[main]/Openstack::Glance/Glance_api_config[DEFAULT/kombu_reconnect_delay]/ensure) created -2014-09-26T14:16:16.166924+01:00 notice: (/Stage[main]/Openstack::Glance/Glance_api_config[DEFAULT/delayed_delete]/ensure) created -2014-09-26T14:16:16.349941+01:00 notice: (/Stage[main]/Openstack::Glance/Glance_cache_config[DEFAULT/image_cache_dir]/ensure) created -2014-09-26T14:16:16.366809+01:00 notice: (/Stage[main]/Openstack::Glance/Glance_api_config[DEFAULT/use_syslog_rfc_format]/ensure) created -2014-09-26T14:16:16.375395+01:00 notice: (/Stage[main]/Openstack::Glance/Glance_cache_config[DEFAULT/use_syslog_rfc_format]/ensure) created -2014-09-26T14:16:16.383243+01:00 notice: (/Stage[main]/Openstack::Glance/Glance_cache_config[DEFAULT/use_syslog]/ensure) created -2014-09-26T14:16:16.390981+01:00 notice: (/Stage[main]/Openstack::Glance/Glance_cache_config[DEFAULT/log_file]/ensure) created -2014-09-26T14:16:16.407269+01:00 notice: (/Stage[main]/Openstack::Glance/Glance_api_config[DEFAULT/sql_max_retries]/ensure) created -2014-09-26T14:16:16.415008+01:00 notice: (/Stage[main]/Openstack::Glance/Glance_registry_config[DEFAULT/sql_max_retries]/ensure) created -2014-09-26T14:16:16.431286+01:00 notice: (/Stage[main]/Openstack::Glance/Glance_api_config[DEFAULT/notification_strategy]/ensure) created -2014-09-26T14:16:16.439343+01:00 notice: (/Stage[main]/Openstack::Glance/Glance_cache_config[DEFAULT/image_cache_max_size]/ensure) created -2014-09-26T14:16:16.453946+01:00 notice: (/Stage[main]/Openstack::Glance/Glance_api_config[DEFAULT/registry_client_protocol]/ensure) created -2014-09-26T14:16:16.461642+01:00 notice: (/Stage[main]/Openstack::Glance/Glance_cache_config[DEFAULT/image_cache_stall_time]/ensure) created -2014-09-26T14:16:16.469221+01:00 notice: (/Stage[main]/Openstack::Glance/Glance_registry_config[keystone_authtoken/signing_dirname]/ensure) created -2014-09-26T14:16:16.476985+01:00 notice: (/Stage[main]/Openstack::Glance/Glance_registry_config[DEFAULT/use_syslog_rfc_format]/ensure) created -2014-09-26T14:16:16.482340+01:00 notice: (/Stage[main]/Glance/File[/etc/glance/]/owner) owner changed 'root' to 'glance' -2014-09-26T14:16:16.484033+01:00 notice: (/Stage[main]/Glance/File[/etc/glance/]/mode) mode changed '0755' to '0770' -2014-09-26T14:16:16.602433+01:00 notice: Installing package openstack-heat-api-cfn from absent to 2014.1.1-fuel5.1.mira7 -2014-09-26T14:16:17.997215+01:00 notice: (/Stage[main]/Heat::Api_cfn/Package[heat-api-cfn]/ensure) created -2014-09-26T14:16:18.015282+01:00 notice: (/Stage[main]/Glance::Notify::Rabbitmq/Glance_api_config[DEFAULT/rabbit_hosts]/ensure) created -2014-09-26T14:16:18.036768+01:00 notice: (/Stage[main]/Openstack::Glance/Glance_api_config[keystone_authtoken/signing_dir]/ensure) created -2014-09-26T14:16:18.044693+01:00 notice: (/Stage[main]/Openstack::Glance/Glance_registry_config[DEFAULT/sql_max_pool_size]/ensure) created -2014-09-26T14:16:18.089623+01:00 notice: (/Stage[main]/Openstack::Glance/Glance_api_config[DEFAULT/scrubber_datadir]/ensure) created -2014-09-26T14:16:18.105791+01:00 notice: (/Stage[main]/Glance::Notify::Rabbitmq/Glance_api_config[DEFAULT/amqp_durable_queues]/ensure) created -2014-09-26T14:16:18.136096+01:00 notice: (/Stage[main]/Puppet::Pull/File[/usr/local/bin/puppet-pull]/ensure) created -2014-09-26T14:16:18.155361+01:00 notice: (/Stage[main]/Openstack::Glance/Glance_cache_config[DEFAULT/sql_max_pool_size]/ensure) created -2014-09-26T14:16:18.472475+01:00 notice: Installing package dnsmasq-utils from absent to 2.65-5.el6 -2014-09-26T14:16:20.613402+01:00 notice: (/Stage[main]/Nova::Network::Flatdhcp/Package[dnsmasq-utils]/ensure) created -2014-09-26T14:16:20.829076+01:00 notice: (/Stage[main]/Glance::Api/File[/etc/glance/glance-cache.conf]/owner) owner changed 'root' to 'glance' -2014-09-26T14:16:20.844046+01:00 notice: (/Stage[main]/Glance::Api/Glance_api_config[DEFAULT/registry_port]/ensure) created -2014-09-26T14:16:20.849977+01:00 notice: (/Stage[main]/Glance::Api/File[/etc/glance/glance-api-paste.ini]/ensure) created -2014-09-26T14:16:20.858669+01:00 notice: (/Stage[main]/Glance::Api/File[/etc/glance/glance-api.conf]/owner) owner changed 'root' to 'glance' -2014-09-26T14:16:20.876886+01:00 notice: (/Stage[main]/Glance::Api/Glance_api_config[DEFAULT/log_dir]/ensure) created -2014-09-26T14:16:20.892312+01:00 notice: (/Stage[main]/Glance::Api/Glance_api_config[DEFAULT/show_image_direct_url]/ensure) created -2014-09-26T14:16:20.900329+01:00 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/registry_port]/ensure) created -2014-09-26T14:16:20.914652+01:00 notice: (/Stage[main]/Glance::Api/Glance_api_config[DEFAULT/debug]/ensure) created -2014-09-26T14:16:20.922706+01:00 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/admin_user]/ensure) created -2014-09-26T14:16:20.939088+01:00 notice: (/Stage[main]/Glance::Api/Glance_api_config[DEFAULT/sql_connection]/ensure) created -2014-09-26T14:16:20.953341+01:00 notice: (/Stage[main]/Glance::Api/Glance_api_config[DEFAULT/bind_host]/ensure) created -2014-09-26T14:16:21.078984+01:00 notice: (/Stage[main]/Nova/Group[nova]/ensure) created -2014-09-26T14:16:21.095654+01:00 notice: (/Stage[main]/Glance::Api/Glance_api_config[keystone_authtoken/auth_port]/ensure) created -2014-09-26T14:16:21.110695+01:00 notice: (/Stage[main]/Glance::Api/Glance_api_config[paste_deploy/flavor]/ensure) created -2014-09-26T14:16:21.140795+01:00 notice: (/Stage[main]/Glance::Api/Glance_api_config[keystone_authtoken/auth_host]/ensure) created -2014-09-26T14:16:21.148605+01:00 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/verbose]/ensure) created -2014-09-26T14:16:21.162720+01:00 notice: (/Stage[main]/Glance::Api/Glance_api_config[keystone_authtoken/admin_password]/ensure) created -2014-09-26T14:16:21.178357+01:00 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/admin_tenant_name]/ensure) created -2014-09-26T14:16:21.192392+01:00 notice: (/Stage[main]/Glance::Api/Glance_api_config[keystone_authtoken/admin_tenant_name]/ensure) created -2014-09-26T14:16:21.236519+01:00 notice: (/Stage[main]/Glance::Api/Glance_api_config[DEFAULT/backlog]/ensure) created -2014-09-26T14:16:21.287537+01:00 notice: Installing package openstack-cinder from absent to 2014.1.1-fuel5.1.mira10 -2014-09-26T14:16:44.259996+01:00 notice: (/Stage[main]/Cinder/Package[cinder]/ensure) created -2014-09-26T14:16:44.268752+01:00 notice: (/Stage[main]/Cinder::Api/Cinder_api_paste_ini[filter:authtoken/admin_tenant_name]/ensure) created -2014-09-26T14:16:44.274036+01:00 notice: (/Stage[main]/Cinder/File[/etc/cinder/cinder.conf]/owner) owner changed 'root' to 'cinder' -2014-09-26T14:16:44.275526+01:00 notice: (/Stage[main]/Cinder/File[/etc/cinder/cinder.conf]/mode) mode changed '0640' to '0600' -2014-09-26T14:16:44.280467+01:00 notice: (/Stage[main]/Cinder/File[/etc/cinder/api-paste.ini]/owner) owner changed 'root' to 'cinder' -2014-09-26T14:16:44.281883+01:00 notice: (/Stage[main]/Cinder/File[/etc/cinder/api-paste.ini]/mode) mode changed '0640' to '0600' -2014-09-26T14:16:44.288499+01:00 notice: (/Stage[main]/Cinder::Api/Cinder_api_paste_ini[filter:ratelimit/limits]/ensure) created -2014-09-26T14:16:44.294810+01:00 notice: (/Stage[main]/Cinder::Api/Cinder_api_paste_ini[filter:authtoken/auth_host]/ensure) created -2014-09-26T14:16:44.300825+01:00 notice: (/Stage[main]/Cinder::Api/Cinder_api_paste_ini[filter:ratelimit/paste.filter_factory]/ensure) created -2014-09-26T14:16:44.307243+01:00 notice: (/Stage[main]/Cinder::Api/Cinder_api_paste_ini[filter:authtoken/service_port]/ensure) created -2014-09-26T14:16:44.313338+01:00 notice: (/Stage[main]/Cinder::Api/Cinder_api_paste_ini[filter:authtoken/auth_uri]/ensure) created -2014-09-26T14:16:44.327668+01:00 notice: (/Stage[main]/Glance::Api/Glance_api_config[DEFAULT/log_file]/ensure) created -2014-09-26T14:16:44.341565+01:00 notice: (/Stage[main]/Glance::Api/Glance_api_config[keystone_authtoken/auth_protocol]/ensure) created -2014-09-26T14:16:44.348760+01:00 notice: (/Stage[main]/Cinder::Api/Cinder_api_paste_ini[filter:authtoken/auth_port]/ensure) created -2014-09-26T14:16:44.784408+01:00 notice: (/Stage[main]/Nova/User[nova]/ensure) created -2014-09-26T14:16:44.916890+01:00 notice: Installing package openstack-nova-console from absent to 2014.1.1-fuel5.1.mira8 -2014-09-26T14:16:49.856693+01:00 notice: (/Stage[main]/Nova::Consoleauth/Nova::Generic_service[consoleauth]/Package[nova-consoleauth]/ensure) created -2014-09-26T14:16:49.870797+01:00 notice: (/Stage[main]/Cinder::Api/Cinder_api_paste_ini[filter:authtoken/service_host]/ensure) created -2014-09-26T14:16:49.915979+01:00 notice: (/Stage[main]/Glance::Api/Glance_api_config[DEFAULT/workers]/ensure) created -2014-09-26T14:16:49.927467+01:00 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/admin_password]/ensure) created -2014-09-26T14:16:49.949426+01:00 notice: (/Stage[main]/Glance::Api/Glance_api_config[DEFAULT/use_syslog]/ensure) created -2014-09-26T14:16:49.961608+01:00 notice: (/Stage[main]/Cinder::Api/Cinder_api_paste_ini[filter:authtoken/service_protocol]/ensure) created -2014-09-26T14:16:49.986931+01:00 notice: (/Stage[main]/Glance::Api/Glance_api_config[DEFAULT/registry_host]/ensure) created -2014-09-26T14:16:49.994394+01:00 notice: (/Stage[main]/Cinder::Api/Cinder_api_paste_ini[filter:authtoken/admin_user]/ensure) created -2014-09-26T14:16:50.008839+01:00 notice: (/Stage[main]/Glance::Api/Glance_api_config[DEFAULT/bind_port]/ensure) created -2014-09-26T14:16:50.023843+01:00 notice: (/Stage[main]/Glance::Api/Glance_api_config[DEFAULT/syslog_log_facility]/ensure) created -2014-09-26T14:16:50.045582+01:00 notice: (/Stage[main]/Glance::Api/Glance_api_config[keystone_authtoken/auth_uri]/ensure) created -2014-09-26T14:16:50.183973+01:00 notice: (/Stage[main]/Glance::Api/Glance_api_config[keystone_authtoken/admin_user]/ensure) created -2014-09-26T14:16:50.237435+01:00 notice: Installing package openstack-nova-objectstore from absent to 2014.1.1-fuel5.1.mira8 -2014-09-26T14:16:51.605250+01:00 notice: (/Stage[main]/Nova::Objectstore/Nova::Generic_service[objectstore]/Package[nova-objectstore]/ensure) created -2014-09-26T14:16:51.614716+01:00 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/registry_host]/ensure) created -2014-09-26T14:16:51.644483+01:00 notice: (/Stage[main]/Openstack::Auth_file/File[/root/openrc]/ensure) defined content as '{md5}3c34dda35f1c0b7c83c41996cc2e27b0' -2014-09-26T14:16:51.662691+01:00 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/debug]/ensure) created -2014-09-26T14:16:51.676717+01:00 notice: (/Stage[main]/Glance::Api/Glance_api_config[DEFAULT/verbose]/ensure) created -2014-09-26T14:16:51.725341+01:00 notice: Installing package openstack-nova-conductor from absent to 2014.1.1-fuel5.1.mira8 -2014-09-26T14:16:53.129466+01:00 notice: (/Stage[main]/Nova::Conductor/Nova::Generic_service[conductor]/Package[nova-conductor]/ensure) created -2014-09-26T14:16:53.157483+01:00 notice: (/Stage[main]/Horizon/File[httpd_listen_config_file]/ensure) defined content as '{md5}e5494b5e4a33edb7ea1576d4e2dc2b85' -2014-09-26T14:16:53.238098+01:00 notice: (/Stage[main]/Horizon/File[/etc/sysconfig/httpd]/content) content changed '{md5}37ce05e329a15a6448efdb0c882f2077' to '{md5}bdeae8f1c2bc8088c1b27ff118aa4a6a' -2014-09-26T14:16:53.266495+01:00 notice: (/Stage[main]/Osnailyfacter::Apache_api_proxy/File[/etc/httpd/conf.d/api_proxy.conf]/ensure) defined content as '{md5}8ea2f9727f5fd02a8b2c40fe6d1fb37a' -2014-09-26T14:16:53.628207+01:00 notice: Installing package openstack-dashboard from absent to 2014.1.1-fuel5.1.mira3 -2014-09-26T14:17:03.132966+01:00 notice: (/Stage[main]/Horizon/Package[dashboard]/ensure) created -2014-09-26T14:17:03.144031+01:00 notice: (/Stage[main]/Horizon/File[/var/log/horizon/horizon.log]/ensure) created -2014-09-26T14:17:03.168705+01:00 notice: (/Stage[main]/Horizon/File[/etc/httpd/conf.d/openstack-dashboard.conf]/content) content changed '{md5}8847ac562ae1ba9508fc63e488d1d789' to '{md5}f876058c78bf1e112543f6844711aced' -2014-09-26T14:17:03.170627+01:00 notice: (/Stage[main]/Horizon/File[/etc/httpd/conf.d/openstack-dashboard.conf]/owner) owner changed 'root' to 'apache' -2014-09-26T14:17:03.172486+01:00 notice: (/Stage[main]/Horizon/File[/etc/httpd/conf.d/openstack-dashboard.conf]/group) group changed 'root' to 'apache' -2014-09-26T14:17:03.178673+01:00 notice: (/Stage[main]/Horizon/File[/usr/share/openstack-dashboard/]/owner) owner changed 'root' to 'apache' -2014-09-26T14:17:03.359060+01:00 notice: (/Stage[main]/Horizon/File[/usr/share/openstack-dashboard/]/group) group changed 'root' to 'apache' -2014-09-26T14:17:03.497362+01:00 notice: (/Stage[main]/Horizon/Exec[chown_dashboard]) Triggered 'refresh' from 2 events -2014-09-26T14:17:03.534994+01:00 notice: (/Stage[main]/Horizon/File[/etc/httpd/conf.d/ssl.conf]/ensure) defined content as '{md5}09b61f0c147e09d7612e3fd094e1cf3c' -2014-09-26T14:17:17.565658+01:00 notice: (/Stage[main]/Horizon/Exec[horizon_compress_styles]/returns) /usr/lib/python2.6/site-packages/swiftclient/version.py:17: UserWarning: Module openstack_dashboard was already imported from /usr/share/openstack-dashboard/openstack_dashboard/__init__.pyc, but /usr/lib/python2.6/site-packages is being added to sys.path -2014-09-26T14:17:17.567770+01:00 notice: (/Stage[main]/Horizon/Exec[horizon_compress_styles]/returns) import pkg_resources -2014-09-26T14:17:17.569866+01:00 notice: (/Stage[main]/Horizon/Exec[horizon_compress_styles]/returns) Found 'compress' tags in: -2014-09-26T14:17:17.571917+01:00 notice: (/Stage[main]/Horizon/Exec[horizon_compress_styles]/returns) /usr/share/openstack-dashboard/openstack_dashboard/templates/_stylesheets.html -2014-09-26T14:17:17.573988+01:00 notice: (/Stage[main]/Horizon/Exec[horizon_compress_styles]/returns) /usr/lib/python2.6/site-packages/horizon/templates/horizon/_conf.html -2014-09-26T14:17:17.575254+01:00 notice: (/Stage[main]/Horizon/Exec[horizon_compress_styles]/returns) /usr/lib/python2.6/site-packages/horizon/templates/horizon/_scripts.html -2014-09-26T14:17:17.576447+01:00 notice: (/Stage[main]/Horizon/Exec[horizon_compress_styles]/returns) Compressing... done -2014-09-26T14:17:17.577726+01:00 notice: (/Stage[main]/Horizon/Exec[horizon_compress_styles]/returns) Compressed 3 block(s) from 3 template(s). -2014-09-26T14:17:17.578944+01:00 notice: (/Stage[main]/Horizon/Exec[horizon_compress_styles]) Triggered 'refresh' from 1 events -2014-09-26T14:17:17.614313+01:00 notice: (/Stage[main]/Horizon/File[/etc/openstack-dashboard/local_settings]/content) content changed '{md5}8573783a696eb488063559c662bcbb36' to '{md5}a6e491a7fbb3669609c2c7d81336f347' -2014-09-26T14:17:17.618154+01:00 notice: (/Stage[main]/Horizon/File[/etc/openstack-dashboard/local_settings]/owner) owner changed 'root' to 'apache' -2014-09-26T14:17:17.621838+01:00 notice: (/Stage[main]/Horizon/File[/etc/openstack-dashboard/local_settings]/mode) mode changed '0640' to '0644' -2014-09-26T14:17:17.820015+01:00 notice: Installing package openstack-nova-novncproxy from absent to 2014.1.1-fuel5.1.mira8 -2014-09-26T14:17:19.689947+01:00 notice: (/Stage[main]/Nova::Vncproxy/Nova::Generic_service[vncproxy]/Package[nova-vncproxy]/ensure) created -2014-09-26T14:17:19.720166+01:00 notice: (/Stage[main]/Glance::Notify::Rabbitmq/Glance_api_config[DEFAULT/notification_driver]/ensure) created -2014-09-26T14:17:19.809337+01:00 notice: Installing package cirros-testvm from absent to 0.3.2-3.mira1 -2014-09-26T14:17:22.050884+01:00 notice: (/Stage[main]/Osnailyfacter::Cluster_simple/Package[cirros-testvm]/ensure) created -2014-09-26T14:17:22.092932+01:00 notice: (/Stage[main]/Nova::Network/Sysctl::Value[net.ipv4.ip_forward]/Sysctl[net.ipv4.ip_forward]/val) val changed '0' to '1' -2014-09-26T14:17:22.243306+01:00 notice: (/Stage[main]/Nova::Network/Sysctl::Value[net.ipv4.ip_forward]/Exec[exec_sysctl_net.ipv4.ip_forward]/returns) net.ipv4.ip_forward = 1 -2014-09-26T14:17:22.245478+01:00 notice: (/Stage[main]/Nova::Network/Sysctl::Value[net.ipv4.ip_forward]/Exec[exec_sysctl_net.ipv4.ip_forward]/returns) executed successfully -2014-09-26T14:17:22.723459+01:00 notice: (/Stage[main]/Osnailyfacter::Apache_api_proxy/Firewall[007 tinyproxy]/ensure) created -2014-09-26T14:17:23.865955+01:00 notice: (/Stage[main]/Horizon/Augeas[remove_listen_directive]/returns) executed successfully -2014-09-26T14:17:23.879612+01:00 notice: (/Stage[main]/Mysql::Config/File[/etc/mysql]/ensure) created -2014-09-26T14:17:23.885166+01:00 notice: (/Stage[main]/Mysql::Config/File[/etc/mysql/conf.d]/ensure) created -2014-09-26T14:17:24.357236+01:00 notice: (/Stage[main]/Openstack::Heat/Firewall[206 heat-api-cloudwatch]/ensure) created -2014-09-26T14:17:24.953395+01:00 notice: (/Stage[main]/Openstack::Heat/Firewall[205 heat-api-cfn]/ensure) created -2014-09-26T14:17:26.010556+01:00 notice: (/Stage[main]/Openstack::Heat/Firewall[204 heat-api]/ensure) created -2014-09-26T14:17:26.144886+01:00 notice: (/Stage[main]/Openstack::Glance/Glance_api_config[DEFAULT/control_exchange]/ensure) created -2014-09-26T14:17:26.221715+01:00 notice: (/Stage[main]/Glance::Backend::File/Glance_cache_config[DEFAULT/filesystem_store_datadir]/ensure) created -2014-09-26T14:17:26.242880+01:00 notice: (/Stage[main]/Cinder::Api/Cinder_api_paste_ini[filter:authtoken/auth_protocol]/ensure) created -2014-09-26T14:17:26.258012+01:00 notice: (/Stage[main]/Glance::Notify::Rabbitmq/Glance_api_config[DEFAULT/rabbit_notification_exchange]/ensure) created -2014-09-26T14:17:26.345939+01:00 notice: (/Stage[main]/Mysql::Config/Exec[delete_logfiles]/returns) executed successfully -2014-09-26T14:17:26.376841+01:00 notice: (/Stage[main]/Mysql::Config/File[/etc/my.cnf]/content) content changed '{md5}8ace886bbe7e274448bc8bea16d3ead6' to '{md5}4ef9cff1f28d08d99f9e1aa5c11bdafe' -2014-09-26T14:17:31.567021+01:00 notice: (/Stage[main]/Mysql::Config/Exec[mysqld-restart]) Triggered 'refresh' from 3 events -2014-09-26T14:17:31.601072+01:00 notice: (/Stage[main]/Mysql::Password/File[mysql_password]/ensure) defined content as '{md5}1ac84239e8502cfa922ac3c7b5cf0d2a' -2014-09-26T14:17:31.671575+01:00 notice: Installing package openstack-nova-scheduler from absent to 2014.1.1-fuel5.1.mira8 -2014-09-26T14:17:34.127204+01:00 notice: (/Stage[main]/Nova::Scheduler/Nova::Generic_service[scheduler]/Package[nova-scheduler]/ensure) created -2014-09-26T14:17:34.477827+01:00 notice: (/Stage[main]/Heat/Heat_config[DEFAULT/log_dir]/ensure) created -2014-09-26T14:17:34.686227+01:00 notice: (/Stage[main]/Heat/Heat_config[DEFAULT/rabbit_use_ssl]/ensure) created -2014-09-26T14:17:34.709071+01:00 notice: (/Stage[main]/Heat/Heat_config[DEFAULT/rabbit_hosts]/ensure) created -2014-09-26T14:17:34.730865+01:00 notice: (/Stage[main]/Heat/Heat_config[DEFAULT/verbose]/ensure) created -2014-09-26T14:17:34.751858+01:00 notice: (/Stage[main]/Heat::Api/Heat_config[heat_api/bind_host]/ensure) created -2014-09-26T14:17:34.773542+01:00 notice: (/Stage[main]/Heat::Engine/Heat_config[DEFAULT/heat_metadata_server_url]/ensure) created -2014-09-26T14:17:34.794843+01:00 notice: (/Stage[main]/Heat::Engine/Heat_config[DEFAULT/heat_waitcondition_server_url]/ensure) created -2014-09-26T14:17:34.827610+01:00 notice: (/Stage[main]/Heat/Heat_config[keystone_authtoken/auth_port]/ensure) created -2014-09-26T14:17:34.848145+01:00 notice: (/Stage[main]/Heat/Heat_config[keystone_authtoken/admin_user]/ensure) created -2014-09-26T14:17:34.868313+01:00 notice: (/Stage[main]/Openstack::Heat/Heat_config[DATABASE/max_pool_size]/ensure) created -2014-09-26T14:17:34.890274+01:00 notice: (/Stage[main]/Heat/Heat_config[DEFAULT/rabbit_ha_queues]/ensure) created -2014-09-26T14:17:34.910562+01:00 notice: (/Stage[main]/Heat/Heat_config[database/idle_timeout]/ensure) created -2014-09-26T14:17:34.931068+01:00 notice: (/Stage[main]/Openstack::Heat/Heat_config[DATABASE/max_overflow]/ensure) created -2014-09-26T14:17:34.951907+01:00 notice: (/Stage[main]/Heat::Engine/Heat_config[DEFAULT/engine_life_check_timeout]/ensure) created -2014-09-26T14:17:34.973318+01:00 notice: (/Stage[main]/Heat/Heat_config[DEFAULT/use_syslog]/ensure) created -2014-09-26T14:17:34.993880+01:00 notice: (/Stage[main]/Openstack::Heat/Heat_config[DEFAULT/instance_connection_is_secure]/ensure) created -2014-09-26T14:17:35.014307+01:00 notice: (/Stage[main]/Heat::Engine/Heat_config[DEFAULT/heat_watch_server_url]/ensure) created -2014-09-26T14:17:35.034942+01:00 notice: (/Stage[main]/Heat::Engine/Heat_config[DEFAULT/heat_stack_user_role]/ensure) created -2014-09-26T14:17:35.055072+01:00 notice: (/Stage[main]/Heat::Api/Heat_config[heat_api/bind_port]/ensure) created -2014-09-26T14:17:35.075204+01:00 notice: (/Stage[main]/Heat::Api_cloudwatch/Heat_config[heat_api_cloudwatch/workers]/ensure) created -2014-09-26T14:17:35.095209+01:00 notice: (/Stage[main]/Heat/Heat_config[keystone_authtoken/auth_host]/ensure) created -2014-09-26T14:17:35.116694+01:00 notice: (/Stage[main]/Heat/Heat_config[DEFAULT/rabbit_virtual_host]/ensure) created -2014-09-26T14:17:35.136735+01:00 notice: (/Stage[main]/Heat::Api_cfn/Heat_config[heat_api_cfn/bind_port]/ensure) created -2014-09-26T14:17:35.294943+01:00 notice: (/Stage[main]/Heat/Heat_config[DEFAULT/debug]/ensure) created -2014-09-26T14:17:35.317496+01:00 notice: (/Stage[main]/Heat/Heat_config[DEFAULT/syslog_log_facility]/ensure) created -2014-09-26T14:17:35.340702+01:00 notice: (/Stage[main]/Openstack::Heat/Heat_config[DEFAULT/use_syslog_rfc_format]/ensure) created -2014-09-26T14:17:35.362435+01:00 notice: (/Stage[main]/Openstack::Heat/Heat_config[DATABASE/max_retries]/ensure) created -2014-09-26T14:17:35.385427+01:00 notice: (/Stage[main]/Openstack::Heat/Heat_config[DEFAULT/instance_connection_https_validate_certificates]/ensure) created -2014-09-26T14:17:35.407284+01:00 notice: (/Stage[main]/Heat/Heat_config[database/connection]/ensure) created -2014-09-26T14:17:35.428992+01:00 notice: (/Stage[main]/Heat/Heat_config[keystone_authtoken/admin_password]/ensure) created -2014-09-26T14:17:35.450567+01:00 notice: (/Stage[main]/Heat/Heat_config[keystone_authtoken/admin_tenant_name]/ensure) created -2014-09-26T14:17:35.471917+01:00 notice: (/Stage[main]/Heat::Api_cloudwatch/Heat_config[heat_api_cloudwatch/bind_port]/ensure) created -2014-09-26T14:17:35.494287+01:00 notice: (/Stage[main]/Heat/Heat_config[DEFAULT/amqp_durable_queues]/ensure) created -2014-09-26T14:17:35.516596+01:00 notice: (/Stage[main]/Heat/Heat_config[DEFAULT/rabbit_password]/ensure) created -2014-09-26T14:17:35.562950+01:00 notice: (/Stage[main]/Heat/Heat_config[DEFAULT/rpc_backend]/ensure) created -2014-09-26T14:17:35.583639+01:00 notice: (/Stage[main]/Heat/Heat_config[keystone_authtoken/auth_uri]/ensure) created -2014-09-26T14:17:35.616144+01:00 notice: (/Stage[main]/Heat::Api/Heat_config[heat_api/workers]/ensure) created -2014-09-26T14:17:35.636673+01:00 notice: (/Stage[main]/Heat::Api_cfn/Heat_config[heat_api_cfn/bind_host]/ensure) created -2014-09-26T14:17:35.657004+01:00 notice: (/Stage[main]/Heat/Heat_config[ec2authtoken/auth_uri]/ensure) created -2014-09-26T14:17:35.689316+01:00 notice: (/Stage[main]/Heat/Heat_config[keystone_authtoken/auth_protocol]/ensure) created -2014-09-26T14:17:35.710267+01:00 notice: (/Stage[main]/Heat::Engine/Heat_config[DEFAULT/auth_encryption_key]/ensure) created -2014-09-26T14:17:35.730546+01:00 notice: (/Stage[main]/Heat::Api_cloudwatch/Heat_config[heat_api_cloudwatch/bind_host]/ensure) created -2014-09-26T14:17:35.889207+01:00 notice: (/Stage[main]/Openstack::Heat/Heat_config[DEFAULT/notification_driver]/ensure) created -2014-09-26T14:17:35.921468+01:00 notice: (/Stage[main]/Heat/Heat_config[DEFAULT/rabbit_userid]/ensure) created -2014-09-26T14:17:35.943230+01:00 notice: (/Stage[main]/Heat::Api_cfn/Heat_config[heat_api_cfn/workers]/ensure) created -2014-09-26T14:17:35.957087+01:00 notice: (/Stage[main]/Cinder::Api/Cinder_api_paste_ini[filter:authtoken/admin_password]/ensure) created -2014-09-26T14:17:35.973945+01:00 notice: (/Stage[main]/Glance::Api/Glance_api_config[DEFAULT/sql_idle_timeout]/ensure) created -2014-09-26T14:17:36.111645+01:00 notice: (/Stage[main]/Keystone::Db::Mysql/Mysql::Db[keystone]/Database[keystone]/ensure) created -2014-09-26T14:17:36.227083+01:00 notice: (/Stage[main]/Keystone::Db::Mysql/Mysql::Db[keystone]/Database_user[keystone@127.0.0.1]/ensure) created -2014-09-26T14:17:36.363595+01:00 notice: (/Stage[main]/Keystone::Db::Mysql/Keystone::Db::Mysql::Host_access[]/Database_user[keystone@]/ensure) created -2014-09-26T14:17:36.818316+01:00 notice: (/Stage[main]/Keystone::Db::Mysql/Mysql::Db[keystone]/Database_grant[keystone@127.0.0.1/keystone]/privileges) privileges changed '' to 'all' -2014-09-26T14:17:37.149767+01:00 notice: (/Stage[main]/Keystone::Db::Mysql/Keystone::Db::Mysql::Host_access[]/Database_grant[keystone@/keystone]/privileges) privileges changed '' to 'all' -2014-09-26T14:17:37.260112+01:00 notice: (/Stage[main]/Keystone::Db::Mysql/Keystone::Db::Mysql::Host_access[node-4]/Database_user[keystone@node-4]/ensure) created -2014-09-26T14:17:37.596856+01:00 notice: (/Stage[main]/Keystone::Db::Mysql/Keystone::Db::Mysql::Host_access[node-4]/Database_grant[keystone@node-4/keystone]/privileges) privileges changed '' to 'all' -2014-09-26T14:17:37.912253+01:00 notice: Installing package openstack-keystone from absent to 2014.1.1-fuel5.1.mira6 -2014-09-26T14:17:40.366832+01:00 notice: (/Stage[main]/Keystone/Package[keystone]/ensure) created -2014-09-26T14:17:40.394385+01:00 notice: (/Stage[main]/Keystone/Keystone_config[app:admin_version_service/paste.app_factory]/ensure) created -2014-09-26T14:17:40.612417+01:00 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/rabbit_hosts]/ensure) created -2014-09-26T14:17:40.636220+01:00 notice: (/Stage[main]/Keystone/Keystone_config[pipeline:public_version_api/pipeline]/ensure) created -2014-09-26T14:17:40.659034+01:00 notice: (/Stage[main]/Keystone/Keystone_config[filter:user_crud_extension/paste.filter_factory]/ensure) created -2014-09-26T14:17:40.684734+01:00 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/rabbit_virtual_host]/ensure) created -2014-09-26T14:17:40.708488+01:00 notice: (/Stage[main]/Keystone/Keystone_config[composite:main//]/ensure) created -2014-09-26T14:17:40.731452+01:00 notice: (/Stage[main]/Keystone/Keystone_config[catalog/driver]/ensure) created -2014-09-26T14:17:40.754356+01:00 notice: (/Stage[main]/Keystone/Keystone_config[filter:stats_monitoring/paste.filter_factory]/ensure) created -2014-09-26T14:17:40.776701+01:00 notice: (/Stage[main]/Keystone/Keystone_config[signing/token_format]/ensure) created -2014-09-26T14:17:40.799772+01:00 notice: (/Stage[main]/Keystone/Keystone_config[filter:ec2_extension/paste.filter_factory]/ensure) created -2014-09-26T14:17:40.822210+01:00 notice: (/Stage[main]/Keystone/Keystone_config[composite:main//v2.0]/ensure) created -2014-09-26T14:17:40.845482+01:00 notice: (/Stage[main]/Keystone/Keystone_config[filter:debug/paste.filter_factory]/ensure) created -2014-09-26T14:17:40.872806+01:00 notice: (/Stage[main]/Keystone/Keystone_config[identity/driver]/ensure) created -2014-09-26T14:17:40.897403+01:00 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/rabbit_password]/ensure) created -2014-09-26T14:17:40.919722+01:00 notice: (/Stage[main]/Keystone/Keystone_config[filter:crud_extension/paste.filter_factory]/ensure) created -2014-09-26T14:17:40.946946+01:00 notice: (/Stage[main]/Keystone/Keystone_config[memcache/servers]/ensure) created -2014-09-26T14:17:40.974065+01:00 notice: (/Stage[main]/Keystone/Keystone_config[filter:xml_body/paste.filter_factory]/ensure) created -2014-09-26T14:17:40.997005+01:00 notice: (/Stage[main]/Keystone/Keystone_config[composite:main/use]/ensure) created -2014-09-26T14:17:41.020961+01:00 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/syslog_log_facility]/ensure) created -2014-09-26T14:17:41.043765+01:00 notice: (/Stage[main]/Keystone/Keystone_config[pipeline:public_api/pipeline]/ensure) created -2014-09-26T14:17:41.066654+01:00 notice: (/Stage[main]/Keystone/Keystone_config[pipeline:admin_version_api/pipeline]/ensure) created -2014-09-26T14:17:41.231898+01:00 notice: (/Stage[main]/Keystone/Keystone_config[filter:stats_reporting/paste.filter_factory]/ensure) created -2014-09-26T14:17:41.256751+01:00 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/public_port]/ensure) created -2014-09-26T14:17:41.281459+01:00 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/rabbit_userid]/ensure) created -2014-09-26T14:17:41.306061+01:00 notice: (/Stage[main]/Keystone/Keystone_config[filter:s3_extension/paste.filter_factory]/ensure) created -2014-09-26T14:17:41.326351+01:00 notice: (/Stage[main]/Keystone/File[/var/log/keystone]/mode) mode changed '0750' to '0755' -2014-09-26T14:17:41.352764+01:00 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/use_syslog]/ensure) created -2014-09-26T14:17:41.376017+01:00 notice: (/Stage[main]/Keystone/Keystone_config[database/max_overflow]/ensure) created -2014-09-26T14:17:41.400123+01:00 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/compute_port]/ensure) created -2014-09-26T14:17:41.426266+01:00 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/debug]/ensure) created -2014-09-26T14:17:41.450427+01:00 notice: (/Stage[main]/Keystone/Keystone_config[policy/driver]/ensure) created -2014-09-26T14:17:41.473744+01:00 notice: (/Stage[main]/Keystone/Keystone_config[filter:url_normalize/paste.filter_factory]/ensure) created -2014-09-26T14:17:41.499048+01:00 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/rabbit_ha_queues]/ensure) created -2014-09-26T14:17:41.522079+01:00 notice: (/Stage[main]/Keystone/Keystone_config[token/driver]/ensure) created -2014-09-26T14:17:41.545851+01:00 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/admin_token]/ensure) created -2014-09-26T14:17:41.570500+01:00 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/log_dir]/ensure) created -2014-09-26T14:17:41.595759+01:00 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/bind_host]/ensure) created -2014-09-26T14:17:41.619135+01:00 notice: (/Stage[main]/Keystone/Keystone_config[cache/enabled]/ensure) created -2014-09-26T14:17:41.658915+01:00 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/use_syslog_rfc_format]/ensure) created -2014-09-26T14:17:41.682028+01:00 notice: (/Stage[main]/Keystone/Keystone_config[database/max_retries]/ensure) created -2014-09-26T14:17:41.848115+01:00 notice: (/Stage[main]/Keystone/Keystone_config[filter:token_auth/paste.filter_factory]/ensure) created -2014-09-26T14:17:41.872735+01:00 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/admin_port]/ensure) created -2014-09-26T14:17:41.897714+01:00 notice: (/Stage[main]/Keystone/Keystone_config[filter:json_body/paste.filter_factory]/ensure) created -2014-09-26T14:17:41.903522+01:00 notice: (/Stage[main]/Keystone/File[/etc/keystone]/owner) owner changed 'root' to 'keystone' -2014-09-26T14:17:41.905403+01:00 notice: (/Stage[main]/Keystone/File[/etc/keystone]/mode) mode changed '0750' to '0755' -2014-09-26T14:17:41.930713+01:00 notice: (/Stage[main]/Keystone/Keystone_config[composite:admin//]/ensure) created -2014-09-26T14:17:41.970485+01:00 notice: (/Stage[main]/Keystone/Keystone_config[composite:admin/use]/ensure) created -2014-09-26T14:17:41.994589+01:00 notice: (/Stage[main]/Keystone/Keystone_config[filter:admin_token_auth/paste.filter_factory]/ensure) created -2014-09-26T14:17:42.018182+01:00 notice: (/Stage[main]/Keystone/Keystone_config[pipeline:admin_api/pipeline]/ensure) created -2014-09-26T14:17:42.042145+01:00 notice: (/Stage[main]/Keystone/Keystone_config[composite:admin//v2.0]/ensure) created -2014-09-26T14:17:42.066720+01:00 notice: (/Stage[main]/Keystone/Keystone_config[app:public_service/paste.app_factory]/ensure) created -2014-09-26T14:17:42.090838+01:00 notice: (/Stage[main]/Keystone/Keystone_config[database/connection]/ensure) created -2014-09-26T14:17:42.114857+01:00 notice: (/Stage[main]/Keystone/Keystone_config[database/idle_timeout]/ensure) created -2014-09-26T14:17:42.140228+01:00 notice: (/Stage[main]/Keystone/Keystone_config[app:admin_service/paste.app_factory]/ensure) created -2014-09-26T14:17:42.164257+01:00 notice: (/Stage[main]/Keystone/Keystone_config[cache/backend]/ensure) created -2014-09-26T14:17:42.185583+01:00 notice: (/Stage[main]/Keystone/File_line[backend_argument_pool]/ensure) created -2014-09-26T14:17:42.206313+01:00 notice: (/Stage[main]/Keystone/File_line[backend_argument_url]/ensure) created -2014-09-26T14:17:42.229746+01:00 notice: (/Stage[main]/Keystone/Keystone_config[database/max_pool_size]/ensure) created -2014-09-26T14:17:42.255309+01:00 notice: (/Stage[main]/Keystone/Keystone_config[ec2/driver]/ensure) created -2014-09-26T14:17:42.279425+01:00 notice: (/Stage[main]/Keystone/Keystone_config[app:public_version_service/paste.app_factory]/ensure) created -2014-09-26T14:17:42.713703+01:00 notice: (/Stage[main]/Mysql::Server::Account_security/Database_user[root@node-4.domain.tld]/ensure) removed -2014-09-26T14:17:43.028775+01:00 notice: (/Stage[main]/Glance::Db::Mysql/Mysql::Db[glance]/Database[glance]/ensure) created -2014-09-26T14:17:43.165313+01:00 notice: (/Stage[main]/Glance::Db::Mysql/Glance::Db::Mysql::Host_access[]/Database_user[glance@]/ensure) created -2014-09-26T14:17:43.660761+01:00 notice: (/Stage[main]/Glance::Db::Mysql/Glance::Db::Mysql::Host_access[]/Database_grant[glance@/glance]/privileges) privileges changed '' to 'all' -2014-09-26T14:17:43.792445+01:00 notice: (/Stage[main]/Mysql::Server::Account_security/Database_user[@localhost]/ensure) removed -2014-09-26T14:17:43.969294+01:00 notice: (/Stage[main]/Glance::Db::Mysql/Glance::Db::Mysql::Host_access[node-4]/Database_user[glance@node-4]/ensure) created -2014-09-26T14:17:44.432348+01:00 notice: (/Stage[main]/Glance::Db::Mysql/Glance::Db::Mysql::Host_access[node-4]/Database_grant[glance@node-4/glance]/privileges) privileges changed '' to 'all' -2014-09-26T14:17:44.579555+01:00 notice: (/Stage[main]/Nova::Db::Mysql/Mysql::Db[nova]/Database[nova]/ensure) created -2014-09-26T14:17:44.687329+01:00 notice: (/Stage[main]/Nova::Db::Mysql/Nova::Db::Mysql::Host_access[]/Database_user[nova@]/ensure) created -2014-09-26T14:17:44.837650+01:00 notice: (/Stage[main]/Nova::Db::Mysql/Nova::Db::Mysql::Host_access[node-4]/Database_user[nova@node-4]/ensure) created -2014-09-26T14:17:44.991773+01:00 notice: (/Stage[main]/Nova::Db::Mysql/Mysql::Db[nova]/Database_user[nova@127.0.0.1]/ensure) created -2014-09-26T14:17:45.149644+01:00 notice: (/Stage[main]/Mysql::Server::Account_security/Database_user[@node-4.domain.tld]/ensure) removed -2014-09-26T14:17:45.756314+01:00 notice: (/Stage[main]/Nova::Db::Mysql/Nova::Db::Mysql::Host_access[node-4]/Database_grant[nova@node-4/nova]/privileges) privileges changed '' to 'all' -2014-09-26T14:17:47.818279+01:00 notice: (/Stage[main]/Nova::Db::Mysql/Nova::Db::Mysql::Host_access[]/Database_grant[nova@/nova]/privileges) privileges changed '' to 'all' -2014-09-26T14:17:48.194955+01:00 notice: (/Stage[main]/Cinder::Db::Mysql/Mysql::Db[cinder]/Database[cinder]/ensure) created -2014-09-26T14:17:48.352763+01:00 notice: (/Stage[main]/Cinder::Db::Mysql/Mysql::Db[cinder]/Database_user[cinder@127.0.0.1]/ensure) created -2014-09-26T14:17:48.871772+01:00 notice: (/Stage[main]/Cinder::Db::Mysql/Mysql::Db[cinder]/Database_grant[cinder@127.0.0.1/cinder]/privileges) privileges changed '' to 'all' -2014-09-26T14:17:49.000476+01:00 notice: (/Stage[main]/Cinder::Db::Mysql/Cinder::Db::Mysql::Host_access[node-4]/Database_user[cinder@node-4]/ensure) created -2014-09-26T14:17:49.478515+01:00 notice: (/Stage[main]/Cinder::Db::Mysql/Cinder::Db::Mysql::Host_access[node-4]/Database_grant[cinder@node-4/cinder]/privileges) privileges changed '' to 'all' -2014-09-26T14:17:49.693061+01:00 notice: (/Stage[main]/Mysql::Server::Account_security/Database[test]/ensure) removed -2014-09-26T14:17:49.796001+01:00 notice: (/Stage[main]/Cinder::Db::Mysql/Cinder::Db::Mysql::Host_access[]/Database_user[cinder@]/ensure) created -2014-09-26T14:17:50.162288+01:00 notice: (/Stage[main]/Cinder::Db::Mysql/Cinder::Db::Mysql::Host_access[]/Database_grant[cinder@/cinder]/privileges) privileges changed '' to 'all' -2014-09-26T14:17:50.343911+01:00 notice: (/Stage[main]/Mysql::Server::Account_security/Database_user[root@127.0.0.1]/ensure) removed -2014-09-26T14:17:51.202847+01:00 notice: (/Stage[main]/Nova::Db::Mysql/Mysql::Db[nova]/Database_grant[nova@127.0.0.1/nova]/privileges) privileges changed '' to 'all' -2014-09-26T14:17:51.811154+01:00 notice: (/Stage[main]/Heat::Db::Mysql/Mysql::Db[heat]/Database[heat]/ensure) created -2014-09-26T14:17:52.383973+01:00 notice: (/Stage[main]/Heat::Db::Mysql/Heat::Db::Mysql::Host_access[]/Database_user[heat@]/ensure) created -2014-09-26T14:17:52.825740+01:00 notice: (/Stage[main]/Heat::Db::Mysql/Mysql::Db[heat]/Database_user[heat@192.168.0.1]/ensure) created -2014-09-26T14:17:53.401636+01:00 notice: (/Stage[main]/Heat::Db::Mysql/Mysql::Db[heat]/Database_grant[heat@192.168.0.1/heat]/privileges) privileges changed '' to 'all' -2014-09-26T14:17:53.548307+01:00 notice: (/Stage[main]/Heat::Db::Mysql/Heat::Db::Mysql::Host_access[localhost]/Database_user[heat@localhost]/ensure) created -2014-09-26T14:17:54.045439+01:00 notice: (/Stage[main]/Heat::Db::Mysql/Heat::Db::Mysql::Host_access[localhost]/Database_grant[heat@localhost/heat]/privileges) privileges changed '' to 'all' -2014-09-26T14:17:54.420412+01:00 notice: (/Stage[main]/Heat::Db::Mysql/Heat::Db::Mysql::Host_access[]/Database_grant[heat@/heat]/privileges) privileges changed '' to 'all' -2014-09-26T14:17:54.541955+01:00 notice: (/Stage[main]/Glance::Db::Mysql/Mysql::Db[glance]/Database_user[glance@127.0.0.1]/ensure) created -2014-09-26T14:17:54.941194+01:00 notice: (/Stage[main]/Glance::Db::Mysql/Mysql::Db[glance]/Database_grant[glance@127.0.0.1/glance]/privileges) privileges changed '' to 'all' -2014-09-26T14:17:54.992253+01:00 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[keystone_authtoken/auth_host]/ensure) created -2014-09-26T14:17:55.011360+01:00 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[DEFAULT/bind_host]/ensure) created -2014-09-26T14:17:55.019268+01:00 notice: (/Stage[main]/Glance::Registry/File[/etc/glance/glance-registry.conf]/owner) owner changed 'root' to 'glance' -2014-09-26T14:17:55.031898+01:00 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[DEFAULT/sql_idle_timeout]/ensure) created -2014-09-26T14:17:55.044411+01:00 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[DEFAULT/log_dir]/ensure) created -2014-09-26T14:17:55.052315+01:00 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[keystone_authtoken/admin_password]/ensure) created -2014-09-26T14:17:55.065136+01:00 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[DEFAULT/bind_port]/ensure) created -2014-09-26T14:17:55.073069+01:00 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[DEFAULT/use_syslog]/ensure) created -2014-09-26T14:17:55.080710+01:00 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[keystone_authtoken/auth_port]/ensure) created -2014-09-26T14:17:55.093716+01:00 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[DEFAULT/syslog_log_facility]/ensure) created -2014-09-26T14:17:55.101486+01:00 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[paste_deploy/flavor]/ensure) created -2014-09-26T14:17:55.110253+01:00 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[DEFAULT/sql_connection]/ensure) created -2014-09-26T14:17:55.123323+01:00 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[DEFAULT/log_file]/ensure) created -2014-09-26T14:17:55.131003+01:00 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[keystone_authtoken/auth_protocol]/ensure) created -2014-09-26T14:17:55.137318+01:00 notice: (/Stage[main]/Glance::Registry/File[/etc/glance/glance-registry-paste.ini]/ensure) created -2014-09-26T14:17:55.145098+01:00 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[keystone_authtoken/auth_uri]/ensure) created -2014-09-26T14:17:55.317396+01:00 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[DEFAULT/debug]/ensure) created -2014-09-26T14:17:55.325740+01:00 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[DEFAULT/verbose]/ensure) created -2014-09-26T14:17:55.333862+01:00 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[keystone_authtoken/admin_tenant_name]/ensure) created -2014-09-26T14:17:55.342035+01:00 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[keystone_authtoken/admin_user]/ensure) created -2014-09-26T14:17:55.795998+01:00 notice: (/Stage[main]/Rabbitmq::Server/Package[qpid-cpp-server]/ensure) created -2014-09-26T14:17:55.872494+01:00 notice: Installing package rabbitmq-server from absent to 3.3.5-1.mira1 -2014-09-26T14:18:33.081759+01:00 notice: (/Stage[main]/Rabbitmq::Server/Package[rabbitmq-server]/ensure) created -2014-09-26T14:18:33.112827+01:00 notice: (/Stage[main]/Rabbitmq::Server/File[rabbitmq-server]/content) content changed '{md5}63bbd1e2d4dc40695ff9eae735a05749' to '{md5}1212d1a76192cfae5b2c3f6de5a5c7d9' -2014-09-26T14:18:33.142013+01:00 notice: (/Stage[main]/Rabbitmq::Server/File[rabbitmq.config]/ensure) defined content as '{md5}eac183cba41d504f5d4ef8ff4762e2e7' -2014-09-26T14:18:33.163605+01:00 notice: (/Stage[main]/Rabbitmq::Server/File[rabbitmq-env.config]/ensure) defined content as '{md5}8ce0520d2975f007938c831c4ec0b007' -2014-09-26T14:18:33.185953+01:00 notice: Module rabbitmq cannot notify service rabbitmq-server on package rabbitmq-server update -2014-09-26T14:18:33.187091+01:00 notice: (/Stage[main]/Rabbitmq::Service/Notify[Module rabbitmq cannot notify service rabbitmq-server on package rabbitmq-server update]/message) defined 'message' as 'Module rabbitmq cannot notify service rabbitmq-server on package rabbitmq-server update' -2014-09-26T14:18:36.605310+01:00 notice: (/Stage[main]/Rabbitmq::Service/Service[rabbitmq-server]/ensure) ensure changed 'stopped' to 'running' -2014-09-26T14:18:36.931012+01:00 notice: (/Stage[main]/Cinder/Cinder_config[DEFAULT/rabbit_host]/ensure) created -2014-09-26T14:18:36.963604+01:00 notice: (/Stage[main]/Openstack::Cinder/Cinder_config[keystone_authtoken/signing_dir]/ensure) created -2014-09-26T14:18:36.995870+01:00 notice: (/Stage[main]/Cinder/Cinder_config[database/idle_timeout]/ensure) created -2014-09-26T14:18:37.027814+01:00 notice: (/Stage[main]/Openstack::Cinder/Cinder_config[keystone_authtoken/admin_password]/ensure) created -2014-09-26T14:18:37.062812+01:00 notice: (/Stage[main]/Cinder/Cinder_config[DEFAULT/use_syslog]/ensure) created -2014-09-26T14:18:37.096099+01:00 notice: (/Stage[main]/Cinder/Cinder_config[DEFAULT/api_paste_config]/ensure) created -2014-09-26T14:18:37.130588+01:00 notice: (/Stage[main]/Cinder/Cinder_config[DEFAULT/debug]/ensure) created -2014-09-26T14:18:37.161843+01:00 notice: (/Stage[main]/Openstack::Cinder/Cinder_config[database/max_pool_size]/ensure) created -2014-09-26T14:18:37.195937+01:00 notice: (/Stage[main]/Cinder/Cinder_config[DEFAULT/syslog_log_facility]/ensure) created -2014-09-26T14:18:37.409250+01:00 notice: (/Stage[main]/Cinder/Cinder_config[DEFAULT/rabbit_userid]/ensure) created -2014-09-26T14:18:37.442317+01:00 notice: (/Stage[main]/Openstack::Cinder/Cinder_config[keystone_authtoken/auth_port]/ensure) created -2014-09-26T14:18:37.478490+01:00 notice: (/Stage[main]/Cinder/Cinder_config[DEFAULT/log_dir]/ensure) created -2014-09-26T14:18:37.516517+01:00 notice: (/Stage[main]/Openstack::Cinder/Cinder_config[keystone_authtoken/auth_host]/ensure) created -2014-09-26T14:18:37.552626+01:00 notice: (/Stage[main]/Cinder::Api/Cinder_config[DEFAULT/auth_strategy]/ensure) created -2014-09-26T14:18:37.585507+01:00 notice: (/Stage[main]/Cinder::Api/Cinder_config[DEFAULT/osapi_volume_listen]/ensure) created -2014-09-26T14:18:37.618500+01:00 notice: (/Stage[main]/Openstack::Cinder/Cinder_config[DEFAULT/glance_api_servers]/ensure) created -2014-09-26T14:18:37.650099+01:00 notice: (/Stage[main]/Openstack::Cinder/Cinder_config[database/max_retries]/ensure) created -2014-09-26T14:18:38.137577+01:00 notice: (/Stage[main]/Openstack::Cinder/Cinder_config[keystone_authtoken/admin_tenant_name]/ensure) created -2014-09-26T14:18:38.170646+01:00 notice: (/Stage[main]/Cinder/Cinder_config[DEFAULT/rabbit_virtual_host]/ensure) created -2014-09-26T14:18:38.202912+01:00 notice: (/Stage[main]/Openstack::Cinder/Cinder_config[keystone_authtoken/auth_protocol]/ensure) created -2014-09-26T14:18:38.234902+01:00 notice: (/Stage[main]/Cinder/Cinder_config[DEFAULT/rabbit_hosts]/ensure) created -2014-09-26T14:18:39.412238+01:00 notice: (/Stage[main]/Nova::Network::Flatdhcp/Nova_config[DEFAULT/flat_interface]/ensure) created -2014-09-26T14:18:39.660141+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/debug]/ensure) created -2014-09-26T14:18:39.718531+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/log_dir]/ensure) created -2014-09-26T14:18:39.771111+01:00 notice: (/Stage[main]/Nova::Network::Flatdhcp/Nova_config[DEFAULT/network_manager]/ensure) created -2014-09-26T14:18:39.820915+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/amqp_durable_queues]/ensure) created -2014-09-26T14:18:39.870407+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_hosts]/ensure) created -2014-09-26T14:18:39.926999+01:00 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_volumes]/ensure) created -2014-09-26T14:18:40.004993+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/notify_api_faults]/ensure) created -2014-09-26T14:18:40.058981+01:00 notice: (/Stage[main]/Nova::Network::Flatdhcp/Nova_config[DEFAULT/flat_network_bridge]/ensure) created -2014-09-26T14:18:40.289105+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/memcached_servers]/ensure) created -2014-09-26T14:18:40.346440+01:00 notice: (/Stage[main]/Nova::Scheduler::Filter/Nova_config[DEFAULT/scheduler_default_filters]/ensure) created -2014-09-26T14:18:40.397276+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_use_ssl]/ensure) created -2014-09-26T14:18:40.447984+01:00 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_ram]/ensure) created -2014-09-26T14:18:40.503725+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/notification_driver]/ensure) created -2014-09-26T14:18:40.561514+01:00 notice: (/Stage[main]/Nova::Scheduler::Filter/Nova_config[DEFAULT/max_io_ops_per_host]/ensure) created -2014-09-26T14:18:40.618471+01:00 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_max_injected_file_content_bytes]/ensure) created -2014-09-26T14:18:40.673165+01:00 notice: (/Stage[main]/Nova::Objectstore/Nova_config[DEFAULT/s3_listen]/ensure) created -2014-09-26T14:18:40.724650+01:00 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_driver]/ensure) created -2014-09-26T14:18:40.923430+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/glance_api_servers]/ensure) created -2014-09-26T14:18:40.977289+01:00 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/max_age]/ensure) created -2014-09-26T14:18:41.029698+01:00 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_security_groups]/ensure) created -2014-09-26T14:18:41.082971+01:00 notice: (/Stage[main]/Nova::Vncproxy/Nova_config[DEFAULT/novncproxy_host]/ensure) created -2014-09-26T14:18:41.133072+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_userid]/ensure) created -2014-09-26T14:18:41.183112+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_ha_queues]/ensure) created -2014-09-26T14:18:41.233406+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/state_path]/ensure) created -2014-09-26T14:18:41.282468+01:00 notice: (/Stage[main]/Openstack::Nova::Controller/Nova_config[DATABASE/max_pool_size]/ensure) created -2014-09-26T14:18:41.331729+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_password]/ensure) created -2014-09-26T14:18:41.382835+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/report_interval]/ensure) created -2014-09-26T14:18:41.592854+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/verbose]/ensure) created -2014-09-26T14:18:41.653923+01:00 notice: (/Stage[main]/Nova::Scheduler::Filter/Nova_config[DEFAULT/scheduler_weight_classes]/ensure) created -2014-09-26T14:18:41.660475+01:00 notice: (/Stage[main]/Nova/File[/var/log/nova]/group) group changed 'root' to 'nova' -2014-09-26T14:18:41.661627+01:00 notice: (/Stage[main]/Nova/File[/var/log/nova]/mode) mode changed '0755' to '0750' -2014-09-26T14:18:41.715003+01:00 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_cores]/ensure) created -2014-09-26T14:18:41.767452+01:00 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/reservation_expire]/ensure) created -2014-09-26T14:18:41.817397+01:00 notice: (/Stage[main]/Nova/Nova_config[database/idle_timeout]/ensure) created -2014-09-26T14:18:41.895774+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_virtual_host]/ensure) created -2014-09-26T14:18:41.977649+01:00 notice: (/Stage[main]/Nova::Network::Flatdhcp/Nova_config[DEFAULT/dhcpbridge]/ensure) created -2014-09-26T14:18:42.176735+01:00 notice: (/Stage[main]/Nova::Network::Flatdhcp/Nova_config[DEFAULT/dhcpbridge_flagfile]/ensure) created -2014-09-26T14:18:42.236607+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/image_service]/ensure) created -2014-09-26T14:18:42.294447+01:00 notice: (/Stage[main]/Osnailyfacter::Cluster_simple/Nova_config[DEFAULT/use_cow_images]/ensure) created -2014-09-26T14:18:42.381640+01:00 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_max_injected_files]/ensure) created -2014-09-26T14:18:42.432119+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/notify_on_state_change]/ensure) created -2014-09-26T14:18:42.487789+01:00 notice: (/Stage[main]/Nova::Scheduler::Filter/Nova_config[DEFAULT/scheduler_host_subset_size]/ensure) created -2014-09-26T14:18:42.544954+01:00 notice: (/Stage[main]/Nova::Vncproxy/Nova_config[DEFAULT/novncproxy_port]/ensure) created -2014-09-26T14:18:42.601475+01:00 notice: (/Stage[main]/Nova::Network::Flatdhcp/Nova_config[DEFAULT/force_dhcp_release]/ensure) created -2014-09-26T14:18:42.658609+01:00 notice: (/Stage[main]/Nova::Scheduler::Filter/Nova_config[DEFAULT/ram_allocation_ratio]/ensure) created -2014-09-26T14:18:42.857469+01:00 notice: (/Stage[main]/Nova/Nova_config[database/connection]/ensure) created -2014-09-26T14:18:42.917500+01:00 notice: (/Stage[main]/Osnailyfacter::Cluster_simple/Nova_config[DEFAULT/compute_scheduler_driver]/ensure) created -2014-09-26T14:18:42.970870+01:00 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_security_group_rules]/ensure) created -2014-09-26T14:18:43.027457+01:00 notice: (/Stage[main]/Nova::Scheduler::Filter/Nova_config[DEFAULT/disk_allocation_ratio]/ensure) created -2014-09-26T14:18:43.084592+01:00 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_max_injected_file_path_bytes]/ensure) created -2014-09-26T14:18:43.136189+01:00 notice: (/Stage[main]/Openstack::Nova::Controller/Nova_config[DEFAULT/api_paste_config]/ensure) created -2014-09-26T14:18:43.186971+01:00 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_floating_ips]/ensure) created -2014-09-26T14:18:43.237852+01:00 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_key_pairs]/ensure) created -2014-09-26T14:18:43.292872+01:00 notice: (/Stage[main]/Nova::Scheduler::Filter/Nova_config[DEFAULT/scheduler_max_attempts]/ensure) created -2014-09-26T14:18:43.499277+01:00 notice: (/Stage[main]/Nova::Scheduler::Filter/Nova_config[DEFAULT/cpu_allocation_ratio]/ensure) created -2014-09-26T14:18:43.560742+01:00 notice: (/Stage[main]/Openstack::Nova::Controller/Nova_config[DEFAULT/multi_host]/ensure) created -2014-09-26T14:18:43.614216+01:00 notice: (/Stage[main]/Openstack::Nova::Controller/Nova_config[keystone_authtoken/signing_dirname]/ensure) created -2014-09-26T14:18:43.671975+01:00 notice: (/Stage[main]/Nova::Scheduler::Filter/Nova_config[DEFAULT/max_instances_per_host]/ensure) created -2014-09-26T14:18:43.728623+01:00 notice: (/Stage[main]/Nova::Scheduler::Filter/Nova_config[DEFAULT/scheduler_available_filters]/ensure) created -2014-09-26T14:18:43.785018+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/lock_path]/ensure) created -2014-09-26T14:18:43.839576+01:00 notice: (/Stage[main]/Nova::Network::Flatdhcp/Nova_config[DEFAULT/public_interface]/ensure) created -2014-09-26T14:18:43.896614+01:00 notice: (/Stage[main]/Osnailyfacter::Cluster_simple/Nova_config[DEFAULT/start_guests_on_host_boot]/ensure) created -2014-09-26T14:18:43.948790+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/service_down_time]/ensure) created -2014-09-26T14:18:43.983887+01:00 notice: (/Stage[main]/Openstack::Cinder/Cinder_config[DEFAULT/use_syslog_rfc_format]/ensure) created -2014-09-26T14:18:44.168531+01:00 notice: (/Stage[main]/Cinder/Cinder_config[DEFAULT/verbose]/ensure) created -2014-09-26T14:18:44.227988+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/syslog_log_facility]/ensure) created -2014-09-26T14:18:44.261043+01:00 notice: (/Stage[main]/Openstack::Cinder/Cinder_config[database/max_overflow]/ensure) created -2014-09-26T14:18:44.294024+01:00 notice: (/Stage[main]/Cinder/Cinder_config[DEFAULT/control_exchange]/ensure) created -2014-09-26T14:18:44.352669+01:00 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_gigabytes]/ensure) created -2014-09-26T14:18:44.409060+01:00 notice: (/Stage[main]/Openstack::Nova::Controller/Nova_config[DEFAULT/use_syslog_rfc_format]/ensure) created -2014-09-26T14:18:44.440567+01:00 notice: (/Stage[main]/Cinder/Cinder_config[DEFAULT/rabbit_ha_queues]/ensure) created -2014-09-26T14:18:44.492581+01:00 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_instances]/ensure) created -2014-09-26T14:18:44.552765+01:00 notice: (/Stage[main]/Nova::Scheduler::Filter/Nova_config[DEFAULT/scheduler_host_manager]/ensure) created -2014-09-26T14:18:44.604612+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/notification_topics]/ensure) created -2014-09-26T14:18:44.655086+01:00 notice: (/Stage[main]/Openstack::Nova::Controller/Nova_config[DATABASE/max_retries]/ensure) created -2014-09-26T14:18:44.854266+01:00 notice: (/Stage[main]/Openstack::Nova::Controller/Nova_config[DATABASE/max_overflow]/ensure) created -2014-09-26T14:18:44.946761+01:00 notice: (/Stage[main]/Openstack::Nova::Controller/Nova_config[keystone_authtoken/signing_dir]/ensure) created -2014-09-26T14:18:45.007782+01:00 notice: (/Stage[main]/Nova::Api/Nova_config[DEFAULT/osapi_compute_listen]/ensure) created -2014-09-26T14:18:45.058454+01:00 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/auth_port]/ensure) created -2014-09-26T14:18:45.110246+01:00 notice: (/Stage[main]/Nova::Api/Nova_config[DEFAULT/ec2_listen]/ensure) created -2014-09-26T14:18:45.160422+01:00 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/admin_password]/ensure) created -2014-09-26T14:18:45.210340+01:00 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/admin_user]/ensure) created -2014-09-26T14:18:45.260316+01:00 notice: (/Stage[main]/Nova::Api/Nova_config[conductor/workers]/ensure) created -2014-09-26T14:18:45.457899+01:00 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/auth_protocol]/ensure) created -2014-09-26T14:18:45.516595+01:00 notice: (/Stage[main]/Nova::Api/Nova_config[DEFAULT/enabled_apis]/ensure) created -2014-09-26T14:18:45.577853+01:00 notice: (/Stage[main]/Nova::Api/Nova_config[DEFAULT/volume_api_class]/ensure) created -2014-09-26T14:18:45.629943+01:00 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/auth_host]/ensure) created -2014-09-26T14:18:45.740676+01:00 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/admin_tenant_name]/ensure) created -2014-09-26T14:18:45.792746+01:00 notice: (/Stage[main]/Nova::Api/Nova_config[DEFAULT/use_forwarded_for]/ensure) created -2014-09-26T14:18:45.849872+01:00 notice: (/Stage[main]/Nova::Api/Nova_config[DEFAULT/osapi_volume_listen]/ensure) created -2014-09-26T14:18:45.902579+01:00 notice: (/Stage[main]/Nova::Api/Nova_config[DEFAULT/metadata_listen]/ensure) created -2014-09-26T14:18:46.109732+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/auth_strategy]/ensure) created -2014-09-26T14:18:46.171164+01:00 notice: (/Stage[main]/Osnailyfacter::Cluster_simple/Nova_config[DEFAULT/ram_weight_multiplier]/ensure) created -2014-09-26T14:18:46.203973+01:00 notice: (/Stage[main]/Cinder/Cinder_config[DEFAULT/amqp_durable_queues]/ensure) created -2014-09-26T14:18:46.257641+01:00 notice: (/Stage[main]/Openstack::Nova::Controller/Nova_config[DEFAULT/keystone_ec2_url]/ensure) created -2014-09-26T14:18:46.309912+01:00 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_metadata_items]/ensure) created -2014-09-26T14:18:46.362287+01:00 notice: (/Stage[main]/Nova::Api/Nova_config[DEFAULT/osapi_compute_workers]/ensure) created -2014-09-26T14:18:46.414397+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rootwrap_config]/ensure) created -2014-09-26T14:18:46.445053+01:00 notice: (/Stage[main]/Cinder/Cinder_config[database/connection]/ensure) created -2014-09-26T14:18:46.499296+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rpc_backend]/ensure) created -2014-09-26T14:18:46.531670+01:00 notice: (/Stage[main]/Cinder/Cinder_config[DEFAULT/rabbit_password]/ensure) created -2014-09-26T14:18:46.713812+01:00 notice: (/Stage[main]/Cinder/Cinder_config[DEFAULT/rabbit_port]/ensure) created -2014-09-26T14:18:46.776037+01:00 notice: (/Stage[main]/Nova::Network::Flatdhcp/Nova_config[DEFAULT/fixed_range]/ensure) created -2014-09-26T14:18:46.810250+01:00 notice: (/Stage[main]/Cinder/Cinder_config[DEFAULT/rpc_backend]/ensure) created -2014-09-26T14:18:46.877735+01:00 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/use_syslog]/ensure) created -2014-09-26T14:18:46.931052+01:00 notice: (/Stage[main]/Nova::Api/Nova_config[DEFAULT/metadata_workers]/ensure) created -2014-09-26T14:18:46.987143+01:00 notice: (/Stage[main]/Nova::Network::Flatdhcp/Nova_config[DEFAULT/dhcp_domain]/ensure) created -2014-09-26T14:18:47.047326+01:00 notice: (/Stage[main]/Openstack::Nova::Controller/Nova_config[DEFAULT/allow_resize_to_same_host]/ensure) created -2014-09-26T14:18:47.106421+01:00 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/auth_uri]/ensure) created -2014-09-26T14:18:47.137470+01:00 notice: (/Stage[main]/Openstack::Cinder/Cinder_config[keystone_authtoken/admin_user]/ensure) created -2014-09-26T14:18:47.168593+01:00 notice: (/Stage[main]/Openstack::Cinder/Cinder_config[DEFAULT/kombu_reconnect_delay]/ensure) created -2014-09-26T14:18:47.200468+01:00 notice: (/Stage[main]/Openstack::Cinder/Cinder_config[keystone_authtoken/signing_dirname]/ensure) created -2014-09-26T14:18:48.133287+01:00 notice: (/Stage[main]/Cinder::Api/Service[cinder-api]/ensure) ensure changed 'stopped' to 'running' -2014-09-26T14:18:56.835238+01:00 notice: (/Stage[main]/Cinder::Api/Exec[cinder-manage db_sync]) Triggered 'refresh' from 35 events -2014-09-26T14:18:57.234952+01:00 notice: (/Stage[main]/Cinder::Scheduler/Service[cinder-scheduler]/ensure) ensure changed 'stopped' to 'running' -2014-09-26T14:18:57.382561+01:00 notice: Installing package openstack-nova-api from absent to 2014.1.1-fuel5.1.mira8 -2014-09-26T14:18:59.069632+01:00 notice: (/Stage[main]/Nova::Api/Nova::Generic_service[api]/Package[nova-api]/ensure) created -2014-09-26T14:18:59.145473+01:00 notice: (/Stage[main]/Nova::Api/Nova_paste_api_ini[filter:ratelimit/limits]/ensure) created -2014-09-26T14:18:59.243173+01:00 notice: (/Stage[main]/Nova::Network::Flatdhcp/Nova_config[DEFAULT/flat_injected]/ensure) created -2014-09-26T14:18:59.257639+01:00 notice: (/Stage[main]/Nova/File[/etc/nova/nova.conf]/owner) owner changed 'root' to 'nova' -2014-09-26T14:18:59.339066+01:00 notice: (/Stage[main]/Nova/Exec[post-nova_config]/returns) Nova config has changed -2014-09-26T14:18:59.340195+01:00 notice: (/Stage[main]/Nova/Exec[post-nova_config]) Triggered 'refresh' from 100 events -2014-09-26T14:19:26.213908+01:00 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]) Triggered 'refresh' from 2 events -2014-09-26T14:19:26.479947+01:00 notice: (/Stage[main]/Nova::Vncproxy/Nova::Generic_service[vncproxy]/Service[nova-vncproxy]/ensure) ensure changed 'stopped' to 'running' -2014-09-26T14:19:26.726336+01:00 notice: (/Stage[main]/Nova::Objectstore/Nova::Generic_service[objectstore]/Service[nova-objectstore]/ensure) ensure changed 'stopped' to 'running' -2014-09-26T14:19:28.303058+01:00 notice: (/Stage[main]/Nova::Consoleauth/Nova::Generic_service[consoleauth]/Service[nova-consoleauth]/ensure) ensure changed 'stopped' to 'running' -2014-09-26T14:19:29.914111+01:00 notice: (/Stage[main]/Nova::Api/Nova::Generic_service[api]/Service[nova-api]/ensure) ensure changed 'stopped' to 'running' -2014-09-26T14:19:31.560217+01:00 notice: (/Stage[main]/Nova::Scheduler/Nova::Generic_service[scheduler]/Service[nova-scheduler]/ensure) ensure changed 'stopped' to 'running' -2014-09-26T14:19:32.251489+01:00 notice: (/Stage[main]/Nova::Conductor/Nova::Generic_service[conductor]/Service[nova-conductor]/ensure) ensure changed 'stopped' to 'running' -2014-09-26T14:21:14.190184+01:00 notice: (/Stage[main]/Nova::Network/Nova::Manage::Network[nova-vm-net]/Nova_network[nova-vm-net]/ensure) created -2014-09-26T14:21:14.311187+01:00 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/verbose]/ensure) created -2014-09-26T14:21:26.508396+01:00 notice: (/Stage[main]/Keystone/Exec[keystone-manage db_sync]) Triggered 'refresh' from 58 events -2014-09-26T14:21:27.870886+01:00 notice: (/Stage[main]/Keystone/Service[keystone]/ensure) ensure changed 'stopped' to 'running' -2014-09-26T14:21:28.827092+01:00 notice: (/Stage[main]/Cinder::Keystone::Auth/Keystone_service[cinderv2]/ensure) created -2014-09-26T14:21:29.242233+01:00 notice: (/Stage[main]/Heat::Keystone::Auth/Keystone_service[heat]/ensure) created -2014-09-26T14:21:30.558296+01:00 notice: (/Stage[main]/Heat::Keystone::Auth/Keystone_endpoint[RegionOne/heat]/ensure) created -2014-09-26T14:21:30.967698+01:00 notice: (/Stage[main]/Keystone::Endpoint/Keystone_service[keystone]/ensure) created -2014-09-26T14:21:31.835479+01:00 notice: (/Stage[main]/Keystone::Endpoint/Keystone_endpoint[keystone]/ensure) created -2014-09-26T14:21:33.348082+01:00 notice: (/Stage[main]/Heat::Keystone::Auth/Keystone_role[heat_stack_user]/ensure) created -2014-09-26T14:21:34.043649+01:00 notice: (/Stage[main]/Heat::Keystone::Auth_cfn/Keystone_service[heat-cfn]/ensure) created -2014-09-26T14:21:34.756677+01:00 notice: (/Stage[main]/Cinder::Keystone::Auth/Keystone_service[cinder]/ensure) created -2014-09-26T14:21:36.204868+01:00 notice: (/Stage[main]/Cinder::Keystone::Auth/Keystone_endpoint[RegionOne/cinder]/ensure) created -2014-09-26T14:21:37.660633+01:00 notice: (/Stage[main]/Heat::Keystone::Auth_cfn/Keystone_endpoint[RegionOne/heat-cfn]/ensure) created -2014-09-26T14:21:38.588848+01:00 notice: (/Stage[main]/Cinder::Keystone::Auth/Keystone_endpoint[RegionOne/cinderv2]/ensure) created -2014-09-26T14:21:39.103910+01:00 notice: (/Stage[main]/Nova::Keystone::Auth/Keystone_service[nova_ec2]/ensure) created -2014-09-26T14:21:39.997935+01:00 notice: (/Stage[main]/Nova::Keystone::Auth/Keystone_endpoint[RegionOne/nova_ec2]/ensure) created -2014-09-26T14:21:40.466526+01:00 notice: (/Stage[main]/Nova::Keystone::Auth/Keystone_service[nova]/ensure) created -2014-09-26T14:21:41.423416+01:00 notice: (/Stage[main]/Nova::Keystone::Auth/Keystone_endpoint[RegionOne/nova]/ensure) created -2014-09-26T14:21:42.354170+01:00 notice: (/Stage[main]/Keystone::Roles::Admin/Keystone_tenant[admin]/ensure) created -2014-09-26T14:21:42.778872+01:00 notice: (/Stage[main]/Keystone::Roles::Admin/Keystone_role[Member]/ensure) created -2014-09-26T14:21:43.234147+01:00 notice: (/Stage[main]/Keystone::Roles::Admin/Keystone_tenant[services]/ensure) created -2014-09-26T14:21:44.702465+01:00 notice: (/Stage[main]/Heat::Keystone::Auth/Keystone_user[heat]/ensure) created -2014-09-26T14:21:45.646046+01:00 notice: (/Stage[main]/Nova::Keystone::Auth/Keystone_user[nova]/ensure) created -2014-09-26T14:21:46.090647+01:00 notice: (/Stage[main]/Keystone::Roles::Admin/Keystone_role[admin]/ensure) created -2014-09-26T14:21:51.285992+01:00 notice: (/Stage[main]/Heat::Keystone::Auth/Keystone_user_role[heat@services]/roles) roles changed ['_member_'] to 'admin' -2014-09-26T14:21:54.713078+01:00 notice: (/Stage[main]/Nova::Keystone::Auth/Keystone_user_role[nova@services]/roles) roles changed ['_member_'] to 'admin' -2014-09-26T14:21:56.172647+01:00 notice: (/Stage[main]/Keystone::Roles::Admin/Keystone_user[admin]/ensure) created -2014-09-26T14:21:59.746929+01:00 notice: (/Stage[main]/Keystone::Roles::Admin/Keystone_user_role[admin@admin]/ensure) created -2014-09-26T14:22:01.030749+01:00 notice: (/Stage[main]/Cinder::Keystone::Auth/Keystone_user[cinder]/ensure) created -2014-09-26T14:22:01.981335+01:00 notice: (/Stage[main]/Heat::Keystone::Auth_cfn/Keystone_user[heat-cfn]/ensure) created -2014-09-26T14:22:04.228102+01:00 notice: (/Stage[main]/Heat::Keystone::Auth_cfn/Keystone_user_role[heat-cfn@services]/ensure) created -2014-09-26T14:22:07.566925+01:00 notice: (/Stage[main]/Osnailyfacter::Cluster_simple/Nova_floating_range[172.16.0.128-172.16.0.254]/ensure) created -2014-09-26T14:22:09.622780+01:00 notice: (/Stage[main]/Cinder::Keystone::Auth/Keystone_user_role[cinder@services]/ensure) created -2014-09-26T14:22:10.522139+01:00 notice: (/Stage[main]/Glance::Keystone::Auth/Keystone_user[glance]/ensure) created -2014-09-26T14:22:12.556019+01:00 notice: (/Stage[main]/Glance::Keystone::Auth/Keystone_user_role[glance@services]/ensure) created -2014-09-26T14:22:12.961413+01:00 notice: (/Stage[main]/Glance::Keystone::Auth/Keystone_service[glance]/ensure) created -2014-09-26T14:22:14.451529+01:00 notice: (/Stage[main]/Glance::Keystone::Auth/Keystone_endpoint[RegionOne/glance]/ensure) created -2014-09-26T14:22:14.468791+01:00 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/auth_url]/ensure) created -2014-09-26T14:22:24.898552+01:00 notice: (/Stage[main]/Glance::Registry/Exec[glance-manage db_sync]) Triggered 'refresh' from 95 events -2014-09-26T14:22:26.642391+01:00 notice: (/Stage[main]/Glance::Registry/Service[glance-registry]/ensure) ensure changed 'stopped' to 'running' -2014-09-26T14:22:28.645255+01:00 notice: (/Stage[main]/Glance::Api/Service[glance-api]/ensure) ensure changed 'stopped' to 'running' -2014-09-26T14:22:28.892405+01:00 notice: (/Stage[main]/Horizon/File[/etc/httpd/conf.d/zzz_performance_tuning.conf]/ensure) defined content as '{md5}bd879ea47cd39e29bf1fcdc1be773671' -2014-09-26T14:22:29.420437+01:00 notice: (/Stage[main]/Horizon/Service[httpd]/ensure) ensure changed 'stopped' to 'running' -2014-09-26T14:22:29.611330+01:00 notice: (/Stage[main]/Heat/User[heat]/groups) groups changed '' to 'heat' -2014-09-26T14:22:38.295515+01:00 notice: (/Stage[main]/Heat/Exec[heat-dbsync]) Triggered 'refresh' from 1 events -2014-09-26T14:22:38.701725+01:00 notice: (/Stage[main]/Heat::Api_cfn/Service[heat-api-cfn]/ensure) ensure changed 'stopped' to 'running' -2014-09-26T14:22:39.080909+01:00 notice: (/Stage[main]/Heat::Api/Service[heat-api]/ensure) ensure changed 'stopped' to 'running' -2014-09-26T14:22:39.104540+01:00 notice: (/Stage[main]/Heat/File[/etc/heat/]/group) group changed 'root' to 'heat' -2014-09-26T14:22:39.106440+01:00 notice: (/Stage[main]/Heat/File[/etc/heat/]/mode) mode changed '0755' to '0750' -2014-09-26T14:22:39.115128+01:00 notice: (/Stage[main]/Heat/File[/etc/heat/heat.conf]/owner) owner changed 'root' to 'heat' -2014-09-26T14:22:39.262791+01:00 notice: (/Stage[main]/Heat::Engine/Exec[heat-encryption-key-replacement]/returns) executed successfully -2014-09-26T14:22:39.585714+01:00 notice: (/Stage[main]/Heat::Engine/Service[heat-engine_service]/ensure) ensure changed 'stopped' to 'running' -2014-09-26T14:22:39.923963+01:00 notice: (/Stage[main]/Heat::Api_cloudwatch/Service[heat-api-cloudwatch]/ensure) ensure changed 'stopped' to 'running' -2014-09-26T14:22:40.030203+01:00 notice: Installing package openstack-nova-cert from absent to 2014.1.1-fuel5.1.mira8 -2014-09-26T14:22:42.101202+01:00 notice: (/Stage[main]/Nova::Cert/Nova::Generic_service[cert]/Package[nova-cert]/ensure) created -2014-09-26T14:22:42.416541+01:00 notice: (/Stage[main]/Nova::Cert/Nova::Generic_service[cert]/Service[nova-cert]/ensure) ensure changed 'stopped' to 'running' -2014-09-26T14:22:42.644258+01:00 notice: Finished catalog run in 599.12 seconds diff --git a/spec/example-logs/puppet-agent.log.singlenode b/spec/example-logs/puppet-agent.log.singlenode deleted file mode 100644 index 540b9193..00000000 --- a/spec/example-logs/puppet-agent.log.singlenode +++ /dev/null @@ -1,231 +0,0 @@ -2013-02-07T09:48:00 notice: Reopening log files -2013-02-07T09:48:24 notice: (/Stage[main]/Nova::Utilities/Package[euca2ools]/ensure) created -2013-02-07T09:48:27 notice: (/Stage[main]/Mysql::Python/Package[python-mysqldb]/ensure) created -2013-02-07T09:48:30 notice: (/Stage[main]/Nova::Utilities/Package[screen]/ensure) created -2013-02-07T09:48:30 notice: (/Stage[main]/Memcached/User[memcached]/ensure) created -2013-02-07T09:48:33 notice: (/Stage[main]/Memcached/Package[memcached]/ensure) created -2013-02-07T09:48:33 notice: (/Stage[main]/Memcached/File[/etc/sysconfig/memcached]/content) content changed '{md5}05503957e3796fbe6fddd756a7a102a0' to '{md5}3a3961445528bdeda6d7b8b5564dfcfc' -2013-02-07T09:48:34 notice: (/Stage[main]/Memcached/Service[memcached]/ensure) ensure changed 'stopped' to 'running' -2013-02-07T09:48:34 notice: (/Stage[main]/Memcached/Service[memcached]) Triggered 'refresh' from 1 events -2013-02-07T09:48:34 notice: (/Stage[main]/Osnailyfacter::Test_controller/File[/tmp/controller-file]/ensure) defined content as '{md5}7f5c51282c4b1242e12addba8cc331fa' -2013-02-07T09:48:43 notice: (/Stage[main]/Horizon/Package[mod_wsgi]/ensure) created -2013-02-07T09:48:48 notice: (/Stage[main]/Nova::Utilities/Package[parted]/ensure) created -2013-02-07T09:48:54 notice: (/Stage[main]/Mysql/Package[mysql_client]/ensure) created -2013-02-07T09:49:19 notice: (/Stage[main]/Mysql::Server/Package[mysql-server]/ensure) created -2013-02-07T09:49:52 notice: (/Stage[main]/Mysql::Server/Service[mysqld]/ensure) ensure changed 'stopped' to 'running' -2013-02-07T09:50:21 notice: (/Stage[main]/Keystone::Python/Package[python-keystone]/ensure) created -2013-02-07T09:50:23 notice: (/Stage[main]/Osnailyfacter::Network_setup/Network_config[eth0.104]/ensure) created -2013-02-07T09:51:25 notice: (/Stage[main]/Nova::Api/Nova::Generic_service[api]/Package[nova-api]/ensure) created -2013-02-07T09:51:26 notice: (/Stage[main]/Glance::Db::Mysql/Mysql::Db[glance]/Database[glance]/ensure) created -2013-02-07T09:51:26 notice: (/Stage[main]/Nova::Db::Mysql/Mysql::Db[nova]/Database[nova]/ensure) created -2013-02-07T09:51:26 notice: (/Stage[main]/Nova::Db::Mysql/Mysql::Db[nova]/Database_user[nova@127.0.0.1]/ensure) created -2013-02-07T09:51:28 notice: (/Stage[main]/Nova/Package[python-amqp]/ensure) created -2013-02-07T09:51:28 notice: (/Stage[main]/Nova::Db::Mysql/Nova::Db::Mysql::Host_access[slave-1]/Database_user[nova@slave-1]/ensure) created -2013-02-07T09:51:29 notice: (/Stage[main]/Nova::Db::Mysql/Nova::Db::Mysql::Host_access[slave-1]/Database_grant[nova@slave-1/nova]/privileges) privileges changed '' to 'all' -2013-02-07T09:51:31 notice: (/Stage[main]/Nova::Utilities/Package[unzip]/ensure) created -2013-02-07T09:51:31 notice: (/Stage[main]/Openstack::Auth_file/File[/root/openrc]/ensure) defined content as '{md5}08262b4756f32b16740cb81596c8c607' -2013-02-07T09:51:46 notice: (/Stage[main]/Horizon/Package[openstack-dashboard]/ensure) created -2013-02-07T09:51:46 notice: (/Stage[main]/Horizon/File[/var/log/horizon]/ensure) created -2013-02-07T09:51:46 notice: (/Stage[main]/Horizon/File_line[horizon_redirect_rule]/ensure) created -2013-02-07T09:51:46 notice: (/Stage[main]/Glance::Db::Mysql/Glance::Db::Mysql::Host_access[slave-1]/Database_user[glance@slave-1]/ensure) created -2013-02-07T09:51:46 notice: (/Stage[main]/Glance::Db::Mysql/Glance::Db::Mysql::Host_access[slave-1]/Database_grant[glance@slave-1/glance]/privileges) privileges changed '' to 'all' -2013-02-07T09:51:46 notice: (/Stage[main]/Horizon/File[/etc/openstack-dashboard/local_settings]/content) content changed '{md5}d114fa06522fa1016ab2bdede4cfd7bf' to '{md5}4966b1e7a0c22c25b1c69f149d9ae92b' -2013-02-07T09:51:46 notice: (/Stage[main]/Horizon/File[/etc/openstack-dashboard/local_settings]/owner) owner changed 'root' to 'apache' -2013-02-07T09:51:46 notice: (/Stage[main]/Horizon/File[/etc/openstack-dashboard/local_settings]/group) group changed 'root' to 'apache' -2013-02-07T09:51:54 notice: (/Stage[main]/Nova::Vncproxy/Package[python-numpy]/ensure) created -2013-02-07T09:53:27 notice: (/Stage[main]/Nova::Utilities/Package[libguestfs-tools-c]/ensure) created -2013-02-07T09:53:27 notice: (/Stage[main]/Nova::Network/Sysctl::Value[net.ipv4.ip_forward]/Sysctl[net.ipv4.ip_forward]/val) val changed '0' to '1' -2013-02-07T09:53:28 notice: (/Stage[main]/Nova::Db::Mysql/Mysql::Db[nova]/Database_grant[nova@127.0.0.1/nova]/privileges) privileges changed '' to 'all' -2013-02-07T09:53:28 notice: (/Stage[main]/Nova::Network/Sysctl::Value[net.ipv4.ip_forward]/Exec[exec_sysctl_net.ipv4.ip_forward]/returns) net.ipv4.ip_forward = 1 -2013-02-07T09:53:28 notice: (/Stage[main]/Nova::Network/Sysctl::Value[net.ipv4.ip_forward]/Exec[exec_sysctl_net.ipv4.ip_forward]/returns) executed successfully -2013-02-07T09:53:28 notice: (/Stage[main]/Mysql::Config/File[/etc/mysql]/ensure) created -2013-02-07T09:53:28 notice: (/Stage[main]/Mysql::Config/File[/etc/my.cnf]/ensure) defined content as '{md5}7ae09a894eebe7ed3b5fc3b8ca8b445e' -2013-02-07T09:53:28 notice: (/Stage[main]/Mysql::Config/File[/etc/mysql/conf.d]/ensure) created -2013-02-07T09:54:31 notice: (/Stage[main]/Mysql::Config/Exec[mysqld-restart]) Triggered 'refresh' from 3 events -2013-02-07T09:54:31 notice: (/Stage[main]/Glance::Db::Mysql/Glance::Db::Mysql::Host_access[]/Database_user[glance@]/ensure) created -2013-02-07T09:54:32 notice: (/Stage[main]/Glance::Db::Mysql/Glance::Db::Mysql::Host_access[]/Database_grant[glance@/glance]/privileges) privileges changed '' to 'all' -2013-02-07T09:54:32 notice: (/Stage[main]/Horizon/File_line[httpd_listen_on_internal_network_only]/ensure) created -2013-02-07T09:54:32 notice: (/Stage[main]/Horizon/Service[$::horizon::params::http_service]/ensure) ensure changed 'stopped' to 'running' -2013-02-07T09:54:34 notice: (/Stage[main]/Horizon/Service[$::horizon::params::http_service]) Triggered 'refresh' from 6 events -2013-02-07T09:54:34 notice: (/Stage[main]/Glance/Group[glance]/ensure) created -2013-02-07T09:54:34 notice: (/Stage[main]/Glance/User[glance]/ensure) created -2013-02-07T09:54:40 notice: (/Stage[main]/Glance/Package[glance]/ensure) created -2013-02-07T09:54:40 notice: (/Stage[main]/Glance::Api/Glance_api_config[keystone_authtoken/signing_dirname]/ensure) created -2013-02-07T09:54:40 notice: (/Stage[main]/Glance::Api/Glance_api_config[DEFAULT/debug]/value) value changed 'False' to 'true' -2013-02-07T09:54:40 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/admin_user]/ensure) created -2013-02-07T09:54:40 notice: (/Stage[main]/Glance::Api/Glance_api_config[DEFAULT/sql_connection]/value) value changed 'mysql://glance:glance@localhost/glance' to 'mysql://glance:glance_pass@127.0.0.1/glance' -2013-02-07T09:54:40 notice: (/Stage[main]/Glance::Api/Glance_api_config[paste_deploy/flavor]/ensure) created -2013-02-07T09:54:40 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/verbose]/value) value changed 'True' to 'true' -2013-02-07T09:54:40 notice: (/Stage[main]/Glance::Api/Glance_api_config[keystone_authtoken/admin_password]/value) value changed '%SERVICE_PASSWORD%' to 'glance_pass' -2013-02-07T09:54:40 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/admin_tenant_name]/ensure) created -2013-02-07T09:54:40 notice: (/Stage[main]/Glance::Api/Glance_api_config[keystone_authtoken/admin_tenant_name]/value) value changed '%SERVICE_TENANT_NAME%' to 'services' -2013-02-07T09:54:40 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/admin_password]/ensure) created -2013-02-07T09:54:40 notice: (/Stage[main]/Glance::Api/Glance_api_config[DEFAULT/registry_host]/value) value changed '0.0.0.0' to '127.0.0.1' -2013-02-07T09:54:40 notice: (/Stage[main]/Glance::Api/Glance_api_config[keystone_authtoken/auth_uri]/ensure) created -2013-02-07T09:54:40 notice: (/Stage[main]/Glance/File[/etc/glance/]/owner) owner changed 'root' to 'glance' -2013-02-07T09:54:40 notice: (/Stage[main]/Glance/File[/etc/glance/]/mode) mode changed '0755' to '0770' -2013-02-07T09:54:40 notice: (/Stage[main]/Glance::Api/Glance_api_config[keystone_authtoken/admin_user]/value) value changed '%SERVICE_USER%' to 'glance' -2013-02-07T09:54:40 notice: (/Stage[main]/Glance::Api/Glance_api_config[keystone_authtoken/signing_dir]/ensure) created -2013-02-07T09:54:40 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/registry_host]/value) value changed '0.0.0.0' to '127.0.0.1' -2013-02-07T09:54:40 notice: (/Stage[main]/Glance/File[glance-logging.conf]/ensure) defined content as '{md5}71fa2daa8e89a992f4225e850fd879e4' -2013-02-07T09:54:40 notice: (/Stage[main]/Glance::Api/File[/etc/glance/glance-cache.conf]/owner) owner changed 'root' to 'glance' -2013-02-07T09:54:40 notice: (/Stage[main]/Glance::Api/File[/etc/glance/glance-api.conf]/owner) owner changed 'root' to 'glance' -2013-02-07T09:54:40 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/debug]/value) value changed 'False' to 'true' -2013-02-07T09:54:40 notice: (/Stage[main]/Glance::Api/Glance_api_config[DEFAULT/verbose]/value) value changed 'True' to 'true' -2013-02-07T09:54:41 notice: (/Stage[main]/Nova::Db::Mysql/Nova::Db::Mysql::Host_access[]/Database_user[nova@]/ensure) created -2013-02-07T09:54:41 notice: (/Stage[main]/Nova::Db::Mysql/Nova::Db::Mysql::Host_access[]/Database_grant[nova@/nova]/privileges) privileges changed '' to 'all' -2013-02-07T09:54:42 notice: (/Stage[main]/Keystone::Db::Mysql/Mysql::Db[keystone]/Database[keystone]/ensure) created -2013-02-07T09:54:42 notice: (/Stage[main]/Keystone::Db::Mysql/Mysql::Db[keystone]/Database_user[keystone@127.0.0.1]/ensure) created -2013-02-07T09:54:42 notice: (/Stage[main]/Keystone::Db::Mysql/Keystone::Db::Mysql::Host_access[]/Database_user[keystone@]/ensure) created -2013-02-07T09:54:42 notice: (/Stage[main]/Keystone::Db::Mysql/Mysql::Db[keystone]/Database_grant[keystone@127.0.0.1/keystone]/privileges) privileges changed '' to 'all' -2013-02-07T09:54:42 notice: (/Stage[main]/Keystone::Db::Mysql/Keystone::Db::Mysql::Host_access[]/Database_grant[keystone@/keystone]/privileges) privileges changed '' to 'all' -2013-02-07T09:54:42 notice: (/Stage[main]/Keystone::Db::Mysql/Keystone::Db::Mysql::Host_access[slave-1]/Database_user[keystone@slave-1]/ensure) created -2013-02-07T09:54:43 notice: (/Stage[main]/Keystone::Db::Mysql/Keystone::Db::Mysql::Host_access[slave-1]/Database_grant[keystone@slave-1/keystone]/privileges) privileges changed '' to 'all' -2013-02-07T09:54:43 notice: (/Stage[main]/Glance::Db::Mysql/Mysql::Db[glance]/Database_user[glance@127.0.0.1]/ensure) created -2013-02-07T09:54:43 notice: (/Stage[main]/Glance::Db::Mysql/Mysql::Db[glance]/Database_grant[glance@127.0.0.1/glance]/privileges) privileges changed '' to 'all' -2013-02-07T09:54:43 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[keystone_authtoken/signing_dir]/ensure) created -2013-02-07T09:54:43 notice: (/Stage[main]/Glance::Registry/File[/etc/glance/glance-registry.conf]/owner) owner changed 'root' to 'glance' -2013-02-07T09:54:43 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[keystone_authtoken/admin_password]/value) value changed '%SERVICE_PASSWORD%' to 'glance_pass' -2013-02-07T09:54:43 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[paste_deploy/flavor]/ensure) created -2013-02-07T09:54:43 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[keystone_authtoken/signing_dirname]/ensure) created -2013-02-07T09:54:43 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[DEFAULT/sql_connection]/value) value changed 'mysql://glance:glance@localhost/glance' to 'mysql://glance:glance_pass@127.0.0.1/glance' -2013-02-07T09:54:43 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[DEFAULT/debug]/value) value changed 'False' to 'true' -2013-02-07T09:54:43 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[DEFAULT/verbose]/value) value changed 'True' to 'true' -2013-02-07T09:54:43 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[keystone_authtoken/admin_tenant_name]/value) value changed '%SERVICE_TENANT_NAME%' to 'services' -2013-02-07T09:54:43 notice: (/Stage[main]/Glance::Registry/Glance_registry_config[keystone_authtoken/admin_user]/value) value changed '%SERVICE_USER%' to 'glance' -2013-02-07T09:54:45 notice: (/Stage[main]/Keystone/Package[keystone]/ensure) created -2013-02-07T09:54:45 notice: (/Stage[main]/Keystone/Keystone_config[sql/connection]/value) value changed 'mysql://keystone:keystone@localhost/keystone' to 'mysql://keystone:keystone_db_pass@127.0.0.1/keystone' -2013-02-07T09:54:45 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/public_port]/ensure) created -2013-02-07T09:54:45 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/compute_port]/ensure) created -2013-02-07T09:54:45 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/debug]/ensure) created -2013-02-07T09:54:45 notice: (/Stage[main]/Keystone/Keystone_config[policy/driver]/ensure) created -2013-02-07T09:54:45 notice: (/Stage[main]/Keystone/Keystone_config[sql/idle_timeout]/ensure) created -2013-02-07T09:54:45 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/admin_token]/ensure) created -2013-02-07T09:54:45 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/bind_host]/ensure) created -2013-02-07T09:54:45 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/admin_port]/ensure) created -2013-02-07T09:54:45 notice: (/Stage[main]/Keystone/File[/etc/keystone]/owner) owner changed 'root' to 'keystone' -2013-02-07T09:54:45 notice: (/Stage[main]/Keystone/File[/etc/keystone]/group) group changed 'root' to 'keystone' -2013-02-07T09:54:45 notice: (/Stage[main]/Mysql::Server::Account_security/Database_user[@slave-1.domain.tld]/ensure) removed -2013-02-07T09:54:45 notice: (/Stage[main]/Mysql::Server::Account_security/Database_user[@localhost]/ensure) removed -2013-02-07T09:54:45 notice: (/Stage[main]/Mysql::Server::Account_security/Database[test]/ensure) removed -2013-02-07T09:54:45 notice: (/Stage[main]/Mysql::Server::Account_security/Database_user[root@slave-1.domain.tld]/ensure) removed -2013-02-07T09:54:45 notice: (/Stage[main]/Mysql::Server::Account_security/Database_user[root@127.0.0.1]/ensure) removed -2013-02-07T09:54:46 notice: (/Stage[main]/Rabbitmq::Server/Package[qpid-cpp-server]/ensure) created -2013-02-07T09:56:47 notice: (/Stage[main]/Rabbitmq::Server/Package[rabbitmq-server]/ensure) created -2013-02-07T09:56:48 notice: (/Stage[main]/Rabbitmq::Server/Exec[rabbitmq_stop]/returns) Stopping rabbitmq-server: RabbitMQ is not running -2013-02-07T09:56:48 notice: (/Stage[main]/Rabbitmq::Server/Exec[rabbitmq_stop]/returns) rabbitmq-server. -2013-02-07T09:56:48 notice: (/Stage[main]/Rabbitmq::Server/Exec[rabbitmq_stop]/returns) executed successfully -2013-02-07T09:56:48 notice: (/Stage[main]/Rabbitmq::Server/File[erlang_cookie]/content) content changed '{md5}8be1bf5048c306fa9b40c631203d8300' to '{md5}b28788594da393660db1e4f20d296c10' -2013-02-07T09:56:48 notice: (/Stage[main]/Rabbitmq::Server/File[rabbitmq.config]/ensure) defined content as '{md5}017a023ed429c071bf945a706be7fb13' -2013-02-07T09:56:48 notice: (/Stage[main]/Rabbitmq::Server/File[rabbitmq-env.config]/ensure) defined content as '{md5}2980dac99b8f2195a50ef6e459ffedae' -2013-02-07T09:56:51 notice: (/Stage[main]/Rabbitmq::Service/Service[rabbitmq-server]/ensure) ensure changed 'stopped' to 'running' -2013-02-07T09:56:56 notice: (/Stage[main]/Rabbitmq::Service/Service[rabbitmq-server]) Triggered 'refresh' from 1 events -2013-02-07T09:56:56 notice: (/Stage[main]/Rabbitmq::Server/Rabbitmq_user[guest]/ensure) removed -2013-02-07T09:56:57 notice: (/Stage[main]/Nova::Rabbitmq/Rabbitmq_user[openstack_rabbit_user]/ensure) created -2013-02-07T09:56:57 notice: (/Stage[main]/Nova::Rabbitmq/Rabbitmq_user_permissions[openstack_rabbit_user@/]/ensure) created -2013-02-07T09:56:58 notice: (/Stage[main]/Nova::Network::Flatdhcp/Nova_config[DEFAULT/flat_interface]/ensure) created -2013-02-07T09:56:58 notice: (/Stage[main]/Nova::Network/Nova_config[DEFAULT/floating_range]/ensure) created -2013-02-07T09:56:58 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_hosts]/ensure) created -2013-02-07T09:56:58 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_volumes]/ensure) created -2013-02-07T09:56:58 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/osapi_compute_listen]/ensure) created -2013-02-07T09:56:58 notice: (/Stage[main]/Nova::Network::Flatdhcp/Nova_config[DEFAULT/flat_network_bridge]/ensure) created -2013-02-07T09:56:58 notice: (/Stage[main]/Openstack::Controller/Nova_config[DEFAULT/memcached_servers]/ensure) created -2013-02-07T09:56:58 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/ec2_listen]/ensure) created -2013-02-07T09:56:58 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/admin_password]/value) value changed '%SERVICE_PASSWORD%' to 'nova_pass' -2013-02-07T09:56:58 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_max_injected_file_content_bytes]/ensure) created -2013-02-07T09:56:58 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/admin_user]/value) value changed '%SERVICE_USER%' to 'nova' -2013-02-07T09:56:59 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/glance_api_servers]/ensure) created -2013-02-07T09:56:59 notice: (/Stage[main]/Nova::Vncproxy/Nova_config[DEFAULT/novncproxy_host]/ensure) created -2013-02-07T09:56:59 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_userid]/ensure) created -2013-02-07T09:56:59 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_ha_queues]/ensure) created -2013-02-07T09:56:59 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_password]/ensure) created -2013-02-07T09:56:59 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/verbose]/ensure) created -2013-02-07T09:56:59 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_cores]/ensure) created -2013-02-07T09:57:01 notice: (/Stage[main]/Nova::Consoleauth/Nova::Generic_service[consoleauth]/Package[nova-consoleauth]/ensure) created -2013-02-07T09:57:01 notice: (/Stage[main]/Nova::Api/Nova_config[DEFAULT/enabled_apis]/ensure) created -2013-02-07T09:57:01 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/sql_connection]/value) value changed 'mysql://nova:nova@localhost/nova' to 'mysql://nova:nova_pass@127.0.0.1/nova' -2013-02-07T09:57:01 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_virtual_host]/ensure) created -2013-02-07T09:57:01 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/image_service]/ensure) created -2013-02-07T09:57:01 notice: (/Stage[main]/Nova::Api/Nova_config[DEFAULT/volume_api_class]/ensure) created -2013-02-07T09:57:01 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_max_injected_files]/ensure) created -2013-02-07T09:57:01 notice: (/Stage[main]/Nova::Vncproxy/Nova_config[DEFAULT/novncproxy_port]/ensure) created -2013-02-07T09:57:01 notice: (/Stage[main]/Nova::Network::Flatdhcp/Nova_config[DEFAULT/force_dhcp_release]/value) value changed 'True' to 'true' -2013-02-07T09:57:01 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rabbit_port]/ensure) created -2013-02-07T09:57:42 notice: (/Stage[main]/Nova::Vncproxy/Nova::Generic_service[vncproxy]/Package[nova-vncproxy]/ensure) created -2013-02-07T09:57:42 notice: (/Stage[main]/Nova/User[nova]/shell) shell changed '/sbin/nologin' to '/bin/bash' -2013-02-07T09:57:42 notice: (/Stage[main]/Nova/File[/var/log/nova]/group) group changed 'root' to 'nova' -2013-02-07T09:57:42 notice: (/Stage[main]/Nova/File[/var/log/nova]/mode) mode changed '0755' to '0751' -2013-02-07T09:57:42 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_max_injected_file_path_bytes]/ensure) created -2013-02-07T09:57:42 notice: (/Stage[main]/Nova::Api/Nova_config[DEFAULT/api_paste_config]/ensure) created -2013-02-07T09:57:42 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_floating_ips]/ensure) created -2013-02-07T09:57:42 notice: (/Stage[main]/Openstack::Nova::Controller/Nova_config[DEFAULT/multi_host]/ensure) created -2013-02-07T09:57:42 notice: (/Stage[main]/Nova::Network::Flatdhcp/Nova_config[DEFAULT/public_interface]/ensure) created -2013-02-07T09:57:42 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/service_down_time]/ensure) created -2013-02-07T09:57:42 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/admin_tenant_name]/value) value changed '%SERVICE_TENANT_NAME%' to 'services' -2013-02-07T09:57:42 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_gigabytes]/ensure) created -2013-02-07T09:57:42 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_instances]/ensure) created -2013-02-07T09:57:42 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/osapi_volume_listen]/ensure) created -2013-02-07T09:57:42 notice: (/Stage[main]/Nova::Api/Nova_config[keystone_authtoken/signing_dir]/ensure) created -2013-02-07T09:57:42 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/metadata_listen]/ensure) created -2013-02-07T09:57:42 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/auth_strategy]/ensure) created -2013-02-07T09:57:42 notice: (/Stage[main]/Nova::Quota/Nova_config[DEFAULT/quota_metadata_items]/ensure) created -2013-02-07T09:57:42 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/rpc_backend]/value) value changed 'nova.openstack.common.rpc.impl_qpid' to 'nova.rpc.impl_kombu' -2013-02-07T09:57:42 notice: (/Stage[main]/Nova::Network::Flatdhcp/Nova_config[DEFAULT/fixed_range]/ensure) created -2013-02-07T09:57:42 notice: (/Stage[main]/Nova::Network::Flatdhcp/Nova_config[DEFAULT/dhcp_domain]/ensure) created -2013-02-07T09:57:42 notice: (/Stage[main]/Nova/Nova_config[DEFAULT/allow_resize_to_same_host]/ensure) created -2013-02-07T09:57:42 notice: (/Stage[main]/Nova::Network::Flatdhcp/Nova_config[DEFAULT/flat_injected]/ensure) created -2013-02-07T09:57:42 notice: (/Stage[main]/Nova/File[/etc/nova/nova.conf]/owner) owner changed 'root' to 'nova' -2013-02-07T09:57:42 notice: (/Stage[main]/Keystone/Keystone_config[DEFAULT/verbose]/ensure) created -2013-02-07T09:57:46 notice: (/Stage[main]/Keystone/Exec[keystone-manage db_sync]) Triggered 'refresh' from 12 events -2013-02-07T09:57:47 notice: (/Stage[main]/Keystone/Service[keystone]/ensure) ensure changed 'stopped' to 'running' -2013-02-07T09:57:47 notice: (/Stage[main]/Keystone/Service[keystone]) Triggered 'refresh' from 13 events -2013-02-07T09:57:59 notice: (/Stage[main]/Nova::Keystone::Auth/Keystone_service[nova_volume]/ensure) created -2013-02-07T09:57:59 notice: (/Stage[main]/Keystone::Roles::Admin/Keystone_tenant[admin]/ensure) created -2013-02-07T09:57:59 notice: (/Stage[main]/Keystone::Roles::Admin/Keystone_role[Member]/ensure) created -2013-02-07T09:58:00 notice: (/Stage[main]/Nova::Keystone::Auth/Keystone_service[nova_ec2]/ensure) created -2013-02-07T09:58:00 notice: (/Stage[main]/Nova::Keystone::Auth/Keystone_endpoint[nova_volume]/ensure) created -2013-02-07T09:58:00 notice: (/Stage[main]/Nova::Keystone::Auth/Keystone_endpoint[nova_ec2]/ensure) created -2013-02-07T09:58:01 notice: (/Stage[main]/Keystone::Roles::Admin/Keystone_tenant[services]/ensure) created -2013-02-07T09:58:01 notice: (/Stage[main]/Nova::Keystone::Auth/Keystone_user[nova]/ensure) created -2013-02-07T09:58:02 notice: (/Stage[main]/Glance::Keystone::Auth/Keystone_user[glance]/ensure) created -2013-02-07T09:58:02 notice: (/Stage[main]/Keystone::Roles::Admin/Keystone_role[admin]/ensure) created -2013-02-07T09:58:04 notice: (/Stage[main]/Glance::Keystone::Auth/Keystone_user_role[glance@services]/ensure) created -2013-02-07T09:58:05 notice: (/Stage[main]/Keystone::Endpoint/Keystone_service[keystone]/ensure) created -2013-02-07T09:58:05 notice: (/Stage[main]/Keystone::Endpoint/Keystone_endpoint[keystone]/ensure) created -2013-02-07T09:58:05 notice: (/Stage[main]/Glance::Keystone::Auth/Keystone_service[glance]/ensure) created -2013-02-07T09:58:05 notice: (/Stage[main]/Glance::Keystone::Auth/Keystone_endpoint[glance]/ensure) created -2013-02-07T09:58:06 notice: (/Stage[main]/Nova::Keystone::Auth/Keystone_user_role[nova@services]/ensure) created -2013-02-07T09:58:07 notice: (/Stage[main]/Keystone::Roles::Admin/Keystone_user[admin]/ensure) created -2013-02-07T09:58:07 notice: (/Stage[main]/Keystone::Roles::Admin/Keystone_user_role[admin@admin]/ensure) created -2013-02-07T09:58:08 notice: (/Stage[main]/Nova::Keystone::Auth/Keystone_service[nova]/ensure) created -2013-02-07T09:58:08 notice: (/Stage[main]/Nova::Keystone::Auth/Keystone_endpoint[nova]/ensure) created -2013-02-07T09:58:08 notice: (/Stage[main]/Glance::Api/Glance_cache_config[DEFAULT/auth_url]/ensure) created -2013-02-07T09:58:22 notice: (/Stage[main]/Glance::Registry/Exec[glance-manage db_sync]) Triggered 'refresh' from 30 events -2013-02-07T09:58:22 notice: (/Stage[main]/Glance::Registry/Service[glance-registry]/ensure) ensure changed 'stopped' to 'running' -2013-02-07T09:58:22 notice: (/Stage[main]/Glance::Registry/Service[glance-registry]) Triggered 'refresh' from 11 events -2013-02-07T09:58:24 notice: (/Stage[main]/Glance::Api/Service[glance-api]/ensure) ensure changed 'stopped' to 'running' -2013-02-07T09:58:24 notice: (/Stage[main]/Glance::Api/Service[glance-api]) Triggered 'refresh' from 21 events -2013-02-07T09:58:27 notice: (/Stage[main]/Openstack::Img::Cirros/Package[cirros-testvm]/ensure) created -2013-02-07T09:58:29 notice: (/Stage[main]/Openstack::Img::Cirros/Exec[upload-img]/returns) Added new image with ID: 71bfad1f-74d4-4b6f-8b08-605bc3e782c7 -2013-02-07T09:58:29 notice: (/Stage[main]/Openstack::Img::Cirros/Exec[upload-img]/returns) executed successfully -2013-02-07T09:58:30 notice: (/Stage[main]/Nova/Exec[post-nova_config]/returns) Nova config has changed -2013-02-07T09:58:30 notice: (/Stage[main]/Nova/Exec[post-nova_config]) Triggered 'refresh' from 92 events -2013-02-07T09:59:20 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]/returns) 2013-02-07 09:58:30 DEBUG nova.utils [-] backend from (pid=6121) __get_backend /usr/lib/python2.6/site-packages/nova/utils.py:494 -2013-02-07T09:59:20 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]/returns) executed successfully -2013-02-07T09:59:21 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]/returns) 2013-02-07 09:59:21 DEBUG nova.utils [-] backend from (pid=6191) __get_backend /usr/lib/python2.6/site-packages/nova/utils.py:494 -2013-02-07T09:59:21 notice: (/Stage[main]/Nova::Api/Exec[nova-db-sync]) Triggered 'refresh' from 2 events -2013-02-07T09:59:21 notice: (/Stage[main]/Nova::Cert/Nova::Generic_service[cert]/Service[nova-cert]/ensure) ensure changed 'stopped' to 'running' -2013-02-07T09:59:22 notice: (/Stage[main]/Nova::Cert/Nova::Generic_service[cert]/Service[nova-cert]) Triggered 'refresh' from 3 events -2013-02-07T09:59:22 notice: (/Stage[main]/Nova::Vncproxy/Nova::Generic_service[vncproxy]/Service[nova-vncproxy]/ensure) ensure changed 'stopped' to 'running' -2013-02-07T09:59:22 notice: (/Stage[main]/Nova::Vncproxy/Nova::Generic_service[vncproxy]/Service[nova-vncproxy]) Triggered 'refresh' from 4 events -2013-02-07T09:59:23 notice: (/Stage[main]/Nova::Objectstore/Nova::Generic_service[objectstore]/Service[nova-objectstore]/ensure) ensure changed 'stopped' to 'running' -2013-02-07T09:59:24 notice: (/Stage[main]/Nova::Objectstore/Nova::Generic_service[objectstore]/Service[nova-objectstore]) Triggered 'refresh' from 3 events -2013-02-07T09:59:26 notice: (/Stage[main]/Nova::Network/Nova::Manage::Floating[nova-vm-floating]/Nova_floating[nova-vm-floating]/ensure) created -2013-02-07T09:59:26 notice: (/Stage[main]/Nova::Consoleauth/Nova::Generic_service[consoleauth]/Service[nova-consoleauth]/ensure) ensure changed 'stopped' to 'running' -2013-02-07T09:59:27 notice: (/Stage[main]/Nova::Consoleauth/Nova::Generic_service[consoleauth]/Service[nova-consoleauth]) Triggered 'refresh' from 4 events -2013-02-07T09:59:27 notice: (/Stage[main]/Nova::Api/Nova::Generic_service[api]/Service[nova-api]/ensure) ensure changed 'stopped' to 'running' -2013-02-07T09:59:27 notice: (/Stage[main]/Nova::Api/Nova::Generic_service[api]/Service[nova-api]) Triggered 'refresh' from 50 events -2013-02-07T09:59:28 notice: (/Stage[main]/Nova::Scheduler/Nova::Generic_service[scheduler]/Service[nova-scheduler]/ensure) ensure changed 'stopped' to 'running' -2013-02-07T09:59:28 notice: (/Stage[main]/Nova::Scheduler/Nova::Generic_service[scheduler]/Service[nova-scheduler]) Triggered 'refresh' from 3 events -2013-02-07T09:59:31 notice: (/Stage[main]/Nova::Network/Nova::Manage::Network[nova-vm-net]/Nova_network[nova-vm-net]/ensure) created -2013-02-07T09:59:31 notice: Finished catalog run in 674.93 seconds diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb deleted file mode 100644 index 1982879c..00000000 --- a/spec/spec_helper.rb +++ /dev/null @@ -1,94 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require 'simplecov' -require 'simplecov-rcov' -SimpleCov.formatter = SimpleCov::Formatter::RcovFormatter -SimpleCov.start - -require 'tempfile' -require 'tmpdir' -require 'fileutils' -require 'date' -require 'yaml' -require 'rspec' - -lib_dir = File.join File.dirname(__FILE__), '../lib' -lib_dir = File.absolute_path File.expand_path lib_dir -$LOAD_PATH << lib_dir - -require 'astute' -require 'fuel_deployment' - -Deployment::Log.logger.level = Logger::DEBUG - -# NOTE(mihgen): I hate to wait for unit tests to complete, -# resetting time to sleep significantly increases tests speed -Astute.config.puppet_deploy_interval = 0 -Astute.config.puppet_fade_interval = 0 -Astute.config.puppet_fade_timeout = 1 -Astute.config.mc_retry_interval = 0 -Astute.config.provisioning_timeout = 0 -Astute.config.reboot_timeout = 0 -Astute.config.ssh_retry_timeout = 0 -Astute.config.nodes_remove_interval = 0 -Astute.logger = Logger.new(STDERR) - -RSpec.configure do |c| - c.mock_with :mocha -end - -module SpecHelpers - def mock_rpcclient(discover_nodes=nil, timeout=nil) - rpcclient = mock('rpcclient') do - stubs(:progress=) - unless timeout.nil? - expects(:timeout=).with(timeout) - else - stubs(:timeout=) - end - - if discover_nodes.nil? - stubs(:discover) - else - expects(:discover).with(:nodes => discover_nodes.map { |x| x['uid'].to_s }).at_least_once - end - end - Astute::MClient.any_instance.stubs(:rpcclient).returns(rpcclient) - rpcclient - end - - def mock_mc_result(result={}) - mc_res = {:statuscode => 0, :data => {}, :sender => '1'} - mc_res.merge!(result) - mock('mc_result') do - stubs(:results).returns(mc_res) - stubs(:agent).returns('mc_stubbed_agent') - end - end - - def mock_ctx(parser=nil) - parser ||= Astute::LogParser::NoParsing.new - ctx = mock - ctx.stubs(:task_id) - ctx.stubs(:deploy_log_parser).returns(parser) - reporter = mock() do - stubs(:report) - end - ctx.stubs(:reporter).returns(reporter) - - ctx - end - -end diff --git a/spec/unit/cobbler_manager_spec.rb b/spec/unit/cobbler_manager_spec.rb deleted file mode 100644 index c30997ef..00000000 --- a/spec/unit/cobbler_manager_spec.rb +++ /dev/null @@ -1,312 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require File.join(File.dirname(__FILE__), '../spec_helper') - -describe Astute::CobblerManager do - include SpecHelpers - - let(:data) do - { - "engine"=>{ - "url"=>"http://localhost/cobbler_api", - "username"=>"cobbler", - "password"=>"cobbler", - "master_ip"=>"127.0.0.1", - }, - "task_uuid"=>"a5c44b9a-285a-4a0c-ae65-2ed6b3d250f4", - "nodes" => [ - { - 'uid' => '1', - 'profile' => 'centos-x86_64', - "slave_name"=>"controller-1", - "admin_ip" =>'1.2.3.5', - 'power_type' => 'ssh', - 'power_user' => 'root', - 'power_pass' => '/root/.ssh/bootstrap.rsa', - 'power-address' => '1.2.3.5', - 'hostname' => 'name.domain.tld', - 'name_servers' => '1.2.3.4 1.2.3.100', - 'name_servers_search' => 'some.domain.tld domain.tld', - 'netboot_enabled' => '1', - 'ks_meta' => { - 'repo_setup' => { - 'repos' => [ - { - "type" => "deb", - "name" => "repo1", - "uri" => "ip_address:port/patch", - "suite" => "param1", - "section" => "param2", - "priority" => 1001 - }, - { - "type" => "rpm", - "name" => "repo2", - "uri" => "ip_address:port/patch", - "priority" => 1 - } - ] - } - }, - 'interfaces' => { - 'eth0' => { - 'mac_address' => '00:00:00:00:00:00', - 'static' => '1', - 'netmask' => '255.255.255.0', - 'ip_address' => '1.2.3.5', - 'dns_name' => 'node.mirantis.net', - }, - 'eth1' => { - 'mac_address' => '00:00:00:00:00:01', - 'static' => '0', - 'netmask' => '255.255.255.0', - 'ip_address' => '1.2.3.6', - } - }, - 'interfaces_extra' => { - 'eth0' => { - 'peerdns' => 'no', - 'onboot' => 'yes', - }, - 'eth1' => { - 'peerdns' => 'no', - 'onboot' => 'yes', - } - } - } - ] - } - end - - let(:reporter) do - reporter = mock('reporter') - reporter.stub_everything - reporter - end - - let(:engine) do - cobbler = mock('cobbler') - cobbler.stub_everything - cobbler - end - - before(:each) do - Astute::Provision::Cobbler.stubs(:new).returns(engine) - end - - let(:cobbler_manager) { Astute::CobblerManager.new(data['engine'], reporter) } - - describe '#add_nodes' do - before(:each) do - cobbler_manager.stubs(:sleep) - end - - it 'should sync engine status after end' do - engine.stubs(:item_from_hash) - cobbler_manager.expects(:sync).once - - cobbler_manager.add_nodes(data['nodes']) - end - - end #'add_nodes' - - describe '#edit_nodes' do - before(:each) do - cobbler_manager.stubs(:sleep) - end - - it 'should edit nodes' do - cobbler_manager.stubs(:sync) - engine.expects(:item_from_hash).with( - 'system', - 'controller-1', - {'profile' => Astute.config.bootstrap_profile}, - :item_preremove => false) - - cobbler_manager.edit_nodes( - data['nodes'], - {'profile' => Astute.config.bootstrap_profile} - ) - end - - it 'should sync at the end of the call' do - engine.stubs(:item_from_hash) - cobbler_manager.expects(:sync) - - cobbler_manager.edit_nodes( - data['nodes'], - {'profile' => Astute.config.bootstrap_profile} - ) - end - - it 'should sync after an error' do - engine.stubs(:item_from_hash).raises(RuntimeError) - cobbler_manager.expects(:sync) - - expect{ cobbler_manager.edit_nodes( - data['nodes'], - {'profile' => Astute.config.bootstrap_profile} - )}.to raise_error(RuntimeError) - end - - end #'edit_nodes' - - describe '#remove_nodes' do - nodes = [ - {"slave_name" => "node-1"}, - {"slave_name" => "node-2"}, - {"slave_name" => "node-3"}, - ] - system_exists_return_seq = [true, false, true, false, true, false] - system_remove_with_seq = ["node-1", "node-2", "node-3"] - before(:each) do - cobbler_manager.stubs(:sleep) - end - it 'should try to remove nodes using cobbler engine' do - engine.stubs(:system_exists?).returns(*system_exists_return_seq) - engine.expects(:remove_system).returns(true).times(3) - engine.expects(:sync).once - cobbler_manager.remove_nodes(nodes) - end - it 'should try to remove nodes three times before giving up' do - engine.stubs(:system_exists?).returns(true) - engine.expects(:remove_system).times(9) - engine.expects(:sync).once - cobbler_manager.remove_nodes(nodes) - end - it 'should not try to remove nodes if they do not exist' do - engine.stubs(:system_exists?).returns(false) - engine.expects(:remove_system).never - engine.expects(:sync).once - cobbler_manager.remove_nodes(nodes) - end - it 'should try to remove uniq list of nodes' do - nodes << {"slave_name" => "node-1"} - engine.stubs(:system_exists?).returns(*system_exists_return_seq) - engine.expects(:remove_system).times(3) - engine.expects(:sync).once - cobbler_manager.remove_nodes(nodes) - end - end - - describe '#reboot_nodes' do - before(:each) do - cobbler_manager.stubs(:sleep) - end - - it 'should reboot nodes' do - engine.expects(:power_reboot) - - cobbler_manager.reboot_nodes(data['nodes']) - end - - context 'splay' do - around(:each) do |example| - old_iops_value = Astute.config.iops - old_splay_factor_value = Astute.config.splay_factor - example.run - Astute.config.iops = old_iops_value - Astute.config.splay_factor = old_splay_factor_value - end - - it 'should delay between nodes reboot' do - engine.stubs(:power_reboot) - - cobbler_manager.expects(:calculate_splay_between_nodes).returns(5).once - cobbler_manager.expects(:sleep).with(5).once - - cobbler_manager.reboot_nodes(data['nodes']) - end - - it 'use formula (node + 1) / iops * splay_factor / node' do - Astute.config.iops = 100 - Astute.config.splay_factor = 100 - - engine.stubs(:power_reboot) - cobbler_manager.expects(:sleep).with(2.0).once - - cobbler_manager.reboot_nodes(data['nodes']) - end - end #'splay' - - end #'reboot_nodes' - - describe '#netboot_nodes' do - it 'should netboot nodes' do - cobbler_manager.stubs(:sync) - engine.expects(:netboot).with('controller-1', false) - - cobbler_manager.netboot_nodes(data['nodes'], false) - end - - it 'should sync at the end of the call' do - engine.stubs(:netboot) - cobbler_manager.expects(:sync) - - cobbler_manager.netboot_nodes(data['nodes'], false) - end - - it 'should sync after an error' do - engine.stubs(:netboot).raises(RuntimeError) - cobbler_manager.expects(:sync) - - expect{cobbler_manager.netboot_nodes(data['nodes'], false)} - .to raise_error(RuntimeError) - end - end #'edit_nodes' - - describe '#get_existent_nodes' do - it 'should return existent nodes' do - engine.expects(:system_exists?).with('controller-1').returns(true) - - expect(cobbler_manager.get_existent_nodes(data['nodes'])) - .to eql(data['nodes']) - end - - it 'should not return non existent nodes' do - engine.expects(:system_exists?).with('controller-1').returns(false) - - expect(cobbler_manager.get_existent_nodes(data['nodes'])) - .to eql([]) - end - end #'get_existent_nodes' - - describe '#get_mac_duplicate_names' do - it 'should return cobbler names of those systems that have at least one matching mac address' do - engine.expects(:system_by_mac).with('00:00:00:00:00:00').returns({'name' => 'node-XXX'}) - engine.expects(:system_by_mac).with('00:00:00:00:00:01').returns(nil) - - expect(cobbler_manager.get_mac_duplicate_names(data['nodes'])) - .to eql(['node-XXX']) - end - - it 'should return uniq list of cobbler names of those systems that have matching mac addresses' do - engine.expects(:system_by_mac).with('00:00:00:00:00:00').returns({'name' => 'node-XXX'}) - engine.expects(:system_by_mac).with('00:00:00:00:00:01').returns({'name' => 'node-XXX'}) - - expect(cobbler_manager.get_mac_duplicate_names(data['nodes'])) - .to eql(['node-XXX']) - end - - it 'should not return nodes that have not matching mac addresses' do - engine.expects(:system_by_mac).with('00:00:00:00:00:00').returns(nil) - engine.expects(:system_by_mac).with('00:00:00:00:00:01').returns(nil) - - expect(cobbler_manager.get_mac_duplicate_names(data['nodes'])) - .to eql([]) - end - end #'get_existent_nodes' - -end diff --git a/spec/unit/cobbler_spec.rb b/spec/unit/cobbler_spec.rb deleted file mode 100644 index 53755279..00000000 --- a/spec/unit/cobbler_spec.rb +++ /dev/null @@ -1,459 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -require File.join(File.dirname(__FILE__), '../spec_helper') - -include Astute::Provision - -describe Cobbler do - include SpecHelpers - - it "should be able to be initialized with 'url'" do - host = "host.domain.tld" - port = "1234" - path = "/api" - username = 'user' - password = 'pass' - - remote = mock() - remote.expects(:timeout=) - tmp = XMLRPC::Client - XMLRPC::Client = mock() do - expects(:new).with(host, path, port).returns(remote) - end - Astute::Provision::Cobbler.new( - 'url' => "http://#{host}:#{port}#{path}", - 'username' => username, - 'password' => password - ) - XMLRPC::Client = tmp - end - - it "should be able to be initialized with 'host', 'port', 'path'" do - username = 'user' - password = 'pass' - host = "host.domain.tld" - path = "/api" - port = "1234" - remote = mock() - remote.expects(:timeout=) - tmp = XMLRPC::Client - XMLRPC::Client = mock() do - expects(:new).with(host, path, port).returns(remote) - end - Astute::Provision::Cobbler.new( - 'host' => host, - 'port' => port, - 'path' => path, - 'username' => username, - 'password' => password - ) - XMLRPC::Client = tmp - end - - context "cobbler methods" do - before(:each) do - remote = mock() do - stubs(:timeout=) - stubs(:call) - stubs(:call).with('login', 'cobbler', 'cobbler').returns('remotetoken') - end - @tmp = XMLRPC::Client - XMLRPC::Client = mock() do - stubs(:new).returns(remote) - end - end - - let(:data) do - { - 'profile' => 'centos-x86_64', - 'power_type' => 'ssh', - 'power_user' => 'root', - 'power_pass' => '/root/.ssh/bootstrap.rsa', - 'power-address' => '1.2.3.5', - 'hostname' => 'name.domain.tld', - 'name_servers' => '1.2.3.4 1.2.3.100', - 'name_servers_search' => 'some.domain.tld domain.tld', - 'netboot_enabled' => '1', - 'ks_meta' => 'some_param=1 another_param=2', - 'interfaces' => { - 'eth0' => { - 'mac_address' => '00:00:00:00:00:00', - 'static' => '1', - 'netmask' => '255.255.255.0', - 'ip_address' => '1.2.3.5', - 'dns_name' => 'node.mirantis.net', - }, - 'eth1' => { - 'mac_address' => '00:00:00:00:00:01', - 'static' => '0', - 'netmask' => '255.255.255.0', - 'ip_address' => '1.2.3.6', - } - }, - 'interfaces_extra' => { - 'eth0' => { - 'peerdns' => 'no', - 'onboot' => 'yes', - }, - 'eth1' => { - 'peerdns' => 'no', - 'onboot' => 'yes', - } - } - } - end - - after(:each) do - XMLRPC::Client = @tmp - end - - it "item_from_hash should remove item if 'item_preremove' is true" do - Astute::Provision::Cobbler.any_instance do - expects(:remove_item).with('system', 'name') - end - cobbler = Astute::Provision::Cobbler.new - cobbler.item_from_hash('system', 'name', {}, :item_preremove => true) - end - - it "item_from_hash should create new item if it does not exist" do - cobbler = Astute::Provision::Cobbler.new - cobbler.remote.expects(:call).with('has_item', 'system', 'name').returns(false) - cobbler.remote.expects(:call).with('new_item', 'system', cobbler.token).returns('itemid') - cobbler.remote.expects(:call).with('modify_item', 'system', 'itemid', 'name', 'name', cobbler.token) - cobbler.item_from_hash('system', 'name', {}, :item_preremove => true) - end - - it "item_from_hash should modify existent item if it does exist" do - cobbler = Astute::Provision::Cobbler.new - cobbler.remote.expects(:call).with('has_item', 'system', 'name').returns(true) - cobbler.remote.expects(:call).with('get_item_handle', 'system', 'name', cobbler.token).returns('itemid') - cobbler.item_from_hash('system', 'name', {}, :item_preremove => false) - end - - it "item_from_hash should modify item with cobblerized data" do - cobblerized_data = Astute::Provision::Cobsh.new(data.merge({'what' => 'system', 'name' => 'name'})).cobblerized - cobbler = Astute::Provision::Cobbler.new - cobbler.stubs(:get_item_id).with('system', 'name').returns('itemid') - cobblerized_data.each do |opt, value| - next if opt == 'interfaces' - cobbler.remote.expects(:call).with( - 'modify_item', - 'system', - 'itemid', - opt, - value, - 'remotetoken' - ) - end - cobbler.item_from_hash('system', 'name', data, :item_preremove => true) - end - - it "item_from_hash should modify 'system' interfaces with cobblerized['interfaces']" do - cobblerized_data = Astute::Provision::Cobsh.new(data.merge({'what' => 'system', 'name' => 'name'})).cobblerized - cobbler = Astute::Provision::Cobbler.new - cobbler.stubs(:get_item_id).with('system', 'name').returns('itemid') - cobbler.remote.expects(:call).with( - 'modify_system', - 'itemid', - 'modify_interface', - cobblerized_data['interfaces'], - 'remotetoken') - cobbler.item_from_hash('system', 'name', data, :item_preremove => true) - end - - it 'should generate token in every cobbler call where token need' do - remote = mock() do - stubs(:timeout=) - stubs(:call).twice.with('sync', 'remotetoken') - expects(:call).twice.with('login', 'cobbler', 'cobbler').returns('remotetoken') - end - XMLRPC::Client = mock() do - stubs(:new).returns(remote) - end - cobbler = Astute::Provision::Cobbler.new - cobbler.sync - cobbler.sync - end - - it 'items_by_criteria should return list of nodes that match passed criteria' do - cobbler = Astute::Provision::Cobbler.new - cobbler.remote.expects(:call).with('find_items', 'system', {'mac_address' => '00:00:00:00:00:00'}) - .returns([{'name' => 'node-XXX'}]) - expect(cobbler.items_by_criteria('system', {'mac_address' => '00:00:00:00:00:00'})).to eql([{'name' => 'node-XXX'}]) - end - - it 'system_by_mac should return node that match passed mac address' do - cobbler = Astute::Provision::Cobbler.new - cobbler.stubs(:items_by_criteria).with('system', {'mac_address' => '00:00:00:00:00:00'}) - .returns([{'name' => 'node-XXX'}]) - expect(cobbler.system_by_mac('00:00:00:00:00:00')).to eql({'name' => 'node-XXX'}) - end - - it 'should try sync several time before raise a exception (Net)' do - remote = mock() do - stubs(:timeout=) - stubs(:call).with('sync', 'remotetoken') - .raises(Net::ReadTimeout) - .then.returns(nil) - stubs(:call).twice.with('login', 'cobbler', 'cobbler').returns('remotetoken') - end - XMLRPC::Client = mock() do - stubs(:new).returns(remote) - end - cobbler = Astute::Provision::Cobbler.new - cobbler.stubs(:sleep).with(10).times(1) - - expect { cobbler.sync }.not_to raise_exception(Net::ReadTimeout) - end - - it 'should try sync several time before raise a exception (XMLRPC)' do - remote = mock() do - stubs(:timeout=) - stubs(:call).with('sync', 'remotetoken') - .raises(XMLRPC::FaultException.new("", "")) - .then.returns(nil) - stubs(:call).twice.with('login', 'cobbler', 'cobbler').returns('remotetoken') - end - XMLRPC::Client = mock() do - stubs(:new).returns(remote) - end - cobbler = Astute::Provision::Cobbler.new - cobbler.stubs(:sleep).with(10).times(1) - - expect { cobbler.sync }.not_to raise_exception(XMLRPC::FaultException) - end - - it 'should raise a exception if sync do not succeed after several(3) tries' do - remote = mock() do - stubs(:timeout=) - stubs(:call).with('sync', 'remotetoken') - .raises(Net::ReadTimeout) - .then.raises(Net::ReadTimeout) - .then.raises(Net::ReadTimeout) - stubs(:call).times(3).with('login', 'cobbler', 'cobbler').returns('remotetoken') - end - XMLRPC::Client = mock() do - stubs(:new).returns(remote) - end - cobbler = Astute::Provision::Cobbler.new - cobbler.stubs(:sleep).with(10).times(2) - - expect { cobbler.sync }.to raise_exception(Net::ReadTimeout) - end - - end -end - - - -describe Cobsh do - before(:each) do - - @aliases = { - 'ks_meta' => ['ksmeta'], - 'mac_address' => ['mac'], - 'ip_address' => ['ip'], - } - - @fields = { - 'system' => { - 'fields' => [ - 'name', 'owners', 'profile', 'image', 'status', 'kernel_options', - 'kernel_options_post', 'ks_meta', 'enable_gpxe', 'proxy', - 'netboot_enabled', 'kickstart', 'comment', 'server', - 'virt_path', 'virt_type', 'virt_cpus', 'virt_file_size', - 'virt_disk_driver', 'virt_ram', 'virt_auto_boot', 'power_type', - 'power_address', 'power_user', 'power_pass', 'power_id', - 'hostname', 'gateway', 'name_servers', 'name_servers_search', - 'ipv6_default_device', 'ipv6_autoconfiguration', 'mgmt_classes', - 'mgmt_parameters', 'boot_files', 'fetchable_files', - 'template_files', 'redhat_management_key', 'redhat_management_server', - 'repos_enabled', 'ldap_enabled', 'ldap_type', 'monit_enabled', - ], - 'interfaces_fields' => [ - 'mac_address', 'mtu', 'ip_address', 'interface_type', - 'interface_master', 'bonding_opts', 'bridge_opts', - 'management', 'static', 'netmask', 'dhcp_tag', 'dns_name', - 'static_routes', 'virt_bridge', 'ipv6_address', 'ipv6_secondaries', - 'ipv6_mtu', 'ipv6_static_routes', 'ipv6_default_gateway' - ], - 'special' => ['interfaces', 'interfaces_extra'] - }, - 'profile' => { - 'fields' => [ - 'name', 'owners', 'distro', 'parent', 'enable_gpxe', - 'enable_menu', 'kickstart', 'kernel_options', 'kernel_options_post', - 'ks_meta', 'proxy', 'repos', 'comment', 'virt_auto_boot', - 'virt_cpus', 'virt_file_size', 'virt_disk_driver', - 'virt_ram', 'virt_type', 'virt_path', 'virt_bridge', - 'dhcp_tag', 'server', 'name_servers', 'name_servers_search', - 'mgmt_classes', 'mgmt_parameters', 'boot_files', 'fetchable_files', - 'template_files', 'redhat_management_key', 'redhat_management_server' - ] - }, - 'distro' => { - 'fields' => ['name', 'owners', 'kernel', 'initrd', 'kernel_options', - 'kernel_options_post', 'ks_meta', 'arch', 'breed', - 'os_version', 'comment', 'mgmt_classes', 'boot_files', - 'fetchable_files', 'template_files', 'redhat_management_key', - 'redhat_management_server'] - } - } - - @minimal_data = { - 'what' => 'system', - 'name' => 'name', - } - - end - - it "should raise exception when init data do not contain 'what'" do - expect { - Astute::Provision::Cobsh.new({'what'=>'system'}) - }.to raise_exception(/Cobbler hash must have 'name' key/) - end - - it "should raise exception when init data do not contain 'name'" do - expect { - Astute::Provision::Cobsh.new({'name'=>'name'}) - }.to raise_exception(/Cobbler hash must have 'what' key/) - end - - it "should raise exception when init data 'what' is not supported" do - expect { - Astute::Provision::Cobsh.new({ - 'what' => 'unsupported', - 'name'=>'name' - }) - }.to raise_exception(/Unsupported 'what' value/) - end - - it "should replace '-' into '_' in init data keys" do - data = @minimal_data.merge({'power_id' => 'blabla'}) - expected = { - 'name' => data['name'], - 'power_id' => 'blabla' - } - Astute::Provision::Cobsh.new(data).cobblerized.should eql(expected) - end - - it "returns cobblerizied data with aliased keys" do - @fields.each do |what, what_data| - @aliases.each do |main_alias, alias_list| - data = {'name' => 'name'} - expected = {'name' => 'name'} - if what_data['fields'].include? main_alias - data['what'] = what - alias_list.each do |a| - data2 = data.merge({a => 'blabla'}) - expected2 = expected.merge({main_alias => 'blabla'}) - Astute::Provision::Cobsh.new(data2).cobblerized.should eql(expected2) - end - elsif what_data.has_key? 'interfaces_fields' and what_data['interfaces_fields'].include? main_alias - data['what'] = what - alias_list.each do |a| - data2 = data.merge({ - 'interfaces' => { - 'eth0' => {a => 'blabla'} - } - }) - expected2 = expected.merge({ - 'interfaces' => { - "#{main_alias}-eth0" => 'blabla' - } - }) - Astute::Provision::Cobsh.new(data2).cobblerized.should eql(expected2) - end - end - end - end - end - - it "should raise exception when keys are duplicated in init data" do - data = @minimal_data.merge({'ks-meta' => 'ks-meta', 'ksmeta' => 'ksmeta'}) - expect { - Astute::Provision::Cobsh.new(data).cobblerized - }.to raise_exception(/Wrong cobbler data: .* is duplicated/) - end - - it "should cut out 'system' unsupported keys" do - data = {'what' => 'system'} - expected = {} - @fields['system']['fields'].each do |f| - data[f] = f - expected[f] = f - end - @fields['system']['interfaces_fields'].each do |f| - data['interfaces'] = {'eth0' => {}} unless data.has_key? 'interfaces' - data['interfaces']['eth0'][f] = f - expected['interfaces'] = {} unless expected.has_key? 'interfaces' - expected['interfaces']["#{f}-eth0"] = f - end - data['unsupported'] = 'unsupported' - Astute::Provision::Cobsh.new(data).cobblerized.should eql(expected) - end - - it "should cut out 'profile' unsupported keys" do - data = {'what' => 'profile'} - expected = {} - @fields['profile']['fields'].each do |f| - data[f] = f - expected[f] = f - end - data['unsupported'] = 'unsupported' - Astute::Provision::Cobsh.new(data).cobblerized.should eql(expected) - end - - it "should cut out 'distro' unsupported keys" do - data = {'what' => 'distro'} - expected = {} - @fields['distro']['fields'].each do |f| - data[f] = f - expected[f] = f - end - data['unsupported'] = 'unsupported' - Astute::Provision::Cobsh.new(data).cobblerized.should eql(expected) - end - - it "should append extra interfaces data into ks_meta" do - RSpec::Matchers.define :ks_meta_equal? do |ks_meta| - match do |ks_meta_self| - equal = true - ks_meta_self.strip.split.each do |i| - equal = false unless ks_meta =~ /.*?#{i}.*?/ - end - ks_meta.strip.split.each do |i| - equal = false unless ks_meta_self =~ /.*?#{i}.*?/ - end - equal - end - end - - data = @minimal_data.merge({ - 'interfaces_extra' => { - 'eth0' => { - 'blabla' => 'blabla', - 'blabla2' => 'blabla2', - } - } - }) - expected_ks_meta = "interface_extra_eth0_blabla=blabla interface_extra_eth0_blabla2=blabla2" - Astute::Provision::Cobsh.new(data).cobblerized['ks_meta'].should ks_meta_equal?(expected_ks_meta) - end - -end - - diff --git a/spec/unit/common_actions/pacemaker_spec.rb b/spec/unit/common_actions/pacemaker_spec.rb deleted file mode 100644 index 3112588f..00000000 --- a/spec/unit/common_actions/pacemaker_spec.rb +++ /dev/null @@ -1,108 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require File.join(File.dirname(__FILE__), '../../spec_helper') - -describe Astute::Pacemaker do - include SpecHelpers - - let(:ctx) do - ctx = mock('context') - ctx.stubs(:task_id) - ctx.stubs(:reporter) - ctx.stubs(:status).returns('1' => 'success', '2' => 'success') - ctx - end - - let(:pacemaker) { Astute::Pacemaker } - - let(:deploy_data) { [ - {'uid' => '1', - 'role' => 'controller', - 'openstack_version_prev' => 'old_version', - 'deployment_mode' => 'ha_compact', - 'cobbler' => { - 'profile' => 'centos-x86_64' - }, - 'nodes' => [ - {'uid' => '1', 'role' => 'controller'}, - {'uid' => '2', 'role' => 'compute'} - ] - }, - {'uid' => '2', - 'role' => 'compute' - } - ] - } - - it 'should return empty array if deployment mode not HA' do - deploy_data.first['deployment_mode'] = 'simple' - expect(pacemaker.commands(behavior='stop', deploy_data)).to eql([]) - end - - it 'should return empty array if no controllers' do - deploy_data.first['role'] = 'cinder' - expect(pacemaker.commands(behavior='stop', deploy_data)).to eql([]) - end - - context 'controller < 3' do - it 'should return stop service commands for pacemaker' do - expect(pacemaker.commands(behavior='stop', deploy_data)).to eql( - ['crm resource stop openstack-heat-engine && sleep 3', - 'crm resource stop p_openstack-heat-engine && sleep 3']) - end - - it 'should return start service commands for HA pacemaker' do - expect(pacemaker.commands(behavior='start', deploy_data)).to eql( - ['crm resource start openstack-heat-engine && sleep 3', - 'crm resource start p_openstack-heat-engine && sleep 3']) - end - end - - context 'controller >= 3' do - - let(:ha_deploy_data) { - deploy_data.first['nodes'] = [ - {'uid' => '1', 'role' => 'controller'}, - {'uid' => '2', 'role' => 'compute'}, - {'uid' => '3', 'role' => 'primary-controller'}, - {'uid' => '4', 'role' => 'controller'}, - ] - deploy_data - } - - it 'should return stop service commands for pacemaker' do - expect(pacemaker.commands(behavior='stop', ha_deploy_data)).to eql( - ['pcs resource ban openstack-heat-engine `crm_node -n` && sleep 3', - 'pcs resource ban p_openstack-heat-engine `crm_node -n` && sleep 3']) - end - - it 'should return start service commands for pacemaker' do - expect(pacemaker.commands(behavior='start', ha_deploy_data)).to eql( - ['pcs resource clear openstack-heat-engine `crm_node -n` && sleep 3', - 'pcs resource clear p_openstack-heat-engine `crm_node -n` && sleep 3']) - end - end - - it 'should return quantum service commands if quantum enable' do - deploy_data.first['quantum'] = [] - expect(pacemaker.commands(behavior='stop', deploy_data).size).to eql(6) - end - - it 'should return ceilometer service commands if ceilometer enable' do - deploy_data.first['ceilometer'] = { 'enabled' => true } - expect(pacemaker.commands(behavior='stop', deploy_data).size).to eql(4) - end - -end \ No newline at end of file diff --git a/spec/unit/deploy_actions_spec.rb b/spec/unit/deploy_actions_spec.rb deleted file mode 100644 index dd4f3c8c..00000000 --- a/spec/unit/deploy_actions_spec.rb +++ /dev/null @@ -1,150 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require File.join(File.dirname(__FILE__), '../spec_helper') - -describe Astute::PostDeploymentActions do - include SpecHelpers - - let(:deploy_data) {[]} - let(:ctx) { mock } - let(:post_deployment_actions) { Astute::PostDeploymentActions.new(deploy_data, ctx) } - - it 'should run post hooks' do - Astute::UpdateNoQuorumPolicy.any_instance.expects(:process) - .with(deploy_data, ctx) - Astute::UploadCirrosImage.any_instance.expects(:process) - .with(deploy_data, ctx) - Astute::RestartRadosgw.any_instance.expects(:process) - .with(deploy_data, ctx) - Astute::UpdateClusterHostsInfo.any_instance.expects(:process) - .with(deploy_data, ctx) - - post_deployment_actions.process - end -end - -describe Astute::PreDeploymentActions do - include SpecHelpers - - let(:deploy_data) {[]} - let(:ctx) { mock } - let(:pre_deployment_actions) { Astute::PreDeploymentActions.new(deploy_data, ctx) } - - it 'should run post hooks' do - Astute::EnablePuppetDeploy.any_instance.expects(:process) - .with(deploy_data, ctx) - Astute::GenerateSshKeys.any_instance.expects(:process) - .with(deploy_data, ctx) - Astute::GenerateKeys.any_instance.expects(:process) - .with(deploy_data, ctx) - Astute::SyncPuppetStuff.any_instance.expects(:process) - .with(deploy_data, ctx) - Astute::SyncTime.any_instance.expects(:process) - .with(deploy_data, ctx) - Astute::UpdateRepoSources.any_instance.expects(:process) - .with(deploy_data, ctx) - Astute::UploadSshKeys.any_instance.expects(:process) - .with(deploy_data, ctx) - Astute::UploadKeys.any_instance.expects(:process) - .with(deploy_data, ctx) - Astute::SyncTasks.any_instance.expects(:process) - .with(deploy_data, ctx) - Astute::UploadFacts.any_instance.expects(:process) - .with(deploy_data, ctx) - Astute::InitialConnectFacts.any_instance.expects(:process) - .with(deploy_data, ctx) - - pre_deployment_actions.process - end -end - -describe Astute::PreDeployActions do - include SpecHelpers - - let(:deploy_data) {[]} - let(:ctx) { mock } - let(:pre_deploy_actions) { Astute::PreDeployActions.new(deploy_data, ctx) } - - it 'should run pre hooks' do - Astute::ConnectFacts.any_instance.expects(:process) - .with(deploy_data, ctx) - - pre_deploy_actions.process - end -end - -describe Astute::PreNodeActions do - include SpecHelpers - - let(:deploy_data) {[{'uid' => '1'}, {'uid' => '2'}]} - let(:ctx) { mock } - let(:pre_node_actions) { Astute::PreNodeActions.new(ctx) } - - it 'should pre node hooks' do - Astute::PrePatchingHa.any_instance.expects(:process) - .with(deploy_data, ctx) - Astute::StopOSTServices.any_instance.expects(:process) - .with(deploy_data, ctx) - Astute::PrePatching.any_instance.expects(:process) - .with(deploy_data, ctx) - - pre_node_actions.process(deploy_data) - end -end - -describe Astute::PreNodeActions do - include SpecHelpers - - let(:deploy_data1) {[{'uid' => '1'}, {'uid' => '2'}]} - let(:deploy_data2) {[{'uid' => '1'}]} - let(:ctx) { mock } - let(:pre_node_actions) { Astute::PreNodeActions.new(ctx) } - - it 'should process nodes sending first' do - Astute::PrePatching.any_instance.expects(:process) - .with(deploy_data1, ctx) - pre_node_actions.process(deploy_data1) - end - - it 'should not process repeated nodes' do - Astute::PrePatching.any_instance.expects(:process) - .with(deploy_data1, ctx) - pre_node_actions.process(deploy_data1) - Astute::PrePatching.any_instance.expects(:process).never - pre_node_actions.process(deploy_data2) - end - -end - -describe Astute::PostDeployAction do - include SpecHelpers - - let(:ctx) { mock_ctx } - let(:node_uids) { [1] } - let(:pda_example) { Astute::PostDeployAction.new } - - before(:each) { mock_rpcclient([{'uid' => 1}]) } - - it 'should not raise timeout error if mcollective runs out of the timeout' do - Astute::MClient.any_instance.stubs(:mc_send).raises(Astute::MClientTimeout) - expect(pda_example.run_shell_command(ctx, node_uids, "test command")).to eql({:data => {}}) - end - - it 'should not raise mcollective error if it occurred' do - Astute::MClient.any_instance.stubs(:mc_send).raises(Astute::MClientError) - expect(pda_example.run_shell_command(ctx, node_uids, "test command")).to eql({:data => {}}) - end - -end diff --git a/spec/unit/deployment_engine_spec.rb b/spec/unit/deployment_engine_spec.rb deleted file mode 100644 index a0da55cc..00000000 --- a/spec/unit/deployment_engine_spec.rb +++ /dev/null @@ -1,616 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require File.join(File.dirname(__FILE__), '../spec_helper') -require 'tmpdir' - -describe Astute::DeploymentEngine do - include SpecHelpers - - class Engine < Astute::DeploymentEngine; - - def pre_deployment_actions(deployment_info, pre_deployment) - end - - def pre_node_actions(part) - end - - def pre_deploy_actions(part) - end - - def post_deploy_actions(part) - end - - def post_deployment_actions(deployment_info, post_deployment) - end - end - - let(:ctx) do - tctx = mock_ctx - tctx.stubs(:status).returns({}) - tctx - end - - describe '#new' do - it 'should not be available to instantiation' do - expect { Astute::DeploymentEngine.new(ctx) }.to raise_exception(/Instantiation of this superclass is not allowed/) - end - - it 'should be available as superclass' do - expect(Engine.new(ctx)).to be_truthy - end - end - - let(:deployer) { Engine.new(ctx) } - - describe '#deploy' do - context 'hooks' do - - let(:nodes) { - [{'uid' => 1, 'priority' => 10}, {'uid' => 2, 'priority' => 0}, {'uid' => 1, 'priority' => 15}] - } - - let(:pre_deployment) { - [{ - "priority" => 100, - "type" => "upload_file", - "uids" => [1, 2], - "parameters" => {} - }] - } - - let(:post_deployment) { - [{ - "priority" => 100, - "type" => "puppet", - "uids" => [1, 2], - "parameters" => {} - }] - } - - before(:each) { deployer.stubs(:deploy_piece) } - - it 'should run pre deployment hooks run once for all cluster' do - deployer.expects(:pre_deployment_actions).with(nodes, []).once - - deployer.stubs(:remove_failed_nodes).returns([nodes, [], []]) - - deployer.deploy(nodes) - end - - it 'should run post deployment hooks run once for all cluster' do - deployer.expects(:post_deployment_actions).with(nodes, []).once - - deployer.stubs(:remove_failed_nodes).returns([nodes, [], []]) - - deployer.deploy(nodes) - end - - context 'hooks' do - it 'should run pre and post deployment nailgun hooks run once for all cluster' do - hook_order = sequence('hook_order') - - deployer.expects(:pre_deployment_actions).in_sequence(hook_order) - deployer.expects(:deploy_piece).in_sequence(hook_order) - deployer.expects(:post_deployment_actions).in_sequence(hook_order) - - deployer.stubs(:remove_failed_nodes).returns([nodes, [], []]) - - deployer.deploy(nodes, pre_deployment, post_deployment) - end - - it 'should not do additional update for node status if pre hooks failed' do - deployer.expects(:pre_deployment_actions).raises(Astute::DeploymentEngineError) - - ctx.expects(:report_and_update_status).never - - deployer.stubs(:remove_failed_nodes).returns([nodes, [], []]) - - expect {deployer.deploy(nodes, pre_deployment, post_deployment)}.to raise_error(Astute::DeploymentEngineError) - end - end - - end - - let(:mclient) do - mclient = mock_rpcclient - Astute::MClient.any_instance.stubs(:rpcclient).returns(mclient) - Astute::MClient.any_instance.stubs(:log_result).returns(mclient) - Astute::MClient.any_instance.stubs(:check_results_with_retries).returns(mclient) - mclient - end - - it 'deploy nodes by order' do - nodes = [{'uid' => 1, 'priority' => 10}, {'uid' => 2, 'priority' => 0}, {'uid' => 1, 'priority' => 15}] - - deployer.stubs(:remove_failed_nodes).returns([nodes, [], []]) - - deploy_order = sequence('deploy_order') - deployer.expects(:deploy_piece).with([{'uid' => 2, 'priority' => 0}]).in_sequence(deploy_order) - deployer.expects(:deploy_piece).with([{'uid' => 1, 'priority' => 10}]).in_sequence(deploy_order) - deployer.expects(:deploy_piece).with([{'uid' => 1, 'priority' => 15}]).in_sequence(deploy_order) - - deployer.deploy(nodes) - end - - it 'nodes with same priority should be deploy at parallel' do - nodes = [{'uid' => 1, 'priority' => 10}, {'uid' => 2, 'priority' => 0}, {'uid' => 3, 'priority' => 10}] - - deployer.stubs(:remove_failed_nodes).returns([nodes, [], []]) - - deployer.expects(:deploy_piece).with([{'uid' => 2, 'priority' => 0}]) - deployer.expects(:deploy_piece).with([{"uid"=>1, "priority"=>10}, {"uid"=>3, "priority"=>10}]) - - deployer.deploy(nodes) - end - - it 'node with several roles with same priority should not run at parallel' do - nodes = [ - {'uid' => 1, 'priority' => 10, 'role' => 'compute'}, - {'uid' => 2, 'priority' => 0, 'role' => 'primary-controller'}, - {'uid' => 1, 'priority' => 10, 'role' => 'cinder'} - ] - - deployer.stubs(:remove_failed_nodes).returns([nodes, [], []]) - - deployer.expects(:deploy_piece).with([{'uid' => 2, 'priority' => 0, 'role' => 'primary-controller'}]) - deployer.expects(:deploy_piece).with([{'uid' => 1, 'priority' => 10, 'role' => 'compute'}]) - deployer.expects(:deploy_piece).with([{'uid' => 1, 'priority' => 10, 'role' => 'cinder'}]) - - deployer.deploy(nodes) - end - - it 'node with several roles with same priority should not run at parallel, but different nodes should' do - nodes = [ - {'uid' => 1, 'priority' => 10, 'role' => 'compute'}, - {'uid' => 3, 'priority' => 10, 'role' => 'compute'}, - {'uid' => 2, 'priority' => 0, 'role' => 'primary-controller'}, - {'uid' => 1, 'priority' => 10, 'role' => 'cinder'} - ] - - deployer.stubs(:remove_failed_nodes).returns([nodes, [], []]) - - deployer.expects(:deploy_piece).with([{'uid' => 2, 'priority' => 0, 'role' => 'primary-controller'}]) - deployer.expects(:deploy_piece).with([ - {'uid' => 1, 'priority' => 10, 'role' => 'compute'}, - {'uid' => 3, 'priority' => 10, 'role' => 'compute'} - ]) - deployer.expects(:deploy_piece).with([{'uid' => 1, 'priority' => 10, 'role' => 'cinder'}]) - - deployer.deploy(nodes) - end - - - context 'critical node' do - - let(:ctx) { mock_ctx } - - it 'should stop deployment if critical node deployment fail' do - nodes = [ - {'uid' => '1', 'priority' => 20, 'role' => 'compute', 'fail_if_error' => false}, - {'uid' => '3', 'priority' => 20, 'role' => 'compute', 'fail_if_error' => false}, - {'uid' => '2', 'priority' => 10, 'role' => 'primary-controller', 'fail_if_error' => true}, - {'uid' => '1', 'priority' => 20, 'role' => 'cinder', 'fail_if_error' => false}, - {'uid' => '2', 'priority' => 5, 'role' => 'mongo', 'fail_if_error' => false} - ] - ctx.stubs(:status).returns({'2' => 'success'}).then.returns({'2' => 'error'}) - - deployer.expects(:deploy_piece).with([ - {'uid' => '2', - 'priority' => 5, - 'role' => 'mongo', - 'fail_if_error' => false}] - ) - deployer.expects(:deploy_piece).with([ - {'uid' => '2', - 'priority' => 10, - 'role' => 'primary-controller', - 'fail_if_error' => true}] - ) - - ctx.stubs(:report_and_update_status) - - deployer.stubs(:remove_failed_nodes).returns([nodes, [], []]) - - expect {deployer.deploy(nodes)}.to raise_error(Astute::DeploymentEngineError, "Deployment failed on nodes 2") - end - - it 'should not stop deployment if fail non-critical node' do - nodes = [ - {'uid' => '1', 'priority' => 20, 'role' => 'compute', 'fail_if_error' => false}, - {'uid' => '2', 'priority' => 10, 'role' => 'primary-controller', 'fail_if_error' => true}, - {'uid' => '1', 'priority' => 5, 'role' => 'mongo', 'fail_if_error' => false} - ] - - ctx.stubs(:status).returns({'1' => 'error'}) - .then.returns({'2' => 'success', '1' => 'error'}) - .then.returns({'1' => 'success', '2' => 'success' }) - - deployer.expects(:deploy_piece).with([ - {'uid' => '1', - 'priority' => 5, - 'role' => 'mongo', - 'fail_if_error' => false}] - ) - deployer.expects(:deploy_piece).with([ - {'uid' => '2', - 'priority' => 10, - 'role' => 'primary-controller', - 'fail_if_error' => true}] - ) - deployer.expects(:deploy_piece).with([ - {'uid' => '1', - 'priority' => 20, - 'role' => 'compute', - 'fail_if_error' => false}] - ) - - deployer.stubs(:remove_failed_nodes).returns([nodes, [], []]) - - deployer.deploy(nodes) - end - - it 'should not send status for all nodes after nodes group where critical node fail' do - nodes = [ - {'uid' => '1', 'priority' => 20, 'role' => 'compute', 'fail_if_error' => false}, - {'uid' => '3', 'priority' => 20, 'role' => 'compute', 'fail_if_error' => false}, - {'uid' => '2', 'priority' => 10, 'role' => 'primary-controller', 'fail_if_error' => true}, - {'uid' => '1', 'priority' => 20, 'role' => 'cinder', 'fail_if_error' => false}, - {'uid' => '2', 'priority' => 5, 'role' => 'mongo', 'fail_if_error' => false} - ] - ctx.stubs(:status).returns({'2' => 'success'}).then.returns({'2' => 'error'}) - - deployer.stubs(:deploy_piece).twice - - ctx.expects(:report_and_update_status).never - - deployer.stubs(:remove_failed_nodes).returns([nodes, [], []]) - - expect {deployer.deploy(nodes)}.to raise_error(Astute::DeploymentEngineError) - end - - it 'should not affect parallel nodes in same running group' do - nodes = [ - {'uid' => '1', 'priority' => 20, 'role' => 'compute', 'fail_if_error' => false}, - {'uid' => '3', 'priority' => 20, 'role' => 'compute', 'fail_if_error' => false}, - {'uid' => '2', 'priority' => 10, 'role' => 'primary-controller', 'fail_if_error' => true}, - {'uid' => '2', 'priority' => 20, 'role' => 'cinder', 'fail_if_error' => false}, - {'uid' => '1', 'priority' => 10, 'role' => 'mongo', 'fail_if_error' => true} - ] - ctx.stubs(:status).returns({'2' => 'success', '1' => 'error'}) - - deployer.stubs(:deploy_piece).once - - ctx.expects(:report_and_update_status).never - - deployer.stubs(:remove_failed_nodes).returns([nodes, [], []]) - - expect {deployer.deploy(nodes)}.to raise_error(Astute::DeploymentEngineError) - end - - context 'limits' do - around(:each) do |example| - old_value = Astute.config.max_nodes_per_call - example.run - Astute.config.max_nodes_per_call = old_value - end - - it 'should affect nodes with same priorities in next deployment group' do - Astute.config.max_nodes_per_call = 1 - - nodes = [ - {'uid' => '2', 'priority' => 10, 'role' => 'primary-controller', 'fail_if_error' => true}, - {'uid' => '2', 'priority' => 20, 'role' => 'cinder', 'fail_if_error' => false}, - {'uid' => '1', 'priority' => 10, 'role' => 'mongo', 'fail_if_error' => true} - ] - ctx.stubs(:status).returns({'2' => 'error'}) - - deployer.stubs(:deploy_piece).once - - ctx.expects(:report_and_update_status).never - - deployer.stubs(:remove_failed_nodes).returns([nodes, [], []]) - - expect {deployer.deploy(nodes)}.to raise_error(Astute::DeploymentEngineError) - end - end # 'limits' - end - - context 'limits' do - around(:each) do |example| - old_value = Astute.config.max_nodes_per_call - example.run - Astute.config.max_nodes_per_call = old_value - end - - it 'number of nodes running in parallel should be limited' do - Astute.config.max_nodes_per_call = 1 - - nodes = [ - {'uid' => 1, 'priority' => 10, 'role' => 'compute'}, - {'uid' => 3, 'priority' => 10, 'role' => 'compute'}, - {'uid' => 2, 'priority' => 0, 'role' => 'primary-controller'}, - {'uid' => 1, 'priority' => 10, 'role' => 'cinder'} - ] - - deployer.expects(:deploy_piece).with([{'uid' => 2, 'priority' => 0, 'role' => 'primary-controller'}]) - deployer.expects(:deploy_piece).with([{'uid' => 1, 'priority' => 10, 'role' => 'compute'}]) - deployer.expects(:deploy_piece).with([{'uid' => 3, 'priority' => 10, 'role' => 'compute'}]) - deployer.expects(:deploy_piece).with([{'uid' => 1, 'priority' => 10, 'role' => 'cinder'}]) - - deployer.stubs(:remove_failed_nodes).returns([nodes, [], []]) - - deployer.deploy(nodes) - end - end - - it 'should raise error if deployment list is empty' do - expect { deployer.deploy([]) }.to raise_error('Deployment info are not provided!') - end - - it 'should not remove provisioned nodes' do - nodes = [ - {'uid' => "1", 'priority' => 10, 'role' => 'compute'}, - {'uid' => "3", 'priority' => 10, 'role' => 'compute'}, - {'uid' => "2", 'priority' => 10, 'role' => 'primary-controller'} - ] - res1 = {:data => {:node_type => 'target'}, - :sender=>"1"} - res2 = {:data => {:node_type => 'target'}, - :sender=>"2"} - res3 = {:data => {:node_type => 'target'}, - :sender=>"3"} - mc_res1 = mock_mc_result(res1) - mc_res2 = mock_mc_result(res2) - mc_res3 = mock_mc_result(res3) - mc_timeout = 10 - - rpcclient = mock_rpcclient(nodes, mc_timeout) - rpcclient.expects(:get_type).once.returns([mc_res1, mc_res2, mc_res3]) - - deployer.expects(:deploy_piece).with(nodes) - - deployer.deploy(nodes) - end - - it 'should skip failed nodes' do - nodes = [ - {'uid' => "1", 'priority' => 10, 'role' => 'compute', - 'nodes' => [ - {'uid' => '1', 'role' => 'compute'}, - {'uid' => '2', 'role' => 'primary-controller'}, - {'uid' => '3', 'role' => 'compute'}, - {'uid' => '4', 'role' => 'compute'} - ] - }, - {'uid' => "3", 'priority' => 10, 'role' => 'compute', - 'nodes' => [ - {'uid' => '1', 'role' => 'compute'}, - {'uid' => '2', 'role' => 'primary-controller'}, - {'uid' => '3', 'role' => 'compute'}, - {'uid' => '4', 'role' => 'compute'} - ] - }, - {'uid' => "2", 'priority' => 10, 'role' => 'primary-controller', - 'nodes' => [ - {'uid' => '1', 'role' => 'compute'}, - {'uid' => '2', 'role' => 'primary-controller'}, - {'uid' => '3', 'role' => 'compute'}, - {'uid' => '4', 'role' => 'compute'} - ] - } - ] - correct_nodes = [ - {'uid' => "1", 'priority' => 10, 'role' => 'compute', - 'nodes' => [ - {'uid' => '1', 'role' => 'compute'}, - {'uid' => '2', 'role' => 'primary-controller'}, - ] - }, - {'uid' => "2", 'priority' => 10, 'role' => 'primary-controller', - 'nodes' => [ - {'uid' => '1', 'role' => 'compute'}, - {'uid' => '2', 'role' => 'primary-controller'}, - ] - } - ] - res1 = {:data => {:node_type => "target\n"}, - :sender=>"1"} - res2 = {:data => {:node_type => "target"}, - :sender=>"2"} - mc_res1 = mock_mc_result(res1) - mc_res2 = mock_mc_result(res2) - - mclient.expects(:get_type).times(Astute.config[:mc_retries]).returns([mc_res1, mc_res2]) - - ctx.expects(:report_and_update_status).with( - 'nodes' => [{ - 'uid' => '3', - 'status' => 'error', - 'error_type' => 'provision', - 'role' => 'hook', - 'error_msg' => 'Node is not ready for deployment: mcollective has not answered' - },{ - 'uid' => '4', - 'status' => 'error', - 'error_type' => 'provision', - 'role' => 'hook', - 'error_msg' => 'Node is not ready for deployment: mcollective has not answered' - }], - 'error' => 'Node is not ready for deployment' - ) - deployer.expects(:deploy_piece).with(correct_nodes) - - deployer.deploy(nodes) - end - - it 'should remove failed nodes from pre and post deployment tasks' do - tasks = [ - {"priority"=>200, "uids"=>["1", "2"]}, - {"priority"=>300, "uids"=>["1", "2", "3"]}, - {"priority"=>300, "uids"=>["3"]} - ] - correct_tasks = [ - {"priority"=>200, "uids"=>["1", "2"]}, - {"priority"=>300, "uids"=>["1", "2"]} - ] - - nodes = [ - {'uid' => "1", 'priority' => 10, 'role' => 'compute', - 'nodes' => [ - {'uid' => '1', 'role' => 'compute'}, - {'uid' => '2', 'role' => 'primary-controller'}, - {'uid' => '4', 'role' => 'compute'} - ]}, - {'uid' => "3", 'priority' => 10, 'role' => 'compute', - 'nodes' => [ - {'uid' => '1', 'role' => 'compute'}, - {'uid' => '2', 'role' => 'primary-controller'}, - {'uid' => '4', 'role' => 'compute'} - ]}, - {'uid' => "2", 'priority' => 10, 'role' => 'primary-controller', - 'nodes' => [ - {'uid' => '1', 'role' => 'compute'}, - {'uid' => '2', 'role' => 'primary-controller'}, - {'uid' => '4', 'role' => 'compute'} - ] - } - ] - correct_nodes = [ - {'uid' => "1", 'priority' => 10, 'role' => 'compute', - 'nodes' => [ - {'uid' => '1', 'role' => 'compute'}, - {'uid' => '2', 'role' => 'primary-controller'}, - ] - }, - {'uid' => "2", 'priority' => 10, 'role' => 'primary-controller', - 'nodes' => [ - {'uid' => '1', 'role' => 'compute'}, - {'uid' => '2', 'role' => 'primary-controller'}, - ] - } - ] - res1 = {:data => {:node_type => "target\n"}, - :sender=>"1"} - res2 = {:data => {:node_type => "target"}, - :sender=>"2"} - mc_res1 = mock_mc_result(res1) - mc_res2 = mock_mc_result(res2) - - mclient.expects(:get_type).times(Astute.config[:mc_retries]).returns([mc_res1, mc_res2]) - - ctx.expects(:report_and_update_status).with( - 'nodes' => [{ - 'uid' => '3', - 'status' => 'error', - 'error_type' => 'provision', - 'role' => 'hook', - 'error_msg' => 'Node is not ready for deployment: mcollective has not answered' - }, { - 'uid' => '4', - 'status' => 'error', - 'error_type' => 'provision', - 'role' => 'hook', - 'error_msg' => 'Node is not ready for deployment: mcollective has not answered' - }], - 'error' => 'Node is not ready for deployment' - ) - deployer.expects(:pre_deployment_actions).with(correct_nodes, correct_tasks) - deployer.expects(:deploy_piece).with(correct_nodes) - deployer.expects(:post_deployment_actions).with(correct_nodes, correct_tasks) - - deployer.deploy(nodes, tasks, tasks) - end - - it 'should raise error if critical node is missing' do - nodes = [ - {'uid' => "1", 'priority' => 10, 'role' => 'compute', - 'nodes' => [ - {'uid' => '1', 'role' => 'compute'}, - {'uid' => '2', 'role' => 'primary-controller'}, - {'uid' => '4', 'role' => 'compute'} - ] - }, - {'uid' => "3", 'priority' => 10, 'role' => 'compute', - 'nodes' => [ - {'uid' => '1', 'role' => 'compute'}, - {'uid' => '2', 'role' => 'primary-controller'}, - {'uid' => '4', 'role' => 'compute'} - ] - }, - {'uid' => "2", 'priority' => 10, 'role' => 'primary-controller', - 'fail_if_error' => true, 'nodes' => [ - {'uid' => '1', 'role' => 'compute'}, - {'uid' => '2', 'role' => 'primary-controller'}, - {'uid' => '4', 'role' => 'compute'} - ]} - ] - - res1 = {:data => {:node_type => "target\n"}, - :sender=>"1"} - res2 = {:data => {:node_type => 'target'}, - :sender=>"3"} - - mc_res1 = mock_mc_result(res1) - mc_res2 = mock_mc_result(res2) - mclient.expects(:get_type).times(Astute.config[:mc_retries]).returns([mc_res1, mc_res2]) - - ctx.expects(:report_and_update_status).with( - 'nodes' => [{ - 'uid' => '2', - 'status' => 'error', - 'error_type' => 'provision', - 'role' => 'hook', - 'error_msg' => 'Node is not ready for deployment: mcollective has not answered' - },{ - 'uid' => '4', - 'status' => 'error', - 'error_type' => 'provision', - 'role' => 'hook', - 'error_msg' => 'Node is not ready for deployment: mcollective has not answered' - }], - 'error' => 'Node is not ready for deployment' - ) - - expect { deployer.deploy(nodes) }.to raise_error(Astute::DeploymentEngineError, "Critical nodes are not available for deployment: [\"2\"]") - end - - it 'should ask about type several times' do - nodes = [ - {'uid' => "1", 'priority' => 10, 'role' => 'compute'}, - {'uid' => "3", 'priority' => 10, 'role' => 'compute'}, - {'uid' => "2", 'priority' => 10, 'role' => 'primary-controller'} - ] - - res1 = {:data => {:node_type => 'target'}, - :sender=>"1"} - res2 = {:data => {:node_type => 'target'}, - :sender=>"2"} - res3 = {:data => {:node_type => 'target'}, - :sender=>"3"} - mc_res1 = mock_mc_result(res1) - mc_res2 = mock_mc_result(res2) - mc_res3 = mock_mc_result(res3) - - mclient.expects(:get_type).times(3).returns([mc_res1]) - .then.returns([mc_res2]) - .then.returns([mc_res3]) - - deployer.expects(:deploy_piece).with(nodes) - - deployer.deploy(nodes) - end - - end -end diff --git a/spec/unit/dispatcher_spec.rb b/spec/unit/dispatcher_spec.rb deleted file mode 100644 index b373d5b4..00000000 --- a/spec/unit/dispatcher_spec.rb +++ /dev/null @@ -1,129 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -require File.join(File.dirname(__FILE__), '../spec_helper') - -describe Astute::Server::Dispatcher do - include SpecHelpers - - describe "#remove_nodes" do - let(:dispatcher) do - dispatcher = Astute::Server::Dispatcher.new(mock) - dispatcher.stubs(:report_result) - - dispatcher - end - - let (:orchestrator) do - orchestrator = Astute::Orchestrator.any_instance - orchestrator.stubs(:check_for_offline_nodes).returns({"status"=>"ready"}) - - orchestrator - end - - let (:data) { - {'args' => { - 'task_uuid' => '0000-0000', - 'respond_to' => 'remove_nodes_resp', - 'engine' => 'engine', - 'check_ceph' => true, - 'nodes' => [{}] - } - } - } - - it 'should not call check_ceph_osds' do - data['args']['check_ceph'] = false - Astute::Provisioner.any_instance.expects(:remove_nodes).once - orchestrator.expects(:check_ceph_osds).never - dispatcher.remove_nodes(data) - end - - it 'should not remove nodes when check fails' do - Astute::Provisioner.any_instance.expects(:remove_nodes).never - orchestrator.stubs(:check_ceph_osds).returns({"status" => "error"}) - dispatcher.remove_nodes(data) - end - - it 'should remove nodes when check passes' do - orchestrator.stubs(:check_ceph_osds).returns({"status" => "ready"}).once - orchestrator.stubs(:remove_ceph_mons).returns({"status" => "ready"}).once - Astute::Provisioner.any_instance.expects(:remove_nodes).once - dispatcher.remove_nodes(data) - end - end - - describe "#stop_deploy_task" do - let (:dispatcher) do - dispatcher = Astute::Server::Dispatcher.new(mock) - - dispatcher - end - - let (:orchestrator) do - orchestrator = Astute::Orchestrator.any_instance - - orchestrator - end - - let (:data) { - {'args' => { - 'task_uuid' => '0000-0000', - 'stop_task_uuid' => '0000-0000', - 'engine' => 'engine', - 'nodes' => [{'uid' => 1}] - } - } - } - - let (:service_data) do - task_queue = mock() - task_queue.stubs(:task_in_queue?).returns(true) - task_queue.stubs(:current_task_id).returns('0000-0000') - - {:tasks_queue => task_queue} - end - - it 'should stop deployment' do - service_data[:tasks_queue].stubs(:current_task_method).returns('deploy') - dispatcher.expects(:kill_main_process).with('0000-0000', service_data) - orchestrator.expects(:stop_puppet_deploy).with(anything, '0000-0000', [{'uid' => 1}]) - orchestrator.expects(:remove_nodes).with(anything, '0000-0000', 'engine', [{'uid' => 1}]) - .returns({'nodes' => [{'uid' => 1}]}) - dispatcher.expects(:report_result).with({'nodes' => [{'uid' => 1}]}, anything) - dispatcher.stop_deploy_task(data, service_data) - end - - it 'should stop task deployment' do - service_data[:tasks_queue].stubs(:current_task_method).returns('task_deploy') - dispatcher.expects(:gracefully_stop_main_process).with('0000-0000', service_data) - dispatcher.expects(:wait_while_process_run).with(anything, anything, '0000-0000', service_data) - .returns({}) - dispatcher.expects(:report_result).with({}, anything) - dispatcher.stop_deploy_task(data, service_data) - end - - it 'should stop provisioning' do - service_data[:tasks_queue].stubs(:current_task_method).returns('provision') - dispatcher.expects(:kill_main_process).with('0000-0000', service_data) - orchestrator.expects(:stop_provision).with(anything, '0000-0000', 'engine', [{'uid' => 1}]) - .returns({'nodes' => [{'uid' => 1}]}) - dispatcher.expects(:report_result).with({'nodes' => [{'uid' => 1}]}, anything) - dispatcher.stop_deploy_task(data, service_data) - end - - end - -end diff --git a/spec/unit/dump_spec.rb b/spec/unit/dump_spec.rb deleted file mode 100644 index 250e030b..00000000 --- a/spec/unit/dump_spec.rb +++ /dev/null @@ -1,98 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -require File.join(File.dirname(__FILE__), '../spec_helper') - -describe 'dump_environment' do - include SpecHelpers - - let(:ctx) { mock_ctx } - let(:settings) do - { - 'lastdump' => '/last/dump/path', - 'target' => '/var/dump/path', - 'timeout' => 300, - 'auth-token' => '42' - } - end - let(:rpc_mock) { mock_rpcclient } - - def exec_result(exit_code=0, stdout='', stderr='') - result_mock = mock_mc_result({ - :data => { - :exit_code => exit_code, - :stdout => stdout, - :stderr => stderr}}) - [result_mock] - end - - it "should upload the config and call execute method with shotgun as cmd" do - target = settings['target'] - dump_cmd = "mkdir -p #{target} && "\ - "timmy --logs --days 3 --dest-file #{target}/config.tar.gz "\ - "--fuel-token 42 --log-file /var/log/timmy.log && "\ - "tar --directory=/var/dump -cf #{target}.tar path && "\ - "echo #{target}.tar > #{settings['lastdump']} && "\ - "rm -rf #{target}" - rpc_mock.expects(:execute).with({:cmd => dump_cmd}).returns(exec_result) - - Astute::Dump.dump_environment(ctx, settings) - end - it "should report success if shell agent returns 0" do - rpc_mock.expects(:execute).returns(exec_result) - Astute::Dump.expects(:report_success) - Astute::Dump.dump_environment(ctx, settings) - end - - it "should report error if shell agent returns not 0" do - rpc_mock.expects(:execute).returns(exec_result(1, '', '')) - Astute::Dump.expects(:report_error).with(ctx, "Timmy exit code: 1") - Astute::Dump.dump_environment(ctx, settings) - end - - it "should report disk space error if shell agent returns 28" do - rpc_mock.expects(:execute).returns(exec_result(28, '', '')) - Astute::Dump.expects(:report_error).with(ctx, "Timmy exit code: 28. Disk space for creating snapshot exceeded.") - Astute::Dump.dump_environment(ctx, settings) - end - - it "non default timeout should be used" do - Astute::MClient.stubs(:new).with(ctx, 'execute_shell_command', ['master'], true, 300, 0, false) - Astute::Dump.dump_environment(ctx, settings) - end - - it "should report error if shell agent times out" do - agent = mock do - stubs(:upload) - stubs(:execute).raises(Timeout::Error) - end - Astute::MClient.stubs(:new).returns(agent) - Astute::Dump.expects(:report_error).with(ctx, "Dump is timed out") - Astute::Dump.dump_environment(ctx, settings) - end - - it "should report error if any other exception occured" do - agent = mock do - stubs(:upload) - stubs(:execute).raises(StandardError , "MESSAGE") - end - Astute::MClient.stubs(:new).returns(agent) - Astute::Dump.expects(:report_error).with do |c, msg| - c == ctx && msg =~ /Exception occured during dump task: message: MESSAGE/ - end - - Astute::Dump.dump_environment(ctx, settings) - end -end diff --git a/spec/unit/fuel_deployment/cluster_spec.rb b/spec/unit/fuel_deployment/cluster_spec.rb deleted file mode 100644 index 082a3b04..00000000 --- a/spec/unit/fuel_deployment/cluster_spec.rb +++ /dev/null @@ -1,431 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require 'spec_helper' -require 'set' - -describe Deployment::Cluster do - - let(:cluster) do - cluster = Deployment::Cluster.new - cluster.uid = 'test' - node1 = cluster.create_node 'node1' - node2 = cluster.create_node 'node2' - node1.create_task 'task1' - node1.create_task 'task2' - node1.create_task 'task3' - node1.create_task 'task4' - node2.create_task 'task1' - node2.create_task 'task2' - cluster - end - - let(:node1) do - cluster['node1'] - end - - let(:node2) do - cluster['node2'] - end - - let(:task1_1) do - cluster['node1']['task1'] - end - - let(:task1_2) do - cluster['node1']['task2'] - end - - let(:task1_3) do - cluster['node1']['task3'] - end - - let(:task1_4) do - cluster['node1']['task4'] - end - - let(:task2_1) do - cluster['node2']['task1'] - end - - let(:task2_2) do - cluster['node2']['task2'] - end - - subject { cluster } - - context '#attributes' do - it 'has an id' do - expect(subject.uid).to eq 'test' - end - - it 'can set an id' do - subject.uid = 1 - expect(subject.uid).to eq 1 - end - - it 'has nodes' do - expect(subject.nodes).to eq({:node1 => node1, :node2 => node2}) - end - - it 'has node_concurrency' do - expect(subject.node_concurrency).to be_a Deployment::Concurrency::Counter - end - - it 'has task_concurrency' do - expect(subject.task_concurrency).to be_a Deployment::Concurrency::Group - end - - end - - context '#nodes processing' do - it 'can check that the node is in the cluster' do - expect(cluster.node_present? 'node1').to eq true - expect(cluster.node_present? node1).to eq true - expect(cluster.node_present? 'node3').to eq false - end - - it 'can add an existing node' do - node3 = Deployment::Node.new 'node3', cluster - cluster.node_remove node3 - expect(cluster.node_present? node3).to eq false - return_node = cluster.node_add node3 - expect(cluster.node_present? node3).to eq true - expect(return_node).to eq node3 - end - - it 'will add only the valid node objects' do - expect do - subject.node_add 'node1' - end.to raise_exception Deployment::InvalidArgument, /can add only nodes/ - expect do - subject.node_add ['node1'] - end.to raise_exception Deployment::InvalidArgument, /can add only nodes/ - end - - it 'can move a node from the other cluster by adding it' do - another_cluster = Deployment::Cluster.new - node3 = another_cluster.node_create 'node3' - expect(node3.name).to eq 'node3' - expect(node3.cluster).to eq another_cluster - expect(another_cluster.node_present? 'node3').to eq true - expect(cluster.node_present? 'node3').to eq false - cluster.node_add node3 - expect(node3.cluster).to eq cluster - expect(cluster.node_present? 'node3').to eq true - expect(another_cluster.node_present? 'node3').to eq false - end - - it 'can get an existing node by its name' do - expect(cluster.node_get 'node1').to eq node1 - expect(cluster.node_get node1).to eq node1 - expect(cluster['node1']).to eq node1 - end - - it 'can create a new node' do - return_node = cluster.node_create 'node3' - expect(return_node.name).to eq 'node3' - expect(cluster.node_get 'node3').to eq return_node - end - - it 'can remove an existing node' do - expect(cluster.node_present? 'node1').to eq true - expect(cluster.node_present? 'node2').to eq true - cluster.node_remove 'node1' - cluster.node_remove node2 - expect(cluster.node_present? 'node1').to eq false - expect(cluster.node_remove 'node3').to be_nil - end - - it 'can iterate through all nodes' do - expect(subject.each_node.to_set).to eq Set.new([node1, node2]) - end - - it 'can iterate through all tasks' do - expect(subject.each_task.to_set).to eq Set.new([task1_1, task1_2, task1_3, task1_4, task2_1, task2_2]) - end - - it 'can iterate through all ready tasks' do - task1_2.after task1_1 - task1_3.after task1_2 - task1_4.after task1_3 - task2_2.after task2_1 - expect(subject.each_ready_task.to_set).to eq Set.new([task1_1, task2_1]) - end - - it 'can check if all nodes are finished' do - task1_1.status = :successful - task1_2.status = :successful - task1_3.status = :skipped - task1_4.status = :failed - task2_1.status = :successful - task2_2.status = :pending - expect(subject.all_nodes_are_finished?).to eq false - task2_2.status = :successful - expect(subject.all_nodes_are_finished?).to eq true - end - - it 'can check if all nodes are successful' do - task1_1.status = :successful - task1_2.status = :successful - task1_3.status = :successful - task1_4.status = :failed - task2_1.status = :successful - task2_2.status = :successful - expect(subject.all_nodes_are_successful?).to eq false - task1_4.status = :successful - expect(subject.all_nodes_are_successful?).to eq true - end - - it 'can find failed nodes' do - task1_1.status = :successful - task1_2.status = :successful - task2_1.status = :successful - task2_2.status = :pending - expect(subject.failed_nodes).to eq([]) - expect(subject.has_failed_nodes?).to eq false - task2_2.status = :failed - expect(subject.failed_nodes).to eq([node2]) - expect(subject.has_failed_nodes?).to eq true - end - - context 'fault_tolerance_groups' do - - let(:fault_tolerance_groups) do - [{ - "fault_tolerance"=>1, - "name"=>"test_group", - "node_ids"=>['node2'] - }, - { - "fault_tolerance"=> 0, - "name"=>"test_group2", - "node_ids"=>[] - }] - end - - it 'can find tolerance group' do - cluster.fault_tolerance_groups = fault_tolerance_groups - task1_1.status = :successful - task1_2.status = :successful - task2_1.status = :successful - task2_2.status = :failed - expect(cluster.fault_tolerance_groups).to eq [fault_tolerance_groups.first] - end - - it 'can validate tolerance group' do - cluster.fault_tolerance_groups = fault_tolerance_groups - task1_1.status = :successful - task1_2.status = :successful - task2_1.status = :failed - cluster.validate_fault_tolerance(node1) - cluster.validate_fault_tolerance(node2) - expect(cluster.fault_tolerance_excess?).to eq false - expect(cluster.gracefully_stop?).to eq false - end - - it 'can control deploy using tolerance group' do - fault_tolerance_groups.first['fault_tolerance'] = 0 - cluster.fault_tolerance_groups = fault_tolerance_groups - task1_1.status = :successful - task1_2.status = :successful - task2_1.status = :failed - cluster.validate_fault_tolerance(node1) - cluster.validate_fault_tolerance(node2) - expect(cluster.fault_tolerance_excess?).to eq true - expect(cluster.gracefully_stop?).to eq true - end - end - - it 'can find critical nodes' do - expect(subject.critical_nodes).to eq([]) - node1.critical = true - expect(subject.critical_nodes).to eq([node1]) - end - - it 'can find failed critical nodes' do - expect(subject.failed_critical_nodes).to eq([]) - expect(subject.has_failed_critical_nodes?).to eq false - node1.critical = true - expect(subject.failed_critical_nodes).to eq([]) - expect(subject.has_failed_critical_nodes?).to eq false - task1_1.status = :failed - expect(subject.failed_critical_nodes).to eq([node1]) - expect(subject.has_failed_critical_nodes?).to eq true - task1_1.status = :pending - node1.status = :failed - expect(subject.failed_critical_nodes).to eq([node1]) - expect(subject.has_failed_critical_nodes?).to eq true - node2.status = :failed - expect(subject.failed_critical_nodes).to eq([node1]) - expect(subject.has_failed_critical_nodes?).to eq true - end - - it 'can count the total tasks number' do - expect(subject.tasks_total_count).to eq 6 - end - - it 'can count the failed tasks number' do - task1_1.status = :successful - task1_2.status = :failed - task2_1.status = :successful - task2_2.status = :failed - expect(subject.tasks_failed_count).to eq 2 - end - - it 'can count the successful tasks number' do - task1_1.status = :successful - task1_2.status = :successful - task2_1.status = :successful - task2_2.status = :pending - expect(subject.tasks_successful_count).to eq 3 - end - - it 'can count the finished tasks number' do - task1_1.status = :successful - task1_2.status = :failed - task2_1.status = :successful - task2_2.status = :pending - expect(subject.tasks_finished_count).to eq 3 - end - - it 'can count the pending tasks number' do - task1_1.status = :successful - task1_2.status = :failed - expect(subject.tasks_pending_count).to eq 4 - end - - it 'can count the ending tasks' do - - end - end - - context '#dfs' do - context '#no loop' do - let(:link_without_loop) do - cluster - task1_2.after task1_1 - task1_3.after task1_1 - task1_4.after task1_2 - task1_4.after task1_3 - task2_1.after task1_4 - task2_2.after task2_1 - end - - before(:each) do - link_without_loop - end - - it 'can walk forward' do - visited = Set.new - cluster.visit(task1_1).each do |t| - visited.add t - end - expect(visited).to eq [task1_1, task1_2, task1_4, task2_1, task2_2, task1_3].to_set - end - - it 'can walk backward' do - visited = Set.new - cluster.visit(task2_2, direction: :backward).each do |t| - visited.add t - end - expect(visited).to eq [task2_2, task2_1, task1_4, task1_2, task1_1, task1_3].to_set - end - - it 'can topology sort' do - expect(cluster.topology_sort).to eq [task1_1, task1_3, task1_2, task1_4, task2_1, task2_2] - end - - it 'can check if there is no loop' do - expect(cluster.has_loop?).to eq false - end - end - - context '#has loop' do - let(:link_with_loop) do - task1_2.after task1_1 - task1_3.after task1_2 - task1_4.after task1_3 - task1_1.after task1_4 - task2_1.after task1_4 - task2_2.after task2_1 - end - - before(:each) do - link_with_loop - end - - it 'can walk forward' do - message = 'Cluster[test]: Loop detected! Path: Task[task1/node1], Task[task2/node1], Task[task3/node1], Task[task4/node1], Task[task1/node1]' - expect do - cluster.visit(task1_1).to_a - end.to raise_error Deployment::LoopDetected, message - end - - it 'can walk backward' do - message = 'Cluster[test]: Loop detected! Path: Task[task1/node1], Task[task4/node1], Task[task3/node1], Task[task2/node1], Task[task1/node1]' - expect do - cluster.visit(task1_1, direction: :backward).to_a - end.to raise_error Deployment::LoopDetected, message - end - - it 'can topology sort' do - message = 'Cluster[test]: Loop detected! Path: Task[task1/node1], Task[task2/node1], Task[task3/node1], Task[task4/node1], Task[task1/node1]' - expect do - cluster.topology_sort - end.to raise_error Deployment::LoopDetected, message - end - - it 'can check if there is no loop' do - expect(cluster.has_loop?).to eq true - end - - end - end - - context '#inspection' do - it 'can to_s' do - expect(subject.to_s).to eq 'Cluster[test]' - end - - it 'can inspect' do - expect(subject.inspect).to eq 'Cluster[test]{Tasks: 0/6 Nodes: node1, node2}' - end - - it 'can generate dot graph' do - graph = <<-eof -digraph "test" { - node[ style = "filled, solid"]; - "Task[task1/node1]" [label = "Task[task1/node1]", fillcolor = "yellow"]; - "Task[task2/node1]" [label = "Task[task2/node1]", fillcolor = "white"]; - "Task[task3/node1]" [label = "Task[task3/node1]", fillcolor = "white"]; - "Task[task4/node1]" [label = "Task[task4/node1]", fillcolor = "white"]; - "Task[task1/node2]" [label = "Task[task1/node2]", fillcolor = "yellow"]; - "Task[task2/node2]" [label = "Task[task2/node2]", fillcolor = "yellow"]; - - "Task[task1/node1]" -> "Task[task2/node1]"; - "Task[task1/node1]" -> "Task[task3/node1]"; - "Task[task2/node1]" -> "Task[task4/node1]"; - "Task[task3/node1]" -> "Task[task4/node1]"; -} - eof - - task1_2.after task1_1 - task1_3.after task1_1 - task1_4.after task1_2 - task1_4.after task1_3 - expect(cluster.to_dot).to eq graph - end - end -end diff --git a/spec/unit/fuel_deployment/concurrency/counter_spec.rb b/spec/unit/fuel_deployment/concurrency/counter_spec.rb deleted file mode 100644 index c7041836..00000000 --- a/spec/unit/fuel_deployment/concurrency/counter_spec.rb +++ /dev/null @@ -1,112 +0,0 @@ -# Copyright 2016 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require 'spec_helper' -require 'set' - -describe Deployment::Concurrency::Counter do - let(:counter) do - Deployment::Concurrency::Counter.new(0, 0) - end - - subject { counter } - - it 'can create an instance' do - is_expected.to be_a Deployment::Concurrency::Counter - end - - it 'can get the current value' do - expect(subject.current).to eq 0 - end - - it 'can set the current value' do - subject.current = 5 - expect(subject.current).to eq 5 - end - - it 'can get the maximum value' do - expect(subject.maximum).to eq 0 - end - - it 'can set the maximum value' do - subject.maximum = 5 - expect(subject.maximum).to eq 5 - end - - it 'can convert objects to values' do - expect(subject.to_value 2).to eq 2 - expect(subject.to_value 0).to eq 0 - expect(subject.to_value '1').to eq 1 - expect(subject.to_value 'a').to eq 0 - expect(subject.to_value nil).to eq 0 - expect(subject.to_value []).to eq 0 - expect(subject.to_value true).to eq 0 - end - - it 'can increment the current value' do - subject.current = 1 - subject.increment - expect(subject.current).to eq 2 - end - - it 'can decrement the current value, but not below zero' do - subject.current = 1 - subject.decrement - expect(subject.current).to eq 0 - subject.decrement - expect(subject.current).to eq 0 - end - - it 'can zero the current value' do - subject.current = 5 - subject.zero - expect(subject.current).to eq 0 - end - - it 'can check that counter is active - current value is less then maximum' do - subject.maximum = 2 - subject.current = 1 - is_expected.to be_active - is_expected.not_to be_inactive - end - - it 'can check that counter is inactive - current value more then maximum' do - subject.maximum = 1 - subject.current = 2 - is_expected.not_to be_active - is_expected.to be_inactive - end - - it 'is NOT active if the current value is equal to the maximum value' do - subject.maximum = 2 - subject.current = 2 - is_expected.not_to be_active - end - - it 'can check if the maximum value is set - is more then zero' do - subject.maximum = 1 - is_expected.to be_maximum_set - subject.maximum = 0 - is_expected.not_to be_maximum_set - end - - it 'is active if the maximum value is not set regardless of the current value' do - subject.current = 10 - subject.maximum = 1 - is_expected.not_to be_active - subject.maximum = 0 - is_expected.to be_active - end - -end diff --git a/spec/unit/fuel_deployment/concurrency/group_spec.rb b/spec/unit/fuel_deployment/concurrency/group_spec.rb deleted file mode 100644 index c145ff70..00000000 --- a/spec/unit/fuel_deployment/concurrency/group_spec.rb +++ /dev/null @@ -1,99 +0,0 @@ -# Copyright 2016 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require 'spec_helper' -require 'set' - -describe Deployment::Concurrency::Group do - let(:counter) do - Deployment::Concurrency::Counter.new(0, 0) - end - - let(:group) do - group = Deployment::Concurrency::Group.new - group['test'] = counter - group - end - - subject { group } - - it 'can create an instance' do - is_expected.to be_a Deployment::Concurrency::Group - end - - it 'has the group Hash attribute' do - expect(subject.group).to be_a Hash - end - - it 'can check if there is a Counter by its name' do - expect(group.key? 'test').to eq true - expect(group.key? 'missing').to eq false - end - - it 'can get an existing counter' do - expect(subject['test']).to eq counter - end - - it 'can set an existing counter' do - subject['test1'] = counter - expect(subject['test1']).to eq counter - end - - it 'can remove an existing counter' do - expect(group.key? 'test').to eq true - group.delete 'test' - expect(group.key? 'test').to eq false - end - - it 'will refuse to set an incorrect value' do - expect do - subject['a'] = 1 - end.to raise_error Deployment::InvalidArgument, /value should be a Counter/ - end - - it 'can create a new Counter in the group' do - expect(group.key? 'my_counter').to eq false - subject.create 'my_counter' - expect(group.key? 'my_counter').to eq true - end - - it 'will create a new instance of Counter if asked to get a nonexistent Counter' do - expect(group.key? 'another_counter').to eq false - expect(subject['another_counter']).to be_a Deployment::Concurrency::Counter - expect(group.key? 'another_counter').to eq true - end - - it 'can convert an object to a key' do - expect(subject.to_key :a).to eq :a - expect(subject.to_key 'a').to eq :a - expect(subject.to_key 1).to eq :'1' - end - - it 'will refuse to use a value that cannot be converted to a key' do - expect do - subject.to_key nil - end.to raise_error Deployment::InvalidArgument, /cannot be used/ - end - - it 'can loop through all Counter objects' do - expect(subject.each.to_a).to eq [counter] - end - - it 'can act as an Enumerable container with Counters' do - maximum_values = subject.map do |counter| - counter.maximum - end - expect(maximum_values).to eq [0] - end -end diff --git a/spec/unit/fuel_deployment/graph_spec.rb b/spec/unit/fuel_deployment/graph_spec.rb deleted file mode 100644 index b0141fdd..00000000 --- a/spec/unit/fuel_deployment/graph_spec.rb +++ /dev/null @@ -1,277 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require 'spec_helper' - -describe Deployment::Graph do - - let(:cluster) do - cluster = Deployment::Cluster.new - cluster.uid = 'test' - node1 = cluster.create_node 'node1' - node2 = cluster.create_node 'node2' - node1.create_task 'task1' - node1.create_task 'task2' - node2.create_task 'task1' - node2.create_task 'task2' - cluster - end - - let(:node1) do - cluster['node1'] - end - - let(:node2) do - cluster['node2'] - end - - let(:graph1) do - node1.graph - end - - let(:graph2) do - node2.graph - end - - let(:task1_1) do - cluster['node1']['task1'] - end - - let(:task1_2) do - cluster['node1']['task2'] - end - - let(:task2_1) do - cluster['node2']['task1'] - end - - let(:task2_2) do - cluster['node2']['task2'] - end - - subject { graph1 } - - context '#attributes' do - it 'should have a node' do - expect(subject.node).to eq node1 - expect(subject.name).to eq node1.name - end - - it 'should have a tasks' do - expect(subject.tasks).to be_a Hash - end - - it 'can set node only to a node object' do - subject.node = node2 - expect(subject.node).to eq node2 - expect do - subject.node = 'node3' - end.to raise_error Deployment::InvalidArgument, /Not a node/ - end - end - - context '#tasks' do - it 'can create a new task' do - task = subject.task_create 'new_task' - expect(task.name).to eq 'new_task' - expect(task.node.name).to eq 'node1' - end - - it 'can create a new task with data payload value' do - task = subject.task_create 'new_task', 'my_data' - expect(task.name).to eq 'new_task' - expect(task.node.name).to eq 'node1' - expect(task.data).to eq 'my_data' - end - - it 'creating an existing task will return it and update the data payload' do - task1 = subject.task_create 'new_task' - expect(task1.data).to eq Hash.new - task2 = subject.task_create 'new_task', 'my_data' - expect(task2.data).to eq 'my_data' - expect(task1).to eq task2 - end - - it 'can add an existing task' do - task = task1_1 - subject.task_remove task - subject.task_add task - expect(task.name).to eq 'task1' - expect(task.node.name).to eq 'node1' - end - - it 'will move a task from another graph by adding it' do - another_node = cluster.node_create 'node3' - another_task = another_node.graph.task_create 'another_task' - expect(another_task.name).to eq 'another_task' - expect(another_task.node).to eq another_node - expect(another_node.graph.task_present? 'another_task').to eq true - expect(node1.graph.task_present? 'another_task').to eq false - node1.graph.task_add another_task - expect(another_task.node).to eq node1 - expect(node1.graph.task_present? 'another_task').to eq true - expect(another_node.graph.task_present? 'another_task').to eq false - end - - it 'can check if a task is present' do - task = task1_1 - subject.task_remove task - expect(subject.task_present? 'task1').to eq false - subject.task_add task - expect(subject.task_present? 'task1').to eq true - expect(subject.task_present? task1_1).to eq true - end - - it 'can get an existing task' do - expect(subject.task_get 'task1').to eq task1_1 - expect(subject['task1']).to eq task1_1 - expect(subject.task_get task1_1).to eq task1_1 - expect(subject.task_get 'missing_task').to eq nil - end - - it 'can remove a task' do - expect(subject.task_present? 'task1').to eq true - subject.task_remove task1_1 - expect(subject.task_present? 'task1').to eq false - end - - it 'can add dependencies between tasks of the same graph by name' do - subject.add_dependency 'task1', 'task2' - expect(subject['task2'].dependency_present? task1_1).to eq true - end - - it 'will not add dependencies if there is no such task' do - expect do - subject.add_dependency 'task1', 'task3' - end.to raise_exception Deployment::NoSuchTask, /no such task in the graph/ - end - - it 'can add dependencies between task objects of the same graph' do - subject.add_dependency task1_1, task1_2 - expect(subject[task1_2].dependency_present? task1_1).to eq true - end - - it 'can add dependencies between task objects in the different graphs' do - subject.add_dependency task1_2, task2_2 - expect(graph2[task2_2].dependency_present? task1_2).to eq true - end - - it 'can iterate through tasks' do - expect(subject.each.to_a).to eq [task1_1, task1_2] - end - - it 'can add a new task together with the list of its dependencies' do - subject.task_add_new_with_dependencies 'new_task', 'new_data', %w(bd1 bd2), %w(fd1 fd2) - expect(subject['new_task'].data).to eq 'new_data' - expect(subject['new_task'].dependency_backward_present? subject['bd1']).to eq true - expect(subject['new_task'].dependency_backward_present? subject['bd2']).to eq true - expect(subject['new_task'].dependency_forward_present? subject['fd1']).to eq true - expect(subject['new_task'].dependency_forward_present? subject['fd2']).to eq true - end - - it 'can add a task together with the list of task object dependencies' do - subject.task_add_new_with_dependencies task1_2, 'data', [task1_1] - expect(subject.tasks.length).to eq 2 - expect(task1_1.dependency_forward_present? task1_2).to eq true - end - end - - context '#tasks advanced' do - it 'can determine that all tasks are finished' do - expect(subject.tasks_are_finished?).to eq false - task1_1.status = :successful - task1_2.status = :failed - subject.reset - expect(subject.tasks_are_finished?).to eq true - end - - it 'can determine that all tasks are successful' do - expect(subject.tasks_are_successful?).to eq false - task1_1.status = :successful - task1_2.status = :successful - subject.reset - expect(subject.tasks_are_successful?).to eq true - end - - it 'can determine that some tasks are failed' do - expect(subject.tasks_have_failed?).to eq false - task1_1.status = :successful - task1_2.status = :failed - subject.reset - expect(subject.tasks_have_failed?).to eq true - end - - it 'can get a runnable task' do - task1_2.after task1_1 - expect(subject.ready_task).to eq task1_1 - task1_1.status = :failed - expect(subject.ready_task).to be_nil - end - - it 'uses task dependencies to determine a runnable task' do - subject.add_dependency task1_1, task1_2 - expect(subject.ready_task).to eq task1_1 - task1_1.status = :successful - expect(subject.ready_task).to eq task1_2 - task1_1.status = :failed - task1_2.poll_dependencies - expect(subject.ready_task).to be_nil - end - - it 'can count the total tasks number' do - expect(subject.tasks_total_count).to eq 2 - end - - it 'can count the failed tasks number' do - task1_2.status = :failed - expect(subject.tasks_failed_count).to eq 1 - end - - it 'can count the successful tasks number' do - task1_2.status = :successful - expect(subject.tasks_successful_count).to eq 1 - end - - it 'can count the finished tasks number' do - task1_2.status = :successful - expect(subject.tasks_finished_count).to eq 1 - task1_2.status = :skipped - expect(subject.tasks_finished_count).to eq 1 - end - - it 'can count the pending tasks number' do - expect(subject.tasks_pending_count).to eq 2 - end - end - - context '#inspections' do - - it 'can to_s' do - expect(subject.to_s).to eq 'Graph[node1]' - end - - it 'can inspect' do - expect(subject.inspect).to eq 'Graph[node1]{Tasks: 0/2 Finished: false Failed: false Successful: false}' - subject.task_add task1_1 - expect(subject.inspect).to eq 'Graph[node1]{Tasks: 0/2 Finished: false Failed: false Successful: false}' - task1_1.status = :successful - subject.reset - expect(subject.inspect).to eq 'Graph[node1]{Tasks: 1/2 Finished: false Failed: false Successful: false}' - task1_1.status = :failed - subject.reset - expect(subject.inspect).to eq 'Graph[node1]{Tasks: 1/2 Finished: false Failed: true Successful: false}' - end - - end -end diff --git a/spec/unit/fuel_deployment/node_spec.rb b/spec/unit/fuel_deployment/node_spec.rb deleted file mode 100644 index 33bc50e2..00000000 --- a/spec/unit/fuel_deployment/node_spec.rb +++ /dev/null @@ -1,261 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require 'spec_helper' - -describe Deployment::Node do - - let(:cluster) do - cluster = Deployment::Cluster.new - cluster.uid = 'test' - node1 = cluster.create_node 'node1' - node1.create_task 'task1' - cluster - end - - let(:node1) do - cluster['node1'] - end - - let(:task1) do - node1['task1'] - end - - subject { node1 } - - context '#attributes' do - it 'should have a name' do - expect(subject.name).to eq 'node1' - end - - it 'should have a status' do - expect(subject.status).to eq :online - end - - it 'should have a task' do - expect(subject.task).to be_nil - end - - it 'should have a graph' do - expect(subject.graph).to be_a Deployment::Graph - end - - it 'should have an id' do - expect(subject.uid).to eq 'node1' - end - - it 'should have critical' do - expect(subject.critical).to eq false - expect(subject.critical?).to eq false - end - - it 'can set critical' do - subject.critical = true - expect(subject.critical?).to eq true - subject.critical = nil - expect(subject.critical?).to eq false - subject.set_critical - expect(subject.critical?).to eq true - subject.set_normal - expect(subject.critical?).to eq false - subject.critical = 'yes' - expect(subject.critical?).to eq true - end - - it 'can set a name' do - subject.name = 'node2' - expect(subject.name).to eq 'node2' - subject.name = 1 - expect(subject.name).to eq '1' - end - - it 'can set a status' do - subject.status = :busy - expect(subject.status).to eq :busy - subject.status = 'offline' - expect(subject.status).to eq :offline - end - - it 'can set only a valid status' do - expect do - subject.status = :provisioned - end.to raise_exception Deployment::InvalidArgument, /Invalid node status/ - end - - it 'can use dynamic status set methods' do - subject.set_status_busy - expect(subject.status).to eq :busy - end - - it 'can set a task' do - subject.add_task task1 - subject.task = task1 - expect(subject.task).to eq task1 - subject.task = nil - expect(subject.task).to be_nil - end - - it 'can set task only if it is in the graph' do - subject.task_remove task1 - expect do - subject.task = task1 - end.to raise_exception Deployment::InvalidArgument, /not found in the graph/ - end - - it 'can set an id' do - subject.uid = 2 - expect(subject.uid).to eq 2 - end - - it 'will not set task to an invalid object' do - expect do - subject.task = 'task1' - end.to raise_exception Deployment::InvalidArgument, /should be a task/ - end - - it 'can set a graph' do - old_graph = subject.graph - new_graph = Deployment::Graph.new subject - subject.graph = new_graph - expect(new_graph).not_to eq old_graph - end - - it 'can create a new graph' do - old_graph = subject.graph - subject.create_new_graph - expect(subject.graph).not_to eq old_graph - end - - it 'will not set graph to an invalid object' do - expect do - subject.graph = 'new_graph' - end.to raise_exception Deployment::InvalidArgument, /should be a graph/ - end - - it 'can iterate through graph tasks' do - expect(subject.each.to_a).to eq [task1] - end - - it 'should add itself to the cluster when the node is created' do - expect(cluster.node_present? 'new_node').to eq false - Deployment::Node.new 'new_node', cluster - expect(cluster.node_present? 'new_node').to eq true - end - end - - context '#concurrency' do - - context 'maximum is not set' do - it 'concurrency is NOT present' do - is_expected.not_to be_concurrency_present - end - - it 'concurrency is available' do - is_expected.to be_concurrency_available - end - - it 'will not try to count node concurrency if maximum is not set' do - subject.status = :busy - expect(subject.cluster.node_concurrency.current).to eq 0 - subject.status = :successful - expect(subject.cluster.node_concurrency.current).to eq 0 - end - - it 'online node is counted as a ready node' do - subject.status == :online - is_expected.to be_ready - end - end - context 'maximum is set and active' do - before(:each) do - cluster.node_concurrency.maximum = 2 - cluster.node_concurrency.current = 1 - end - - it 'concurrency is present' do - is_expected.to be_concurrency_present - end - - it 'concurrency is available' do - is_expected.to be_concurrency_available - end - - it 'can change the current concurrency when the status of the node changes' do - subject.status = :busy - expect(subject.cluster.node_concurrency.current).to eq 2 - subject.status = :successful - expect(subject.cluster.node_concurrency.current).to eq 1 - end - - it 'online node is counted as a ready node' do - subject.status == :online - is_expected.to be_ready - end - end - - context 'maximum is set and not active' do - before(:each) do - cluster.node_concurrency.maximum = 1 - cluster.node_concurrency.current = 2 - end - - it 'concurrency is present' do - is_expected.to be_concurrency_present - end - - it 'concurrency is NOT available' do - is_expected.not_to be_concurrency_available - end - - it 'can change the current concurrency when the status of the node changes' do - subject.status = :busy - expect(subject.cluster.node_concurrency.current).to eq 3 - subject.status = :successful - expect(subject.cluster.node_concurrency.current).to eq 2 - end - - it 'online node is NOT counted as a ready node' do - subject.status == :online - is_expected.not_to be_ready - end - end - end - - context '#inspection' do - - it 'can to_s' do - expect(subject.to_s).to eq 'Node[node1]' - subject.uid = 1 - expect(subject.to_s).to eq 'Node[1/node1]' - end - - it 'can inspect' do - expect(subject.inspect).to eq 'Node[node1]{Status: online Tasks: 0/1}' - subject.status = :offline - expect(subject.inspect).to eq 'Node[node1]{Status: offline Tasks: 0/1}' - subject.task = task1 - expect(subject.inspect).to eq 'Node[node1]{Status: offline Tasks: 0/1 CurrentTask: task1, task status: ready}' - end - end - - context '#run' do - it 'can run a task' do - expect(subject).to respond_to :run - end - - it 'can poll node status' do - expect(subject).to respond_to :poll - end - end -end diff --git a/spec/unit/fuel_deployment/task_spec.rb b/spec/unit/fuel_deployment/task_spec.rb deleted file mode 100644 index 7d94a254..00000000 --- a/spec/unit/fuel_deployment/task_spec.rb +++ /dev/null @@ -1,463 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require 'spec_helper' - -describe Deployment::Task do - - let(:cluster) do - cluster = Deployment::Cluster.new - cluster.uid = 'test' - node1 = cluster.create_node 'node1' - node2 = cluster.create_node 'node2' - node1.create_task 'task1' - node1.create_task 'task2' - node1.create_task 'task3' - node2.create_task 'task1' - node2.create_task 'task2' - cluster - end - - let(:node1) do - cluster['node1'] - end - - let(:node2) do - cluster['node2'] - end - - let(:task1) do - cluster['node1']['task1'] - end - - let(:task2) do - cluster['node1']['task2'] - end - - let(:task3) do - cluster['node1']['task3'] - end - - let(:task2_1) do - cluster['node2']['task1'] - end - - let(:task2_2) do - cluster['node2']['task2'] - end - - subject { task1 } - - context '#attributes' do - it 'should have a name' do - expect(subject.name).to eq 'task1' - end - - it 'should have a node' do - expect(subject.node).to eq node1 - end - - it 'should have a status' do - expect(subject.status).to eq :pending - end - - it 'should have a required' do - expect(subject.backward_dependencies).to eq Set.new - end - - it 'should have a data' do - expect(subject.data).to eq Hash.new - end - - it 'should set name as a string' do - subject.name = 'task3' - expect(subject.name).to eq 'task3' - subject.name = 1 - expect(subject.name).to eq '1' - end - - it 'should set node only to a node object' do - subject.node = node2 - expect(subject.node).to eq node2 - expect do - subject.node = 'node3' - end.to raise_error Deployment::InvalidArgument, /Not a node/ - end - - it 'should set only a correct status' do - subject.status = :successful - expect(subject.status).to eq :successful - subject.status = 'failed' - expect(subject.status).to eq :failed - expect do - subject.status = 'on' - end.to raise_error Deployment::InvalidArgument, /Invalid task status/ - end - - it 'can set data' do - subject.data = 'my data' - expect(subject.data).to eq 'my data' - end - - it 'can use dynamic status setters' do - subject.set_status_failed - expect(subject.status).to eq :failed - end - - it 'can determine its color' do - task2_2.after task2_1 - expect(task2_1.color).to eq :yellow - expect(task2_2.color).to eq :white - task2_1.status = :failed - expect(task2_1.color).to eq :red - expect(task2_2.color).to eq :orange - task2_1.status = :running - task2_2.status = :pending - expect(task2_1.color).to eq :blue - expect(task2_2.color).to eq :white - task2_1.status = :successful - task2_2.status = :pending - expect(task2_1.color).to eq :green - expect(task2_2.color).to eq :yellow - task2_1.status = :skipped - task2_2.status = :pending - expect(task2_1.color).to eq :violet - expect(task2_2.color).to eq :yellow - end - - it 'can determine the task weight for a single node' do - task2.after task1 - task3.after task2 - expect(task3.weight).to eq 0 - expect(task2.weight).to eq 1 - expect(task1.weight).to eq 2 - end - - it 'can determine the task weight between nodes' do - task2.after task1 - task2_1.after task2 - expect(task2.weight).to eq 10 - expect(task1.weight).to eq 11 - expect(task2_1.weight).to eq 0 - end - - it 'should add itself to the node when the task is created' do - expect(node1.task_present? 'task5').to eq false - Deployment::Task.new 'task5', node1 - expect(node1.task_present? 'task5').to eq true - end - end - - context '#dependencies basic' do - it 'can add a backward dependency task' do - subject.dependency_backward_add task2 - expect(subject.backward_dependencies).to eq Set[task2] - end - - it 'can add a forward dependency task' do - subject.dependency_forward_add task2 - expect(subject.forward_dependencies).to eq Set[task2] - end - - it 'can only add tasks as backward dependencies' do - expect do - subject.dependency_backward_add 'dep1' - end.to raise_error Deployment::InvalidArgument, /should be a task/ - end - - it 'can only add tasks as forward dependencies' do - expect do - subject.dependency_forward_add 'dep1' - end.to raise_error Deployment::InvalidArgument, /should be a task/ - end - - it 'will not try to add dependency to self' do - task1.dependency_backward_add task1 - expect(task1.dependency_backward_present? task1).to eq false - task1.dependency_forward_add task1 - expect(task1.dependency_forward_present? task1).to eq false - end - - it 'can determine if there are backward dependencies' do - expect(subject.dependency_backward_any?).to eq false - subject.dependency_backward_add task2 - expect(subject.dependency_backward_any?).to eq true - end - - it 'can determine if there are forward dependencies' do - expect(subject.dependency_forward_any?).to eq false - subject.dependency_forward_add task2 - expect(subject.dependency_forward_any?).to eq true - end - - it 'can remove a forward dependency' do - subject.dependency_backward_add task2 - expect(subject.backward_dependencies).to eq Set[task2] - subject.dependency_backward_remove task2 - expect(subject.backward_dependencies).to eq Set.new - end - - it 'can remove a backward dependency' do - subject.dependency_forward_add task2 - expect(subject.forward_dependencies).to eq Set[task2] - subject.dependency_forward_remove task2 - expect(subject.forward_dependencies).to eq Set.new - end - - it 'can check if a task has the specific backward dependency' do - expect(subject.dependency_backward_present? task2).to eq false - subject.dependency_backward_add task2 - expect(subject.dependency_backward_present? task2).to eq true - expect(subject.dependency_backward_present? task3).to eq false - end - - it 'can check if a task has the specific forward dependency' do - expect(subject.dependency_forward_present? task2).to eq false - subject.dependency_forward_add task2 - expect(subject.dependency_forward_present? task2).to eq true - expect(subject.dependency_forward_present? task3).to eq false - end - - it 'can iterate through backward dependencies' do - subject.dependency_backward_add task2 - dependencies = subject.each_backward_dependency.to_a - expect(dependencies).to eq [task2] - end - - it 'can iterate through forward dependencies' do - subject.dependency_forward_add task2 - dependencies = subject.each_forward_dependency.to_a - expect(dependencies).to eq [task2] - end - - it 'defaults all actions to the backward dependencies' do - actions = { - :dependency_add => :dependency_backward_add, - :dependency_remove => :dependency_backward_remove, - :dependency_present? => :dependency_backward_present?, - :dependency_any? => :dependency_backward_any?, - :each => :each_backward_dependency, - } - actions.each do |method_alias, method_name| - expect(subject.method method_alias).to eq subject.method method_name - end - end - end - - context '#dependencies advanced' do - it 'dependencies are met if there are no dependencies' do - expect(task1.dependency_backward_any?).to eq false - expect(task1.ready?).to eq true - end - - it 'there are no dependency errors if there are no dependencies' do - expect(task1.dependency_backward_any?).to eq false - expect(task1.failed?).to eq false - end - - it 'can detect that task is ready to run by its status' do - expect(task1.ready?).to eq true - task1.status = :successful - expect(task1.ready?).to eq false - task1.status = :skipped - expect(task1.ready?).to eq false - task1.status = :failed - expect(task1.ready?).to eq false - end - - it 'can detect different task statuses' do - task1.status = :pending - expect(task1.pending?).to eq true - task1.status = :successful - expect(task1.successful?).to eq true - task1.status = :skipped - expect(task1.skipped?).to eq true - task1.status = :running - expect(task1.running?).to eq true - task1.status = :failed - expect(task1.failed?).to eq true - end - - it 'can detect that task is ready by dependencies' do - task1.dependency_backward_add task2 - expect(task1.ready?).to eq false - task2.status = :successful - expect(task1.ready?).to eq true - end - - it 'can detect that direct dependencies are failed' do - task1.dependency_backward_add task2 - expect(task1.failed?).to eq false - expect(task2.failed?).to eq false - task2.status = :failed - expect(task1.failed?).to eq true - expect(task2.failed?).to eq true - end - - it 'can detect that far dependencies are failed' do - task1.dependency_backward_add task2 - task2.dependency_backward_add task3 - expect(task1.failed?).to eq false - expect(task2.failed?).to eq false - expect(task3.failed?).to eq false - task3.status = :failed - task2.poll_dependencies - task3.poll_dependencies - expect(task1.failed?).to eq true - expect(task2.failed?).to eq true - expect(task3.failed?).to eq true - end - - end - - context '#inspection' do - - it 'can to_s' do - expect(subject.to_s).to eq 'Task[task1/node1]' - end - - it 'can inspect' do - expect(subject.inspect).to eq 'Task[task1/node1]{Status: pending}' - subject.status = :failed - expect(subject.inspect).to eq 'Task[task1/node1]{Status: failed}' - subject.dependency_backward_add task2 - expect(subject.inspect).to eq 'Task[task1/node1]{Status: failed After: Task[task2/node1]}' - subject.dependency_backward_add task2_1 - expect(subject.inspect).to eq 'Task[task1/node1]{Status: failed After: Task[task1/node2], Task[task2/node1]}' - subject.dependency_forward_add task2_2 - expect(subject.inspect).to eq 'Task[task1/node1]{Status: failed After: Task[task1/node2], Task[task2/node1] Before: Task[task2/node2]}' - end - end - - context '#concurrency' do - - context 'concurrency is not defined' do - it 'concurrency is NOT present' do - is_expected.not_to be_concurrency_present - end - - it 'concurrency is available' do - is_expected.to be_concurrency_available - end - - it 'will not try to change the current concurrency when the status of the task changes' do - subject.status = :running - expect(cluster.task_concurrency[subject.name].current).to eq 0 - subject.status = :successful - expect(cluster.task_concurrency[subject.name].current).to eq 0 - end - - it 'ready task is counted as a ready task' do - subject.status = :ready - is_expected.to be_ready - end - end - - context 'defined, but maximum is not set' do - before(:each) do - cluster.task_concurrency.create 'task1' - end - - it 'concurrency is NOT present' do - is_expected.not_to be_concurrency_present - end - - it 'concurrency is available' do - is_expected.to be_concurrency_available - end - - it 'will not try to change the current concurrency when the status of the task changes' do - subject.status = :running - expect(cluster.task_concurrency[subject.name].current).to eq 0 - subject.status = :successful - expect(cluster.task_concurrency[subject.name].current).to eq 0 - end - - it 'ready task is counted as a ready task' do - subject.status = :ready - is_expected.to be_ready - end - end - - context 'maximum is set and active' do - before(:each) do - cluster.task_concurrency['task1'].maximum = 2 - cluster.task_concurrency['task1'].current = 1 - end - - it 'concurrency is present' do - is_expected.to be_concurrency_present - end - - it 'concurrency is available' do - is_expected.to be_concurrency_available - end - - it 'can change the current concurrency when the status of the task changes' do - subject.status = :running - expect(cluster.task_concurrency[subject.name].current).to eq 2 - subject.status = :successful - expect(cluster.task_concurrency[subject.name].current).to eq 1 - end - - it 'do nothing when the status of the task was updated but not changed' do - subject.status = :running - expect(cluster.task_concurrency[subject.name].current).to eq 2 - subject.status = :running - expect(cluster.task_concurrency[subject.name].current).to eq 2 - end - - it 'ready task is counted as a ready task' do - subject.status = :ready - is_expected.to be_ready - end - end - - context 'maximum is set and not active' do - before(:each) do - cluster.task_concurrency['task1'].maximum = 1 - cluster.task_concurrency['task1'].current = 2 - end - - it 'concurrency is present' do - is_expected.to be_concurrency_present - end - - it 'concurrency is NOT available' do - is_expected.not_to be_concurrency_available - end - - it 'can change the current concurrency when the status of the task changes' do - subject.status = :running - expect(cluster.task_concurrency[subject.name].current).to eq 3 - subject.status = :successful - expect(cluster.task_concurrency[subject.name].current).to eq 2 - end - - it 'ready task is NOT counted as a ready task' do - subject.status = :ready - is_expected.not_to be_ready - end - end - end - - context '#run' do - it 'can run the task on the node' do - node1.expects(:run).with task1 - task1.run - end - - end - -end diff --git a/spec/unit/granular_deployment_spec.rb b/spec/unit/granular_deployment_spec.rb deleted file mode 100644 index fab3a7a9..00000000 --- a/spec/unit/granular_deployment_spec.rb +++ /dev/null @@ -1,397 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -require File.join(File.dirname(__FILE__), '../spec_helper') - -describe "Granular deployment engine" do - include SpecHelpers - - let(:ctx) { - ctx = mock - ctx.stubs(:task_id) - ctx.stubs(:deploy_log_parser).returns(Astute::LogParser::NoParsing.new) - ctx.stubs(:status).returns({}) - reporter = mock - reporter.stubs(:report) - up_reporter = Astute::ProxyReporter::DeploymentProxyReporter.new(reporter, nodes) - ctx.stubs(:reporter).returns(up_reporter) - ctx - } - - let(:deploy_engine) do - Astute::DeploymentEngine::GranularDeployment.new(ctx) - end - - let(:upload_file_hook) do - { - "priority" => 100, - "type" => "upload_file", - "fail_on_error" => false, - "diagnostic_name" => "upload-example-1.0", - "uids" => ['2', '3'], - "parameters" => { - "path" => "/etc/yum.repos.d/fuel_awesome_plugin-0.1.0.repo", - "data" => "[fuel_awesome_plugin-0.1.0]\\nname=Plugin fuel_awesome_plugin-0.1.0 repository\\nbaseurl=http => //10.20.0.2 => 8080/plugins/fuel_awesome_plugin-0.1.0/repositories/centos\\ngpgcheck=0" - } - } - end - - let(:sync_hook) do - { - "priority" => 200, - "type" => "sync", - "fail_on_error" => false, - "diagnostic_name" => "sync-example-1.0", - "uids" => ['1', '2'], - "parameters" => { - "src" => "rsync://10.20.0.2/plugins/fuel_awesome_plugin-0.1.0/deployment_scripts/", - "dst" => "/etc/fuel/plugins/fuel_awesome_plugin-0.1.0/" - } - } - end - - let(:shell_hook) do - { - "priority" => 100, - "type" => "shell", - "fail_on_error" => false, - "diagnostic_name" => "shell-example-1.0", - "uids" => ['1','2','3'], - "parameters" => { - "cmd" => "./deploy.sh", - "cwd" => "/etc/fuel/plugins/fuel_awesome_plugin-0.1.0/", - "timeout" => 60 - } - } - end - - let(:puppet_hook) do - { - "priority" => 300, - "type" => "puppet", - "fail_on_error" => false, - "diagnostic_name" => "puppet-example-1.0", - "uids" => ['1', '3'], - "parameters" => { - "puppet_manifest" => "cinder_glusterfs.pp", - "puppet_modules" => "modules", - "cwd" => "/etc/fuel/plugins/plugin_name-1.0", - "timeout" => 42, - "retries" => 123 - } - } - end - - let(:nodes) do - [ - { - 'uid' => '45', - 'priority' => 200, - 'role' => 'ceph', - 'tasks' => [ - { - 'priority' => 100, - 'type' => 'puppet', - 'uids' => ['45'] - }, - { - 'priority' => 300, - 'type' => 'puppet', - 'uids' => ['45'] - } - ] - }, - { - 'uid' => '46', - 'priority' => 200, - 'role' => 'compute', - 'tasks' => [ - { - 'priority' => 100, - 'type' => 'puppet', - 'uids' => ['46'] - }, - { - 'priority' => 200, - 'type' => 'puppet', - 'uids' => ['46'] - }, - { - 'priority' => 300, - 'type' => 'puppet', - 'uids' => ['46'] - } - ] - } - ] - end - - describe '#deploy_piace' do - it 'should run tasks using puppet task' do - ctx.stubs(:report_and_update_status) - deploy_engine.expects(:deploy_nodes).with(nodes) - - deploy_engine.deploy_piece(nodes) - end - - it 'should not run if no tasks exists' do - nodes[0]['tasks'] = [] - nodes[1]['tasks'] = [] - - deploy_engine.expects(:deploy_nodes).never - - ready_report = {'nodes' => [ - {'uid' => '45', - 'status' => 'ready', - 'role' => 'ceph', - 'progress' => 100}, - {'uid' => '46', - 'status' => 'ready', - 'role' => 'compute', - 'progress' => 100}]} - - ctx.reporter.expects(:report).once.with(ready_report) - - deploy_engine.deploy_piece(nodes) - end - - it 'should process only nodes with tasks' do - ctx.stubs(:report_and_update_status) - nodes[0]['tasks'] = [] - - deploy_engine.expects(:deploy_nodes).with([nodes[1]]) - - deploy_engine.deploy_piece(nodes) - end - - it 'should report error status if error raised' do - error_report = {'nodes' => - [ - { - 'uid' => '45', - 'status' => 'error', - 'role' => 'ceph', - 'error_type' => 'deploy' - }, - { - 'uid' => '46', - 'status' => 'error', - 'role' => 'compute', - 'error_type' => 'deploy' - } - ] - } - - ctx.expects(:report_and_update_status).with(error_report) - deploy_engine.expects(:deploy_nodes).with(nodes).raises("Error simulation") - - deploy_engine.deploy_piece(nodes) rescue nil - end - - it 'should not raise errir if no nodes was sent' do - expect{ deploy_engine.deploy_piece([])}.to_not raise_error - end - - it 'should prepare log for parsing' do - deploy_engine.stubs(:deploy_nodes).with(nodes) - - ctx.deploy_log_parser.expects(:prepare).with(nodes).once - deploy_engine.deploy_piece(nodes) - end - end # 'deploy_piace' - - describe '#deploy_nodes' do - it 'run deploy task on nodes' do - ctx.stubs(:report_and_update_status) - deploy_engine.expects(:run_task).times(5) - - deploy_engine.stubs(:check_status).with('46') - .returns('deploying').then - .returns('ready').then - .returns('deploying').then - .returns('ready').then - .returns('deploying').then - .returns('ready') - - deploy_engine.stubs(:check_status).with('45') - .returns('deploying').then - .returns('ready').then - .returns('deploying').then - .returns('ready') - - deploy_engine.deploy_piece(nodes) - end - - it 'report status about nodes' do - deploy_engine.stubs(:run_task).times(5) - - deploy_engine.stubs(:check_status).with('46') - .returns('deploying').then - .returns('ready').then - .returns('deploying').then - .returns('ready').then - .returns('deploying').then - .returns('ready') - - deploy_engine.stubs(:check_status).with('45') - .returns('deploying').then - .returns('ready').then - .returns('deploying').then - .returns('ready') - - succeed_report_node1 = { - 'nodes' => [ - { - 'uid' => '45', - 'status' => 'ready', - 'role' => 'ceph', - 'progress' => 100, - 'task' => {'priority' => 300, 'type' => 'puppet', 'uids' => ['45']} - } - ] - } - succeed_report_node2 = { - 'nodes' => [ - { - 'uid' => '46', - 'status' => 'ready', - 'role' => 'compute', - 'progress' => 100, - 'task' => {'priority' => 300, 'type' => 'puppet', 'uids' => ['46']} - } - ] - } - - ctx.expects(:report_and_update_status).with(succeed_report_node1).times(1) - ctx.expects(:report_and_update_status).with(succeed_report_node2).times(1) - - deploy_engine.deploy_piece(nodes) - end - - it 'handle error nodes and do not process next tasks on problem node' do - deploy_engine.expects(:run_task).times(4) - - deploy_engine.stubs(:check_status).with('46') - .returns('deploying').then - .returns('ready').then - .returns('deploying').then - .returns('error') - - deploy_engine.stubs(:check_status).with('45') - .returns('deploying').then - .returns('ready').then - .returns('deploying').then - .returns('ready') - - mixed_report = {'nodes' => - [ - { - 'uid' => '45', - 'status' => 'ready', - 'role' => 'ceph', - 'progress' => 100, - 'task' => {'priority' => 300, 'type' => 'puppet', 'uids' => ['45']} - }, - { - 'uid' => '46', - 'status' => 'error', - 'error_type' => 'deploy', - 'role' => 'compute', - 'task' => {'priority' => 200, 'type' => 'puppet', 'uids' => ['46']} - } - ] - } - ctx.expects(:report_and_update_status).with(mixed_report) - - deploy_engine.deploy_piece(nodes) - end - - it 'handle sutuation then all nodes failed' do - deploy_engine.expects(:run_task).times(2) - - deploy_engine.stubs(:check_status).with('46') - .returns('deploying').then - .returns('error') - - deploy_engine.stubs(:check_status).with('45') - .returns('deploying').then - .returns('error') - - error_report = {'nodes' => - [ - { - 'uid' => '45', - 'status' => 'error', - 'error_type' => 'deploy', - 'role' => 'ceph', - 'task' => {'priority' => 100, 'type' => 'puppet', 'uids' => ['45']} - }, - { - 'uid' => '46', - 'status' => 'error', - 'error_type' => 'deploy', - 'role' => 'compute', - 'task' => {'priority' => 100, 'type' => 'puppet', 'uids' => ['46']} - } - ] - } - ctx.expects(:report_and_update_status).with(error_report) - deploy_engine.deploy_piece(nodes) - end - - it 'should fail deployment if handler not provided' do - deploy_engine.expects(:run_task).times(2) - deploy_engine.stubs(:check_status).returns('unknown_handler') - - error_report = {'nodes' => - [ - { - 'uid' => '45', - 'status' => 'error', - 'error_type' => 'deploy', - 'role' => 'ceph' - }, - { - 'uid' => '46', - 'status' => 'error', - 'error_type' => 'deploy', - 'role' => 'compute' - } - ] - } - - ctx.expects(:report_and_update_status).with(error_report) - expect {deploy_engine.deploy_piece(nodes) } - .to raise_error(/Internal error. Known status/) - end - - end #deploy_nodes - - describe '#puppet_hook' do - it 'should use retries from task parameters' do - deploy_engine.instance_variable_set(:@nodes_by_uid, {}) - task = deploy_engine.puppet_task(1, puppet_hook) - expect(task.instance_variable_get(:@retries)).to eql(puppet_hook['parameters']['retries']) - end - - it 'should use default retries if not provided' do - puppet_hook['parameters'].delete('retries') - deploy_engine.instance_variable_set(:@nodes_by_uid, {}) - task = deploy_engine.puppet_task(1, puppet_hook) - expect(task.instance_variable_get(:@retries)).to eql(Astute.config.puppet_retries) - end - end - -end # 'describe' diff --git a/spec/unit/image_provision_spec.rb b/spec/unit/image_provision_spec.rb deleted file mode 100644 index 484d7248..00000000 --- a/spec/unit/image_provision_spec.rb +++ /dev/null @@ -1,225 +0,0 @@ -# Copyright 2016 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require File.join(File.dirname(__FILE__), '../spec_helper') -require 'json' - -describe Astute::ImageProvision do - include SpecHelpers - - let(:ctx) { mock_ctx } - - let(:provisioner) do - provisioner = Astute::ImageProvision - provisioner.stubs(:sleep) - provisioner - end - - let(:reporter) do - reporter = mock('reporter') - reporter.stub_everything - reporter - end - - let(:upload_task) { mock('upload_task') } - - let(:nodes) do - [ - { - 'uid' => 5, - "profile" => "ubuntu_1404_x86_64", - "name_servers_search" => "test.domain.local" - }, - { - 'uid' => 6, - "profile" => "ubuntu_1404_x86_64", - "name_servers_search" => "test.domain.local" - } - ] - end - - describe ".provision" do - it 'should upload provision info' do - provisioner.stubs(:run_provision) - provisioner.expects(:upload_provision).with(ctx, nodes) - - provisioner.provision(ctx, nodes) - end - - it 'should run provision command' do - provisioner.stubs(:upload_provision).returns([nodes.map {|n| n['uid']}, []]) - provisioner.expects(:run_provision).with(ctx, nodes.map {|n| n['uid']}, []) - - provisioner.provision(ctx, nodes) - end - - it 'should exclude failed nodes from running provision command' do - provisioner.stubs(:upload_provision).returns([[nodes.first['uid']], [nodes.last['uid']]]) - provisioner.expects(:run_provision).with(ctx, [nodes.first['uid']], [nodes.last['uid']]) - - provisioner.provision(ctx, nodes) - end - - it 'should return failed uids if catch exception' do - provisioner.stubs(:upload_provision).returns([[nodes.first['uid']], [nodes.last['uid']]]) - provisioner.stubs(:run_provision).raises(Astute::AstuteError) - - expect(provisioner.provision(ctx, nodes)).to eql([6]) - end - end - - describe ".reboot" do - - let(:reboot_hook) do - { - "priority" => 100, - "type" => "reboot", - "fail_on_error" => false, - "id" => 'reboot_provisioned_nodes', - "uids" => node_ids, - "parameters" => { - "timeout" => Astute.config.reboot_timeout - } - } - end - - let(:node_ids) { ['1', '2'] } - - it 'should reboot nodes using reboot nailgun hook' do - nailgun_hook = mock('nailgun_hook') - Astute::NailgunHooks.expects(:new) - .with([reboot_hook], ctx, 'provision') - .returns(nailgun_hook) - nailgun_hook.expects(:process).once - provisioner.reboot(ctx, node_ids, _task_id="reboot_provisioned_nodes") - end - - it 'should not run hook if no nodes present' do - Astute::NailgunHooks.expects(:new).never - provisioner.reboot(ctx, [], _task_id="reboot_provisioned_nodes") - end - end - - describe ".upload_provision" do - - it 'should upload provision data on all nodes' do - upload_task.stubs(:successful?).returns(true) - - provisioner.expects(:upload_provision_data) - .with(ctx, nodes[0]) - .returns(true) - provisioner.expects(:upload_provision_data) - .with(ctx, nodes[1]) - .returns(false) - - provisioner.upload_provision(ctx, nodes) - end - - it 'should return uids to provision and fail uids' do - provisioner.stubs(:upload_provision_data) - .with(ctx, nodes[0]) - .returns(false) - provisioner.stubs(:upload_provision_data) - .with(ctx, nodes[1]) - .returns(true) - - expect(provisioner.upload_provision(ctx, nodes)).to eql([[6],[5]]) - end - end - - - describe ".upload_provision_data" do - let(:node) do - { - 'uid' => 5, - "profile" => "ubuntu_1404_x86_64", - "name_servers_search" => "test.domain.local" - } - end - - let(:upload_file_task) do - { - "id" => 'upload_provision_data', - "node_id" => node['uid'], - "parameters" => { - "path" => '/tmp/provision.json', - "data" => node.to_json, - "user_owner" => 'root', - "group_owner" => 'root', - "overwrite" => true, - "timeout" => Astute.config.upload_timeout - } - } - end - - before(:each) do - provisioner.stubs(:sleep) - end - - it 'should upload provision using upload file task' do - Astute::UploadFile.expects(:new) - .with(upload_file_task, ctx) - .returns(upload_task) - upload_task.stubs(:sync_run).returns(true) - - provisioner.upload_provision_data(ctx, node) - end - - it 'should return task status after finish' do - Astute::UploadFile.stubs(:new).returns(upload_task) - upload_task.expects(:sync_run).returns(false) - - expect(provisioner.upload_provision_data(ctx, node)).to eql(false) - end - end - - describe ".run_provision" do - before do - provisioner.stubs(:sleep) - end - - it 'should run provision on nodes using shell magent' do - Astute::Shell.any_instance.stubs(:process) - Astute::Shell.any_instance.expects(:run).once - Astute::Shell.any_instance.expects(:finished?).times(3) - .returns(false). - then.returns(true) - Astute::Shell.any_instance.expects(:failed?).once.returns(false) - - provisioner.run_provision(ctx, [5], []) - end - - it 'should run return failed nodes' do - Astute::Shell.any_instance.stubs(:process) - Astute::Shell.any_instance.expects(:run).twice - Astute::Shell.any_instance.stubs(:finished?).returns(true) - Astute::Shell.any_instance.expects(:failed?).times(2) - .returns(false) - .then.returns(true) - - expect(provisioner.run_provision(ctx, [5, 6], [])).to eql([6]) - end - - it 'should not erase info about alread failed nodes' do - provisioner.stubs(:run_shell_task).once.returns([6]) - failed_uids = [3] - expect(provisioner.run_provision( - ctx, - nodes.map { |n| n['uid'] }, - failed_uids) - ).to eql([3,6]) - end - end - -end diff --git a/spec/unit/logparser_spec.rb b/spec/unit/logparser_spec.rb deleted file mode 100644 index a4ff7274..00000000 --- a/spec/unit/logparser_spec.rb +++ /dev/null @@ -1,394 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -require File.join(File.dirname(__FILE__), '../spec_helper') - -include Astute - -describe LogParser do - def get_statistics_variables(progress_table) - # Calculate some statistics variables: expectancy, standart deviation and - # correlation coefficient between real and ideal progress calculation. - total_time = 0 - real_expectancy = 0 - real_sqr_expectancy = 0 - prev_event_date = nil - progress_table.each do |el| - date = el[:date] - prev_event_date = date unless prev_event_date - progress = el[:progress].to_f - period = date - prev_event_date - hours, mins, secs, frac = Date::day_fraction_to_time(period) - period_in_sec = hours * 60 * 60 + mins * 60 + secs - total_time += period_in_sec - real_expectancy += period_in_sec * progress - real_sqr_expectancy += period_in_sec * progress ** 2 - el[:time_delta] = period_in_sec - prev_event_date = date - end - - # Calculate standart deviation for real progress distibution. - real_expectancy = real_expectancy.to_f / total_time - real_sqr_expectancy = real_sqr_expectancy.to_f / total_time - real_standart_deviation = Math.sqrt(real_sqr_expectancy - real_expectancy ** 2) - - # Calculate PCC (correlation coefficient). - ideal_sqr_expectancy = 0 - ideal_expectancy = 0 - t = 0 - ideal_delta = 100.0 / total_time - mixed_expectancy = 0 - progress_table.each do |el| - t += el[:time_delta] - ideal_progress = t * ideal_delta - ideal_expectancy += ideal_progress * el[:time_delta] - ideal_sqr_expectancy += ideal_progress ** 2 * el[:time_delta] - el[:ideal_progress] = ideal_progress - mixed_expectancy += el[:progress] * ideal_progress * el[:time_delta] - end - - ideal_expectancy = ideal_expectancy / total_time - ideal_sqr_expectancy = ideal_sqr_expectancy / total_time - mixed_expectancy = mixed_expectancy / total_time - ideal_standart_deviation = Math.sqrt(ideal_sqr_expectancy - ideal_expectancy ** 2) - covariance = mixed_expectancy - ideal_expectancy * real_expectancy - pcc = covariance / (ideal_standart_deviation * real_standart_deviation) - - statistics = { - 'real_expectancy' => real_expectancy, - 'real_sqr_expectancy' => real_sqr_expectancy, - 'real_standart_deviation' => real_standart_deviation, - 'ideal_expectancy' => ideal_expectancy, - 'ideal_sqr_expectancy' => ideal_sqr_expectancy, - 'ideal_standart_deviation' => ideal_standart_deviation, - 'mixed_expectancy' => mixed_expectancy, - 'covariance' => covariance, - 'pcc' => pcc, - 'total_time' => total_time, - } - - return statistics - end - - def get_next_line(fo, date_regexp, date_format) - until fo.eof? - line = fo.readline - date_string = line.match(date_regexp) - if date_string - date = DateTime.strptime(date_string[0], date_format) - return line, date - end - end - end - - def get_next_lines_by_date(fo, now, date_regexp, date_format) - lines = '' - until fo.eof? - pos = fo.pos - line, date = get_next_line(fo, date_regexp, date_format) - if date <= now - lines += line - else - fo.pos = pos - return lines - end - end - return lines - end - - context "Correlation coeff. (PCC) of Provisioning progress bar calculation" do - def provision_parser_wrapper( - node, - deploy_parser=Astute::LogParser::ParseProvisionLogs.new, - date_regexp = '^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}', - date_format = '%Y-%m-%dT%H:%M:%S', - path = nil - ) - uids = [node['uid']] - nodes = [node] - time_delta = 5.0/24/60/60 - log_delay = 6*time_delta - - Dir.mktmpdir do |dir| - Astute::LogParser::PATH_PREFIX.replace("#{dir}/") - Astute::LogParser::ParseImageBuildLogs::PATH_PREFIX.replace("#{dir}/") - pattern_spec = deploy_parser.get_pattern_for_node(node) - # Create temp log files and structures. - path = "#{pattern_spec['path_prefix']}" + (path || "#{node['hostname']}/#{pattern_spec['filename']}") - FileUtils.mkdir_p(File.dirname(path)) - node['file'] = File.open(path, 'w') - src_filename = File.join(File.dirname(__FILE__), "..", "example-logs", node['src_filename']) - node['src'] = File.open(src_filename) - line, date = get_next_line(node['src'], date_regexp, date_format) - node['src'].pos = 0 - node['now'] = date - log_delay - node['progress_table'] ||= [] - - # End 'while' cycle if reach EOF at all src files. - until node['src'].eof? - # Copy logs line by line from example logfile to tempfile and collect progress for each step. - lines, date = get_next_lines_by_date(node['src'], node['now'], date_regexp, date_format) - node['file'].write(lines) - node['file'].flush - node['last_lines'] = lines - - DateTime.stubs(:now).returns(node['now']) - node_progress = deploy_parser.progress_calculate(uids, nodes)[0] - node['progress_table'] << {:date => node['now'], :progress => node_progress['progress']} - node['now'] += time_delta - end - - nodes.each do |node| - node['statistics'] = get_statistics_variables(node['progress_table']) - end - # Clear temp files. - node['file'].close - File.unlink(node['file'].path) - end - - return node - end - - it "should be greather than 0.98 for Image Based Provisioning building" do - node = { - 'uid' => '1', - 'ip' => '1.0.0.1', - 'hostname' => 'slave-1.domain.tld', - 'role' => 'controller', - 'src_filename' => 'fuel-agent-env-1.log_', - 'profile' => 'ubuntu_1404_x86_64'} - - deploy_parser = Astute::LogParser::ParseImageBuildLogs.new - deploy_parser.cluster_id = 1 - calculated_node = provision_parser_wrapper( - node, - deploy_parser, - date_regexp = '^\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}', - date_format = '%Y-%m-%d %H:%M:%S', - path="fuel-agent-env-1.log") - calculated_node['statistics']['pcc'].should > 0.98 - end - - it "should be greather than 0.80 for Image Based Provisioning" do - node = { - 'uid' => '1', - 'ip' => '1.0.0.1', - 'hostname' => 'slave-1.domain.tld', - 'role' => 'controller', - 'src_filename' => 'fuel-agent.log_', - 'profile' => 'ubuntu_1404_x86_64', - 'ks_meta' => {'image_data'=>[]} - } - calculated_node = provision_parser_wrapper(node) - calculated_node['statistics']['pcc'].should > 0.80 - end - - end - - context "Dirsize-based progress calculation" do - def create_dir_with_size(size, given_opts={}) - raise "The required size should be a non-negative number" if size < 0 - default_opts = { - :chunksize => 10000, - :tmpdir => Dir::tmpdir, - :objects => [], - } - opts = default_opts.merge(given_opts) - if !opts[:chunksize].instance_of?(Fixnum) || opts[:chunksize] <= 0 - raise "The 'chunksize' option should be a positive number" - end - raise "The 'tmpdir' option should be a path to a existent directory" if !opts[:tmpdir].instance_of?(String) - raise "The 'objects' option should be an array" if !opts[:objects].instance_of?(Array) - - dir = Dir::mktmpdir(nil, opts[:tmpdir]) - opts[:objects] << dir - chunk = 'A' * opts[:chunksize] - while size >= opts[:chunksize] - file = Tempfile::new('prefix', dir) - file.write(chunk) - file.close - opts[:objects] << file - size -= opts[:chunksize] - end - if size > 0 - file = Tempfile::new('prefix', dir) - file.write('A' * size) - file.close - opts[:objects] << file - end - - return {:path => dir, :objects => opts[:objects]} - end - - it "should correctly calculate size of directory" do - size = 10**6 - dir_info = create_dir_with_size(size) - dir = dir_info[:path] - nodes = [ - {:uid => '1', - :path_items => [ - {:max_size => size*100/75, - :path => dir} - ] - } - ] - correct_progress = [ - {'uid' => '1', - 'progress' => 75} - ] - dirsize_parser = Astute::LogParser::DirSizeCalculation.new(nodes) - dirsize_parser.progress_calculate(['1'], nil).should eql(correct_progress) - FileUtils::remove_entry_secure dir - end - - it "should correctly calculate size of nested directories" do - size = 10**6 - dir_info = create_dir_with_size(size) - dir = dir_info[:path] - dir_info = create_dir_with_size(size, {:tmpdir => dir, :objects => dir_info[:objects]}) - nodes = [ - {:uid => '1', - :path_items => [ - {:max_size => size*4, - :path => dir} - ] - } - ] - correct_progress = [ - {'uid' => '1', - 'progress' => 50} - ] - dirsize_parser = Astute::LogParser::DirSizeCalculation.new(nodes) - dirsize_parser.progress_calculate(['1'], nil).should eql(correct_progress) - FileUtils::remove_entry_secure dir - end - - it "should return zero if there is no directory" do - nodes = [ - {:uid => '1', - :path_items => [ - {:max_size => 10000, - :path => '/the-dir-that-should-not-exist'} - ] - } - ] - correct_progress = [ - {'uid' => '1', - 'progress' => 0} - ] - dirsize_parser = Astute::LogParser::DirSizeCalculation.new(nodes) - dirsize_parser.progress_calculate(['1'], nil).should eql(correct_progress) - end - - it "should return zero if no items is propagated" do - nodes = [ - {:uid => '1', - :path_items => [] - } - ] - correct_progress = [ - {'uid' => '1', - 'progress' => 0} - ] - dirsize_parser = Astute::LogParser::DirSizeCalculation.new(nodes) - dirsize_parser.progress_calculate(['1'], nil).should eql(correct_progress) - end - end - - context "Dirsize-based weight reassignment" do - it "should correctly assign weights to unweighted items" do - nodes = [ - {:uid => '1', - :path_items => [{}, {}, {}, {}] - } - ] - dirsize_parser = Astute::LogParser::DirSizeCalculation.new(nodes) - dirsize_parser.nodes.first[:path_items].each{|n| n[:weight].should eql(0.25)} - end - - it "should correctly recalculate weights of weighted items" do - nodes = [ - {:uid => '1', - :path_items => [ - {:weight => 10}, - {:weight => 30}, - ] - } - ] - dirsize_parser = Astute::LogParser::DirSizeCalculation.new(nodes) - items = dirsize_parser.nodes.first[:path_items] - items[0][:weight].should eql(0.25) - items[1][:weight].should eql(0.75) - end - - it "should correctly recalculate weights of mixed items" do - nodes = [ - {:uid => '1', - :path_items => [ - {:weight => 10}, - {:weight => 30}, - {}, {} - ] - } - ] - dirsize_parser = Astute::LogParser::DirSizeCalculation.new(nodes) - items = dirsize_parser.nodes.first[:path_items] - items[0][:weight].should eql(0.125) - items[1][:weight].should eql(0.375) - items[2][:weight].should eql(0.25) - items[3][:weight].should eql(0.25) - end - - it "should raise exception if a negative weight propagated" do - nodes = [ - {:uid => '1', - :path_items => [ - {:weight => -10}, - ] - } - ] - expect{Astute::LogParser::DirSizeCalculation.new(nodes)}.to \ - raise_error("Weight should be a non-negative number") - end - - it "should drop items with zero weight" do - nodes = [ - {:uid => '1', - :path_items => [ - {:weight => 0}, - {:weight => 0}, - ] - } - ] - dirsize_parser = Astute::LogParser::DirSizeCalculation.new(nodes) - dirsize_parser.nodes.first[:path_items].length.should eql(0) - end - - it "should not change initialization attribute" do - nodes = [ - {:uid => '1', - :path_items => [ - {:weight => 0}, - {:weight => 5}, - {} - ] - } - ] - dirsize_parser = Astute::LogParser::DirSizeCalculation.new(nodes) - dirsize_parser.nodes.should_not eql(nodes) - end - end - -end diff --git a/spec/unit/mclient_spec.rb b/spec/unit/mclient_spec.rb deleted file mode 100644 index 4e3191e9..00000000 --- a/spec/unit/mclient_spec.rb +++ /dev/null @@ -1,193 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -require File.join(File.dirname(__FILE__), '../spec_helper') - -include Astute - -describe MClient do - include SpecHelpers - - before(:each) do - @ctx = mock('context') - @ctx.stubs(:task_id) - @ctx.stubs(:reporter) - end - - let(:nodes) { [{'uid' => 1}, {'uid' => 2}, {'uid' => 3}] } - - it "should receive method call and process valid result correctly" do - rpcclient = mock_rpcclient(nodes) - mc_valid_result = mock_mc_result - - rpcclient.expects(:echo).with(:msg => 'hello world').once.returns([mc_valid_result]*3) - - mclient = MClient.new(@ctx, "faketest", nodes.map {|x| x['uid']}) - stats = mclient.echo(:msg => 'hello world') - stats.should eql([mc_valid_result]*3) - end - - it "should return even bad result if check_result=false" do - rpcclient = mock_rpcclient(nodes) - mc_valid_result = mock_mc_result - mc_error_result = mock_mc_result({:statuscode => 1, :sender => '2'}) - - rpcclient.expects(:echo).with(:msg => 'hello world').once.\ - returns([mc_valid_result, mc_error_result]) - - mclient = MClient.new(@ctx, "faketest", nodes.map {|x| x['uid']}, check_result=false) - stats = mclient.echo(:msg => 'hello world') - stats.should eql([mc_valid_result, mc_error_result]) - end - - it "should try to retry for non-responded nodes" do - rpcclient = mock('rpcclient') do - stubs(:progress=) - expects(:discover).with(:nodes => ['1','2','3']) - expects(:discover).with(:nodes => ['2','3']) - end - Astute::MClient.any_instance.stubs(:rpcclient).returns(rpcclient) - - mc_valid_result = mock_mc_result - mc_valid_result2 = mock_mc_result({:sender => '2'}) - - rpcclient.stubs(:echo).returns([mc_valid_result]).then. - returns([mc_valid_result2]) - - mclient = MClient.new(@ctx, "faketest", nodes.map {|x| x['uid']}, check_result=true, timeout=nil, retries=1) - expect { mclient.echo(:msg => 'hello world') }.to \ - raise_error(Astute::MClientTimeout, /MCollective agents 'faketest' '3' didn't respond./) - end - - it "should raise error if agent returns statuscode != 0" do - rpcclient = mock('rpcclient') do - stubs(:progress=) - expects(:discover).with(:nodes => ['1','2','3']) - expects(:discover).with(:nodes => ['2','3']) - end - Astute::MClient.any_instance.stubs(:rpcclient).returns(rpcclient) - - mc_valid_result = mock_mc_result - mc_failed_result = mock_mc_result({:sender => '2', :statuscode => 1}) - - rpcclient.stubs(:echo).returns([mc_valid_result]).then. - returns([mc_failed_result]).then. - returns([mc_failed_result]) - - mclient = MClient.new(@ctx, "faketest", nodes.map {|x| x['uid']}) - mclient.retries = 1 - expect { mclient.echo(:msg => 'hello world') }.to \ - raise_error(Astute::MClientError, /ID: 2 - Reason:/) - end - - context 'initialize' do - before(:each) do - Astute::MClient.any_instance.stubs(:sleep) - end - - it 'should try to initialize mclient 3 times' do - rpcclient = mock('rpcclient') do - stubs(:progress=) - stubs(:discover).with(:nodes => ['1','2','3']) - .raises(RuntimeError, 'test exception') - .then.raises(RuntimeError, 'test exception') - .then.returns(nil) - end - - Astute::MClient.any_instance.stubs(:rpcclient).returns(rpcclient) - mc_valid_result = mock_mc_result - - rpcclient.expects(:echo).with(:msg => 'hello world').once.returns([mc_valid_result]*3) - - mclient = MClient.new(@ctx, "faketest", nodes.map {|x| x['uid']}) - stats = mclient.echo(:msg => 'hello world') - stats.should eql([mc_valid_result]*3) - end - - it 'should raise error if initialize process fail after 3 attempts' do - rpcclient = mock('rpcclient') do - stubs(:progress=) - stubs(:discover).with(:nodes => ['1','2','3']) - .raises(RuntimeError, 'test exception').times(3) - end - - Astute::MClient.any_instance.stubs(:rpcclient).returns(rpcclient) - - expect { MClient.new(@ctx, "faketest", nodes.map {|x| x['uid']}) }.to \ - raise_error(Astute::MClientError, /test exception/) - end - - it 'should sleep 5 seconds between attempts' do - rpcclient = mock('rpcclient') do - stubs(:progress=) - stubs(:discover).with(:nodes => ['1','2','3']) - .raises(RuntimeError, 'test exception').times(3) - end - - Astute::MClient.any_instance.stubs(:rpcclient).returns(rpcclient) - - Astute::MClient.any_instance.expects(:sleep).with(5).times(2) - expect { MClient.new(@ctx, "faketest", nodes.map {|x| x['uid']}) }.to \ - raise_error(Astute::MClientError, /test exception/) - end - end # 'initialize' - - context 'mcollective call' do - before(:each) do - Astute::MClient.any_instance.stubs(:sleep) - end - - it 'should retries 3 times' do - rpcclient = mock_rpcclient(nodes) - mc_valid_result = mock_mc_result - - mclient = MClient.new(@ctx, "faketest", nodes.map {|x| x['uid']}, check_result=false) - rpcclient.stubs(:send) - .raises(RuntimeError, 'test exception') - .then.raises(RuntimeError, 'test exception') - .then.returns([mc_valid_result]) - - stats = mclient.echo(:msg => 'hello world') - stats.should eql([mc_valid_result]) - end - - it 'should raise exception if process fail after 3 attempts' do - rpcclient = mock_rpcclient(nodes) - - mclient = MClient.new(@ctx, "faketest", nodes.map {|x| x['uid']}, check_result=false) - rpcclient.stubs(:send) - .raises(RuntimeError, 'test send exception').times(3) - - expect { mclient.echo(:msg => 'hello world') }.to \ - raise_error(Astute::MClientError, /test send exception/) - end - - it 'should sleep rand time before repeat' do - rpcclient = mock_rpcclient(nodes) - mc_valid_result = mock_mc_result - - mclient = MClient.new(@ctx, "faketest", nodes.map {|x| x['uid']}, check_result=false) - rpcclient.stubs(:send) - .raises(RuntimeError, 'test exception') - .then.raises(RuntimeError, 'test exception') - .then.returns([mc_valid_result]) - - Astute::MClient.any_instance.expects(:sleep).times(2) - stats = mclient.echo(:msg => 'hello world') - stats.should eql([mc_valid_result]) - end - end # 'mcollective call' - -end # 'describe' diff --git a/spec/unit/mclients/puppet_mclient_spec.rb b/spec/unit/mclients/puppet_mclient_spec.rb deleted file mode 100644 index 2979e69f..00000000 --- a/spec/unit/mclients/puppet_mclient_spec.rb +++ /dev/null @@ -1,247 +0,0 @@ -# Copyright 2016 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require_relative('../../spec_helper') - -describe Astute::PuppetMClient do - include SpecHelpers - - let(:ctx) { - ctx = mock - ctx.stubs(:task_id) - ctx.stubs(:deploy_log_parser).returns(Astute::LogParser::NoParsing.new) - ctx.stubs(:status).returns({}) - reporter = mock - reporter.stubs(:report) - up_reporter = Astute::ProxyReporter::TaskProxyReporter.new(reporter) - ctx.stubs(:reporter).returns(up_reporter) - ctx - } - - let(:node_id) { 'test_id' } - let(:puppetd) { mock('puppet_mclient') } - - let(:options) do - { - 'cwd' => '/etc/puppet/mainfest/test', - 'command_prefix' => '', - 'puppet_manifest' => 'test_manifest.pp', - 'puppet_noop_run' => false, - 'raw_report' => true, - 'puppet_debug' => true, - 'puppet_modules' => '/etc/puppet/modules/test' - } - end - - let(:mco_puppet_stopped) do - { - :changes => {"total" => 1}, - :time => {"last_run" => 0}, - :resources => { - "changed_resources"=> "", - "failed_resources"=> "", - "failed" => 1, - "changed"=>0, - "total"=>0, - "restarted"=>0, - "out_of_sync"=>0 - }, - :status => "stopped", - :enabled => 1, - :stopped => 1, - :idling => 0, - :running => 0, - :lastrun=>1475516435, - :runtime => 58201 - } - end - - let(:mco_puppet_disabled) do - mco_puppet_stopped.merge( - :status => 'disabled', - :enabled => 0 - ) - end - - let(:mco_puppet_running) do - mco_puppet_stopped.merge( - :status => 'running', - :running => 1, - :stopped => 0 - ) - end - - let(:mco_puppet_unknown) do - mco_puppet_stopped.merge( - :status => nil - ) - end - - let(:mco_puppet_failed) do - mco_puppet_fail.merge( - :status => 'stopped', - :stopped => 1, - :running => 0 - ) - end - - let(:mco_puppet_succeed) do - mco_puppet_stopped.merge( - :time => {'last_run' => 1358428000}, - :resources => { - "changed_resources"=> "", - "failed_resources"=> "", - "failed" => 0, - "changed"=>1, - "total"=>1, - "restarted"=>0, - "out_of_sync"=>0 - }, - ) - end - - subject do - Astute::PuppetMClient.new(ctx, node_id, options) - end - - describe '#summary' do - it 'should return empty hash if no data' do - expect(subject.summary).to eq({}) - end - end - - describe '#node_id' do - it 'should return node id' do - expect(subject.node_id).to eq(node_id) - end - end - - describe '#manifest' do - it 'should return path to manifest' do - expect(subject.manifest).to \ - eq('/etc/puppet/mainfest/test/test_manifest.pp') - end - end - - describe '#status' do - before do - subject.stubs(:puppetd).returns(puppetd) - end - - it 'should return running status if puppet running' do - puppetd.expects(:last_run_summary).with( - :puppet_noop_run => options['puppet_noop_run'], - :raw_report => options['raw_report'] - ).returns([:data => mco_puppet_running]) - - expect(subject.status).to eq 'running' - expect(subject.summary).to eq mco_puppet_running - end - - it 'should return stopped status if puppet stopped' do - puppetd.expects(:last_run_summary).with( - :puppet_noop_run => options['puppet_noop_run'], - :raw_report => options['raw_report'] - ).returns([:data => mco_puppet_stopped]) - - expect(subject.status).to eq 'stopped' - expect(subject.summary).to eq mco_puppet_stopped - end - - it 'should return disabled status if puppet disabled' do - puppetd.expects(:last_run_summary).with( - :puppet_noop_run => options['puppet_noop_run'], - :raw_report => options['raw_report'] - ).returns([:data => mco_puppet_disabled]) - - expect(subject.status).to eq 'disabled' - expect(subject.summary).to eq mco_puppet_disabled - end - - it 'should return succeed status if puppet succeed' do - puppetd.expects(:last_run_summary).with( - :puppet_noop_run => options['puppet_noop_run'], - :raw_report => options['raw_report'] - ).returns([:data => mco_puppet_succeed]) - - expect(subject.status).to eq 'succeed' - expect(subject.summary).to eq mco_puppet_succeed - end - - it 'should return undefined status if puppet status unknow' do - puppetd.expects(:last_run_summary).with( - :puppet_noop_run => options['puppet_noop_run'], - :raw_report => options['raw_report'] - ).returns([:data => mco_puppet_unknown]) - - expect(subject.status).to eq 'undefined' - expect(subject.summary).to eq({}) - end - end - - describe '#run' do - before do - subject.stubs(:puppetd).returns(puppetd) - end - - it 'should return true if happened to start' do - puppetd.expects(:runonce).with( - :puppet_debug => options['puppet_debug'], - :manifest => options['puppet_manifest'], - :modules => options['puppet_modules'], - :cwd => options['cwd'], - :command_prefix => options['command_prefix'], - :puppet_noop_run => options['puppet_noop_run'], - ).returns([:statuscode => 0]) - - expect(subject.run).to be true - end - - context 'should return false if could not start' do - it 'if another puppet still running' do - puppetd.expects(:runonce).returns([ - :statuscode => 1, - :statusmsg => 'Lock file and PID file exist; puppet is running.' - ]) - - expect(subject.run).to be false - end - - it 'if puppet was disabled' do - puppetd.expects(:runonce).returns([ - :statuscode => 1, - :statusmsg => 'Empty Lock file exists; puppet is disabled.' - ]) - - expect(subject.run).to be false - end - - it 'if puppet status unknown' do - puppetd.expects(:runonce).returns([ - :statuscode => 1, - :statusmsg => 'Unknown puppet status: unknown' - ]) - - expect(subject.run).to be false - end - end - - it 'should return false if magent raise error' do - puppetd.expects(:runonce).raises(Astute::MClientError, "Custom error") - - expect(subject.run).to be false - end - end # run - -end diff --git a/spec/unit/nailgun_hooks_spec.rb b/spec/unit/nailgun_hooks_spec.rb deleted file mode 100644 index 0f04a074..00000000 --- a/spec/unit/nailgun_hooks_spec.rb +++ /dev/null @@ -1,1383 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -require File.join(File.dirname(__FILE__), '../spec_helper') - -include Astute - -describe Astute::NailgunHooks do - include SpecHelpers - - let(:ctx) { mock_ctx } - - around(:each) do |example| - max_nodes_old_value = Astute.config.max_nodes_per_call - mc_retries_old_value = Astute.config.mc_retries - example.run - Astute.config.max_nodes_per_call = max_nodes_old_value - Astute.config.mc_retries = mc_retries_old_value - end - - let(:upload_file_hook) do - { - "priority" => 100, - "type" => "upload_file", - "fail_on_error" => false, - "diagnostic_name" => "upload-example-1.0", - "uids" => ['2', '3'], - "parameters" => { - "path" => "/etc/yum.repos.d/fuel_awesome_plugin-0.1.0.repo", - "data" => "[fuel_awesome_plugin-0.1.0]\\nname=Plugin fuel_awesome_plugin-0.1.0 repository\\nbaseurl=http => //10.20.0.2 => 8080/plugins/fuel_awesome_plugin-0.1.0/repositories/centos\\ngpgcheck=0" - } - } - end - - let(:sync_hook) do - { - "priority" => 200, - "type" => "sync", - "fail_on_error" => false, - "diagnostic_name" => "sync-example-1.0", - "uids" => ['1', '2'], - "parameters" => { - "src" => "rsync://10.20.0.2/plugins/fuel_awesome_plugin-0.1.0/deployment_scripts/", - "dst" => "/etc/fuel/plugins/fuel_awesome_plugin-0.1.0/" - } - } - end - - let(:shell_hook) do - { - "priority" => 100, - "type" => "shell", - "fail_on_error" => false, - "id" => "shell-example-1.0", - "uids" => ['1','2','3'], - "parameters" => { - "cmd" => "./deploy.sh", - "cwd" => "/etc/fuel/plugins/fuel_awesome_plugin-0.1.0/", - "timeout" => 60 - } - } - end - - let(:puppet_hook) do - { - "priority" => 300, - "type" => "puppet", - "fail_on_error" => false, - "diagnostic_name" => "puppet-example-1.0", - "uids" => ['1', '3'], - "parameters" => { - "puppet_manifest" => "cinder_glusterfs.pp", - "puppet_modules" => "modules", - "cwd" => "/etc/fuel/plugins/plugin_name-1.0", - "timeout" => 42, - "retries" => 21 - } - } - end - - let(:reboot_hook) do - { - "priority" => 600, - "type" => "reboot", - "fail_on_error" => false, - "diagnostic_name" => "reboot-example-1.0", - "uids" => ['2', '3'], - "parameters" => { - "timeout" => 42 - } - } - end - - let(:copy_files_hook) do - { - "priority" => 100, - "type" => "copy_files", - "fail_on_error" => false, - "diagnostic_name" => "copy-example-1.0", - "uids" => ['2', '3'], - "parameters" => { - "files" => [{ - "src" => "/etc/fuel/nova.key", - "dst" => "/etc/astute/nova.key"}], - "permissions" => "0600", - "dir_permissions" => "0700" - } - } - end - - let(:upload_files_hook) do - { - "priority" => 100, - "type" => "upload_files", - "fail_on_error" => false, - "diagnostic_name" => "copy-example-1.0", - "uids" => ['1'], - "parameters" => { - "nodes" =>[ - "uid" => '1', - "files" => [{ - "dst" => "/etc/fuel/nova.key", - "data" => "", - "permissions" => "0600", - "dir_permissions" => "0700"}], - ] - } - } - end - - let (:cobbler_sync_hook) do - { - "priority" => 800, - "type" => "cobbler_sync", - "fail_on_error" => false, - "diagnostic_name" => "copy-example-1.0", - "uids" => ['master'], - "parameters" => { - "provisioning_info" => { - "engine" => { - "url" => "http://10.20.0.2:80/cobbler_api", - "username" => "cobbler", - "password" => "cobblerpassword", - "master_ip" => "10.20.0.2" - } - } - } - } - end - - let(:hooks_data) do - [ - upload_file_hook, - sync_hook, - shell_hook, - puppet_hook, - copy_files_hook, - upload_files_hook, - reboot_hook - ] - end - - context '#new' do - it 'should use default run type if no type setting' do - hooks = Astute::NailgunHooks.new(hooks_data, ctx) - expect(hooks.instance_variable_get("@type")).to eql('deploy') - end - - it 'should use type if it set' do - hooks = Astute::NailgunHooks.new(hooks_data, ctx, 'execute_tasks') - expect(hooks.instance_variable_get("@type")).to eql('execute_tasks') - end - end - - context "#process" do - it 'should process known hook type' do - hooks = Astute::NailgunHooks.new(hooks_data, ctx) - - hooks.expects(:upload_file_hook).returns({'error' => nil}) - hooks.expects(:puppet_hook).returns({'error' => nil}) - hooks.expects(:shell_hook).returns({'error' => nil}) - hooks.expects(:sync_hook).returns({'error' => nil}) - hooks.expects(:reboot_hook).returns({'error' => nil}) - hooks.expects(:copy_files_hook).returns({'error' => nil}) - hooks.expects(:upload_files_hook).returns({'error' => nil}) - - hooks.process - end - - it 'should raise exception if hook type is unknown' do - wrong_hook = [{ - "priority" => 300, - "type" => "unknown", - "uids" => ['1', '3'], - "parameters" => { - "parameter" => "1" - } - }] - hooks = Astute::NailgunHooks.new(wrong_hook, ctx) - - expect {hooks.process}.to raise_error(StandardError, /Unknown hook type/) - end - - it 'should run hooks by priority order' do - File.stubs(:file?).returns(true) - File.stubs(:readable?).returns(true) - File.stubs(:read).returns('') - hooks = Astute::NailgunHooks.new(hooks_data, ctx) - - hook_order = sequence('hook_order') - hooks.expects(:upload_file_hook).returns({'error' => nil}).in_sequence(hook_order) - hooks.expects(:copy_files_hook).returns({'error' => nil}).in_sequence(hook_order) - hooks.expects(:upload_files_hook).returns({'error' => nil}).in_sequence(hook_order) - hooks.expects(:shell_hook).returns({'error' => nil}).in_sequence(hook_order) - hooks.expects(:sync_hook).returns({'error' => nil}).in_sequence(hook_order) - hooks.expects(:puppet_hook).returns({'error' => nil}).in_sequence(hook_order) - hooks.expects(:reboot_hook).returns({'error' => nil}).in_sequence(hook_order) - - hooks.process - end - - context 'critical hook' do - - before(:each) do - hooks_data[2]['fail_on_error'] = true - ctx.stubs(:report_and_update_status) - end - - it 'should raise exception if critical hook failed' do - hooks = Astute::NailgunHooks.new(hooks_data, ctx) - hooks.expects(:copy_files_hook).returns({'error' => nil}) - hooks.expects(:upload_file_hook).returns({'error' => nil}) - hooks.expects(:upload_files_hook).returns({'error' => nil}) - hooks.expects(:shell_hook).returns({'error' => 'Shell error'}) - - expect {hooks.process}.to raise_error(Astute::DeploymentEngineError, /Failed to execute hook 'shell-example-1.0'/) - end - - it 'should not process next hooks if critical hook failed' do - hooks = Astute::NailgunHooks.new(hooks_data, ctx) - hooks.expects(:upload_file_hook).returns({'error' => nil}) - hooks.expects(:upload_files_hook).returns({'error' => nil}) - hooks.expects(:shell_hook).returns({'error' => 'Shell error'}) - hooks.expects(:sync_hook).never - hooks.expects(:puppet_hook).never - hooks.expects(:reboot_hook).never - - hooks.process rescue nil - end - - it 'should process next hooks if non critical hook failed' do - hooks = Astute::NailgunHooks.new(hooks_data, ctx) - hooks.expects(:upload_files_hook).returns({'error' => nil}) - hooks.expects(:upload_file_hook).returns({'error' => 'Upload error'}) - hooks.expects(:shell_hook).returns({'error' => nil}) - hooks.expects(:sync_hook).returns({'error' => 'Sync error'}) - hooks.expects(:puppet_hook).returns({'error' => nil}) - hooks.expects(:reboot_hook).returns({'error' => nil}) - - hooks.process - end - - it 'should report error node status if critical hook failed' do - hooks = Astute::NailgunHooks.new(hooks_data, ctx) - hooks.expects(:upload_files_hook).returns({'error' => nil}) - hooks.expects(:upload_file_hook).returns({'error' => nil}) - hooks.expects(:shell_hook).returns({'error' => 'Shell error'}) - error_msg = 'Shell error' - - ctx.expects(:report_and_update_status).with( - {'nodes' => - [ - { 'uid' => '1', - 'status' => 'error', - 'error_type' => 'deploy', - 'role' => 'hook', - 'hook' => "shell-example-1.0", - 'error_msg' => error_msg - }, - { 'uid' => '2', - 'status' => 'error', - 'error_type' => 'deploy', - 'role' => 'hook', - 'hook' => "shell-example-1.0", - 'error_msg' => error_msg - }, - { 'uid' => '3', - 'status' => 'error', - 'error_type' => 'deploy', - 'role' => 'hook', - 'hook' => "shell-example-1.0", - 'error_msg' => error_msg - }, - ], - 'error' => "Failed to execute hook 'shell-example-1.0'\n\n#{error_msg}" - } - ) - - hooks.process rescue nil - end - - it 'should not send report if non critical hook failed' do - hooks = Astute::NailgunHooks.new(hooks_data, ctx) - hooks.expects(:upload_files_hook).returns({'error' => nil}) - hooks.expects(:upload_file_hook).returns({'error' => 'Upload error'}) - hooks.expects(:shell_hook).returns({'error' => nil}) - hooks.expects(:sync_hook).returns({'error' => 'Sync error'}) - hooks.expects(:puppet_hook).returns({'error' => nil}) - hooks.expects(:reboot_hook).returns({'error' => nil}) - - ctx.expects(:report_and_update_status).never - - hooks.process - end - - end #hook - - end #process - - context '#upload_files_hook' do - it 'should validate presence of nodes' do - upload_files_hook['parameters']['nodes'] = [] - hooks = Astute::NailgunHooks.new([upload_files_hook], ctx) - - expect {hooks.process}.to raise_error(StandardError, /Missing a required parameter/) - end - - - it 'should uploads files' do - hooks = Astute::NailgunHooks.new([upload_files_hook], ctx) - - hooks.expects(:upload_file).once.with( - ctx, - '1', - has_entries( - 'content' => upload_files_hook['parameters']['nodes'][0]['files'][0]['data'], - 'path' => upload_files_hook['parameters']['nodes'][0]['files'][0]['dst'] - ) - ) - - hooks.process - end - - context 'process data from mcagent in case of critical hook' do - before(:each) do - upload_files_hook['fail_on_error'] = true - ctx.stubs(:report_and_update_status) - end - - it 'mcagent success' do - hooks = Astute::NailgunHooks.new([upload_files_hook], ctx) - hooks.expects(:upload_file).returns(true).once - - expect {hooks.process}.to_not raise_error - end - - it 'mcagent fail' do - hooks = Astute::NailgunHooks.new([upload_files_hook], ctx) - hooks.expects(:upload_file).returns(false).once - - expect {hooks.process}.to raise_error(Astute::DeploymentEngineError, /Failed to execute hook/) - end - end #context - - end #upload_files_hook - - context '#copy_files_hook' do - - it 'should validate presence of node uids' do - copy_files_hook['uids'] = [] - hooks = Astute::NailgunHooks.new([copy_files_hook], ctx) - - expect {hooks.process}.to raise_error(StandardError, /Missing a required parameter/) - end - - it 'should validate presence files' do - copy_files_hook['parameters'].delete('files') - hooks = Astute::NailgunHooks.new([copy_files_hook], ctx) - - expect {hooks.process}.to raise_error(StandardError, /Missing a required parameter/) - end - - it 'should upload file' do - File.stubs(:file?).returns(true) - File.stubs(:readable?).returns(true) - File.stubs(:binread).returns("") - hooks = Astute::NailgunHooks.new([copy_files_hook], ctx) - - hooks.expects(:upload_file).once.with( - ctx, - ['2', '3'], - has_entries( - 'content' => "", - 'path' => copy_files_hook['parameters']['files'][0]['dst'] - ) - ) - - hooks.process - end - - it 'should limit nodes processing in parallel' do - Astute.config.max_nodes_per_call = 1 - File.stubs(:file?).returns(true) - File.stubs(:readable?).returns(true) - File.stubs(:binread).returns("") - hooks = Astute::NailgunHooks.new([copy_files_hook], ctx) - - hooks.expects(:upload_file).once.with( - ctx, - ['2'], - has_entries( - 'content' => "", - 'path' => copy_files_hook['parameters']['files'][0]['dst'] - ) - ) - hooks.expects(:upload_file).once.with( - ctx, - ['3'], - has_entries( - 'content' => "", - 'path' => copy_files_hook['parameters']['files'][0]['dst'] - ) - ) - hooks.process - end - - context 'process data from mcagent in case of critical hook' do - before(:each) do - copy_files_hook['fail_on_error'] = true - #ctx.stubs(:report_and_update_status) - end - - it 'mcagent success' do - File.stubs(:file?).returns(true) - File.stubs(:readable?).returns(true) - File.stubs(:binread).returns("") - hooks = Astute::NailgunHooks.new([copy_files_hook], ctx) - hooks.expects(:upload_file).returns(true).once - - expect {hooks.process}.to_not raise_error - end - - it 'mcagent fail' do - File.stubs(:file?).returns(true) - File.stubs(:readable?).returns(true) - File.stubs(:binread).returns("") - - hooks = Astute::NailgunHooks.new([copy_files_hook], ctx) - hooks.expects(:upload_file).returns(false).once - error_msg = 'Upload not successful' - ctx.expects(:report_and_update_status).once.with( - {'nodes' => - [ - { 'uid' => '2', - 'status' => 'error', - 'error_type' => 'deploy', - 'role' => 'hook', - 'hook' => "copy-example-1.0", - 'error_msg' => error_msg - }, - { 'uid' => '3', - 'status' => 'error', - 'error_type' => 'deploy', - 'role' => 'hook', - 'hook' => "copy-example-1.0", - 'error_msg' => error_msg - }, - ], - 'error' => "Failed to execute hook 'copy-example-1.0'\n\n#{error_msg}" - } - ) - - expect {hooks.process}.to raise_error(Astute::DeploymentEngineError, /Failed to execute hook/) - - end - end #context - end#copy_files_hook - - context '#shell_hook' do - - it 'should validate presence of node uids' do - shell_hook['uids'] = [] - hooks = Astute::NailgunHooks.new([shell_hook], ctx) - - expect {hooks.process}.to raise_error(StandardError, /Missing a required parameter/) - end - - it 'should validate presence cmd hooks' do - shell_hook['parameters'].delete('cmd') - hooks = Astute::NailgunHooks.new([shell_hook], ctx) - - expect {hooks.process}.to raise_error(StandardError, /Missing a required parameter/) - end - - it 'should run shell command with timeout' do - hooks = Astute::NailgunHooks.new([shell_hook], ctx) - hooks.expects(:run_shell_command).once.with( - ctx, - ['1','2','3'], - regexp_matches(/deploy/), - Astute.config.mc_retries, - Astute.config.mc_retry_interval, - shell_hook['parameters']['timeout'], - shell_hook['parameters']['cwd'] - ) - .returns(:data => {:exit_code => 0}) - - hooks.process - end - - it 'should run shell command with global timeout (including retries)' do - hooks = Astute::NailgunHooks.new([shell_hook], ctx) - hooks.stubs(:run_shell_command).once.with( - ctx, - ['1','2','3'], - regexp_matches(/deploy/), - Astute.config.mc_retries, - Astute.config.mc_retry_interval, - shell_hook['parameters']['timeout'], - shell_hook['parameters']['cwd'] - ) - .raises(Timeout::Error) - - expect {hooks.process}.to_not raise_error - end - - it 'should use default timeout if it does not set' do - shell_hook['parameters'].delete('timeout') - hooks = Astute::NailgunHooks.new([shell_hook], ctx) - hooks.expects(:run_shell_command).once.with( - ctx, - ['1','2','3'], - regexp_matches(/deploy/), - Astute.config.mc_retries, - Astute.config.mc_retry_interval, - 300, - shell_hook['parameters']['cwd'] - ) - .returns(:data => {:exit_code => 0}) - - hooks.process - end - - it 'should limit nodes processing in parallel' do - Astute.config.max_nodes_per_call = 2 - - hooks = Astute::NailgunHooks.new([shell_hook], ctx) - hooks.expects(:run_shell_command).once.with( - ctx, - ['1', '2'], - regexp_matches(/deploy/), - Astute.config.mc_retries, - Astute.config.mc_retry_interval, - shell_hook['parameters']['timeout'], - shell_hook['parameters']['cwd'] - ) - .returns(:data => {:exit_code => 0}) - - hooks.expects(:run_shell_command).once.with( - ctx, - ['3'], - regexp_matches(/deploy/), - Astute.config.mc_retries, - Astute.config.mc_retry_interval, - shell_hook['parameters']['timeout'], - shell_hook['parameters']['cwd'] - ) - .returns(:data => {:exit_code => 0}) - - hooks.process - end - - context 'process data from mcagent in case of critical hook' do - before(:each) do - shell_hook['fail_on_error'] = true - ctx.stubs(:report_and_update_status) - end - - it 'if exit code eql 0 -> do not raise error' do - hooks = Astute::NailgunHooks.new([shell_hook], ctx) - hooks.expects(:run_shell_command).returns(nil).once - - expect {hooks.process}.to_not raise_error - end - - it 'if exit code not eql 0 -> raise error' do - hooks = Astute::NailgunHooks.new([shell_hook], ctx) - hooks.expects(:run_shell_command).returns("err").once - - expect {hooks.process}.to raise_error(Astute::DeploymentEngineError, /Failed to execute hook/) - end - - it 'if exit code not presence -> raise error' do - hooks = Astute::NailgunHooks.new([shell_hook], ctx) - hooks.expects(:run_shell_command).returns("err").once - - expect {hooks.process}.to raise_error(Astute::DeploymentEngineError, /Failed to execute hook/) - end - - it 'if timeout -> raise error' do - hooks = Astute::NailgunHooks.new([shell_hook], ctx) - hooks.expects(:run_shell_command).raises(Timeout::Error) - - expect {hooks.process}.to raise_error(Astute::DeploymentEngineError, /Failed to execute hook/) - end - end #context - - context "#run_shell_command" do - - let(:hooks) { Astute::NailgunHooks.new([shell_hook], ctx) } - - let(:mclient) do - mclient = mock_rpcclient - Astute::MClient.any_instance.stubs(:rpcclient).returns(mclient) - Astute::MClient.any_instance.stubs(:log_result).returns(mclient) - Astute::MClient.any_instance.stubs(:check_results_with_retries).returns(mclient) - mclient - end - - def mc_result(sender, succeed=true) - { - :sender => sender, - :data => { :exit_code => succeed ? 0 : 1} - } - end - - before(:each) do - ctx.stubs(:report_and_update_status) - shell_hook['fail_on_error'] = true - end - - it 'should use retries' do - mclient.expects(:execute).times(2).returns([ - mc_result('1', true), - mc_result('2', false), - mc_result('3', true) - ]).then.returns([mc_result('2', true)]) - - hooks.process - end - - it 'should fail if retries end' do - Astute.config.mc_retries = 1 - - mclient.expects(:execute).times(2).returns([ - mc_result('1', true), - mc_result('2', false), - mc_result('3', true) - ]).then.returns([mc_result('2', false)]) - - expect {hooks.process}.to raise_error(Astute::DeploymentEngineError) - end - - it 'should fail if retries end and some nodes never answered' do - Astute.config.mc_retries = 1 - - mclient.expects(:execute).times(2) - .returns([mc_result('1', true)]) - .then.returns([mc_result('2', true)]) - - expect {hooks.process}.to raise_error(Astute::DeploymentEngineError) - end - - it 'should retry if raise error' do - Astute.config.mc_retries = 3 - - mclient.expects(:execute).times(4) - .returns([mc_result('1', true), mc_result('2', true)]) - .then.raises(Astute::MClientTimeout) - .then.raises(Astute::MClientError) - .then.returns([mc_result('3', true)]) - - expect { - hooks.process - }.not_to raise_error - end - - it 'should fail if it still raise error after retries' do - Astute.config.mc_retries = 1 - - # we retry 3 times on every mc retries (1 main + 1 retries) * 3 = 6 - mclient.expects(:execute).times(6) - .then.raises(Astute::MClientTimeout) - .then.raises(Astute::MClientError) - - expect {hooks.process}.to raise_error(Astute::DeploymentEngineError) - end - end - - end #shell_hook - - context '#upload_file_hook' do - it 'should validate presence of node uids' do - upload_file_hook['uids'] = [] - hooks = Astute::NailgunHooks.new([upload_file_hook], ctx) - - expect {hooks.process}.to raise_error(StandardError, /Missing a required parameter/) - end - - it 'should validate presence of file destination' do - upload_file_hook['parameters'].delete('path') - hooks = Astute::NailgunHooks.new([upload_file_hook], ctx) - - expect {hooks.process}.to raise_error(StandardError, /Missing a required parameter/) - end - - it 'should validate presence of file source' do - upload_file_hook['parameters'].delete('data') - hooks = Astute::NailgunHooks.new([upload_file_hook], ctx) - - expect {hooks.process}.to raise_error(StandardError, /Missing a required parameter/) - end - - it 'should upload file' do - hooks = Astute::NailgunHooks.new([upload_file_hook], ctx) - - hooks.expects(:upload_file).once.with( - ctx, - ['2', '3'], - has_entries( - 'content' => upload_file_hook['parameters']['data'], - 'path' => upload_file_hook['parameters']['path'] - ) - ) - - hooks.process - end - - it 'should limit nodes processing in parallel' do - Astute.config.max_nodes_per_call = 1 - hooks = Astute::NailgunHooks.new([upload_file_hook], ctx) - - hooks.expects(:upload_file).once.with( - ctx, - ['2'], - has_entries( - 'content' => upload_file_hook['parameters']['data'], - 'path' => upload_file_hook['parameters']['path'] - ) - ) - - hooks.expects(:upload_file).once.with( - ctx, - ['3'], - has_entries( - 'content' => upload_file_hook['parameters']['data'], - 'path' => upload_file_hook['parameters']['path'] - ) - ) - - hooks.process - end - - context 'process data from mcagent in case of critical hook' do - before(:each) do - upload_file_hook['fail_on_error'] = true - ctx.stubs(:report_and_update_status) - end - - it 'mcagent success' do - hooks = Astute::NailgunHooks.new([upload_file_hook], ctx) - hooks.expects(:upload_file).returns(true).once - - expect {hooks.process}.to_not raise_error - end - - it 'mcagent fail' do - hooks = Astute::NailgunHooks.new([upload_file_hook], ctx) - hooks.expects(:upload_file).returns(false).once - - expect {hooks.process}.to raise_error(Astute::DeploymentEngineError, /Failed to execute hook/) - end - end #context - - end #upload_file_hook - - context '#sync_hook' do - it 'should validate presence of node uids' do - sync_hook['uids'] = [] - hooks = Astute::NailgunHooks.new([sync_hook], ctx) - - expect {hooks.process}.to raise_error(StandardError, /Missing a required parameter/) - end - - it 'should validate presence of destination' do - sync_hook['parameters'].delete('dst') - hooks = Astute::NailgunHooks.new([sync_hook], ctx) - - expect {hooks.process}.to raise_error(StandardError, /Missing a required parameter/) - end - - it 'should validate presence of source' do - sync_hook['parameters'].delete('src') - hooks = Astute::NailgunHooks.new([sync_hook], ctx) - - expect {hooks.process}.to raise_error(StandardError, /Missing a required parameter/) - end - - it 'should run sync command with timeout' do - sync_hook['parameters']['timeout'] = '60' - hooks = Astute::NailgunHooks.new([sync_hook], ctx) - hooks.expects(:run_shell_command).once.with( - ctx, - ['1','2'], - regexp_matches(/deploy/), - 10, - Astute.config.mc_retry_interval, - sync_hook['parameters']['timeout'] - ) - .returns(:data => {:exit_code => 0}) - - hooks.process - end - - it 'should use default timeout if it does not set' do - shell_hook['parameters'].delete('timeout') - hooks = Astute::NailgunHooks.new([sync_hook], ctx) - hooks.expects(:run_shell_command).once.with( - ctx, - ['1','2'], - regexp_matches(/rsync/), - 10, - Astute.config.mc_retry_interval, - 300 - ) - .returns(:data => {:exit_code => 0}) - - hooks.process - end - - it 'should limit nodes processing in parallel' do - Astute.config.max_nodes_per_call = 1 - - hooks = Astute::NailgunHooks.new([sync_hook], ctx) - hooks.expects(:run_shell_command).once.with( - ctx, - ['1'], - regexp_matches(/rsync/), - 10, - Astute.config.mc_retry_interval, - is_a(Integer) - ) - .returns(:data => {:exit_code => 0}) - - hooks.expects(:run_shell_command).once.with( - ctx, - ['2'], - regexp_matches(/rsync/), - 10, - Astute.config.mc_retry_interval, - is_a(Integer) - ) - .returns(:data => {:exit_code => 0}) - - hooks.process - end - - context 'process data from mcagent in case of critical hook' do - before(:each) do - sync_hook['fail_on_error'] = true - ctx.stubs(:report_and_update_status) - end - - it 'if exit code eql 0 -> do not raise error' do - hooks = Astute::NailgunHooks.new([sync_hook], ctx) - hooks.expects(:run_shell_command).returns(nil).once - - expect {hooks.process}.to_not raise_error - end - - it 'if exit code not eql 0 -> raise error' do - hooks = Astute::NailgunHooks.new([sync_hook], ctx) - hooks.expects(:run_shell_command).returns("err").once - - expect {hooks.process}.to raise_error(Astute::DeploymentEngineError, /Failed to execute hook/) - end - - it 'if exit code not presence -> raise error' do - hooks = Astute::NailgunHooks.new([sync_hook], ctx) - hooks.expects(:run_shell_command).returns("err").once - - expect {hooks.process}.to raise_error(Astute::DeploymentEngineError, /Failed to execute hook/) - end - end #context - - end #sync_hook - - context '#puppet_hook' do - it 'should validate presence of node uids' do - puppet_hook['uids'] = [] - hooks = Astute::NailgunHooks.new([puppet_hook], ctx) - - expect {hooks.process}.to raise_error(StandardError, /Missing a required parameter/) - end - - it 'should validate presence of manifest parameter' do - puppet_hook['parameters'].delete('puppet_manifest') - hooks = Astute::NailgunHooks.new([puppet_hook], ctx) - - expect {hooks.process}.to raise_error(StandardError, /Missing a required parameter/) - end - - it 'should validate presence of modules parameter' do - puppet_hook['parameters'].delete('puppet_modules') - hooks = Astute::NailgunHooks.new([puppet_hook], ctx) - - expect {hooks.process}.to raise_error(StandardError, /Missing a required parameter/) - end - - it 'should validate presence of cwd parameter' do - puppet_hook['parameters'].delete('cwd') - hooks = Astute::NailgunHooks.new([puppet_hook], ctx) - - expect {hooks.process}.to raise_error(StandardError, /Missing a required parameter/) - end - - it 'should run puppet command using main mechanism' do - hooks = Astute::NailgunHooks.new([puppet_hook], ctx) - PuppetdDeployer.expects(:deploy).once.with( - instance_of(Astute::Context), - [ - {'uid' => '1', 'role' => 'hook'}, - {'uid' => '3', 'role' => 'hook'} - ], - _retries=puppet_hook['parameters']['retries'], - puppet_hook['parameters']['puppet_manifest'], - puppet_hook['parameters']['puppet_modules'], - puppet_hook['parameters']['cwd'] - ) - - Astute::Context.any_instance.stubs(:status).returns({'1' => 'success', '3' => 'success'}) - hooks.process - end - - it 'should run puppet command with timeout' do - hooks = Astute::NailgunHooks.new([puppet_hook], ctx) - hooks.expects(:run_puppet).once.with( - ctx, - ['1','3'], - puppet_hook['parameters']['puppet_manifest'], - puppet_hook['parameters']['puppet_modules'], - puppet_hook['parameters']['cwd'], - puppet_hook['parameters']['timeout'], - puppet_hook['parameters']['retries'] - ).returns(true) - Astute::Context.any_instance.stubs(:status).returns({'1' => 'success', '3' => 'success'}) - - hooks.process - end - - it 'should use default timeout if it does not set' do - puppet_hook['parameters'].delete('timeout') - hooks = Astute::NailgunHooks.new([puppet_hook], ctx) - hooks.expects(:run_puppet).once.with( - ctx, - ['1','3'], - puppet_hook['parameters']['puppet_manifest'], - puppet_hook['parameters']['puppet_modules'], - puppet_hook['parameters']['cwd'], - 300, - puppet_hook['parameters']['retries'] - ).returns(true) - Astute::Context.any_instance.stubs(:status).returns({'1' => 'success', '3' => 'success'}) - - hooks.process - end - - it 'should use default retries if it does not set' do - puppet_hook['parameters'].delete('retries') - hooks = Astute::NailgunHooks.new([puppet_hook], ctx) - hooks.expects(:run_puppet).once.with( - ctx, - ['1','3'], - puppet_hook['parameters']['puppet_manifest'], - puppet_hook['parameters']['puppet_modules'], - puppet_hook['parameters']['cwd'], - puppet_hook['parameters']['timeout'], - Astute.config.puppet_retries, - ).returns(true) - Astute::Context.any_instance.stubs(:status).returns({'1' => 'success', '3' => 'success'}) - - hooks.process - end - - it 'should limit nodes processing in parallel' do - Astute.config.max_nodes_per_call = 1 - - hooks = Astute::NailgunHooks.new([puppet_hook], ctx) - hooks.expects(:run_puppet).once.with( - ctx, - ['1'], - puppet_hook['parameters']['puppet_manifest'], - puppet_hook['parameters']['puppet_modules'], - puppet_hook['parameters']['cwd'], - puppet_hook['parameters']['timeout'], - puppet_hook['parameters']['retries'] - ).returns(true) - - hooks.expects(:run_puppet).once.with( - ctx, - ['3'], - puppet_hook['parameters']['puppet_manifest'], - puppet_hook['parameters']['puppet_modules'], - puppet_hook['parameters']['cwd'], - puppet_hook['parameters']['timeout'], - puppet_hook['parameters']['retries'] - ).returns(true) - - Astute::Context.any_instance.stubs(:status).returns({'1' => 'success', '3' => 'success'}) - hooks.process - end - - it 'if mclient failed and task is not critical -> do not raise error' do - hooks = Astute::NailgunHooks.new([puppet_hook], ctx) - PuppetdDeployer.expects(:deploy).once.raises(Astute::MClientError) - - expect {hooks.process}.to_not raise_error - end - - context 'process data from mcagent in case of critical hook' do - before(:each) do - puppet_hook['fail_on_error'] = true - ctx.stubs(:report_and_update_status) - end - - it 'if puppet success do not raise error' do - hooks = Astute::NailgunHooks.new([puppet_hook], ctx) - PuppetdDeployer.expects(:deploy).once - Astute::Context.any_instance.stubs(:status).returns({'1' => 'success', '3' => 'success'}) - - expect {hooks.process}.to_not raise_error - end - - it 'if puppet fail -> raise error' do - hooks = Astute::NailgunHooks.new([puppet_hook], ctx) - PuppetdDeployer.expects(:deploy).once - Astute::Context.any_instance.stubs(:status).returns({'1' => 'error', '3' => 'success'}) - - expect {hooks.process}.to raise_error(Astute::DeploymentEngineError, /Failed to execute hook/) - end - - it 'if mclient failed -> raise error' do - hooks = Astute::NailgunHooks.new([puppet_hook], ctx) - error_msg = "Puppet run failed. Check puppet logs for details" - PuppetdDeployer.expects(:deploy).once.raises(Astute::MClientError) - ctx.expects(:report_and_update_status).with( - {'nodes' => - [ - { 'uid' => '1', - 'status' => 'error', - 'error_type' => 'deploy', - 'role' => 'hook', - 'hook' => "puppet-example-1.0", - 'error_msg' => error_msg - }, - { 'uid' => '3', - 'status' => 'error', - 'error_type' => 'deploy', - 'role' => 'hook', - 'hook' => "puppet-example-1.0", - 'error_msg' => error_msg - }, - ], - 'error' => "Failed to execute hook 'puppet-example-1.0'\n\n#{error_msg}" - } - ) - - expect {hooks.process}.to raise_error(Astute::DeploymentEngineError, /Failed to execute hook/) - end - end #context - end # puppet_hook - - context '#reboot_hook' do - - it 'should validate presence of node uids' do - reboot_hook['uids'] = [] - hooks = Astute::NailgunHooks.new([reboot_hook], ctx) - - expect {hooks.process}.to raise_error(StandardError, /Missing a required parameter/) - end - - it 'should run reboot command with timeout - 10 sec' do - hooks = Astute::NailgunHooks.new([reboot_hook], ctx) - - time = Time.now.to_i - hooks.stubs(:run_shell_without_check).twice.with( - ctx, - ['2','3'], - regexp_matches(/stat/), - 10, - ) - .returns('2' => (time - 5).to_s, '3' => (time - 5).to_s).then - .returns('2' => time.to_s, '3' => time.to_s) - - hooks.expects(:run_shell_without_check).once.with( - ctx, - ['2','3'], - regexp_matches(/reboot/), - 60, - ) - .returns('2' => '', '3' => '') - - hooks.expects(:run_shell_without_check).once.with( - ctx, - ['2','3'], - regexp_matches(/nailgun-agent/), - 60, - ) - .returns('2' => '', '3' => '') - - hooks.stubs(:sleep) - - hooks.process - end - - it 'should run reboot validation command with timeout - 10 sec' do - hooks = Astute::NailgunHooks.new([reboot_hook], ctx) - - time = Time.now.to_i - hooks.stubs(:run_shell_without_check).twice.with( - ctx, - ['2','3'], - regexp_matches(/stat/), - 10, - ) - .returns('2' => (time - 5).to_s, '3' => (time - 5).to_s).then - .returns('2' => time.to_s, '3' => time.to_s) - - hooks.stubs(:run_shell_without_check).once.with( - ctx, - ['2','3'], - regexp_matches(/reboot/), - 60, - ) - .returns('2' => '', '3' => '') - - hooks.stubs(:update_node_status).once - hooks.stubs(:sleep) - - hooks.process - end - - it 'should sleep between checks for one-tenth of timeout' do - hooks = Astute::NailgunHooks.new([reboot_hook], ctx) - - time = Time.now.to_i - hooks.stubs(:run_shell_without_check).twice.with( - ctx, - ['2','3'], - regexp_matches(/stat/), - 10, - ) - .returns('2' => (time - 5).to_s, '3' => (time - 5).to_s).then - .returns('2' => time.to_s, '3' => time.to_s) - - hooks.stubs(:run_shell_without_check).once.with( - ctx, - ['2','3'], - regexp_matches(/reboot/), - 60, - ) - .returns('2' => '', '3' => '') - - hooks.stubs(:update_node_status).once - - hooks.expects(:sleep).with(reboot_hook['parameters']['timeout']/10) - - hooks.process - end - - it 'should use default timeout if it does not set' do - reboot_hook['parameters'].delete('timeout') - hooks = Astute::NailgunHooks.new([reboot_hook], ctx) - - time = Time.now.to_i - hooks.stubs(:run_shell_without_check).twice.with( - ctx, - ['2','3'], - regexp_matches(/stat/), - 10, - ) - .returns('2' => (time - 5).to_s, '3' => (time - 5).to_s).then - .returns('2' => time.to_s, '3' => time.to_s) - - hooks.stubs(:run_shell_without_check).once.with( - ctx, - ['2','3'], - regexp_matches(/reboot/), - 60, - ) - .returns('2' => '', '3' => '') - hooks.stubs(:update_node_status).once - - hooks.expects(:sleep).with(300/10) - - hooks.process - end - - it 'should limit nodes processing in parallel' do - Astute.config.max_nodes_per_call = 1 - - hooks = Astute::NailgunHooks.new([reboot_hook], ctx) - - time = Time.now.to_i - hooks.stubs(:run_shell_without_check).once.with( - ctx, - ['2'], - regexp_matches(/stat/), - 10, - ) - .returns('2' => time.to_s) - - hooks.stubs(:run_shell_without_check).once.with( - ctx, - ['3'], - regexp_matches(/stat/), - 10, - ) - .returns('3' => time.to_s) - - hooks.expects(:run_shell_without_check).once.with( - ctx, - ['2'], - regexp_matches(/reboot/), - 60, - ) - .returns('2' => '') - - hooks.expects(:run_shell_without_check).once.with( - ctx, - ['3'], - regexp_matches(/reboot/), - 60, - ) - .returns('3' => '') - - hooks.stubs(:sleep) - hooks.stubs(:update_node_status).once - - time = Time.now.to_i + 100 - hooks.stubs(:run_shell_without_check).once.with( - ctx, - ['2','3'], - "stat --printf='%Y' /proc/1", - 10, - ) - .returns('2' => time.to_s, '3' => time.to_s) - - hooks.process - end - - context 'process data from mcagent in case of critical hook' do - - let(:hooks) do - reboot_hook['fail_on_error'] = true - reboot_hook['parameters']['timeout'] = 1 - - hooks = Astute::NailgunHooks.new([reboot_hook], ctx) - - hooks.stubs(:run_shell_without_check).once.with( - ctx, - ['2','3'], - regexp_matches(/reboot/), - 60, - ) - .returns('2' => '', '3' => '') - - hooks.stubs(:sleep) - - hooks - end - - before(:each) do - ctx.stubs(:report_and_update_status) - end - - it 'if reboot succeed -> do not raise error' do - time = Time.now.to_i - hooks.stubs(:run_shell_without_check).twice.with( - ctx, - ['2','3'], - regexp_matches(/stat/), - 10, - ) - .returns('2' => (time - 5).to_s, '3' => (time - 5).to_s).then - .returns('2' => time.to_s, '3' => time.to_s) - hooks.stubs(:update_node_status).once - expect {hooks.process}.to_not raise_error - end - - it 'if reboot failed -> raise error' do - time = Time.now.to_i - hooks.stubs(:run_shell_without_check).with( - ctx, - ['2','3'], - regexp_matches(/stat/), - 10, - ) - .returns('2' => time.to_s, '3' => (time - 5).to_s).then - .returns('2' => time.to_s, '3' => (time - 5).to_s) - - hooks.stubs(:run_shell_without_check).with( - ctx, - ['2'], - regexp_matches(/stat/), - 10, - ) - .returns('2' => (time - 5).to_s, '3' => time.to_s) - hooks.expects(:update_node_status).with([]) - - expect {hooks.process}.to raise_error(Astute::DeploymentEngineError, /Failed to execute hook/) - end - - it 'should successed if creation time is smaller' do - time = Time.now.to_i - hooks.stubs(:run_shell_without_check).twice.with( - ctx, - ['2','3'], - regexp_matches(/stat/), - 10, - ) - .returns('2' => time.to_s, '3' => time.to_s).then - .returns('2' => (time - 1).to_s, '3' => (time - 2).to_s) - hooks.expects(:update_node_status).with(['2', '3']) - expect {hooks.process}.to_not raise_error - end - - it 'if reboot validate info not presence -> raise error' do - time = Time.now.to_i - hooks.stubs(:run_shell_without_check).with( - ctx, - ['2','3'], - regexp_matches(/stat/), - 10, - ) - .returns('2' => time.to_s, '3' => (time - 5).to_s).then - .returns('3' => time.to_s) - - hooks.stubs(:run_shell_without_check).with( - ctx, - ['2'], - regexp_matches(/stat/), - 10, - ).returns({}) - hooks.stubs(:update_node_status) - - expect {hooks.process}.to raise_error(Astute::DeploymentEngineError, /Failed to execute hook/) - end - end #context - - end #reboot_hook - - context '#cobbler_sync_hook' do - - it 'should validate presence of provisioning_info' do - cobbler_sync_hook['parameters']['provisioning_info'] = {} - hooks = Astute::NailgunHooks.new([cobbler_sync_hook], ctx) - - expect {hooks.process}.to raise_error(StandardError, /Missing a required parameter/) - end - - it 'should call Astute::CobblerManager sync method ' do - hooks = Astute::NailgunHooks.new([cobbler_sync_hook], ctx) - Astute::CobblerManager.any_instance.expects(:sync).once - - hooks.process - end - - end #cobbler_sync_hook - -end # 'describe' diff --git a/spec/unit/network_spec.rb b/spec/unit/network_spec.rb deleted file mode 100644 index 3116eb76..00000000 --- a/spec/unit/network_spec.rb +++ /dev/null @@ -1,322 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require File.join(File.dirname(__FILE__), '../spec_helper') - -describe Astute::Network do - include SpecHelpers - - let(:reporter) do - reporter = mock('reporter') - reporter.stub_everything - reporter - end - - def make_nodes(*uids) - uids.map do |uid| - { - 'uid' => uid, - 'networks' => [ - { - 'iface' => 'eth0', - 'vlans' => [100, 101] - } - ] - } - end - end - - describe '.check_network' do - - it "should returns all vlans passed excluding incorrect" do - nodes = make_nodes(1, 2) - res1 = { - :data => { - :uid => "1", - :neighbours => { - "eth0" => { - "100" => {"1" => ["eth0"], "2" => ["eth0"], "2th 2" => ["eth0"]}, - "101" => {"1" => ["eth0"]} - }}}, - :sender => "1"} - res2 = { - :data => { - :uid => "2", - :neighbours => { - "eth0" => { - "100" => {"1" => ["eth0"], "2" => ["eth0"]}, - "101" => {"1" => ["eth0"], "2" => ["eth0"]} - }}}, - :sender => "2"} - valid_res = {:statuscode => 0, :sender => '1'} - mc_res1 = mock_mc_result(res1) - mc_res2 = mock_mc_result(res2) - mc_valid_res = mock_mc_result - - rpcclient = mock_rpcclient(nodes) - - rpcclient.expects(:get_probing_info).once.returns([mc_res1, mc_res2]) - uids = nodes.map { |node| node['uid'].to_s } - - - data_to_send = {} - nodes[0]['networks'].each{ |net| data_to_send[net['iface']] = net['vlans'].join(",") } - data_to_send = { '1' => data_to_send, '2' => data_to_send} - - rpcclient.expects(:start_frame_listeners). - with(:interfaces => data_to_send.to_json). - returns([mc_valid_res]*2) - - rpcclient.expects(:send_probing_frames). - with(:interfaces => data_to_send.to_json). - returns([mc_valid_res]*2) - rpcclient.expects(:discover).with(:nodes => uids) - Astute::MClient.any_instance.stubs(:rpcclient).returns(rpcclient) - res = [[], [{"version"=>"6.1.0", "uid"=>"2"}, {"version"=>"6.1.0", "uid"=>"1"}]] - Astute::Versioning.any_instance.stubs(:split_on_version).returns(res) - - res = Astute::Network.check_network(Astute::Context.new('task_uuid', reporter), nodes) - expected = {"nodes" => [{"networks" => [{"iface"=>"eth0", "vlans"=>[100]}], "uid"=>"1"}, - {"networks"=>[{"iface"=>"eth0", "vlans"=>[100, 101]}], "uid"=>"2"}]} - res.should eql(expected) - end - - it "returns error if nodes list is empty" do - res = Astute::Network.check_network(Astute::Context.new('task_uuid', reporter), []) - res.should eql({'status' => 'error', 'error' => "Network verification requires a minimum of two nodes."}) - end - - it "returns all vlans passed if only one node provided" do - nodes = make_nodes(1) - res = Astute::Network.check_network(Astute::Context.new('task_uuid', reporter), nodes) - expected = {"nodes" => [{"uid"=>1, "networks" => [{"iface"=>"eth0", "vlans"=>[100, 101]}]}]} - res.should eql(expected) - end - - end - - describe '.check_dhcp' do - - it "dhcp check should return expected info" do - def mock_and_verify_check_dhcp(nodes, result, expected) - rpcclient = mock_rpcclient(nodes) - rpcclient.expects(:dhcp_discover).at_least_once.returns(result) - Astute::MClient.any_instance.stubs(:rpcclient).returns(rpcclient) - actual = Astute::Network.check_dhcp(Astute::Context.new('task_uuid', reporter), nodes) - actual.should eql(expected) - end - - nodes = make_nodes(1, 2) - expected_data = [{'iface'=>'eth1', - 'mac'=> 'ff:fa:1f:er:ds:as'}, - {'iface'=>'eth2', - 'mac'=> 'ee:fa:1f:er:ds:as'}] - json_output = JSON.dump(expected_data) - res1 = mock_mc_result({ - :data => {:out => json_output}, - :sender => "1"}) - res2 = mock_mc_result({ - :data => {:out => json_output}, - :sender => "2"}) - - expected = {"nodes" => [{:status=>"ready", :uid=>"1", :data=>expected_data}, - {:status=>"ready", :uid=>"2", :data=>expected_data}], - "status"=> "ready"} - - mock_and_verify_check_dhcp(nodes, [res1, res2], expected) - - # check case when the check failed for one of the nodes - err_res = mock_mc_result({:sender => "1", :data => {:err => 'Test err'}}) - expected = {"nodes" => [{:uid => "1", :status => "error", - :error_msg => "Error in dhcp checker. Check logs for details"}], - "status" => "error"} - mock_and_verify_check_dhcp([nodes[0]], [err_res], expected) - - end - end - - describe '.multicast_verifcation' do - - def make_nodes(*uids) - uids.map do |uid| - { - 'uid' => uid.to_s, - 'iface' => 'eth1', - 'group' => '250.0.0.3', - 'port' => 10000 - } - end - end - - def format_nodes(nodes) - formatted_nodes = {} - nodes.each do |node| - formatted_nodes[node['uid']] = node - end - formatted_nodes - end - - it "must run all three stages: listen send info with expected argumenets" do - nodes = make_nodes(1, 2) - formatted_nodes = format_nodes(nodes) - command_output = JSON.dump(["1", "2"]) - res1 = {:sender => "1", - :data => {:out => command_output}} - res2 = {:sender => "2", - :data => {:out => command_output}} - mc_valid_res = mock_mc_result - expected_response = {1 => ["1", "2"], - 2 => ["1", "2"]} - - rpcclient = mock_rpcclient() - - rpcclient.expects(:discover).with(:nodes=>formatted_nodes.keys) - - rpcclient.expects(:multicast_listen).with(:nodes=>formatted_nodes.to_json).once.returns([mock_mc_result]*2) - - rpcclient.expects(:multicast_send).with().once.returns([mock_mc_result]*2) - - rpcclient.expects(:multicast_info).with().once.returns([mock_mc_result(res1), mock_mc_result(res2)]) - - res = Astute::Network.multicast_verification(Astute::Context.new('task_uuid', reporter), nodes) - res['nodes'].should eql(expected_response) - end - - end - - describe "check_vlans_by_traffic" do - - it "returns only tags from nodes in env" do - data = { - "eth0" => { - "100" => {"1" => ["eth0"], "2" => ["eth0"], "3" => ["eth0"]}, - "101" => {"3" => ["eth0"]} - }, - } - correct_res = [{"iface"=>"eth0", "vlans"=>[100]}] - uids = ["1", "2"] - res = Astute::Network.check_vlans_by_traffic("1", uids, data) - res.should eql(correct_res) - end - - it "skips tags sent by node itself" do - data = { - "eth0" => { - "100" => {"1" => ["eth0"], "2" => ["eth0"]}, - "101" => {"1" => ["eth0"]} - }, - } - correct_res = [{"iface"=>"eth0", "vlans"=>[100]}] - uids = ["1", "2"] - res = Astute::Network.check_vlans_by_traffic("1", uids, data) - res.should eql(correct_res) - end - - it "returns tags sent only by some nodes"do - data = { - "eth0" => { - "100" => {"1" => ["eth0"], "2" => ["eth0"]}, - "101" => {"2" => ["eth0"]} - }, - } - correct_res = [{"iface"=>"eth0", "vlans"=>[100, 101]}] - uids = ["1", "2"] - res = Astute::Network.check_vlans_by_traffic("1", uids, data) - res.should eql(correct_res) - end - - end - - describe ".check_repositories_with_setup" do - let(:nodes) do - [ - { - "iface"=>"eth1", - "uid"=>"1", - "vlan"=>0, - "gateway"=>"10.109.1.1", - "addr"=>"10.109.1.4/24", - "urls"=>[ - "http://10.109.0.2:8080/2014.2.2-7.0/centos/auxiliary", - "http://10.109.0.2:8080/2014.2.2-7.0/centos/x86_64"] - }, - { - "iface"=>"eth1", - "uid"=>"4", - "vlan"=>0, - "gateway"=>"10.109.1.1", - "addr"=>"10.109.1.4/24", - "urls"=>[ - "http://10.109.0.2:8080/2014.2.2-7.0/centos/auxiliary", - "http://10.109.0.2:8080/2014.2.2-7.0/centos/x86_64"] - } - ] - end - - let(:mclient) do - mclient = mock_rpcclient - Astute::MClient.any_instance.stubs(:rpcclient).returns(mclient) - Astute::MClient.any_instance.stubs(:log_result).returns(mclient) - Astute::MClient.any_instance.stubs(:check_results_with_retries).returns(mclient) - mclient - end - - def build_mcresult(status=0, out="", err="", sender="1") - rs = {:sender => sender, :data => { - :status => status, - :out => out, - :err => err - }} - mcresult_mock = mock_mc_result(rs) - mock_result = mock - mock_result.stubs(:results).returns(rs) - mock_result.stubs(:each).returns(mcresult_mock) - mock_result - end - - it "should check repositories with setup" do - mclient.expects(:check_repositories_with_setup) - .with({:data => {"1" => nodes.first, "4" => nodes.last}}) - .returns([ - build_mcresult(status=0), - build_mcresult(status=0, out="", err="", sender="4")] - ) - - res = Astute::Network.check_repositories_with_setup( - Astute::Context.new('task_uuid', reporter), - nodes) - - res.should eql({ - "status"=>"ready", - "nodes"=>[ - {:out=>"", :err=>"", :status=>0, :uid=>"1"}, - {:out=>"", :err=>"", :status=>0, :uid=>"4"}] - }) - end - - it "should show error if repositories with setup do not return answer" do - mclient.expects(:check_repositories_with_setup) - .with({:data => {"1" => nodes.first, "4" => nodes.last}}) - .returns([ - build_mcresult(status=0)] - ) - - expect{Astute::Network.check_repositories_with_setup( - Astute::Context.new('task_uuid', reporter), - nodes)}.to raise_error(Astute::MClientTimeout, /check mcollective log/) - end - - end - -end diff --git a/spec/unit/node_spec.rb b/spec/unit/node_spec.rb deleted file mode 100644 index 561a887e..00000000 --- a/spec/unit/node_spec.rb +++ /dev/null @@ -1,102 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -require File.join(File.dirname(__FILE__), '../spec_helper') - -describe Astute::Node do - it "accepts hash for initialization" do - node = Astute::Node.new('uid' => 'abc', 'info' => 'blabla') - node.uid.should == 'abc' - node.info.should == 'blabla' - end - - it "requires uid" do - expect{ Astute::Node.new({}) }.to raise_error(TypeError) - end - - it "stringifies uid" do - node = Astute::Node.new('uid' => :abc) - node.uid.should == 'abc' - node = Astute::Node.new('uid' => 123) - node.uid.should == '123' - end - - it "denies uid changes" do - node = Astute::Node.new('uid' => 1) - expect{ node.uid = 2 }.to raise_error(TypeError) - expect{ node['uid'] = 2 }.to raise_error(TypeError) - expect{ node[:uid] = 2 }.to raise_error(TypeError) - end - - it "allows [] accessors" do - node = Astute::Node.new('uid' => 123, 'info' => 'abc') - node['info'].should == 'abc' - node[:info].should == 'abc' - node['info'] = 'cba' - node['info'].should == 'cba' - node[:info] = 'dcb' - node[:info].should == 'dcb' - end - - it "unwraps to hash" do - hash = {'uid' => '123', 'info' => 'abc'} - node = Astute::Node.new(hash) - node.to_hash.should == hash - node.to_hash.should_not === node.instance_variable_get(:@table) - end - - it "can fetch default values" do - hash = {'uid' => '123'} - node = Astute::Node.new(hash) - node.fetch('uid', 'x').should == '123' - node.fetch('not-exists', 'x').should == 'x' - end -end - -describe Astute::NodesHash do - it "accepts array of hashes or nodes for initialization and allows accessing by uid" do - nodes = Astute::NodesHash.build( - [{'uid' => 123, 'info' => 'blabla1'}, - Astute::Node.new({'uid' => 'abc', 'info' => 'blabla2'})]) - - nodes['123'].info.should == 'blabla1' - nodes['abc'].info.should == 'blabla2' - nodes[123].info.should == 'blabla1' - nodes[:abc].info.should == 'blabla2' - nodes['123'].uid.should == '123' - nodes.values.map(&:class).uniq.should == [Astute::Node] - end - - it "allows easy elements addition and normalizes data" do - nodes = Astute::NodesHash.new - nodes << {'uid' => 1} << {'uid' => 2} - nodes.push({'uid' => 3}, {'uid' => 4}, {'uid' => 5}) - nodes.keys.sort.should == %w(1 2 3 4 5) - nodes.values.map(&:class).uniq.should == [Astute::Node] - end - - it "introduces meaningful aliases" do - nodes = Astute::NodesHash.build( - [{'uid' => 123, 'info' => 'blabla1'}, - Astute::Node.new({'uid' => 'abc', 'info' => 'blabla2'})]) - - nodes.uids.should == nodes.keys - nodes.nodes.should == nodes.values - end - - it "denies direct accessors" do - expect{ Astute::NodesHash.new['fake-uid'] = {'bla' => 'bla'} }.to raise_error(NoMethodError) - end -end diff --git a/spec/unit/nodes_remover_spec.rb b/spec/unit/nodes_remover_spec.rb deleted file mode 100644 index 89639a92..00000000 --- a/spec/unit/nodes_remover_spec.rb +++ /dev/null @@ -1,249 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -require File.join(File.dirname(__FILE__), '../spec_helper') - -describe Astute::NodesRemover do - include SpecHelpers - - let(:nodes) { [{'uid' => '1'}, {'uid' => '2'}] } - let(:ctx) { mock_ctx } - let(:ctl_time) { {'1' => '100', '2' => '200'} } - - let(:mcollective_answer) do - [ - {:sender => '1', :statuscode => 0, :data => {:rebooted => true}}, - {:sender => '2', :statuscode => 0, :data => {:rebooted => true}} - ] - end - - before(:each) do - Astute::NodesRemover.any_instance.stubs(:mclient_remove_piece_nodes).returns(mcollective_answer) - Astute::NodesRemover.any_instance.stubs(:run_shell_without_check).returns(ctl_time) - end - - it 'should erase nodes (mbr) and reboot nodes(default)' do - expect(Astute::NodesRemover.new(ctx, nodes).remove).to eq({"nodes"=>[{"uid"=>"1"}, {"uid"=>"2"}]}) - end - - context 'nodes not answered by RPC' do - let(:nodes) { [ - {'uid' => '1'}, - {'uid' => '2', 'mclient_remove' => true}, - {'uid' => '3', 'mclient_remove' => false} - ]} - let(:mcollective_answer) do - [ - {:sender => '2', :statuscode => 0, :data => {:rebooted => true}} - ] - end - - it "should report inaccessible nodes" do - expect(Astute::NodesRemover.new(ctx, nodes).remove).to eq( - { "nodes" => [ - {'uid' => '3', 'mclient_remove' => false}, - {'uid' => '2'}, - ], - "inaccessible_nodes" => [{"uid"=>"1", "error"=>"Node not answered by RPC.", "boot_time"=>100}] - } - ) - end - end - - context 'some nodes will not be cleaned by mclient' do - let(:nodes) { [ - {'uid' => '1'}, - {'uid' => '2', 'mclient_remove' => true}, - {'uid' => '3', 'mclient_remove' => false} - ] } - - let(:mcollective_answer) do - [ - {:sender => '1', :statuscode => 0, :data => {:rebooted => true}}, - {:sender => '2', :statuscode => 0, :data => {:rebooted => true}} - ] - end - - it "should call mclient only with 'mclient_remove' empty or set to true" do - nr = Astute::NodesRemover.new(ctx, nodes) - nr.stubs(:mclient_remove_nodes).with( - Astute::NodesHash.build([ - {'uid' => '1', 'boot_time' => 100}, - {'uid' => '2', 'mclient_remove' => true, 'boot_time' => 200} - ]) - ).returns(mcollective_answer).once - nr.remove - end - end - - context 'nodes list empty' do - it 'should do nothing if nodes list is empty' do - Astute::NodesRemover.any_instance.expects(:mclient_remove_nodes).never - expect(Astute::NodesRemover.new(ctx, []).remove).to eq({"nodes"=>[]}) - end - end - - context 'nodes fail to erase' do - let(:mcollective_answer) do - [ - {:sender => '1', :statuscode => 1, :data => {:rebooted => false}}, - {:sender => '2', :statuscode => 1, :data => {:rebooted => false}} - ] - end - - it 'should inform about error' do - expect(Astute::NodesRemover.new(ctx, nodes).remove).to eq( - { "nodes"=>[], - "status" => "error", - "error_nodes" => [ - {"uid"=>"1", "error"=>"RPC agent 'erase_node' failed. Result:\n{:sender=>\"1\", :statuscode=>1, :data=>{:rebooted=>false}}\n", "boot_time"=>100}, - {"uid"=>"2", "error"=>"RPC agent 'erase_node' failed. Result:\n{:sender=>\"2\", :statuscode=>1, :data=>{:rebooted=>false}}\n", "boot_time"=>200} - ] - } - ) - end - - it 'should try maximum mc_retries + 1 times to erase node if node get error' do - retries = Astute.config[:mc_retries] - expect(retries).to eq(10) - - remover = Astute::NodesRemover.new(ctx, nodes) - remover.expects(:mclient_remove_nodes).times(retries + 1).returns(mcollective_answer) - remover.remove - end - - it 'should try maximum mc_retries + 1 times to erase node if node is inaccessible' do - retries = Astute.config[:mc_retries] - expect(retries).to eq(10) - - remover = Astute::NodesRemover.new(ctx, nodes) - remover.expects(:mclient_remove_nodes).times(retries + 1).returns([]) - remover.remove - end - - - it 'should return success state if retry was succeed' do - success_mcollective_answer = [ - {:sender => '1', :statuscode => 0, :data => {:rebooted => true}}, - {:sender => '2', :statuscode => 0, :data => {:rebooted => true}} - ] - Astute::NodesRemover.any_instance.stubs(:mclient_remove_nodes) - .returns(mcollective_answer) - .then.returns(success_mcollective_answer) - - expect(Astute::NodesRemover.new(ctx, nodes).remove).to eq({"nodes"=>[{"uid"=>"1"}, {"uid"=>"2"}]}) - end - - end - - context 'nodes fail to reboot' do - let(:mcollective_answer) do - [ - {:sender => '1', :statuscode => 0, :data => {:rebooted => false, :error_msg => 'Could not reboot'}}, - {:sender => '2', :statuscode => 0, :data => {:rebooted => false, :error_msg => 'Could not reboot'}} - ] - end - - it 'should inform about error' do - expect(Astute::NodesRemover.new(ctx, nodes, reboot=true).remove).to eq( - { "nodes"=>[], - "status" => "error", - "error_nodes" => [ - {"uid"=>"1", "error"=>"RPC method 'erase_node' failed with message: Could not reboot", "boot_time"=>100}, - {"uid"=>"2", "error"=>"RPC method 'erase_node' failed with message: Could not reboot", "boot_time"=>200} - ] - } - ) - end - end - - context 'nodes fail to send status, but erased and rebooted' do - let(:mcollective_answer) do - [] - end - - let(:ctl_time2) { {} } - let(:ctl_time3) { {'1' => '150', '2' => '250'} } - - it 'should process rebooted nodes as erased' do - Astute::NodesRemover.any_instance.stubs(:mclient_remove_piece_nodes).returns(mcollective_answer) - Astute::NodesRemover.any_instance.stubs(:run_shell_without_check).returns(ctl_time) - .then.returns(ctl_time2).then.returns(ctl_time3) - expect(Astute::NodesRemover.new(ctx, nodes, reboot=true).remove).to eq( - { "nodes"=>[{"uid"=>"1"}, {"uid"=>"2"}] } - ) - end - end - - context 'erase node when change node status from bootstrap to provisioning' do - let(:mcollective_answer) do - [ - {:sender => '1', :statuscode => 0, :data => {:rebooted => false}}, - {:sender => '2', :statuscode => 0, :data => {:rebooted => false}} - ] - end - - it 'should erase nodes (mbr) and do not reboot nodes' do - expect(Astute::NodesRemover.new(ctx, nodes, reboot=false).remove).to eq({"nodes"=>[{"uid"=>"1"}, {"uid"=>"2"}]}) - end - end - - context 'nodes limits' do - around(:each) do |example| - old_value = Astute.config.max_nodes_per_remove_call - example.run - Astute.config.max_nodes_per_remove_call = old_value - end - - let(:mcollective_answer1) do - [{:sender => '1', :statuscode => 0, :data => {:rebooted => true}}] - end - - let(:mcollective_answer2) do - [{:sender => '2', :statuscode => 0, :data => {:rebooted => true}}] - end - - before(:each) do - Astute.config.max_nodes_per_remove_call = 1 - - Astute::NodesRemover.any_instance.expects(:mclient_remove_piece_nodes).twice - .returns(mcollective_answer1) - .then.returns(mcollective_answer2) - end - - it 'number of nodes deleting in parallel should be limited' do - expect(Astute::NodesRemover.new(ctx, nodes).remove).to eq({"nodes"=>[{"uid"=>"1"}, {"uid"=>"2"}]}) - end - - it 'should sleep between group of nodes' do - Astute::NodesRemover.any_instance.expects(:sleep).with(Astute.config.nodes_remove_interval) - Astute::NodesRemover.new(ctx, nodes).remove - end - - it 'should not use sleep for first group of nodes' do - Astute::NodesRemover.any_instance.expects(:sleep).once - Astute::NodesRemover.new(ctx, nodes).remove - end - end # nodes limits - - describe '#mclient_remove_piece_nodes' do - it 'should get array of nodes uids' do - remover = Astute::NodesRemover.new(ctx, nodes) - remover.expects(:mclient_remove_piece_nodes).with(all_of(includes("1"), includes("2"))).returns(mcollective_answer) - remover.remove - end - end - -end # describe \ No newline at end of file diff --git a/spec/unit/orchestrator_spec.rb b/spec/unit/orchestrator_spec.rb deleted file mode 100644 index caee054c..00000000 --- a/spec/unit/orchestrator_spec.rb +++ /dev/null @@ -1,462 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -require File.join(File.dirname(__FILE__), '../spec_helper') - -describe Astute::Orchestrator do - include SpecHelpers - - before(:each) do - @orchestrator = Astute::Orchestrator.new - @orchestrator.stubs(:write_input_data_to_file) - @reporter = mock('reporter') - @reporter.stub_everything - end - - describe '#task_deployment' do - let(:tasks_metadata) do - { - 'fault_tolerance_groups' => [] - } - end - - let(:tasks_graph) do - {"1"=> - [{ - "required_for" => [{ - "node_id" => "1", "name"=>"openstack-network-common-config" - }], - "requires"=>[ - {"node_id"=>"1", "name"=>"netconfig"}, - {"node_id"=>"2", "name"=>"neutron-db"}, - {"node_id"=>"2", "name"=>"neutron-keystone"}, - {"node_id"=>"1", "name"=>"top-role-compute"}, - {"node_id"=>"2", "name"=>"openstack-haproxy"} - ], - "type"=>"shell", - "id"=>"generate_keys_ceph" - }] - } - end - - let(:tasks_directory) do - {"generate_keys_ceph"=> - {"parameters"=> - {"retries"=>3, - "cmd"=>"sh generate_keys.sh -i 1 -s 'ceph' -p /var/lib/fuel/keys/", - "cwd"=>"/", - "timeout"=>180, - "interval"=>1}, - "type"=>"shell", - "id"=>"generate_keys_ceph" - } - } - end - - - it 'should run task deployment' do - Astute::TaskDeployment.any_instance.expects(:deploy).with({ - :tasks_metadata => tasks_metadata, - :tasks_graph => tasks_graph, - :tasks_directory => tasks_directory, - :dry_run => false - }) - - @orchestrator.task_deploy( - @reporter, - 'task_id', - { - :tasks_metadata => tasks_metadata, - :tasks_graph => tasks_graph, - :tasks_directory => tasks_directory, - :dry_run => false - } - ) - end - - it 'should use task proxy reporter' do - Astute::TaskDeployment.any_instance.stubs(:deploy) - - Astute::ProxyReporter::TaskProxyReporter.expects(:new).with( - @reporter - ) - - @orchestrator.task_deploy( - @reporter, - 'task_id', - { - :tasks_metadata => tasks_metadata, - :tasks_graph => tasks_graph, - :tasks_directory => tasks_directory - } - ) - end - end - - describe '#verify_networks' do - it 'should validate nodes availability before check' do - nodes = [{'uid' => '1'}, {'uid' => '2'}] - @orchestrator.expects(:node_type).returns([ - {'uid' => '1', 'node_type' => 'target'}, - {'uid' => '2', 'node_type' => 'bootstrap'} - ]) - Astute::Network.expects(:check_network).once - @orchestrator.verify_networks(@reporter, 'task_id', nodes) - end - - it 'should raise error if nodes availability test failed' do - nodes = [{'uid' => '1'}, {'uid' => '2'}] - @orchestrator.expects(:node_type).returns([{'uid' => '1', 'node_type' => 'target'}]) - Astute::Network.expects(:check_network).never - expect {@orchestrator.verify_networks(@reporter, 'task_id', nodes) } - .to raise_error(/Network verification not available because/) - end - - it 'should check network configuration' do - nodes = [{'uid' => '1'}] - @orchestrator.stubs(:validate_nodes_access) - Astute::Network.expects(:check_network).with(instance_of(Astute::Context), nodes) - @orchestrator.verify_networks(@reporter, 'task_id', nodes) - end - end - - let(:data) do - { - "engine"=>{ - "url"=>"http://localhost/cobbler_api", - "username"=>"cobbler", - "password"=>"cobbler", - "master_ip"=>"127.0.0.1", - }, - "task_uuid"=>"a5c44b9a-285a-4a0c-ae65-2ed6b3d250f4", - "nodes" => [ - { - 'uid' => '1', - 'profile' => 'centos-x86_64', - "slave_name"=>"controller-1", - "admin_ip" =>'1.2.3.5', - 'power_type' => 'ssh', - 'power_user' => 'root', - 'power_pass' => '/root/.ssh/bootstrap.rsa', - 'power-address' => '1.2.3.5', - 'hostname' => 'name.domain.tld', - 'name_servers' => '1.2.3.4 1.2.3.100', - 'name_servers_search' => 'some.domain.tld domain.tld', - 'netboot_enabled' => '1', - 'ks_meta' => 'some_param=1 another_param=2', - 'interfaces' => { - 'eth0' => { - 'mac_address' => '00:00:00:00:00:00', - 'static' => '1', - 'netmask' => '255.255.255.0', - 'ip_address' => '1.2.3.5', - 'dns_name' => 'node.mirantis.net', - }, - 'eth1' => { - 'mac_address' => '00:00:00:00:00:01', - 'static' => '0', - 'netmask' => '255.255.255.0', - 'ip_address' => '1.2.3.6', - } - }, - 'interfaces_extra' => { - 'eth0' => { - 'peerdns' => 'no', - 'onboot' => 'yes', - }, - 'eth1' => { - 'peerdns' => 'no', - 'onboot' => 'yes', - } - } - } - ] - } - end - - describe '#execute_tasks' do - it 'should execute tasks using nailgun hooks' do - @orchestrator.stubs(:report_result) - Astute::NailgunHooks.any_instance.expects(:process) - - @orchestrator.execute_tasks(@reporter, task_id="", tasks=[]) - end - - it 'should report succeed if all done without critical error' do - Astute::NailgunHooks.any_instance.stubs(:process) - @orchestrator.expects(:report_result).with({}, @reporter) - - @orchestrator.execute_tasks(@reporter, task_id="", tasks=[]) - end - - it 'it should rescue exception if task failed' do - Astute::NailgunHooks.any_instance.stubs(:process) - .raises(Astute::DeploymentEngineError) - - expect {@orchestrator.execute_tasks(@reporter, task_id="", tasks=[])} - .to raise_error(Astute::DeploymentEngineError) - end - - end #execute_tasks - - context 'stop deployment' do - let(:data) do - { - "engine"=>{ - "url"=>"http://10.109.0.2:80/cobbler_api", - "username"=>"cobbler", - "password"=>"JTcu4VoM", - "master_ip"=>"10.109.0.2" - }, - "nodes"=>[], - "stop_task_uuid"=>"26a5cfb5-797d-4385-9262-da88ae7a0e14", - "task_uuid"=>"3958fe00-5969-44e2-bb21-413993cfbd6b" - } - end - - let(:nodes) { [{'uid' => '1'}, {'uid' => '2'}] } - - let(:mclient) do - mclient = mock_rpcclient(nodes) - Astute::MClient.any_instance.stubs(:rpcclient).returns(mclient) - Astute::MClient.any_instance.stubs(:log_result).returns(mclient) - Astute::MClient.any_instance.stubs(:check_results_with_retries).returns(mclient) - mclient - end - - describe '#stop_puppet_deploy' do - - it 'should do nothing if nodes list is empty' do - result = @orchestrator.stop_puppet_deploy(@reporter, 'task_id', data['nodes']) - expect(result).to eql(nil) - end - - it 'should stop puppet' do - mclient.expects(:stop_and_disable) - @orchestrator.stop_puppet_deploy(@reporter, 'task_id', nodes) - end - end #stop_puppet_deploy - - describe '#remove_nodes' do - - it 'should do nothing if nodes list is empty' do - expect(@orchestrator.remove_nodes( - @reporter, - 'task_id', - data['engine'], - data['nodes'], - options={} - )).to eql(nil) - end - - it 'should remove nodes' do - Astute::Provisioner.any_instance.expects(:remove_nodes).once - @orchestrator.expects(:perform_pre_deletion_tasks) - .returns('status' => 'ready') - - @orchestrator.remove_nodes( - @reporter, - 'task_id', - data['engine'], - nodes, - options={} - ) - end - - it 'should run pre deletion tasks' do - Astute::Provisioner.any_instance.stubs(:remove_nodes) - @orchestrator.expects(:perform_pre_deletion_tasks).with( - @reporter, - 'task_id', - nodes, - {:reboot => true, :raise_if_error => false, :reset => false} - ).returns('status' => 'ready') - - @orchestrator.remove_nodes( - @reporter, - 'task_id', - data['engine'], - nodes, - options={} - ) - end - - it 'should deletion if run pre deletion tasks fail' do - @orchestrator.expects(:perform_pre_deletion_tasks).with( - @reporter, - 'task_id', - nodes, - {:reboot => true, :raise_if_error => false, :reset => true} - ).returns('status' => 'error') - - Astute::Provisioner.any_instance.expects(:remove_nodes).never - - @orchestrator.remove_nodes( - @reporter, - 'task_id', - data['engine'], - nodes, - {:reboot => true, :raise_if_error => false, :reset => true} - ) - end - end - - end #stop deployment - - describe '#provision' do - - let(:provisioning_info) do - { - "engine"=>{ - "url"=>"http://localhost/cobbler_api", - "username"=>"cobbler", - "password"=>"cobbler", - "master_ip"=>"127.0.0.1" - }, - "pre_provision"=> [ - { - "priority"=> 100, - "type"=> "shell", - "uids"=> ["master"], - "parameters"=> { - "retries"=> 1, - "cmd"=> "fa_build_image--log-file/var/log/fuel-agent-env-1.log" \ - "--data_drivernailgun_build_image--input_data'", - "cwd"=> "/", - "timeout"=> 3600, - "interval"=> 1 - } - } - ], - "nodes" => [ - { - 'uid' => '1', - 'profile' => 'centos-x86_64', - "slave_name"=>"controller-1", - "admin_ip" =>'1.2.3.5', - 'power_type' => 'ssh', - 'power_user' => 'root', - 'power_pass' => '/root/.ssh/bootstrap.rsa', - 'power-address' => '1.2.3.5', - 'hostname' => 'name.domain.tld', - 'name_servers' => '1.2.3.4 1.2.3.100', - 'name_servers_search' => 'some.domain.tld domain.tld', - 'netboot_enabled' => '1', - 'ks_meta' => { - 'gw' => '10.20.0.2', - 'mco_enable' => 1, - 'mco_vhost' => 'mcollective' - }, - 'interfaces' => { - 'eth0' => { - 'mac_address' => '00:00:00:00:00:00', - 'static' => '1', - 'netmask' => '255.255.255.0', - 'ip_address' => '1.2.3.5', - 'dns_name' => 'node.mirantis.net', - }, - 'eth1' => { - 'mac_address' => '00:00:00:00:00:01', - 'static' => '0', - 'netmask' => '255.255.255.0', - 'ip_address' => '1.2.3.6', - } - }, - 'interfaces_extra' => { - 'eth0' => { - 'peerdns' => 'no', - 'onboot' => 'yes', - }, - 'eth1' => { - 'peerdns' => 'no', - 'onboot' => 'yes', - } - } - } - ] - } - end - - it 'should run provision' do - Astute::CobblerManager.any_instance.stubs(:sleep) - Astute::Provisioner.any_instance.stubs(:sleep) - Astute::NailgunHooks.any_instance.stubs(:process) - - Astute::CobblerManager.any_instance.expects(:sync) - Astute::Provisioner.any_instance.expects(:provision).with( - instance_of(Astute::ProxyReporter::ProvisiningProxyReporter), - 'task_id', - provisioning_info - ) - - @orchestrator.provision( - @reporter, - 'task_id', - provisioning_info - ) - end - - it 'should pre provision if pre provision tasks present' do - Astute::CobblerManager.any_instance.stubs(:sleep) - Astute::Provisioner.any_instance.stubs(:sleep) - Astute::CobblerManager.any_instance.stubs(:sync) - Astute::Provisioner.any_instance.stubs(:provision) - - Astute::NailgunHooks.any_instance.expects(:process) - - @orchestrator.provision( - @reporter, - 'task_id', - provisioning_info, - ) - end - - it 'should not pre provision if no pre provision tasks present' do - Astute::CobblerManager.any_instance.stubs(:sleep) - Astute::Provisioner.any_instance.stubs(:sleep) - Astute::CobblerManager.any_instance.stubs(:sync) - Astute::Provisioner.any_instance.stubs(:provision) - - Astute::NailgunHooks.any_instance.expects(:process).never - - provisioning_info.delete('pre_provision') - @orchestrator.provision( - @reporter, - 'task_id', - provisioning_info, - ) - end - - it 'should raise informative error if pre provision tasks failed' do - Astute::CobblerManager.any_instance.stubs(:sleep) - Astute::Provisioner.any_instance.stubs(:sleep) - Astute::CobblerManager.any_instance.stubs(:sync) - Astute::Provisioner.any_instance.stubs(:provision) - - Astute::NailgunHooks.any_instance.expects(:process) - .raises(Astute::DeploymentEngineError , "Failed to execute hook") - - expect{@orchestrator.provision( - @reporter, - 'task_id', - provisioning_info, - )}.to raise_error(Astute::DeploymentEngineError, - /Image build task failed/) - end - - end #provision - - -end diff --git a/spec/unit/post_deploy_actions/post_patching_hook_spec.rb b/spec/unit/post_deploy_actions/post_patching_hook_spec.rb deleted file mode 100644 index 66d67a24..00000000 --- a/spec/unit/post_deploy_actions/post_patching_hook_spec.rb +++ /dev/null @@ -1,106 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require File.join(File.dirname(__FILE__), '../../spec_helper') - -describe Astute::PostPatchingHa do - include SpecHelpers - - let(:ctx) do - ctx = mock('context') - ctx.stubs(:task_id) - ctx.stubs(:reporter) - ctx.stubs(:status).returns('1' => 'success', '2' => 'success') - ctx - end - - let(:deploy_data) { [ - {'uid' => '1', - 'role' => 'controller', - 'openstack_version_prev' => 'old_version', - 'deployment_mode' => 'ha_compact', - 'cobbler' => { - 'profile' => 'centos-x86_64' - } - }, - {'uid' => '2', - 'role' => 'compute' - } - ] - } - - let(:post_patching_ha) { Astute::PostPatchingHa.new } - - it 'should run if upgrade/downgrade env' do - Astute::Pacemaker.expects(:commands).returns(['basic command']) - post_patching_ha.expects(:run_shell_command).returns(:data => {:exit_code => 0}) - post_patching_ha.process(deploy_data, ctx) - end - - it 'should not run if deploy new env' do - deploy_data.first.delete('openstack_version_prev') - - Astute::Pacemaker.expects(:commands).never - post_patching_ha.expects(:run_shell_command).never - - post_patching_ha.process(deploy_data, ctx) - end - - it 'should run if upgrade/downgrade not HA env' do - deploy_data.first['deployment_mode'] = 'simple' - - Astute::Pacemaker.expects(:commands).never - post_patching_ha.expects(:run_shell_command).never - - post_patching_ha.process(deploy_data, ctx) - end - - it 'should not change deployment status if command fail' do - Astute::Pacemaker.expects(:commands).returns(['basic command']) - post_patching_ha.expects(:run_shell_command).once.returns(:data => {:exit_code => 1}) - ctx.expects(:report_and_update_status).never - - post_patching_ha.process(deploy_data, ctx) - end - - it 'should not change deployment status if shell exec using mcollective fail' do - Astute::Pacemaker.expects(:commands).returns(['basic command']) - post_patching_ha.expects(:run_shell_command).once.returns(:data => {}) - - post_patching_ha.process(deploy_data, ctx) - ctx.expects(:report_and_update_status).never - end - - it 'should run command for every pacemaker services' do - Astute::Pacemaker.expects(:commands).returns(['command1', 'command2']) - post_patching_ha.expects(:run_shell_command).twice.returns(:data => {:exit_code => 1}) - - post_patching_ha.process(deploy_data, ctx) - end - - it 'should get commands for service ban' do - Astute::Pacemaker.expects(:commands).with('start', deploy_data).returns(['basic command']) - post_patching_ha.expects(:run_shell_command).returns(:data => {:exit_code => 0}) - post_patching_ha.process(deploy_data, ctx) - end - - it 'should not run if no controllers in cluster' do - deploy_data.first['role'] = 'cinder' - - Astute::Pacemaker.expects(:commands).never - post_patching_ha.expects(:run_shell_command).never - post_patching_ha.process(deploy_data, ctx) - end - -end \ No newline at end of file diff --git a/spec/unit/post_deployment_actions/restart_radosgw_hook_spec.rb b/spec/unit/post_deployment_actions/restart_radosgw_hook_spec.rb deleted file mode 100644 index 84de0568..00000000 --- a/spec/unit/post_deployment_actions/restart_radosgw_hook_spec.rb +++ /dev/null @@ -1,102 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require File.join(File.dirname(__FILE__), '../../spec_helper') - -describe Astute::RestartRadosgw do - include SpecHelpers - - let(:ctx) do - ctx = mock('context') - ctx.stubs(:task_id) - ctx.stubs(:reporter) - ctx.stubs(:status).returns(1 => 'success', 2 => 'success') - ctx - end - - let(:deploy_data) { [ - {'uid' => 1, - 'role' => 'controller', - 'nodes' => [ - { - 'uid' => 1, - 'slave_name' => 'node-1', - 'role' => 'controller' - }, - { - 'uid' => 2, - 'slave_name' => 'node-2', - 'role' => 'ceph-osd' - } - ] - }, - {'uid' => 2, - 'role' => 'ceph-osd', - 'storage' => { - 'objects_ceph' => true - } - } - ] - } - - let(:restart_radosgw) { Astute::RestartRadosgw.new } - - it 'should run if deploy success' do - restart_radosgw.expects(:run_shell_command).once.returns(:data => {:exit_code => 0}) - restart_radosgw.process(deploy_data, ctx) - end - - it 'should run if deploy fail' do - ctx.stubs(:status).returns(1 => 'error', 2 => 'success') - restart_radosgw.expects(:run_shell_command).once.returns(:data => {:exit_code => 0}) - - restart_radosgw.process(deploy_data, ctx) - end - - it 'should not change deployment status if command fail' do - restart_radosgw.expects(:run_shell_command).once.returns(:data => {:exit_code => 1}) - - restart_radosgw.process(deploy_data, ctx) - ctx.expects(:report_and_update_status).never - end - - it 'should not change deployment status if mcollective fail' do - restart_radosgw.expects(:run_shell_command).once.returns(:data => {}) - - restart_radosgw.process(deploy_data, ctx) - ctx.expects(:report_and_update_status).never - end - - it 'should not run if no ceph node present' do - deploy_data = [{'uid' => 1, 'role' => 'controller'}] - restart_radosgw.expects(:run_shell_command).never - - restart_radosgw.process(deploy_data, ctx) - end - - it 'should not run if objects_ceph is false' do - deploy_data[1]['storage']['objects_ceph'] = false - restart_radosgw.expects(:run_shell_command).never - - restart_radosgw.process(deploy_data, ctx) - end - - it 'should run only in controller nodes' do - restart_radosgw.expects(:run_shell_command).once - .with(ctx, [1], anything) - .returns(:data => {:exit_code => 0}) - restart_radosgw.process(deploy_data, ctx) - end - -end \ No newline at end of file diff --git a/spec/unit/post_deployment_actions/update_cluster_hosts_info_hook_spec.rb b/spec/unit/post_deployment_actions/update_cluster_hosts_info_hook_spec.rb deleted file mode 100644 index 9b8b92d0..00000000 --- a/spec/unit/post_deployment_actions/update_cluster_hosts_info_hook_spec.rb +++ /dev/null @@ -1,116 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require File.join(File.dirname(__FILE__), '../../spec_helper') - -describe Astute::UpdateClusterHostsInfo do - include SpecHelpers - - let(:ctx) do - ctx = mock('context') - ctx.stubs(:task_id) - ctx.stubs(:reporter) - ctx.stubs(:status).returns(1 => 'success', 2 => 'success') - ctx - end - - let(:deploy_data) { [ - {'uid' => 1, - 'role' => 'controller', - 'nodes' => [ - { - 'uid' => 1, - 'slave_name' => 'node-1' - }, - { - 'uid' => 2, - 'slave_name' => 'node-2' - } - ] - }, - {'uid' => 2, - 'role' => 'compute' - } - ] - } - - let(:update_hosts) { Astute::UpdateClusterHostsInfo.new } - - it 'should run if deploy success' do - update_hosts.expects(:upload_file).twice - update_hosts.expects(:run_shell_command).twice.returns(:data => {:exit_code => 0}) - update_hosts.process(deploy_data, ctx) - end - - it 'should run if deploy fail' do - ctx.stubs(:status).returns(1 => 'error', 2 => 'success') - update_hosts.expects(:upload_file).twice - update_hosts.expects(:run_shell_command).twice.returns(:data => {:exit_code => 0}) - - update_hosts.process(deploy_data, ctx) - end - - it 'should not change deployment status if command fail' do - update_hosts.expects(:upload_file).twice - update_hosts.expects(:run_shell_command).twice.returns(:data => {:exit_code => 1}) - - update_hosts.process(deploy_data, ctx) - ctx.expects(:report_and_update_status).never - end - - it 'should not change deployment status if shell exec using mcollective fail' do - update_hosts.expects(:upload_file).twice - update_hosts.expects(:run_shell_command).twice.returns(:data => {}) - - update_hosts.process(deploy_data, ctx) - ctx.expects(:report_and_update_status).never - end - - it 'should run in all cluster nodes' do - deploy_data.first['nodes'] += [{'uid' => 3, 'slave_name' => 'node-3'}] - update_hosts.expects(:upload_file).with(1, anything, ctx) - update_hosts.expects(:upload_file).with(2, anything, ctx) - update_hosts.expects(:upload_file).with(3, anything, ctx) - update_hosts.expects(:run_shell_command) - .with(ctx, [1], anything) - .returns(:data => {:exit_code => 0}) - update_hosts.expects(:run_shell_command) - .with(ctx, [2], anything) - .returns(:data => {:exit_code => 0}) - update_hosts.expects(:run_shell_command) - .with(ctx, [3], anything) - .returns(:data => {:exit_code => 0}) - update_hosts.process(deploy_data, ctx) - end - - describe '#upload_file' do - - let(:node_uid) { 1 } - - before(:each) do - mock_rpcclient([{'uid' => node_uid}]) - end - - it 'should not raise timeout error if mcollective runs out of the timeout' do - Astute::MClient.any_instance.stubs(:mc_send).raises(Astute::MClientTimeout) - expect { update_hosts.send(:upload_file, node_uid, "", ctx) }.to_not raise_error - end - - it 'should not raise mcollective error if it occurred' do - Astute::MClient.any_instance.stubs(:mc_send).raises(Astute::MClientError) - expect { update_hosts.send(:upload_file, node_uid, "", ctx) }.to_not raise_error - end - end - -end \ No newline at end of file diff --git a/spec/unit/post_deployment_actions/update_no_quorum_policy_spec.rb b/spec/unit/post_deployment_actions/update_no_quorum_policy_spec.rb deleted file mode 100644 index 397be374..00000000 --- a/spec/unit/post_deployment_actions/update_no_quorum_policy_spec.rb +++ /dev/null @@ -1,152 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require File.join(File.dirname(__FILE__), '../../spec_helper') - -describe Astute::UpdateNoQuorumPolicy do - include SpecHelpers - - let(:ctx) do - ctx = mock('context') - ctx.stubs(:task_id) - ctx.stubs(:reporter) - ctx.stubs(:status).returns(1 => 'success', 2 => 'success') - ctx - end - - let(:deploy_dat1) { [ - {'uid' => 1, - 'role' => 'primary-controller', - 'deployment_mode' => 'ha_compact', - 'nodes' => [ - { - 'uid' => 1, - 'slave_name' => 'node-1', - 'role' => 'primary-controller' - }, - { - 'uid' => 2, - 'slave_name' => 'node-2', - 'role' => 'ceph-osd' - } - ] - }, - {'uid' => 2, - 'role' => 'ceph-osd', - 'storage' => { - 'objects_ceph' => true - } - } - ] - } - - let(:deploy_dat3) { [ - {'uid' => 1, - 'role' => 'primary-controller', - 'deployment_mode' => 'ha_compact', - 'nodes' => [ - { - 'uid' => 1, - 'slave_name' => 'node-1', - 'role' => 'primary-controller' - }, - { - 'uid' => 2, - 'slave_name' => 'node-2', - 'role' => 'ceph-osd' - }, - { - 'uid' => 3, - 'slave_name' => 'node-3', - 'role' => 'controller' - }, - { - 'uid' => 4, - 'slave_name' => 'node-4', - 'role' => 'controller' - } - ] - }, - {'uid' => 2, - 'role' => 'ceph-osd', - 'storage' => { - 'objects_ceph' => true - } - }, - { - 'uid' => 3, - 'slave_name' => 'node-3', - 'role' => 'controller' - }, - { - 'uid' => 4, - 'slave_name' => 'node-4', - 'role' => 'controller' - } - ] - } - - let(:update_no_quorum_policy) { Astute::UpdateNoQuorumPolicy.new } - - it 'should change nothing if 2 or less controllers in cluster' do - update_no_quorum_policy.expects(:run_shell_command).never - update_no_quorum_policy.process(deploy_dat1, ctx) - end - - it 'should run if deploy success' do - update_no_quorum_policy.expects(:run_shell_command).once.returns(:data => {:exit_code => 0}) - update_no_quorum_policy.process(deploy_dat3, ctx) - end - - it 'should not run if primary-controller fail' do - ctx.stubs(:status).returns(1 => 'error', 2 => 'success') - update_no_quorum_policy.expects(:run_shell_command).never - update_no_quorum_policy.process(deploy_dat3, ctx) - end - - it 'should run if not primary-controller fail' do - ctx.stubs(:status).returns(1 => 'success', 2 => 'error') - update_no_quorum_policy.expects(:run_shell_command).once.returns(:data => {:exit_code => 0}) - - update_no_quorum_policy.process(deploy_dat3, ctx) - end - - it 'should not change deployment status if command fail' do - update_no_quorum_policy.expects(:run_shell_command).once.returns(:data => {:exit_code => 1}) - - update_no_quorum_policy.process(deploy_dat3, ctx) - ctx.expects(:report_and_update_status).never - end - - it 'should not change deployment status if mcollective fail' do - update_no_quorum_policy.expects(:run_shell_command).once.returns(:data => {}) - - update_no_quorum_policy.process(deploy_dat3, ctx) - ctx.expects(:report_and_update_status).never - end - - it 'should run only in primary-controller node' do - update_no_quorum_policy.expects(:run_shell_command).once - .with(ctx, [1], anything) - .returns(:data => {:exit_code => 0}) - update_no_quorum_policy.process(deploy_dat3, ctx) - end - - it 'should only run in case of HA mode' do - deploy_dat3.first['deployment_mode'] = 'multinode' - update_no_quorum_policy.expects(:run_shell_command).never - update_no_quorum_policy.process(deploy_dat3, ctx) - end - -end diff --git a/spec/unit/post_deployment_actions/upload_cirros_image_hook_spec.rb b/spec/unit/post_deployment_actions/upload_cirros_image_hook_spec.rb deleted file mode 100644 index 8611956f..00000000 --- a/spec/unit/post_deployment_actions/upload_cirros_image_hook_spec.rb +++ /dev/null @@ -1,214 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require File.join(File.dirname(__FILE__), '../../spec_helper') - -describe Astute::UploadCirrosImage do - include SpecHelpers - - let(:ctx) do - ctx = mock('context') - ctx.stubs(:task_id) - ctx.stubs(:reporter) - ctx.stubs(:status).returns('1' => 'success', '2' => 'success') - ctx - end - - let(:deploy_data) { [ - {'uid' => '1', - 'role' => 'controller', - 'access' => {}, - 'test_vm_image' => { - 'disk_format' => 'qcow2', - 'container_format' => 'bare', - 'public' => 'true', - 'img_name' => 'TestVM', - 'os_name' => 'cirros', - 'img_path' => '/opt/vm/cirros-x86_64-disk.img', - 'glance_properties' => - '--property murano_image_info=\'{\"title\": \"Murano Demo\", \"type\": \"cirros.demo\"}\'' - }, - 'nodes' => [{'uid'=>'1', 'role'=>'controller'}, - {'uid'=>'2', 'role'=>'compute'}] - }, - {'uid' => '2', - 'role' => 'compute', - 'nodes' => [{'uid'=>'1', 'role'=>'controller'}, - {'uid'=>'2', 'role'=>'compute'}], - 'test_vm_image' => { - 'disk_format' => 'qcow2', - 'container_format' => 'bare', - 'public' => 'true', - 'img_name' => 'TestVM', - 'os_name' => 'cirros', - 'img_path' => '/opt/vm/cirros-x86_64-disk.img', - 'glance_properties' => - '--property murano_image_info=\'{\"title\": \"Murano Demo\", \"type\": \"cirros.demo\"}\'' - }, - } - ] - } - - let(:upload_cirros_image) { Astute::UploadCirrosImage.new } - - it 'should try to add cirros image for any deploy' do - upload_cirros_image.stubs(:run_shell_command) - .returns(:data => {:exit_code => 0}) - .then.returns(:data => {:exit_code => 0}) - - upload_cirros_image.process(deploy_data, ctx) - end - - it 'should tries to check glance several times' do - upload_cirros_image.stubs(:sleep).with(10).times(2) - - upload_cirros_image.stubs(:run_shell_command) - .returns(:data => {:exit_code => 1}) - .then.returns(:data => {:exit_code => 1}) - .then.returns(:data => {:exit_code => 0}) - .then.returns(:data => {:exit_code => 0}) - - upload_cirros_image.process(deploy_data, ctx) - end - - it 'should raise deploy if glance glance was not installed properly' do - upload_cirros_image.stubs(:run_shell_command) - .returns(:data => {:exit_code => 1}).times(5) - upload_cirros_image.stubs(:sleep).with(10).times(4) - - ctx.expects(:report_and_update_status) - .with('nodes' => [{ - 'uid' => '1', - 'role' => 'controller', - 'status' => 'error', - 'error_type' => 'deploy' - }]) - - expect {upload_cirros_image.process(deploy_data, ctx)} - .to raise_error(Astute::CirrosError, /glance was not installed properly/) - end - - it 'should not send node error status for controller and raise if deploy \ - fail, controller present in task and fail to detect glance' do - ctx.expects(:report_and_update_status).never - - ctx.stubs(:status).returns('1' => 'error', '2' => 'success') - upload_cirros_image.stubs(:run_shell_command) - .returns(:data => {:exit_code => 1}).times(5) - upload_cirros_image.stubs(:sleep).with(10).times(4) - - expect { - upload_cirros_image.process(deploy_data, ctx) - }.not_to raise_error(Astute::CirrosError) - end - - it 'should not send node error status for last node and raise if deploy \ - fail, controller do not present in task and fail to detect glance' do - ctx.expects(:report_and_update_status).never - - ctx.stubs(:status).returns('1' => 'success', '2' => 'error') - upload_cirros_image.stubs(:run_shell_command) - .returns(:data => {:exit_code => 1}).times(5) - upload_cirros_image.stubs(:sleep).with(10).times(4) - - expect { - upload_cirros_image.process([deploy_data.last], ctx) - }.not_to raise_error(Astute::CirrosError) - end - - it 'should try to add image again if we only add new nodes \ - to existing cluster' do - upload_cirros_image.stubs(:run_shell_command) - .returns(:data => {:exit_code => 0}) - .then.returns(:data => {:exit_code => 0}) - upload_cirros_image.process(deploy_data, ctx) - end - - it 'should not add new image if it already added' do - upload_cirros_image.stubs(:run_shell_command) - .returns(:data => {:exit_code => 0}) - .then.returns(:data => {:exit_code => 0}) - expect(upload_cirros_image.process(deploy_data, ctx)).to eq true - end - - it 'should add new image if cluster deploy success and \ - no image was added before' do - upload_cirros_image.stubs(:run_shell_command) - .returns(:data => {:exit_code => 0}) - .then.returns(:data => {:exit_code => 0}) - expect(upload_cirros_image.process(deploy_data, ctx)).to eq true - end - - it 'should send node error status for controller and raise if deploy \ - success, controller present in task and no image was added \ - before and fail to add image' do - ctx.expects(:report_and_update_status) - .with('nodes' => [{ - 'uid' => '1', - 'role' => 'controller', - 'status' => 'error', - 'error_type' => 'deploy' - }]) - upload_cirros_image.stubs(:run_shell_command) - .returns(:data => {:exit_code => 0}) - .then.returns(:data => {:exit_code => 1}) - .then.returns(:data => {:exit_code => 1}) - expect {upload_cirros_image.process(deploy_data, ctx)} - .to raise_error(Astute::CirrosError, 'Upload cirros "TestVM" image failed') - end - - it 'should send node error status for last node in queue and raise if deploy \ - success, controller do not present in task and no image was added \ - before and fail to add image' do - ctx.expects(:report_and_update_status) - .with('nodes' => [{ - 'uid' => '2', - 'role' => 'compute', - 'status' => 'error', - 'error_type' => 'deploy' - }]) - upload_cirros_image.stubs(:run_shell_command) - .returns(:data => {:exit_code => 0}) - .then.returns(:data => {:exit_code => 1}) - .then.returns(:data => {:exit_code => 1}) - expect {upload_cirros_image.process([deploy_data.last], ctx)} - .to raise_error(Astute::CirrosError, 'Upload cirros "TestVM" image failed') - end - - it 'should send node error status for controller and raise if deploy \ - success and fail to add image because of mcollective error' do - ctx.expects(:report_and_update_status) - .with('nodes' => [{ - 'uid' => '1', - 'role' => 'controller', - 'status' => 'error', - 'error_type' => 'deploy' - }]) - upload_cirros_image.stubs(:run_shell_command) - .returns(:data => {:exit_code => 0}) - .then.returns(:data => {}) - .then.returns(:data => {}) - expect {upload_cirros_image.process(deploy_data, ctx)} - .to raise_error(Astute::CirrosError, 'Upload cirros "TestVM" image failed') - end - - it 'should run only in controller node' do - upload_cirros_image.stubs(:run_shell_command) - .with(ctx, ['1'], anything) - .returns(:data => {:exit_code => 0}) - .then.returns(:data => {:exit_code => 0}) - upload_cirros_image.process(deploy_data, ctx) - end - -end #'upload_cirros_image' diff --git a/spec/unit/pre_delete_spec.rb b/spec/unit/pre_delete_spec.rb deleted file mode 100644 index d283799f..00000000 --- a/spec/unit/pre_delete_spec.rb +++ /dev/null @@ -1,243 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -require File.join(File.dirname(__FILE__), '../spec_helper') - -describe Astute::PreDelete do - include SpecHelpers - let(:ctx) { mock_ctx } - let(:success_result) { {"status"=>"ready"} } - - let(:mclient) do - mclient = mock_rpcclient - Astute::MClient.any_instance.stubs(:rpcclient).returns(mclient) - Astute::MClient.any_instance.stubs(:log_result).returns(mclient) - Astute::MClient.any_instance.stubs(:check_results_with_retries).returns(mclient) - mclient - end - - def build_mcresult(stdout="", sender="1", exit_code=0) - rs = {:sender => sender, :data => {:stdout => stdout, :exit_code => exit_code}} - mcresult_mock = mock_mc_result(rs) - mock_result = mock - mock_result.stubs(:results).returns(rs) - mock_result.stubs(:each).returns(mcresult_mock) - [mock_result] - end - - describe '#check_ceph_osds' do - - context "no ceph-osd nodes" do - let(:nodes) { [ - {"id" => "1", "roles" => ["controller"]}, - {"id" => "2", "roles" => ["compute"]} - ] - } - - it "should do nothing if no nodes have ceph-osd role" do - expect(Astute::PreDelete.check_ceph_osds(ctx, nodes)).to eq(success_result) - end - end - - context "nodes with ceph-osd role" do - let(:nodes) { [ - {"id" => "1", "roles" => ["primary-controller"]}, - {"id" => "2", "roles" => ["compute", "ceph-osd"], - "slave_name" => "node-2"} - ] - } - let(:pg_cmd) { - cmd = "ceph pg dump 2>/dev/null | " \ - "awk '//{print $14, $16}' | " \ - "egrep -o '\\<(1|2)\\>' | " \ - "sort -un" - } - let(:osd_cmd) { "ceph -f json osd tree" } - let(:json_resp) { '{"nodes": [{"name": "node-2", "children": [1,2]}]}'} - let(:error_result) do - msg = "Ceph data still exists on: node-2. You must manually " \ - "remove the OSDs from the cluster and allow Ceph to " \ - "rebalance before deleting these nodes." - {"status" => "error", "error" => msg} - end - - it "should raise error if OSDs contain data" do - mclient.expects(:execute).with({:cmd => osd_cmd}) - .returns(build_mcresult(stdout=json_resp)) - - mclient.expects(:execute).with({:cmd => pg_cmd}) - .returns(build_mcresult(stdout="1\n2")) - - expect(Astute::PreDelete.check_ceph_osds(ctx, nodes)).to eq(error_result) - end - - it 'should ignore nodes with unconfigured or failed ceph' do - mclient.expects(:execute).with({:cmd => osd_cmd}).twice - .returns(build_mcresult(stdout="", "2", 42)) - .then.returns(build_mcresult(stdout=json_resp, "3", 1)) - - mclient.expects(:execute).with({:cmd => pg_cmd}).never - all_nodes = nodes + [{ - "id" => "3", - "roles" => ["compute", "ceph-osd"], - "slave_name" => "node-3"} - ] - expect(Astute::PreDelete.check_ceph_osds(ctx, all_nodes)).to eq(success_result) - end - - it 'should find live ceph installation' do - mclient.expects(:execute).with({:cmd => osd_cmd}).twice - .returns(build_mcresult(stdout="", "2", 42)) - .then.returns(build_mcresult(stdout=json_resp, "3", 0)) - - mclient.expects(:execute).with({:cmd => pg_cmd}) - .returns(build_mcresult(stdout="1\n2")) - - all_nodes = nodes + [{ - "id" => "3", - "roles" => ["compute", "ceph-osd"], - "slave_name" => "node-3"} - ] - expect(Astute::PreDelete.check_ceph_osds(ctx, all_nodes)).to eq(error_result) - end - - it "should succeed with no pgs placed on node" do - mclient.expects(:execute).with({:cmd => osd_cmd}) - .returns(build_mcresult(stdout=json_resp)) - - mclient.expects(:execute).with({:cmd => pg_cmd}) - .returns(build_mcresult(stdout="3\n4")) - - expect(Astute::PreDelete.check_ceph_osds(ctx, nodes)).to eq(success_result) - end - end - - end # check_ceph_osds - - describe '#remove_ceph_mons' do - - let(:mon_cmd) { "ceph -f json mon dump" } - let(:json_resp) do - '{ - "epoch": 5, - "mons": [ - {"name":"node-1", "addr":"192.168.0.11:6789\/0"}, - {"name":"node-2", "addr":"192.168.0.12:6789\/0"}, - {"name":"node-3", "addr":"192.168.0.13:6789\/0"} - ] - }' - end - - def mon_rm_cmd(slave_name) - "ceph mon remove #{slave_name}" - end - - let(:nodes) { [ - {"id" => "1", "roles" => ["controller"], "slave_name" => "node-1"}, - {"id" => "2", "roles" => ["controller"], "slave_name" => "node-2"} - ] - } - - context "no ceph-mon nodes" do - let(:nodes) { [ - {"id" => "3", "roles" => ["cinder"]}, - {"id" => "4", "roles" => ["compute"]} - ] - } - - it "should do nothing if no nodes have ceph-osd role" do - expect(Astute::PreDelete.remove_ceph_mons(ctx, nodes)).to eq(success_result) - end - end - - it 'should ignore nodes with unconfigured or failed ceph mons' do - mclient.expects(:execute).with({:cmd => mon_cmd}).twice - .returns(build_mcresult(stdout="", "1", 42)) - .then.returns(build_mcresult(stdout=json_resp, "2", 1)) - - nodes.each do |node| - mclient.expects(:execute).with({:cmd => mon_rm_cmd(node['slave_name'])}).never - end - - expect(Astute::PreDelete.remove_ceph_mons(ctx, nodes)).to eq(success_result) - end - - it 'should find and delete live ceph mon installation' do - mclient.expects(:execute).with({:cmd => mon_cmd}).twice - .returns(build_mcresult(stdout="", "1", 42)) - .then.returns(build_mcresult(stdout=json_resp, "2", 0)) - - nodes.each do |node| - mclient.expects(:execute).with({:cmd => mon_rm_cmd(node['slave_name'])}).once - .returns(build_mcresult(stdout="", node['id'], 0)) - end - - mclient.expects(:execute).with({:cmd => - "sed -i \"s/mon_initial_members.*/mon_initial_members = node-3/g\" /etc/ceph/ceph.conf"}) - .returns(build_mcresult(stdout="", "3", 0)) - - mclient.expects(:execute).with({:cmd => - "sed -i \"s/mon_host.*/mon_host = 192.168.0.13/g\" /etc/ceph/ceph.conf"}) - .returns(build_mcresult(stdout="", "3", 0)) - - expect(Astute::PreDelete.remove_ceph_mons(ctx, nodes)).to eq(success_result) - end - - end # remove_ceph_mons - - context "verify that mcollective is running" do - let(:nodes) { [ - {"uid" => 1, "roles" => ["controller"]}, - {"uid" => 2, "roles" => ["compute"]} - ] - } - let(:error_result) do - msg = "MCollective is not running on nodes: 2. " \ - "MCollective must be running to properly delete a node." - - {"status" => "error", - "error" => msg, - "error_nodes" => [{"uid" => '2'}] - } - end - - it "should prevent deletion of nodes when mcollective is not running" do - mc_res1 = mock_mc_result({:sender => "1"}) - - mclient.expects(:get_type).returns([mc_res1]) - .then.returns([]).times(Astute.config[:mc_retries]) - expect(Astute::PreDelete.check_for_offline_nodes(ctx, nodes)).to eq(error_result) - end - - it "should allow deletion of nodes when mcollective is running" do - mc_res1 = mock_mc_result({:sender => "1"}) - mc_res2 = mock_mc_result({:sender => "2"}) - mclient.expects(:get_type).returns([mc_res1, mc_res2]) - - expect(Astute::PreDelete.check_for_offline_nodes(ctx, nodes)).to eq(success_result) - end - - it "should check availability several times" do - mc_res1 = mock_mc_result({:sender => "1"}) - mc_res2 = mock_mc_result({:sender => "2"}) - mclient.expects(:get_type).returns([mc_res1]) - .then.returns([]) - .then.returns([mc_res2]).times(3) - - expect(Astute::PreDelete.check_for_offline_nodes(ctx, nodes)).to eq(success_result) - end - end - -end # describe diff --git a/spec/unit/pre_deploy_actions/connect_facts_hook_spec.rb b/spec/unit/pre_deploy_actions/connect_facts_hook_spec.rb deleted file mode 100644 index efad3ccb..00000000 --- a/spec/unit/pre_deploy_actions/connect_facts_hook_spec.rb +++ /dev/null @@ -1,59 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require File.join(File.dirname(__FILE__), '../../spec_helper') - -describe Astute::ConnectFacts do - include SpecHelpers - - let(:ctx) do - ctx = mock('context') - ctx.stubs(:task_id) - ctx.stubs(:reporter) - ctx.stubs(:status).returns('1' => 'success', '2' => 'success') - ctx - end - - let(:deploy_data) { [ - {'uid' => '1', - 'role' => 'controller', - 'openstack_version_prev' => 'old_version', - 'cobbler' => { - 'profile' => 'centos-x86_64' - } - } - ] - } - - let(:connect_facts) { Astute::ConnectFacts.new } - - let(:mclient) do - mclient = mock_rpcclient(deploy_data) - Astute::MClient.any_instance.stubs(:rpcclient).returns(mclient) - Astute::MClient.any_instance.stubs(:log_result).returns(mclient) - Astute::MClient.any_instance.stubs(:check_results_with_retries).returns(mclient) - mclient - end - - it 'should symbolic .yaml file to astute.yaml one' do - connect_facts.expects(:run_shell_command).with( - ctx, - ['1'], - 'ln -s -f /etc/controller.yaml /etc/astute.yaml' - ).returns(:data => {:exit_code => 0}) - - connect_facts.process(deploy_data, ctx) - end - -end \ No newline at end of file diff --git a/spec/unit/pre_deployment_actions/enable_puppet_deploy_hook_spec.rb b/spec/unit/pre_deployment_actions/enable_puppet_deploy_hook_spec.rb deleted file mode 100644 index 2c5b28fc..00000000 --- a/spec/unit/pre_deployment_actions/enable_puppet_deploy_hook_spec.rb +++ /dev/null @@ -1,42 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require File.join(File.dirname(__FILE__), '../../spec_helper') - -describe Astute::EnablePuppetDeploy do - include SpecHelpers - - let(:ctx) do - tctx = mock_ctx - tctx.stubs(:status).returns({}) - tctx - end - - let(:mclient) do - mclient = mock_rpcclient(deploy_data) - Astute::MClient.any_instance.stubs(:rpcclient).returns(mclient) - Astute::MClient.any_instance.stubs(:log_result).returns(mclient) - Astute::MClient.any_instance.stubs(:check_results_with_retries).returns(mclient) - mclient - end - - let(:deploy_data) { [{'uid' => 1, 'deployment_id' => 1}, {'uid' => 2}] } - let(:enable_puppet_deploy) { Astute::EnablePuppetDeploy.new } - - it 'should enable puppet for all nodes' do - mclient.expects(:enable) - enable_puppet_deploy.process(deploy_data, ctx) - end - -end \ No newline at end of file diff --git a/spec/unit/pre_deployment_actions/generate_keys_hook_spec.rb b/spec/unit/pre_deployment_actions/generate_keys_hook_spec.rb deleted file mode 100644 index c19b4680..00000000 --- a/spec/unit/pre_deployment_actions/generate_keys_hook_spec.rb +++ /dev/null @@ -1,140 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require File.join(File.dirname(__FILE__), '../../spec_helper') - -describe Astute::GenerateKeys do - include SpecHelpers - - before(:each) do - Astute.config.puppet_keys = ['mongodb'] - end - - let(:ctx) do - tctx = mock_ctx - tctx.stubs(:status).returns({}) - tctx - end - - let(:deploy_data) { [{'uid' => 1, 'deployment_id' => 1}, {'uid' => 2}] } - let(:generate_keys) { Astute::GenerateKeys.new } - - around(:each) do |example| - old_keys_dir = Astute.config.keys_src_dir - old_puppet_keys = Astute.config.puppet_keys - example.run - Astute.config.keys_src_dir = old_keys_dir - Astute.config.puppet_keys = old_puppet_keys - end - - it 'should raise error if deployment_id is not set' do - nodes = [{'uid' => 1}, {'uid' => 2}] - expect { generate_keys.process(nodes, ctx) }.to raise_error('Deployment_id is missing') - end - - - it 'should save files in correct place: KEY_DIR///' do - generate_keys.stubs(:run_system_command).returns([0, "", ""]) - - Dir.mktmpdir do |temp_dir| - Astute.config.keys_src_dir = temp_dir - generate_keys.process(deploy_data, ctx) - key_dir = File.join(temp_dir, deploy_data.first['uid'].to_s, 'mongodb') - expect(File.directory? key_dir).to eq true - end - end - - it 'should raise error if directory for key was not created' do - FileUtils.stubs(:mkdir_p).returns(false) - File.stubs(:directory?).returns(false) - - expect { generate_keys.process(deploy_data, ctx) }.to raise_error(Astute::DeploymentEngineError, - /Could not create directory/) - end - - it 'should raise error if key generation fail' do - FileUtils.stubs(:mkdir_p).returns(true) - File.stubs(:directory?).returns(true) - generate_keys.stubs(:run_system_command).returns([1, "", ""]) - - expect { generate_keys.process(deploy_data, ctx) }.to raise_error(Astute::DeploymentEngineError, - /Could not generate key! Command:/) - end - - it 'should raise error if key generation command not found' do - FileUtils.stubs(:mkdir_p).returns(true) - File.stubs(:directory?).returns(true) - generate_keys.stubs(:run_system_command).returns([127, "Command not found", ""]) - - expect { generate_keys.process(deploy_data, ctx) }.to raise_error(Astute::DeploymentEngineError, - /Command not found/) - end - - it 'should run key generation with correct command' do - FileUtils.stubs(:mkdir_p).returns(true) - File.stubs(:directory?).returns(true) - - key_path = File.join( - Astute.config.keys_src_dir, - deploy_data.first['deployment_id'].to_s, - 'mongodb', - 'mongodb.key' - ) - cmd = "openssl rand -base64 741 > #{key_path} 2>&1" - generate_keys.expects(:run_system_command).with(cmd).returns([0, "", ""]) - - generate_keys.process(deploy_data, ctx) - end - - it 'should not overwrite files' do - Dir.mktmpdir do |temp_dir| - Astute.config.keys_src_dir = temp_dir - key_dir = File.join(temp_dir, deploy_data.first['uid'].to_s, 'mongodb') - key_path = File.join(key_dir, 'mongodb.key') - FileUtils.mkdir_p key_dir - File.open(key_path, 'w') { |file| file.write("say no overwrite") } - generate_keys.process(deploy_data, ctx) - - expect(File.exist? key_path).to eq true - expect(File.read key_path).to eq 'say no overwrite' - end - end - - it 'should check next key if find existing' do - Astute.config.puppet_keys = ['mongodb', 'test'] - mongodb_key_path = File.join( - Astute.config.keys_src_dir, - deploy_data.first['deployment_id'].to_s, - 'mongodb', - 'mongodb.key' - ) - test_key_path = File.join( - Astute.config.keys_src_dir, - deploy_data.first['deployment_id'].to_s, - 'test', - 'test.key' - ) - - FileUtils.stubs(:mkdir_p).returns(true).twice - File.stubs(:directory?).returns(true).twice - - File.stubs(:exist?).with(mongodb_key_path).returns(true) - File.stubs(:exist?).with(test_key_path).returns(false) - - generate_keys.expects(:run_system_command).returns([0, "", ""]) - - generate_keys.process(deploy_data, ctx) - end - -end diff --git a/spec/unit/pre_deployment_actions/generate_ssh_keys_hook_spec.rb b/spec/unit/pre_deployment_actions/generate_ssh_keys_hook_spec.rb deleted file mode 100644 index 226bad1b..00000000 --- a/spec/unit/pre_deployment_actions/generate_ssh_keys_hook_spec.rb +++ /dev/null @@ -1,126 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require File.join(File.dirname(__FILE__), '../../spec_helper') - -describe Astute::GenerateSshKeys do - include SpecHelpers - - around(:each) do |example| - old_puppet_ssh_keys = Astute.config.puppet_keys - old_ssh_keys_dir = Astute.config.keys_src_dir - example.run - Astute.config.keys_src_dir = old_ssh_keys_dir - Astute.config.puppet_keys = old_puppet_ssh_keys - end - - before(:each) do - Astute.config.puppet_ssh_keys = ['nova'] - end - - let(:ctx) do - tctx = mock_ctx - tctx.stubs(:status).returns({}) - tctx - end - - let(:deploy_data) { [{'uid' => 1, 'deployment_id' => 1}, {'uid' => 2}] } - let(:generate_ssh_keys) { Astute::GenerateSshKeys.new } - - it 'should raise error if deployment_id is not set' do - nodes = [{'uid' => 1}, {'uid' => 2}] - expect { generate_ssh_keys.process(nodes, ctx) }.to raise_error('Deployment_id is missing') - end - - - it 'should save files in correct place: KEY_DIR///' do - generate_ssh_keys.stubs(:run_system_command).returns([0, "", ""]) - - Dir.mktmpdir do |temp_dir| - Astute.config.keys_src_dir = temp_dir - generate_ssh_keys.process(deploy_data, ctx) - key_dir = File.join(temp_dir, deploy_data.first['uid'].to_s, 'nova') - - expect(File.directory? key_dir).to eq true - end - end - - it 'should raise error if directory for key was not created' do - FileUtils.stubs(:mkdir_p).returns(false) - File.stubs(:directory?).returns(false) - - expect { generate_ssh_keys.process(deploy_data, ctx) }.to raise_error(Astute::DeploymentEngineError, - /Could not create directory/) - end - - it 'should raise error if ssh key generation fail' do - FileUtils.stubs(:mkdir_p).returns(true) - File.stubs(:directory?).returns(true) - generate_ssh_keys.stubs(:run_system_command).returns([1, "", ""]) - - expect { generate_ssh_keys.process(deploy_data, ctx) }.to raise_error(Astute::DeploymentEngineError, - /Could not generate ssh key! Command:/) - end - - it 'should raise error if ssh key generation command not found' do - FileUtils.stubs(:mkdir_p).returns(true) - File.stubs(:directory?).returns(true) - generate_ssh_keys.stubs(:run_system_command).returns([127, "Command not found", ""]) - - expect { generate_ssh_keys.process(deploy_data, ctx) }.to raise_error(Astute::DeploymentEngineError, - /Command not found/) - end - - it 'should run ssh key generation with correct command' do - FileUtils.stubs(:mkdir_p).returns(true) - File.stubs(:directory?).returns(true) - - key_path = File.join(Astute.config.keys_src_dir, deploy_data.first['deployment_id'].to_s, 'nova', 'nova') - cmd = "ssh-keygen -b 2048 -t rsa -N '' -f #{key_path} 2>&1" - generate_ssh_keys.expects(:run_system_command).with(cmd).returns([0, "", ""]) - - generate_ssh_keys.process(deploy_data, ctx) - end - - it 'should not overwrite files' do - Dir.mktmpdir do |temp_dir| - Astute.config.keys_src_dir = temp_dir - key_dir = File.join(temp_dir, deploy_data.first['uid'].to_s, 'nova') - key_path = File.join(key_dir, 'nova') - FileUtils.mkdir_p key_dir - File.open(key_path, 'w') { |file| file.write("say no overwrite") } - generate_ssh_keys.process(deploy_data, ctx) - - expect(File.exist? key_path).to eq true - expect(File.read key_path).to eq 'say no overwrite' - end - end - - it 'should check next key if find existing' do - Astute.config.puppet_ssh_keys = ['nova', 'test'] - nova_key_path = File.join(Astute.config.keys_src_dir, deploy_data.first['deployment_id'].to_s, 'nova', 'nova') - test_key_path = File.join(Astute.config.keys_src_dir, deploy_data.first['deployment_id'].to_s, 'test', 'test') - - FileUtils.stubs(:mkdir_p).returns(true).twice - File.stubs(:directory?).returns(true).twice - - File.stubs(:exist?).with(nova_key_path).returns(true) - File.stubs(:exist?).with(test_key_path).returns(false) - - generate_ssh_keys.expects(:run_system_command).returns([0, "", ""]) - - generate_ssh_keys.process(deploy_data, ctx) - end - -end diff --git a/spec/unit/pre_deployment_actions/initial_connect_facts_hook_spec.rb b/spec/unit/pre_deployment_actions/initial_connect_facts_hook_spec.rb deleted file mode 100644 index 168d8034..00000000 --- a/spec/unit/pre_deployment_actions/initial_connect_facts_hook_spec.rb +++ /dev/null @@ -1,66 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require File.join(File.dirname(__FILE__), '../../spec_helper') - -describe Astute::InitialConnectFacts do - include SpecHelpers - - let(:ctx) do - ctx = mock('context') - ctx.stubs(:task_id) - ctx.stubs(:reporter) - ctx.stubs(:status).returns('1' => 'success', '2' => 'success') - ctx - end - - let(:deploy_data) { [ - {'uid' => '1', - 'role' => 'controller', - 'openstack_version_prev' => 'old_version', - 'cobbler' => { - 'profile' => 'centos-x86_64' - } - }, - {'uid' => '1', - 'role' => 'ceph', - 'openstack_version_prev' => 'old_version', - 'cobbler' => { - 'profile' => 'centos-x86_64' - } - } - ] - } - - let(:init_connect_facts) { Astute::InitialConnectFacts.new } - - let(:mclient) do - mclient = mock_rpcclient(deploy_data) - Astute::MClient.any_instance.stubs(:rpcclient).returns(mclient) - Astute::MClient.any_instance.stubs(:log_result).returns(mclient) - Astute::MClient.any_instance.stubs(:check_results_with_retries).returns(mclient) - mclient - end - - it 'should symbolic .yaml file to astute.yaml' do - init_connect_facts.expects(:run_shell_command).with( - ctx, - ['1'], - 'ln -s -f /etc/controller.yaml /etc/astute.yaml' - ).returns(:data => {:exit_code => 0}) - - init_connect_facts.process(deploy_data, ctx) - end - -end \ No newline at end of file diff --git a/spec/unit/pre_deployment_actions/sync_puppet_stuff_hook_spec.rb b/spec/unit/pre_deployment_actions/sync_puppet_stuff_hook_spec.rb deleted file mode 100644 index 8da65fb8..00000000 --- a/spec/unit/pre_deployment_actions/sync_puppet_stuff_hook_spec.rb +++ /dev/null @@ -1,107 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require File.join(File.dirname(__FILE__), '../../spec_helper') - -describe Astute::SyncPuppetStuff do - include SpecHelpers - - let(:ctx) do - tctx = mock_ctx - tctx.stubs(:status).returns({}) - tctx - end - - let(:sync_puppet_stuff) { Astute::SyncPuppetStuff.new } - - let(:nodes) { [ - {'uid' => 1, - 'deployment_id' => 1, - 'master_ip' => '10.20.0.2', - 'puppet' => { - 'modules' => 'rsync://10.20.0.2:/puppet/modules/', - 'manifests' => 'rsync://10.20.0.2:/puppet/manifests/' - } - }, - {'uid' => 2} - ] - } - - let(:mclient) do - mclient = mock_rpcclient(nodes) - Astute::MClient.any_instance.stubs(:rpcclient).returns(mclient) - Astute::MClient.any_instance.stubs(:log_result).returns(mclient) - Astute::MClient.any_instance.stubs(:check_results_with_retries).returns(mclient) - mclient - end - - let(:master_ip) { nodes.first['master_ip'] } - - it "should sync puppet modules and manifests mcollective client 'puppetsync'" do - mclient.expects(:rsync).with(:modules_source => "rsync://10.20.0.2:/puppet/modules/", - :manifests_source => "rsync://10.20.0.2:/puppet/manifests/" - ) - sync_puppet_stuff.process(nodes, ctx) - end - - it 'should able to customize path for puppet modules and manifests' do - modules_source = 'rsync://10.20.0.2:/puppet/vX/modules/' - manifests_source = 'rsync://10.20.0.2:/puppet/vX/manifests/' - nodes.first['puppet']['modules'] = modules_source - nodes.first['puppet']['manifests'] = manifests_source - mclient.expects(:rsync).with(:modules_source => modules_source, - :manifests_source => manifests_source - ) - sync_puppet_stuff.process(nodes, ctx) - end - - - context 'retry sync if mcollective raise error and' do - it 'raise error if retry fail SYNC_RETRIES times' do - mclient.stubs(:rsync) - Astute::MClient.any_instance.stubs(:check_results_with_retries) - .raises(Astute::MClientError) - .times(Astute::DeploymentEngine::SYNC_RETRIES) - expect { sync_puppet_stuff.process(nodes, ctx) }.to raise_error(Astute::MClientError) - end - - it 'not raise error if mcollective return success less than SYNC_RETRIES attempts' do - mclient.stubs(:rsync) - Astute::MClient.any_instance.stubs(:check_results_with_retries) - .raises(Astute::MClientError) - .then.returns("") - expect { sync_puppet_stuff.process(nodes, ctx) }.not_to raise_error(Astute::MClientError) - end - end - - it 'should raise exception if modules/manifests schema of uri is not equal' do - nodes.first['puppet']['manifests'] = 'http://10.20.0.2:/puppet/vX/manifests/' - expect { sync_puppet_stuff.process(nodes, ctx) }.to raise_error(Astute::DeploymentEngineError, - /Scheme for puppet modules 'rsync' and puppet manifests/) - end - - it 'should raise exception if modules/manifests source uri is incorrect' do - nodes.first['puppet']['manifests'] = ':/puppet/modules/' - expect { sync_puppet_stuff.process(nodes, ctx) }.to raise_error(Astute::DeploymentEngineError, - /bad URI/) - end - - it 'should raise exception if schema of uri is incorrect' do - nodes.first['puppet']['modules'] = 'http2://localhost/puppet/modules/' - nodes.first['puppet']['manifests'] = 'http2://localhost/puppet/manifests/' - mclient.expects(:rsync).never - expect { sync_puppet_stuff.process(nodes, ctx) }.to raise_error(Astute::DeploymentEngineError, - /Unknown scheme /) - end -end diff --git a/spec/unit/pre_deployment_actions/sync_time_hook_spec.rb b/spec/unit/pre_deployment_actions/sync_time_hook_spec.rb deleted file mode 100644 index 57b475e3..00000000 --- a/spec/unit/pre_deployment_actions/sync_time_hook_spec.rb +++ /dev/null @@ -1,50 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require File.join(File.dirname(__FILE__), '../../spec_helper') - -describe Astute::SyncTime do - include SpecHelpers - - let(:ctx) do - tctx = mock_ctx - tctx.stubs(:status).returns({}) - tctx - end - - let(:deploy_data) { [{'uid' => 1, 'deployment_id' => 1}, {'uid' => 2}] } - let(:sync_time) { Astute::SyncTime.new } - - it 'should sync time between cluster nodes' do - sync_time.expects(:run_shell_command_remotely).with( - ctx, - [1,2], - "ntpdate -u $(egrep '^server' /etc/ntp.conf | sed '/^#/d' | awk '{print $2}')" - ).returns(true) - sync_time.process(deploy_data, ctx) - end - - it 'should not raise exception if fail' do - sync_time.stubs(:run_shell_command_remotely).returns(false) - expect { sync_time.process(deploy_data, ctx) }.to_not raise_error - end - - it 'should try to sync several times if fail' do - sync_time.stubs(:run_shell_command_remotely).returns(false) - .then.returns(true).twice - - sync_time.process(deploy_data, ctx) - end - -end \ No newline at end of file diff --git a/spec/unit/pre_deployment_actions/update_repo_sources_hook_spec.rb b/spec/unit/pre_deployment_actions/update_repo_sources_hook_spec.rb deleted file mode 100644 index f8abd90d..00000000 --- a/spec/unit/pre_deployment_actions/update_repo_sources_hook_spec.rb +++ /dev/null @@ -1,178 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require File.join(File.dirname(__FILE__), '../../spec_helper') - -describe Astute::UpdateRepoSources do - include SpecHelpers - - before(:each) do - Astute.config.puppet_ssh_keys = ['nova'] - end - - let(:ctx) do - tctx = mock_ctx - tctx.stubs(:status).returns({}) - tctx - end - - let(:mclient) do - mclient = mock_rpcclient(nodes) - Astute::MClient.any_instance.stubs(:rpcclient).returns(mclient) - Astute::MClient.any_instance.stubs(:log_result).returns(mclient) - Astute::MClient.any_instance.stubs(:check_results_with_retries).returns(mclient) - mclient - end - - let(:nodes) do - [ - {'uid' => 1, - 'deployment_id' => 1, - 'cobbler' => { - 'profile' => 'centos-x86_64' - }, - 'repo_setup' => { - 'repos' => [ - { - "type" => "rpm", - "name" => "Nailgun", - "uri" => "http://10.20.0.2:8080/centos/fuelweb/x86_64/", - "priority" => 1 - } - ] - } - }, - {'uid' => 2} - ] - end - let(:update_repo_sources) { Astute::UpdateRepoSources.new } - - around(:each) do |example| - old_ssh_keys_dir = Astute.config.keys_src_dir - example.run - Astute.config.keys_src_dir = old_ssh_keys_dir - end - - context 'source configuration generation' do - before(:each) do - update_repo_sources.stubs(:regenerate_metadata) - end - - it 'should generate correct config for centos' do - content = ["[nailgun]", - "name=Nailgun", - "baseurl=http://10.20.0.2:8080/centos/fuelweb/x86_64/", - "gpgcheck=0"].join("\n") - - update_repo_sources.expects(:upload_repo_source).with(ctx, nodes, content) - update_repo_sources.process(nodes, ctx) - end - - it 'should generate correct config for ubuntu' do - nodes.first['cobbler']['profile'] = 'ubuntu_1404_x86_64' - nodes.first['repo_setup']['repos'][0]['uri'] = - 'http://10.20.0.2:8080/ubuntu/fuelweb/x86_64' - nodes.first['repo_setup']['repos'][0]['suite'] = 'trusty' - nodes.first['repo_setup']['repos'][0]['section'] = 'main' - - content = "deb http://10.20.0.2:8080/ubuntu/fuelweb/x86_64 trusty main" - - update_repo_sources.expects(:upload_repo_source).with(ctx, nodes, content) - update_repo_sources.process(nodes, ctx) - end - - it 'should raise error if os not recognized' do - nodes.first['cobbler']['profile'] = 'unknown' - - expect {update_repo_sources.process(nodes, ctx)}.to raise_error( - Astute::DeploymentEngineError, /Unknown system/) - end - end # source configuration generation - - context 'new source configuration uploading' do - - let(:repo_content) { "repo conf" } - - before(:each) do - update_repo_sources.stubs(:generate_repo_source).returns(repo_content) - update_repo_sources.stubs(:regenerate_metadata) - end - - it 'should upload config in correct place for centos' do - mclient.expects(:upload).with(:path => '/etc/yum.repos.d/nailgun.repo', - :content => repo_content, - :user_owner => 'root', - :group_owner => 'root', - :permissions => '0644', - :dir_permissions => '0755', - :overwrite => true, - :parents => true - ) - update_repo_sources.process(nodes, ctx) - end - - it 'should upload config in correct place for ubuntu' do - nodes.first['cobbler']['profile'] = 'ubuntu_1404_x86_64' - - mclient.expects(:upload).with(:path => '/etc/apt/sources.list', - :content => repo_content, - :user_owner => 'root', - :group_owner => 'root', - :permissions => '0644', - :dir_permissions => '0755', - :overwrite => true, - :parents => true - ) - update_repo_sources.process(nodes, ctx) - end - end #new source configuration uploading - - context 'metadata regeneration' do - - let(:fail_return) { [{:data => {:exit_code => 1}}] } - - before(:each) do - update_repo_sources.stubs(:generate_repo_source) - update_repo_sources.stubs(:upload_repo_source) - end - - let(:success_return) { [{:data => {:exit_code => 0}}] } - - it 'should regenerate metadata for centos' do - mclient.expects(:execute).with(:cmd => 'yum clean all').returns(success_return) - update_repo_sources.process(nodes, ctx) - end - - it 'should regenerate metadata for ubuntu' do - nodes.first['cobbler']['profile'] = 'ubuntu_1404_x86_64' - mclient.expects(:execute).with(:cmd => 'apt-get clean; apt-get update').returns(success_return) - update_repo_sources.process(nodes, ctx) - end - - it 'should raise error if metadata not updated' do - nodes.first['cobbler']['profile'] = 'ubuntu_1404_x86_64' - mclient.expects(:execute).with(:cmd => 'apt-get clean; apt-get update').returns(fail_return).times(Astute.config[:mc_retries]) - expect { update_repo_sources.process(nodes, ctx) }.to raise_error(Astute::DeploymentEngineError, - /Run command:/) - end - - it 'should retry metadata update several time if get error' do - nodes.first['cobbler']['profile'] = 'ubuntu_1404_x86_64' - mclient.expects(:execute).with(:cmd => 'apt-get clean; apt-get update').returns(fail_return) - .then.returns(success_return).twice - update_repo_sources.process(nodes, ctx) - end - end #'metadata regeneration' - -end diff --git a/spec/unit/pre_deployment_actions/upload_facts_hook_spec.rb b/spec/unit/pre_deployment_actions/upload_facts_hook_spec.rb deleted file mode 100644 index 164e360f..00000000 --- a/spec/unit/pre_deployment_actions/upload_facts_hook_spec.rb +++ /dev/null @@ -1,87 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require File.join(File.dirname(__FILE__), '../../spec_helper') - -describe Astute::UploadFacts do - include SpecHelpers - - let(:ctx) do - ctx = mock('context') - ctx.stubs(:task_id) - ctx.stubs(:reporter) - ctx.stubs(:status).returns('1' => 'success', '2' => 'success') - ctx - end - - let(:deploy_data) { [ - {'uid' => '1', - 'role' => 'controller', - 'openstack_version_prev' => 'old_version', - 'cobbler' => { - 'profile' => 'centos-x86_64' - }, - 'password_1' => '0xABC123', - 'password_2' => '0XABC123', - 'password_3' => '0b101010', - 'password_4' => '0B101010', - 'password_5' => '0o123456', - 'password_6' => '0O123456', - 'password_7' => '0d123456', - 'password_8' => '0D123456', - 'mac_address' => '00:12:34:ab:cd:ef' - } - ] - } - - let(:upload_facts) { Astute::UploadFacts.new } - - let(:mclient) do - mclient = mock_rpcclient(deploy_data) - Astute::MClient.any_instance.stubs(:rpcclient).returns(mclient) - Astute::MClient.any_instance.stubs(:log_result).returns(mclient) - Astute::MClient.any_instance.stubs(:check_results_with_retries).returns(mclient) - mclient - end - - it 'should upload facts using YAML format to nodes in .yaml file' do - mclient.expects(:upload).with( - :path =>'/etc/controller.yaml', - :content => upload_facts.send(:safe_yaml_dump, deploy_data.first), - :overwrite => true, - :parents => true, - :permissions => '0600' - ) - - upload_facts.process(deploy_data, ctx) - end - - it 'should upload valid YAML format to nodes in .yaml file' do - valid_yaml_data = "---\nuid: '1'\nrole: controller\nopenstack_version_prev: old_version\ncobbler:\n profile: centos-x86_64\n"\ - "password_1: \"0xABC123\"\npassword_2: \"0XABC123\"\npassword_3: \"0b101010\"\npassword_4: \"0B101010\"\n"\ - "password_5: \"0o123456\"\npassword_6: \"0O123456\"\npassword_7: \"0d123456\"\npassword_8: \"0D123456\"\n"\ - "mac_address: \"00:12:34:ab:cd:ef\"\n" - - mclient.expects(:upload).with( - :path =>'/etc/controller.yaml', - :content => valid_yaml_data, - :overwrite => true, - :parents => true, - :permissions => '0600' - ) - - upload_facts.process(deploy_data, ctx) - end - -end \ No newline at end of file diff --git a/spec/unit/pre_deployment_actions/upload_keys_hook_spec.rb b/spec/unit/pre_deployment_actions/upload_keys_hook_spec.rb deleted file mode 100644 index dccb420d..00000000 --- a/spec/unit/pre_deployment_actions/upload_keys_hook_spec.rb +++ /dev/null @@ -1,63 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require File.join(File.dirname(__FILE__), '../../spec_helper') - -describe Astute::UploadKeys do - include SpecHelpers - - around(:each) do |example| - old_puppet_keys = Astute.config.puppet_keys - example.run - Astute.config.puppet_keys = old_puppet_keys - end - - before(:each) do - Astute.config.puppet_keys = ['mongodb'] - end - - let(:ctx) do - tctx = mock_ctx - tctx.stubs(:status).returns({}) - tctx - end - - let(:deploy_data) { [{'uid' => 1, 'deployment_id' => 1}, {'uid' => 2}] } - let(:upload_keys) { Astute::UploadKeys.new } - - it "should upload keys using mcollective client 'uploadfile'" do - mclient = mock_rpcclient(deploy_data) - Astute::MClient.any_instance.stubs(:rpcclient).returns(mclient) - Astute::MClient.any_instance.stubs(:log_result).returns(mclient) - Astute::MClient.any_instance.stubs(:check_results_with_retries).returns(mclient) - - File.stubs(:read).returns("private key").once - mclient.expects(:upload).with( - :path => File.join( - Astute.config.keys_dst_dir, - 'mongodb', - 'mongodb.key' - ), - :content => "private key", - :user_owner => 'root', - :group_owner => 'root', - :permissions => '0600', - :dir_permissions => '0700', - :overwrite => true, - :parents => true - ) - upload_keys.process(deploy_data, ctx) - end - -end \ No newline at end of file diff --git a/spec/unit/pre_deployment_actions/upload_ssh_keys_hook_spec.rb b/spec/unit/pre_deployment_actions/upload_ssh_keys_hook_spec.rb deleted file mode 100644 index 74097ef1..00000000 --- a/spec/unit/pre_deployment_actions/upload_ssh_keys_hook_spec.rb +++ /dev/null @@ -1,67 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require File.join(File.dirname(__FILE__), '../../spec_helper') - -describe Astute::UploadSshKeys do - include SpecHelpers - - around(:each) do |example| - old_puppet_ssh_keys = Astute.config.puppet_ssh_keys - example.run - Astute.config.puppet_ssh_keys = old_puppet_ssh_keys - end - - before(:each) do - Astute.config.puppet_ssh_keys = ['nova'] - end - - let(:ctx) do - tctx = mock_ctx - tctx.stubs(:status).returns({}) - tctx - end - - let(:deploy_data) { [{'uid' => 1, 'deployment_id' => 1}, {'uid' => 2}] } - let(:upload_ssh_keys) { Astute::UploadSshKeys.new } - - it "should upload ssh keys using mcollective client 'uploadfile'" do - mclient = mock_rpcclient(deploy_data) - Astute::MClient.any_instance.stubs(:rpcclient).returns(mclient) - Astute::MClient.any_instance.stubs(:log_result).returns(mclient) - Astute::MClient.any_instance.stubs(:check_results_with_retries).returns(mclient) - - File.stubs(:read).returns("private key").then.returns("public key") - mclient.expects(:upload).with(:path => File.join(Astute.config.keys_dst_dir, 'nova', 'nova'), - :content => "private key", - :user_owner => 'root', - :group_owner => 'root', - :permissions => '0600', - :dir_permissions => '0700', - :overwrite => true, - :parents => true - ) - mclient.expects(:upload).with(:path => File.join(Astute.config.keys_dst_dir, 'nova', 'nova.pub'), - :content => "public key", - :user_owner => 'root', - :group_owner => 'root', - :permissions => '0600', - :dir_permissions => '0700', - :overwrite => true, - :parents => true - ) - upload_ssh_keys.process(deploy_data, ctx) - end - -end \ No newline at end of file diff --git a/spec/unit/pre_node_actions/pre_patching_hook_spec.rb b/spec/unit/pre_node_actions/pre_patching_hook_spec.rb deleted file mode 100644 index 707789c7..00000000 --- a/spec/unit/pre_node_actions/pre_patching_hook_spec.rb +++ /dev/null @@ -1,106 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require File.join(File.dirname(__FILE__), '../../spec_helper') - -describe Astute::PrePatching do - include SpecHelpers - - let(:ctx) do - ctx = mock('context') - ctx.stubs(:task_id) - ctx.stubs(:reporter) - ctx.stubs(:status).returns('1' => 'success', '2' => 'success') - ctx - end - - let(:deploy_data) { [ - {'uid' => '1', - 'role' => 'controller', - 'openstack_version_prev' => 'old_version', - 'cobbler' => { - 'profile' => 'centos-x86_64' - } - }, - {'uid' => '2', - 'role' => 'compute' - } - ] - } - - let(:pre_patching) { Astute::PrePatching.new } - - it 'should run if upgrade/downgrade env' do - pre_patching.expects(:run_shell_command).once.returns(:data => {:exit_code => 0}) - pre_patching.process(deploy_data, ctx) - end - - it 'should not run if deploy new env' do - deploy_data.first.delete('openstack_version_prev') - pre_patching.process(deploy_data, ctx) - pre_patching.expects(:run_shell_command).never - - pre_patching.process(deploy_data, ctx) - end - - it 'should not change deployment status if command fail' do - pre_patching.expects(:run_shell_command).once.returns(:data => {:exit_code => 1}) - ctx.expects(:report_and_update_status).never - - pre_patching.process(deploy_data, ctx) - end - - it 'should not change deployment status if shell exec using mcollective fail' do - pre_patching.expects(:run_shell_command).once.returns(:data => {}) - - pre_patching.process(deploy_data, ctx) - ctx.expects(:report_and_update_status).never - end - - describe '#getremovepackage_cmd' do - - it 'should use yum command for CenoOS system' do - pre_patching.expects(:run_shell_command).once.with( - ctx, - ['1', '2'], - regexp_matches(/yum/), - is_a(Integer)) - .returns(:data => {:exit_code => 0}) - - pre_patching.process(deploy_data, ctx) - end - - it 'should use aptitude command for Ubuntu system' do - new_deploy_data = deploy_data.clone - new_deploy_data.first['cobbler']['profile'] = 'ubuntu_1404_x86_64' - pre_patching.expects(:run_shell_command).once.with( - ctx, - ['1', '2'], - regexp_matches(/aptitude/), - is_a(Integer)) - .returns(:data => {:exit_code => 0}) - - pre_patching.process(new_deploy_data, ctx) - end - - it 'raise error if target system unknown' do - new_deploy_data = deploy_data.clone - new_deploy_data.first['cobbler']['profile'] = 'unknown' - pre_patching.expects(:run_shell_command).never - expect { pre_patching.process(new_deploy_data, ctx) }.to raise_error(Astute::DeploymentEngineError, /Unknown system/) - end - - end # getremovepackage_cmd - -end \ No newline at end of file diff --git a/spec/unit/pre_node_actions/pre_pathing_ha_hook_spec.rb b/spec/unit/pre_node_actions/pre_pathing_ha_hook_spec.rb deleted file mode 100644 index df8e6cd1..00000000 --- a/spec/unit/pre_node_actions/pre_pathing_ha_hook_spec.rb +++ /dev/null @@ -1,202 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require File.join(File.dirname(__FILE__), '../../spec_helper') - -describe Astute::PrePatchingHa do - include SpecHelpers - - let(:ctx) do - ctx = mock('context') - ctx.stubs(:task_id) - ctx.stubs(:reporter) - ctx.stubs(:status).returns('1' => 'success', '2' => 'success') - ctx - end - - let(:deploy_data) { [ - {'uid' => '1', - 'role' => 'cinder', - 'openstack_version_prev' => 'old_version', - 'deployment_mode' => 'ha_compact', - 'cobbler' => { - 'profile' => 'centos-x86_64' - }, - 'nodes' => [ - { - 'uid' => '1', - 'slave_name' => 'node-1', - 'role' => 'cinder' - }, - { - 'uid' => '1', - 'slave_name' => 'node-1', - 'role' => 'controller' - }, - { - 'uid' => '2', - 'slave_name' => 'node-2', - 'role' => 'ceph-osd' - }, - { - 'uid' => '3', - 'slave_name' => 'node-3', - 'role' => 'primary-controller' - } - ], - }, - {'uid' => '2', - 'role' => 'compute' - }, - {'uid' => '3', - 'role' => 'primary-controller' - } - ] - } - - let(:pre_patching_ha) { Astute::PrePatchingHa.new } - - it 'should run if upgrade/downgrade env' do - Astute::Pacemaker.expects(:commands).returns(['basic command']) - pre_patching_ha.expects(:run_shell_command).returns(:data => {:exit_code => 0}) - pre_patching_ha.process(deploy_data, ctx) - end - - it 'should not run if deploy new env' do - deploy_data.first.delete('openstack_version_prev') - - Astute::Pacemaker.expects(:commands).never - pre_patching_ha.expects(:run_shell_command).never - - pre_patching_ha.process(deploy_data, ctx) - end - - it 'should run if upgrade/downgrade not HA env' do - deploy_data.first['deployment_mode'] = 'simple' - - Astute::Pacemaker.expects(:commands).never - pre_patching_ha.expects(:run_shell_command).never - - pre_patching_ha.process(deploy_data, ctx) - end - - it 'should not change deployment status if command fail' do - Astute::Pacemaker.expects(:commands).returns(['basic command']) - pre_patching_ha.expects(:run_shell_command).once.returns(:data => {:exit_code => 1}) - ctx.expects(:report_and_update_status).never - - pre_patching_ha.process(deploy_data, ctx) - end - - it 'should not change deployment status if shell exec using mcollective fail' do - Astute::Pacemaker.expects(:commands).returns(['basic command']) - pre_patching_ha.expects(:run_shell_command).once.returns(:data => {}) - - pre_patching_ha.process(deploy_data, ctx) - ctx.expects(:report_and_update_status).never - end - - it 'should run command for every pacemaker services' do - Astute::Pacemaker.expects(:commands).returns(['command1', 'command2']) - pre_patching_ha.expects(:run_shell_command).twice.returns(:data => {:exit_code => 1}) - - pre_patching_ha.process(deploy_data, ctx) - end - - context 'Pacemaker stuff' do - - let(:transormed_data) { - [{'uid' => '1', - 'role' => 'controller', - 'openstack_version_prev' => 'old_version', - 'deployment_mode' => 'ha_compact', - 'cobbler' => { - 'profile' => 'centos-x86_64' - }, - 'nodes' => [ - { - 'uid' => '1', - 'slave_name' => 'node-1', - 'role' => 'cinder' - }, - { - 'uid' => '1', - 'slave_name' => 'node-1', - 'role' => 'controller' - }, - { - 'uid' => '2', - 'slave_name' => 'node-2', - 'role' => 'ceph-osd' - }, - { - 'uid' => '3', - 'slave_name' => 'node-3', - 'role' => 'primary-controller' - } - ], - }, - {'uid' => '3', - 'role' => 'primary-controller' - }] - } - - let(:no_controllers) { - [{'uid' => '1', - 'role' => 'compute', - 'openstack_version_prev' => 'old_version', - 'deployment_mode' => 'ha_compact', - 'cobbler' => { - 'profile' => 'centos-x86_64' - }, - 'nodes' => [ - { - 'uid' => '1', - 'slave_name' => 'node-1', - 'role' => 'cinder' - }, - { - 'uid' => '2', - 'slave_name' => 'node-2', - 'role' => 'controller' - }, - { - 'uid' => '3', - 'slave_name' => 'node-3', - 'role' => 'mongo' - } - ], - }, - {'uid' => '3', - 'role' => 'cinder' - }] - } - - it 'should get commands for service ban' do - Astute::Pacemaker.expects(:commands).with('stop', transormed_data).returns(['basic command']) - pre_patching_ha.expects(:run_shell_command).returns(:data => {:exit_code => 0}) - pre_patching_ha.process(deploy_data, ctx) - end - - it 'should not run if no controllers in cluster' do - deploy_data.first['role'] = 'cinder' - - Astute::Pacemaker.expects(:commands).never - pre_patching_ha.expects(:run_shell_command).never - pre_patching_ha.process(no_controllers, ctx) - end - - end - -end \ No newline at end of file diff --git a/spec/unit/pre_node_actions/stop_ost_services_hook_spec.rb b/spec/unit/pre_node_actions/stop_ost_services_hook_spec.rb deleted file mode 100644 index 3573f525..00000000 --- a/spec/unit/pre_node_actions/stop_ost_services_hook_spec.rb +++ /dev/null @@ -1,102 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require File.join(File.dirname(__FILE__), '../../spec_helper') - -describe Astute::StopOSTServices do - include SpecHelpers - - let(:ctx) do - ctx = mock('context') - ctx.stubs(:task_id) - ctx.stubs(:reporter) - ctx.stubs(:status).returns('1' => 'success', '2' => 'success') - ctx - end - - let(:deploy_data) { [ - {'uid' => '1', - 'role' => 'controller', - 'openstack_version_prev' => 'old_version', - 'nodes' => [ - { - 'uid' => 1, - 'slave_name' => 'node-1', - 'role' => 'controller' - }, - { - 'uid' => 2, - 'slave_name' => 'node-2', - 'role' => 'ceph-osd' - } - ], - }, - { - 'uid' => '2', - 'role' => 'compute' - } - ] - } - - let(:stop_ost_services) { Astute::StopOSTServices.new } - - it 'should run if upgrade/downgrade env' do - stop_ost_services.expects(:upload_script).once - stop_ost_services.expects(:run_shell_command).once.returns(:data => {:exit_code => 0}) - stop_ost_services.process(deploy_data, ctx) - end - - it 'should not run if deploy new env' do - deploy_data.first.delete('openstack_version_prev') - stop_ost_services.process(deploy_data, ctx) - stop_ost_services.expects(:upload_script).never - stop_ost_services.expects(:run_shell_command).never - - stop_ost_services.process(deploy_data, ctx) - end - - it 'should not change deployment status if command fail' do - stop_ost_services.stubs(:upload_script).once - stop_ost_services.expects(:run_shell_command).once.returns(:data => {:exit_code => 1}) - ctx.expects(:report_and_update_status).never - - stop_ost_services.process(deploy_data, ctx) - end - - it 'should not change deployment status if shell exec using mcollective fail' do - stop_ost_services.stubs(:upload_script).once - stop_ost_services.expects(:run_shell_command).once.returns(:data => {}) - - stop_ost_services.process(deploy_data, ctx) - ctx.expects(:report_and_update_status).never - end - - it 'should raise exception if shell exec using mcollective fail' do - stop_ost_services.expects(:upload_script).once.returns('test_script.rb') - stop_ost_services.stubs(:run_shell_command).once.returns(:data => {:exit_code => 42}) - - stop_ost_services.process(deploy_data, ctx) - ctx.expects(:report_and_update_status).never - end - - it 'should upload target script and run it' do - script_content = 'script content' - target_file = '/tmp/stop_services.rb' - stop_ost_services.stubs(:get_file).once.returns script_content - stop_ost_services.expects(:upload_script).with(ctx, deploy_data.map{ |n| n['uid'] }, target_file, script_content).once - stop_ost_services.expects(:run_shell_command).once.returns(:data => {:exit_code => 0}) - stop_ost_services.process(deploy_data, ctx) - end - -end diff --git a/spec/unit/pre_node_actions/stop_services_script_spec.rb b/spec/unit/pre_node_actions/stop_services_script_spec.rb deleted file mode 100644 index c3161a17..00000000 --- a/spec/unit/pre_node_actions/stop_services_script_spec.rb +++ /dev/null @@ -1,311 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -#require File.join(File.dirname(__FILE__), '../../spec_helper') - -RSpec.configure do |c| - c.mock_with :mocha -end - -load File.join(File.dirname(__FILE__), '../../../lib/astute/pre_node_actions/stop_services.script') - -describe PreDeploy do -# include SpecHelpers - - let(:redhat_ps) do - <<-eos -100 1 /usr/bin/python nova-api.py -101 100 /usr/bin/python nova-api.py -102 100 /usr/bin/python nova-api.py -103 100 /usr/bin/python nova-api.py -104 1 /usr/bin/python cinder-volume.py -105 104 /usr/sbin/tgtd -106 1 /usr/bin/python neutron.py -107 106 /usr/sbin/dnsmasq -108 1 /usr/sbin/httpd -109 1 /usr/bin/python keystone.py - eos - end - - let(:debian_pstree) do - { - 104 => { - :children => [105], - :ppid => 1, - :cmd => "/usr/bin/python cinder-volume.py", - :pid => 104 - }, - 105 => { - :children => [], - :ppid => 104, - :cmd => "/usr/sbin/tgtd", - :pid => 105 - }, - 100 => { - :children => [101, 102, 103], - :ppid => 1, - :cmd => "/usr/bin/python nova-api.py", - :pid => 100 - }, - 1 => { - :children => [100, 104, 106, 108, 109] - }, - 106 => { - :children => [107], - :ppid => 1, - :cmd => "/usr/bin/python neutron.py", - :pid => 106 - }, - 101 => { - :children => [], - :ppid => 100, - :cmd => "/usr/bin/python nova-api.py", - :pid => 101 - }, - 107 => { - :children => [], - :ppid => 106, - :cmd => "/usr/sbin/dnsmasq", - :pid => 107 - }, - 102 => { - :children => [], - :ppid => 100, - :cmd => "/usr/bin/python nova-api.py", - :pid => 102 - }, - 108 => { - :children => [], - :ppid => 1, - :cmd => "/usr/sbin/apache2", - :pid => 108 - }, - 103 => { - :children => [], - :ppid => 100, - :cmd => "/usr/bin/python nova-api.py", - :pid => 103 - }, - 109 => { - :children => [], - :ppid => 1, - :cmd => "/usr/bin/python keystone.py", - :pid => 109 - } - } - end - - let(:redhat_pstree) do - { - 104 => { - :children => [105], - :ppid => 1, - :cmd => "/usr/bin/python cinder-volume.py", - :pid => 104 - }, - 105 => { - :children => [], - :ppid => 104, - :cmd => "/usr/sbin/tgtd", - :pid => 105 - }, - 100 => { - :children => [101, 102, 103], - :ppid => 1, - :cmd => "/usr/bin/python nova-api.py", - :pid => 100 - }, - 1 => { - :children => [100, 104, 106, 108, 109] - }, - 106 => { - :children => [107], - :ppid => 1, - :cmd => "/usr/bin/python neutron.py", - :pid => 106 - }, - 101 => { - :children => [], - :ppid => 100, - :cmd => "/usr/bin/python nova-api.py", - :pid => 101 - }, - 107 => { - :children => [], - :ppid => 106, - :cmd => "/usr/sbin/dnsmasq", - :pid => 107 - }, - 102 => { - :children => [], - :ppid => 100, - :cmd => "/usr/bin/python nova-api.py", - :pid => 102 - }, - 108 => { - :children => [], - :ppid => 1, - :cmd => "/usr/sbin/httpd", - :pid => 108 - }, - 103 => { - :children => [], - :ppid => 100, - :cmd => "/usr/bin/python nova-api.py", - :pid => 103 - }, - 109 => { - :children => [], - :ppid => 1, - :cmd => "/usr/bin/python keystone.py", - :pid => 109 - } - } - end - - let(:debian_ps) do - <<-eos -100 1 /usr/bin/python nova-api.py -101 100 /usr/bin/python nova-api.py -102 100 /usr/bin/python nova-api.py -103 100 /usr/bin/python nova-api.py -104 1 /usr/bin/python cinder-volume.py -105 104 /usr/sbin/tgtd -106 1 /usr/bin/python neutron.py -107 106 /usr/sbin/dnsmasq -108 1 /usr/sbin/apache2 -109 1 /usr/bin/python keystone.py - eos - end - - let(:debian_services) do - <<-eos - [ ? ] ntpd - [ ? ] neutron - [ + ] cinder-volume - [ - ] nginx - [ - ] smbd - [ + ] sshd - [ + ] nova-api - [ + ] apache2 - [ + ] keystone - eos - end - - let(:redhat_services) do - <<-eos -ntpd is stopped -neutron is stopped -sshd (pid 50) is running... -cinder-volume (pid 104) is running... -nova-api (pid 100) is running... -nginx is stopped -smbd is stopped -httpd.event (pid 108) is running... -keystone (pid 109) is running... - eos - end - - let(:debian_services_to_stop) do - ["cinder-volume", "nova-api", "apache2", "keystone"] - end - - let(:redhat_services_to_stop) do - ["cinder-volume", "nova-api", "httpd", "openstack-keystone"] - end -################################################################### - - it 'should correctly parse ps output on Debian system' do - subject.stubs(:ps).returns(debian_ps) - subject.stubs(:osfamily).returns 'Debian' - subject.process_tree_with_renew - expect(subject.process_tree).to eq debian_pstree - end - - it 'should correctly parse ps output on RedHat system' do - subject.stubs(:ps).returns(redhat_ps) - subject.stubs(:osfamily).returns 'RedHat' - subject.process_tree_with_renew - expect(subject.process_tree).to eq redhat_pstree - end - - it 'should find services to stop on Debian system' do - subject.stubs(:services).returns debian_services - subject.stubs(:osfamily).returns 'Debian' - subject.services_to_stop_with_renew - expect(subject.services_to_stop).to eq debian_services_to_stop - end - - it 'should find services to stop on RedHat system' do - subject.stubs(:services).returns redhat_services - subject.stubs(:osfamily).returns 'RedHat' - subject.services_to_stop_with_renew - expect(subject.services_to_stop).to eq redhat_services_to_stop - end - - it 'should find processes by regexp' do - subject.stubs(:ps).returns(debian_ps) - subject.stubs(:osfamily).returns 'Debian' - subject.process_tree_with_renew - dnsmasq = {107 => { - :children => [], - :ppid => 106, - :cmd => "/usr/sbin/dnsmasq", - :pid => 107 - }} - expect(subject.pids_by_regexp /dnsmasq/).to eq dnsmasq - end - - it 'should kill correct processes on Debian system' do - subject.stubs(:ps).returns(debian_ps) - subject.stubs(:osfamily).returns 'Debian' - subject.stubs(:dry_run).returns true - subject.expects(:run).with 'kill -9 100 101 102 103 104 105 106 107 108 109' - subject.process_tree_with_renew - subject.kill_pids_by_stop_regexp - end - - it 'should kill correct processes on RedHat system' do - subject.stubs(:ps).returns(redhat_ps) - subject.stubs(:osfamily).returns 'RedHat' - subject.stubs(:dry_run).returns true - subject.expects(:run).with 'kill -9 100 101 102 103 104 105 106 107 108 109' - subject.process_tree_with_renew - subject.kill_pids_by_stop_regexp - end - - it 'should stop correct services on Debian system' do - subject.stubs(:services).returns debian_services - subject.stubs(:osfamily).returns 'Debian' - subject.stubs(:dry_run).returns true - subject.expects(:run).with 'service cinder-volume stop' - subject.expects(:run).with 'service nova-api stop' - subject.expects(:run).with 'service apache2 stop' - subject.expects(:run).with 'service keystone stop' - subject.services_to_stop_with_renew - subject.stop_services - end - - it 'should stop correct services on RedHat system' do - subject.stubs(:services).returns redhat_services - subject.stubs(:osfamily).returns 'RedHat' - subject.stubs(:dry_run).returns true - subject.expects(:run).with 'service cinder-volume stop' - subject.expects(:run).with 'service nova-api stop' - subject.expects(:run).with 'service httpd stop' - subject.expects(:run).with 'service openstack-keystone stop' - subject.services_to_stop_with_renew - subject.stop_services - end -end \ No newline at end of file diff --git a/spec/unit/provision_spec.rb b/spec/unit/provision_spec.rb deleted file mode 100644 index 61ba6506..00000000 --- a/spec/unit/provision_spec.rb +++ /dev/null @@ -1,1015 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -require File.join(File.dirname(__FILE__), '../spec_helper') - -describe Astute::Provisioner do - include SpecHelpers - - before(:each) do - @provisioner = Astute::Provisioner.new - @provisioner.stubs(:sleep) - @reporter = mock('reporter') - @reporter.stub_everything - end - - describe '#node_type' do - it "must be able to return node type" do - nodes = [{'uid' => '1'}] - res = {:data => {:node_type => 'target'}, - :sender=>"1"} - - mc_res = mock_mc_result(res) - mc_timeout = 5 - - rpcclient = mock_rpcclient(nodes, mc_timeout) - rpcclient.expects(:get_type).once.returns([mc_res]) - - types = @provisioner.node_type(@reporter, 'task_uuid', nodes.map { |n| n['uid'] }, mc_timeout) - types.should eql([{"node_type"=>"target", "uid"=>"1"}]) - end - end - - describe '#remove_nodes' do - - let(:nodes) { [{'uid' => '1', 'slave_name' => ''}] } - let(:engine_attrs) do - { - "url"=>"http://localhost/cobbler_api", - "username"=>"cobbler", - "password"=>"cobbler", - "master_ip"=>"127.0.0.1", - } - end - - before(:each) do - remote = mock() do - stubs(:timeout=) - stubs(:call) - stubs(:call).with('login', 'cobbler', 'cobbler').returns('remotetoken') - end - XMLRPC::Client = mock() do - stubs(:new).returns(remote) - end - Astute::CobblerManager.any_instance.stubs(:remove_nodes) - end - - it 'should use NodeRemover to remove nodes' do - Astute::NodesRemover.any_instance.expects(:remove).once.returns({}) - Astute::Rsyslogd.expects(:send_sighup).once - @provisioner.remove_nodes( - @reporter, - _task_id="task_id", - engine_attrs, - nodes, - {:reboot => true} - ) - end - - it 'should return list of nodes which removed' do - Astute::NodesRemover.any_instance.expects(:remove).once.returns({"nodes"=>[{"uid"=>"1"}]}) - Astute::Rsyslogd.stubs(:send_sighup).once - expect(@provisioner.remove_nodes( - @reporter, - _task_id="task_id", - engine_attrs, - nodes, - {:reboot => true} - )).to eql({"nodes"=>[{"uid"=>"1"}]}) - end - - context 'if exception in case of error enable' do - it 'should raise error if nodes removing operation via mcollective failed(error)' do - Astute::NodesRemover.any_instance.expects(:remove).once.returns({ - 'status' => 'error', - 'error_nodes' => [{"uid"=>"1"}] - }) - Astute::Rsyslogd.stubs(:send_sighup).never - expect {@provisioner.remove_nodes( - @reporter, - _task_id="task_id", - engine_attrs, - nodes, - { - :reboot => true, - :raise_if_error => true - } - )}.to raise_error(/Mcollective problem with nodes/) - end - - it 'should raise error if nodes removing operation via mcollective failed(inaccessible)' do - Astute::NodesRemover.any_instance.expects(:remove).once.returns({ - 'inaccessible_nodes' => [{"uid"=>"1"}] - }) - Astute::Rsyslogd.stubs(:send_sighup).never - expect {@provisioner.remove_nodes( - @reporter, - _task_id="task_id", - engine_attrs, - nodes, - { - :reboot => true, - :raise_if_error => true - } - )}.to raise_error(/Mcollective problem with nodes/) - end - end #exception - end #remove_nodes - - let(:data) do - { - "engine"=>{ - "url"=>"http://localhost/cobbler_api", - "username"=>"cobbler", - "password"=>"cobbler", - "master_ip"=>"127.0.0.1", - }, - "task_uuid"=>"a5c44b9a-285a-4a0c-ae65-2ed6b3d250f4", - "nodes" => [ - { - 'uid' => '1', - 'profile' => 'centos-x86_64', - "slave_name"=>"controller-1", - "admin_ip" =>'1.2.3.5', - 'power_type' => 'ssh', - 'power_user' => 'root', - 'power_pass' => '/root/.ssh/bootstrap.rsa', - 'power-address' => '1.2.3.5', - 'hostname' => 'name.domain.tld', - 'name_servers' => '1.2.3.4 1.2.3.100', - 'name_servers_search' => 'some.domain.tld domain.tld', - 'netboot_enabled' => '1', - 'ks_meta' => { - 'gw' => '10.20.0.2', - 'mco_enable' => 1, - 'mco_vhost' => 'mcollective' - }, - 'interfaces' => { - 'eth0' => { - 'mac_address' => '00:00:00:00:00:00', - 'static' => '1', - 'netmask' => '255.255.255.0', - 'ip_address' => '1.2.3.5', - 'dns_name' => 'node.mirantis.net', - }, - 'eth1' => { - 'mac_address' => '00:00:00:00:00:01', - 'static' => '0', - 'netmask' => '255.255.255.0', - 'ip_address' => '1.2.3.6', - } - }, - 'interfaces_extra' => { - 'eth0' => { - 'peerdns' => 'no', - 'onboot' => 'yes', - }, - 'eth1' => { - 'peerdns' => 'no', - 'onboot' => 'yes', - } - } - } - ] - } - end - - describe '#provision' do - - context 'cobler cases' do - it "raise error if cobler settings empty" do - @provisioner.stubs(:provision_and_watch_progress).returns([[],[]]) - data['engine'] = {} - Astute::Rsyslogd.stubs(:send_sighup).once - expect {@provisioner.provision(@reporter, data['task_uuid'], data)}. - to raise_error(/Settings for Cobbler must be set/) - end - - it "raise error and send sighup for Rsyslogd" do - @provisioner.stubs(:provision_and_watch_progress).returns([[],[]]) - data['engine'] = {} - Astute::Rsyslogd.expects(:send_sighup).once - expect {@provisioner.provision(@reporter, data['task_uuid'], data)}. - to raise_error(/Settings for Cobbler must be set/) - end - end - - context 'node state cases' do - before(:each) do - remote = mock() do - stubs(:timeout=) - stubs(:call) - stubs(:call).with('login', 'cobbler', 'cobbler').returns('remotetoken') - end - XMLRPC::Client = mock() do - stubs(:new).returns(remote) - end - Astute::CobblerManager.any_instance.stubs(:sleep) - end - - before(:each) do - @provisioner.stubs(:remove_nodes).returns([]) - @provisioner.stubs(:provision_and_watch_progress).returns([]) - @provisioner.stubs(:control_reboot_using_ssh).returns(nil) - end - - it "raises error if nodes list is empty" do - Astute::Rsyslogd.stubs(:send_sighup).once - data['nodes'] = [] - expect {@provisioner.provision(@reporter, data['task_uuid'], data)}. - to raise_error(/Nodes to provision are not provided!/) - end - - it "raises error if nodes list is empty and send sighup for Rsyslogd" do - Astute::Rsyslogd.expects(:send_sighup).once - data['nodes'] = [] - expect {@provisioner.provision(@reporter, data['task_uuid'], data)}. - to raise_error(/Nodes to provision are not provided!/) - end - - it "try to reboot nodes from list" do - Astute::Provision::Cobbler.any_instance do - expects(:power_reboot).with('controller-1') - end - Astute::CobblerManager.any_instance.stubs(:netboot_nodes) - Astute::CobblerManager.any_instance.stubs(:edit_nodes) - @provisioner.stubs(:change_nodes_type) - @provisioner.stubs(:image_provision).returns([]) - - Astute::CobblerManager.any_instance.expects(:check_reboot_nodes).never - @provisioner.expects(:soft_reboot).returns() - - @provisioner.provision_piece(@reporter, data['task_uuid'], data['engine'], data['nodes']) - end - - it "does not reboot nodes which failed during provisioning" do - Astute::CobblerManager.any_instance.stubs(:netboot_nodes) - Astute::CobblerManager.any_instance.stubs(:edit_nodes) - @provisioner.stubs(:change_nodes_type) - @provisioner.stubs(:image_provision).returns(['1']) - @provisioner.stubs(:soft_reboot).returns() - - expect(@provisioner.provision_piece(@reporter, data['task_uuid'], data['engine'], data['nodes'])).to eql(['1']) - end - - it "changes profile into bootstrap for all nodes in case of IBP" do - Astute::CobblerManager.any_instance do - expects(:edit_nodes).with( - data['nodes'], - {'profile' => Astute.config.bootstrap_profile} - ) - end - Astute::CobblerManager.any_instance.stubs(:netboot_nodes) - Astute::CobblerManager.any_instance.stubs(:edit_nodes) - @provisioner.stubs(:change_nodes_type) - @provisioner.stubs(:image_provision).returns([]) - @provisioner.stubs(:soft_reboot).returns() - - @provisioner.provision_piece(@reporter, data['task_uuid'], data['engine'], data['nodes']) - end - - it "does not change netboot setting for failed nodes in case of IBP" do - Astute::CobblerManager.any_instance do - expects(:netboot_nodes).with([], false) - end - Astute::CobblerManager.any_instance.stubs(:edit_nodes) - Astute::CobblerManager.any_instance.stubs(:netboot_nodes) - @provisioner.stubs(:change_nodes_type) - @provisioner.stubs(:soft_reboot).returns() - @provisioner.stubs(:image_provision).returns([1]) - - @provisioner.provision_piece(@reporter, data['task_uuid'], data['engine'], data['nodes']) - - end - - before(:each) { Astute::Provision::Cobbler.any_instance.stubs(:power_reboot).returns(333) } - - context 'node reboot success' do - - it "does not find failed nodes" do - Astute::Provision::Cobbler.any_instance.stubs(:event_status) - .returns([Time.now.to_f, 'controller-1', 'complete']) - Astute::CobblerManager.any_instance.stubs(:netboot_nodes) - @provisioner.stubs(:change_nodes_type) - @provisioner.stubs(:soft_reboot).returns() - @provisioner.stubs(:image_provision).returns([]) - - @provisioner.provision_piece(@reporter, data['task_uuid'], data['engine'], data['nodes']) - end - - it "should erase mbr for nodes" do - Astute::CobblerManager.any_instance.stubs(:add_nodes).returns([]) - Astute::CobblerManager.any_instance.stubs(:remove_nodes).returns([]) - @provisioner.stubs(:provision_and_watch_progress).returns([[], []]) - - Astute::CobblerManager.any_instance.stubs(:get_existent_nodes).returns([]) - Astute::CobblerManager.any_instance.stubs(:get_mac_duplicate_names).returns([]) - @provisioner.stubs(:change_node_type).never - Astute::NailgunHooks.any_instance.stubs(:process).never - - @provisioner.expects(:remove_nodes).with( - @reporter, - data['task_uuid'], - data['engine'], - data['nodes'], - { - :reboot => false, - :raise_if_error => true, - :reset => true - } - ).returns([]) - - @provisioner.provision(@reporter, data['task_uuid'], data) - end - - it 'should not try to unlock node discovery' do - @provisioner.stubs(:prepare_nodes) - @provisioner.stubs(:provision_and_watch_progress).returns([[], []]) - @provisioner.expects(:unlock_nodes_discovery).never - @provisioner.provision(@reporter, data['task_uuid'], data) - end - end - - it 'success report if all nodes were provisioned' do - Astute::CobblerManager.any_instance.stubs(:add_nodes).returns([]) - @provisioner.stubs(:prepare_nodes) - @provisioner.stubs(:provision_and_watch_progress).returns([[], []]) - success_msg = { - 'status' => 'ready', - 'progress' => 100, - 'nodes' => [{ - 'uid' => '1', - 'status' => 'provisioned', - 'progress' => 100}]} - - @reporter.expects(:report).with(success_msg).once - @provisioner.provision(@reporter, data['task_uuid'], data) - end - - it "fail if timeout of provisioning is exceeded" do - @provisioner.stubs(:prepare_nodes) - @provisioner.stubs(:provision_and_watch_progress).returns([[],['1']]) - - msg = 'Too many nodes failed to provision' - - error_msg = { - 'nodes' => [{ - 'uid' => '1', - 'status' => 'error', - 'error_msg' => 'Timeout of provisioning is exceeded', - 'progress' => 100, - 'error_type' => 'provision'}], - 'status' => 'error', - 'error' => msg, - 'progress' => 100} - - provision_info = data.clone - provision_info["fault_tolerance"] = [{'uids'=>['1'], 'percentage' => 0}] - - @reporter.expects(:report).with(error_msg).once - @provisioner.provision(@reporter, data['task_uuid'], provision_info) - end - - it 'success report if all nodes report about success at least once' do - @provisioner.stubs(:prepare_nodes) - @provisioner.stubs(:provision_and_watch_progress).returns([[],[]]) - - success_msg = { - 'nodes' => [{ - 'uid' => '1', - 'progress' => 100, - 'status' => 'provisioned'}], - 'status' => 'ready', - 'progress' => 100 - } - @reporter.expects(:report).with(success_msg).once - @provisioner.provision(@reporter, data['task_uuid'], data) - end - end - - context 're-provisioned nodes' do - - it 'should reboot and bootstrap re-provisioned nodes' do - Astute::CobblerManager.any_instance.expects(:get_existent_nodes) - .with(data['nodes']) - .returns(data['nodes']) - Astute::CobblerManager.any_instance.expects(:get_mac_duplicate_names) - .with(data['nodes']) - .returns([]) - Astute::CobblerManager.any_instance.expects(:add_nodes) - .with(data['nodes']) - Astute::CobblerManager.any_instance.expects(:remove_nodes) - .with(data['nodes']) - @provisioner.stubs(:remove_nodes) - - Astute::NailgunHooks.any_instance.expects(:process) - @provisioner.expects(:change_nodes_type).with( - @reporter, - data['task_uuid'], - data['nodes'], - 'reprovisioned' - ) - @provisioner.stubs(:provision_and_watch_progress).returns([[], []]) - - @provisioner.provision(@reporter, data['task_uuid'], data) - end - - it 'should not reboot and boostrap new nodes' do - @provisioner.stubs(:remove_nodes) - @provisioner.stubs(:provision_and_watch_progress).returns([[], []]) - - Astute::CobblerManager.any_instance.expects(:get_existent_nodes) - .with(data['nodes']) - .returns([]) - Astute::CobblerManager.any_instance.expects(:get_mac_duplicate_names) - .with(data['nodes']) - .returns([]) - Astute::CobblerManager.any_instance.expects(:remove_nodes) - .with(data['nodes']) - Astute::CobblerManager.any_instance.expects(:add_nodes) - .with(data['nodes']) - - @provisioner.expects(:change_nodes_type).never - Astute::NailgunHooks.any_instance.expects(:process).never - - @provisioner.provision(@reporter, data['task_uuid'], data) - end - - end - end - - describe '#provision_and_watch_progress' do - - before(:each) do - # Disable sleeping in test env (doubles the test speed) - def @provisioner.sleep_not_greater_than(time, &block) - block.call - end - end - - it "raises error if nodes list is empty" do - expect {@provisioner.provision_and_watch_progress(@reporter, data['task_uuid'], {}, data['engine'], [])}. - to raise_error(/Nodes to provision are not provided!/) - end - - it "raise error if failed node find" do - expect do - @provisioner.stubs(:node_type).returns([]) - @provisioner.stubs(:provision_piece).raises(Astute::AstuteError) - error_msg = { - 'status' => 'error', - 'error' => '', - 'progress' => 100, - } - @provisioner.provision_and_watch_progress(@reporter, data['task_uuid'], data['nodes'], data['engine'], []) - @reporter.expects(:report).with(error_msg).once - end.to raise_error(Astute::AstuteError) - end - - it "should try to unlock discovery for all nodes if provision fail unexpectedly" do - @provisioner.expects(:unlock_nodes_discovery).with( - @reporter, - data['task_uuid'], - data['nodes'].map { |n| n['uid'] }, - data['nodes'] - ) - @provisioner.stubs(:prepare_nodes).returns([]) - @provisioner.stubs(:provision_and_watch_progress).raises( - StandardError, - "MESSAGE" - ) - Astute::Rsyslogd.stubs(:send_sighup) - begin - @provisioner.provision(@reporter, data['task_uuid'], data) - rescue - end - end - - it "prepare provision log for parsing" do - Astute::LogParser::ParseProvisionLogs.any_instance do - expects(:prepare).with(data['nodes']).once - end - @provisioner.stubs(:provision_piece).returns([]) - @provisioner.stubs(:report_about_progress).returns() - @provisioner.stubs(:node_type).returns([{'uid' => '1', 'node_type' => 'target' }]) - - @provisioner.provision_and_watch_progress(@reporter, data['task_uuid'], data['nodes'], data['engine'], []) - end - - it "ignore problem with parsing provision log" do - Astute::LogParser::ParseProvisionLogs.any_instance do - stubs(:prepare).with(data['nodes']).raises - end - - @provisioner.stubs(:report_about_progress).returns() - @provisioner.stubs(:provision_piece).returns([]) - @provisioner.stubs(:node_type).returns([{'uid' => '1', 'node_type' => 'target' }]) - - @provisioner.provision_and_watch_progress(@reporter, data['task_uuid'], data['nodes'], data['engine'], []) - end - - it 'provision nodes using mclient' do - @provisioner.stubs(:report_about_progress).returns() - @provisioner.stubs(:provision_piece).returns([]) - @provisioner.expects(:node_type).returns([{'uid' => '1', 'node_type' => 'target' }]) - - @provisioner.provision_and_watch_progress(@reporter, data['task_uuid'], data['nodes'], data['engine'], []) - end - - it "unexpecting bootstrap nodes should be ereased and rebooted" do - Astute::CobblerManager.any_instance.stubs(:add_nodes).returns([]) - @provisioner.stubs(:prepare_nodes).returns([]) - @provisioner.stubs(:remove_nodes).returns([]) - Astute.config.provisioning_timeout = 5 - nodes = [ - { 'uid' => '1'}, - { 'uid' => '2'} - ] - @provisioner.stubs(:report_about_progress).returns() - @provisioner.stubs(:provision_piece).returns([]) - @provisioner.stubs(:node_type) - .returns([{'uid' => '1', 'node_type' => 'target' }]) - .then.returns([{'uid' => '2', 'node_type' => 'bootstrap' }]) - .then.returns([{'uid' => '2', 'node_type' => 'bootstrap' }]) - .then.returns([{'uid' => '2', 'node_type' => 'target' }]) - - Astute::NodesRemover.any_instance.expects(:remove) - .twice.returns({"nodes"=>[{"uid"=>"2", }]}) - - success_msg = { - 'status' => 'ready', - 'progress' => 100, - 'nodes' => [{ - 'uid' => '1', - 'status' => 'provisioned', - 'progress' => 100}, - { - 'uid' => '2', - 'status' => 'provisioned', - 'progress' => 100} - ]} - - provision_info = {'nodes' => nodes, - 'engine' => data['engine'], - 'fault_tolerance' => []} - - @reporter.expects(:report).with(success_msg).once - @provisioner.provision(@reporter, data['task_uuid'], provision_info) - end - - it 'should provision nodes in chunks' do - Astute.config.provisioning_timeout = 5 - Astute.config.max_nodes_to_provision = 2 - nodes = [ - { 'uid' => '1'}, - { 'uid' => '2'}, - { 'uid' => '3'} - ] - @provisioner.stubs(:report_about_progress).returns() - @provisioner.stubs(:node_type) - .returns([{'uid' => '1', 'node_type' => 'target' }, {'uid' => '2', 'node_type' => 'target' }]) - .then.returns([{'uid' => '3', 'node_type' => 'target' }]) - - @provisioner.expects(:provision_piece).returns([]).twice - @provisioner.provision_and_watch_progress(@reporter, data['task_uuid'], nodes, data['engine'], []) - end - - it 'should success if only one node fails' do - Astute::CobblerManager.any_instance.stubs(:add_nodes).returns([]) - @provisioner.stubs(:remove_nodes).returns([]) - @provisioner.stubs(:prepare_nodes).returns([]) - @provisioner.stubs(:unlock_nodes_discovery) - Astute.config.provisioning_timeout = 5 - Astute.config.max_nodes_to_provision = 2 - nodes = [ - { 'uid' => '1'}, - { 'uid' => '2'}, - { 'uid' => '3'} - ] - @provisioner.stubs(:report_about_progress).returns() - @provisioner.stubs(:node_type) - .returns([{'uid' => '1', 'node_type' => 'target' }, {'uid' => '2', 'node_type' => 'target' }]) - .then.returns([]) - - success_msg = { - 'status' => 'ready', - 'progress' => 100, - 'nodes' => [ - { - 'uid' => '3', - 'status' => 'error', - "error_msg"=>"Failed to provision", - 'progress' => 100, - "error_type"=>"provision"}, - { - 'uid' => '1', - 'status' => 'provisioned', - 'progress' => 100}, - { - 'uid' => '2', - 'status' => 'provisioned', - 'progress' => 100} - ]} - - @provisioner.stubs(:provision_piece).returns([]).then.returns(['3']) - provision_info = {'nodes' => nodes, - 'engine' => data['engine'], - 'fault_tolerance' => [{'uids'=> ['2', '3'], 'percentage' => 50}]} - - @reporter.expects(:report).with(success_msg).once - @provisioner.provision(@reporter, data['task_uuid'], provision_info) - end - - it 'should fail if node without fault tolerance rule fails' do - Astute::CobblerManager.any_instance.stubs(:add_nodes).returns([]) - @provisioner.stubs(:remove_nodes).returns([]) - @provisioner.stubs(:prepare_nodes).returns([]) - @provisioner.stubs(:unlock_nodes_discovery) - Astute.config.provisioning_timeout = 5 - Astute.config.max_nodes_to_provision = 2 - nodes = [ - { 'uid' => '1'}, - { 'uid' => '2'}, - { 'uid' => '3'} - ] - @provisioner.stubs(:report_about_progress).returns() - @provisioner.stubs(:node_type) - .returns([{'uid' => '1', 'node_type' => 'target' }, {'uid' => '2', 'node_type' => 'target' }]) - .then.returns([]) - - success_msg = { - 'status' => 'error', - "error"=>"Too many nodes failed to provision", - 'progress' => 100, - 'nodes' => [ - { - 'uid' => '3', - 'status' => 'error', - "error_msg"=>"Failed to provision", - 'progress' => 100, - "error_type"=>"provision"}, - { - 'uid' => '1', - 'status' => 'provisioned', - 'progress' => 100}, - { - 'uid' => '2', - 'status' => 'provisioned', - 'progress' => 100} - ]} - - @provisioner.stubs(:provision_piece).returns([]).then.returns(['3']) - provision_info = {'nodes' => nodes, - 'engine' => data['engine'], - 'fault_tolerance' => [{'uids'=> ['1', '2'], 'percentage' => 50}]} - - @reporter.expects(:report).with(success_msg).once - @provisioner.provision(@reporter, data['task_uuid'], provision_info) - end - - it 'should fail if node has two roles and fails for one' do - Astute::CobblerManager.any_instance.stubs(:add_nodes).returns([]) - @provisioner.stubs(:remove_nodes).returns([]) - @provisioner.stubs(:prepare_nodes).returns([]) - @provisioner.stubs(:unlock_nodes_discovery) - Astute.config.provisioning_timeout = 5 - Astute.config.max_nodes_to_provision = 2 - nodes = [ - { 'uid' => '1'}, - { 'uid' => '2'}, - { 'uid' => '3'} - ] - @provisioner.stubs(:report_about_progress).returns() - @provisioner.stubs(:node_type) - .returns([{'uid' => '1', 'node_type' => 'target' }, {'uid' => '2', 'node_type' => 'target' }]) - .then.returns([]) - - success_msg = { - 'status' => 'error', - "error"=>"Too many nodes failed to provision", - 'progress' => 100, - 'nodes' => [ - { - 'uid' => '3', - 'status' => 'error', - "error_msg"=>"Failed to provision", - 'progress' => 100, - "error_type"=>"provision"}, - { - 'uid' => '1', - 'status' => 'provisioned', - 'progress' => 100}, - { - 'uid' => '2', - 'status' => 'provisioned', - 'progress' => 100} - ]} - - @provisioner.stubs(:provision_piece).returns([]).then.returns(['3']) - provision_info = {'nodes' => nodes, - 'engine' => data['engine'], - 'fault_tolerance' => [{'uids'=> ['3'], 'percentage' => 100}, - {'uids'=> ['3'], 'percentage' => 0}]} - - @reporter.expects(:report).with(success_msg).once - @provisioner.provision(@reporter, data['task_uuid'], provision_info) - end - - it 'should fail if one node fails' do - Astute::CobblerManager.any_instance.stubs(:add_nodes).returns([]) - @provisioner.stubs(:remove_nodes).returns([]) - @provisioner.stubs(:prepare_nodes).returns([]) - Astute.config.provisioning_timeout = 1 - Astute.config.max_nodes_to_provision = 2 - nodes = [ - { 'uid' => '1'}, - { 'uid' => '2'}, - { 'uid' => '3'} - ] - @provisioner.stubs(:report_about_progress).returns() - @provisioner.stubs(:unlock_nodes_discovery) - @provisioner.stubs(:node_type) - .returns([{'uid' => '1', 'node_type' => 'target' }, {'uid' => '2', 'node_type' => 'target' }]) - .then.returns([]) - - success_msg = { - 'status' => 'error', - "error"=>"Too many nodes failed to provision", - 'progress' => 100, - 'nodes' => [ - { - 'uid' => '3', - 'status' => 'error', - "error_msg"=>"Failed to provision", - 'progress' => 100, - "error_type"=>"provision"}, - { - 'uid' => '1', - 'status' => 'provisioned', - 'progress' => 100}, - { - 'uid' => '2', - 'status' => 'provisioned', - 'progress' => 100} - ]} - - @provisioner.stubs(:provision_piece).returns([]).then.returns(['3']) - provision_info = {'nodes' => nodes, - 'engine' => data['engine'], - 'fault_tolerance' => [{'uids'=> ['2', '3'], 'percentage' => 0}]} - - @reporter.expects(:report).with(success_msg).once - @provisioner.provision(@reporter, data['task_uuid'], provision_info) - end - - it 'fail on any node if no faul_tolerance rules are provided' do - Astute::CobblerManager.any_instance.stubs(:add_nodes).returns([]) - @provisioner.stubs(:remove_nodes).returns([]) - @provisioner.stubs(:prepare_nodes).returns([]) - Astute.config.provisioning_timeout = 5 - Astute.config.max_nodes_to_provision = 2 - nodes = [ - { 'uid' => '1'}, - { 'uid' => '2'}, - { 'uid' => '3'} - ] - @provisioner.stubs(:report_about_progress).returns() - @provisioner.stubs(:unlock_nodes_discovery) - @provisioner.stubs(:node_type) - .returns([{'uid' => '1', 'node_type' => 'target' }, {'uid' => '2', 'node_type' => 'target' }]) - .then.returns([]) - - success_msg = { - 'status' => 'error', - "error"=>"Too many nodes failed to provision", - 'progress' => 100, - 'nodes' => [ - { - 'uid' => '3', - 'status' => 'error', - "error_msg"=>"Failed to provision", - 'progress' => 100, - "error_type"=>"provision"}, - { - 'uid' => '1', - 'status' => 'provisioned', - 'progress' => 100}, - { - 'uid' => '2', - 'status' => 'provisioned', - 'progress' => 100} - ]} - - @provisioner.stubs(:provision_piece).returns([]).then.returns(['3']) - provision_info = {'nodes' => nodes, - 'engine' => data['engine'], - 'fault_tolerance' => []} - - @reporter.expects(:report).with(success_msg).once - @provisioner.provision(@reporter, data['task_uuid'], provision_info) - - end - - it 'it should append those nodes where provision not yet started to failed nodes if provision is aborted in the middle' do - Astute::CobblerManager.any_instance.stubs(:add_nodes).returns([]) - @provisioner.stubs(:remove_nodes).returns([]) - @provisioner.stubs(:prepare_nodes).returns([]) - @provisioner.stubs(:unlock_nodes_discovery) - Astute.config.provisioning_timeout = 5 - Astute.config.max_nodes_to_provision = 2 - nodes = [ - { 'uid' => '1'}, - { 'uid' => '2'}, - { 'uid' => '3'} - ] - @provisioner.stubs(:report_about_progress).returns() - @provisioner.stubs(:unlock_nodes_discovery) - @provisioner.stubs(:node_type) - .returns([{'uid' => '1', 'node_type' => 'target' }]) - - success_msg = { - 'status' => 'error', - "error"=>"Too many nodes failed to provision", - 'progress' => 100, - 'nodes' => [ - { - 'uid' => '2', - 'status' => 'error', - 'progress' => 100, - 'error_msg' => 'Failed to provision', - 'error_type' => 'provision' - }, - { - 'uid' => '3', - 'status' => 'error', - 'error_msg' => 'Failed to provision', - 'progress' => 100, - 'error_type' => 'provision' - }, - { - 'uid' => '1', - 'status' => 'provisioned', - 'progress' => 100 - }, - - ]} - - @provisioner.stubs(:provision_piece).returns(['2']) - provision_info = {'nodes' => nodes, - 'engine' => data['engine']} - - @reporter.expects(:report).with(success_msg).once - @provisioner.provision(@reporter, data['task_uuid'], provision_info) - end - end - - describe '#stop_provision' do - around(:each) do |example| - old_mc_retries = Astute.config.mc_retries - old_nodes_rm_interal = Astute.config.nodes_remove_interval - example.run - Astute.config.mc_retries = old_mc_retries - Astute.config.nodes_remove_interval = old_nodes_rm_interal - end - - before(:each) do - Astute.config.mc_retries = 1 - Astute.config.nodes_remove_interval = 0 - end - - it 'stop provision if provision operation stop immediately' do - Astute::Rsyslogd.stubs(:send_sighup).once - @provisioner.stubs(:stop_provision_via_ssh) - .returns({'inaccessible_nodes' => [{'uid' => '1'}]}) - @provisioner.stubs(:node_type).returns([{'uid' => '1', 'node_type' => 'bootstrap'}]) - - Astute::NodesRemover.any_instance.expects(:remove) - .once.returns({"nodes"=>[{"uid"=>"1", }]}) - - expect(@provisioner.stop_provision(@reporter, - data['task_uuid'], - data['engine'], - data['nodes'])) - .to eql({ - "error_nodes" => [], - "inaccessible_nodes" => [], - "nodes" => [{"uid"=>"1"}] - }) - end - - it 'stop provision if provision operation stop in the end' do - Astute::Rsyslogd.stubs(:send_sighup).once - @provisioner.stubs(:stop_provision_via_ssh) - .returns({'nodes' => [{'uid' => "1"}]}) - @provisioner.stubs(:node_type).returns([{'uid' => "1", 'node_type' => 'target'}]) - - Astute::NodesRemover.any_instance.expects(:remove) - .once.returns({"nodes"=>[{"uid"=>"1", }]}) - - expect(@provisioner.stop_provision(@reporter, - data['task_uuid'], - data['engine'], - data['nodes'])) - .to eql({ - "error_nodes" => [], - "inaccessible_nodes" => [], - "nodes" => [{"uid"=>"1"}] - }) - end - - it 'sleep between attempts to find and erase nodes using mcollective' do - Astute::Rsyslogd.stubs(:send_sighup).once - @provisioner.stubs(:node_type).returns([{'uid' => '1', 'node_type' => 'bootstrap'}]) - Astute::NodesRemover.any_instance.stubs(:remove) - .once.returns({"nodes"=>[{"uid"=>"1", }]}) - - @provisioner.expects(:sleep).with(Astute.config.nodes_remove_interval) - - @provisioner.stop_provision(@reporter, - data['task_uuid'], - data['engine'], - data['nodes']) - end - - it 'perform several attempts to find and erase nodes using mcollective' do - Astute::Rsyslogd.stubs(:send_sighup).once - Astute.config.mc_retries = 2 - Astute.config.nodes_remove_interval = 0 - - @provisioner.stubs(:node_type).twice - .returns([{'uid' => '1', 'node_type' => 'bootstrap'}]) - .then.returns([{'uid' => '2', 'node_type' => 'target'}]) - - Astute::NodesRemover.any_instance.stubs(:remove).twice - .returns({"nodes"=>[{"uid"=>"1"}]}).then - .returns({"error_nodes"=>[{"uid"=>"2"}]}) - - data['nodes'] << { - "uid" => '2', - 'profile' => 'centos-x86_64', - "slave_name"=>"controller-2", - "admin_ip" =>'1.2.3.6' - } - - expect(@provisioner.stop_provision(@reporter, - data['task_uuid'], - data['engine'], - data['nodes'])) - .to eql({ - "error_nodes" => [{"uid"=>'2'}], - "inaccessible_nodes" => [], - "nodes" => [{"uid"=>"1"}], - "status" => "error" - }) - end - - it 'should send sighup for Rsyslogd' do - Astute::Rsyslogd.expects(:send_sighup).once - @provisioner.stubs(:stop_provision_via_mcollective).returns([[], {}]) - - Astute::CobblerManager.any_instance.stubs(:remove_nodes) - .with(data['nodes']) - .returns([]) - - @provisioner.stop_provision(@reporter, - data['task_uuid'], - data['engine'], - data['nodes']) - end - - end # stop_provision - - describe 'provision_piece' do - let(:nodes) { [{'uid' => '1', 'slave_name' => 'node1', 'profile' => 'centos-x86_64'}] } - let(:engine_attrs) do - { - "url"=>"http://localhost/cobbler_api", - "username"=>"cobbler", - "password"=>"cobbler", - "master_ip"=>"127.0.0.1", - } - end - - it 'return failed nodes if image provision return failed uid' do - Astute::CobblerManager.any_instance.stubs(:netboot_nodes) - Astute::CobblerManager.any_instance.stubs(:check_reboot_nodes).returns(['node1']) - @provisioner.stubs(:change_nodes_type) - @provisioner.stubs(:control_reboot_using_ssh) - Astute::ImageProvision.stubs(:provision).returns(['1']) - result = @provisioner.provision_piece(@reporter, 'task_uuid', engine_attrs, nodes) - result.should eql(['1']) - end - end -end diff --git a/spec/unit/puppet_job_spec.rb b/spec/unit/puppet_job_spec.rb deleted file mode 100644 index ed6f8b08..00000000 --- a/spec/unit/puppet_job_spec.rb +++ /dev/null @@ -1,309 +0,0 @@ -# Copyright 2016 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require_relative('../spec_helper') - -describe Astute::PuppetJob do - include SpecHelpers - - let(:puppet_mclient) do - puppet_mclient = mock('puppet_mclient') - puppet_mclient.stubs(:run) - puppet_mclient.stubs(:status) - puppet_mclient.stubs(:manifest).returns('/etc/puppet/test_manifest.pp') - puppet_mclient.stubs(:summary) - puppet_mclient.stubs(:node_id).returns('test_node') - puppet_mclient - end - - let(:options) do - { - 'retries' => 1, - 'succeed_retries' => 0, - 'undefined_retries' => 1, - 'timeout' => 1, - 'puppet_start_timeout' => 1, - 'puppet_start_interval' => 0 - } - end - - subject do - puppet_job = Astute::PuppetJob.new('test_task', puppet_mclient, options) - puppet_job.stubs(:sleep) - puppet_job - end - - describe '#run' do - it 'should run puppet using mcollective client' do - puppet_mclient.expects(:run).once.returns(true) - expect(subject.run).to eq('running') - end - - it 'should rerun puppet several times if client failed' do - puppet_mclient.expects(:run).twice.returns(false).then.returns(true) - expect(subject.run).to eq('running') - end - - it 'should return running even if could not start after several retries' do - puppet_mclient.expects(:run).at_least_once.returns(false) - expect(subject.run).to eq('running') - end - end - - describe '#summary' do - it 'should return summary from mcollective agent' do - summary = { 'info'=>'data' } - puppet_mclient.expects(:summary).once.returns(summary) - expect(subject.summary).to eq(summary) - end - end - - describe '#task_status=' do - it 'should raise error if status do not support' do - expect {subject.send(:task_status=, 'unknow_status')}.to \ - raise_error(Astute::StatusValidationError, /unknow_status/) - end - end - - describe '#status' do - - context 'unknow status' do - it 'should raise error if magent return unknow status' do - puppet_mclient.stubs(:run).returns(true) - subject.run - - puppet_mclient.expects(:status).returns('unknow_status') - expect {subject.status}.to raise_error( - Astute::StatusValidationError, /unknow_status/ - ) - end - end - - context 'running' do - it 'should return runing when processing' do - puppet_mclient.stubs(:run).returns(true) - subject.run - - puppet_mclient.expects(:status).returns('running') - expect(subject.status).to eq('running') - end - - it 'should return runing when succeed but need succeed retries' do - puppet_mclient.expects(:run).twice.returns(true) - options['succeed_retries'] = 1 - subject.run - - puppet_mclient.stubs(:status) - .returns('running') - .then.returns('succeed') - .then.returns('running') - - 3.times { expect(subject.status).to eq('running') } - end - - it 'should return runing when failed but can retry' do - puppet_mclient.expects(:run).twice.returns(true) - subject.run - - puppet_mclient.stubs(:status) - .returns('running') - .then.returns('stopped') - .then.returns('running') - - 3.times { expect(subject.status).to eq('running') } - end - - it 'should return runing when magent failed but can retry' do - puppet_mclient.expects(:run).once.returns(true) - subject.run - - puppet_mclient.stubs(:status) - .returns('running') - .then.returns('undefined') - .then.returns('running') - - 3.times { expect(subject.status).to eq('running') } - end - end - - context 'successful' do - it 'should return successful if succeed' do - puppet_mclient.stubs(:run).returns(true) - subject.run - - puppet_mclient.stubs(:status) - .returns('running') - .then.returns('succeed') - - expect(subject.status).to eq('running') - expect(subject.status).to eq('successful') - end - - it 'should successful if undefined/failed but retry succeed' do - puppet_mclient.stubs(:run).returns(true) - options['undefined_retries'] = 1 - options['retries'] = 1 - subject.run - - puppet_mclient.stubs(:status) - .then.returns('undefined') - .returns('stopped') - .then.returns('undefined') - .then.returns('succeed') - - 3.times { expect(subject.status).to eq('running') } - expect(subject.status). to eq('successful') - end - - it 'should successful if failed but retry succeed' do - puppet_mclient.stubs(:run).returns(true) - options['undefined_retries'] = 0 - options['retries'] = 2 - subject.run - - puppet_mclient.stubs(:status) - .returns('stopped') - .then.returns('stopped') - .then.returns('succeed') - - 2.times { expect(subject.status).to eq('running') } - expect(subject.status). to eq('successful') - end - - it 'should successful if undefined but retry succeed' do - puppet_mclient.stubs(:run).returns(true) - options['undefined_retries'] = 2 - options['retries'] = 0 - subject.run - - puppet_mclient.stubs(:status) - .returns('undefined') - .then.returns('undefined') - .then.returns('succeed') - - 2.times { expect(subject.status).to eq('running') } - expect(subject.status). to eq('successful') - end - - it 'should do nothing if final status set and retries end' do - puppet_mclient.stubs(:run).returns(true) - options['retries'] = 0 - subject.run - - puppet_mclient.stubs(:status).returns('succeed') - 3.times { expect(subject.status). to eq('successful') } - end - - it 'should return succeed if status succeed but time is up' do - puppet_mclient.stubs(:run).returns(true) - options['timeout'] = 0 - subject.run - - puppet_mclient.stubs(:status).returns('succeed') - expect(subject.status). to eq('successful') - end - end - - context 'failed' do - it 'should return failed if failed and no more retries' do - puppet_mclient.stubs(:run).returns(true) - subject.run - - puppet_mclient.stubs(:status) - .returns('stopped') - .then.returns('stopped') - - expect(subject.status).to eq('running') - expect(subject.status).to eq('failed') - end - - it 'should return failed if time is over and no result' do - puppet_mclient.stubs(:run).returns(true) - options['timeout'] = 0 - subject.run - - puppet_mclient.stubs(:status).returns('running') - expect(subject.status).to eq('failed') - end - - it 'should do nothing if final status set and retries end' do - puppet_mclient.stubs(:run).returns(true) - options['retries'] = 1 - subject.run - - puppet_mclient.stubs(:status) - .returns('stopped') - .then.returns('stopped') - - expect(subject.status).to eq('running') - 3.times { expect(subject.status). to eq('failed') } - end - end - - context 'undefined' do - it 'should return failed if undefined and no more retries' do - puppet_mclient.stubs(:run).returns(true) - subject.run - - puppet_mclient.stubs(:status) - .returns('undefined') - .then.returns('undefined') - - expect(subject.status).to eq('running') - expect(subject.status).to eq('failed') - end - - it 'should return failed if time is over and no result' do - puppet_mclient.stubs(:run).returns(true) - options['timeout'] = 0 - subject.run - - puppet_mclient.stubs(:status).returns('undefined') - expect(subject.status).to eq('failed') - end - - it 'should do nothing if final status set and retries end' do - puppet_mclient.stubs(:run).returns(true) - options['undefined'] = 0 - subject.run - - puppet_mclient.stubs(:status) - .returns('undefined') - .then.returns('undefined') - - expect(subject.status).to eq('running') - 3.times { expect(subject.status). to eq('failed') } - end - - it 'should reset retries if answer was received' do - puppet_mclient.stubs(:run).returns(true) - options['undefined_retries'] = 1 - options['retries'] = 0 - subject.run - - puppet_mclient.stubs(:status) - .then.returns('undefined') - .returns('running') - .then.returns('undefined') - .then.returns('succeed') - - 3.times { expect(subject.status).to eq('running') } - expect(subject.status). to eq('successful') - end - end - - - end - -end diff --git a/spec/unit/puppet_task_spec.rb b/spec/unit/puppet_task_spec.rb deleted file mode 100644 index bc259c4b..00000000 --- a/spec/unit/puppet_task_spec.rb +++ /dev/null @@ -1,221 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require File.join(File.dirname(__FILE__), '../spec_helper') - -describe Astute::PuppetTask do - include SpecHelpers - - let(:node) do - { - 'uid' => '45', - 'priority' => 200, - 'role' => 'ceph', - 'tasks' => [ - { - 'priority' => 100, - 'type' => 'puppet', - 'uids' => ['45'] - }, - { - 'priority' => 300, - 'type' => 'puppet', - 'uids' => ['45'] - } - ] - } - end - - let(:ctx) { - ctx = mock - ctx.stubs(:task_id) - ctx.stubs(:deploy_log_parser).returns(Astute::LogParser::NoParsing.new) - ctx.stubs(:status).returns({}) - reporter = mock - reporter.stubs(:report) - up_reporter = Astute::ProxyReporter::DeploymentProxyReporter.new(reporter, [node]) - ctx.stubs(:reporter).returns(up_reporter) - ctx - } - - let(:puppet_task) { Astute::PuppetTask.new(ctx, node)} - let(:puppet_task_wo_retries) { Astute::PuppetTask.new(ctx, node, {:retries=>0})} - let(:puppet_task_success_retries) { Astute::PuppetTask.new(ctx, node, { - :retries=>1, - :puppet_manifest=>nil, - :puppet_modules=>nil, - :cwd=>nil, - :timeout=>nil, - :puppet_debug=>false, - :succeed_retries=>1 - }) - } - - let(:mco_puppet_stopped) do - { - :changes => {"total" => 1}, - :time => {"last_run" => 1358425701}, - :resources => {"failed" => 0}, - :status => "stopped", - :enabled => 1, - :stopped => 1, - :idling => 0, - :running => 0, - :runtime => 1358425701 - } - end - - let(:mco_puppet_running) do - mco_puppet_stopped.merge( - :status => 'running', - :running => 1, - :stopped => 0 - ) - end - - let(:mco_puppet_fail) do - mco_puppet_running.merge( - :runtime => 1358426000, - :time => {"last_run" => 1358426000}, - :resources => {"failed" => 1} - ) - end - - let(:mco_puppet_failed) do - mco_puppet_fail.merge( - :status => 'stopped', - :stopped => 1, - :running => 0 - ) - end - - let(:mco_puppet_finished) do - mco_puppet_stopped.merge( - :time => {'last_run' => 1358428000}, - :status => 'stopped' - ) - end - - let(:mco_puppet_idling) do - mco_puppet_stopped.merge( - :status => 'idling', - :running => 0, - :stopped => 0, - :idling => 1 - ) - end - - describe "#run" do - it 'run puppet using mcollective' do - puppet_task.expects(:puppet_status).returns(mco_puppet_stopped) - puppet_task.expects(:puppet_run) - puppet_task.run - end - end #run - - describe "#status" do - before(:each) do - ctx.stubs(:report_and_update_status) - end - - it 'check puppet using mcollective' do - puppet_task.stubs(:puppet_status).returns(mco_puppet_stopped) - .then.returns(mco_puppet_running) - .then.returns(mco_puppet_finished) - - puppet_task.expects(:puppet_run) - puppet_task.run - end - - it 'return error for node if puppet failed (a cycle w/o any transitional states)' do - puppet_task_wo_retries.stubs(:puppet_status).returns(mco_puppet_stopped) - .then.returns(mco_puppet_failed) - - puppet_task_wo_retries.expects(:puppet_run) - puppet_task_wo_retries.run - expect(puppet_task_wo_retries.status).to eql('error') - end - - it 'retries to run puppet if it fails and return middle status' do - puppet_task.stubs(:puppet_status).returns(mco_puppet_stopped) - .then.returns(mco_puppet_failed) - .then.returns(mco_puppet_failed) - .then.returns(mco_puppet_finished) - - puppet_task.expects(:puppet_run).times(2) - puppet_task.run - expect(puppet_task.status).to eql('deploying') - expect(puppet_task.status).to eql('ready') - end - - it "return error for node if puppet failed (a cycle with one running state only)" do - puppet_task_wo_retries.stubs(:puppet_status).returns(mco_puppet_stopped) - .then.returns(mco_puppet_running) - .then.returns(mco_puppet_running) - .then.returns(mco_puppet_fail) - .then.returns(mco_puppet_failed) - - puppet_task_wo_retries.expects(:puppet_run) - puppet_task_wo_retries.run - - expect(puppet_task_wo_retries.status).to eql('deploying') - expect(puppet_task_wo_retries.status).to eql('deploying') - expect(puppet_task_wo_retries.status).to eql('deploying') - expect(puppet_task_wo_retries.status).to eql('error') - end - - it "error status for node if puppet failed (a cycle w/o idle and finishing states)" do - puppet_task_wo_retries.stubs(:puppet_status).returns(mco_puppet_stopped) - .then.returns(mco_puppet_running) - .then.returns(mco_puppet_failed) - - puppet_task_wo_retries.expects(:puppet_run) - puppet_task_wo_retries.run - expect(puppet_task_wo_retries.status).to eql('deploying') - expect(puppet_task_wo_retries.status).to eql('error') - end - - it "retries to run puppet if it idling" do - puppet_task.stubs(:puppet_status).returns(mco_puppet_stopped) - .then.returns(mco_puppet_idling) - .then.returns(mco_puppet_stopped) - .then.returns(mco_puppet_running) - .then.returns(mco_puppet_finished) - - puppet_task.expects(:puppet_run) - puppet_task.run - expect(puppet_task.status).to eql('deploying') - expect(puppet_task.status).to eql('ready') - end - - it "error status for node if puppet failed (mcollective retries)" do - puppet_task.stubs(:puppet_status).raises(Astute::MClientTimeout) - - puppet_task.stubs(:puppetd_runonce) - puppet_task.run - - expect(puppet_task.status).to eql('error') - end - - it 'status will retry successful puppet task if configured' do - puppet_task_success_retries.stubs(:puppet_status).returns(mco_puppet_finished) - puppet_task_success_retries.stubs(:node_status).returns('succeed') - - puppet_task_success_retries.expects(:puppetd_runonce).times(2) - puppet_task_success_retries.run - puppet_task_success_retries.status - end - end #status - -end diff --git a/spec/unit/puppetd_spec.rb b/spec/unit/puppetd_spec.rb deleted file mode 100644 index 810897cc..00000000 --- a/spec/unit/puppetd_spec.rb +++ /dev/null @@ -1,90 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -require File.join(File.dirname(__FILE__), '../spec_helper') - -include Astute - -describe "PuppetdDeployer" do - include SpecHelpers - - let(:nodes) do - [ - { - 'uid' => '1', - 'role' => 'primary-controller', - 'tasks' => [ - {'name' => 'pr_controller_1', 'description' => 'test1'}, - {'name' => 'pr_controller_2', 'description' => 'test2'}, - {'name' => 'controller_3', 'description' => 'test3'} - ], - 'fail_if_error' => true - }, - { - 'uid' => '2', - 'role' => 'controller', - 'tasks' => [ - {'name' => 'controller_1', 'description' => 'test1'}, - {'name' => 'controller_3', 'description' => 'test3'} - ], - 'fail_if_error' => false - } - ] - end - - let(:ctx) do - ctx = mock - ctx.stubs(:task_id) - ctx.stubs(:deploy_log_parser).returns(Astute::LogParser::NoParsing.new) - ctx.stubs(:status).returns({}) - reporter = mock - reporter.stubs(:report) - up_reporter = Astute::ProxyReporter::DeploymentProxyReporter.new(reporter, nodes) - ctx.stubs(:reporter).returns(up_reporter) - ctx - end - - describe '.deploy' do - it 'should deploy nodes' do - PuppetdDeployer.expects(:deploy_nodes).once - - PuppetdDeployer.deploy(ctx, nodes) - end - - it 'should use puppet task for deploy' do - puppet_task = mock('puppet_task') - PuppetdDeployer.expects(:puppet_task).with(nodes[0]).returns(puppet_task) - PuppetdDeployer.expects(:puppet_task).with(nodes[1]).returns(puppet_task) - puppet_task.expects(:run).times(nodes.size) - puppet_task.stubs(:status).returns('ready') - - PuppetdDeployer.deploy(ctx, nodes) - end - - it 'should sleep between status checks' do - puppet_task = mock('puppet_task') - PuppetdDeployer.expects(:puppet_task).with(nodes[0]).returns(puppet_task) - PuppetdDeployer.expects(:puppet_task).with(nodes[1]).returns(puppet_task) - puppet_task.stubs(:run).times(nodes.size) - puppet_task.stubs(:status).returns('deploying') - .then.returns('ready') - .then.returns('ready') - - PuppetdDeployer.expects(:sleep).with(Astute.config.puppet_deploy_interval).twice - PuppetdDeployer.deploy(ctx, nodes) - end - end - -end diff --git a/spec/unit/reporter_spec.rb b/spec/unit/reporter_spec.rb deleted file mode 100644 index 7a164b47..00000000 --- a/spec/unit/reporter_spec.rb +++ /dev/null @@ -1,370 +0,0 @@ -# Copyright 2013 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -require File.join(File.dirname(__FILE__), '../spec_helper') - -include Astute - -describe "ProxyReporter" do - context "Instance of ProxyReporter class" do - before :each do - @msg = {'nodes' => [{'status' => 'ready', 'uid' => '1'}]} - @msg_pr = {'nodes' => [@msg['nodes'][0], - {'status' => 'deploying', 'uid' => '2', - 'progress' => 54}]} - @up_reporter = mock('up_reporter') - @reporter = ProxyReporter::DeploymentProxyReporter.new(@up_reporter) - end - - it "reports first-come data" do - @up_reporter.expects(:report).with(@msg) - @reporter.report(@msg) - end - - it "does not report the same message" do - @up_reporter.expects(:report).with(@msg).once - 5.times { @reporter.report(@msg) } - end - - it "reports only updated node" do - updated_node = @msg_pr['nodes'][1] - expected_msg = {'nodes' => [updated_node]} - @up_reporter.expects(:report).with(@msg) - @up_reporter.expects(:report).with(expected_msg) - @reporter.report(@msg) - @reporter.report(@msg_pr) - end - - it "reports only if progress value is greater" do - msg1 = {'nodes' => [{'status' => 'deploying', 'uid' => '1', 'progress' => 54}, - {'status' => 'deploying', 'uid' => '2', 'progress' => 54}]} - msg2 = Marshal.load(Marshal.dump(msg1)) - msg2['nodes'][1]['progress'] = 100 - msg2['nodes'][1]['status'] = 'ready' - updated_node = msg2['nodes'][1] - expected_msg = {'nodes' => [updated_node]} - - @up_reporter.expects(:report).with(msg1) - @up_reporter.expects(:report).with(expected_msg) - @reporter.report(msg1) - @reporter.report(msg2) - end - - it "raises exception if wrong key passed" do - @msg['nodes'][0]['ups'] = 'some_value' - lambda {@reporter.report(@msg)}.should raise_error - end - - it "adjusts progress to 100 if passed greater" do - input_msg = {'nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 120}]} - expected_msg = {'nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 100}]} - @up_reporter.expects(:report).with(expected_msg) - @reporter.report(input_msg) - end - - it "adjusts progress to 0 if passed less" do - input_msg = {'nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => -20}]} - expected_msg = {'nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 0}]} - @up_reporter.expects(:report).with(expected_msg) - @reporter.report(input_msg) - end - - it "adjusts progress to 100 if status provisioned and no progress given" do - input_msg = {'nodes' => [{'uid' => 1, 'status' => 'provisioned'}]} - expected_msg = {'nodes' => [{'uid' => 1, 'status' => 'provisioned', 'progress' => 100}]} - @up_reporter.expects(:report).with(expected_msg) - @reporter.report(input_msg) - end - - it "adjusts progress to 100 if status ready and no progress given" do - input_msg = {'nodes' => [{'uid' => 1, 'status' => 'ready'}]} - expected_msg = {'nodes' => [{'uid' => 1, 'status' => 'ready', 'progress' => 100}]} - @up_reporter.expects(:report).with(expected_msg) - @reporter.report(input_msg) - end - - it "adjusts progress to 100 if status provisioned with progress" do - input_msg = {'nodes' => [{'uid' => 1, 'status' => 'provisioned', 'progress' => 50}]} - expected_msg = {'nodes' => [{'uid' => 1, 'status' => 'provisioned', 'progress' => 100}]} - @up_reporter.expects(:report).with(expected_msg) - @reporter.report(input_msg) - end - - it "adjusts progress to 100 if status ready with progress" do - input_msg = {'nodes' => [{'uid' => 1, 'status' => 'ready', 'progress' => 50}]} - expected_msg = {'nodes' => [{'uid' => 1, 'status' => 'ready', 'progress' => 100}]} - @up_reporter.expects(:report).with(expected_msg) - @reporter.report(input_msg) - end - - it "does not report if node was in ready, and trying to set is deploying" do - msg1 = {'nodes' => [{'uid' => 1, 'status' => 'ready'}]} - msg2 = {'nodes' => [{'uid' => 2, 'status' => 'ready'}]} - msg3 = {'nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 100}]} - @up_reporter.expects(:report).with(msg1) - @up_reporter.expects(:report).with(msg2) - @up_reporter.expects(:report).never - @reporter.report(msg1) - @reporter.report(msg2) - 5.times { @reporter.report(msg3) } - end - - it "reports even not all keys provided" do - msg1 = {'nodes' => [{'uid' => 1, 'status' => 'deploying'}]} - msg2 = {'nodes' => [{'uid' => 2, 'status' => 'ready'}]} - @up_reporter.expects(:report).with(msg1) - @up_reporter.expects(:report).with(msg2) - @reporter.report(msg1) - @reporter.report(msg2) - end - - it "raises exception if progress provided and no status" do - msg1 = {'nodes' => [{'uid' => 1, 'status' => 'ready'}]} - msg2 = {'nodes' => [{'uid' => 1, 'progress' => 100}]} - @up_reporter.expects(:report).with(msg1) - @up_reporter.expects(:report).never - @reporter.report(msg1) - lambda {@reporter.report(msg2)}.should raise_error - end - - it "raises exception if status of node is not supported" do - msg1 = {'nodes' => [{'uid' => 1, 'status' => 'hah'}]} - @up_reporter.expects(:report).never - lambda {@reporter.report(msg1)}.should raise_error - end - - it "some other attrs are valid and passed" do - msg1 = {'nodes' => [{'uid' => 1, 'status' => 'deploying'}]} - msg2 = {'status' => 'error', 'error_type' => 'deploy', - 'nodes' => [{'uid' => 2, 'status' => 'error', 'message' => 'deploy'}]} - @up_reporter.expects(:report).with(msg1) - @up_reporter.expects(:report).with(msg2) - @reporter.report(msg1) - @reporter.report(msg2) - end - - it "reports if status is greater" do - msgs = [{'nodes' => [{'uid' => 1, 'status' => 'provisioned'}]}, - {'nodes' => [{'uid' => 1, 'status' => 'provisioning'}]}, - {'nodes' => [{'uid' => 1, 'status' => 'ready'}]}, - {'nodes' => [{'uid' => 1, 'status' => 'error'}]}] - @up_reporter.expects(:report).with(msgs[0]) - @up_reporter.expects(:report).with(msgs[2]) - @up_reporter.expects(:report).with(msgs[3]) - msgs.each {|msg| @reporter.report(msg)} - end - - it "doesn't update progress if it less than previous progress with same status" do - msgs = [{'nodes' => [{'uid' => 1, 'status' => 'provisioning', 'progress' => 50}]}, - {'nodes' => [{'uid' => 1, 'status' => 'provisioning', 'progress' => 10}]}, - {'nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 50}]}, - {'nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 10}]}] - @up_reporter.expects(:report).with(msgs[0]) - @up_reporter.expects(:report).with(msgs[2]) - @up_reporter.expects(:report).never - msgs.each {|msg| @reporter.report(msg)} - end - - it "updates progress if it less than previous progress when changing status" do - msgs = [{'nodes' => [{'uid' => 1, 'status' => 'provisioning', 'progress' => 50}]}, - {'nodes' => [{'uid' => 1, 'status' => 'provisioned'}]}, - {'nodes' => [{'uid' => 1, 'status' => 'provisioned', 'progress' => 100}]}, - {'nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 0}]}] - @up_reporter.expects(:report).with(msgs[0]) - @up_reporter.expects(:report).with(msgs[2]) - @up_reporter.expects(:report).with(msgs[3]) - @up_reporter.expects(:report).never - msgs.each {|msg| @reporter.report(msg)} - end - - it "doesn't forget previously reported attributes" do - msgs = [{'nodes' => [{'uid' => 1, 'status' => 'provisioning', 'progress' => 50}]}, - {'nodes' => [{'uid' => 1, 'status' => 'provisioning'}]}, - {'nodes' => [{'uid' => 1, 'status' => 'provisioning', 'key' => 'value'}]}, - {'nodes' => [{'uid' => 1, 'status' => 'provisioning', 'progress' => 0}]}, - ] - @up_reporter.expects(:report).with(msgs[0]) - @up_reporter.expects(:report).with(msgs[2]) - @up_reporter.expects(:report).never - msgs.each {|msg| @reporter.report(msg)} - end - - it "should able to report provision data" do - msg = { - 'nodes' => [{ - 'uid' => '1', - 'status' => 'error', - 'error_type' => 'provision', - 'role' => 'hook', - 'error_msg' => 'Node is not ready for deployment: mcollective has not answered' - }], - 'error' => 'Node is not ready for deployment' - } - @up_reporter.expects(:report).with(msg) - @reporter.report(msg) - end - - context 'multiroles' do - let(:up_reporter) { mock('up_reporter') } - let(:nodes) { [{'uid' => 1, 'role' => 'controller', 'fail_if_error' => true }, {'uid' => 1, 'role' => 'compute'}] } - before(:each) do - @reporter = ProxyReporter::DeploymentProxyReporter.new(up_reporter, nodes) - end - - it "should able to report provision data" do - msg = { - 'nodes' => [{ - 'uid' => '1', - 'status' => 'error', - 'error_type' => 'provision', - 'role' => 'hook', - 'error_msg' => 'Node is not ready for deployment: mcollective has not answered' - }], - 'error' => 'Node is not ready for deployment' - } - up_reporter.expects(:report).with(msg) - - @reporter.report(msg) - end - - it 'send final status only once for all node roles"' do - msgs = [ {'nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 0, 'role' => 'controller'}]}, - {'nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 50, 'role' => 'controller'}]}, - {'nodes' => [{'uid' => 1, 'status' => 'ready', 'progress' => 100, 'role' => 'controller'}]}, - {'nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 0, 'role' => 'compute'}]}, - {'nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 50, 'role' => 'compute'}]}, - {'nodes' => [{'uid' => 1, 'status' => 'ready', 'progress' => 100, 'role' => 'compute'}]} - ] - up_reporter.expects(:report).with(msgs[0]) - up_reporter.expects(:report).with('nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 25, 'role' => 'controller'}]) - up_reporter.expects(:report).with('nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 50, 'role' => 'controller'}]) - up_reporter.expects(:report).with('nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 50, 'role' => 'compute'}]) - up_reporter.expects(:report).with('nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 75, 'role' => 'compute'}]) - up_reporter.expects(:report).with('nodes' => [{'uid' => 1, 'status' => 'ready', 'progress' => 100, 'role' => 'compute'}]) - up_reporter.expects(:report).never - - msgs.each {|msg| @reporter.report(msg)} - end - - it 'should not affect to other multiroles status' do - two_nodes = nodes + [{'uid' => 2, 'role' => 'controller'}, {'uid' => 2, 'role' => 'compute'}] - reporter = ProxyReporter::DeploymentProxyReporter.new(up_reporter, two_nodes) - msgs = [ {'nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 0, 'role' => 'controller'}]}, - {'nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 50, 'role' => 'controller'}]}, - {'nodes' => [{'uid' => 1, 'status' => 'ready', 'progress' => 100, 'role' => 'controller'}]}, - {'nodes' => [{'uid' => 2, 'status' => 'deploying', 'progress' => 0, 'role' => 'compute'}]}, - {'nodes' => [{'uid' => 2, 'status' => 'deploying', 'progress' => 50, 'role' => 'compute'}]}, - {'nodes' => [{'uid' => 2, 'status' => 'ready', 'progress' => 100, 'role' => 'compute'}]}, - {'nodes' => [{'uid' => 2, 'status' => 'deploying', 'progress' => 0, 'role' => 'controller'}]}, - {'nodes' => [{'uid' => 2, 'status' => 'deploying', 'progress' => 50, 'role' => 'controller'}]}, - {'nodes' => [{'uid' => 2, 'status' => 'error', 'progress' => 100, 'role' => 'controller', 'error_type' => 'deploy'}]}, - {'nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 0, 'role' => 'compute'}]}, - {'nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 50, 'role' => 'compute'}]}, - {'nodes' => [{'uid' => 1, 'status' => 'ready', 'progress' => 100, 'role' => 'compute'}]} - ] - up_reporter.expects(:report).with(msgs[0]) - up_reporter.expects(:report).with('nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 25, 'role' => 'controller'}]) - up_reporter.expects(:report).with('nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 50, 'role' => 'controller'}]) - - up_reporter.expects(:report).with('nodes' => [{'uid' => 2, 'status' => 'deploying', 'progress' => 0, 'role' => 'compute'}]) - up_reporter.expects(:report).with('nodes' => [{'uid' => 2, 'status' => 'deploying', 'progress' => 25, 'role' => 'compute'}]) - up_reporter.expects(:report).with('nodes' => [{'uid' => 2, 'status' => 'deploying', 'progress' => 50, 'role' => 'compute'}]) - - up_reporter.expects(:report).with('nodes' => [{'uid' => 2, 'status' => 'deploying', 'progress' => 50, 'role' => 'controller'}]) - up_reporter.expects(:report).with('nodes' => [{'uid' => 2, 'status' => 'deploying', 'progress' => 75, 'role' => 'controller'}]) - up_reporter.expects(:report).with('nodes' => [{'uid' => 2, 'status' => 'error', 'progress' => 100, 'role' => 'controller', 'error_type' => 'deploy'}]) - - up_reporter.expects(:report).with('nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 50, 'role' => 'compute'}]) - up_reporter.expects(:report).with('nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 75, 'role' => 'compute'}]) - up_reporter.expects(:report).with('nodes' => [{'uid' => 1, 'status' => 'ready', 'progress' => 100, 'role' => 'compute'}]) - up_reporter.expects(:report).never - - msgs.each {|msg| reporter.report(msg)} - end - - it 'send final error status for node if any of non-critical roles get error deploy status' do - msgs = [ {'nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 0, 'role' => 'compute'}]}, - {'nodes' => [{'uid' => 1, 'status' => 'error', 'progress' => 50, 'role' => 'compute', 'error_type' => 'deploy'}]}, - {'nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 0, 'role' => 'controller'}]}, - {'nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 50, 'role' => 'controller'}]}, - {'nodes' => [{'uid' => 1, 'status' => 'ready', 'progress' => 100, 'role' => 'controller'}]} - ] - - up_reporter.expects(:report).with(msgs[0]) - up_reporter.expects(:report).with('nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 50, 'role' => 'compute'}]) - up_reporter.expects(:report).with('nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 50, 'role' => 'controller'}]) - up_reporter.expects(:report).with('nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 75, 'role' => 'controller'}]) - up_reporter.expects(:report).with('nodes' => [{'uid' => 1, 'status' => 'error', 'progress' => 100, 'role' => 'controller', 'error_type' => 'deploy'}]) - up_reporter.expects(:report).never - - msgs.each {|msg| @reporter.report(msg)} - end - - it 'send intermediate status without additional error field: error_type, but add it to final if need' do - msgs = [ {'nodes' => [{'uid' => 1, 'status' => 'error', 'progress' => 50, 'role' => 'compute', 'error_type' => 'deploy'}]}, - {'nodes' => [{'uid' => 1, 'status' => 'ready', 'progress' => 100, 'role' => 'controller'}]} - ] - - up_reporter.expects(:report).with('nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 50, 'role' => 'compute'}]) - up_reporter.expects(:report).with('nodes' => [{'uid' => 1, 'status' => 'error', 'progress' => 100, 'role' => 'controller', 'error_type' => 'deploy'}]) - up_reporter.expects(:report).never - - msgs.each {|msg| @reporter.report(msg)} - end - - it 'send final error status for critical node regardless of roles after it' do - msgs = [ {'nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 0, 'role' => 'controller'}]}, - {'nodes' => [{'uid' => 1, 'status' => 'error', 'role' => 'controller', 'error_type' => 'deploy'}]} - ] - - up_reporter.expects(:report).with('nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 0, 'role' => 'controller'}]) - up_reporter.expects(:report).with('nodes' => [{'uid' => 1, 'status' => 'error', 'progress' => 100, 'role' => 'controller', 'error_type' => 'deploy'}]) - up_reporter.expects(:report).never - - msgs.each {|msg| @reporter.report(msg)} - end - - it 'should not fail if no progress info was send' do - msgs = [ {'nodes' => [{'uid' => 1, 'status' => 'deploying', 'role' => 'controller'}]}, - {'nodes' => [{'uid' => 1, 'status' => 'ready', 'role' => 'controller'}]}, - {'nodes' => [{'uid' => 1, 'status' => 'deploying', 'role' => 'compute'}]}, - {'nodes' => [{'uid' => 1, 'status' => 'ready', 'role' => 'compute'}]} - ] - up_reporter.expects(:report).with('nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 0, 'role' => 'controller'}]) - up_reporter.expects(:report).with('nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 50, 'role' => 'controller'}]) - up_reporter.expects(:report).with('nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 50, 'role' => 'compute'}]) - up_reporter.expects(:report).with('nodes' => [{'uid' => 1, 'status' => 'ready', 'progress' => 100, 'role' => 'compute'}]) - up_reporter.expects(:report).never - - msgs.each {|msg| @reporter.report(msg)} - end - - it 'should not use multiroles calculation in case of hooks errors' do - msgs = [ {'nodes' => [{'uid' => 1, 'status' => 'deploying', 'role' => 'controller'}]}, - {'nodes' => [{'uid' => 1, 'status' => 'ready', 'role' => 'controller'}]}, - {'nodes' => [{'uid' => 1, 'status' => 'error', 'error_type' => 'deploy', 'role' => 'hook', 'hook' => nil}]} - ] - up_reporter.expects(:report).with('nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 0, 'role' => 'controller'}]) - up_reporter.expects(:report).with('nodes' => [{'uid' => 1, 'status' => 'deploying', 'progress' => 50, 'role' => 'controller'}]) - up_reporter.expects(:report).with('nodes' => [{'uid' => 1, 'status' => 'error', 'error_type' => 'deploy', 'role' => 'hook', 'hook' => nil}]) - up_reporter.expects(:report).never - - msgs.each {|msg| @reporter.report(msg)} - end - - end - - end -end diff --git a/spec/unit/rsyslogd_spec.rb b/spec/unit/rsyslogd_spec.rb deleted file mode 100644 index 97ce0c65..00000000 --- a/spec/unit/rsyslogd_spec.rb +++ /dev/null @@ -1,36 +0,0 @@ -# Copyright 2014 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require File.join(File.dirname(__FILE__), '../spec_helper') - -include Astute - -describe Astute::Rsyslogd do - include SpecHelpers - - before(:each) do - @ctx = mock('context') - @ctx.stubs(:task_id) - @master_ip = '127.0.0.1' - end - - it "should create mclient, execute_shell_command for master and send kill -HUP to rsyslogd" do - - rpcclient = mock_rpcclient() - cmd = "ssh root@#{@master_ip} 'pkill -HUP rsyslogd'" - rpcclient.expects(:execute).with(:cmd => cmd).once - - Astute::Rsyslogd.send_sighup(@ctx, @master_ip) - end -end diff --git a/spec/unit/task_cluster_spec.rb b/spec/unit/task_cluster_spec.rb deleted file mode 100644 index 54f4ed8a..00000000 --- a/spec/unit/task_cluster_spec.rb +++ /dev/null @@ -1,78 +0,0 @@ -# Copyright 2016 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -require File.join(File.dirname(__FILE__), '../spec_helper') - -describe Astute::TaskCluster do - include SpecHelpers - - subject { Astute::TaskCluster.new } - - let(:node) { Astute::TaskNode.new('node_name', subject) } - - before(:each) do - subject.stubs(:validate_fault_tolerance) - end - - describe "#hook_internal_post_node_poll" do - it 'should call gracefully_stop with node' do - subject.expects(:gracefully_stop).with(node) - subject.hook_internal_post_node_poll(node) - end - end - - describe "#noop_run" do - it 'should set cluster noop mode' do - subject.noop_run = true - expect(subject.noop_run).to eq true - end - end - - describe "#gracefully_stop" do - it 'should check if node should be stopped' do - subject.expects(:gracefully_stop?).returns(false) - subject.hook_internal_post_node_poll(node) - end - - it 'should check if node ready' do - subject.stop_condition { true } - node.expects(:ready?).returns(false) - subject.hook_internal_post_node_poll(node) - end - - it 'should set node status as skipped if stopped' do - subject.stop_condition { true } - node.stubs(:ready?).returns(true) - node.stubs(:report_node_status) - - node.expects(:set_status_skipped).once - subject.hook_internal_post_node_poll(node) - end - - it 'should report new node status if stopped' do - subject.stop_condition { true } - node.stubs(:ready?).returns(true) - node.stubs(:set_status_skipped).once - - node.expects(:report_node_status) - subject.hook_internal_post_node_poll(node) - end - end - - it "should able to setup stop_condition" do - expect(subject).to respond_to(:stop_condition) - end - -end diff --git a/spec/unit/task_deployment_spec.rb b/spec/unit/task_deployment_spec.rb deleted file mode 100644 index 4b360d91..00000000 --- a/spec/unit/task_deployment_spec.rb +++ /dev/null @@ -1,542 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -require File.join(File.dirname(__FILE__), '../spec_helper') - -describe Astute::TaskDeployment do - include SpecHelpers - - let(:ctx) do - ctx = mock('context') - ctx.stubs(:task_id) - ctx - end - - let(:tasks_metadata) do - { - 'fault_tolerance_groups' =>[ - {"fault_tolerance"=>0, "name"=>"primary-controller", "node_ids"=>["1"]}, - {"fault_tolerance"=>1, "name"=>"controller", "node_ids"=>[]}, - {"fault_tolerance"=>0, "name"=>"cinder", "node_ids"=>[]}, - {"fault_tolerance"=>0, "name"=>"cinder-block-device", "node_ids"=>[]}, - {"fault_tolerance"=>1, "name"=>"cinder-vmware", "node_ids"=>[]}, - {"fault_tolerance"=>0, "name"=>"compute", "node_ids"=>["3", "2"]}, - {"fault_tolerance"=>1, "name"=>"compute-vmware", "node_ids"=>[]}, - {"fault_tolerance"=>1, "name"=>"mongo", "node_ids"=>[]}, - {"fault_tolerance"=>1, "name"=>"primary-mongo", "node_ids"=>[]}, - {"fault_tolerance"=>1, - "name"=>"ceph-osd", - "node_ids"=>["3", "2", "5", "4"]}, - {"fault_tolerance"=>1, "name"=>"base-os", "node_ids"=>[]}, - {"fault_tolerance"=>1, "name"=>"virt", "node_ids"=>[]}, - {"fault_tolerance"=>1, "name"=>"ironic", "node_ids"=>[]} - ] - } - end - - let(:tasks_graph) do - {"1"=> - [{ - "type"=>"noop", - "fail_on_error"=>true, - "required_for"=>[], - "requires"=> [], - "id"=>"ironic_post_swift_key", - "parameters"=>{}, - }], - "null"=> [{ - "skipped"=>true, - "type"=>"skipped", - "fail_on_error"=>false, - "required_for"=>[], - "requires"=>[], - "parameters"=>{}, - "id"=>"post_deployment_start"}] - } - end - - let(:tasks_graph_2) do - {"master"=> - [{ - "type"=>"noop", - "fail_on_error"=>true, - "required_for"=>[], - "requires"=> [], - "id"=>"ironic_post_swift_key", - "parameters"=>{}, - }], - "null"=> [] - } - end - - let(:tasks_graph_3) do - { - "null" => - [ - {"id" => "sync_task", - "requires" =>[] - } - ], - "1" => - [ - {"id" => "14", "requires" => [{"node_id" => nil, "name" => "sync_task"}], "required_for" => [{"name" => 15, "node_id" => "1"}]}, - {"id" => "15", "requires" => [{"node_id" => "2", "name" => "6"}]}, - {"id" => "0", "required_for" => [{"name" => 1, "node_id" => "1"}]}, - {"id" => "1", "required_for" => [{"name" => 2, "node_id" => "1"}, {"name" => 3, "node_id" => "1"}]}, - {"id" => "2", "required_for" => [{"name" => 4, "node_id" => "1"}, {"name" => 5, "node_id" => "1"}]}, - {"id" => "3", "required_for" => [{"name" => 6, "node_id" => "1"}, {"name" => 7, "node_id" => "1"}]}, - {"id" => "4", "required_for" => [{"name" => 8, "node_id" => "1"}]}, - {"id" => "5", "required_for" => [{"name" => 10, "node_id" => "1"}]}, - {"id" => "6", "required_for" => [{"name" => 11, "node_id" => "1"}]}, - {"id" => "7", "required_for" => [{"name" => 12, "node_id" => "1"}]}, - {"id" => "8", "required_for" => [{"name" => 9, "node_id" => "1"}]}, - {"id" => "9"}, - {"id" => "10", "required_for" => [{"name" => 9, "node_id" => "1"}]}, - {"id" => "11", "required_for" => [{"name" => 13, "node_id" => "1"}]}, - {"id" => "12", "required_for" => [{"name" => 13, "node_id" => "1"}]}, - {"id" => "13", "required_for" => [{"name" => 9, "node_id" => "1"}]}], - "2" => [ - {"id" => "0", "required_for" => [{"name" => 1, "node_id" => "2"}, - {"name" => 3, "node_id" => "2"}]}, - {"id" => "1", "required_for" => [{"name" => 2, "node_id" => "2"}]}, - {"id" => "2"}, - {"id" => "3", "required_for" => [{"name" => 4, "node_id" => "2"}]}, - {"id" => "4", "requires" => [{"node_id" => 1, "name" => "3"}], "required_for" => [{"name" => 5, "node_id" => "2"}]}, - {"id" => "5", "requires" => [{"node_id" => 1, "name" => "13"}], "required_for" => [{"name" => 7, "node_id" => "2"}]}, - {"id" => "6", "requires" => [{"node_id" => nil, "name" => "sync_task"}], "required_for" => [{"name" => 8, "node_id" => "2"}]}, - {"id" => "7"}, - {"id" => "8"} - ] - } - end - - - let(:tasks_directory) do - {"ironic_post_swift_key"=>{ - "parameters"=>{ - "retries"=>3, - "cmd"=>"sh generate_keys.sh -i 1 -s 'ceph' -p /var/lib/fuel/keys/", - "cwd"=>"/", - "timeout"=>180, - "interval"=>1}, - "type"=>"shell", - "id"=>"ironic_post_swift_key"}, - "post_deployment_start"=>{ - "parameters"=>{} - } - } - end - - let(:task_deployment) { Astute::TaskDeployment.new(ctx) } - - describe '#deploy' do - it 'should run deploy' do - task_deployment.stubs(:detect_offline_nodes).returns([]) - task_deployment.stubs(:write_graph_to_file) - ctx.stubs(:report) - - Astute::TaskCluster.any_instance.expects(:run).returns({:success => true}) - task_deployment.deploy( - tasks_metadata: tasks_metadata, - tasks_graph: tasks_graph, - tasks_directory: tasks_directory) - end - - it 'should not raise error if deployment info not provided' do - task_deployment.stubs(:detect_offline_nodes).returns([]) - task_deployment.stubs(:write_graph_to_file) - ctx.stubs(:report) - - Astute::TaskCluster.any_instance.expects(:run).returns({:success => true}) - expect{task_deployment.deploy( - tasks_graph: tasks_graph, - tasks_directory: tasks_directory)}.to_not raise_error - end - - it 'should raise error if tasks graph not provided' do - expect{task_deployment.deploy( - tasks_directory: tasks_directory)}.to raise_error( - Astute::DeploymentEngineError, - "Deployment graph was not provided!" - ) - end - - it 'should support virtual node' do - d_t = task_deployment.send(:support_virtual_node, tasks_graph) - expect(d_t.keys).to include 'virtual_sync_node' - expect(d_t.keys).not_to include 'null' - end - - it 'should support critical nodes' do - critical_nodes = task_deployment.send( - :critical_node_uids, - tasks_metadata['fault_tolerance_groups'] - ) - expect(critical_nodes).to include '1' - expect(critical_nodes).to include '2' - expect(critical_nodes).to include '3' - expect(critical_nodes.size).to eql(3) - end - - it 'should support default zero tolerance policy for error on nodes' do - cluster = mock('cluster') - cluster.expects(:fault_tolerance_groups=).with( - [ - {'fault_tolerance'=>0, 'name'=>'primary-controller', 'node_ids'=>['1']}, - {'fault_tolerance'=>1, 'name'=>'ceph', 'node_ids'=>['1', '3']}, - {'fault_tolerance'=>1, 'name'=>'ignored_group', 'node_ids'=>[]}, - {'fault_tolerance'=>0, 'name'=>'zero_tolerance_as_default_for_nodes', 'node_ids'=>['2']} - ] - ) - - task_deployment.send( - :setup_fault_tolerance_behavior, - [ - {'fault_tolerance'=>0, 'name'=>'primary-controller', 'node_ids'=>['1']}, - {'fault_tolerance'=>1, 'name'=>'ceph', 'node_ids'=>['1', '3']}, - {'fault_tolerance'=>1, 'name'=>'ignored_group', 'node_ids'=>[]} - ], - cluster, - ['1', '2', '3', 'virtual_sync_node'] - ) - end - - it 'should fail offline nodes' do - Astute::TaskPreDeploymentActions.any_instance.stubs(:process) - task_deployment.stubs(:write_graph_to_file) - ctx.stubs(:report) - - task_deployment.expects(:detect_offline_nodes).returns([]) - - Astute::TaskCluster.any_instance.stubs(:run).returns({:success => true}) - task_deployment.deploy( - tasks_metadata: tasks_metadata, - tasks_graph: tasks_graph, - tasks_directory: tasks_directory) - end - - it 'should not fail if there are no nodes to check for offline nodes' do - Astute::TaskPreDeploymentActions.any_instance.stubs(:process) - task_deployment.stubs(:write_graph_to_file) - ctx.stubs(:report) - - task_deployment.expects(:detect_offline_nodes).returns([]) - - Astute::TaskCluster.any_instance.stubs(:run).returns({:success => true}) - task_deployment.deploy( - tasks_metadata: tasks_metadata, - tasks_graph: tasks_graph_2, - tasks_directory: tasks_directory) - end - - it 'should setup stop condition' do - Astute::TaskPreDeploymentActions.any_instance.stubs(:process) - task_deployment.stubs(:write_graph_to_file) - ctx.stubs(:report) - task_deployment.stubs(:detect_offline_nodes).returns([]) - Astute::TaskCluster.any_instance.stubs(:run).returns({:success => true}) - - Astute::TaskCluster.any_instance.expects(:stop_condition) - task_deployment.deploy( - tasks_metadata: tasks_metadata, - tasks_graph: tasks_graph, - tasks_directory: tasks_directory) - end - - context 'task concurrency' do - let(:task_concurrency) { mock('task_concurrency') } - - before(:each) do - task_deployment.stubs(:write_graph_to_file) - ctx.stubs(:report) - task_deployment.stubs(:detect_offline_nodes).returns([]) - Astute::TaskCluster.any_instance.stubs(:run).returns({:success => true}) - Deployment::Concurrency::Counter.any_instance - .stubs(:maximum=).with( - Astute.config.max_nodes_per_call) - end - - it 'should setup 0 if no task concurrency setup' do - Deployment::Concurrency::Counter.any_instance.expects(:maximum=).with(0).times(5) - - task_deployment.deploy( - tasks_metadata: tasks_metadata, - tasks_graph: tasks_graph, - tasks_directory: tasks_directory) - end - - it 'it should setup 1 if task concurrency type one_by_one' do - tasks_graph['1'].first['parameters']['strategy'] = - {'type' => 'one_by_one'} - Deployment::Concurrency::Counter.any_instance.expects(:maximum=) - .with(0).times(4) - Deployment::Concurrency::Counter.any_instance.expects(:maximum=) - .with(1) - - task_deployment.deploy( - tasks_metadata: tasks_metadata, - tasks_graph: tasks_graph, - tasks_directory: tasks_directory) - end - - it 'should setup task concurrency as amount if type is parallel' do - tasks_graph['1'].first['parameters']['strategy'] = - {'type' => 'parallel', 'amount' => 7} - Deployment::Concurrency::Counter.any_instance.expects(:maximum=) - .with(0).times(4) - Deployment::Concurrency::Counter.any_instance.expects(:maximum=) - .with(7) - - task_deployment.deploy( - tasks_metadata: tasks_metadata, - tasks_graph: tasks_graph, - tasks_directory: tasks_directory) - end - - it 'should setup 0 if task strategy is parallel and amount do not set' do - tasks_graph['1'].first['parameters']['strategy'] = {'type' => 'parallel'} - Deployment::Concurrency::Counter.any_instance.expects(:maximum=) - .with(0).times(5) - - task_deployment.deploy( - tasks_metadata: tasks_metadata, - tasks_graph: tasks_graph, - tasks_directory: tasks_directory) - end - - it 'should raise error if amount is non-positive integer and type is parallel' do - tasks_graph['1'].first['parameters']['strategy'] = - {'type' => 'parallel', 'amount' => -4} - Deployment::Concurrency::Counter.any_instance.expects(:maximum=) - .with(0).times(2) - - expect {task_deployment.deploy( - tasks_metadata: tasks_metadata, - tasks_graph: tasks_graph, - tasks_directory: tasks_directory)}.to raise_error( - Astute::DeploymentEngineError, /expect only non-negative integer, but got -4./ - - ) - end - end - - context 'dry_run' do - it 'should not run actual deployment if dry_run is set to True' do - task_deployment.stubs(:detect_offline_nodes).returns([]) - task_deployment.stubs(:write_graph_to_file) - ctx.stubs(:report) - - Astute::TaskCluster.any_instance.expects(:run).never - - task_deployment.deploy( - tasks_metadata: tasks_metadata, - tasks_graph: tasks_graph, - tasks_directory: tasks_directory, - dry_run: true) - end - end - - context 'noop_run' do - it 'should run noop deployment without error states' do - task_deployment.stubs(:detect_offline_nodes).returns([]) - task_deployment.stubs(:write_graph_to_file) - ctx.stubs(:report) - - Astute::TaskCluster.any_instance.expects(:run).returns({:success => true}) - task_deployment.deploy( - tasks_metadata: tasks_metadata, - tasks_graph: tasks_graph, - tasks_directory: tasks_directory, - noop_run: true) - end - end - - context 'config' do - around(:each) do |example| - max_nodes_old_value = Astute.config.max_nodes_per_call - example.run - Astute.config.max_nodes_per_call = max_nodes_old_value - end - - it 'should setup max nodes per call using config' do - Astute.config.max_nodes_per_call = 33 - - task_deployment.stubs(:detect_offline_nodes).returns([]) - task_deployment.stubs(:write_graph_to_file) - ctx.stubs(:report) - - Astute::TaskCluster.any_instance - .stubs(:run) - .returns({:success => true}) - - node_concurrency = mock('node_concurrency') - Astute::TaskCluster.any_instance - .expects(:node_concurrency).returns(node_concurrency) - - node_concurrency.expects(:maximum=).with(Astute.config.max_nodes_per_call) - - task_deployment.deploy( - tasks_metadata: tasks_metadata, - tasks_graph: tasks_graph, - tasks_directory: tasks_directory) - end - end - - context 'subgraphs' do - it 'should call subgraph set up if subgraphs are present' do - task_deployment.stubs(:detect_offline_nodes).returns([]) - task_deployment.stubs(:write_graph_to_file) - Astute::TaskCluster.any_instance.expects(:run).returns({:success => true}) - - - ctx.stubs(:report) - Astute::TaskCluster.any_instance.expects(:setup_start_end).once - - subgraphs = [ - { - 'start' => [ - "3", - ], - 'end' => [ - "9" - ] - }, - { - 'start' => [ "4" ] - } - ] - tasks_metadata.merge!("subgraphs" => subgraphs) - task_deployment.deploy( - tasks_metadata: tasks_metadata, - tasks_graph: tasks_graph_3, - tasks_directory: tasks_directory) - end - it 'should not call subgraph setup if subgraphs are not present' do - task_deployment.stubs(:detect_offline_nodes).returns([]) - task_deployment.stubs(:write_graph_to_file) - ctx.stubs(:report) - Astute::TaskCluster.any_instance.expects(:run).returns({:success => true}) - Astute::TaskCluster.any_instance.expects(:setup_start_end).never - - subgraphs = [ - { - 'start' => [], - 'end' => nil - }, - {'start'=>['task99']} - ] - tasks_metadata.merge!("subgraphs" => subgraphs) - task_deployment.deploy( - tasks_metadata: tasks_metadata, - tasks_graph: tasks_graph, - tasks_directory: tasks_directory) - end - end - - - - context 'should report final status' do - - it 'succeed status and 100 progress for all nodes' do - Astute::TaskCluster.any_instance.stubs(:run).returns({:success => true}) - task_deployment.stubs(:detect_offline_nodes).returns([]) - task_deployment.stubs(:write_graph_to_file) - ctx.expects(:report).with('nodes' => [ - {'uid' => '1', 'progress' => 100}, - {'uid' => 'virtual_sync_node', 'progress' => 100}] - ) - ctx.expects(:report).with({'status' => 'ready', 'progress' => 100}) - - task_deployment.deploy( - tasks_metadata: tasks_metadata, - tasks_graph: tasks_graph, - tasks_directory: tasks_directory) - end - - it 'failed status and 100 progress for all nodes' do - failed_node = mock('node') - failed_task = mock('task') - - Astute::TaskCluster.any_instance.stubs(:run).returns({ - :success => false, - :failed_nodes => [failed_node], - :failed_tasks => [failed_task], - :status => 'Failed because of'}) - task_deployment.stubs(:detect_offline_nodes).returns([]) - task_deployment.stubs(:write_graph_to_file) - ctx.expects(:report).with('nodes' => [ - {'uid' => '1', 'progress' => 100}, - {'uid' => 'virtual_sync_node', 'progress' => 100}] - ) - ctx.expects(:report).with({ - 'status' => 'error', - 'progress' => 100, - 'error' => 'Failed because of'}) - - task_deployment.deploy( - tasks_metadata: tasks_metadata, - tasks_graph: tasks_graph, - tasks_directory: tasks_directory) - end - end - - context 'graph file' do - - around(:each) do |example| - old_value = Astute.config.enable_graph_file - example.run - Astute.config.enable_graph_file = old_value - end - - it 'should write if disable' do - Astute.config.enable_graph_file = false - - task_deployment.stubs(:detect_offline_nodes).returns([]) - ctx.stubs(:report) - Astute::TaskCluster.any_instance.stubs(:run).returns({:success => true}) - - file_handle = mock - file_handle.expects(:write).with(regexp_matches(/digraph/)).never - File.expects(:open).with("#{Astute.config.graph_dot_dir}/graph-#{ctx.task_id}.dot", 'w') - .yields(file_handle).never - - task_deployment.deploy( - tasks_metadata: tasks_metadata, - tasks_graph: tasks_graph, - tasks_directory: tasks_directory) - end - - it 'should write graph if enable' do - Astute.config.enable_graph_file = true - - task_deployment.stubs(:detect_offline_nodes).returns([]) - ctx.stubs(:report) - Astute::TaskCluster.any_instance.stubs(:run).returns({:success => true}) - - file_handle = mock - file_handle.expects(:write).with(regexp_matches(/digraph/)).once - File.expects(:open).with("#{Astute.config.graph_dot_dir}/graph-#{ctx.task_id}.dot", 'w') - .yields(file_handle).once - - task_deployment.deploy( - tasks_metadata: tasks_metadata, - tasks_graph: tasks_graph, - tasks_directory: tasks_directory) - end - end # 'graph file' - - end - -end diff --git a/spec/unit/task_node_spec.rb b/spec/unit/task_node_spec.rb deleted file mode 100644 index be0bc257..00000000 --- a/spec/unit/task_node_spec.rb +++ /dev/null @@ -1,461 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -require File.join(File.dirname(__FILE__), '../spec_helper') - -describe Astute::TaskNode do - include SpecHelpers - - let(:cluster) do - Astute::TaskCluster.new - end - - let(:ctx) do - ctx = mock('context') - ctx.stubs(:task_id) - ctx.stubs(:report) - ctx - end - - let(:task_node) do - node = Astute::TaskNode.new('node_id', cluster) - node.context = ctx - node - end - - let(:task) do - task_node.graph.create_task( - task_data['id'], - task_data.merge({'node_id' => 'node_id'}) - ) - end - - context '#run' do - - let(:task_data) do - { - "parameters" => { - "puppet_modules" => "/etc/puppet/modules", - "puppet_manifest" => "/etc/puppet/modules/osnailyfacter/modular" \ - "/openstack-haproxy/openstack-haproxy-mysqld.pp", - "timeout" => 300, - "cwd" => "/" - }, - "type" => "puppet", - "fail_on_error" => true, - "required_for" => [], - "requires" => [], - "id" => "openstack-haproxy-mysqld", - } - end - - it 'should run task' do - Astute::Puppet.any_instance.expects(:run) - task_node.run(task) - end - - it 'should run noop puppet task' do - cluster_new = Astute::TaskCluster.new - cluster_new.uid = 'test2' - cluster_new.noop_run = true - task_node_new = Astute::TaskNode.new('node_id', cluster_new) - task_node_new.context = ctx - task_node_new.graph.create_task( - task_data['id'], - task_data.merge({'node_id' => 'node_id'}) - ) - Astute::NoopPuppet.any_instance.expects(:run) - task_node_new.run(task) - end - - it 'should mark node as busy' do - Astute::Puppet.any_instance.stubs(:run) - task_node.run(task) - expect(task_node.status).to eql(:busy) - end - - it 'should mark task as running' do - Astute::Puppet.any_instance.stubs(:run) - task_node.run(task) - expect(task.status).to eql(:running) - end - - it 'should report about task as running' do - Astute::Puppet.any_instance.stubs(:run) - ctx.expects(:report).with('nodes' => [{ - 'uid' => 'node_id', - 'progress' => 0, - 'deployment_graph_task_name' => 'openstack-haproxy-mysqld', - 'task_status' => 'running', - 'summary' => {} - }]) - task_node.run(task) - end - - context 'should not report about task as running' do - let(:task_data_wo_type) do - { - "type" => "noop", - "fail_on_error" => true, - "required_for" => [], - "requires" => [], - "id" => "openstack-haproxy" - } - end - - shared_examples 'disable running report' do - it 'task should not report running status' do - ctx.unstub(:report) - ctx.expects(:report).never - task_node.run(task) - end - end - - context 'noop' do - let(:task_data) { task_data_wo_type.merge!('type'=> 'noop') } - it_behaves_like 'disable running report' - end - - context 'stage' do - let(:task_data) { task_data_wo_type.merge!('type'=> 'stage') } - it_behaves_like 'disable running report' - end - - context 'skipped' do - let(:task_data) { task_data_wo_type.merge!('type'=> 'skipped') } - it_behaves_like 'disable running report' - end - end - - context 'support different task type' do - - let(:task_data) do - { - "parameters" => {}, - "type" => "noop", - "fail_on_error" => false, - "required_for" => [], - "requires" => [], - "id" => "test-task", - } - end - - it 'shell' do - task_data['type'] = "shell" - Astute::Shell.any_instance.expects(:run) - task_node.run(task) - end - - it 'puppet' do - task_data['type'] = "puppet" - Astute::Puppet.any_instance.expects(:run) - task_node.run(task) - end - - it 'sync' do - task_data['type'] = "sync" - Astute::Sync.any_instance.expects(:run) - task_node.run(task) - end - - it 'cobbler_sync' do - task_data['type'] = "cobbler_sync" - Astute::CobblerSync.any_instance.expects(:run) - task_node.run(task) - end - - it 'noop' do - task_data['type'] = "noop" - Astute::Noop.any_instance.expects(:run) - task_node.run(task) - end - - it 'skipped' do - task_data['type'] = "skipped" - Astute::Skipped.any_instance.expects(:run) - task_node.run(task) - end - - it 'stage' do - task_data['type'] = "stage" - Astute::Stage.any_instance.expects(:run) - task_node.run(task) - end - - it 'reboot' do - task_data['type'] = "reboot" - Astute::Reboot.any_instance.expects(:run) - task_node.run(task) - end - - it 'upload_file' do - task_data['type'] = "upload_file" - Astute::UploadFile.any_instance.expects(:run) - task_node.run(task) - end - - it 'upload_files' do - task_data['type'] = "upload_files" - task_data['parameters']['nodes'] = [] - Astute::UploadFiles.any_instance.expects(:run) - task_node.run(task) - end - - it 'copy_files' do - task_data['type'] = "copy_files" - task_data['parameters']['files'] = [] - Astute::CopyFiles.any_instance.expects(:run) - task_node.run(task) - end - - it 'unkown type' do - task_data['type'] = "unknown" - expect{task_node.run(task)}.to raise_error( - Astute::TaskValidationError, - "Unknown task type 'unknown'. Detailed: uninitialized constant Astute::Unknown") - end - end # support task type - end - - - context '#poll' do - - context 'not busy' do - it 'should not raise any error' do - expect{task_node.poll}.not_to raise_error - end - - it 'should not change node status' do - old_status = task_node.status - task_node.poll - expect(task_node.status).to eql(old_status) - end - end - - context 'busy' do - let(:task_data) do - { - "parameters" => {}, - "type" => "puppet", - "fail_on_error" => false, - "required_for" => [], - "requires" => [], - "id" => "test-task", - } - end - - before(:each) do - Astute::Puppet.any_instance.stubs(:run) - end - - context 'mark failed' do - it 'if task failed' do - Astute::Puppet.any_instance.stubs(:status).returns(:failed) - ctx.stubs(:report) - task_node.run(task) - task_node.poll - expect(task_node.status).to eql(:failed) - end - end - - context 'mark online' do - it 'if task successful' do - Astute::Puppet.any_instance.stubs(:status).returns(:successful) - ctx.stubs(:report) - task_node.run(task) - task_node.poll - expect(task_node.status).to eql(:online) - end - - context "skipped" do - let(:task_data) do - { - "parameters" => {}, - "type" => "noop", - "fail_on_error" => false, - "required_for" => [], - "requires" => [], - "id" => "test-task", - } - end - - it 'if task skipped' do - ctx.stubs(:report) - task_node.run(task) - task_node.poll - expect(task_node.status).to eql(:online) - end - end - end - - it 'should report task status if task running' do - Astute::Puppet.any_instance.expects(:status).returns(:running) - task_node.run(task) - ctx.expects(:report).with({ - 'nodes' => [{ - 'uid' => 'node_id', - 'deployment_graph_task_name' => task.name, - 'task_status' => 'running' - }] - }) - task_node.poll - end - - it 'should report ready if task successful and no more task' do - cluster.node_statuses_transitions['successful'] = { - 'status' => 'ready' - } - - Astute::Puppet.any_instance.expects(:status).returns(:successful) - task_node.run(task) - ctx.expects(:report).with({ - 'nodes' => [{ - 'uid' => 'node_id', - 'status' => 'ready', - 'deployment_graph_task_name' => task.name, - 'summary' => {}, - 'task_status' => 'successful', - 'progress' => 100}] - }) - task_node.poll - end - - context 'skipped' do - let(:task_data) do - { - "parameters" => {}, - "type" => "noop", - "fail_on_error" => false, - "required_for" => [], - "requires" => [], - "id" => "test-task", - } - end - - it 'should report ready if task skipped and no more task' do - cluster.node_statuses_transitions['successful'] = { - 'status' => 'ready' - } - task_node.run(task) - ctx.expects(:report).with({ - 'nodes' => [{ - 'uid' => 'node_id', - 'deployment_graph_task_name' => task.name, - 'status' => 'ready', - 'summary' => {}, - 'task_status' => 'skipped', - 'progress' => 100}] - }) - task_node.poll - end - - it 'should report deploy progress if task skipped and another tasks exists' do - task_node.graph.create_task( - 'second_task', - task_data.merge({'node_id' => 'node_id'}) - ) - - task_node.run(task) - ctx.expects(:report).with({ - 'nodes' => [{ - 'uid' => 'node_id', - 'deployment_graph_task_name' => task.name, - 'summary' => {}, - 'task_status' => 'skipped', - 'progress' => 50}] - }) - task_node.poll - end - - it 'should report stopped if node skipped' do - cluster.node_statuses_transitions['stopped'] = { - 'status' => 'stopped' - } - cluster.node_statuses_transitions['successful'] = { - 'status' => 'ready' - } - - task_node.set_status_skipped - task_node.stubs(:finished?).returns(true) - task_node.stubs(:successful?).returns(true) - - ctx.expects(:report).with({ - 'nodes' => [{ - 'uid' => 'node_id', - 'status' => 'stopped', - 'progress' => 100}] - }) - task_node.report_node_status - end - end - - it 'should report error if task failed and no more task' do - cluster.node_statuses_transitions['failed'] = { - 'status' => 'error', - 'error_type' => 'deploy' - } - - Astute::Puppet.any_instance.expects(:status).returns(:failed) - - task_node.run(task) - ctx.expects(:report).with({ - 'nodes' => [{ - 'uid' => 'node_id', - 'status' => 'error', - 'deployment_graph_task_name' => task.name, - 'summary' => {}, - 'task_status' => 'failed', - 'error_type' => 'deploy', - 'error_msg' => "Task #{task.name} failed on node node_id", - 'progress' => 100}] - }) - task_node.poll - end - - it 'should report deploy progress if task successful and another tasks exists' do - Astute::Puppet.any_instance.expects(:status).returns(:successful) - task_node.graph.create_task( - 'second_task', - task_data.merge({'node_id' => 'node_id'}) - ) - task_node.run(task) - ctx.expects(:report).with({ - 'nodes' => [{ - 'uid' => 'node_id', - 'deployment_graph_task_name' => task.name, - 'summary' => {}, - 'task_status' => 'successful', - 'progress' => 50}] - }) - task_node.poll - end - - it 'should not report deploy progress if task failed and another tasks exists' do - Astute::Puppet.any_instance.expects(:status).returns(:failed) - task_node.graph.create_task( - 'second_task', - task_data.merge({'node_id' => 'node_id'}) - ) - - task_node.run(task) - ctx.expects(:report).never - task_node.poll - end - end - - end - - -end diff --git a/spec/unit/task_proxy_reporter_spec.rb b/spec/unit/task_proxy_reporter_spec.rb deleted file mode 100644 index 8684147f..00000000 --- a/spec/unit/task_proxy_reporter_spec.rb +++ /dev/null @@ -1,424 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -require File.join(File.dirname(__FILE__), '../spec_helper') - -include Astute - -describe "TaskProxyReporter" do - context "Instance of ProxyReporter class" do - let(:msg) do - {'nodes' => [{ - 'status' => 'ready', - 'uid' => '1', - 'deployment_graph_task_name' => 'test_1', - 'task_status' => 'successful'} - ] - } - end - - let(:expected_msg) do - {'nodes' => [{ - 'status' => 'ready', - 'uid' => '1', - 'deployment_graph_task_name' => 'test_1', - 'task_status' => 'ready'}] - } - end - - let(:msg_pr) do - {'nodes' => [ - msg['nodes'][0], - { - 'status' => 'deploying', - 'uid' => '2', - 'progress' => 54, - 'task_status' => 'running', - 'deployment_graph_task_name' => 'test_1' - } - ]} - end - - let(:up_reporter) { mock('up_reporter') } - let(:reporter) { ProxyReporter::TaskProxyReporter.new(up_reporter) } - - it "reports first-come data" do - up_reporter.expects(:report).with(expected_msg) - reporter.report(msg) - end - - it "does not report the same message" do - up_reporter.expects(:report).with(expected_msg).once - 5.times { reporter.report(msg) } - end - - it "reports if progress value same, but deployment graph task name different" do - msg1 = {'nodes' => [{'status' => 'deploying', 'uid' => '1', 'progress' => 54, - 'deployment_graph_task_name' => 'test_1', 'task_status' => 'running'}]} - msg2 = {'nodes' => [{'status' => 'deploying', 'uid' => '1', 'progress' => 54, - 'deployment_graph_task_name' => 'test_2', 'task_status' => 'running'}]} - - up_reporter.expects(:report).with(msg1) - up_reporter.expects(:report).with(msg2) - reporter.report(msg1) - reporter.report(msg2) - end - - it "should report and process nodes with integer or master uid or virtual node" do - input_msg = {'nodes' => [ - {'uid' => 'master', 'status' => 'deploying', 'progress' => 10, - 'deployment_graph_task_name' => 'test_2', 'task_status' => 'running'}, - {'uid' => 'virtual_sync_node', 'status' => 'deploying', 'progress' => 10, - 'deployment_graph_task_name' => 'test_2', 'task_status' => 'running'}, - {'uid' => '0', 'status' => 'deploying', 'progress' => 10, - 'deployment_graph_task_name' => 'test_2', 'task_status' => 'running'}, - {'uid' => 'unknown', 'status' => 'deploying', 'progress' => 10, - 'deployment_graph_task_name' => 'test_2', 'task_status' => 'running'} - ]} - - expected_msg = {'nodes' => [ - {'uid' => 'master', - 'status' => 'deploying', - 'progress' => 10, - 'deployment_graph_task_name' => 'test_2', - 'task_status' => 'running'}, - {'uid' => nil, - 'status' => 'deploying', - 'progress' => 10, - 'deployment_graph_task_name' => 'test_2', - 'task_status' => 'running'}, - {'uid' => '0', - 'status' => 'deploying', - 'progress' => 10, - 'deployment_graph_task_name' => 'test_2', - 'task_status' => 'running'}]} - up_reporter.expects(:report).with(expected_msg).once - reporter.report(input_msg) - end - - it "adjusts progress to 100 if passed greater" do - input_msg = {'nodes' => [{'uid' => 1, - 'status' => 'deploying', - 'progress' => 120, - 'deployment_graph_task_name' => 'test_2', - 'task_status' => 'running'}]} - expected_msg = {'nodes' => [{'uid' => 1, - 'status' => 'deploying', - 'progress' => 100, - 'deployment_graph_task_name' => 'test_2', - 'task_status' => 'running'}]} - up_reporter.expects(:report).with(expected_msg) - reporter.report(input_msg) - end - - it "adjusts progress to 0 if passed less" do - input_msg = {'nodes' => [{'uid' => 1, - 'status' => 'deploying', - 'progress' => -20, - 'deployment_graph_task_name' => 'test_2', - 'task_status' => 'running'}]} - expected_msg = {'nodes' => [{'uid' => 1, - 'status' => 'deploying', - 'progress' => 0, - 'deployment_graph_task_name' => 'test_2', - 'task_status' => 'running'}]} - up_reporter.expects(:report).with(expected_msg) - reporter.report(input_msg) - end - - it "adjusts progress to 100 if status error and no progress given" do - input_msg = {'nodes' => [{'uid' => 1, - 'status' => 'error', - 'deployment_graph_task_name' => 'test_2', - 'task_status' => 'failed'}]} - expected_msg = {'nodes' => [{'uid' => 1, - 'status' => 'error', - 'progress' => 100, - 'deployment_graph_task_name' => 'test_2', - 'task_status' => 'error'}]} - up_reporter.expects(:report).with(expected_msg) - reporter.report(input_msg) - end - - it "adjusts progress to 100 if status stopped and no progress given" do - input_msg = {'nodes' => [{'uid' => 1, - 'status' => 'stopped', - 'deployment_graph_task_name' => 'test_2', - 'task_status' => 'skipped'}]} - expected_msg = {'nodes' => [{'uid' => 1, - 'status' => 'stopped', - 'progress' => 100, - 'deployment_graph_task_name' => 'test_2', - 'task_status' => 'skipped'}]} - up_reporter.expects(:report).with(expected_msg) - reporter.report(input_msg) - end - - it "reports even not all keys provided" do - msg1 = {'nodes' => [{'uid' => 1, - 'status' => 'deploying', - 'deployment_graph_task_name' => 'test_2', - 'task_status' => 'running'}]} - msg2 = {'nodes' => [{'uid' => 2, - 'status' => 'ready', - 'deployment_graph_task_name' => 'test_2', - 'task_status' => 'successful'}]} - expected_msg2 = {'nodes' => [{'uid' => 2, - 'status' => 'ready', - 'deployment_graph_task_name' => 'test_2', - 'task_status' => 'ready'}]} - up_reporter.expects(:report).with(msg1) - up_reporter.expects(:report).with(expected_msg2) - reporter.report(msg1) - reporter.report(msg2) - end - - it "reports w/o change if progress provided and no status (bad message)" do - msg1 = {'nodes' => [{'uid' => 1, - 'status' => 'deploying', - 'deployment_graph_task_name' => 'test_2', - 'task_status' => 'running'}]} - msg2 = {'nodes' => [{'uid' => 1, 'progress' => 100}]} - up_reporter.expects(:report).with(msg1) - up_reporter.expects(:report).with(msg2) - reporter.report(msg1) - reporter.report(msg2) - end - - it "reports w/o change if status of node is not supported (bad message)" do - msg1 = {'nodes' => [{'uid' => 1, 'status' => 'hah'}]} - up_reporter.expects(:report).with(msg1) - reporter.report(msg1) - end - - it "some other attrs are valid and passed" do - msg1 = {'nodes' => [{'uid' => 1, - 'status' => 'deploying', - 'deployment_graph_task_name' => 'test_2', - 'task_status' => 'running'}]} - msg2 = {'status' => 'error', - 'error_type' => 'deploy', - 'nodes' => [{'uid' => 2, - 'status' => 'error', - 'message' => 'deploy', - 'deployment_graph_task_name' => 'test_2', - 'task_status' => 'failed'}]} - expected_msg2 = { - 'status' => 'error', - 'error_type' => 'deploy', - 'nodes' => [{ - 'uid' => 2, - 'status' => 'error', - 'message' => 'deploy', - 'progress' => 100, - 'deployment_graph_task_name' => 'test_2', - 'task_status' => 'error'}]} - up_reporter.expects(:report).with(msg1) - up_reporter.expects(:report).with(expected_msg2) - reporter.report(msg1) - reporter.report(msg2) - end - - it "reports if task status is changed" do - msgs = [ - {'nodes' => [{'uid' => 1, - 'status' => 'deploying', - 'deployment_graph_task_name' => 'test_2', - 'task_status' => 'running'}]}, - {'nodes' => [{'uid' => 1, - 'status' => 'ready', - 'deployment_graph_task_name' => 'test_2', - 'task_status' => 'successful'}]}, - {'nodes' => [{'uid' => 1, - 'status' => 'deploying', - 'deployment_graph_task_name' => 'test_2', - 'task_status' => 'running'}]}, - ] - expected_msg2 = {'nodes' => [{ - 'uid' => 1, - 'status' => 'ready', - 'deployment_graph_task_name' => 'test_2', - 'task_status' => 'ready'}]} - - up_reporter.expects(:report).with(msgs[0]) - up_reporter.expects(:report).with(expected_msg2) - msgs.each {|msg| reporter.report(msg)} - end - - it "report if final status changed" do - msgs = [ - {'nodes' => [{'uid' => 1, - 'status' => 'deploying', - 'deployment_graph_task_name' => 'test_2', - 'task_status' => 'running'}]}, - {'nodes' => [{'uid' => 1, - 'status' => 'ready', - 'deployment_graph_task_name' => 'test_2', - 'task_status' => 'successful'}]}, - {'nodes' => [{'uid' => 1, - 'status' => 'deploying', - 'deployment_graph_task_name' => 'test_2', - 'task_status' => 'running'}]}, - {'nodes' => [{'uid' => 1, - 'status' => 'error', - 'deployment_graph_task_name' => 'test_2', - 'task_status' => 'failed'}]}, - ] - - expected_msg2 = {'nodes' => [{ - 'uid' => 1, - 'status' => 'ready', - 'deployment_graph_task_name' => 'test_2', - 'task_status' => 'ready'}]} - - expected_msg3 = {'nodes' => [{ - 'uid' => 1, - 'status' => 'error', - 'deployment_graph_task_name' => 'test_2', - 'task_status' => 'error', - 'progress' => 100}]} - - up_reporter.expects(:report).with(msgs[0]) - up_reporter.expects(:report).with(expected_msg2) - up_reporter.expects(:report).with(expected_msg3) - msgs.each {|msg| reporter.report(msg)} - end - - it 'should report if status changed, but progress is not' do - msgs = [ - {'nodes' => [{'uid' => 1, - 'status' => 'deploying', - 'deployment_graph_task_name' => 'test_2', - 'task_status' => 'running', - 'progress' => 50}]}, - {'nodes' => [{'uid' => 1, - 'status' => 'deploying', - 'deployment_graph_task_name' => 'test_2', - 'task_status' => 'running', - 'progress' => 50}]}, - {'nodes' => [{'uid' => 1, - 'status' => 'deploying', - 'deployment_graph_task_name' => 'test_2', - 'task_status' => 'running', - 'progress' => 50}]}, - {'nodes' => [{'uid' => 1, - 'status' => 'deploying', - 'deployment_graph_task_name' => 'test_2', - 'task_status' => 'successful', - 'progress' => 50}]} - ] - - up_reporter.expects(:report).with(msgs[0]) - expected_msg_3 = msgs[3].deep_dup - expected_msg_3['nodes'].first['task_status'] = 'ready' - up_reporter.expects(:report).with(expected_msg_3) - - msgs.each {|msg| reporter.report(msg)} - - end - - it "report stopped status" do - msgs = [ - {'nodes' => [{'uid' => 1, - 'status' => 'deploying', - 'deployment_graph_task_name' => 'test_1', - 'task_status' => 'running'}]}, - {'nodes' => [{'uid' => 1, - 'status' => 'stopped', - 'deployment_graph_task_name' => 'test_1', - 'task_status' => 'successful'}]}, - ] - - expected_msg_1 = { - 'nodes' => [{ - 'uid' => 1, - 'status' => 'stopped', - 'deployment_graph_task_name' => 'test_1', - 'task_status' => 'ready', - 'progress' => 100}]} - up_reporter.expects(:report).with(msgs[0]) - up_reporter.expects(:report).with(expected_msg_1) - msgs.each {|msg| reporter.report(msg)} - end - - - context 'tasks' do - let(:msg) do - {'nodes' => [{'status' => 'deploying', 'uid' => '1', 'progress' => 54} - .merge(task_part_msg)] - } - end - - let(:task_part_msg) do - {'deployment_graph_task_name' => 'test_1', 'task_status' => 'running'} - end - - context 'validation' do - it 'send send correct msg with node, but not task, after name conversation' do - msg['nodes'].first['uid'] = 'virtual_sync_node' - msg['nodes'].first.delete('deployment_graph_task_name') - up_reporter.expects(:report).with('nodes' => [{ - 'status' => 'deploying', - 'uid' => nil, - 'progress' => 54, - 'task_status' => 'running'}]) - reporter.report(msg) - end - - it 'should send message without deployment graph task name (bad message)' do - msg['nodes'].first.delete('deployment_graph_task_name') - up_reporter.expects(:report).with(msg) - reporter.report(msg) - end - - it 'should send message without task status (bad message)' do - msg['nodes'].first.delete('task_status') - up_reporter.expects(:report).with(msg) - reporter.report(msg) - end - end - - context 'task status convertation' do - it 'should convert task running status to running' do - up_reporter.expects(:report).with(msg) - reporter.report(msg) - end - - it 'should convert task failed status to error' do - task_part_msg['task_status'] = 'failed' - expected_msg = msg.deep_dup - expected_msg['nodes'].first['task_status'] = 'error' - up_reporter.expects(:report).with(expected_msg) - reporter.report(msg) - end - - it 'should convert task successful status to ready' do - task_part_msg['task_status'] = 'successful' - expected_msg = msg.deep_dup - expected_msg['nodes'].first['task_status'] = 'ready' - up_reporter.expects(:report).with(expected_msg) - reporter.report(msg) - end - - it 'should send w/o change if task has inccorect status (bad message)' do - task_part_msg['task_status'] = 'unknown' - up_reporter.expects(:report).with(msg) - reporter.report(msg) - end - end - end - - end -end diff --git a/spec/unit/tasks/puppet_task_spec.rb b/spec/unit/tasks/puppet_task_spec.rb deleted file mode 100644 index 7f8b96ff..00000000 --- a/spec/unit/tasks/puppet_task_spec.rb +++ /dev/null @@ -1,62 +0,0 @@ -# Copyright 2017 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the 'License'); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an 'AS IS' BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require File.join(File.dirname(__FILE__), '../../spec_helper') - -describe Astute::Shell do - include SpecHelpers - - let(:task) do - { - 'parameters' => { - 'debug' => false, - 'retries' => 1, - 'puppet_manifest' => 'puppet_manifest_example.pp', - 'puppet_modules' => '/etc/puppet/modules', - 'cwd' => '/', - 'timeout' => nil, - 'succeed_retries' => 1, - 'timeout' => 180 - }, - 'type' => 'puppet', - 'id' => 'puppet_task_example', - 'node_id' => 'node_id', - } - end - - let(:ctx) { mock_ctx } - - subject { Astute::Puppet.new(task, ctx) } - - describe '#run' do - before { Astute::Puppet.any_instance.stubs(:process) } - context 'debug behavior' do - it 'puppet debug should disable if debug option disable or missing' do - subject.run - expect(subject.task['parameters']['puppet_debug']).to eq(false) - end - - it 'puppet debug should enable if debug enable' do - task['parameters']['debug'] = true - subject.run - expect(subject.task['parameters']['debug']).to eq(true) - expect(subject.task['parameters']['puppet_debug']).to eq(true) - end - end # context - end # 'run' -end - - - - diff --git a/spec/unit/tasks/reboot_task_spec.rb b/spec/unit/tasks/reboot_task_spec.rb deleted file mode 100644 index 94781152..00000000 --- a/spec/unit/tasks/reboot_task_spec.rb +++ /dev/null @@ -1,254 +0,0 @@ -# Copyright 2016 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require File.join(File.dirname(__FILE__), '../../spec_helper') - -describe Astute::Reboot do - include SpecHelpers - - let(:task) do - { - "parameters" => { - "timeout" => 300, - }, - "type" => "reboot", - "node_id" => '1', - "fail_on_error" => true, - "required_for" => [], - "requires" => [], - "id" => "openstack-haproxy-reboot", - } - end - - let(:ctx) { - ctx = mock - ctx.stubs(:task_id) - ctx.stubs(:deploy_log_parser).returns(Astute::LogParser::NoParsing.new) - ctx.stubs(:status).returns({}) - reporter = mock - reporter.stubs(:report) - up_reporter = Astute::ProxyReporter::DeploymentProxyReporter.new( - reporter, - [task['node_id']] - ) - ctx.stubs(:reporter).returns(up_reporter) - ctx - } - - subject { Astute::Reboot.new(task, ctx) } - - let(:mco_puppet_stopped) do - { - :changes => {"total" => 1}, - :time => {"last_run" => 1358425701}, - :resources => {"failed" => 0}, - :status => "stopped", - :enabled => 1, - :stopped => 1, - :idling => 0, - :running => 0, - :runtime => 1358425701 - } - end - - let(:mco_puppet_running) do - mco_puppet_stopped.merge( - :status => 'running', - :running => 1, - :stopped => 0 - ) - end - - let(:mco_puppet_fail) do - mco_puppet_running.merge( - :runtime => 1358426000, - :time => {"last_run" => 1358426000}, - :resources => {"failed" => 1} - ) - end - - let(:mco_puppet_failed) do - mco_puppet_fail.merge( - :status => 'stopped', - :stopped => 1, - :running => 0 - ) - end - - let(:mco_puppet_finished) do - mco_puppet_stopped.merge( - :time => {'last_run' => 1358428000}, - :status => 'stopped' - ) - end - - let(:mco_puppet_idling) do - mco_puppet_stopped.merge( - :status => 'idling', - :running => 0, - :stopped => 0, - :idling => 1 - ) - end - - describe "#run" do - it 'should get boot time before reboot' do - subject.expects(:boot_time).once.returns(12) - subject.stubs(:reboot) - subject.run - end - - it 'should reboot node after getting boot time' do - subject.stubs(:boot_time).returns(12) - subject.expects(:reboot).once - subject.run - end - - it 'should failed if mclient could not get boot time' do - subject.expects(:run_shell_without_check).with( - task['node_id'], - "stat --printf='%Y' /proc/1", - _timeout=2 - ).raises(Astute::MClientTimeout) - subject.expects(:reboot).never - - expect{subject.run}.not_to raise_error(Astute::MClientTimeout) - expect(subject.status).to eql(:failed) - end - - it 'should use mclient without check with reboot command to reboot' do - subject.stubs(:boot_time).returns(12) - subject.expects(:run_shell_without_check).with( - task['node_id'], - regexp_matches(/reboot/), - _timeout=2 - ) - subject.run - end - - it 'should use mclient without check with stat to get boot time' do - subject.expects(:run_shell_without_check).with( - task['node_id'], - "stat --printf='%Y' /proc/1", - _timeout=2 - ).returns({:stdout => "12"}) - subject.stubs(:reboot) - subject.run - end - - it 'should fail if mclient with reboot command raise error' do - subject.stubs(:boot_time).returns(12) - subject.expects(:run_shell_without_check).with( - task['node_id'], - regexp_matches(/reboot/), - _timeout=2 - ).raises(Astute::MClientTimeout) - expect{subject.run}.not_to raise_error(Astute::MClientTimeout) - expect(subject.status).to eql(:failed) - end - - end #run - - describe "#status" do - before(:each) do - ctx.stubs(:report_and_update_status) - end - - it 'it should succeed if boot time before and after is different' do - subject.stubs(:reboot) - subject.stubs(:update_online_node_status) - subject.expects(:boot_time).twice.returns(12).then.returns(13) - - subject.run - expect(subject.status).to eql(:successful) - end - - it 'it should succeed if boot time before and after are different' do - subject.stubs(:reboot) - subject.stubs(:update_online_node_status) - subject.expects(:boot_time).twice.returns(12).then.returns(11) - - subject.run - expect(subject.status).to eql(:successful) - end - - it 'it should succeed if boot time before and after is different' do - subject.stubs(:reboot) - subject.stubs(:update_online_node_status) - subject.expects(:boot_time).twice.returns(12).then.returns(11) - - subject.run - expect(subject.status).to eql(:successful) - end - - it 'it should update node online status' do - subject.stubs(:reboot) - subject.expects(:update_online_node_status).once - subject.stubs(:boot_time).twice.returns(12).then.returns(11) - - subject.run - expect(subject.status).to eql(:successful) - end - - it 'it should fail if timeout is reached' do - subject.stubs(:reboot) - subject.expects(:boot_time).once.returns(12) - task['parameters']['timeout'] = -1 - - subject.run - expect(subject.status).to eql(:failed) - end - - it 'it not update node online status if task failed' do - subject.stubs(:reboot) - subject.stubs(:boot_time).once.returns(12) - subject.expects(:update_online_node_status).never - task['parameters']['timeout'] = -1 - - subject.run - expect(subject.status).to eql(:failed) - end - - it 'it should succeed after several tries' do - subject.stubs(:reboot) - subject.stubs(:update_online_node_status) - subject.expects(:boot_time).times(4).returns(12) - .then.returns(12) - .then.returns(0) - .then.returns(11) - - subject.run - 3.times { subject.status } - expect(subject.status).to eql(:successful) - end - - it 'it should not failed if boot time raise eror' do - subject.expects(:run_shell_without_check).with( - task['node_id'], - "stat --printf='%Y' /proc/1", - _timeout=2 - ).times(3).returns({:stdout => "12"}) - .then.raises(Astute::MClientTimeout) - .then.returns({:stdout => "13"}) - subject.stubs(:reboot) - subject.stubs(:update_online_node_status) - - subject.run - expect(subject.status).to eql(:running) - expect(subject.status).to eql(:successful) - end - - end #status - -end diff --git a/spec/unit/tasks/shell_task_spec.rb b/spec/unit/tasks/shell_task_spec.rb deleted file mode 100644 index ec219bd1..00000000 --- a/spec/unit/tasks/shell_task_spec.rb +++ /dev/null @@ -1,78 +0,0 @@ -# Copyright 2016 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the 'License'); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an 'AS IS' BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require File.join(File.dirname(__FILE__), '../../spec_helper') - -describe Astute::Shell do - include SpecHelpers - - let(:task) do - { - 'parameters' => { - 'retries' => 3, - 'cmd' => 'sh some_command', - 'cwd' => '/', - 'timeout' => 180, - 'interval' => 1}, - 'type' => 'shell', - 'id' => 'shell_task_id', - 'node_id' => 'node_id', - } - end - - let(:ctx) { mock_ctx } - - subject { Astute::Shell.new(task, ctx) } - - describe '#run' do - it 'should create puppet wrapper' do - Astute::Shell.any_instance.stubs(:run_shell_without_check) - Astute::Puppet.any_instance.stubs(:run) - - content = <<-eos - # Puppet manifest wrapper for task: shell_task_id - notice('MODULAR: shell_task_id') - - exec { 'shell_task_id_shell' : - path => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', - command => '/bin/bash "/etc/puppet/shell_manifests/shell_task_id_command.sh"', - logoutput => true, - timeout => 180, - } - eos - - manifest_content = <<-eos - #!/bin/bash - # Puppet shell wrapper for task: shell_task_id - # Manifest: /etc/puppet/shell_manifests/shell_task_id_manifest.pp - - cd / && sh some_command - eos - - Astute::UploadFileMClient.any_instance.expects(:upload_without_check).with({ - 'path' => '/etc/puppet/shell_manifests/shell_task_id_manifest.pp', - 'content' => content, - 'permissions' => '0755' - }) - Astute::UploadFileMClient.any_instance.expects(:upload_without_check).with({ - 'path' => '/etc/puppet/shell_manifests/shell_task_id_command.sh', - 'content' => manifest_content, - 'permissions' => '0755' - }) - - subject.run - end - end - -end diff --git a/spec/unit/version_spec.rb b/spec/unit/version_spec.rb deleted file mode 100644 index a5a80577..00000000 --- a/spec/unit/version_spec.rb +++ /dev/null @@ -1,74 +0,0 @@ -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - - -require File.join(File.dirname(__FILE__), '../spec_helper') - -describe Astute::Versioning do - include SpecHelpers - - before(:each) do - @reporter = mock('reporter') - @reporter.stub_everything - @context = Astute::Context.new('1', @reporter) - @versioning = Astute::Versioning.new(@context) - version_result = {:sender=>"1", - :statusmsg=>"OK", - :data=>{:agents=>["puppetd", "systemtype", "rpcutil", "fake", - "uploadfile", "puppetsync", "execute_shell_command", - "erase_node", "net_probe", "discovery", "version"], - :facts=>{"mcollective"=>"1"}, :classes=>[]}} - noversion_result = {:sender=>"2", - :statusmsg=>"OK", - :data=>{:agents=>["puppetd", "systemtype", "rpcutil", "fake", - "uploadfile", "puppetsync", "execute_shell_command", - "erase_node", "net_probe", "discovery" ], - :facts=>{"mcollective"=>"1"}, :classes=>[]}} - nodes = [{'uid' => '1'}, {'uid' => '2'}] - - @version_result = mock_mc_result(version_result) - @noversion_result = mock_mc_result(noversion_result) - - result = {:sender=>"1", :statuscode=>0, :statusmsg=>"OK", :data=>{:version=>"6.1.0"}} - @mc_res = mock_mc_result(result) - end - - describe 'get_version' do - it 'returns nodes with versions' do - rpcclient = mock_rpcclient() - rpcclient.expects(:inventory).once.returns([@version_result, @noversion_result]) - rpcclient.expects(:get_version).once.returns([@mc_res]) - expect(@versioning.get_versions(["1", "2"]) - ).to eql([{"version"=>"6.1.0", "uid"=>"1"}, {"version"=>"6.0.0", "uid"=>"2"}]) - end - - it 'does not fail if only old nodes are available' do - rpcclient = mock_rpcclient() - rpcclient.expects(:inventory).once.returns([@noversion_result]) - expect(@versioning.get_versions(["2"]) - ).to eql([{"version"=>"6.0.0", "uid"=>"2"}]) - end - end - - describe 'split_on_version' do - it 'splits on version' do - rpcclient = mock_rpcclient() - rpcclient.expects(:inventory).once.returns([@version_result, @noversion_result]) - rpcclient.expects(:get_version).once.returns([@mc_res]) - expect(@versioning.split_on_version(["1", "2"], '6.1.0') - ).to eql([[{"version"=>"6.0.0", "uid"=>"2"}], [{"version"=>"6.1.0", "uid"=>"1"}]]) - end - end - -end diff --git a/specs/astute.spec b/specs/astute.spec deleted file mode 100644 index 3d815bf9..00000000 --- a/specs/astute.spec +++ /dev/null @@ -1,167 +0,0 @@ -%define rbname astute -%{!?version: %define version 10.0.0} -%{!?release: %define release 1} -%if 0%{?rhel} == 6 -%global gem_dir %(ruby -rubygems -e 'puts Gem::dir' 2>/dev/null) -%endif -%global geminstdir %{gem_dir}/gems/%{gemname}-%{version} -%define gembuilddir %{buildroot}%{gem_dir} - -Summary: Orchestrator for OpenStack deployment -Version: %{version} - -%if 0%{?rhel} == 6 -Name: ruby21-rubygem-astute -Release: %{release} -Provides: ruby21(Astute) = %{version} -%else -Name: rubygem-astute -Release: %{release} -Provides: ruby(Astute) = %{version} -%endif - -Group: Development/Ruby -License: Distributable -URL: http://fuel.mirantis.com -Source0: %{rbname}-%{version}.tar.gz - -# Make sure the spec template is included in the SRPM -BuildRoot: %{_tmppath}/%{rbname}-%{version}-root -%if 0%{?rhel} == 6 -Requires: ruby21 >= 2.1 -Requires: ruby21-rubygem-activesupport = 3.0.10 -Requires: ruby21-rubygem-mcollective-client = 2.4.1 -Requires: ruby21-rubygem-symboltable = 1.0.2 -Requires: ruby21-rubygem-rest-client = 1.6.7 -Requires: ruby21-rubygem-bunny -Requires: ruby21-rubygem-raemon = 0.3.0 -Requires: ruby21-rubygem-net-ssh = 2.8.0 -Requires: ruby21-rubygem-net-ssh-gateway = 1.2.0 -BuildRequires: ruby21 >= 2.1 -BuildRequires: rubygems21 -%else -Requires: ruby -Requires: rubygem-activesupport -Requires: rubygem-mcollective-client -Requires: rubygem-symboltable -Requires: rubygem-rest-client -Requires: rubygem-bunny -Requires: rubygem-raemon -Requires: rubygem-net-ssh -Requires: rubygem-net-ssh-gateway -BuildRequires: ruby -BuildRequires: rubygems-devel -%endif -BuildArch: noarch -Requires: openssh-clients -Requires: python-timmy - -%if 0%{?fedora} > 16 || 0%{?rhel} > 6 -Requires(post): systemd-units -Requires(preun): systemd-units -Requires(postun): systemd-units -BuildRequires: systemd-units -%endif - -%description -Deployment Orchestrator of Puppet via MCollective. Works as a library or from -CLI. - - -%prep -%setup -cq -n %{rbname}-%{version} - -%build -cd %{_builddir}/%{rbname}-%{version}/ && gem build *.gemspec - -%install -mkdir -p %{gembuilddir} -gem install --local --install-dir %{gembuilddir} --force %{_builddir}/%{rbname}-%{version}/%{rbname}-%{version}.gem -mkdir -p %{buildroot}%{_bindir} -mv %{gembuilddir}/bin/* %{buildroot}%{_bindir} -rmdir %{gembuilddir}/bin -install -d -m 750 %{buildroot}%{_sysconfdir}/astute -cat > %{buildroot}%{_bindir}/astuted <= 0'; load Gem.bin_path('astute', 'astuted', '>= 0')" -- \$@ -EOF -install -d -m 755 %{buildroot}%{_localstatedir}/log/astute -install -d -m 755 %{buildroot}/var/lib/astute -install -d -m 755 %{buildroot}/var/lib/astute/graphs -install -D -m644 %{_builddir}/%{rbname}-%{version}/%{rbname}.sysconfig %{buildroot}/%{_sysconfdir}/sysconfig/%{rbname} -#nailgun-mcagents -mkdir -p %{buildroot}/usr/libexec/mcollective/mcollective/agent/ -cp -rf %{_builddir}/%{rbname}-%{version}/mcagents/* %{buildroot}/usr/libexec/mcollective/mcollective/agent/ - -%if %{defined _unitdir} -install -D -m644 %{_builddir}/%{rbname}-%{version}/%{rbname}.service %{buildroot}/%{_unitdir}/%{rbname}.service -%endif - -%clean -%{__rm} -rf %{buildroot} - -%files -%defattr(-, root, root) -%{gem_dir}/gems/%{rbname}-%{version}/bin/* -%{gem_dir}/gems/%{rbname}-%{version}/lib/* -%{gem_dir}/gems/%{rbname}-%{version}/spec/* -%{gem_dir}/gems/%{rbname}-%{version}/examples/* - -%dir %attr(0750, naily, naily) %{_sysconfdir}/%{rbname} -%dir %attr(0755, naily, naily) %{_localstatedir}/log/%{rbname} -%dir /var/lib/astute -%dir /var/lib/astute/graphs -%config(noreplace) %{_bindir}/astuted -%config(noreplace) %{_bindir}/astute-simulator -%config(noreplace) %{_sysconfdir}/sysconfig/%{rbname} - -%doc %{gem_dir}/doc/%{rbname}-%{version} -%{gem_dir}/cache/%{rbname}-%{version}.gem -%{gem_dir}/specifications/%{rbname}-%{version}.gemspec - -%if %{defined _unitdir} -/%{_unitdir}/%{rbname}.service - -%post -%systemd_post %{rbname}.servive - -%preun -%systemd_preun %{rbname}.service - -%postun -%systemd_postun_with_restart %{rbname}.service - -%endif - -%if 0%{?rhel} == 6 -%package -n ruby21-nailgun-mcagents - -Summary: MCollective Agents -Version: %{version} -Release: %{release} -License: GPLv2 -Requires: ruby21-mcollective >= 2.2 -URL: http://mirantis.com - -%description -n ruby21-nailgun-mcagents -MCollective agents - -%files -n ruby21-nailgun-mcagents -/usr/libexec/mcollective/mcollective/agent/* -%endif - -%package -n nailgun-mcagents - -Summary: MCollective Agents -Version: %{version} -Release: %{release} -License: GPLv2 -Requires: mcollective >= 2.2 -Requires: network-checker -URL: http://mirantis.com - -%description -n nailgun-mcagents -MCollective agents - -%files -n nailgun-mcagents -/usr/libexec/mcollective/mcollective/agent/* diff --git a/tests/deployment.rb b/tests/deployment.rb deleted file mode 100755 index 1219e1a1..00000000 --- a/tests/deployment.rb +++ /dev/null @@ -1,86 +0,0 @@ -#!/usr/bin/env ruby -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require_relative '../lib/fuel_deployment/simulator' - -simulator = Astute::Simulator.new -cluster = Deployment::TestCluster.new -cluster.uid = 'deployment' - -node1_data = [ - [0, 1], - [1, 2], - [1, 3], - [2, 4], - [2, 5], - [3, 6], - [3, 7], - [4, 8], - [5, 10], - [6, 11], - [7, 12], - [8, 9], - [10, 9], - [11, 13], - [12, 13], - [13, 9], - # [9, 14], - [14, 15], -] - -node2_data = [ - [0, 1], - [1, 2], - [0, 3], - [3, 4], - [4, 5], - # [5, 6], - [5, 7], - [6, 8], -] - -cluster = Deployment::TestCluster.new -cluster.uid = 'deployment' - -node1 = cluster.node_create 'node1', Deployment::TestNode -node2 = cluster.node_create 'node2', Deployment::TestNode -sync_node = cluster.node_create 'sync_node', Deployment::TestNode -node2.set_critical -sync_node.set_as_sync_point -sync_node.create_task 'sync_task' - - -node1_data.each do |task_from, task_to| - task_from = node1.graph.create_task "task#{task_from}" - task_to = node1.graph.create_task "task#{task_to}" - node1.graph.add_dependency task_from, task_to -end - -node2_data.each do |task_from, task_to| - task_from = node2.graph.create_task "task#{task_from}" - task_to = node2.graph.create_task "task#{task_to}" - node2.graph.add_dependency task_from, task_to -end - -node2['task4'].depends node1['task3'] -node2['task5'].depends node1['task13'] -node1['task15'].depends node2['task6'] - -sync_node['sync_task'].depends node2['task5'] -sync_node['sync_task'].depends node1['task9'] -node2['task6'].depends sync_node['sync_task'] -node1['task14'].depends sync_node['sync_task'] - -simulator.run cluster diff --git a/tests/loop.rb b/tests/loop.rb deleted file mode 100755 index df9bf48b..00000000 --- a/tests/loop.rb +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env ruby -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require_relative '../lib/fuel_deployment/simulator' - -simulator = Astute::Simulator.new -cluster = Deployment::TestCluster.new -cluster.uid = 'loop' - -cluster.plot = true if simulator.options[:plot] -node1 = Deployment::TestNode.new 'node1', cluster - -task1 = node1.graph.add_new_task 'task1' -task2 = node1.graph.add_new_task 'task2' -task3 = node1.graph.add_new_task 'task3' - -task2.after task1 -task3.after task2 -task1.after task3 - -simulator.run cluster diff --git a/tests/node_concurrency.rb b/tests/node_concurrency.rb deleted file mode 100755 index cfda3d81..00000000 --- a/tests/node_concurrency.rb +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/env ruby -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require_relative '../lib/fuel_deployment/simulator' - -simulator = Astute::Simulator.new -cluster = Deployment::TestCluster.new -cluster.uid = 'node_concurrency' - -node1 = Deployment::TestNode.new 'node1', cluster -node2 = Deployment::TestNode.new 'node2', cluster -node3 = Deployment::TestNode.new 'node3', cluster -node4 = Deployment::TestNode.new 'node4', cluster -node5 = Deployment::TestNode.new 'node5', cluster -node6 = Deployment::TestNode.new 'node6', cluster - -node1.add_new_task('task1') -node1.add_new_task('final') - -node2.add_new_task('task1') -node2.add_new_task('final') - -node3.add_new_task('task1') -node3.add_new_task('final') - -node4.add_new_task('task1') -node4.add_new_task('final') - -node5.add_new_task('task1') -node5.add_new_task('final') - -node6.add_new_task('task1') -node6.add_new_task('final') - -node1['final'].after node1['task1'] -node2['final'].after node2['task1'] -node3['final'].after node3['task1'] -node4['final'].after node4['task1'] -node5['final'].after node5['task1'] -node6['final'].after node6['task1'] - -cluster.node_concurrency.maximum = 2 - -simulator.run cluster diff --git a/tests/scale.rb b/tests/scale.rb deleted file mode 100755 index f6a654be..00000000 --- a/tests/scale.rb +++ /dev/null @@ -1,61 +0,0 @@ -#!/usr/bin/env ruby -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require_relative '../lib/fuel_deployment/simulator' - -simulator = Astute::Simulator.new -cluster = Deployment::TestCluster.new - -TASK_NUMBER = 100 -NODE_NUMBER = 100 - -cluster.uid = 'scale' -cluster.plot = true if simulator.options[:plot] - -def make_nodes(cluster) - 1.upto(NODE_NUMBER).map do |node| - Deployment::TestNode.new "node#{node}", cluster - end -end - -def make_tasks(node) - previous_task = nil - 1.upto(TASK_NUMBER).each do |number| - task = "task#{number}" - unless previous_task - previous_task = task - next - end - task_from = node.graph.create_task previous_task - task_to = node.graph.create_task task - node.graph.add_dependency task_from, task_to - previous_task = task - end -end - -make_nodes cluster - -cluster.each_node do |node| - puts "Make tasks for: #{node}" - make_tasks node - nil -end - -cluster.each_node do |node| - next if node.name == 'node1' - node['task10'].depends cluster['node1']['task50'] -end - -simulator.run cluster diff --git a/tests/simulator.rb b/tests/simulator.rb deleted file mode 100755 index c50e5c1c..00000000 --- a/tests/simulator.rb +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env ruby -# Copyright 2016 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require_relative '../lib/fuel_deployment/simulator' -simulator = Astute::Simulator.new -simulator.run diff --git a/tests/subgraph.rb b/tests/subgraph.rb deleted file mode 100755 index c8af99db..00000000 --- a/tests/subgraph.rb +++ /dev/null @@ -1,100 +0,0 @@ -#!/usr/bin/env ruby -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require_relative '../lib/fuel_deployment/simulator' -require 'astute' - -simulator = Astute::Simulator.new -cluster = Deployment::TestCluster.new -cluster.uid = 'deployment' - -node1_data = [ - [0, 1], - [1, 2], - [1, 3], - [2, 4], - [2, 5], - [3, 6], - [3, 7], - [4, 8], - [5, 10], - [6, 11], - [7, 12], - [8, 9], - [10, 9], - [11, 13], - [12, 13], - [13, 9], - # [9, 14], - [14, 15], -] - -node2_data = [ - [0, 1], - [1, 2], - [0, 3], - [3, 4], - [4, 5], - # [5, 6], - [5, 7], - [6, 8], -] - -cluster = Deployment::TestCluster.new -cluster.uid = 'deployment' - -node1 = cluster.node_create '1', Deployment::TestNode -node2 = cluster.node_create '2', Deployment::TestNode -sync_node = cluster.node_create 'sync_node', Deployment::TestNode -node2.set_critical -sync_node.set_as_sync_point -sync_node.create_task('sync_task', data={}) - -node1_data.each do |task_from, task_to| - task_from = node1.graph.create_task("task#{task_from}", data={}) - task_to = node1.graph.create_task("task#{task_to}", data={}) - node1.graph.add_dependency task_from, task_to -end - -node2_data.each do |task_from, task_to| - task_from = node2.graph.create_task("task#{task_from}", data={}) - task_to = node2.graph.create_task("task#{task_to}", data={}) - node2.graph.add_dependency task_from, task_to -end - -node2['task4'].depends node1['task3'] -node2['task5'].depends node1['task13'] -node1['task15'].depends node2['task6'] - -sync_node['sync_task'].depends node2['task5'] -sync_node['sync_task'].depends node1['task9'] -node2['task6'].depends sync_node['sync_task'] -node1['task14'].depends sync_node['sync_task'] -subgraphs = [ - { - 'start' => [ - "task3", - ], - 'end' => [ - "task9" - ] - }, - { - 'start' => [ "task4" ] - } -] -cluster.subgraphs = Astute::TaskDeployment.munge_list_of_start_end(cluster, subgraphs) -cluster.setup_start_end -simulator.run cluster diff --git a/tests/subgraph_scale.rb b/tests/subgraph_scale.rb deleted file mode 100755 index c4d56205..00000000 --- a/tests/subgraph_scale.rb +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/env ruby -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require_relative '../lib/fuel_deployment/simulator' -require 'astute' - -simulator = Astute::Simulator.new -cluster = Deployment::TestCluster.new - -TASK_NUMBER = 100 -NODE_NUMBER = 1000 - -cluster.uid = 'scale' -cluster.plot = true if simulator.options[:plot] - -def make_nodes(cluster) - 1.upto(NODE_NUMBER).map do |node| - Deployment::TestNode.new "node#{node}", cluster - end -end - -def make_tasks(node) - previous_task = nil - 1.upto(TASK_NUMBER).each do |number| - task = "task#{number}" - unless previous_task - previous_task = task - next - end - task_from = node.graph.create_task previous_task - task_to = node.graph.create_task task - node.graph.add_dependency task_from, task_to - previous_task = task - end -end - -make_nodes cluster - -cluster.each_node do |node| - puts "Make tasks for: #{node}" - make_tasks node - nil -end - -cluster.each_node do |node| - next if node.name == 'node1' - node['task10'].depends cluster['node1']['task50'] -end -subgraphs = [ - { - 'start' => [ - "task3", - ], - 'end' => [ - "task29" - ] - }, - { - 'start' => [ "task4" ] - } -] -cluster.subgraphs = Astute::TaskDeployment.munge_list_of_start_end(cluster, subgraphs) -cluster.setup_start_end -simulator.run cluster diff --git a/tests/task_concurrency.rb b/tests/task_concurrency.rb deleted file mode 100755 index ac0a8ce1..00000000 --- a/tests/task_concurrency.rb +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env ruby -# Copyright 2015 Mirantis, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -require_relative '../lib/fuel_deployment/simulator' - -simulator = Astute::Simulator.new -cluster = Deployment::TestCluster.new -cluster.uid = 'task_concurrency' - -node1 = Deployment::TestNode.new 'node1', cluster -node2 = Deployment::TestNode.new 'node2', cluster -node3 = Deployment::TestNode.new 'node3', cluster -node4 = Deployment::TestNode.new 'node4', cluster -node5 = Deployment::TestNode.new 'node5', cluster - -node1.add_new_task('task1') -node1.add_new_task('final') - -node2.add_new_task('task1') -node2.add_new_task('final') - -node3.add_new_task('task1') -node3.add_new_task('final') - -node4.add_new_task('task1') -node4.add_new_task('final') - -node5.add_new_task('task1') -node5.add_new_task('final') - -node1['final'].after node1['task1'] -node2['final'].after node2['task1'] -node3['final'].after node3['task1'] -node4['final'].after node4['task1'] -node5['final'].after node5['task1'] - -cluster.task_concurrency['task1'].maximum = 3 -cluster.task_concurrency['final'].maximum = 2 - -simulator.run cluster