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
- #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.
562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 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 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 562 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 = [:skip_tags] @string_numeric_diff_ignored = [:migration_checker] && ![:diff_string_numeric] 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] # Clear attributes in the added and missing resources array @added_resources.each { |r| r.clear_attributes } @missing_resources.each { |r| r.clear_attributes } end assign_ids(1) end |
Instance Attribute Details
#added_attribute_count ⇒ Object (readonly)
479 480 481 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 479 def added_attribute_count @added_attribute_count end |
#added_edge_count ⇒ Object (readonly)
464 465 466 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 464 def added_edge_count @added_edge_count end |
#added_edges ⇒ Object (readonly)
524 525 526 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 524 def added_edges @added_edges end |
#added_resource_count ⇒ Integer (readonly)
Returns total number of resource attributes added in preview.
449 450 451 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 449 def added_resource_count @added_resource_count end |
#added_resources ⇒ Object (readonly)
509 510 511 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 509 def added_resources @added_resources end |
#baseline_catalog ⇒ String (readonly)
Returns the file name of the preview catalog.
539 540 541 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 539 def baseline_catalog @baseline_catalog end |
#baseline_edge_count ⇒ Object (readonly)
494 495 496 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 494 def baseline_edge_count @baseline_edge_count end |
#baseline_env ⇒ Object (readonly)
394 395 396 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 394 def baseline_env @baseline_env end |
#baseline_resource_count ⇒ Object (readonly)
434 435 436 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 434 def baseline_resource_count @baseline_resource_count end |
#conflicting_attribute_count ⇒ Object (readonly)
489 490 491 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 489 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.
459 460 461 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 459 def conflicting_resource_count @conflicting_resource_count end |
#conflicting_resources ⇒ Object (readonly)
514 515 516 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 514 def conflicting_resources @conflicting_resources end |
#equal_attribute_count ⇒ Object (readonly)
474 475 476 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 474 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.
444 445 446 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 444 def equal_resource_count @equal_resource_count end |
#missing_attribute_count ⇒ Object (readonly)
484 485 486 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 484 def missing_attribute_count @missing_attribute_count end |
#missing_edge_count ⇒ Object (readonly)
469 470 471 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 469 def missing_edge_count @missing_edge_count end |
#missing_edges ⇒ Object (readonly)
519 520 521 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 519 def missing_edges @missing_edges end |
#missing_resource_count ⇒ Integer (readonly)
Returns total number of resource attributes only present in baseline.
454 455 456 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 454 def missing_resource_count @missing_resource_count end |
#missing_resources ⇒ Object (readonly)
504 505 506 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 504 def missing_resources @missing_resources end |
#node_name ⇒ Object (readonly)
549 550 551 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 549 def node_name @node_name end |
#preview_catalog ⇒ Object (readonly)
544 545 546 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 544 def preview_catalog @preview_catalog end |
#preview_edge_count ⇒ Object (readonly)
499 500 501 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 499 def preview_edge_count @preview_edge_count end |
#preview_env ⇒ Object (readonly)
399 400 401 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 399 def preview_env @preview_env end |
#preview_resource_count ⇒ Object (readonly)
439 440 441 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 439 def preview_resource_count @preview_resource_count end |
#produced_by ⇒ Object (readonly)
529 530 531 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 529 def produced_by @produced_by end |
#timestamp ⇒ Object (readonly)
534 535 536 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 534 def @timestamp end |
Instance Method Details
#assign_ids(start) ⇒ Object
663 664 665 666 667 668 669 670 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 663 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
767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 767 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
646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 646 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.
415 416 417 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 415 def preview_compliant? @preview_compliant end |
#preview_equal? ⇒ Boolean
Returns ‘true` if preview is equal to baseline.
421 422 423 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 421 def preview_equal? @preview_equal end |
#string_numeric_diff_ignored? ⇒ Boolean
Returns ‘true` if string/numeric diffs were ignored when comparing resources.
409 410 411 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 409 def string_numeric_diff_ignored? @string_numeric_diff_ignored end |
#tags_ignored? ⇒ Boolean
Returns ‘true` if tags are ignored when comparing resources.
403 404 405 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 403 def @tags_ignored end |
#version_equal? ⇒ Boolean
Returns ‘true` if baseline version is equal to preview version.
427 428 429 |
# File 'lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb', line 427 def version_equal? @version_equal end |