Brief Description
-----------------
In a standard 2+2 system, the worker nodes are failing to unlock as the PTP puppet manifest fails to apply. The workers will be shown as disabled / failed
+----+--------------+-------------+----------------+-------------+--------------+
| id | hostname | personality | administrative | operational | availability |
+----+--------------+-------------+----------------+-------------+--------------+
| 1 | controller-0 | controller | unlocked | enabled | available |
| 2 | compute-0 | worker | unlocked | disabled | failed |
| 3 | compute-1 | worker | unlocked | disabled | failed |
| 4 | controller-1 | controller | unlocked | enabled | available |
+----+--------------+-------------+----------------+-------------+--------------+
Severity
--------
Critical: System/Feature is not usable due to the defect
Steps to Reproduce
------------------
Install a standard system with a load after the 28th of October
Expected Behavior
------------------
Workers should be able to unlock
Actual Behavior
----------------
Workers fail to unlock / apply their manifests
Reproducibility
---------------
100%
System Configuration
--------------------
<One node system, Two node system, Multi-node system, Dedicated storage, https, IPv4, IPv6 etc.>
Branch/Pull Time/Commit
-----------------------
master
BUILD_DATE="2019-10-28 17:31:18 -0500"
Workaround
-----------------------
Edit /usr/share/puppet/modules/platform/templates/ptp4l.conf.erb :
+<%- if @master_interfaces -%>
#
# Master interfaces
#
<%- @master_interfaces.each do |master_interface| -%>
[<%= master_interface %>]
<%- if scope['platform::ptp::transport'] == 'udp' -%>
network_transport UDPv<%= @master_subnet %>
<%- end -%>
<%- end -%>
+<%- end -%>
Timestamp/Logs
--------------
2019-10-29T14:24:02.010 Error: 2019-10-29 14:24:00 +0000 Evaluation Error: Error while evaluating a Function Call, Failed to parse template platform/ptp4l.conf.erb:
2019-10-29T14:24:02.013 Filepath: /usr/share/puppet/modules/platform/templates/ptp4l.conf.erb
2019-10-29T14:24:02.015 Line: 111
2019-10-29T14:24:02.017 Detail: undefined method `each' for nil:NilClass
2019-10-29T14:24:02.020 at /usr/share/puppet/modules/platform/manifests/ptp.pp:32:16 on node compute-0
2019-10-29T14:24:02.022 /usr/share/ruby/vendor_ruby/puppet/parser/functions/template.rb:26:in `rescue in block (2 levels) in <top (required)>'
2019-10-29T14:24:02.025 /usr/share/ruby/vendor_ruby/puppet/parser/functions/template.rb:22:in `block (2 levels) in <top (required)>'
2019-10-29T14:24:02.027 /usr/share/ruby/vendor_ruby/puppet/parser/functions/template.rb:15:in `collect'
2019-10-29T14:24:02.029 /usr/share/ruby/vendor_ruby/puppet/parser/functions/template.rb:15:in `block in <top (required)>'
2019-10-29T14:24:02.032 /usr/share/ruby/vendor_ruby/puppet/parser/functions.rb:174:in `block (2 levels) in newfunction'
2019-10-29T14:24:02.035 /usr/share/ruby/vendor_ruby/puppet/util/profiler/around_profiler.rb:58:in `profile'
2019-10-29T14:24:02.037 /usr/share/ruby/vendor_ruby/puppet/util/profiler.rb:51:in `profile'
2019-10-29T14:24:02.039 /usr/share/ruby/vendor_ruby/puppet/parser/functions.rb:167:in `block in newfunction'
2019-10-29T14:24:02.042 /usr/share/puppet/modules/platform/manifests/ptp.pp:32:in `stack'
2019-10-29T14:24:02.044 /usr/share/ruby/vendor_ruby/puppet/pops/puppet_stack.rb:30:in `eval'
2019-10-29T14:24:02.046 /usr/share/ruby/vendor_ruby/puppet/pops/puppet_stack.rb:30:in `stack'
2019-10-29T14:24:02.049 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/runtime3_support.rb:293:in `call_function'
2019-10-29T14:24:02.051 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:941:in `call_function_with_block'
2019-10-29T14:24:02.053 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:910:in `eval_CallNamedFunctionExpression'
2019-10-29T14:24:02.056 /usr/share/ruby/vendor_ruby/puppet/pops/visitor.rb:69:in `visit_this_1'
2019-10-29T14:24:02.058 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:82:in `evaluate'
2019-10-29T14:24:02.061 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:855:in `eval_AttributeOperation'
2019-10-29T14:24:02.063 /usr/share/ruby/vendor_ruby/puppet/pops/visitor.rb:69:in `visit_this_1'
2019-10-29T14:24:02.066 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:82:in `evaluate'
2019-10-29T14:24:02.069 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:822:in `block (2 levels) in eval_ResourceExpression'
2019-10-29T14:24:02.073 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:821:in `each'
2019-10-29T14:24:02.076 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:821:in `reduce'
2019-10-29T14:24:02.079 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:821:in `block in eval_ResourceExpression'
2019-10-29T14:24:02.083 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:782:in `map'
2019-10-29T14:24:02.086 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:782:in `eval_ResourceExpression'
2019-10-29T14:24:02.089 /usr/share/ruby/vendor_ruby/puppet/pops/visitor.rb:69:in `visit_this_1'
2019-10-29T14:24:02.093 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:82:in `evaluate'
2019-10-29T14:24:02.097 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:347:in `eval_BinaryExpression'
2019-10-29T14:24:02.101 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:465:in `eval_RelationshipExpression'
2019-10-29T14:24:02.105 /usr/share/ruby/vendor_ruby/puppet/pops/visitor.rb:69:in `visit_this_1'
2019-10-29T14:24:02.108 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:82:in `evaluate'
2019-10-29T14:24:02.112 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:347:in `eval_BinaryExpression'
2019-10-29T14:24:02.115 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:465:in `eval_RelationshipExpression'
2019-10-29T14:24:02.119 /usr/share/ruby/vendor_ruby/puppet/pops/visitor.rb:69:in `visit_this_1'
2019-10-29T14:24:02.122 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:82:in `evaluate'
2019-10-29T14:24:02.126 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:347:in `eval_BinaryExpression'
2019-10-29T14:24:02.129 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:465:in `eval_RelationshipExpression'
2019-10-29T14:24:02.133 /usr/share/ruby/vendor_ruby/puppet/pops/visitor.rb:69:in `visit_this_1'
2019-10-29T14:24:02.136 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:82:in `evaluate'
2019-10-29T14:24:02.139 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:347:in `eval_BinaryExpression'
2019-10-29T14:24:02.142 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:465:in `eval_RelationshipExpression'
2019-10-29T14:24:02.144 /usr/share/ruby/vendor_ruby/puppet/pops/visitor.rb:69:in `visit_this_1'
2019-10-29T14:24:02.147 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:82:in `evaluate'
2019-10-29T14:24:02.149 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:347:in `eval_BinaryExpression'
2019-10-29T14:24:02.151 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:465:in `eval_RelationshipExpression'
2019-10-29T14:24:02.154 /usr/share/ruby/vendor_ruby/puppet/pops/visitor.rb:69:in `visit_this_1'
2019-10-29T14:24:02.156 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:82:in `evaluate'
2019-10-29T14:24:02.159 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:638:in `block in eval_BlockExpression'
2019-10-29T14:24:02.161 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:638:in `each'
2019-10-29T14:24:02.164 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:638:in `reduce'
2019-10-29T14:24:02.166 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:638:in `eval_BlockExpression'
2019-10-29T14:24:02.169 /usr/share/ruby/vendor_ruby/puppet/pops/visitor.rb:69:in `visit_this_1'
2019-10-29T14:24:02.171 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:82:in `evaluate'
2019-10-29T14:24:02.173 /usr/share/ruby/vendor_ruby/puppet/pops/parser/evaluating_parser.rb:63:in `evaluate'
2019-10-29T14:24:02.176 /usr/share/ruby/vendor_ruby/puppet/parser/ast/pops_bridge.rb:32:in `evaluate'
2019-10-29T14:24:02.178 /usr/share/ruby/vendor_ruby/puppet/parser/ast/pops_bridge.rb:72:in `block (2 levels) in evaluate'
2019-10-29T14:24:02.180 /usr/share/ruby/vendor_ruby/puppet/parser/ast/pops_bridge.rb:71:in `catch'
2019-10-29T14:24:02.183 /usr/share/ruby/vendor_ruby/puppet/parser/ast/pops_bridge.rb:71:in `block in evaluate'
2019-10-29T14:24:02.185 /usr/share/ruby/vendor_ruby/puppet/parser/ast/pops_bridge.rb:70:in `catch'
2019-10-29T14:24:02.188 /usr/share/ruby/vendor_ruby/puppet/parser/ast/pops_bridge.rb:70:in `evaluate'
2019-10-29T14:24:02.191 /usr/share/ruby/vendor_ruby/puppet/parser/ast.rb:31:in `safeevaluate'
2019-10-29T14:24:02.193 /usr/share/ruby/vendor_ruby/puppet/resource/type.rb:184:in `evaluate_code'
2019-10-29T14:24:02.197 /usr/share/ruby/vendor_ruby/puppet/parser/resource.rb:81:in `block in evaluate'
2019-10-29T14:24:02.200 /usr/share/ruby/vendor_ruby/puppet/util/profiler/around_profiler.rb:58:in `profile'
2019-10-29T14:24:02.203 /usr/share/ruby/vendor_ruby/puppet/util/profiler.rb:51:in `profile'
2019-10-29T14:24:02.206 /usr/share/ruby/vendor_ruby/puppet/parser/resource.rb:73:in `evaluate'
2019-10-29T14:24:02.210 /usr/share/ruby/vendor_ruby/puppet/parser/compiler.rb:395:in `each'
2019-10-29T14:24:02.213 /usr/share/ruby/vendor_ruby/puppet/parser/compiler.rb:395:in `evaluate_classes'
2019-10-29T14:24:02.217 /usr/share/ruby/vendor_ruby/puppet/pops/loader/../../../puppet/functions/include.rb:16:in `include'
2019-10-29T14:24:02.220 /usr/share/ruby/vendor_ruby/puppet/pops/functions/dispatch.rb:47:in `invoke'
2019-10-29T14:24:02.224 /usr/share/ruby/vendor_ruby/puppet/pops/functions/dispatcher.rb:36:in `block in dispatch'
2019-10-29T14:24:02.228 /usr/share/ruby/vendor_ruby/puppet/pops/functions/dispatcher.rb:35:in `catch'
2019-10-29T14:24:02.235 /usr/share/ruby/vendor_ruby/puppet/pops/functions/dispatcher.rb:35:in `dispatch'
2019-10-29T14:24:02.239 /usr/share/ruby/vendor_ruby/puppet/pops/functions/function.rb:46:in `block in call'
2019-10-29T14:24:02.242 /usr/share/ruby/vendor_ruby/puppet/pops/functions/function.rb:45:in `catch'
2019-10-29T14:24:02.245 /usr/share/ruby/vendor_ruby/puppet/pops/functions/function.rb:45:in `call'
2019-10-29T14:24:02.248 /etc/puppet/manifests/worker.pp:23:in `block in call_function'
2019-10-29T14:24:02.250 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/runtime3_support.rb:284:in `eval'
2019-10-29T14:24:02.253 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/runtime3_support.rb:284:in `block in call_function'
2019-10-29T14:24:02.255 /usr/share/ruby/vendor_ruby/puppet/util/profiler/around_profiler.rb:58:in `profile'
2019-10-29T14:24:02.258 /usr/share/ruby/vendor_ruby/puppet/util/profiler.rb:51:in `profile'
2019-10-29T14:24:02.261 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/runtime3_support.rb:282:in `call_function'
2019-10-29T14:24:02.263 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:941:in `call_function_with_block'
2019-10-29T14:24:02.265 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:910:in `eval_CallNamedFunctionExpression'
2019-10-29T14:24:02.267 /usr/share/ruby/vendor_ruby/puppet/pops/visitor.rb:69:in `visit_this_1'
2019-10-29T14:24:02.270 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:82:in `evaluate'
2019-10-29T14:24:02.272 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:638:in `block in eval_BlockExpression'
2019-10-29T14:24:02.275 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:638:in `each'
2019-10-29T14:24:02.277 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:638:in `reduce'
2019-10-29T14:24:02.279 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:638:in `eval_BlockExpression'
2019-10-29T14:24:02.282 /usr/share/ruby/vendor_ruby/puppet/pops/visitor.rb:48:in `block in visit_this'
2019-10-29T14:24:02.285 /usr/share/ruby/vendor_ruby/puppet/pops/visitor.rb:42:in `each'
2019-10-29T14:24:02.287 /usr/share/ruby/vendor_ruby/puppet/pops/visitor.rb:42:in `visit_this'
2019-10-29T14:24:02.290 /usr/share/ruby/vendor_ruby/puppet/pops/visitor.rb:71:in `visit_this_1'
2019-10-29T14:24:02.292 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:82:in `evaluate'
2019-10-29T14:24:02.295 /etc/puppet/manifests/worker.pp:in `stack'
2019-10-29T14:24:02.297 /usr/share/ruby/vendor_ruby/puppet/pops/puppet_stack.rb:30:in `eval'
2019-10-29T14:24:02.300 /usr/share/ruby/vendor_ruby/puppet/pops/puppet_stack.rb:30:in `stack'
2019-10-29T14:24:02.302 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:715:in `eval_Program'
2019-10-29T14:24:02.305 /usr/share/ruby/vendor_ruby/puppet/pops/visitor.rb:48:in `block in visit_this'
2019-10-29T14:24:02.307 /usr/share/ruby/vendor_ruby/puppet/pops/visitor.rb:42:in `each'
2019-10-29T14:24:02.310 /usr/share/ruby/vendor_ruby/puppet/pops/visitor.rb:42:in `visit_this'
2019-10-29T14:24:02.313 /usr/share/ruby/vendor_ruby/puppet/pops/visitor.rb:71:in `visit_this_1'
2019-10-29T14:24:02.315 /usr/share/ruby/vendor_ruby/puppet/pops/evaluator/evaluator_impl.rb:82:in `evaluate'
2019-10-29T14:24:02.317 /usr/share/ruby/vendor_ruby/puppet/pops/parser/evaluating_parser.rb:63:in `evaluate'
2019-10-29T14:24:02.320 /usr/share/ruby/vendor_ruby/puppet/parser/ast/pops_bridge.rb:132:in `evaluate'
2019-10-29T14:24:02.323 /usr/share/ruby/vendor_ruby/puppet/parser/ast.rb:31:in `safeevaluate'
2019-10-29T14:24:02.326 /usr/share/ruby/vendor_ruby/puppet/resource/type.rb:184:in `evaluate_code'
2019-10-29T14:24:02.329 /usr/share/ruby/vendor_ruby/puppet/parser/resource.rb:81:in `block in evaluate'
2019-10-29T14:24:02.332 /usr/share/ruby/vendor_ruby/puppet/util/profiler/around_profiler.rb:58:in `profile'
2019-10-29T14:24:02.335 /usr/share/ruby/vendor_ruby/puppet/util/profiler.rb:51:in `profile'
2019-10-29T14:24:02.339 /usr/share/ruby/vendor_ruby/puppet/parser/resource.rb:73:in `evaluate'
2019-10-29T14:24:02.342 /usr/share/ruby/vendor_ruby/puppet/parser/compiler.rb:639:in `evaluate_main'
2019-10-29T14:24:02.346 /usr/share/ruby/vendor_ruby/puppet/parser/compiler.rb:174:in `block (2 levels) in compile'
2019-10-29T14:24:02.349 /usr/share/ruby/vendor_ruby/puppet/util/profiler/around_profiler.rb:58:in `profile'
2019-10-29T14:24:02.352 /usr/share/ruby/vendor_ruby/puppet/util/profiler.rb:51:in `profile'
2019-10-29T14:24:02.355 /usr/share/ruby/vendor_ruby/puppet/parser/compiler.rb:174:in `block in compile'
2019-10-29T14:24:02.361 /usr/share/ruby/vendor_ruby/puppet/context.rb:65:in `override'
2019-10-29T14:24:02.363 /usr/share/ruby/vendor_ruby/puppet.rb:241:in `override'
2019-10-29T14:24:02.367 /usr/share/ruby/vendor_ruby/puppet/parser/compiler.rb:162:in `compile'
2019-10-29T14:24:02.371 /usr/share/ruby/vendor_ruby/puppet/parser/compiler.rb:33:in `compile'
2019-10-29T14:24:02.373 /usr/share/ruby/vendor_ruby/puppet/indirector/catalog/compiler.rb:266:in `block (2 levels) in compile'
2019-10-29T14:24:02.375 /usr/share/ruby/vendor_ruby/puppet/util/profiler/around_profiler.rb:58:in `profile'
2019-10-29T14:24:02.378 /usr/share/ruby/vendor_ruby/puppet/util/profiler.rb:51:in `profile'
2019-10-29T14:24:02.380 /usr/share/ruby/vendor_ruby/puppet/indirector/catalog/compiler.rb:264:in `block in compile'
2019-10-29T14:24:02.383 /usr/share/ruby/vendor_ruby/puppet/util.rb:223:in `block in benchmark'
2019-10-29T14:24:02.386 /usr/share/ruby/benchmark.rb:296:in `realtime'
2019-10-29T14:24:02.388 /usr/share/ruby/vendor_ruby/puppet/util.rb:222:in `benchmark'
2019-10-29T14:24:02.391 /usr/share/ruby/vendor_ruby/puppet/indirector/catalog/compiler.rb:262:in `compile'
2019-10-29T14:24:02.394 /usr/share/ruby/vendor_ruby/puppet/indirector/catalog/compiler.rb:53:in `find'
2019-10-29T14:24:02.396 /usr/share/ruby/vendor_ruby/puppet/indirector/indirection.rb:194:in `find'
2019-10-29T14:24:02.398 /usr/share/ruby/vendor_ruby/puppet/application/apply.rb:256:in `block in main'
2019-10-29T14:24:02.401 /usr/share/ruby/vendor_ruby/puppet/context.rb:65:in `override'
2019-10-29T14:24:02.404 /usr/share/ruby/vendor_ruby/puppet.rb:241:in `override'
2019-10-29T14:24:02.406 /usr/share/ruby/vendor_ruby/puppet/application/apply.rb:225:in `main'
2019-10-29T14:24:02.409 /usr/share/ruby/vendor_ruby/puppet/application/apply.rb:170:in `run_command'
2019-10-29T14:24:02.411 /usr/share/ruby/vendor_ruby/puppet/application.rb:344:in `block in run'
2019-10-29T14:24:02.414 /usr/share/ruby/vendor_ruby/puppet/util.rb:540:in `exit_on_fail'
2019-10-29T14:24:02.416 /usr/share/ruby/vendor_ruby/puppet/application.rb:344:in `run'
2019-10-29T14:24:02.419 /usr/share/ruby/vendor_ruby/puppet/util/command_line.rb:132:in `run'
2019-10-29T14:24:02.422 /usr/share/ruby/vendor_ruby/puppet/util/command_line.rb:72:in `execute'
2019-10-29T14:24:02.424 /usr/bin/puppet:5:in `<main>'
Test Activity
-------------
Developer testing
The same issue was reported in sanity. See https:/ /bugs.launchpad .net/starlingx/ +bug/1850462