itchef/cookbooks/cpe_chrome/scripts/windows_policy_gen.rb (61 lines of code) (raw):
#!/opt/chefdk/embedded/bin/ruby
#
# Copyright (c) Facebook, Inc. and its affiliates.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
require 'pp'
require 'erb'
require 'inifile'
require 'json'
require_relative '../libraries/windows_chrome_settingv2'
def process_sections(settings, ini)
ini.sections.each do |s|
is_iterable_setting = ini[s].
keys.
map { |x| /^"\d+"$/.match?(x) }.
all?
if is_iterable_setting
setting = s.split('\\').last
settings[setting] = WindowsChromeIterableSetting.new(
s,
nil,
:string,
true,
)
next
end
ini[s].map do |k, v|
# TODO: In Ruby 2.7 change this to use pattern matching when it is
# supported.
type = if v =~ /dword:.*/
:dword
else
:string
end
setting = k.tr('"', '')
settings[setting] = WindowsChromeFlatSetting.new(
s, setting, type, false
)
end
end
end
reference_file = IniFile.load(File.join(__dir__, 'win_chrome_policy.reg'))
manual_file = IniFile.load(File.join(__dir__, 'win_chrome_manual_policy.reg'))
known_settings = {}
[reference_file, manual_file].map { |f| process_sections(known_settings, f) }
template = <<-'EOF'
#
# Cookbook Name:: cpe_chrome
# Library:: gen_windows_chrome_known_settings
#
# Copyright (c) Facebook, Inc. and its affiliates.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# rubocop:disable Metrics/LineLength
# @generated
require_relative 'windows_chrome_settingv2'
module CPE
module ChromeManagement
module KnownSettings
GENERATED = {
<% known_settings.map do |k,v| -%>
"<%= k -%>" => <%= v.generated_form.tr('"', '') -%>,
<% end -%>
}.freeze
end
end
end
# rubocop:enable Metrics/LineLength
EOF
IO.write(
File.join(
__dir__,
'..',
'libraries',
'gen_windows_chrome_known_settings.rb',
),
ERB.new(template, nil, '-').result,
)