ruby-jss 1.2.4a3 → 1.3.2
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 +180 -1
- data/README.md +4 -2
- data/bin/cgrouper +1 -1
- data/bin/jamfHelperBackgrounder +1 -1
- data/bin/netseg-update +1 -1
- data/data/ruby-jss.conf.example +1 -1
- data/lib/jamf.rb +2 -1
- data/lib/jamf/api/abstract_classes/advanced_search.rb +1 -1
- data/lib/jamf/api/abstract_classes/collection_resource.rb +54 -38
- data/lib/jamf/api/abstract_classes/generic_reference.rb +1 -1
- data/lib/jamf/api/abstract_classes/json_object.rb +16 -10
- data/lib/jamf/api/abstract_classes/prestage.rb +111 -35
- data/lib/jamf/api/abstract_classes/prestage_skip_setup_items.rb +1 -1
- data/lib/jamf/api/abstract_classes/resource.rb +1 -1
- data/lib/jamf/api/abstract_classes/singleton_resource.rb +1 -1
- data/lib/jamf/api/attribute_classes/ip_address.rb +1 -1
- data/lib/jamf/api/attribute_classes/timestamp.rb +1 -1
- data/lib/jamf/api/connection.rb +166 -69
- data/lib/jamf/api/connection/api_error.rb +1 -1
- data/lib/jamf/api/connection/api_error_styleguide.rb +1 -1
- data/lib/jamf/api/connection/token.rb +87 -16
- data/lib/jamf/api/json_objects/account_prefs.rb +1 -1
- data/lib/jamf/api/json_objects/android_details.rb +1 -1
- data/lib/jamf/api/json_objects/appletv_details.rb +1 -1
- data/lib/jamf/api/json_objects/attachment.rb +1 -1
- data/lib/jamf/api/json_objects/cellular_network.rb +1 -1
- data/lib/jamf/api/json_objects/change_log_entry.rb +1 -1
- data/lib/jamf/api/json_objects/computer_prestage_skip_setup_items.rb +1 -1
- data/lib/jamf/api/json_objects/country.rb +1 -1
- data/lib/jamf/api/json_objects/criterion.rb +1 -1
- data/lib/jamf/api/json_objects/device_enrollment_device.rb +6 -4
- data/lib/jamf/api/json_objects/device_enrollment_sync_status.rb +1 -1
- data/lib/jamf/api/json_objects/extension_attribute_value.rb +1 -1
- data/lib/jamf/api/json_objects/installed_application.rb +1 -1
- data/lib/jamf/api/json_objects/installed_certificate.rb +1 -1
- data/lib/jamf/api/json_objects/installed_configuration_profile.rb +1 -1
- data/lib/jamf/api/json_objects/installed_ebook.rb +1 -1
- data/lib/jamf/api/json_objects/installed_provisioning_profile.rb +1 -1
- data/lib/jamf/api/json_objects/inventory_preload_extension_attribute.rb +1 -1
- data/lib/jamf/api/json_objects/ios_details.rb +1 -1
- data/lib/jamf/api/json_objects/location.rb +1 -1
- data/lib/jamf/api/json_objects/md_prestage_name.rb +1 -1
- data/lib/jamf/api/json_objects/md_prestage_names.rb +1 -1
- data/lib/jamf/api/json_objects/md_prestage_skip_setup_items.rb +1 -1
- data/lib/jamf/api/json_objects/mobile_device_details.rb +1 -1
- data/lib/jamf/api/json_objects/mobile_device_security.rb +1 -1
- data/lib/jamf/api/json_objects/prestage_assignment.rb +5 -3
- data/lib/jamf/api/json_objects/prestage_location.rb +1 -1
- data/lib/jamf/api/json_objects/prestage_purchasing_data.rb +1 -1
- data/lib/jamf/api/json_objects/prestage_scope.rb +1 -1
- data/lib/jamf/api/json_objects/prestage_sync_status.rb +1 -1
- data/lib/jamf/api/json_objects/purchasing_data.rb +1 -1
- data/lib/jamf/api/mixins/abstract.rb +1 -1
- data/lib/jamf/api/mixins/bulk_deletable.rb +1 -1
- data/lib/jamf/api/mixins/change_log.rb +3 -1
- data/lib/jamf/api/mixins/extendable.rb +1 -1
- data/lib/jamf/api/mixins/immutable.rb +1 -1
- data/lib/jamf/api/mixins/locatable.rb +1 -1
- data/lib/jamf/api/mixins/lockable.rb +1 -1
- data/lib/jamf/api/mixins/referable.rb +1 -1
- data/lib/jamf/api/mixins/searchable.rb +3 -3
- data/lib/jamf/api/mixins/uncreatable.rb +1 -1
- data/lib/jamf/api/mixins/undeletable.rb +1 -1
- data/lib/jamf/api/resources/collection_resources/account.rb +1 -1
- data/lib/jamf/api/resources/collection_resources/advanced_mobile_device_search.rb +1 -1
- data/lib/jamf/api/resources/collection_resources/advanced_user_search.rb +1 -1
- data/lib/jamf/api/resources/collection_resources/building.rb +1 -1
- data/lib/jamf/api/resources/collection_resources/category.rb +1 -1
- data/lib/jamf/api/resources/collection_resources/computer.rb +1 -1
- data/lib/jamf/api/resources/collection_resources/computer_prestage.rb +1 -1
- data/lib/jamf/api/resources/collection_resources/department.rb +2 -1
- data/lib/jamf/api/resources/collection_resources/device_enrollment.rb +110 -18
- data/lib/jamf/api/resources/collection_resources/extension_attribute.rb +1 -1
- data/lib/jamf/api/resources/collection_resources/inventory_preload_record.rb +9 -2
- data/lib/jamf/api/resources/collection_resources/mobile_device.rb +1 -1
- data/lib/jamf/api/resources/collection_resources/mobile_device_prestage.rb +1 -1
- data/lib/jamf/api/resources/collection_resources/script.rb +1 -1
- data/lib/jamf/api/resources/collection_resources/site.rb +1 -1
- data/lib/jamf/api/resources/collection_resources/time_zone.rb +119 -0
- data/lib/jamf/api/resources/singleton_resources/app_store_country_codes.rb +1 -1
- data/lib/jamf/api/resources/singleton_resources/authorization.rb +1 -1
- data/lib/jamf/api/resources/singleton_resources/client_checkin_settings.rb +1 -1
- data/lib/jamf/api/resources/singleton_resources/reenrollment_settings.rb +1 -1
- data/lib/jamf/client.rb +59 -4
- data/lib/jamf/client/jamf_binary.rb +1 -1
- data/lib/jamf/client/jamf_helper.rb +1 -1
- data/lib/jamf/client/management_action.rb +1 -1
- data/lib/jamf/compatibility.rb +1 -1
- data/lib/jamf/composer.rb +1 -1
- data/lib/jamf/configuration.rb +6 -8
- data/lib/jamf/exceptions.rb +6 -1
- data/lib/jamf/ruby_extensions.rb +2 -1
- data/lib/jamf/ruby_extensions/array.rb +2 -2
- data/lib/jamf/ruby_extensions/array/predicates.rb +1 -1
- data/lib/jamf/ruby_extensions/array/utils.rb +4 -3
- data/lib/jamf/ruby_extensions/dig.rb +52 -0
- data/lib/jamf/ruby_extensions/filetest.rb +1 -1
- data/lib/jamf/ruby_extensions/filetest/predicates.rb +1 -1
- data/lib/jamf/ruby_extensions/hash.rb +1 -1
- data/lib/jamf/ruby_extensions/hash/backports.rb +2 -2
- data/lib/jamf/ruby_extensions/ipaddr.rb +1 -1
- data/lib/jamf/ruby_extensions/ipaddr/utils.rb +1 -1
- data/lib/jamf/ruby_extensions/object.rb +1 -1
- data/lib/jamf/ruby_extensions/object/predicates.rb +1 -1
- data/lib/jamf/ruby_extensions/pathname.rb +1 -1
- data/lib/jamf/ruby_extensions/pathname/predicates.rb +1 -1
- data/lib/jamf/ruby_extensions/pathname/utils.rb +1 -1
- data/lib/jamf/ruby_extensions/string.rb +1 -1
- data/lib/jamf/ruby_extensions/string/backports.rb +1 -1
- data/lib/jamf/ruby_extensions/string/conversions.rb +1 -1
- data/lib/jamf/ruby_extensions/string/predicates.rb +14 -4
- data/lib/jamf/utility.rb +1 -1
- data/lib/jamf/validate.rb +1 -1
- data/lib/jamf/version.rb +2 -2
- data/lib/jpapi.rb +1 -1
- data/lib/jss-api.rb +1 -1
- data/lib/jss.rb +5 -2
- data/lib/jss/api_connection.rb +3 -30
- data/lib/jss/api_object.rb +16 -3
- data/lib/jss/api_object/account.rb +1 -1
- data/lib/jss/api_object/advanced_search.rb +1 -1
- data/lib/jss/api_object/advanced_search/advanced_computer_search.rb +1 -1
- data/lib/jss/api_object/advanced_search/advanced_mobile_device_search.rb +1 -1
- data/lib/jss/api_object/advanced_search/advanced_user_search.rb +1 -1
- data/lib/jss/api_object/building.rb +1 -1
- data/lib/jss/api_object/categorizable.rb +1 -1
- data/lib/jss/api_object/category.rb +1 -1
- data/lib/jss/api_object/computer.rb +12 -6
- data/lib/jss/api_object/computer/application_installs.rb +1 -1
- data/lib/jss/api_object/computer_invitation.rb +1 -1
- data/lib/jss/api_object/configuration_profile.rb +4 -2
- data/lib/jss/api_object/configuration_profile/mobile_device_configuration_profile.rb +1 -1
- data/lib/jss/api_object/configuration_profile/osx_configuration_profile.rb +1 -1
- data/lib/jss/api_object/creatable.rb +1 -1
- data/lib/jss/api_object/criteriable.rb +10 -5
- data/lib/jss/api_object/criteriable/criteria.rb +26 -10
- data/lib/jss/api_object/criteriable/criterion.rb +1 -1
- data/lib/jss/api_object/department.rb +1 -1
- data/lib/jss/api_object/directory_binding.rb +273 -0
- data/lib/jss/api_object/directory_binding_type.rb +90 -0
- data/lib/jss/api_object/directory_binding_type/active_directory.rb +502 -0
- data/lib/jss/api_object/directory_binding_type/admitmac.rb +525 -0
- data/lib/jss/api_object/directory_binding_type/centrify.rb +212 -0
- data/lib/jss/api_object/directory_binding_type/open_directory.rb +178 -0
- data/lib/jss/api_object/directory_binding_type/powerbroker_identity_services.rb +73 -0
- data/lib/jss/api_object/disk_encryption_configurations.rb +114 -0
- data/lib/jss/api_object/distribution_point.rb +96 -36
- data/lib/jss/api_object/dock_item.rb +137 -0
- data/lib/jss/api_object/ebook.rb +1 -1
- data/lib/jss/api_object/extendable.rb +67 -28
- data/lib/jss/api_object/extension_attribute.rb +1 -1
- data/lib/jss/api_object/extension_attribute/computer_extension_attribute.rb +1 -1
- data/lib/jss/api_object/extension_attribute/mobile_device_extension_attribute.rb +1 -1
- data/lib/jss/api_object/extension_attribute/user_extension_attribute.rb +1 -1
- data/lib/jss/api_object/group.rb +1 -1
- data/lib/jss/api_object/group/computer_group.rb +1 -1
- data/lib/jss/api_object/group/mobile_device_group.rb +1 -1
- data/lib/jss/api_object/group/user_group.rb +1 -1
- data/lib/jss/api_object/ibeacon.rb +1 -1
- data/lib/jss/api_object/ldap_server.rb +1 -1
- data/lib/jss/api_object/locatable.rb +1 -1
- data/lib/jss/api_object/mac_application.rb +1 -1
- data/lib/jss/api_object/management_history.rb +23 -22
- data/lib/jss/api_object/management_history/audit_event.rb +1 -1
- data/lib/jss/api_object/management_history/casper_imaging_log.rb +1 -1
- data/lib/jss/api_object/management_history/casper_remote_log.rb +1 -1
- data/lib/jss/api_object/management_history/computer_usage_log.rb +1 -1
- data/lib/jss/api_object/management_history/ebook.rb +1 -1
- data/lib/jss/api_object/management_history/hashlike.rb +1 -1
- data/lib/jss/api_object/management_history/mac_app_store_app.rb +1 -1
- data/lib/jss/api_object/management_history/mdm_command.rb +1 -1
- data/lib/jss/api_object/management_history/mobile_device_app.rb +1 -1
- data/lib/jss/api_object/management_history/policy_log.rb +1 -1
- data/lib/jss/api_object/management_history/screen_sharing_log.rb +1 -1
- data/lib/jss/api_object/management_history/user_location_change.rb +1 -1
- data/lib/jss/api_object/matchable.rb +1 -1
- data/lib/jss/api_object/mdm.rb +1 -1
- data/lib/jss/api_object/mobile_device.rb +29 -6
- data/lib/jss/api_object/mobile_device_application.rb +13 -1
- data/lib/jss/api_object/netboot_server.rb +1 -1
- data/lib/jss/api_object/network_segment.rb +153 -59
- data/lib/jss/api_object/package.rb +107 -42
- data/lib/jss/api_object/patch_policy.rb +1 -1
- data/lib/jss/api_object/patch_source.rb +1 -1
- data/lib/jss/api_object/patch_source/patch_external_source.rb +1 -1
- data/lib/jss/api_object/patch_source/patch_internal_source.rb +1 -1
- data/lib/jss/api_object/patch_title.rb +1 -1
- data/lib/jss/api_object/patch_title/version.rb +1 -1
- data/lib/jss/api_object/peripheral.rb +1 -1
- data/lib/jss/api_object/peripheral_type.rb +1 -1
- data/lib/jss/api_object/policy.rb +380 -5
- data/lib/jss/api_object/printer.rb +440 -0
- data/lib/jss/api_object/purchasable.rb +1 -1
- data/lib/jss/api_object/removable_macaddr.rb +1 -1
- data/lib/jss/api_object/restricted_software.rb +1 -1
- data/lib/jss/api_object/scopable.rb +1 -1
- data/lib/jss/api_object/scopable/scope.rb +257 -37
- data/lib/jss/api_object/script.rb +1 -1
- data/lib/jss/api_object/self_servable.rb +7 -7
- data/lib/jss/api_object/self_servable/icon.rb +1 -1
- data/lib/jss/api_object/sitable.rb +6 -2
- data/lib/jss/api_object/site.rb +1 -1
- data/lib/jss/api_object/software_update_server.rb +1 -1
- data/lib/jss/api_object/updatable.rb +1 -1
- data/lib/jss/api_object/uploadable.rb +1 -1
- data/lib/jss/api_object/user.rb +5 -3
- data/lib/jss/api_object/vppable.rb +1 -1
- data/lib/jss/api_object/webhook.rb +1 -1
- data/lib/jss/client.rb +1 -1
- data/lib/jss/client/jamf_binary.rb +1 -1
- data/lib/jss/client/jamf_helper.rb +1 -1
- data/lib/jss/client/management_action.rb +1 -1
- data/lib/jss/compatibility.rb +1 -1
- data/lib/jss/composer.rb +2 -2
- data/lib/jss/configuration.rb +1 -1
- data/lib/jss/db_connection.rb +1 -1
- data/lib/jss/exceptions.rb +1 -1
- data/lib/jss/ruby_extensions.rb +1 -1
- data/lib/jss/ruby_extensions/array.rb +1 -1
- data/lib/jss/ruby_extensions/filetest.rb +1 -1
- data/lib/jss/ruby_extensions/hash.rb +1 -1
- data/lib/jss/ruby_extensions/ipaddr.rb +1 -1
- data/lib/jss/ruby_extensions/pathname.rb +1 -1
- data/lib/jss/ruby_extensions/string.rb +1 -1
- data/lib/jss/ruby_extensions/string/backports.rb +1 -1
- data/lib/jss/ruby_extensions/string/conversions.rb +1 -1
- data/lib/jss/ruby_extensions/string/predicates.rb +14 -4
- data/lib/jss/ruby_extensions/time.rb +1 -1
- data/lib/jss/server.rb +1 -1
- data/lib/jss/utility.rb +9 -23
- data/lib/jss/validate.rb +1 -1
- data/lib/jss/version.rb +2 -2
- data/lib/jss/xml_workaround.rb +1 -1
- data/lib/ruby-jss.rb +1 -1
- data/test/bin/runtests +1 -1
- data/test/lib/testhelper.rb +1 -1
- data/test/lib/testhelper/auth.rb +1 -1
- data/test/lib/testhelper/patch_mgmt.rb +1 -1
- data/test/specs/api_connection_spec.rb +1 -1
- data/test/specs/patch01_source_spec.rb +1 -1
- data/test/specs/patch02_internal_source_spec.rb +1 -1
- data/test/specs/patch03_external_source_spec.rb +1 -1
- data/test/specs/patch04_titles_spec.rb +1 -1
- data/test/specs/patch05_policies_spec.rb +1 -1
- data/test/specs/patch06_cleanup_spec.rb +1 -1
- data/test/specs/policy_spec.rb +1 -1
- metadata +16 -4
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright
|
|
1
|
+
# Copyright 2020 Pixar
|
|
2
2
|
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "Apache License")
|
|
@@ -60,6 +60,8 @@ module Jamf
|
|
|
60
60
|
#
|
|
61
61
|
module ChangeLog
|
|
62
62
|
|
|
63
|
+
# TODO: note can have a max length of 2500 characters.
|
|
64
|
+
|
|
63
65
|
# The change and note history for this resource.
|
|
64
66
|
#
|
|
65
67
|
# The history is cached internally and only re-fetched when
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright
|
|
1
|
+
# Copyright 2020 Pixar
|
|
2
2
|
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "Apache License")
|
|
@@ -161,7 +161,7 @@ module Jamf
|
|
|
161
161
|
enum: SORT_DIRECTIONS
|
|
162
162
|
}
|
|
163
163
|
}.freeze
|
|
164
|
-
|
|
164
|
+
parse_object_model
|
|
165
165
|
end # class Orderby
|
|
166
166
|
|
|
167
167
|
class SeachParams < Jamf::JSONObject
|
|
@@ -194,7 +194,7 @@ module Jamf
|
|
|
194
194
|
}
|
|
195
195
|
|
|
196
196
|
}.freeze
|
|
197
|
-
|
|
197
|
+
parse_object_model
|
|
198
198
|
end # class SearchParams
|
|
199
199
|
|
|
200
200
|
end # module searchable
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright
|
|
1
|
+
# Copyright 2020 Pixar
|
|
2
2
|
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "Apache License")
|
|
@@ -144,6 +144,8 @@ module Jamf
|
|
|
144
144
|
|
|
145
145
|
LATEST_RSRC = 'latest'.freeze
|
|
146
146
|
|
|
147
|
+
DISOWN_RSRC = 'disown'.freeze
|
|
148
|
+
|
|
147
149
|
TYPES = %i[computers mobiledevices].freeze
|
|
148
150
|
|
|
149
151
|
COMPUTERS_RE = /mac/i.freeze
|
|
@@ -152,7 +154,12 @@ module Jamf
|
|
|
152
154
|
#########################################
|
|
153
155
|
|
|
154
156
|
# All devices associated by Apple with a given DeviceEnrollment instance
|
|
155
|
-
# or all defined DeviceEnrollment instances
|
|
157
|
+
# or all defined DeviceEnrollment instances.
|
|
158
|
+
#
|
|
159
|
+
# This data is cached the first time it is read from the API, similarly to
|
|
160
|
+
# how CollectionResources are cached. To refresh the cache, pass
|
|
161
|
+
# a truthy value to the refresh: parameter, or use the Connection's
|
|
162
|
+
# .flushcache method
|
|
156
163
|
#
|
|
157
164
|
# @param instance_ident[Integer, String] the id or name of the
|
|
158
165
|
# DeviceEnrollment instance for which to list the devices. If omitted,
|
|
@@ -161,17 +168,19 @@ module Jamf
|
|
|
161
168
|
# @param type[Symbol] Either :computers or :mobiledevices, returns both if
|
|
162
169
|
# not specified.
|
|
163
170
|
#
|
|
171
|
+
# @param refresh [Boolean] re-read the data from the API?
|
|
172
|
+
#
|
|
164
173
|
# @param cnx[Jamf::Connection] The API connection to use
|
|
165
174
|
#
|
|
166
175
|
# @return [Array<Jamf::DeviceEnrollmentDevice>] The devices associated with
|
|
167
|
-
# the given, or all
|
|
176
|
+
# the given DeviceEnrollment instance, or all instances
|
|
168
177
|
#
|
|
169
|
-
def self.devices(instance_ident = nil, type: nil, cnx: Jamf.cnx)
|
|
178
|
+
def self.devices(instance_ident = nil, type: nil, refresh: false, cnx: Jamf.cnx)
|
|
170
179
|
if type
|
|
171
180
|
raise ArgumentError, "Type must be one of: :#{TYPES.join ', :'}" unless TYPES.include? type
|
|
172
181
|
end
|
|
173
182
|
|
|
174
|
-
devs = fetch_devices(instance_ident, cnx)
|
|
183
|
+
devs = fetch_devices(instance_ident, refresh, cnx)
|
|
175
184
|
return devs unless type
|
|
176
185
|
|
|
177
186
|
if type == :computers
|
|
@@ -181,23 +190,33 @@ module Jamf
|
|
|
181
190
|
end
|
|
182
191
|
end
|
|
183
192
|
|
|
193
|
+
# The serial numbers assigned bu Apple to one, or all of your
|
|
194
|
+
# Device Enrollment instances
|
|
195
|
+
#
|
|
184
196
|
# See .devices
|
|
197
|
+
#
|
|
185
198
|
# @return [Array<String>] just the serial numbers for the devices
|
|
186
199
|
#
|
|
187
|
-
def self.device_sns(instance_ident = nil, type: nil, cnx: Jamf.cnx)
|
|
188
|
-
devices(instance_ident, type: type, cnx: cnx).map(&:serialNumber)
|
|
200
|
+
def self.device_sns(instance_ident = nil, type: nil, refresh: false, cnx: Jamf.cnx)
|
|
201
|
+
devices(instance_ident, type: type, refresh: refresh, cnx: cnx).map(&:serialNumber)
|
|
189
202
|
end
|
|
190
203
|
|
|
204
|
+
# Is the given serial number in one, or any, or your Device Enrollment
|
|
205
|
+
# instances?
|
|
206
|
+
#
|
|
191
207
|
# See .devices
|
|
192
208
|
#
|
|
209
|
+
# @param sn [String] the serialNumber to look for
|
|
210
|
+
#
|
|
193
211
|
# @return [Boolean] is the given SN in a given DeviceEnrollment instance
|
|
194
212
|
# or in DEP at all?
|
|
195
213
|
#
|
|
196
|
-
def self.include?(sn, instance_ident = nil, type: nil, cnx: Jamf.cnx)
|
|
197
|
-
device_sns(instance_ident, type: type, cnx: cnx).j_ci_include? sn
|
|
214
|
+
def self.include?(sn, instance_ident = nil, type: nil, refresh: false, cnx: Jamf.cnx)
|
|
215
|
+
device_sns(instance_ident, type: type, refresh: refresh, cnx: cnx).j_ci_include? sn
|
|
198
216
|
end
|
|
199
217
|
|
|
200
218
|
# See .devices
|
|
219
|
+
#
|
|
201
220
|
# Returns just those devices with the desired profileStatus, which must be
|
|
202
221
|
# an item in DeviceEnrollmentDevice::PROFILE_STATUSES
|
|
203
222
|
#
|
|
@@ -206,14 +225,54 @@ module Jamf
|
|
|
206
225
|
# @return [Array<Jamf::DeviceEnrollmentDevice>] The devices with the desired
|
|
207
226
|
# status, associated with the given, or all, instances
|
|
208
227
|
#
|
|
209
|
-
def self.devices_with_status(status, instance_ident = nil, type: nil, cnx: Jamf.cnx)
|
|
228
|
+
def self.devices_with_status(status, instance_ident = nil, type: nil, refresh: false, cnx: Jamf.cnx)
|
|
210
229
|
unless Jamf::DeviceEnrollmentDevice::PROFILE_STATUSES.include? status
|
|
211
230
|
raise ArgumentError, "profileStatus must be one of: '#{Jamf::DeviceEnrollmentDevice::PROFILE_STATUSES.join "', '"}'"
|
|
212
231
|
end
|
|
213
232
|
|
|
214
|
-
devices(instance_ident, type: type, cnx: cnx).select { |d| d.profileStatus == status }
|
|
233
|
+
devices(instance_ident, type: type, refresh: refresh, cnx: cnx).select { |d| d.profileStatus == status }
|
|
215
234
|
end
|
|
216
235
|
|
|
236
|
+
# Fetch a single device from any defined DeviceEnrollment instance.
|
|
237
|
+
# The instance id containing the device is available in its
|
|
238
|
+
# .deviceEnrollmentProgramInstanceId attribute.
|
|
239
|
+
#
|
|
240
|
+
# @pararm sn [String] the serial number of the device
|
|
241
|
+
#
|
|
242
|
+
# @param instance_ident [String, Integer] the name or id of the instance
|
|
243
|
+
# in which to look for the sn. All instances are searched if omitted.
|
|
244
|
+
#
|
|
245
|
+
# @param refresh [Boolean] re-read the data from the API?
|
|
246
|
+
#
|
|
247
|
+
# @param cnx[Jamf::Connection] The API connection to use
|
|
248
|
+
#
|
|
249
|
+
# @return [Jamf::DeviceEnrollmentDevice] the device as known to DEP
|
|
250
|
+
#
|
|
251
|
+
def self.device(sn, instance_ident = nil, refresh: false, cnx: Jamf.cnx)
|
|
252
|
+
sn.upcase! # SNs from apple are always uppercase
|
|
253
|
+
devs = devices(instance_ident, refresh: refresh, cnx: cnx)
|
|
254
|
+
dev = devs.select { |d| d.serialNumber == sn }.first
|
|
255
|
+
return dev if dev
|
|
256
|
+
|
|
257
|
+
searched = instance_ident ? "DeviceEnrollment instance #{instance_ident}" : 'any DeviceEnrollment instance'
|
|
258
|
+
raise Jamf::NoSuchItemError, "No device with serialNumber '#{sn}' in #{searched}"
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
# The history of sync operations between Apple and a given DeviceEnrollment
|
|
262
|
+
# instanace, or all instances.
|
|
263
|
+
#
|
|
264
|
+
# @param instance_ident[Integer, String] the id or name of the
|
|
265
|
+
# DeviceEnrollment instance for which to get the history. If omitted,
|
|
266
|
+
# the history for all instances will be returned.
|
|
267
|
+
#
|
|
268
|
+
# @param latest [Boolean] show only the latest sync? Only valid when an
|
|
269
|
+
# instance_ident is provided.
|
|
270
|
+
#
|
|
271
|
+
# @param cnx[Jamf::Connection] The API connection to use
|
|
272
|
+
#
|
|
273
|
+
# @return [Jamf::DeviceEnrollmentSyncStatus] When latest = true, the latest
|
|
274
|
+
# sync status.
|
|
275
|
+
# @return [Array<Jamf::DeviceEnrollmentSyncStatus>] The known sync statuses.
|
|
217
276
|
#
|
|
218
277
|
def self.sync_history(instance_ident = nil, latest = false, cnx: Jamf.cnx)
|
|
219
278
|
if instance_ident
|
|
@@ -232,31 +291,60 @@ module Jamf
|
|
|
232
291
|
data.map! { |s| Jamf::DeviceEnrollmentSyncStatus.new s }
|
|
233
292
|
end
|
|
234
293
|
|
|
294
|
+
# disown one or more serial numbers from a given DeviceEnrollment instance
|
|
295
|
+
#
|
|
296
|
+
# @param sns[Array<String>] One or more serial numbers to disown
|
|
297
|
+
#
|
|
298
|
+
# @param from_instance [Integer, String] the id or name of the instance
|
|
299
|
+
# from which to disown the serial numbers
|
|
300
|
+
#
|
|
301
|
+
# @param cnx[Jamf::Connection] The API connection to use
|
|
302
|
+
#
|
|
303
|
+
# @return [void]
|
|
304
|
+
#
|
|
305
|
+
def self.disown(*sns, from_instance:, cnx: Jamf.cnx)
|
|
306
|
+
instance_id = valid_id from_instance, cnx: cnx
|
|
307
|
+
raise Jamf::NoSuchItemError, "No DeviceEnrollment instance matches '#{instance}'" unless instance_id
|
|
308
|
+
|
|
309
|
+
sns.flatten!
|
|
310
|
+
sns.map!(&:to_s)
|
|
311
|
+
data = { devices: sns }
|
|
312
|
+
disown_rsrc = "#{self.class::RSRC_VERSION}/#{self.class::RSRC_PATH}/#{instance_id}/#{DISOWN_RSRC}"
|
|
313
|
+
|
|
314
|
+
cnx.post(disown_rsrc, data)
|
|
315
|
+
end
|
|
316
|
+
|
|
235
317
|
# Private Class Methods
|
|
236
318
|
###############################################
|
|
237
319
|
|
|
238
320
|
# Private, used by the .devices class method
|
|
239
|
-
def self.fetch_devices(instance_ident, cnx)
|
|
321
|
+
def self.fetch_devices(instance_ident, refresh, cnx)
|
|
240
322
|
if instance_ident
|
|
241
323
|
instance_id = valid_id instance_ident, cnx: cnx
|
|
242
|
-
raise Jamf::NoSuchItemError "No DeviceEnrollment instance matches '#{instance_ident}'" unless instance_id
|
|
324
|
+
raise Jamf::NoSuchItemError, "No DeviceEnrollment instance matches '#{instance_ident}'" unless instance_id
|
|
243
325
|
|
|
244
|
-
devs = devices_for_instance_id instance_id, cnx
|
|
326
|
+
devs = devices_for_instance_id instance_id, refresh, cnx
|
|
245
327
|
else
|
|
246
328
|
devs = []
|
|
247
329
|
all_ids.each do |id|
|
|
248
|
-
devs += devices_for_instance_id id, cnx
|
|
330
|
+
devs += devices_for_instance_id id, refresh, cnx
|
|
249
331
|
end
|
|
250
332
|
end
|
|
251
333
|
devs
|
|
252
334
|
end
|
|
253
335
|
private_class_method :fetch_devices
|
|
254
336
|
|
|
255
|
-
# Private, used by the .
|
|
256
|
-
def self.devices_for_instance_id(instance_id, cnx)
|
|
337
|
+
# Private, used by the .fetch_devices class method
|
|
338
|
+
def self.devices_for_instance_id(instance_id, refresh, cnx)
|
|
339
|
+
@device_cache ||= {}
|
|
340
|
+
@device_cache[cnx] ||= {}
|
|
341
|
+
@device_cache[cnx][instance_id] = nil if refresh
|
|
342
|
+
return @device_cache[cnx][instance_id] if @device_cache[cnx][instance_id]
|
|
343
|
+
|
|
257
344
|
data = cnx.get("#{RSRC_VERSION}/#{RSRC_PATH}/#{instance_id}/#{DEVICES_RSRC}")[:results]
|
|
258
345
|
|
|
259
|
-
data.map { |dev| Jamf::DeviceEnrollmentDevice.new dev }
|
|
346
|
+
data.map! { |dev| Jamf::DeviceEnrollmentDevice.new dev }
|
|
347
|
+
@device_cache[cnx][instance_id] = data
|
|
260
348
|
end
|
|
261
349
|
private_class_method :devices_for_instance_id
|
|
262
350
|
|
|
@@ -287,6 +375,10 @@ module Jamf
|
|
|
287
375
|
sync_history :latest
|
|
288
376
|
end
|
|
289
377
|
|
|
378
|
+
def disown(*sns)
|
|
379
|
+
self.class.disown sns, from_instance: @id, cnx: @cnx
|
|
380
|
+
end
|
|
381
|
+
|
|
290
382
|
end # class
|
|
291
383
|
|
|
292
384
|
end # module
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright
|
|
1
|
+
# Copyright 2020 Pixar
|
|
2
2
|
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "Apache License")
|
|
@@ -224,7 +224,7 @@ module Jamf
|
|
|
224
224
|
extensionAttributes: {
|
|
225
225
|
class: Jamf::InventoryPreloadExtensionAttribute,
|
|
226
226
|
multi: true,
|
|
227
|
-
aliases: %i[
|
|
227
|
+
aliases: %i[eas]
|
|
228
228
|
}
|
|
229
229
|
|
|
230
230
|
}.freeze
|
|
@@ -251,6 +251,13 @@ module Jamf
|
|
|
251
251
|
extensionAttributes_delete_at idx if idx
|
|
252
252
|
end
|
|
253
253
|
|
|
254
|
+
# a Hash of ea name => ea_value for all eas currently set.
|
|
255
|
+
def ext_attrs
|
|
256
|
+
eas = {}
|
|
257
|
+
extensionAttributes.each { |ea| eas[ea.name] = ea.value }
|
|
258
|
+
eas
|
|
259
|
+
end
|
|
260
|
+
|
|
254
261
|
# clear all values for this record except id, serialNumber, and deviceType
|
|
255
262
|
def clear
|
|
256
263
|
OBJECT_MODEL.keys.each do |attr|
|