Class: PuppetX::Puppetlabs::Migration::CatalogDeltaModel::CatalogDelta
- Inherits:
-
Diff
- Object
- DeltaEntity
- Diff
- PuppetX::Puppetlabs::Migration::CatalogDeltaModel::CatalogDelta
- Defined in:
- lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb
Overview
Represents a delta between two catalogs
Instance Attribute Summary collapse
- #added_attribute_count ⇒ Object readonly
- #added_edge_count ⇒ Object readonly
- #added_edges ⇒ Object readonly
-
#added_resource_count ⇒ Integer
readonly
Total number of resource attributes added in preview.
- #added_resources ⇒ Object readonly
-
#baseline_catalog ⇒ String
readonly
The file name of the preview catalog.
- #baseline_edge_count ⇒ Object readonly
- #baseline_env ⇒ Object readonly
- #baseline_resource_count ⇒ Object readonly
- #conflicting_attribute_count ⇒ Object readonly
-
#conflicting_resource_count ⇒ Integer
readonly
Total number of resource attributes in conflict between baseline and preview.
- #conflicting_resources ⇒ Object readonly
- #equal_attribute_count ⇒ Object readonly
-
#equal_resource_count ⇒ Integer
readonly
Total number of attributes that are equal between baseline and preview.
- #missing_attribute_count ⇒ Object readonly
- #missing_edge_count ⇒ Object readonly
- #missing_edges ⇒ Object readonly
-
#missing_resource_count ⇒ Integer
readonly
Total number of resource attributes only present in baseline.
- #missing_resources ⇒ Object readonly
- #node_name ⇒ Object readonly
- #preview_catalog ⇒ Object readonly
- #preview_edge_count ⇒ Object readonly
- #preview_env ⇒ Object readonly
- #preview_resource_count ⇒ Object readonly
- #produced_by ⇒ Object readonly
- #timestamp ⇒ Object readonly
Attributes inherited from Diff
Instance Method Summary collapse
-
#array_value_diff_ignored? ⇒ Boolean
‘true` if array/value diffs were ignored when comparing resources.
- #assign_ids(start) ⇒ Object
-
#compliant?(bav, pav) ⇒ Boolean
private
Answers the question, is bav and pav compliant? Sets are compliant if pav is a subset of bav Arrays are compliant if pav contains all non unique values in bav.
-
#initialize(baseline, preview, options, timestamp, excludes = EMPTY_ARRAY) ⇒ CatalogDelta
constructor
Creates a new delta between the two catalog hashes baseline and preview.
- #initialize_from_hash(hash) ⇒ Object
-
#preview_compliant? ⇒ Boolean
‘true` if preview is compliant with baseline.
-
#preview_equal? ⇒ Boolean
‘true` if preview is equal to baseline.
-
#string_numeric_diff_ignored? ⇒ Boolean
‘true` if string/numeric diffs were ignored when comparing resources.
-
#tags_ignored? ⇒ Boolean
‘true` if tags are ignored when comparing resources.
-
#version_equal? ⇒ Boolean
‘true` if baseline version is equal to preview version.
Methods inherited from DeltaEntity
Methods included from ModelObject
Constructor Details
#initialize(baseline, preview, options, timestamp, excludes = EMPTY_ARRAY) ⇒ CatalogDelta
Creates a new delta between the two catalog hashes baseline and preview. The delta will be produced without considering differences in resource tagging if ignore_tags is set to ‘true`. The verbose flag controls whether or not attributes will be included in missing and added resources in the delta.
586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 586 def initialize(baseline, preview, , , excludes = EMPTY_ARRAY) excludes_per_type = {} (Exclude::DEFAULT_EXCLUSIONS + excludes).each do |ex| type = ex.type.downcase ex_for_type = (excludes_per_type[type] ||= []) ex_for_type << ex end @produced_by = 'puppet preview 3.8.0' @timestamp = @baseline_catalog = [:baseline_catalog] @preview_catalog = [:preview_catalog] @node_name = [:node] @tags_ignored = .include?(:skip_tags) ? [:skip_tags] : false if [:migration_checker] @string_numeric_diff_ignored = .include?(:diff_string_numeric) ? ![:diff_string_numeric] : true @array_value_diff_ignored = .include?(:diff_array_value) ? ![:diff_array_value] : false else @string_numeric_diff_ignored = false @array_value_diff_ignored = false end baseline = assert_type(Hash, baseline, {}) preview = assert_type(Hash, preview, {}) @baseline_env = baseline['environment'] @preview_env = preview['environment'] @version_equal = baseline['version'] == preview['version'] baseline_resources = create_resources(baseline, excludes_per_type) @baseline_resource_count = baseline_resources.size preview_resources = create_resources(preview, excludes_per_type) @preview_resource_count = preview_resources.size @added_resources = preview_resources.reject { |key,_| baseline_resources.include?(key) }.values @added_resource_count = @added_resources.size @added_attribute_count = @added_resources.inject(0) { |count, r| count + r.attributes.size } @missing_resources = baseline_resources.reject { |key,_| preview_resources.include?(key) }.values @missing_resource_count = @missing_resources.size @missing_attribute_count = @missing_resources.inject(0) { |count, r| count + r.attributes.size } @equal_resource_count = 0 @equal_attribute_count = 0 @conflicting_attribute_count = 0 @conflicting_resources = [] baseline_resources.each_pair do |key,br| pr = preview_resources[key] next if pr.nil? conflict = create_resource_conflict(br, pr) if conflict.nil? # Resources are equal @equal_resource_count += 1 @equal_attribute_count += br.attributes.size else @conflicting_resources << conflict @equal_attribute_count += conflict.equal_attribute_count @conflicting_attribute_count += conflict.conflicting_attributes.size @added_attribute_count += conflict.added_attributes.size @missing_attribute_count += conflict.missing_attributes.size end end @conflicting_resource_count = @conflicting_resources.size baseline_edges = create_edges(baseline, excludes_per_type) @baseline_edge_count = baseline_edges.size preview_edges = create_edges(preview, excludes_per_type) @preview_edge_count = preview_edges.size @added_edges = preview_edges.reject { |edge| baseline_edges.include?(edge) } @added_edge_count = @added_edges.size @missing_edges = baseline_edges.reject { |edge| preview_edges.include?(edge) } @missing_edge_count = @missing_edges.size @preview_compliant = @missing_resources.empty? && @missing_edges.empty? && @conflicting_resources.all? { |cr| cr.compliant? } @preview_equal = @preview_compliant && @conflicting_resources.empty? && @added_resources.empty? && @added_edges.empty? unless [:verbose_diff] == true # Clear attributes in the added and missing resources array @added_resources.each { |r| r.clear_attributes } @missing_resources.each { |r| r.clear_attributes } else @added_resources.each { |r| r.finish_attributes } @missing_resources.each { |r| r.finish_attributes } end @conflicting_resources.each { |r| r.finish_attributes } assign_ids(1) end |
Instance Attribute Details
#added_attribute_count ⇒ Object (readonly)
503 504 505 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 503 def added_attribute_count @added_attribute_count end |
#added_edge_count ⇒ Object (readonly)
488 489 490 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 488 def added_edge_count @added_edge_count end |
#added_edges ⇒ Object (readonly)
548 549 550 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 548 def added_edges @added_edges end |
#added_resource_count ⇒ Integer (readonly)
Returns total number of resource attributes added in preview.
473 474 475 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 473 def added_resource_count @added_resource_count end |
#added_resources ⇒ Object (readonly)
533 534 535 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 533 def added_resources @added_resources end |
#baseline_catalog ⇒ String (readonly)
Returns the file name of the preview catalog.
563 564 565 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 563 def baseline_catalog @baseline_catalog end |
#baseline_edge_count ⇒ Object (readonly)
518 519 520 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 518 def baseline_edge_count @baseline_edge_count end |
#baseline_env ⇒ Object (readonly)
412 413 414 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 412 def baseline_env @baseline_env end |
#baseline_resource_count ⇒ Object (readonly)
458 459 460 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 458 def baseline_resource_count @baseline_resource_count end |
#conflicting_attribute_count ⇒ Object (readonly)
513 514 515 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 513 def conflicting_attribute_count @conflicting_attribute_count end |
#conflicting_resource_count ⇒ Integer (readonly)
Returns total number of resource attributes in conflict between baseline and preview.
483 484 485 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 483 def conflicting_resource_count @conflicting_resource_count end |
#conflicting_resources ⇒ Object (readonly)
538 539 540 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 538 def conflicting_resources @conflicting_resources end |
#equal_attribute_count ⇒ Object (readonly)
498 499 500 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 498 def equal_attribute_count @equal_attribute_count end |
#equal_resource_count ⇒ Integer (readonly)
Returns total number of attributes that are equal between baseline and preview.
468 469 470 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 468 def equal_resource_count @equal_resource_count end |
#missing_attribute_count ⇒ Object (readonly)
508 509 510 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 508 def missing_attribute_count @missing_attribute_count end |
#missing_edge_count ⇒ Object (readonly)
493 494 495 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 493 def missing_edge_count @missing_edge_count end |
#missing_edges ⇒ Object (readonly)
543 544 545 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 543 def missing_edges @missing_edges end |
#missing_resource_count ⇒ Integer (readonly)
Returns total number of resource attributes only present in baseline.
478 479 480 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 478 def missing_resource_count @missing_resource_count end |
#missing_resources ⇒ Object (readonly)
528 529 530 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 528 def missing_resources @missing_resources end |
#node_name ⇒ Object (readonly)
573 574 575 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 573 def node_name @node_name end |
#preview_catalog ⇒ Object (readonly)
568 569 570 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 568 def preview_catalog @preview_catalog end |
#preview_edge_count ⇒ Object (readonly)
523 524 525 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 523 def preview_edge_count @preview_edge_count end |
#preview_env ⇒ Object (readonly)
417 418 419 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 417 def preview_env @preview_env end |
#preview_resource_count ⇒ Object (readonly)
463 464 465 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 463 def preview_resource_count @preview_resource_count end |
#produced_by ⇒ Object (readonly)
553 554 555 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 553 def produced_by @produced_by end |
#timestamp ⇒ Object (readonly)
558 559 560 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 558 def @timestamp end |
Instance Method Details
#array_value_diff_ignored? ⇒ Boolean
Returns ‘true` if array/value diffs were ignored when comparing resources.
427 428 429 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 427 def array_value_diff_ignored? @array_value_diff_ignored end |
#assign_ids(start) ⇒ Object
698 699 700 701 702 703 704 705 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 698 def assign_ids(start) start = 1 start = assign_ids_on_each(start, added_resources) start = assign_ids_on_each(start, missing_resources) start = assign_ids_on_each(start, conflicting_resources) start = assign_ids_on_each(start, added_edges) assign_ids_on_each(start, missing_edges) end |
#compliant?(bav, pav) ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Answers the question, is bav and pav compliant? Sets are compliant if pav is a subset of bav Arrays are compliant if pav contains all non unique values in bav. Order is insignificant Hashes are compliant if pav has at least the same set of keys as bav, and the values are compliant All other values are compliant if the values are equal
812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 812 def compliant?(bav, pav) if bav.is_a?(Set) && pav.is_a?(Set) bav.subset?(pav) elsif bav.is_a?(Array) && pav.is_a?(Array) return false if pav.size < bav.size cp = pav.clone bav.each do |be| ix = cp.index(be) return false if ix.nil? cp.delete_at(ix) end true elsif bav.is_a?(Hash) && pav.is_a?(Hash) # Double negation here since Hash doesn't have an all? method !bav.any? {|k,v| !(pav.include?(k) && compliant?(v, pav[k])) } else values_equal?(bav, pav) end end |
#initialize_from_hash(hash) ⇒ Object
681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 681 def initialize_from_hash(hash) hash.each_pair do |k, v| k = :"@#{k}" instance_variable_set(k, case k when :@added_resources, :@missing_resources v.map { |rh| Resource.from_hash(rh) } when :@conflicting_resources v.map { |rh| ResourceConflict.from_hash(rh) } when :@added_edges, :@missing_edges v.map { |rh| Edge.from_hash(rh) } else v end) end end |
#preview_compliant? ⇒ Boolean
Returns ‘true` if preview is compliant with baseline.
439 440 441 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 439 def preview_compliant? @preview_compliant end |
#preview_equal? ⇒ Boolean
Returns ‘true` if preview is equal to baseline.
445 446 447 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 445 def preview_equal? @preview_equal end |
#string_numeric_diff_ignored? ⇒ Boolean
Returns ‘true` if string/numeric diffs were ignored when comparing resources.
433 434 435 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 433 def string_numeric_diff_ignored? @string_numeric_diff_ignored end |
#tags_ignored? ⇒ Boolean
Returns ‘true` if tags are ignored when comparing resources.
421 422 423 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 421 def @tags_ignored end |
#version_equal? ⇒ Boolean
Returns ‘true` if baseline version is equal to preview version.
451 452 453 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 451 def version_equal? @version_equal end |