ruby-jss 0.11.0 → 0.12.0
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.
Potentially problematic release.
This version of ruby-jss might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGES.md +21 -1
- data/lib/jss.rb +8 -6
- data/lib/jss/api_object.rb +1 -2
- data/lib/jss/api_object/computer.rb +45 -25
- data/lib/jss/api_object/computer/application_installs.rb +119 -0
- data/lib/jss/api_object/{osx_configuration_profile.rb → configuration_profile.rb} +14 -94
- data/lib/jss/api_object/configuration_profile/mobile_device_configuration_profile.rb +75 -0
- data/lib/jss/api_object/configuration_profile/osx_configuration_profile.rb +117 -0
- data/lib/jss/api_object/mdm.rb +2 -0
- data/lib/jss/api_object/mobile_device.rb +1 -1
- data/lib/jss/api_object/self_servable.rb +47 -9
- data/lib/jss/client.rb +62 -356
- data/lib/jss/client/jamf_binary.rb +132 -0
- data/lib/jss/client/jamf_helper.rb +298 -0
- data/lib/jss/client/management_action.rb +114 -0
- data/lib/jss/composer.rb +145 -168
- data/lib/jss/ruby_extensions/hash.rb +119 -64
- data/lib/jss/version.rb +1 -1
- metadata +29 -4
- data/lib/jss/api_object/mobile_device_configuration_profile.rb +0 -62
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0fd7571a4225c7255724e6de59c0fb44e6bd595b
|
4
|
+
data.tar.gz: fb5de557c051ae61c7993db97590195b76fa6a30
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f8ca00b8718f58bad9529b5742964c8c0c19dcfb145ed97ad30e4b2c9b9ff69fcab44fa09fe32207671c56bafd181e0c3d10d1dbcba30f599b11471ba8a4002a
|
7
|
+
data.tar.gz: 8ee7f5f01cf030dd356210e52f69b5cbcc0e231736412b0678755f6fc2ddc667d7bf47bb4c1694e8b70fa6eb234b3e41bc00a2fd2b92a7128a83396d0a65b79c
|
data/CHANGES.md
CHANGED
@@ -1,5 +1,25 @@
|
|
1
1
|
# Change History
|
2
2
|
|
3
|
+
## v 0.12.0, 2018-04-16
|
4
|
+
|
5
|
+
- Simplification: when building .pkg's with JSS::Composer.mk_pkg, only two params are related to Package Signing: 'signing_identity:' the name of the signing identity to use, and and 'signing_options:' a string of all other signing-related CLI options that will be passed to the pkgbuild command, e.g. keychain locations, timestamps, certs, etc. For details, see `man pkgbuild`
|
6
|
+
|
7
|
+
- Improvement: Now augmenting ruby Hashes with an embeded 'recursive-open-struct' version of themselves. This simplifies accessing values from deeply-nested Hash structures, e.g. JSS::Computer#hardware instead of `computer_instance.hardware[:storage].first[:partition][:percentage_full]` you can do `computer_instance.hardware.jss_ros.storage.first.partition.percentage_full`. See http://www.rubydoc.info/gems/ruby-jss/Hash for details. Uses the [recursive-open-struct gem](https://github.com/aetherknight/recursive-open-struct).
|
8
|
+
|
9
|
+
- Add: The computerapplications/application endpoint is now implemented as the JSS::Computer.application_installs class method so you can query lists of computers that have certain apps installed.
|
10
|
+
|
11
|
+
- Improvement: the JSS::Computer class is now defined in multiple files. The single computer.rb file was getting far to unwieldy.
|
12
|
+
|
13
|
+
- Fix: Setting the first icon of a newly-created JSS::Policy now works. Thanks @christopher.kemp for reporting this one
|
14
|
+
|
15
|
+
- Add: JSS::MobileDeviceConfigurationProfile is now more fleshed-out and is Updatable.
|
16
|
+
|
17
|
+
- Improvement: JSS::MobileDeviceConfigurationProfile and JSS::OSXConfigurationProfile now share an abstract parent class, JSS::ConfigurationProfile, containing common code.
|
18
|
+
|
19
|
+
- Fix: the SelfServable module was mis-handling 'user-removability' data for config profiles.
|
20
|
+
|
21
|
+
- Fix: Typo and missing method alias, caught by csfjeff @ github, issue #23
|
22
|
+
|
3
23
|
## v 0.11.0, 2018-03-12
|
4
24
|
|
5
25
|
- Fix: NoMethod error when saving JSS::Policy was due to a typo in a method call.
|
@@ -7,7 +27,7 @@
|
|
7
27
|
- Fix: Initialization of Creatable objects using certain mixins (Extendable, Sitable, Categorizable) either failed, or errored when trying to set their values. Now fixed. Thanks @mylescarrick for reporting this one.
|
8
28
|
|
9
29
|
- Improvement: Updated general attributes for computers and mobile devices
|
10
|
-
|
30
|
+
s
|
11
31
|
- Improvement: Computers and MobileDevices are now Creatable. Use the .make class method to create an unsaved instance, then .create/.save instance method to create the JSS record. Note: Mobile Devices need both a unique serial number and unique udid to be accepted by the API.
|
12
32
|
|
13
33
|
- Improvement: Handling of 'site' data is now done via the JSS::Sitable mixin module
|
data/lib/jss.rb
CHANGED
@@ -53,13 +53,14 @@ module JSS
|
|
53
53
|
require 'yaml'
|
54
54
|
require 'open3'
|
55
55
|
require 'English'
|
56
|
+
require 'json'
|
56
57
|
|
57
58
|
###################
|
58
59
|
### Gems
|
59
60
|
require 'rest-client'
|
60
|
-
require 'json'
|
61
61
|
require 'plist'
|
62
62
|
require 'immutable-struct'
|
63
|
+
require 'recursive-open-struct'
|
63
64
|
|
64
65
|
### Constants
|
65
66
|
#####################################
|
@@ -100,8 +101,6 @@ module JSS
|
|
100
101
|
|
101
102
|
module Composer; end
|
102
103
|
|
103
|
-
|
104
|
-
|
105
104
|
### Mix-in Sub Modules with Classes
|
106
105
|
|
107
106
|
module Criteriable
|
@@ -117,11 +116,12 @@ module JSS
|
|
117
116
|
|
118
117
|
class APIObject; end
|
119
118
|
class APIConnection; end
|
120
|
-
class Client; end
|
121
119
|
class DBConnection; end
|
122
120
|
class Server; end
|
123
121
|
class Icon; end
|
124
122
|
class Preferences; end
|
123
|
+
class Client; end
|
124
|
+
|
125
125
|
|
126
126
|
### SubClasses
|
127
127
|
#####################################
|
@@ -143,6 +143,10 @@ module JSS
|
|
143
143
|
class MobileDeviceGroup < JSS::Group; end
|
144
144
|
class UserGroup < JSS::Group; end
|
145
145
|
|
146
|
+
class ConfigurationProfile < JSS::APIObject; end
|
147
|
+
class OSXConfigurationProfile < JSS::ConfigurationProfile; end
|
148
|
+
class MobileDeviceConfigurationProfile < JSS::ConfigurationProfile; end
|
149
|
+
|
146
150
|
### APIObject Classes without SubClasses
|
147
151
|
|
148
152
|
class Account < JSS::APIObject; end
|
@@ -155,11 +159,9 @@ module JSS
|
|
155
159
|
class LDAPServer < JSS::APIObject; end
|
156
160
|
class MacApplication < JSS::APIObject; end
|
157
161
|
class MobileDevice < JSS::APIObject; end
|
158
|
-
class MobileDeviceConfigurationProfile < JSS::APIObject; end
|
159
162
|
class MobileDeviceApplication < JSS::APIObject; end
|
160
163
|
class NetBootServer < JSS::APIObject; end
|
161
164
|
class NetworkSegment < JSS::APIObject; end
|
162
|
-
class OSXConfigurationProfile < JSS::APIObject; end
|
163
165
|
class Package < JSS::APIObject; end
|
164
166
|
class Patch < JSS::APIObject; end
|
165
167
|
class PatchPolicy < JSS::APIObject; end
|
data/lib/jss/api_object.rb
CHANGED
@@ -1142,6 +1142,7 @@ require 'jss/api_object/scopable'
|
|
1142
1142
|
|
1143
1143
|
### APIObject SubClasses with SubClasses
|
1144
1144
|
require 'jss/api_object/advanced_search'
|
1145
|
+
require 'jss/api_object/configuration_profile'
|
1145
1146
|
require 'jss/api_object/extension_attribute'
|
1146
1147
|
require 'jss/api_object/group'
|
1147
1148
|
|
@@ -1158,10 +1159,8 @@ require 'jss/api_object/ldap_server'
|
|
1158
1159
|
require 'jss/api_object/mac_application'
|
1159
1160
|
require 'jss/api_object/mobile_device'
|
1160
1161
|
require 'jss/api_object/mobile_device_application'
|
1161
|
-
require 'jss/api_object/mobile_device_configuration_profile'
|
1162
1162
|
require 'jss/api_object/netboot_server'
|
1163
1163
|
require 'jss/api_object/network_segment'
|
1164
|
-
require 'jss/api_object/osx_configuration_profile'
|
1165
1164
|
require 'jss/api_object/package'
|
1166
1165
|
require 'jss/api_object/patch'
|
1167
1166
|
require 'jss/api_object/patch_policy'
|
@@ -482,7 +482,7 @@ module JSS
|
|
482
482
|
# A subset of management data for a given computer.
|
483
483
|
# This private method is called by self.management_data, q.v.
|
484
484
|
#
|
485
|
-
def self.management_data_subset(id, subset: nil, only: nil,
|
485
|
+
def self.management_data_subset(id, subset: nil, only: nil, api: JSS.api)
|
486
486
|
raise "Subset must be one of :#{MGMT_DATA_SUBSETS.join ', :'}" unless MGMT_DATA_SUBSETS.include? subset
|
487
487
|
subset_rsrc = MGMT_DATA_RSRC + "/id/#{id}/subset/#{subset}"
|
488
488
|
subset_data = api.get_rsrc(subset_rsrc)[MGMT_DATA_KEY]
|
@@ -497,7 +497,6 @@ module JSS
|
|
497
497
|
# identifiers
|
498
498
|
################
|
499
499
|
|
500
|
-
|
501
500
|
# @return [String] the secondary mac address
|
502
501
|
attr_reader :alt_mac_address
|
503
502
|
|
@@ -505,7 +504,7 @@ module JSS
|
|
505
504
|
attr_reader :asset_tag
|
506
505
|
|
507
506
|
# @return [String] the barcodes
|
508
|
-
attr_reader :
|
507
|
+
attr_reader :barcode1, :barcode2
|
509
508
|
|
510
509
|
# @return [String] The name of the distribution point for this computer
|
511
510
|
attr_reader :distribution_point
|
@@ -736,10 +735,19 @@ module JSS
|
|
736
735
|
def initialize(args = {})
|
737
736
|
super args
|
738
737
|
if @in_jss
|
738
|
+
|
739
|
+
# mutable stuff
|
739
740
|
@alt_mac_address = @init_data[:general][:alt_mac_address]
|
740
741
|
@asset_tag = @init_data[:general][:asset_tag]
|
741
|
-
@
|
742
|
-
@
|
742
|
+
@barcode1 = @init_data[:general][:barcode_1]
|
743
|
+
@barcode2 = @init_data[:general][:barcode_2]
|
744
|
+
@mac_address = @init_data[:general][:mac_address]
|
745
|
+
@managed = @init_data[:general][:remote_management][:managed]
|
746
|
+
@management_username = @init_data[:general][:remote_management][:management_username]
|
747
|
+
@serial_number = @init_data[:general][:serial_number]
|
748
|
+
@udid = @init_data[:general][:udid]
|
749
|
+
|
750
|
+
# immutable single-values
|
743
751
|
@distribution_point = @init_data[:general][:distribution_point]
|
744
752
|
@initial_entry_date = JSS.epoch_to_time @init_data[:general][:initial_entry_date_epoch]
|
745
753
|
@last_enrolled = JSS.epoch_to_time @init_data[:general][:last_enrolled_date_epoch]
|
@@ -747,18 +755,12 @@ module JSS
|
|
747
755
|
@itunes_store_account_is_active = @init_data[:general][:itunes_store_account_is_active]
|
748
756
|
@jamf_version = @init_data[:general][:jamf_version]
|
749
757
|
@last_contact_time = JSS.epoch_to_time @init_data[:general][:last_contact_time_epoch]
|
750
|
-
@mac_address = @init_data[:general][:mac_address]
|
751
|
-
@managed = @init_data[:general][:remote_management][:managed]
|
752
|
-
@management_username = @init_data[:general][:remote_management][:management_username]
|
753
758
|
@mdm_capable = @init_data[:general][:mdm_capable]
|
754
759
|
@mdm_capable_users = @init_data[:general][:mdm_capable_users].values
|
755
760
|
@netboot_server = @init_data[:general][:netboot_server]
|
756
761
|
@platform = @init_data[:general][:platform]
|
757
762
|
@report_date = JSS.epoch_to_time @init_data[:general][:report_date_epoch]
|
758
|
-
@serial_number = @init_data[:general][:serial_number]
|
759
|
-
@site = JSS::APIObject.get_name(@init_data[:general][:site])
|
760
763
|
@sus = @init_data[:general][:sus]
|
761
|
-
@udid = @init_data[:general][:udid]
|
762
764
|
|
763
765
|
@configuration_profiles = @init_data[:configuration_profiles]
|
764
766
|
@certificates = @init_data[:certificates]
|
@@ -767,6 +769,16 @@ module JSS
|
|
767
769
|
@peripherals = @init_data[:peripherals]
|
768
770
|
@software = @init_data[:software]
|
769
771
|
|
772
|
+
# Freeze immutable things.
|
773
|
+
# These are updated via recon, and aren't sent
|
774
|
+
# with #update, so changing them here is meaningless anyway.
|
775
|
+
@configuration_profiles.freeze
|
776
|
+
@certificates.freeze
|
777
|
+
@groups_accounts.freeze
|
778
|
+
@hardware.freeze
|
779
|
+
@peripherals.freeze
|
780
|
+
@software.freeze
|
781
|
+
|
770
782
|
@management_password = nil
|
771
783
|
else
|
772
784
|
@udid = args[:udid]
|
@@ -774,8 +786,8 @@ module JSS
|
|
774
786
|
@asset_tag = args[:asset_tag]
|
775
787
|
@mac_address = args[:mac_address]
|
776
788
|
@alt_mac_address = args[:alt_mac_address]
|
777
|
-
@
|
778
|
-
@
|
789
|
+
@barcode1 = args[:barcode_1]
|
790
|
+
@barcode2 = args[:barcode_2]
|
779
791
|
end
|
780
792
|
end # initialize
|
781
793
|
|
@@ -953,18 +965,18 @@ module JSS
|
|
953
965
|
end
|
954
966
|
|
955
967
|
#
|
956
|
-
def
|
957
|
-
return nil if @
|
968
|
+
def barcode1=(new_val)
|
969
|
+
return nil if @barcode1 == new_val
|
958
970
|
new_val.strip!
|
959
|
-
@
|
971
|
+
@barcode1 = new_val
|
960
972
|
@need_to_update = true
|
961
973
|
end
|
962
974
|
|
963
975
|
#
|
964
|
-
def
|
965
|
-
return nil if @
|
976
|
+
def barcode2=(new_val)
|
977
|
+
return nil if @barcode2 == new_val
|
966
978
|
new_val.strip!
|
967
|
-
@
|
979
|
+
@barcode2 = new_val
|
968
980
|
@need_to_update = true
|
969
981
|
end
|
970
982
|
|
@@ -1021,8 +1033,8 @@ module JSS
|
|
1021
1033
|
super
|
1022
1034
|
@alt_mac_address = nil
|
1023
1035
|
@asset_tag = nil
|
1024
|
-
@
|
1025
|
-
@
|
1036
|
+
@barcode1 = nil
|
1037
|
+
@barcode2 = nil
|
1026
1038
|
@distribution_point = nil
|
1027
1039
|
@initial_entry_date = nil
|
1028
1040
|
@ip_address = nil
|
@@ -1060,8 +1072,14 @@ module JSS
|
|
1060
1072
|
|
1061
1073
|
# aliases
|
1062
1074
|
alias alt_macaddress alt_mac_address
|
1063
|
-
alias bar_code_1
|
1064
|
-
alias bar_code_2
|
1075
|
+
alias bar_code_1 barcode1
|
1076
|
+
alias bar_code_2 barcode2
|
1077
|
+
alias barcode_1 barcode1
|
1078
|
+
alias barcode_2 barcode2
|
1079
|
+
alias bar_code_1= barcode1=
|
1080
|
+
alias bar_code_2= barcode2=
|
1081
|
+
alias barcode_1= barcode1=
|
1082
|
+
alias barcode_2= barcode2=
|
1065
1083
|
alias managed? managed
|
1066
1084
|
alias mdm? mdm_capable
|
1067
1085
|
alias last_recon report_date
|
@@ -1090,8 +1108,8 @@ module JSS
|
|
1090
1108
|
general.add_element('name').text = @name
|
1091
1109
|
general.add_element('alt_mac_address').text = @alt_mac_address
|
1092
1110
|
general.add_element('asset_tag').text = @asset_tag
|
1093
|
-
general.add_element('barcode_1').text = @
|
1094
|
-
general.add_element('barcode_2').text = @
|
1111
|
+
general.add_element('barcode_1').text = @barcode1
|
1112
|
+
general.add_element('barcode_2').text = @barcode2
|
1095
1113
|
general.add_element('ip_address').text = @ip_address
|
1096
1114
|
general.add_element('mac_address').text = @mac_address
|
1097
1115
|
general.add_element('udid').text = @udid
|
@@ -1116,3 +1134,5 @@ module JSS
|
|
1116
1134
|
end # class Computer
|
1117
1135
|
|
1118
1136
|
end # module
|
1137
|
+
|
1138
|
+
require 'jss/api_object/computer/application_installs'
|
@@ -0,0 +1,119 @@
|
|
1
|
+
# Copyright 2018 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
|
+
#
|
27
|
+
module JSS
|
28
|
+
|
29
|
+
# This file implements the 'computerapplications' API endpoint, used
|
30
|
+
# for searching for computers with certain applications installed.
|
31
|
+
#
|
32
|
+
# All the methods defined here are class methods on JSS::Computer
|
33
|
+
# since they all return lists of computers and apps.
|
34
|
+
#
|
35
|
+
# The apps installed on a JSS::Computer instance are available via the
|
36
|
+
# #apps instance method (a shortcut that looks into the 'software' subset)
|
37
|
+
#
|
38
|
+
|
39
|
+
#
|
40
|
+
class Computer < JSS::APIObject
|
41
|
+
|
42
|
+
COMPUTER_APPLICATIONS_RSRC = 'computerapplications/application'.freeze
|
43
|
+
|
44
|
+
# Query the JSS for computers with some app installed. An app name is required
|
45
|
+
# as the first parameter.
|
46
|
+
#
|
47
|
+
# If no other parameters are given, returns a Hash, one key per version of the
|
48
|
+
# app. For each version there is an array of Hashes, one Hash for each
|
49
|
+
# computer with that version. The sub hashes contain keys for the computer's
|
50
|
+
# identifiers, i.e. :name, :id, :udid, :serial_number, :mac_address.
|
51
|
+
#
|
52
|
+
# If one or more inventory fields are provided in the 'fields' parameter,
|
53
|
+
# each computer's hash also has keys and values for those fields if they
|
54
|
+
# exist in the JSS. These fields are those available in the display options
|
55
|
+
# for Advanced Computer Searches (including extention attribute names) and
|
56
|
+
# their names are case-sensitive, so 'Username', not 'username'
|
57
|
+
#
|
58
|
+
# If a specific version is provided in the 'version' parameter, only computers
|
59
|
+
# containing that version of the app are returned as an Array of Hashes.
|
60
|
+
#
|
61
|
+
# If the ids_only parameter is truthy, an Array of JSS id numbers for
|
62
|
+
# computers with this app is returned. In this case the 'fields' parameter
|
63
|
+
# is ignored, however the 'version' parameters is still valid and will
|
64
|
+
# restrict the list to those computer ids with that version installed.
|
65
|
+
#
|
66
|
+
# This method implements the 'computerapplications' API endpoint.
|
67
|
+
#
|
68
|
+
# NOTE: To see all the apps installed on a specific computer, fetch the
|
69
|
+
# JSS::Computer instance and call its {JSS::Computer#apps} method.
|
70
|
+
#
|
71
|
+
# @param appname [String] The name of the app to look for, e.g. 'Transmogrifier.app'
|
72
|
+
#
|
73
|
+
# @param fields [String,Array<String>] Additional 'inventory fields' to return
|
74
|
+
# with each computer's data
|
75
|
+
#
|
76
|
+
# @param version [String] Limit search to a specific version of the app
|
77
|
+
#
|
78
|
+
# @param ids_only [Boolean] Just return an array of the id's of computers
|
79
|
+
# found with this query. Defaults to false
|
80
|
+
#
|
81
|
+
# @param api [JSS::APIConnection] The API connection to use for the query.
|
82
|
+
# default: JSS.api
|
83
|
+
#
|
84
|
+
# @return [Array<Integer>] When ids_only == true, the ids of computers with
|
85
|
+
# the app installed (possibly limited to version)
|
86
|
+
#
|
87
|
+
# @return [Array<Hash>] When version is provided, An Array of Hashes, one
|
88
|
+
# for each computer, with keys for identifiers plus any requested fields.
|
89
|
+
#
|
90
|
+
# @return [Hash{String => Array<Hash>}] When no version is provided, a Hash
|
91
|
+
# with keys for each version, pointing to an array of Hashes, one for
|
92
|
+
# each computer with that version. Each computer's Hash has keys for
|
93
|
+
# identifiers plus any requested fields.
|
94
|
+
#
|
95
|
+
#
|
96
|
+
def self.application_installs(appname, fields: [], version: nil, ids_only: false, api: JSS.api)
|
97
|
+
fields = [fields] unless fields.is_a? Array
|
98
|
+
|
99
|
+
rsrc = "#{COMPUTER_APPLICATIONS_RSRC}/#{appname}"
|
100
|
+
rsrc << "/version/#{version}" if version
|
101
|
+
rsrc << "/inventory/#{fields.join ','}" unless ids_only || fields.empty?
|
102
|
+
|
103
|
+
# get_rsrc will URI.encode the rsrc
|
104
|
+
result = api.get_rsrc(rsrc)[:computer_applications]
|
105
|
+
|
106
|
+
return result[:unique_computers].map { |c| c[:id] } if ids_only
|
107
|
+
|
108
|
+
if version.nil?
|
109
|
+
hash_by_version = {}
|
110
|
+
result[:versions].each { |v| hash_by_version[v[:number]] = v[:computers] }
|
111
|
+
return hash_by_version
|
112
|
+
end
|
113
|
+
|
114
|
+
result[:versions].first[:computers]
|
115
|
+
end # self.application_search
|
116
|
+
|
117
|
+
end # Computer
|
118
|
+
|
119
|
+
end # JSS
|
@@ -29,17 +29,18 @@ module JSS
|
|
29
29
|
# Classes
|
30
30
|
###################################
|
31
31
|
|
32
|
-
#
|
32
|
+
# The parent class of OSXConfigurationProfile and MobileDeviceConfigurationProfile
|
33
33
|
#
|
34
34
|
# Note that the profile payloads and the profile UUID cannot be edited or updated with this via this class.
|
35
35
|
# Use the web UI.
|
36
36
|
#
|
37
37
|
# @see JSS::APIObject
|
38
38
|
#
|
39
|
-
class
|
39
|
+
class ConfigurationProfile < JSS::APIObject
|
40
40
|
|
41
41
|
# Mix-Ins
|
42
42
|
###################################
|
43
|
+
|
43
44
|
include JSS::Updatable
|
44
45
|
include JSS::Scopable
|
45
46
|
include JSS::SelfServable
|
@@ -49,40 +50,14 @@ module JSS
|
|
49
50
|
# Class Constants
|
50
51
|
###################################
|
51
52
|
|
52
|
-
# The
|
53
|
-
RSRC_BASE = 'osxconfigurationprofiles'.freeze
|
54
|
-
|
55
|
-
# the hash key used for the JSON list output of all objects in the JSS
|
56
|
-
RSRC_LIST_KEY = :os_x_configuration_profiles
|
57
|
-
|
58
|
-
# The hash key used for the JSON object output.
|
59
|
-
# It's also used in various error messages
|
60
|
-
RSRC_OBJECT_KEY = :os_x_configuration_profile
|
61
|
-
|
62
|
-
# these keys, as well as :id and :name, are present in valid API JSON data for this class
|
63
|
-
VALID_DATA_KEYS = %i[distribution_method scope redeploy_on_update].freeze
|
64
|
-
|
65
|
-
# Our scopes deal with computers
|
66
|
-
SCOPE_TARGET_KEY = :computers
|
67
|
-
|
68
|
-
# Our SelfService happens on OSX
|
69
|
-
SELF_SERVICE_TARGET = :osx
|
70
|
-
|
71
|
-
# Our SelfService deploys profiles
|
72
|
-
SELF_SERVICE_PAYLOAD = :profile
|
73
|
-
|
74
|
-
# The possible values for the :distribution_method
|
53
|
+
# The possible values for the distribution_method/deployment_method
|
75
54
|
DISTRIBUTION_METHODS = ['Install Automatically', 'Make Available in Self Service'].freeze
|
76
55
|
|
56
|
+
# which DISTRIBUTION_METHODS means we're in self service?
|
77
57
|
SELF_SERVICE_DIST_METHOD = 'Make Available in Self Service'.freeze
|
78
58
|
|
79
|
-
#
|
80
|
-
|
81
|
-
|
82
|
-
# the object type for this object in
|
83
|
-
# the object history table.
|
84
|
-
# See {APIObject#add_object_history_entry}
|
85
|
-
OBJECT_HISTORY_OBJECT_TYPE = 4
|
59
|
+
# Our SelfService deploys profiles
|
60
|
+
SELF_SERVICE_PAYLOAD = :profile
|
86
61
|
|
87
62
|
# Where is the Site data in the API JSON?
|
88
63
|
SITE_SUBSET = :general
|
@@ -93,15 +68,6 @@ module JSS
|
|
93
68
|
# @return [String] the description of this profile
|
94
69
|
attr_reader :description
|
95
70
|
|
96
|
-
# @return [String] the distribution_method of this profile
|
97
|
-
attr_reader :distribution_method
|
98
|
-
|
99
|
-
# @return [Boolean] can the user remove this profile
|
100
|
-
attr_reader :user_removable
|
101
|
-
|
102
|
-
# @return [String] the level (user/computer) of this profile
|
103
|
-
attr_reader :level
|
104
|
-
|
105
71
|
# @return [String] the uuid of this profile. NOT Updatable
|
106
72
|
attr_reader :uuid
|
107
73
|
|
@@ -118,11 +84,7 @@ module JSS
|
|
118
84
|
#
|
119
85
|
def initialize(args = {})
|
120
86
|
super
|
121
|
-
|
122
87
|
@description = @main_subset[:description]
|
123
|
-
@distribution_method = @main_subset[:distribution_method]
|
124
|
-
@user_removable = @main_subset[:user_removable]
|
125
|
-
@level = @main_subset[:level]
|
126
88
|
@uuid = @main_subset[:uuid]
|
127
89
|
@redeploy_on_update = @main_subset[:redeploy_on_update]
|
128
90
|
@payloads = @main_subset[:payloads]
|
@@ -141,50 +103,9 @@ module JSS
|
|
141
103
|
@need_to_update = true
|
142
104
|
end # @param new_val[String] how should this be distributed to clients?
|
143
105
|
|
106
|
+
# The @payloads Plist, parsed into a Ruby object
|
144
107
|
#
|
145
|
-
# @return [
|
146
|
-
#
|
147
|
-
def distribution_method=(new_val)
|
148
|
-
return nil if @distribution_method == new_val
|
149
|
-
raise JSS::InvalidDataError, "New value must be one of '#{DISTRIBUTION_METHODS.join("' '")}'" unless DISTRIBUTION_METHODS.include? new_val
|
150
|
-
@distribution_method = new_val
|
151
|
-
@need_to_update = true
|
152
|
-
end
|
153
|
-
|
154
|
-
# @param new_val[Boolean] should the user be able to remove this?
|
155
|
-
#
|
156
|
-
# @return [void]
|
157
|
-
#
|
158
|
-
def user_removable=(new_val)
|
159
|
-
return nil if @self_service_feature_on_main_page == new_val
|
160
|
-
raise JSS::InvalidDataError, "Distribution method must be '#{SELF_SERVICE_DIST_METHOD}' to let the user remove it." unless in_self_service?
|
161
|
-
raise JSS::InvalidDataError, 'New value must be true or false' unless JSS::TRUE_FALSE.include? new_val
|
162
|
-
@user_removable = new_val
|
163
|
-
@need_to_update = true
|
164
|
-
end
|
165
|
-
|
166
|
-
# @param new_val[String] the new level for this profile (user/computer)
|
167
|
-
#
|
168
|
-
# @return [void]
|
169
|
-
#
|
170
|
-
def level=(new_val)
|
171
|
-
return nil if @level == new_val
|
172
|
-
raise JSS::InvalidDataError, "New value must be one of '#{LEVELS.join("' '")}'" unless LEVELS.include? new_val
|
173
|
-
@level = new_val
|
174
|
-
@need_to_update = true
|
175
|
-
end # @return [Boolean] is this profile available in Self Service?
|
176
|
-
|
177
|
-
#
|
178
|
-
def in_self_service?
|
179
|
-
@distribution_method == SELF_SERVICE_DIST_METHOD
|
180
|
-
end # @return [Boolean] is this profile removable by the user?
|
181
|
-
|
182
|
-
#
|
183
|
-
def user_removable?
|
184
|
-
@user_removable
|
185
|
-
end # @return [Hash] The payload plist parsed into a Ruby hash
|
186
|
-
|
187
|
-
#
|
108
|
+
# @return [Hash] the parsed payloads plist.
|
188
109
|
def parsed_payloads
|
189
110
|
Plist.parse_xml @payloads
|
190
111
|
end
|
@@ -201,7 +122,6 @@ module JSS
|
|
201
122
|
payload_content.map { |p| p['PayloadType'] }
|
202
123
|
end
|
203
124
|
|
204
|
-
###################################
|
205
125
|
# Private Instance Methods
|
206
126
|
###################################
|
207
127
|
private
|
@@ -209,21 +129,21 @@ module JSS
|
|
209
129
|
def rest_xml
|
210
130
|
doc = REXML::Document.new
|
211
131
|
|
212
|
-
obj = doc.add_element RSRC_OBJECT_KEY.to_s
|
132
|
+
obj = doc.add_element self.class::RSRC_OBJECT_KEY.to_s
|
213
133
|
gen = obj.add_element('general')
|
214
134
|
gen.add_element('description').text = @description
|
215
|
-
gen.add_element('distribution_method').text = @distribution_method
|
216
|
-
gen.add_element('user_removable').text = @user_removable
|
217
|
-
gen.add_element('level').text = @level
|
218
135
|
gen.add_element('redeploy_on_update').text = @redeploy_on_update
|
219
136
|
|
220
137
|
obj << @scope.scope_xml
|
221
138
|
add_self_service_xml doc
|
222
139
|
add_category_to_xml doc
|
223
140
|
add_site_to_xml doc
|
224
|
-
doc
|
141
|
+
doc
|
225
142
|
end
|
226
143
|
|
227
144
|
end # class OSXConfigurationProfile
|
228
145
|
|
229
146
|
end # module
|
147
|
+
|
148
|
+
require 'jss/api_object/configuration_profile/osx_configuration_profile'
|
149
|
+
require 'jss/api_object/configuration_profile/mobile_device_configuration_profile'
|