Avoid activesupport deep_merge conflict
github-changelog-generator depends on activesupport which defines
`Hash#deep_merge` methods that behave differently and conflict with the
ones from the `deep_merge` gem. Use the recommended way of avoiding this
conflict, as per the `deep_merge` documentation.[1]
Also, revert the changes from #209 which cause unexpected behavior with
generated fixtures.
[1] https://github.com/danielsdeleo/deep_merge#using-deep_merge-in-rails
Gabriel Nagy
2 years ago
1923 | 1923 |
def get_osinfo(bhg_version)
|
1924 | 1924 |
case bhg_version
|
1925 | 1925 |
when 0
|
1926 | |
{}.deep_merge!(osinfo)
|
|
1926 |
{}.deeper_merge!(osinfo)
|
1927 | 1927 |
when 1
|
1928 | |
{}.deep_merge!(osinfo).deep_merge!(osinfo_bhgv1)
|
|
1928 |
{}.deeper_merge!(osinfo).deeper_merge!(osinfo_bhgv1)
|
1929 | 1929 |
else
|
1930 | 1930 |
raise "Invalid beaker-hostgenerator version: #{bhg_version}"
|
1931 | 1931 |
end
|
|
1969 | 1969 |
# }
|
1970 | 1970 |
def get_platform_info(bhg_version, platform, hypervisor)
|
1971 | 1971 |
info = get_osinfo(bhg_version)[platform]
|
1972 | |
result = {}
|
1973 | |
result.deep_merge!(info[:general]) if info[:general]
|
1974 | |
result.deep_merge!(info[hypervisor]) if info[hypervisor]
|
1975 | |
result
|
|
1972 |
{}.deeper_merge!(info[:general]).deeper_merge!(info[hypervisor])
|
1976 | 1973 |
end
|
1977 | 1974 |
|
1978 | 1975 |
# Perform any adjustments or modifications necessary to the given node
|
21 | 21 |
def generate(layout, options)
|
22 | 22 |
layout = prepare(layout)
|
23 | 23 |
tokens = tokenize_layout(layout)
|
24 | |
config = {}.deep_merge(BASE_CONFIG)
|
|
24 |
config = {}.deeper_merge(BASE_CONFIG)
|
25 | 25 |
nodeid = Hash.new(1)
|
26 | 26 |
ostype = nil
|
27 | 27 |
bhg_version = options[:osinfo_version] || 0
|
|
50 | 50 |
# Delegate to the hypervisor
|
51 | 51 |
hypervisor = BeakerHostGenerator::Hypervisor.create(node_info, options)
|
52 | 52 |
host_config = hypervisor.generate_node(node_info, host_config, bhg_version)
|
53 | |
config['CONFIG'].deep_merge!(hypervisor.global_config())
|
|
53 |
config['CONFIG'].deeper_merge!(hypervisor.global_config())
|
54 | 54 |
|
55 | 55 |
# Merge in any arbitrary key-value host settings. Treat the 'hostname'
|
56 | 56 |
# setting specially, and don't merge it in as an arbitrary setting.
|
|
79 | 79 |
decoded = "{#{decoded}}"
|
80 | 80 |
end
|
81 | 81 |
global_config = settings_string_to_map(decoded)
|
82 | |
config['CONFIG'].deep_merge!(global_config)
|
|
82 |
config['CONFIG'].deeper_merge!(global_config)
|
83 | 83 |
end
|
84 | 84 |
|
85 | 85 |
# Munge non-string scalar values into proper data types
|
|
116 | 116 |
|
117 | 117 |
if not options[:disable_role_config]
|
118 | 118 |
host_config['roles'].each do |role|
|
119 | |
host_config.deep_merge! get_role_config(role)
|
|
119 |
host_config.deeper_merge! get_role_config(role)
|
120 | 120 |
end
|
121 | 121 |
end
|
122 | 122 |
end
|
0 | 0 |
require 'beaker-hostgenerator/data'
|
1 | 1 |
require 'beaker-hostgenerator/hypervisor'
|
2 | |
require 'deep_merge'
|
|
2 |
require 'deep_merge/rails_compat'
|
3 | 3 |
|
4 | 4 |
module BeakerHostGenerator
|
5 | 5 |
module Hypervisor
|
0 | 0 |
require 'beaker-hostgenerator/data'
|
1 | 1 |
require 'beaker-hostgenerator/hypervisor'
|
2 | |
require 'deep_merge'
|
|
2 |
require 'deep_merge/rails_compat'
|
3 | 3 |
|
4 | 4 |
module BeakerHostGenerator
|
5 | 5 |
module Hypervisor
|
0 | 0 |
require 'beaker-hostgenerator/hypervisor'
|
1 | 1 |
require 'beaker-hostgenerator/data'
|
2 | |
require 'deep_merge'
|
|
2 |
require 'deep_merge/rails_compat'
|
3 | 3 |
|
4 | 4 |
module BeakerHostGenerator::Hypervisor
|
5 | 5 |
class Unknown < BeakerHostGenerator::Hypervisor::Interface
|
0 | 0 |
require 'beaker-hostgenerator/data'
|
1 | 1 |
require 'beaker-hostgenerator/hypervisor'
|
2 | |
require 'deep_merge'
|
|
2 |
require 'deep_merge/rails_compat'
|
3 | 3 |
|
4 | 4 |
module BeakerHostGenerator
|
5 | 5 |
module Hypervisor
|
0 | 0 |
require 'beaker-hostgenerator/data'
|
1 | 1 |
require 'beaker-hostgenerator/hypervisor'
|
2 | |
require 'deep_merge'
|
|
2 |
require 'deep_merge/rails_compat'
|
3 | 3 |
|
4 | 4 |
module BeakerHostGenerator
|
5 | 5 |
module Hypervisor
|
93 | 93 |
def base_generate_node(node_info, base_config, bhg_version, *hypervisors)
|
94 | 94 |
platform = node_info['platform']
|
95 | 95 |
hypervisors.map do |hypervisor|
|
96 | |
base_config.deep_merge! get_platform_info(bhg_version, platform, hypervisor)
|
|
96 |
base_config.deeper_merge! get_platform_info(bhg_version, platform, hypervisor)
|
97 | 97 |
end
|
98 | 98 |
|
99 | 99 |
base_config['hypervisor'] = @name
|
0 | 0 |
require 'beaker-hostgenerator/data'
|
1 | 1 |
require 'beaker-hostgenerator/roles'
|
2 | 2 |
require 'beaker-hostgenerator/hypervisor/vmpooler'
|
3 | |
require 'deep_merge'
|
|
3 |
require 'deep_merge/rails_compat'
|
4 | 4 |
|
5 | 5 |
module BeakerHostGenerator
|
6 | 6 |
module Utils
|
|
17 | 17 |
def dump_hosts(hosts, path)
|
18 | 18 |
vmpooler_hypervisor = BeakerHostGenerator::Hypervisor::Vmpooler.new
|
19 | 19 |
config = {}
|
20 | |
config.deep_merge! BeakerHostGenerator::Data.BASE_CONFIG
|
21 | |
config['CONFIG'].deep_merge! vmpooler_hypervisor.global_config()
|
|
20 |
config.deeper_merge! BeakerHostGenerator::Data.BASE_CONFIG
|
|
21 |
config['CONFIG'].deeper_merge! vmpooler_hypervisor.global_config()
|
22 | 22 |
|
23 | 23 |
hosts.each do |host|
|
24 | 24 |
config['HOSTS'][host.node_name] = {
|