ruby-jss 2.0.0 → 2.1.0b4
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/CHANGES.md +20 -3
- data/lib/jamf/api/classic/api_objects/computer.rb +1 -0
- data/lib/jamf/api/classic/api_objects/computer_group.rb +58 -94
- data/lib/jamf/api/jamf_pro/mixins/bulk_deletable.rb +2 -2
- data/lib/jamf/api/jamf_pro/mixins/collection_resource.rb +1 -3
- data/lib/jamf/api/jamf_pro/mixins/macos_managed_updates.rb +1 -1
- data/lib/jamf/api/jamf_pro/mixins/macos_redeploy_mgmt_framework.rb +113 -0
- data/lib/jamf/configuration.rb +55 -60
- data/lib/jamf/deprecations.rb +28 -0
- data/lib/jamf/version.rb +1 -1
- data/lib/jamf/zeitwerk_config.rb +3 -2
- data/lib/jamf.rb +4 -0
- metadata +10 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5a00af3813560fa65f8597fc6a516d1b9933eb333f2aee3478646df1f93a45b9
|
4
|
+
data.tar.gz: 892e4f5ed6b7271c55377671ff13ccb7778a51b34d57b9da67086cd95ec7d0ca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6461d576566cfd365c77ff36758a8c9558deb2bad8936b87be03f12dd3c7f7662734ec2eaaa7f1f4b5b83c9bb0264c9e06609c2f8f0ef20106d3c8db8be45484
|
7
|
+
data.tar.gz: 30a9a4dcf60a9aa0a25c4a64429e34f1f8cf6cf9609f80c94b675c0e498f74f46f3fc0842fab2d20ed248f0a792c2349a7373a273905ec45c3994b3b6f4fc3eb
|
data/CHANGES.md
CHANGED
@@ -14,8 +14,27 @@ __Please update all installations of ruby-jss to at least v1.6.0.__
|
|
14
14
|
|
15
15
|
Many many thanks to actae0n of Blacksun Hackers Club for reporting this issue and providing examples of how it could be exploited.
|
16
16
|
|
17
|
+
## \[2.1.0] - unreleased
|
17
18
|
|
18
|
-
|
19
|
+
### Added
|
20
|
+
|
21
|
+
- Support for the `/v1/jamf-management-framework/redeploy/{id}` Jamf Pro API endpoint in `Jamf::Computer` and
|
22
|
+
`Jamf::ComputerGroup`. The method `redeploy_mgmt_framework` is both a Class and an Instance method for those classes
|
23
|
+
- The instance method sends the redeployment to the single computer or all the members of the single computer group.
|
24
|
+
- The class method accepts a single id, or an array of ids.
|
25
|
+
- When using `Jamf::Computer.redeploy_mgmt_framework` provide computer ids
|
26
|
+
- When using `Jamf::ComputerGroup.redeploy_mgmt_framework` provide group ids, and all members of all groups will get
|
27
|
+
the redeployment
|
28
|
+
- In all cases the result is a Hash of target computer ids (keys) and result value for each (Strings).
|
29
|
+
- The result is either the UUID of the sent MDM command, or an error message if the MDM command couldn't be sent.
|
30
|
+
- All the code is in the `Jamf::MacOSRedeployMgmtFramework` module, q.v. in the [rubydoc documentation](https://www.rubydoc.info/gems/ruby-jss/Jamf/MacOSRedeployMgmtFramework)
|
31
|
+
|
32
|
+
### Fixed
|
33
|
+
|
34
|
+
- A few internal rescues of a deprecated exception class
|
35
|
+
- Removed auto-loading of deprecation files; now explicitly loaded.
|
36
|
+
|
37
|
+
## \[2.0.0] - 2022-09-12
|
19
38
|
|
20
39
|
Version 2.0.0 is a major refactoring of ruby-jss. While attempting to provide as much backward compatibility as possible, there are some significant changes and v2.0.0 is not fully backward compatible. **PLEASE TEST YOUR CODE EXTENSIVELY**
|
21
40
|
|
@@ -29,8 +48,6 @@ Here are the high-level changes and there are many many others. For more details
|
|
29
48
|
- Auto-generated code for Jamf Pro API objects
|
30
49
|
- Autoloading of code using [Zeitwerk](https://github.com/fxn/zeitwerk)
|
31
50
|
|
32
|
-
|
33
|
-
|
34
51
|
## \[1.6.7] - 2022-02-22
|
35
52
|
|
36
53
|
### Added
|
@@ -1,83 +1,65 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
###
|
27
|
-
module Jamf
|
28
|
-
|
29
|
-
#####################################
|
30
|
-
### Module Constants
|
31
|
-
#####################################
|
1
|
+
# Copyright 2022 Pixar
|
2
|
+
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "Apache License")
|
5
|
+
# with the following modification; you may not use this file except in
|
6
|
+
# compliance with the Apache License and the following modification to it:
|
7
|
+
# Section 6. Trademarks. is deleted and replaced with:
|
8
|
+
#
|
9
|
+
# 6. Trademarks. This License does not grant permission to use the trade
|
10
|
+
# names, trademarks, service marks, or product names of the Licensor
|
11
|
+
# and its affiliates, except as required to comply with Section 4(c) of
|
12
|
+
# the License and to reproduce the content of the NOTICE file.
|
13
|
+
#
|
14
|
+
# You may obtain a copy of the Apache License at
|
15
|
+
#
|
16
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
17
|
+
#
|
18
|
+
# Unless required by applicable law or agreed to in writing, software
|
19
|
+
# distributed under the Apache License with the above modification is
|
20
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
21
|
+
# KIND, either express or implied. See the Apache License for the specific
|
22
|
+
# language governing permissions and limitations under the Apache License.
|
23
|
+
#
|
24
|
+
#
|
32
25
|
|
33
|
-
|
34
|
-
### Module Variables
|
35
|
-
#####################################
|
36
|
-
|
37
|
-
#####################################
|
38
|
-
### Module Methods
|
39
|
-
#####################################
|
26
|
+
module Jamf
|
40
27
|
|
41
|
-
|
42
|
-
### Classes
|
28
|
+
# Classes
|
43
29
|
#####################################
|
44
30
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
31
|
+
|
32
|
+
# A computer group in the JSS
|
33
|
+
#
|
34
|
+
# See also the parent class Jamf::Group
|
35
|
+
#
|
36
|
+
# @see Jamf::APIObject
|
37
|
+
#
|
38
|
+
# @see Jamf::Group
|
39
|
+
#
|
54
40
|
class ComputerGroup < Jamf::Group
|
55
41
|
|
56
|
-
|
57
|
-
|
42
|
+
|
43
|
+
# Mix-Ins
|
58
44
|
#####################################
|
59
45
|
include Jamf::MDM
|
60
46
|
include Jamf::MacOSManagedUpdates
|
47
|
+
include Jamf::MacOSRedeployMgmtFramework
|
61
48
|
|
62
|
-
|
63
|
-
### Class Methods
|
64
|
-
#####################################
|
65
|
-
|
66
|
-
#####################################
|
67
|
-
### Class Constants
|
49
|
+
# Class Constants
|
68
50
|
#####################################
|
69
51
|
|
70
|
-
|
71
|
-
RSRC_BASE =
|
52
|
+
# The base for REST resources of this class
|
53
|
+
RSRC_BASE = 'computergroups'
|
72
54
|
|
73
|
-
|
55
|
+
# the hash key used for the JSON list output of all objects in the JSS
|
74
56
|
RSRC_LIST_KEY = :computer_groups
|
75
57
|
|
76
|
-
|
77
|
-
|
58
|
+
# The hash key used for the JSON object output.
|
59
|
+
# It's also used in various error messages
|
78
60
|
RSRC_OBJECT_KEY = :computer_group
|
79
61
|
|
80
|
-
|
62
|
+
# this allows the parent Group class to do things right
|
81
63
|
MEMBER_CLASS = Jamf::Computer
|
82
64
|
|
83
65
|
# the XML element for immediate member additions via PUT
|
@@ -94,45 +76,27 @@ module Jamf
|
|
94
76
|
# what kind of devices are these WRT MDM
|
95
77
|
MDM_COMMAND_TARGET = :computergroups
|
96
78
|
|
97
|
-
|
98
|
-
### Class Variables
|
99
|
-
#####################################
|
100
|
-
|
101
|
-
#####################################
|
102
|
-
### Class Methods
|
103
|
-
#####################################
|
104
|
-
|
105
|
-
#####################################
|
106
|
-
### Attributes
|
79
|
+
# Public Instance Methods
|
107
80
|
#####################################
|
108
81
|
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
###
|
115
|
-
### The serial numbers of members in this group
|
116
|
-
###
|
117
|
-
### @return [Array<String>] the member serial numbers
|
118
|
-
###
|
82
|
+
#
|
83
|
+
# The serial numbers of members in this group
|
84
|
+
#
|
85
|
+
# @return [Array<String>] the member serial numbers
|
86
|
+
#
|
119
87
|
def member_serial_numbers
|
120
|
-
@members.map{|m| m[:serial_number]}
|
88
|
+
@members.map { |m| m[:serial_number] }
|
121
89
|
end
|
122
90
|
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
91
|
+
#
|
92
|
+
# Return an array of the mac_addrs of members in this group
|
93
|
+
#
|
94
|
+
# @return [Array<String>] the member mac addresses
|
95
|
+
#
|
128
96
|
def member_mac_addresses
|
129
|
-
@members.map{|m| m[:mac_address]} + @members.map{|m| m[:alt_mac_address]}
|
97
|
+
@members.map { |m| m[:mac_address] } + @members.map { |m| m[:alt_mac_address] }
|
130
98
|
end
|
131
99
|
|
132
|
-
#####################################
|
133
|
-
### Private Instance Methods
|
134
|
-
#####################################
|
135
|
-
|
136
100
|
end # class ComputerGroup
|
137
101
|
|
138
102
|
end # module
|
@@ -39,7 +39,7 @@ module Jamf
|
|
39
39
|
# @param cnx [Jamf::Connection] The connection to use, default: Jamf.cnx
|
40
40
|
#
|
41
41
|
# TODO: fix this return value, no more ErrorInfo
|
42
|
-
# @return [Array<Jamf::Connection::
|
42
|
+
# @return [Array<Jamf::Connection::JamfProAPIError::ErrorInfo] Info about any ids
|
43
43
|
# that failed to be deleted.
|
44
44
|
#
|
45
45
|
def bulk_delete(ids, cnx: Jamf.cnx)
|
@@ -49,7 +49,7 @@ module Jamf
|
|
49
49
|
begin
|
50
50
|
cnx.post "#{rsrc_path}/#{DELETE_MULTIPLE_ENDPOINT}", request_body
|
51
51
|
[]
|
52
|
-
rescue Jamf::Connection::
|
52
|
+
rescue Jamf::Connection::JamfProAPIError => e
|
53
53
|
raise e unless e.httpStatus == 400
|
54
54
|
|
55
55
|
e.errors
|
@@ -101,12 +101,10 @@ module Jamf
|
|
101
101
|
#
|
102
102
|
# Classes including CollectionResource really need to define GET_PATH if it
|
103
103
|
# is not the same as the LIST_PATH.
|
104
|
-
# rubocop:disable Naming/AccessorMethodName
|
105
104
|
######################################
|
106
105
|
def get_path
|
107
106
|
@get_path ||= defined?(self::GET_PATH) ? self::GET_PATH : self::LIST_PATH
|
108
107
|
end
|
109
|
-
# rubocop:enable Naming/AccessorMethodName
|
110
108
|
|
111
109
|
# The path for PUTting (replacing) a single object. The desired object id will
|
112
110
|
# be appended to the end, e.g. if this value is 'v1/buildings' and you want
|
@@ -570,7 +568,7 @@ module Jamf
|
|
570
568
|
# @param cnx [Jamf::Connection] The connection to use, default: Jamf.cnx
|
571
569
|
#
|
572
570
|
#
|
573
|
-
# @return [Array<Jamf::Connection::
|
571
|
+
# @return [Array<Jamf::Connection::JamfProAPIError::ErrorInfo] Info about any ids
|
574
572
|
# that failed to be deleted.
|
575
573
|
#
|
576
574
|
######################################
|
@@ -156,7 +156,7 @@ module Jamf
|
|
156
156
|
#
|
157
157
|
# @see MacOSManagedUpdates.send_managed_os_update
|
158
158
|
#
|
159
|
-
def send_managed_os_update(updateAction:, maxDeferrals: nil, version: nil, skipVersionVerification: false, applyMajorUpdate: false, forceRestart: false
|
159
|
+
def send_managed_os_update(updateAction:, maxDeferrals: nil, version: nil, skipVersionVerification: false, applyMajorUpdate: false, forceRestart: false)
|
160
160
|
deviceIds = is_a?(Jamf::Computer) ? @id : nil
|
161
161
|
groupId = is_a?(Jamf::Computer) ? nil : @id
|
162
162
|
|
@@ -0,0 +1,113 @@
|
|
1
|
+
# Copyright 2022 Pixar
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "Apache License")
|
4
|
+
# with the following modification; you may not use this file except in
|
5
|
+
# compliance with the Apache License and the following modification to it:
|
6
|
+
# Section 6. Trademarks. is deleted and replaced with:
|
7
|
+
#
|
8
|
+
# 6. Trademarks. This License does not grant permission to use the trade
|
9
|
+
# names, trademarks, service marks, or product names of the Licensor
|
10
|
+
# and its affiliates, except as required to comply with Section 4(c) of
|
11
|
+
# the License and to reproduce the content of the NOTICE file.
|
12
|
+
#
|
13
|
+
# You may obtain a copy of the Apache License at
|
14
|
+
#
|
15
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
16
|
+
#
|
17
|
+
# Unless required by applicable law or agreed to in writing, software
|
18
|
+
# distributed under the Apache License with the above modification is
|
19
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
20
|
+
# KIND, either express or implied. See the Apache License for the specific
|
21
|
+
# language governing permissions and limitations under the Apache License.
|
22
|
+
#
|
23
|
+
#
|
24
|
+
|
25
|
+
module Jamf
|
26
|
+
|
27
|
+
# This module should be mixed in to Jamf::Computer and Jamf::ComputerGroup
|
28
|
+
#
|
29
|
+
# It provides access to the macos-managed-software-updates JPAPI resource for
|
30
|
+
# managed OS update commands to managed macs running Big Sur or higher.
|
31
|
+
#
|
32
|
+
module MacOSRedeployMgmtFramework
|
33
|
+
|
34
|
+
# when this module is included, also extend our Class Methods
|
35
|
+
def self.included(includer)
|
36
|
+
Jamf.load_msg "--> #{includer} is including #{self}"
|
37
|
+
includer.extend(ClassMethods)
|
38
|
+
end
|
39
|
+
|
40
|
+
# The JP API resource for redeploying the management framework
|
41
|
+
# to a computer. The id will be appended when used.
|
42
|
+
REDEPLOY_RSRC = 'v1/jamf-management-framework/redeploy'
|
43
|
+
|
44
|
+
# Class Methods
|
45
|
+
#####################################
|
46
|
+
module ClassMethods
|
47
|
+
|
48
|
+
# when this module is included, also extend our Class Methods
|
49
|
+
def self.extended(extender)
|
50
|
+
Jamf.load_msg "--> #{extender} is extending #{self}"
|
51
|
+
end
|
52
|
+
|
53
|
+
# Redeploy the Jamf Management framework to target Computers or members of ComputerGroups
|
54
|
+
#
|
55
|
+
# IMPORTANT: This only re-deploys the Jamf binary and related framework. The MDM system
|
56
|
+
# must be functioning. The target computer(s) will not re-install the framework if they
|
57
|
+
# never recieve the MDM command.
|
58
|
+
#
|
59
|
+
# @param target_ids [String, Integer, Array<String, Integer>] Jamf IDs for the
|
60
|
+
# Computer or ComputerGroup targets.
|
61
|
+
#
|
62
|
+
# @param cnx [Jamf::Connection] The API connection to use. Defaults to Jamf.cnx
|
63
|
+
#
|
64
|
+
# @return [Hash{Integer => String}] The result for each computer, either the
|
65
|
+
# uuid of the sent MDM command, or an error message.
|
66
|
+
########################
|
67
|
+
def redeploy_mgmt_framework(target_ids, cnx: Jamf.cnx)
|
68
|
+
target_ids = target_ids.is_a?(Array) ? target_ids : [target_ids]
|
69
|
+
target_comp_ids =
|
70
|
+
if self == Jamf::Computer
|
71
|
+
target_ids
|
72
|
+
|
73
|
+
elsif self == Jamf::ComputerGroup
|
74
|
+
group_ids = target_ids.is_a?(Array) ? target_ids : [target_ids]
|
75
|
+
comp_ids = []
|
76
|
+
group_ids.each { |gid| comp_ids += JSS::ComputerGroup.fetch(id: gid).member_ids }
|
77
|
+
comp_ids
|
78
|
+
|
79
|
+
else
|
80
|
+
raise Jamf::UnsupportedError, 'This method is only available for Jamf::Computer and Jamf::ComputerGroup'
|
81
|
+
end
|
82
|
+
|
83
|
+
results = {}
|
84
|
+
|
85
|
+
target_comp_ids.uniq.compact.each do |comp_id|
|
86
|
+
result = cnx.jp_post "#{REDEPLOY_RSRC}/#{comp_id}", Jamf::BLANK
|
87
|
+
|
88
|
+
result = Jamf::OAPISchemas::RedeployJamfManagementFrameworkResponse.new result
|
89
|
+
results[comp_id] = result.commandUuid
|
90
|
+
rescue Jamf::Connection::JamfProAPIError => e
|
91
|
+
results[comp_id] = "ERROR: #{e}"
|
92
|
+
end
|
93
|
+
|
94
|
+
results
|
95
|
+
end
|
96
|
+
|
97
|
+
end # module ClassMethods
|
98
|
+
|
99
|
+
# Instance Methods
|
100
|
+
######################################
|
101
|
+
|
102
|
+
# Send a managed update command to an instance of Computer or ComputerGroup.
|
103
|
+
# This just calls the class method of the same name.
|
104
|
+
#
|
105
|
+
# @see MacOSRedeployMgmtFramework.redeploy_mgmt_framework
|
106
|
+
#
|
107
|
+
def redeploy_mgmt_framework
|
108
|
+
self.class.redeploy_mgmt_framework @id, cnx: @cnx
|
109
|
+
end
|
110
|
+
|
111
|
+
end # module MacOSRedeployMgmtFramework
|
112
|
+
|
113
|
+
end # module Jamf
|
data/lib/jamf/configuration.rb
CHANGED
@@ -79,6 +79,7 @@ module Jamf
|
|
79
79
|
### {APIConnection#connect}, or by custom means.
|
80
80
|
###
|
81
81
|
class Configuration
|
82
|
+
|
82
83
|
include Singleton
|
83
84
|
|
84
85
|
#####################################
|
@@ -89,31 +90,31 @@ module Jamf
|
|
89
90
|
### The first matching file is used - the array provides
|
90
91
|
### backward compatibility with earlier versions.
|
91
92
|
### Saving will always happen to the first filename
|
92
|
-
CONF_FILES = [
|
93
|
+
CONF_FILES = ['ruby-jss.conf', 'jss_gem.conf']
|
93
94
|
|
94
95
|
### The Pathname to the machine-wide preferences plist
|
95
|
-
GLOBAL_CONFS =
|
96
|
+
GLOBAL_CONFS = CONF_FILES.map { |cf| Pathname.new "/etc/#{cf}" }
|
96
97
|
|
97
98
|
### The Pathname to the user-specific preferences plist
|
98
|
-
USER_CONFS =
|
99
|
+
USER_CONFS = CONF_FILES.map { |cf| ENV['HOME'] ? Pathname.new("~/.#{cf}").expand_path : nil }.compact
|
99
100
|
|
100
101
|
### The attribute keys we maintain, and the type they should be stored as
|
101
102
|
CONF_KEYS = {
|
102
|
-
:
|
103
|
-
:
|
104
|
-
:
|
105
|
-
:
|
106
|
-
:
|
107
|
-
:
|
108
|
-
:
|
109
|
-
:
|
110
|
-
:
|
111
|
-
:
|
112
|
-
:
|
113
|
-
:
|
114
|
-
:
|
115
|
-
:
|
116
|
-
:
|
103
|
+
api_server_name: :to_s,
|
104
|
+
api_server_port: :to_i,
|
105
|
+
api_ssl_version: :to_s,
|
106
|
+
api_verify_cert: :jss_to_bool,
|
107
|
+
api_username: :to_s,
|
108
|
+
api_timeout_open: :to_i,
|
109
|
+
api_timeout: :to_i,
|
110
|
+
db_server_name: :to_s,
|
111
|
+
db_server_port: :to_i,
|
112
|
+
db_server_socket: :to_s,
|
113
|
+
db_username: :to_s,
|
114
|
+
db_name: :to_s,
|
115
|
+
db_connect_timeout: :to_i,
|
116
|
+
db_read_timeout: :to_i,
|
117
|
+
db_write_timeout: :to_i
|
117
118
|
}
|
118
119
|
|
119
120
|
#####################################
|
@@ -129,8 +130,7 @@ module Jamf
|
|
129
130
|
#####################################
|
130
131
|
|
131
132
|
# automatically create accessors for all the CONF_KEYS
|
132
|
-
CONF_KEYS.keys.each {|k| attr_accessor k}
|
133
|
-
|
133
|
+
CONF_KEYS.keys.each { |k| attr_accessor k }
|
134
134
|
|
135
135
|
#####################################
|
136
136
|
### Constructor
|
@@ -140,10 +140,8 @@ module Jamf
|
|
140
140
|
### Initialize!
|
141
141
|
###
|
142
142
|
def initialize
|
143
|
-
|
144
143
|
read_global
|
145
144
|
read_user
|
146
|
-
|
147
145
|
end
|
148
146
|
|
149
147
|
#####################################
|
@@ -156,7 +154,7 @@ module Jamf
|
|
156
154
|
### @return [void]
|
157
155
|
###
|
158
156
|
def clear_all
|
159
|
-
CONF_KEYS.keys.each {|k|
|
157
|
+
CONF_KEYS.keys.each { |k| send "#{k}=".to_sym, nil }
|
160
158
|
end
|
161
159
|
|
162
160
|
###
|
@@ -165,12 +163,12 @@ module Jamf
|
|
165
163
|
### @return [void]
|
166
164
|
###
|
167
165
|
def read_global
|
168
|
-
GLOBAL_CONFS.each
|
166
|
+
GLOBAL_CONFS.each do |gcf|
|
169
167
|
if gcf.file? and gcf.readable?
|
170
168
|
read gcf
|
171
169
|
return
|
172
170
|
end
|
173
|
-
|
171
|
+
end
|
174
172
|
end
|
175
173
|
|
176
174
|
###
|
@@ -179,15 +177,14 @@ module Jamf
|
|
179
177
|
### @return [void]
|
180
178
|
###
|
181
179
|
def read_user
|
182
|
-
USER_CONFS.each
|
180
|
+
USER_CONFS.each do |ucf|
|
183
181
|
if ucf.file? and ucf.readable?
|
184
182
|
read ucf
|
185
183
|
return
|
186
184
|
end
|
187
|
-
|
185
|
+
end
|
188
186
|
end
|
189
187
|
|
190
|
-
|
191
188
|
###
|
192
189
|
### Clear the settings and reload the prefs files, or another file if provided
|
193
190
|
###
|
@@ -203,10 +200,9 @@ module Jamf
|
|
203
200
|
end
|
204
201
|
read_global
|
205
202
|
read_user
|
206
|
-
|
203
|
+
true
|
207
204
|
end
|
208
205
|
|
209
|
-
|
210
206
|
###
|
211
207
|
### Save the prefs into a file
|
212
208
|
###
|
@@ -216,10 +212,10 @@ module Jamf
|
|
216
212
|
###
|
217
213
|
def save(file)
|
218
214
|
path = case file
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
215
|
+
when :global then GLOBAL_CONFS.first
|
216
|
+
when :user then USER_CONFS.first
|
217
|
+
else Pathname.new(file)
|
218
|
+
end
|
223
219
|
|
224
220
|
raise Jamf::MissingDataError, "No HOME environment variable, can't write to user conf file." if path.nil?
|
225
221
|
|
@@ -229,21 +225,20 @@ module Jamf
|
|
229
225
|
|
230
226
|
# go thru the known attributes/keys
|
231
227
|
CONF_KEYS.keys.sort.each do |k|
|
232
|
-
|
233
228
|
# if the key exists, update it.
|
234
229
|
if data =~ /^#{k}:/
|
235
|
-
data.sub!(/^#{k}:.*$/, "#{k}: #{
|
230
|
+
data.sub!(/^#{k}:.*$/, "#{k}: #{send k}")
|
236
231
|
|
237
232
|
# if not, add it to the end unless it's nil
|
238
233
|
else
|
239
|
-
data += "\n#{k}: #{
|
234
|
+
data += "\n#{k}: #{send k}" unless send(k).nil?
|
240
235
|
end # if data =~ /^#{k}:/
|
241
|
-
end #each do |k|
|
236
|
+
end # each do |k|
|
242
237
|
|
243
238
|
else # not readable, make a new file
|
244
|
-
data =
|
239
|
+
data = ''
|
245
240
|
CONF_KEYS.keys.sort.each do |k|
|
246
|
-
data << "#{k}: #{
|
241
|
+
data << "#{k}: #{send k}\n" unless send(k).nil?
|
247
242
|
end
|
248
243
|
end # if path readable
|
249
244
|
|
@@ -252,14 +247,13 @@ module Jamf
|
|
252
247
|
path.jss_save data
|
253
248
|
end # read file
|
254
249
|
|
255
|
-
|
256
250
|
###
|
257
251
|
### Print out the current settings to stdout
|
258
252
|
###
|
259
253
|
### @return [void]
|
260
254
|
###
|
261
255
|
def print
|
262
|
-
CONF_KEYS.keys.sort.each{|k| puts "#{k}: #{
|
256
|
+
CONF_KEYS.keys.sort.each { |k| puts "#{k}: #{send k}" }
|
263
257
|
end
|
264
258
|
|
265
259
|
#####################################
|
@@ -275,28 +269,29 @@ module Jamf
|
|
275
269
|
### @return [void]
|
276
270
|
###
|
277
271
|
def read(file)
|
278
|
-
|
279
272
|
Pathname.new(file).read.each_line do |line|
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
attr = $1.to_sym
|
286
|
-
setter = "#{attr}=".to_sym
|
287
|
-
value = $2.strip
|
288
|
-
|
289
|
-
if CONF_KEYS.keys.include? attr
|
290
|
-
if value
|
291
|
-
# convert the value to the correct class
|
292
|
-
value = value.send(CONF_KEYS[attr])
|
293
|
-
end
|
294
|
-
self.send(setter, value)
|
295
|
-
end # if
|
296
|
-
end # do line
|
273
|
+
# skip blank lines and those starting with #
|
274
|
+
next if line =~ /^\s*(#|$)/
|
275
|
+
|
276
|
+
line.strip =~ /^(\w+?):\s*(\S.*)$/
|
277
|
+
next unless Regexp.last_match(1)
|
297
278
|
|
279
|
+
attr = Regexp.last_match(1).to_sym
|
280
|
+
setter = "#{attr}=".to_sym
|
281
|
+
value = Regexp.last_match(2).strip
|
282
|
+
|
283
|
+
next unless CONF_KEYS.keys.include? attr
|
284
|
+
|
285
|
+
if value
|
286
|
+
# convert the value to the correct class
|
287
|
+
value = value.send(CONF_KEYS[attr])
|
288
|
+
end
|
289
|
+
send(setter, value)
|
290
|
+
# if
|
291
|
+
end # do line
|
298
292
|
end # read file
|
299
293
|
|
300
294
|
end # class Preferences
|
301
295
|
|
296
|
+
|
302
297
|
end # module
|
@@ -0,0 +1,28 @@
|
|
1
|
+
### Copyright 2022 Pixar
|
2
|
+
|
3
|
+
###
|
4
|
+
### Licensed under the Apache License, Version 2.0 (the "Apache License")
|
5
|
+
### with the following modification; you may not use this file except in
|
6
|
+
### compliance with the Apache License and the following modification to it:
|
7
|
+
### Section 6. Trademarks. is deleted and replaced with:
|
8
|
+
###
|
9
|
+
### 6. Trademarks. This License does not grant permission to use the trade
|
10
|
+
### names, trademarks, service marks, or product names of the Licensor
|
11
|
+
### and its affiliates, except as required to comply with Section 4(c) of
|
12
|
+
### the License and to reproduce the content of the NOTICE file.
|
13
|
+
###
|
14
|
+
### You may obtain a copy of the Apache License at
|
15
|
+
###
|
16
|
+
### http://www.apache.org/licenses/LICENSE-2.0
|
17
|
+
###
|
18
|
+
### Unless required by applicable law or agreed to in writing, software
|
19
|
+
### distributed under the Apache License with the above modification is
|
20
|
+
### distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
21
|
+
### KIND, either express or implied. See the Apache License for the specific
|
22
|
+
### language governing permissions and limitations under the Apache License.
|
23
|
+
###
|
24
|
+
###
|
25
|
+
|
26
|
+
require 'jamf/deprecations/deprecated_api_connection_class'
|
27
|
+
require 'jamf/deprecations/deprecated_api_constant'
|
28
|
+
require 'jamf/deprecations/deprecated_config_constant'
|
data/lib/jamf/version.rb
CHANGED
data/lib/jamf/zeitwerk_config.rb
CHANGED
@@ -89,8 +89,6 @@ module JamfZeitwerkConfig
|
|
89
89
|
loader.collapse("#{__dir__}/api/jamf_pro/base_classes")
|
90
90
|
loader.collapse("#{__dir__}/api/jamf_pro/other_classes")
|
91
91
|
|
92
|
-
loader.collapse("#{__dir__}/deprecations")
|
93
|
-
|
94
92
|
##### Inflected Paths
|
95
93
|
|
96
94
|
# filenames => Constants, which don't adhere to zeitwerk's parsing standards.
|
@@ -130,6 +128,7 @@ module JamfZeitwerkConfig
|
|
130
128
|
loader.inflector.inflect 'md_prestage_names' => 'MobileDevicePrestageNames'
|
131
129
|
loader.inflector.inflect 'md_prestage_skip_setup_items' => 'MobileDevicePrestageSkipSetupItems'
|
132
130
|
loader.inflector.inflect 'macos_managed_updates' => 'MacOSManagedUpdates'
|
131
|
+
loader.inflector.inflect 'macos_redeploy_mgmt_framework' => 'MacOSRedeployMgmtFramework'
|
133
132
|
|
134
133
|
# deprecations, separated so they load only when used.
|
135
134
|
# When its time to get rid of them, delete the files from the
|
@@ -147,6 +146,8 @@ module JamfZeitwerkConfig
|
|
147
146
|
loader.ignore "#{__dir__}/ruby_extensions.rb"
|
148
147
|
loader.ignore "#{__dir__}/ruby_extensions"
|
149
148
|
loader.ignore "#{__dir__}/exceptions.rb"
|
149
|
+
loader.ignore "#{__dir__}/deprecations"
|
150
|
+
loader.ignore "#{__dir__}/deprecations.rb"
|
150
151
|
|
151
152
|
lib_dir = Pathname.new(__dir__).parent.to_s
|
152
153
|
loader.ignore "#{lib_dir}/ruby-jss.rb"
|
data/lib/jamf.rb
CHANGED
metadata
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-jss
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.1.0b4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Lasell
|
8
8
|
- Aurica Hayes
|
9
9
|
- Kristoffer Landes
|
10
|
-
autorequire:
|
10
|
+
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2022-09-
|
13
|
+
date: 2022-09-15 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: CFPropertyList
|
@@ -290,6 +290,7 @@ files:
|
|
290
290
|
- lib/jamf/api/jamf_pro/mixins/jpapi_resource.rb
|
291
291
|
- lib/jamf/api/jamf_pro/mixins/lockable.rb
|
292
292
|
- lib/jamf/api/jamf_pro/mixins/macos_managed_updates.rb
|
293
|
+
- lib/jamf/api/jamf_pro/mixins/macos_redeploy_mgmt_framework.rb
|
293
294
|
- lib/jamf/api/jamf_pro/mixins/prestage.rb
|
294
295
|
- lib/jamf/api/jamf_pro/mixins/sortable.rb
|
295
296
|
- lib/jamf/api/jamf_pro/mixins/uncreatable.rb
|
@@ -747,6 +748,7 @@ files:
|
|
747
748
|
- lib/jamf/configuration.rb
|
748
749
|
- lib/jamf/constants.rb
|
749
750
|
- lib/jamf/db_connection.rb
|
751
|
+
- lib/jamf/deprecations.rb
|
750
752
|
- lib/jamf/deprecations/deprecated_api_connection_class.rb
|
751
753
|
- lib/jamf/deprecations/deprecated_api_constant.rb
|
752
754
|
- lib/jamf/deprecations/deprecated_config_constant.rb
|
@@ -806,7 +808,7 @@ homepage: http://pixaranimationstudios.github.io/ruby-jss/
|
|
806
808
|
licenses:
|
807
809
|
- Nonstandard
|
808
810
|
metadata: {}
|
809
|
-
post_install_message:
|
811
|
+
post_install_message:
|
810
812
|
rdoc_options:
|
811
813
|
- "--title"
|
812
814
|
- JSS
|
@@ -822,12 +824,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
822
824
|
version: 2.6.3
|
823
825
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
824
826
|
requirements:
|
825
|
-
- - "
|
827
|
+
- - ">"
|
826
828
|
- !ruby/object:Gem::Version
|
827
|
-
version:
|
829
|
+
version: 1.3.1
|
828
830
|
requirements: []
|
829
|
-
rubygems_version: 3.1
|
830
|
-
signing_key:
|
831
|
+
rubygems_version: 3.0.3.1
|
832
|
+
signing_key:
|
831
833
|
specification_version: 4
|
832
834
|
summary: A Ruby interface to the Jamf Pro REST APIs
|
833
835
|
test_files: []
|