@@ -31,7 +31,50 @@ def load_raw_config(config_file:, destination: nil)
3131
3232 private
3333 def load_config_files ( *files )
34- files . inject ( { } ) { |config , file | config . deep_merge! load_config_file ( file ) }
34+ files . inject ( { } ) { |config , file | merge_config_file ( config , load_config_file ( file ) ) }
35+ end
36+
37+ def merge_config_file ( config , overrides )
38+ remove_replaced_proxy_host_keys ( config , overrides )
39+ config . deep_merge! overrides
40+ end
41+
42+ def remove_replaced_proxy_host_keys ( config , overrides )
43+ remove_replaced_host_key value_for ( config , :proxy ) , value_for ( overrides , :proxy )
44+ remove_replaced_role_proxy_host_keys value_for ( config , :servers ) , value_for ( overrides , :servers )
45+ end
46+
47+ def remove_replaced_role_proxy_host_keys ( config , overrides )
48+ return unless config . is_a? ( Hash ) && overrides . is_a? ( Hash )
49+
50+ overrides . each do |role , role_overrides |
51+ role_config = value_for ( config , role )
52+ remove_replaced_host_key value_for ( role_config , "proxy" ) , value_for ( role_overrides , "proxy" )
53+ end
54+ end
55+
56+ def remove_replaced_host_key ( config , overrides )
57+ return unless config . is_a? ( Hash ) && overrides . is_a? ( Hash )
58+
59+ delete_key ( config , "host" ) if has_key? ( overrides , "hosts" )
60+ delete_key ( config , "hosts" ) if has_key? ( overrides , "host" )
61+ end
62+
63+ def has_key? ( config , key )
64+ config . key? ( key ) || config . key? ( key . to_sym )
65+ end
66+
67+ def delete_key ( config , key )
68+ config . delete ( key )
69+ config . delete ( key . to_sym )
70+ end
71+
72+ def value_for ( config , key )
73+ return unless config . is_a? ( Hash )
74+
75+ alternate_key = key . is_a? ( Symbol ) ? key . to_s : key . to_sym
76+ return config [ key ] if config . key? ( key )
77+ config [ alternate_key ] if config . key? ( alternate_key )
3578 end
3679
3780 def load_config_file ( file )
0 commit comments