chef 17.1.35-universal-mingw32 → 17.4.38-universal-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +6 -4
- data/chef.gemspec +1 -0
- data/lib/chef/action_collection.rb +6 -26
- data/lib/chef/application/base.rb +15 -0
- data/lib/chef/application.rb +4 -2
- data/lib/chef/client.rb +7 -1
- data/lib/chef/compliance/default_attributes.rb +5 -3
- data/lib/chef/compliance/reporter/automate.rb +1 -1
- data/lib/chef/compliance/runner.rb +16 -2
- data/lib/chef/cookbook_version.rb +26 -4
- data/lib/chef/data_collector/run_end_message.rb +1 -1
- data/lib/chef/data_collector.rb +0 -1
- data/lib/chef/deprecated.rb +14 -4
- data/lib/chef/dsl/render_helpers.rb +44 -0
- data/lib/chef/dsl/secret.rb +64 -0
- data/lib/chef/dsl/toml.rb +116 -0
- data/lib/chef/dsl/universal.rb +5 -0
- data/lib/chef/dsl.rb +1 -0
- data/lib/chef/event_dispatch/base.rb +2 -1
- data/lib/chef/exceptions.rb +23 -0
- data/lib/chef/formatters/doc.rb +14 -13
- data/lib/chef/formatters/error_mapper.rb +2 -2
- data/lib/chef/formatters/minimal.rb +6 -5
- data/lib/chef/handler/slow_report.rb +66 -0
- data/lib/chef/handler.rb +46 -8
- data/lib/chef/http.rb +5 -5
- data/lib/chef/json_compat.rb +1 -1
- data/lib/chef/node.rb +20 -19
- data/lib/chef/policy_builder/policyfile.rb +88 -45
- data/lib/chef/provider/execute.rb +1 -1
- data/lib/chef/provider/file.rb +2 -2
- data/lib/chef/provider/group/dscl.rb +1 -1
- data/lib/chef/provider/launchd.rb +6 -6
- data/lib/chef/provider/lwrp_base.rb +1 -1
- data/lib/chef/provider/package/habitat.rb +168 -0
- data/lib/chef/provider/package/powershell.rb +5 -0
- data/lib/chef/provider/subversion.rb +4 -4
- data/lib/chef/provider/support/yum_repo.erb +1 -1
- data/lib/chef/provider/support/zypper_repo.erb +4 -2
- data/lib/chef/provider/systemd_unit.rb +17 -16
- data/lib/chef/provider/user/mac.rb +3 -3
- data/lib/chef/provider/yum_repository.rb +27 -43
- data/lib/chef/provider/zypper_repository.rb +30 -34
- data/lib/chef/provider.rb +26 -1
- data/lib/chef/provider_resolver.rb +8 -2
- data/lib/chef/providers.rb +1 -0
- data/lib/chef/resource/alternatives.rb +5 -5
- data/lib/chef/resource/apt_preference.rb +2 -2
- data/lib/chef/resource/apt_repository.rb +2 -2
- data/lib/chef/resource/apt_update.rb +4 -4
- data/lib/chef/resource/build_essential.rb +1 -1
- data/lib/chef/resource/chef_client_config.rb +10 -5
- data/lib/chef/resource/chef_client_cron.rb +3 -3
- data/lib/chef/resource/chef_client_launchd.rb +3 -3
- data/lib/chef/resource/chef_client_scheduled_task.rb +15 -15
- data/lib/chef/resource/chef_client_systemd_timer.rb +3 -3
- data/lib/chef/resource/chef_client_trusted_certificate.rb +2 -2
- data/lib/chef/resource/chef_handler.rb +2 -2
- data/lib/chef/resource/chef_sleep.rb +1 -1
- data/lib/chef/resource/chef_vault_secret.rb +2 -2
- data/lib/chef/resource/chocolatey_feature.rb +2 -2
- data/lib/chef/resource/chocolatey_source.rb +1 -1
- data/lib/chef/resource/cron/cron_d.rb +4 -6
- data/lib/chef/resource/cron_access.rb +1 -1
- data/lib/chef/resource/dmg_package.rb +1 -1
- data/lib/chef/resource/dsc_resource.rb +1 -1
- data/lib/chef/resource/execute.rb +5 -5
- data/lib/chef/resource/gem_package.rb +2 -1
- data/lib/chef/resource/group.rb +4 -4
- data/lib/chef/resource/habitat/_habitat_shared.rb +28 -0
- data/lib/chef/resource/habitat/habitat_package.rb +129 -0
- data/lib/chef/resource/habitat/habitat_sup.rb +329 -0
- data/lib/chef/resource/habitat/habitat_sup_systemd.rb +67 -0
- data/lib/chef/resource/habitat/habitat_sup_windows.rb +90 -0
- data/lib/chef/resource/habitat_config.rb +107 -0
- data/lib/chef/resource/habitat_install.rb +247 -0
- data/lib/chef/resource/habitat_service.rb +451 -0
- data/lib/chef/resource/habitat_user_toml.rb +92 -0
- data/lib/chef/resource/homebrew_cask.rb +18 -7
- data/lib/chef/resource/homebrew_package.rb +1 -1
- data/lib/chef/resource/homebrew_tap.rb +4 -3
- data/lib/chef/resource/homebrew_update.rb +2 -2
- data/lib/chef/resource/hostname.rb +49 -7
- data/lib/chef/resource/inspec_waiver_file_entry.rb +8 -7
- data/lib/chef/resource/kernel_module.rb +6 -6
- data/lib/chef/resource/launchd.rb +3 -3
- data/lib/chef/resource/locale.rb +1 -1
- data/lib/chef/resource/lwrp_base.rb +1 -1
- data/lib/chef/resource/macos_userdefaults.rb +2 -2
- data/lib/chef/resource/ohai_hint.rb +2 -6
- data/lib/chef/resource/openbsd_package.rb +17 -0
- data/lib/chef/resource/openssl_dhparam.rb +1 -2
- data/lib/chef/resource/openssl_ec_private_key.rb +1 -3
- data/lib/chef/resource/openssl_ec_public_key.rb +1 -3
- data/lib/chef/resource/openssl_rsa_private_key.rb +1 -3
- data/lib/chef/resource/openssl_rsa_public_key.rb +1 -3
- data/lib/chef/resource/openssl_x509_certificate.rb +1 -4
- data/lib/chef/resource/openssl_x509_crl.rb +1 -3
- data/lib/chef/resource/openssl_x509_request.rb +1 -3
- data/lib/chef/resource/osx_profile.rb +3 -3
- data/lib/chef/resource/plist.rb +1 -1
- data/lib/chef/resource/powershell_package_source.rb +2 -4
- data/lib/chef/resource/reboot.rb +38 -9
- data/lib/chef/resource/remote_directory.rb +2 -2
- data/lib/chef/resource/remote_file.rb +1 -1
- data/lib/chef/resource/rhsm_errata.rb +0 -2
- data/lib/chef/resource/rhsm_errata_level.rb +1 -5
- data/lib/chef/resource/rhsm_repo.rb +15 -0
- data/lib/chef/resource/rhsm_subscription.rb +5 -5
- data/lib/chef/resource/ruby_block.rb +100 -0
- data/lib/chef/resource/scm/subversion.rb +1 -1
- data/lib/chef/resource/ssh_known_hosts_entry.rb +4 -7
- data/lib/chef/resource/sudo.rb +2 -6
- data/lib/chef/resource/support/HabService.dll.config.erb +19 -0
- data/lib/chef/resource/support/client.erb +8 -1
- data/lib/chef/resource/support/sup.toml.erb +179 -0
- data/lib/chef/resource/swap_file.rb +2 -6
- data/lib/chef/resource/sysctl.rb +2 -2
- data/lib/chef/resource/systemd_unit.rb +3 -3
- data/lib/chef/resource/timezone.rb +1 -1
- data/lib/chef/resource/user_ulimit.rb +2 -2
- data/lib/chef/resource/windows_ad_join.rb +2 -2
- data/lib/chef/resource/windows_audit_policy.rb +2 -2
- data/lib/chef/resource/windows_auto_run.rb +2 -2
- data/lib/chef/resource/windows_certificate.rb +1 -1
- data/lib/chef/resource/windows_defender.rb +163 -0
- data/lib/chef/resource/windows_defender_exclusion.rb +125 -0
- data/lib/chef/resource/windows_dfs_folder.rb +2 -2
- data/lib/chef/resource/windows_dfs_namespace.rb +2 -2
- data/lib/chef/resource/windows_dns_record.rb +2 -2
- data/lib/chef/resource/windows_dns_zone.rb +2 -2
- data/lib/chef/resource/windows_feature.rb +3 -3
- data/lib/chef/resource/windows_feature_dism.rb +3 -5
- data/lib/chef/resource/windows_feature_powershell.rb +3 -3
- data/lib/chef/resource/windows_firewall_profile.rb +2 -2
- data/lib/chef/resource/windows_firewall_rule.rb +20 -6
- data/lib/chef/resource/windows_font.rb +1 -1
- data/lib/chef/resource/windows_pagefile.rb +103 -64
- data/lib/chef/resource/windows_path.rb +2 -2
- data/lib/chef/resource/windows_printer.rb +80 -61
- data/lib/chef/resource/windows_printer_port.rb +48 -65
- data/lib/chef/resource/windows_security_policy.rb +2 -2
- data/lib/chef/resource/windows_share.rb +2 -2
- data/lib/chef/resource/windows_shortcut.rb +1 -1
- data/lib/chef/resource/windows_task.rb +1 -1
- data/lib/chef/resource/windows_uac.rb +3 -5
- data/lib/chef/resource/windows_update_settings.rb +259 -0
- data/lib/chef/resource/windows_user_privilege.rb +2 -2
- data/lib/chef/resource/windows_workgroup.rb +2 -2
- data/lib/chef/resource/yum_package.rb +11 -15
- data/lib/chef/resource/zypper_package.rb +4 -4
- data/lib/chef/resource/zypper_repository.rb +28 -8
- data/lib/chef/resource.rb +13 -17
- data/lib/chef/resource_inspector.rb +6 -2
- data/lib/chef/resource_reporter.rb +0 -1
- data/lib/chef/resources.rb +12 -1
- data/lib/chef/secret_fetcher/aws_secrets_manager.rb +65 -0
- data/lib/chef/secret_fetcher/azure_key_vault.rb +78 -0
- data/lib/chef/secret_fetcher/base.rb +76 -0
- data/lib/chef/secret_fetcher/example.rb +46 -0
- data/lib/chef/secret_fetcher.rb +55 -0
- data/lib/chef/version.rb +1 -1
- data/spec/functional/mixin/from_file_spec.rb +1 -1
- data/spec/functional/resource/windows_hostname_spec.rb +91 -0
- data/spec/functional/resource/windows_pagefile_spec.rb +98 -0
- data/spec/integration/compliance/compliance_spec.rb +1 -0
- data/spec/integration/recipes/recipe_dsl_spec.rb +1 -1
- data/spec/integration/recipes/resource_action_spec.rb +6 -6
- data/spec/support/shared/unit/provider/file.rb +2 -8
- data/spec/unit/compliance/runner_spec.rb +46 -2
- data/spec/unit/cookbook_version_spec.rb +52 -0
- data/spec/unit/data_collector_spec.rb +47 -1
- data/spec/unit/dsl/render_helpers_spec.rb +102 -0
- data/spec/unit/dsl/secret_spec.rb +71 -0
- data/spec/unit/formatters/doc_spec.rb +1 -1
- data/spec/unit/handler_spec.rb +8 -2
- data/spec/unit/policy_builder/dynamic_spec.rb +0 -5
- data/spec/unit/policy_builder/policyfile_spec.rb +144 -56
- data/spec/unit/provider/apt_update_spec.rb +3 -1
- data/spec/unit/provider/mount/aix_spec.rb +1 -1
- data/spec/unit/provider/package/powershell_spec.rb +74 -12
- data/spec/unit/provider/zypper_repository_spec.rb +3 -10
- data/spec/unit/provider_spec.rb +23 -0
- data/spec/unit/resource/homebrew_cask_spec.rb +29 -11
- data/spec/unit/resource/rhsm_subscription_spec.rb +50 -3
- data/spec/unit/resource/systemd_unit_spec.rb +1 -1
- data/spec/unit/resource/windows_defender_exclusion_spec.rb +62 -0
- data/spec/unit/resource/windows_defender_spec.rb +71 -0
- data/spec/unit/resource/windows_firewall_rule_spec.rb +12 -7
- data/spec/unit/resource/windows_pagefile_spec.rb +4 -9
- data/spec/unit/resource/windows_update_settings_spec.rb +64 -0
- data/spec/unit/resource/zypper_repository_spec.rb +1 -1
- data/spec/unit/resource_spec.rb +19 -8
- data/spec/unit/secret_fetcher/aws_secrets_manager_spec.rb +70 -0
- data/spec/unit/secret_fetcher/azure_key_vault_spec.rb +70 -0
- data/spec/unit/secret_fetcher_spec.rb +82 -0
- metadata +55 -7
@@ -0,0 +1,67 @@
|
|
1
|
+
#
|
2
|
+
# Copyright:: Chef Software, Inc.
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
|
18
|
+
require_relative "habitat_sup"
|
19
|
+
|
20
|
+
class Chef
|
21
|
+
class Resource
|
22
|
+
class HabitatSupSystemd < HabitatSup
|
23
|
+
provides :habitat_sup, os: "linux"
|
24
|
+
provides :habitat_sup_systemd
|
25
|
+
|
26
|
+
action :run do
|
27
|
+
super()
|
28
|
+
|
29
|
+
service_environment = []
|
30
|
+
service_environment.push("HAB_BLDR_URL=#{new_resource.bldr_url}") if new_resource.bldr_url
|
31
|
+
service_environment.push("HAB_AUTH_TOKEN=#{new_resource.auth_token}") if new_resource.auth_token
|
32
|
+
service_environment.push("HAB_SUP_GATEWAY_AUTH_TOKEN=#{new_resource.gateway_auth_token}") if new_resource.gateway_auth_token
|
33
|
+
systemd_unit "hab-sup.service" do
|
34
|
+
content(Unit: {
|
35
|
+
Description: "The Habitat Supervisor",
|
36
|
+
},
|
37
|
+
Service: {
|
38
|
+
LimitNOFILE: new_resource.limit_no_files,
|
39
|
+
Environment: service_environment,
|
40
|
+
ExecStart: "/bin/hab sup run #{exec_start_options}",
|
41
|
+
ExecStop: "/bin/hab sup term",
|
42
|
+
Restart: "on-failure",
|
43
|
+
}.compact,
|
44
|
+
Install: {
|
45
|
+
WantedBy: "default.target",
|
46
|
+
})
|
47
|
+
action :create
|
48
|
+
end
|
49
|
+
|
50
|
+
service "hab-sup" do
|
51
|
+
subscribes :restart, "systemd_unit[hab-sup.service]"
|
52
|
+
subscribes :restart, "habitat_package[core/hab-sup]"
|
53
|
+
subscribes :restart, "habitat_package[core/hab-launcher]"
|
54
|
+
subscribes :restart, "template[/hab/sup/default/config/sup.toml]"
|
55
|
+
action %i{enable start}
|
56
|
+
not_if { node["chef_packages"]["chef"]["chef_root"].include?("/pkgs/chef/chef-infra-client") }
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
action :stop do
|
61
|
+
service "hab-sup" do
|
62
|
+
action :stop
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
#
|
2
|
+
# Copyright:: Chef Software, Inc.
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
|
18
|
+
require "win32/service" if RUBY_PLATFORM =~ /mswin|mingw32|windows/
|
19
|
+
require_relative "habitat_sup"
|
20
|
+
|
21
|
+
class Chef
|
22
|
+
class Resource
|
23
|
+
class HabitatSupWindows < HabitatSup
|
24
|
+
provides :habitat_sup, os: "windows"
|
25
|
+
provides :habitat_sup_windows
|
26
|
+
|
27
|
+
service_file = ::File.expand_path("../support/HabService.dll.config.erb")
|
28
|
+
win_service_config = "C:/hab/svc/windows-service/HabService.dll.config"
|
29
|
+
|
30
|
+
action :run do
|
31
|
+
super()
|
32
|
+
|
33
|
+
# TODO: There has to be a better way to handle auth token on windows
|
34
|
+
# than the system wide environment variable
|
35
|
+
auth_action = new_resource.auth_token ? :create : :delete
|
36
|
+
env "HAB_AUTH_TOKEN" do
|
37
|
+
value new_resource.auth_token if new_resource.auth_token
|
38
|
+
action auth_action
|
39
|
+
end
|
40
|
+
|
41
|
+
gateway_auth_action = new_resource.gateway_auth_token ? :create : :delete
|
42
|
+
env "HAB_SUP_GATEWAY_AUTH_TOKEN" do
|
43
|
+
value new_resource.gateway_auth_token if new_resource.gateway_auth_token
|
44
|
+
action gateway_auth_action
|
45
|
+
end
|
46
|
+
|
47
|
+
bldr_action = new_resource.bldr_url ? :create : :delete
|
48
|
+
env "HAB_BLDR_URL" do
|
49
|
+
value new_resource.bldr_url if new_resource.bldr_url
|
50
|
+
action bldr_action
|
51
|
+
end
|
52
|
+
|
53
|
+
habitat_package "core/windows-service" do
|
54
|
+
bldr_url new_resource.bldr_url if new_resource.bldr_url
|
55
|
+
version new_resource.service_version if new_resource.service_version
|
56
|
+
end
|
57
|
+
|
58
|
+
execute "hab pkg exec core/windows-service install" do
|
59
|
+
not_if { ::Win32::Service.exists?("Habitat") }
|
60
|
+
end
|
61
|
+
|
62
|
+
# win_version = `dir /D /B C:\\hab\\pkgs\\core\\hab-launcher`.split().last
|
63
|
+
|
64
|
+
template win_service_config.to_s do
|
65
|
+
source ::File.expand_path("../support/HabService.dll.config.erb", __dir__)
|
66
|
+
local true
|
67
|
+
cookbook "habitat"
|
68
|
+
variables exec_start_options: exec_start_options,
|
69
|
+
bldr_url: new_resource.bldr_url,
|
70
|
+
auth_token: new_resource.auth_token,
|
71
|
+
gateway_auth_token: new_resource.gateway_auth_token
|
72
|
+
# win_launcher: win_version
|
73
|
+
action :touch
|
74
|
+
end
|
75
|
+
|
76
|
+
service "Habitat" do
|
77
|
+
subscribes :restart, "env[HAB_AUTH_TOKEN]"
|
78
|
+
subscribes :restart, "env[HAB_SUP_GATEWAY_AUTH_TOKEN]"
|
79
|
+
subscribes :restart, "env[HAB_BLDR_URL]"
|
80
|
+
subscribes :restart, "template[#{win_service_config}]"
|
81
|
+
subscribes :restart, "habitat_package[core/hab-sup]"
|
82
|
+
subscribes :restart, "habitat_package[core/hab-launcher]"
|
83
|
+
subscribes :restart, "template[C:/hab/sup/default/config/sup.toml]"
|
84
|
+
action %i{enable start}
|
85
|
+
not_if { node["chef_packages"]["chef"]["chef_root"].include?("/pkgs/chef/chef-infra-client") }
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
# Copyright:: Chef Software Inc.
|
2
|
+
# License:: Apache License, Version 2.0
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
require_relative "../http"
|
17
|
+
require_relative "../json_compat"
|
18
|
+
require_relative "../resource"
|
19
|
+
|
20
|
+
class Chef
|
21
|
+
class Resource
|
22
|
+
class HabitatConfig < Chef::Resource
|
23
|
+
unified_mode true
|
24
|
+
|
25
|
+
provides :habitat_config
|
26
|
+
|
27
|
+
description "Use the **habitat_config** resource to apply a configuration to a Chef Habitat service."
|
28
|
+
introduced "17.3"
|
29
|
+
examples <<~DOC
|
30
|
+
**Configure your nginx defaults**
|
31
|
+
|
32
|
+
```ruby
|
33
|
+
habitat_config 'nginx.default' do
|
34
|
+
config({
|
35
|
+
worker_count: 2,
|
36
|
+
http: {
|
37
|
+
keepalive_timeout: 120
|
38
|
+
}
|
39
|
+
})
|
40
|
+
end
|
41
|
+
```
|
42
|
+
DOC
|
43
|
+
|
44
|
+
property :config, Mash, required: true, coerce: proc { |m| m.is_a?(Hash) ? Mash.new(m) : m },
|
45
|
+
description: "The configuration to apply as a ruby hash, for example, `{ worker_count: 2, http: { keepalive_timeout: 120 } }`."
|
46
|
+
|
47
|
+
property :service_group, String, name_property: true, desired_state: false,
|
48
|
+
description: "The service group to apply the configuration to. For example, `nginx.default`"
|
49
|
+
|
50
|
+
property :remote_sup, String, default: "127.0.0.1:9632", desired_state: false,
|
51
|
+
description: "Address to a remote supervisor's control gateway."
|
52
|
+
|
53
|
+
# Http port needed for querying/comparing current config value
|
54
|
+
property :remote_sup_http, String, default: "127.0.0.1:9631", desired_state: false,
|
55
|
+
description: "Address for remote supervisor http port. Used to pull existing."
|
56
|
+
|
57
|
+
property :gateway_auth_token, String, desired_state: false,
|
58
|
+
description: "Auth token for accessing the remote supervisor's http port."
|
59
|
+
|
60
|
+
property :user, String, desired_state: false,
|
61
|
+
description: "Name of user key to use for encryption. Passes `--user` to `hab config apply`."
|
62
|
+
|
63
|
+
load_current_value do
|
64
|
+
http_uri = "http://#{remote_sup_http}"
|
65
|
+
|
66
|
+
begin
|
67
|
+
headers = {}
|
68
|
+
headers["Authorization"] = "Bearer #{gateway_auth_token}" if property_is_set?(:gateway_auth_token)
|
69
|
+
census = Mash.new(Chef::HTTP::SimpleJSON.new(http_uri).get("/census", headers))
|
70
|
+
sc = census["census_groups"][service_group]["service_config"]["value"]
|
71
|
+
rescue
|
72
|
+
# Default to a blank config if anything (http error, json parsing, finding
|
73
|
+
# the config object) goes wrong
|
74
|
+
sc = {}
|
75
|
+
end
|
76
|
+
config sc
|
77
|
+
end
|
78
|
+
|
79
|
+
action :apply, description: "applies the given configuration" do
|
80
|
+
converge_if_changed do
|
81
|
+
# Use the current timestamp as the serial number/incarnation
|
82
|
+
incarnation = Time.now.tv_sec
|
83
|
+
|
84
|
+
opts = []
|
85
|
+
# opts gets flattened by shell_out_compact later
|
86
|
+
opts << ["--remote-sup", new_resource.remote_sup] if new_resource.remote_sup
|
87
|
+
opts << ["--user", new_resource.user] if new_resource.user
|
88
|
+
|
89
|
+
tempfile = Tempfile.new(["habitat_config", ".toml"])
|
90
|
+
begin
|
91
|
+
tempfile.write(render_toml(new_resource.config))
|
92
|
+
tempfile.close
|
93
|
+
|
94
|
+
hab("config", "apply", opts, new_resource.service_group, incarnation, tempfile.path)
|
95
|
+
ensure
|
96
|
+
tempfile.close
|
97
|
+
tempfile.unlink
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
action_class do
|
103
|
+
use "../resource/habitat/habitat_shared"
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -0,0 +1,247 @@
|
|
1
|
+
#
|
2
|
+
# Copyright:: Chef Software, Inc.
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
require_relative "../http/simple"
|
18
|
+
require_relative "../resource"
|
19
|
+
class Chef
|
20
|
+
class Resource
|
21
|
+
class HabitatInstall < Chef::Resource
|
22
|
+
unified_mode true
|
23
|
+
provides :habitat_install
|
24
|
+
|
25
|
+
description "Use the **habitat_install** resource to install Chef Habitat."
|
26
|
+
introduced "17.3"
|
27
|
+
examples <<~DOC
|
28
|
+
**Installation Without a Resource Name**
|
29
|
+
|
30
|
+
```ruby
|
31
|
+
habitat_install
|
32
|
+
```
|
33
|
+
|
34
|
+
**Installation specifying a habitat builder URL**
|
35
|
+
|
36
|
+
```ruby
|
37
|
+
habitat_install 'install habitat' do
|
38
|
+
bldr_url 'http://localhost'
|
39
|
+
end
|
40
|
+
```
|
41
|
+
|
42
|
+
**Installation specifying version and habitat builder URL**
|
43
|
+
|
44
|
+
```ruby
|
45
|
+
habitat_install 'install habitat' do
|
46
|
+
bldr_url 'http://localhost'
|
47
|
+
hab_version '1.5.50'
|
48
|
+
end
|
49
|
+
```
|
50
|
+
DOC
|
51
|
+
|
52
|
+
property :name, String, default: "install habitat",
|
53
|
+
description: "Name of the resource block. This has no impact other than logging."
|
54
|
+
|
55
|
+
property :install_url, String, default: "https://raw.githubusercontent.com/habitat-sh/habitat/master/components/hab/install.sh",
|
56
|
+
description: "URL to the install script, default is from the [habitat repo](https://raw.githubusercontent.com/habitat-sh/habitat/master/components/hab/install.sh) ."
|
57
|
+
|
58
|
+
property :bldr_url, String,
|
59
|
+
description: "Optional URL to an alternate Habitat Builder."
|
60
|
+
|
61
|
+
property :create_user, [true, false], default: true,
|
62
|
+
description: "Creates the `hab` system user."
|
63
|
+
|
64
|
+
property :tmp_dir, String,
|
65
|
+
description: "Sets TMPDIR environment variable for location to place temp files. Note: This is required if `/tmp` and `/var/tmp` are mounted `noexec`."
|
66
|
+
|
67
|
+
property :license, String, equal_to: ["accept"],
|
68
|
+
description: "Specifies acceptance of habitat license when set to `accept`."
|
69
|
+
|
70
|
+
property :hab_version, String,
|
71
|
+
description: "Specify the version of `Habitat` you would like to install."
|
72
|
+
|
73
|
+
action :install, description: "Installs Habitat. Does nothing if the `hab` binary is found in the default location for the system (`/bin/hab` on Linux, `/usr/local/bin/hab` on macOS, `C:/habitat/hab.exe` on Windows)" do
|
74
|
+
if ::File.exist?(hab_path)
|
75
|
+
cmd = shell_out!([hab_path, "--version"].flatten.compact.join(" "))
|
76
|
+
version = %r{hab (\d*\.\d*\.\d[^\/]*)}.match(cmd.stdout)[1]
|
77
|
+
return if version == new_resource.hab_version
|
78
|
+
end
|
79
|
+
|
80
|
+
if windows?
|
81
|
+
# Retrieve version information
|
82
|
+
uri = "https://packages.chef.io/files"
|
83
|
+
package_name = "hab-x86_64-windows"
|
84
|
+
habfile = "#{Chef::Config[:file_cache_path]}/#{package_name}.zip"
|
85
|
+
|
86
|
+
# TODO: Figure out how to properly validate the shasum for windows. Doesn't seem it's published
|
87
|
+
# as a .sha265sum like for the linux .tar.gz
|
88
|
+
download = "#{uri}/stable/habitat/latest/hab-x86_64-windows.zip"
|
89
|
+
|
90
|
+
remote_file habfile do
|
91
|
+
source download
|
92
|
+
end
|
93
|
+
|
94
|
+
archive_file "#{package_name}.zip" do
|
95
|
+
path habfile
|
96
|
+
destination "#{Chef::Config[:file_cache_path]}/habitat"
|
97
|
+
action :extract
|
98
|
+
not_if { ::Dir.exist?('c:\habitat') }
|
99
|
+
end
|
100
|
+
|
101
|
+
directory 'c:\habitat' do
|
102
|
+
notifies :run, "powershell_script[installing from archive]", :immediately
|
103
|
+
end
|
104
|
+
|
105
|
+
powershell_script "installing from archive" do
|
106
|
+
code <<-EOH
|
107
|
+
Move-Item -Path #{Chef::Config[:file_cache_path]}/habitat/hab-*/* -Destination C:/habitat -Force
|
108
|
+
EOH
|
109
|
+
action :nothing
|
110
|
+
end
|
111
|
+
|
112
|
+
# TODO: This won't self heal if missing until the next upgrade
|
113
|
+
windows_path 'C:\habitat' do
|
114
|
+
action :add
|
115
|
+
end
|
116
|
+
else
|
117
|
+
package %w{curl tar gzip}
|
118
|
+
|
119
|
+
if new_resource.create_user
|
120
|
+
group "hab"
|
121
|
+
|
122
|
+
user "hab" do
|
123
|
+
gid "hab"
|
124
|
+
system true
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
remote_file ::File.join(Chef::Config[:file_cache_path], "hab-install.sh") do
|
129
|
+
source new_resource.install_url
|
130
|
+
sensitive true
|
131
|
+
end
|
132
|
+
|
133
|
+
execute "installing with hab-install.sh" do
|
134
|
+
command hab_command
|
135
|
+
environment(
|
136
|
+
{
|
137
|
+
"HAB_BLDR_URL" => "bldr_url",
|
138
|
+
"TMPDIR" => "tmp_dir",
|
139
|
+
}.each_with_object({}) do |(var, property), env|
|
140
|
+
env[var] = new_resource.send(property.to_sym) if new_resource.send(property.to_sym)
|
141
|
+
end
|
142
|
+
)
|
143
|
+
end
|
144
|
+
end
|
145
|
+
execute "hab license accept" if new_resource.license == "accept"
|
146
|
+
end
|
147
|
+
|
148
|
+
# TODO: Work out cleanest method to implement upgrade that will support effortless installs as well as standard chef-client
|
149
|
+
# action :upgrade do
|
150
|
+
# if platform_family?('windows')
|
151
|
+
# # Retrieve version information
|
152
|
+
# uri = 'https://packages.chef.io/files'
|
153
|
+
# package_name = 'hab-x86_64-windows'
|
154
|
+
# zipfile = "#{Chef::Config[:file_cache_path]}/#{package_name}.zip"
|
155
|
+
|
156
|
+
# # TODO: Figure out how to properly validate the shasum for windows. Doesn't seem it's published
|
157
|
+
# # as a .sha265sum like for the linux .tar.gz
|
158
|
+
# download = "#{uri}/stable/habitat/latest/hab-x86_64-windows.zip"
|
159
|
+
|
160
|
+
# remote_file zipfile do
|
161
|
+
# source download
|
162
|
+
# end
|
163
|
+
|
164
|
+
# if Chef::VERSION.to_i < 15
|
165
|
+
# ruby_block "#{package_name}.zip" do
|
166
|
+
# block do
|
167
|
+
# require 'zip'
|
168
|
+
# Zip::File.open(zipfile) do |zip_file|
|
169
|
+
# zip_file.each do |f|
|
170
|
+
# fpath = "#{Chef::Config[:file_cache_path]}/habitat/" + f.name
|
171
|
+
# zip_file.extract(f, fpath) # unless ::File.exist?(fpath)
|
172
|
+
# end
|
173
|
+
# end
|
174
|
+
# end
|
175
|
+
# action :run
|
176
|
+
# end
|
177
|
+
# else
|
178
|
+
# archive_file "#{package_name}.zip" do
|
179
|
+
# path zipfile
|
180
|
+
# destination "#{Chef::Config[:file_cache_path]}/habitat"
|
181
|
+
# action :extract
|
182
|
+
# end
|
183
|
+
# end
|
184
|
+
|
185
|
+
# powershell_script 'installing from archive' do
|
186
|
+
# code <<-EOH
|
187
|
+
# Move-Item -Path #{Chef::Config[:file_cache_path]}/habitat/hab-*/* -Destination C:/habitat -Force
|
188
|
+
# EOH
|
189
|
+
# end
|
190
|
+
|
191
|
+
# # TODO: This won't self heal if missing until the next upgrade
|
192
|
+
# if Chef::VERSION.to_i < 14
|
193
|
+
# env 'PATH_c-habitat' do
|
194
|
+
# key_name 'PATH'
|
195
|
+
# delim ';' # this was missing
|
196
|
+
# value 'C:\habitat'
|
197
|
+
# action :modify
|
198
|
+
# end
|
199
|
+
# else
|
200
|
+
# windows_path 'C:\habitat' do
|
201
|
+
# action :add
|
202
|
+
# end
|
203
|
+
# end
|
204
|
+
# else
|
205
|
+
# remote_file ::File.join(Chef::Config[:file_cache_path], 'hab-install.sh') do
|
206
|
+
# source new_resource.install_url
|
207
|
+
# sensitive true
|
208
|
+
# end
|
209
|
+
|
210
|
+
# execute 'installing with hab-install.sh' do
|
211
|
+
# command hab_command
|
212
|
+
# environment(
|
213
|
+
# {
|
214
|
+
# 'HAB_BLDR_URL' => 'bldr_url',
|
215
|
+
# 'TMPDIR' => 'tmp_dir',
|
216
|
+
# }.each_with_object({}) do |(var, property), env|
|
217
|
+
# env[var] = new_resource.send(property.to_sym) if new_resource.send(property.to_sym)
|
218
|
+
# end
|
219
|
+
# )
|
220
|
+
# not_if { ::File.exist?('/bin/hab') }
|
221
|
+
# end
|
222
|
+
# end
|
223
|
+
# end
|
224
|
+
|
225
|
+
action_class do
|
226
|
+
use "../resource/habitat/habitat_shared"
|
227
|
+
|
228
|
+
def hab_path
|
229
|
+
if macos?
|
230
|
+
"/usr/local/bin/hab"
|
231
|
+
elsif windows?
|
232
|
+
"C:/habitat/hab.exe"
|
233
|
+
else
|
234
|
+
"/bin/hab"
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
def hab_command
|
239
|
+
cmd = "bash #{Chef::Config[:file_cache_path]}/hab-install.sh"
|
240
|
+
cmd << " -v #{new_resource.hab_version} " if new_resource.hab_version
|
241
|
+
cmd << " -t x86_64-linux-kernel2" if node["kernel"]["release"].to_i < 3
|
242
|
+
cmd
|
243
|
+
end
|
244
|
+
end
|
245
|
+
end
|
246
|
+
end
|
247
|
+
end
|