ruby-jss 0.6.3

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.

Files changed (73) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +7 -0
  3. data/CHANGES.md +112 -0
  4. data/LICENSE.txt +174 -0
  5. data/README.md +426 -0
  6. data/THANKS.md +6 -0
  7. data/bin/cgrouper +485 -0
  8. data/bin/subnet-update +400 -0
  9. data/lib/jss-api.rb +2 -0
  10. data/lib/jss.rb +190 -0
  11. data/lib/jss/api_connection.rb +410 -0
  12. data/lib/jss/api_object.rb +616 -0
  13. data/lib/jss/api_object/advanced_search.rb +389 -0
  14. data/lib/jss/api_object/advanced_search/advanced_computer_search.rb +95 -0
  15. data/lib/jss/api_object/advanced_search/advanced_mobile_device_search.rb +96 -0
  16. data/lib/jss/api_object/advanced_search/advanced_user_search.rb +95 -0
  17. data/lib/jss/api_object/building.rb +92 -0
  18. data/lib/jss/api_object/category.rb +147 -0
  19. data/lib/jss/api_object/computer.rb +852 -0
  20. data/lib/jss/api_object/creatable.rb +98 -0
  21. data/lib/jss/api_object/criteriable.rb +189 -0
  22. data/lib/jss/api_object/criteriable/criteria.rb +231 -0
  23. data/lib/jss/api_object/criteriable/criterion.rb +228 -0
  24. data/lib/jss/api_object/department.rb +93 -0
  25. data/lib/jss/api_object/distribution_point.rb +560 -0
  26. data/lib/jss/api_object/extendable.rb +221 -0
  27. data/lib/jss/api_object/extension_attribute.rb +466 -0
  28. data/lib/jss/api_object/extension_attribute/computer_extension_attribute.rb +362 -0
  29. data/lib/jss/api_object/extension_attribute/mobile_device_extension_attribute.rb +189 -0
  30. data/lib/jss/api_object/extension_attribute/user_extension_attribute.rb +117 -0
  31. data/lib/jss/api_object/group.rb +380 -0
  32. data/lib/jss/api_object/group/computer_group.rb +124 -0
  33. data/lib/jss/api_object/group/mobile_device_group.rb +139 -0
  34. data/lib/jss/api_object/group/user_group.rb +139 -0
  35. data/lib/jss/api_object/ldap_server.rb +535 -0
  36. data/lib/jss/api_object/locatable.rb +286 -0
  37. data/lib/jss/api_object/matchable.rb +97 -0
  38. data/lib/jss/api_object/mobile_device.rb +556 -0
  39. data/lib/jss/api_object/netboot_server.rb +148 -0
  40. data/lib/jss/api_object/network_segment.rb +414 -0
  41. data/lib/jss/api_object/osx_configuration_profile.rb +262 -0
  42. data/lib/jss/api_object/package.rb +839 -0
  43. data/lib/jss/api_object/peripheral.rb +335 -0
  44. data/lib/jss/api_object/peripheral_type.rb +295 -0
  45. data/lib/jss/api_object/policy.rb +898 -0
  46. data/lib/jss/api_object/purchasable.rb +316 -0
  47. data/lib/jss/api_object/removable_macaddr.rb +98 -0
  48. data/lib/jss/api_object/scopable.rb +136 -0
  49. data/lib/jss/api_object/scopable/scope.rb +621 -0
  50. data/lib/jss/api_object/script.rb +631 -0
  51. data/lib/jss/api_object/self_servable.rb +356 -0
  52. data/lib/jss/api_object/site.rb +93 -0
  53. data/lib/jss/api_object/software_update_server.rb +109 -0
  54. data/lib/jss/api_object/updatable.rb +117 -0
  55. data/lib/jss/api_object/uploadable.rb +138 -0
  56. data/lib/jss/api_object/user.rb +272 -0
  57. data/lib/jss/client.rb +504 -0
  58. data/lib/jss/compatibility.rb +66 -0
  59. data/lib/jss/composer.rb +185 -0
  60. data/lib/jss/configuration.rb +306 -0
  61. data/lib/jss/db_connection.rb +298 -0
  62. data/lib/jss/exceptions.rb +95 -0
  63. data/lib/jss/ruby_extensions.rb +35 -0
  64. data/lib/jss/ruby_extensions/filetest.rb +43 -0
  65. data/lib/jss/ruby_extensions/hash.rb +79 -0
  66. data/lib/jss/ruby_extensions/ipaddr.rb +91 -0
  67. data/lib/jss/ruby_extensions/pathname.rb +77 -0
  68. data/lib/jss/ruby_extensions/string.rb +59 -0
  69. data/lib/jss/ruby_extensions/time.rb +63 -0
  70. data/lib/jss/server.rb +108 -0
  71. data/lib/jss/utility.rb +478 -0
  72. data/lib/jss/version.rb +31 -0
  73. metadata +187 -0
@@ -0,0 +1,96 @@
1
+ ### Copyright 2016 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
+ ###
26
+ module JSS
27
+
28
+ #####################################
29
+ ### Module Variables
30
+ #####################################
31
+
32
+ #####################################
33
+ ### Module Methods
34
+ #####################################
35
+
36
+ #####################################
37
+ ### Classes
38
+ #####################################
39
+
40
+ ###
41
+ ### An AdvancedComputerSearch in the JSS
42
+ ###
43
+ ### @see JSS::AdvancedSearch
44
+ ###
45
+ ### @see JSS::APIObject
46
+ ###
47
+ class AdvancedMobileDeviceSearch < JSS::AdvancedSearch
48
+
49
+ #####################################
50
+ ### Mix-Ins
51
+ #####################################
52
+
53
+ #####################################
54
+ ### Class Constants
55
+ #####################################
56
+
57
+ ### The base for REST resources of this class
58
+ RSRC_BASE = "advancedmobiledevicesearches"
59
+
60
+ ### the hash key used for the JSON list output of all objects in the JSS
61
+ ### NOTE - THIS IS A BUG, it should be advanced_mobile_device_searches
62
+ RSRC_LIST_KEY = :advanced_computer_searches
63
+
64
+ ### The hash key used for the JSON object output.
65
+ ### It's also used in various error messages
66
+ RSRC_OBJECT_KEY = :advanced_mobile_device_search
67
+
68
+ ### these keys, as well as :id and :name, are present in valid API JSON data for this class
69
+ VALID_DATA_KEYS = [:sql_text, :display_fields, :mobile_devices]
70
+
71
+ ### what kind of thing is returned by this search?
72
+ RESULT_CLASS = JSS::MobileDevice
73
+
74
+ ### what data fields come back along with the display fields
75
+ ### for each mobiledevices?
76
+ RESULT_ID_FIELDS = [:id, :name, :udid]
77
+
78
+ #####################################
79
+ ### Attributes
80
+ #####################################
81
+
82
+ #####################################
83
+ ### Constructor
84
+ #####################################
85
+
86
+ #####################################
87
+ ### Public Instance Methods
88
+ #####################################
89
+
90
+ #####################################
91
+ ### Private Instance Methods
92
+ #####################################
93
+
94
+ end # class
95
+
96
+ end # module
@@ -0,0 +1,95 @@
1
+ ### Copyright 2016 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
+ ###
26
+ module JSS
27
+
28
+ #####################################
29
+ ### Module Variables
30
+ #####################################
31
+
32
+ #####################################
33
+ ### Module Methods
34
+ #####################################
35
+
36
+ #####################################
37
+ ### Classes
38
+ #####################################
39
+
40
+ ###
41
+ ### An AdvancedUserSearch in the JSS
42
+ ###
43
+ ### @see JSS::AdvancedSearch
44
+ ###
45
+ ### @see JSS::APIObject
46
+ ###
47
+ class AdvancedUserSearch < JSS::AdvancedSearch
48
+
49
+ #####################################
50
+ ### Mix-Ins
51
+ #####################################
52
+
53
+ #####################################
54
+ ### Class Constants
55
+ #####################################
56
+
57
+ ### The base for REST resources of this class
58
+ RSRC_BASE = "advancedusersearches"
59
+
60
+ ### the hash key used for the JSON list output of all objects in the JSS
61
+ RSRC_LIST_KEY = :advanced_user_searches
62
+
63
+ ### The hash key used for the JSON object output.
64
+ ### It's also used in various error messages
65
+ RSRC_OBJECT_KEY = :advanced_user_search
66
+
67
+ ### these keys, as well as :id and :name, are present in valid API JSON data for this class
68
+ VALID_DATA_KEYS = [:criteria, :display_fields, :users]
69
+
70
+ ### what kind of thing is returned by this search?
71
+ RESULT_CLASS = JSS::User
72
+
73
+ ### what data fields come back along with the display fields
74
+ ### for each user?
75
+ RESULT_ID_FIELDS = [:id, :name]
76
+
77
+ #####################################
78
+ ### Attributes
79
+ #####################################
80
+
81
+ #####################################
82
+ ### Constructor
83
+ #####################################
84
+
85
+ #####################################
86
+ ### Public Instance Methods
87
+ #####################################
88
+
89
+ #####################################
90
+ ### Private Instance Methods
91
+ #####################################
92
+
93
+ end # class
94
+
95
+ end # module
@@ -0,0 +1,92 @@
1
+ ### Copyright 2016 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
+ ###
26
+ module JSS
27
+
28
+ #####################################
29
+ ### Module Variables
30
+ #####################################
31
+
32
+ #####################################
33
+ ### Module Methods
34
+ #####################################
35
+
36
+
37
+ #####################################
38
+ ### Classes
39
+ #####################################
40
+
41
+ ###
42
+ ### A Building in the JSS.
43
+ ### These are simple, in that they only have an ID and a name.
44
+ ###
45
+ ### @see JSS::APIObject
46
+ ###
47
+ class Building < JSS::APIObject
48
+
49
+ #####################################
50
+ ### Mix-Ins
51
+ #####################################
52
+ include JSS::Creatable
53
+ include JSS::Updatable
54
+
55
+ #####################################
56
+ ### Class Methods
57
+ #####################################
58
+
59
+ #####################################
60
+ ### Class Constants
61
+ #####################################
62
+
63
+ ### The base for REST resources of this class
64
+ RSRC_BASE = "buildings"
65
+
66
+ ### the hash key used for the JSON list output of all objects in the JSS
67
+ RSRC_LIST_KEY = :buildings
68
+
69
+ ### The hash key used for the JSON object output.
70
+ ### It's also used in various error messages
71
+ RSRC_OBJECT_KEY = :building
72
+
73
+ ### these keys, as well as :id and :name, are present in valid API JSON data for this class
74
+ VALID_DATA_KEYS = []
75
+
76
+ #####################################
77
+ ### Attributes
78
+ #####################################
79
+
80
+ #####################################
81
+ ### Constructor
82
+ #####################################
83
+
84
+
85
+ #####################################
86
+ ### Public Instance Methods
87
+ #####################################
88
+
89
+
90
+ end # class building
91
+
92
+ end # module
@@ -0,0 +1,147 @@
1
+ ### Copyright 2016 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
+ ###
26
+ module JSS
27
+
28
+ #####################################
29
+ ### Module Variables
30
+ #####################################
31
+
32
+ #####################################
33
+ ### Module Methods
34
+ #####################################
35
+
36
+
37
+ #####################################
38
+ ### Classes
39
+ #####################################
40
+
41
+ ###
42
+ ### A Category in the JSS.
43
+ ###
44
+ ###
45
+ ### @see JSS::APIObject
46
+ ###
47
+ class Category < JSS::APIObject
48
+
49
+ #####################################
50
+ ### Mix-Ins
51
+ #####################################
52
+ include JSS::Creatable
53
+ include JSS::Updatable
54
+
55
+ #####################################
56
+ ### Class Methods
57
+ #####################################
58
+
59
+ #####################################
60
+ ### Class Constants
61
+ #####################################
62
+
63
+ ### The base for REST resources of this class
64
+ RSRC_BASE = "categories"
65
+
66
+ ### the hash key used for the JSON list output of all objects in the JSS
67
+ RSRC_LIST_KEY = :categories
68
+
69
+ ### The hash key used for the JSON object output.
70
+ ### It's also used in various error messages
71
+ RSRC_OBJECT_KEY = :category
72
+
73
+ ### these keys, as well as :id and :name, are present in valid API JSON data for this class
74
+ VALID_DATA_KEYS = [:priority]
75
+
76
+ ### The Default category
77
+ DEFAULT_CATEGORY = "Unknown"
78
+
79
+ ### The range of possible priorities
80
+ POSSIBLE_PRIORITIES = 1..20
81
+
82
+ ### The Default Priority
83
+ DEFAULT_PRIORITY = 5
84
+
85
+ #####################################
86
+ ### Attributes
87
+ #####################################
88
+
89
+ ### @return [Integer] the SelfService priority for this category
90
+ attr_reader :priority
91
+
92
+ #####################################
93
+ ### Constructor
94
+ #####################################
95
+
96
+ ###
97
+ ### See JSS::APIObject#initialize
98
+ ###
99
+ def initialize(args = {})
100
+ super
101
+ @priority = @init_data[:priority] || DEFAULT_PRIORITY
102
+
103
+ end
104
+
105
+
106
+ #####################################
107
+ ### Public Instance Methods
108
+ #####################################
109
+
110
+
111
+ ###
112
+ ### Change the Priority
113
+ ###
114
+ ### @param new_val[Integer] the new priority, must be in the range POSSIBLE_PRIORITIES
115
+ ###
116
+ ### @return [void]
117
+ ###
118
+ def priority= (new_val = @priority)
119
+ return nil if new_val == @priority
120
+ raise JSS::InvalidDataError, "priority must be an integer between #{POSSIBLE_PRIORITIES.first} and #{POSSIBLE_PRIORITIES.last} (inclusive)" unless POSSIBLE_PRIORITIES.include? new_val
121
+ @priority = new_val
122
+ @need_to_update = true
123
+ end
124
+
125
+
126
+ #####################################
127
+ ### Private Instance Methods
128
+ #####################################
129
+ private
130
+
131
+ ###
132
+ ### Return a String with the XML Resource
133
+ ### for submitting creation or changes to the JSS via
134
+ ### the API via the Creatable or Updatable modules
135
+ ###
136
+ ### Most classes will redefine this method.
137
+ ###
138
+ def rest_xml
139
+ doc = REXML::Document.new APIConnection::XML_HEADER
140
+ tmpl = doc.add_element self.class::RSRC_OBJECT_KEY.to_s
141
+ tmpl.add_element('name').text = @name
142
+ tmpl.add_element('priority').text = @priority
143
+ return doc.to_s
144
+ end
145
+ end # class category
146
+
147
+ end # module
@@ -0,0 +1,852 @@
1
+ ### Copyright 2016 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
+ ###
26
+ module JSS
27
+
28
+ #####################################
29
+ ### Module Constants
30
+ #####################################
31
+
32
+ #####################################
33
+ ### Module Variables
34
+ #####################################
35
+
36
+ #####################################
37
+ ### Module Methods
38
+ #####################################
39
+
40
+
41
+ ###
42
+ ### This class represents a Computer in the JSS.
43
+ ###
44
+ ### ===Adding Computers to the JSS
45
+ ###
46
+ ### This class cannot be used to add new Computers to the JSS. Please use other
47
+ ### Casper methods (like the Recon App or QuickAdd package)
48
+ ###
49
+ ### ---
50
+ ### ===Editing values
51
+ ###
52
+ ### Any data that arrives in the JSS via an "inventory update"
53
+ ### (a.k.a. 'recon') cannot be modified through this class, or the API.
54
+ ###
55
+ ### Data that can be modified are:
56
+ ### * Management Account (see #set_management_to)
57
+ ### * asset_tag
58
+ ### * barcodes 1 and 2
59
+ ### * ip_address
60
+ ### * udid
61
+ ### * mac_addresses
62
+ ### * location data from the Locatable module
63
+ ### * purchasing data from the Purchasable module
64
+ ###
65
+ ### After making any changes, you must call #update to send those
66
+ ### changes to the server.
67
+ ###
68
+ ### ---
69
+ ### ===MDM Commands
70
+ ###
71
+ ### ==== MDM Commands are Not Yet Supported!
72
+ ### *Hopefully they will be soon*
73
+ ###
74
+ ### The following methods will be used to send an APNS command to the computer represented by an
75
+ ### instance of JSS::Computer, equivalent to clicking one of the buttons on
76
+ ### the Management Commands section of the Management tab of the Computer details page in the JSS UI.
77
+ ###
78
+ ### The methods supported will be:
79
+ ### - #blank_push (aliases blank, noop, send_blank_push)
80
+ ### - #device_lock (aliases lock, lock_device)
81
+ ### - #erase_device (aliases wipe)
82
+ ###
83
+ ### To send an MDM command without making an instance, use the class method {.send_mdm_command}
84
+ ###
85
+ ### Each returns true if the command as sent.
86
+ ###
87
+ ### ---
88
+ ### ===Other Methods
89
+ ###
90
+ ### - {#set_management_to} change the management acct and passwd for this computer, aliased to #make_managed
91
+ ### - requires calling #update to push changes to the server
92
+ ### - {#make_unmanaged} an shortcut method for {#set_management_to}(nil)
93
+ ### - requires calling #update to push changes to the server
94
+ ### - {#apps} a shortcut to {#software} [:applications]
95
+ ### - {#licensed_sw} a shortcut to {#software} [:licensed_software]
96
+ ### - {#computer_groups} a shortcut to {#groups_accounts} [:computer_group_memberships]
97
+ ### - {#local_accounts} a shortcut to {#groups_accounts} [:local_accounts]
98
+ ### - {#drives} a shortcut to {#hardware} [:storage]
99
+ ### - {#printers} a shortcut to {#hardware} [:mapped_printers]
100
+ ###
101
+ ### @see APIObject
102
+ ### @see Locatable
103
+ ### @see Purchasable
104
+ ### @see Matchable
105
+ ### @see FileUpload
106
+ ###
107
+ class Computer < JSS::APIObject
108
+
109
+ #####################################
110
+ ### MixIns
111
+ #####################################
112
+
113
+ include JSS::Updatable
114
+ include JSS::Locatable
115
+ include JSS::Purchasable
116
+ include JSS::Uploadable
117
+ include JSS::Extendable
118
+
119
+ extend JSS::Matchable
120
+
121
+ #####################################
122
+ ### Class Variables
123
+ #####################################
124
+
125
+ @@all_computers = nil
126
+
127
+ #####################################
128
+ ### Class Methods
129
+ #####################################
130
+
131
+ ### A larger set of info about the computers in the JSS.
132
+ ###
133
+ ### Casper 9.4 introduced the API Resource /computers/subset/basic
134
+ ### that returns an array of hashes with more data than just /computers/
135
+ ### (which was just :name and :id). Similar to /mobildevices/, this new
136
+ ### list includes :udid, :serial_number, and :mac_address, as well as :model,
137
+ ### :managed, :building, :department, :username, and :report_date
138
+ ###
139
+ ### Because this requires a different, unusual, resource path, we're completely re-defining
140
+ ### {APIObject.all} for JSS::Computer. Hopefully some day the original /computers/
141
+ ### resource will be updated to return this data.
142
+ ###
143
+ ### @param refresh[Boolean] should the data be re-queried from the API?
144
+ ###
145
+ ### @return [Array<Hash{:name=>String, :id=> Integer}>]
146
+ ###
147
+ def self.all(refresh = false)
148
+ @@all_computers = nil if refresh
149
+ return @@all_computers if @@all_computers
150
+ @@all_computers = JSS::API.get_rsrc(self::LIST_RSRC)[self::RSRC_LIST_KEY]
151
+ end
152
+
153
+ ### @return [Array<String>] all computer serial numbers in the jss
154
+ def self.all_serial_numbers(refresh = false)
155
+ self.all(refresh).map{|i| i[:serial_number]}
156
+ end
157
+
158
+ ### @return [Array<String>] all computer mac_addresses in the jss
159
+ def self.all_mac_addresses(refresh = false)
160
+ self.all(refresh).map{|i| i[:mac_address]}
161
+ end
162
+
163
+ ### @return [Array<String>] all computer udids in the jss
164
+ def self.all_udids(refresh = false)
165
+ self.all(refresh).map{|i| i[:udid]}
166
+ end
167
+
168
+ ### @return [Array<Hash>] all managed computers in the jss
169
+ def self.all_managed(refresh = false)
170
+ self.all(refresh).select{|d| d[:managed] }
171
+ end
172
+
173
+ ### @return [Array<Hash>] all unmanaged computers in the jss
174
+ def self.all_unmanaged(refresh = false)
175
+ self.all(refresh).select{|d| not d[:managed] }
176
+ end
177
+
178
+ ### @return [Array<Hash>] all laptop computers in the jss
179
+ def self.all_laptops(refresh = false)
180
+ self.all(refresh).select{|d| d[:model] =~ /book/i }
181
+ end
182
+
183
+ ### @return [Array<Hash>] all macbooks in the jss
184
+ def self.all_macbooks(refresh = false)
185
+ self.all(refresh).select{|d| d[:model] =~ /^macbook\d/i }
186
+ end
187
+
188
+ ### @return [Array<Hash>] all macbookpros in the jss
189
+ def self.all_macbookpros(refresh = false)
190
+ self.all(refresh).select{|d| d[:model] =~ /^macbookpro\d/i }
191
+ end
192
+
193
+ ### @return [Array<Hash>] all macbookairs in the jss
194
+ def self.all_macbookairs(refresh = false)
195
+ self.all(refresh).select{|d| d[:model] =~ /^macbookair\d/i }
196
+ end
197
+
198
+ ### @return [Array<Hash>] all xserves in the jss
199
+ def self.all_xserves(refresh = false)
200
+ self.all(refresh).select{|d| d[:model] =~ /serve/i }
201
+ end
202
+
203
+ ### @return [Array<Hash>] all desktop macs in the jss
204
+ def self.all_desktops(refresh = false)
205
+ self.all(refresh).select{|d| d[:model] !~ /serve|book/i }
206
+ end
207
+
208
+ ### @return [Array<Hash>] all imacs in the jss
209
+ def self.all_imacs(refresh = false)
210
+ self.all(refresh).select{|d| d[:model] =~ /^imac/i }
211
+ end
212
+
213
+ ### @return [Array<Hash>] all mac minis in the jss
214
+ def self.all_minis(refresh = false)
215
+ self.all(refresh).select{|d| d[:model] =~ /^macmini/i }
216
+ end
217
+
218
+ ### @return [Array<Hash>] all macpros in the jss
219
+ def self.all_macpros(refresh = false)
220
+ self.all(refresh).select{|d| d[:model] =~ /^macpro/i }
221
+ end
222
+
223
+ ###
224
+ ### Send an MDM command to a managed computer by id or name
225
+ ###
226
+ ### @param computer[String,Integer] the name or id of the computer to recieve the command
227
+ ### @param command[Symbol] the command to send, one of the keys of COMPUTER_MDM_COMMANDS
228
+ ###
229
+ ### @return [true] if the command was sent
230
+ ###
231
+
232
+ # Not functional until I get more docs from JAMF
233
+ #
234
+ # def self.send_mdm_command(computer,command)
235
+ #
236
+ # raise JSS::NoSuchItemError, "Unknown command '#{command}'" unless COMPUTER_MDM_COMMANDS.keys.include? command
237
+ #
238
+ # command_xml ="#{JSS::APIConnection::XML_HEADER}<computer><command>#{COMPUTER_MDM_COMMANDS[command]}</command></computer>"
239
+ # the_id = nil
240
+ #
241
+ # if computer.to_s =~ /^\d+$/
242
+ # the_id = computer
243
+ # else
244
+ # the_id = self.map_all_ids_to(:name).invert[computer]
245
+ # end
246
+ #
247
+ # if the_id
248
+ # response = JSS::API.put_rsrc("#{RSRC_BASE}/id/#{the_id}", command_xml)
249
+ # response =~ %r{<notification_sent>(.+)</notification_sent>}
250
+ # return ($1 and $1 == "true")
251
+ # end
252
+ # raise JSS::UnmanagedError, "Cannot send command to unknown/unmanaged computer '#{computer}'"
253
+ # end
254
+
255
+
256
+ #####################################
257
+ ### Class Constants
258
+ #####################################
259
+
260
+
261
+ ### The base for REST resources of this class
262
+ RSRC_BASE = "computers"
263
+
264
+ ### The (temporary?) list-resource
265
+ LIST_RSRC = "#{RSRC_BASE}/subset/basic"
266
+
267
+ ### the hash key used for the JSON list output of all objects in the JSS
268
+ RSRC_LIST_KEY = :computers
269
+
270
+ ### The hash key used for the JSON object output.
271
+ ### It's also used in various error messages
272
+ RSRC_OBJECT_KEY = :computer
273
+
274
+ ### these keys, as well as :id and :name, are present in valid API JSON data for this class
275
+ VALID_DATA_KEYS = [:sus, :distribution_point, :alt_mac_address ]
276
+
277
+ ### This class lets us seach for computers
278
+ SEARCH_CLASS = JSS::AdvancedComputerSearch
279
+
280
+ ### This is the class for relevant Extension Attributes
281
+ EXT_ATTRIB_CLASS = JSS::ComputerExtensionAttribute
282
+
283
+ ### Boot partitions are noted with the string "(Boot Partition)" at the end
284
+ BOOT_FLAG = " (Boot Partition)"
285
+
286
+ ### file uploads can send attachments to the JSS using :computers as the sub-resource.
287
+ UPLOAD_TYPES = { :attachment => :computers}
288
+
289
+ ### A mapping of Symbols available to the send_mdm_command class method, to
290
+ ### the String commands actuallly sent via the API.
291
+ COMPUTER_MDM_COMMANDS = {
292
+ :blank_push => "BlankPush",
293
+ :send_blank_push => "BlankPush",
294
+ :blank => "BlankPush",
295
+ :noop => "BlankPush",
296
+ :device_lock => "DeviceLock",
297
+ :lock => "DeviceLock",
298
+ :lock_device => "DeviceLock",
299
+ :erase_device => "EraseDevice",
300
+ :erase => "EraseDevice",
301
+ :wipe => "EraseDevice",
302
+ :unmanage_device => "UnmanageDevice",
303
+ :unmanage => "UnmanageDevice"
304
+ }
305
+
306
+ #####################################
307
+ ### Attributes
308
+ #####################################
309
+
310
+ ### The values returned in the General, Location, and Purchasing subsets are stored as direct attributes
311
+ ### Location and Purchasing are defined in the Locatable and Purchasable mixin modules.
312
+ ### Here's General, in alphabetical order
313
+
314
+ ### @return [String] the secondary mac address
315
+ attr_reader :alt_mac_address
316
+
317
+ ### @return [String] the asset tag
318
+ attr_reader :asset_tag
319
+
320
+ ### @return [String] the barcodes
321
+ attr_reader :barcode_1, :barcode_2
322
+
323
+
324
+ ### @return [String] The name of the distribution point for this computer
325
+ attr_reader :distribution_point
326
+
327
+ ### @return [Time] when was it added to the JSS
328
+ attr_reader :initial_entry_date
329
+
330
+ ### @return [IPAddr] the last known IP address
331
+ attr_reader :ip_address
332
+
333
+ ### @return [String] the version of the jamf binary
334
+ attr_reader :jamf_version
335
+
336
+ ### @return [Time] the last contact time
337
+ attr_reader :last_contact_time
338
+
339
+ ### @return [String] the primary macaddress
340
+ attr_reader :mac_address
341
+
342
+ ### @return [Boolean] is this machine "managed" by Casper?
343
+ attr_reader :managed
344
+
345
+ ### @return [String] the name of the management account
346
+ attr_reader :management_username
347
+
348
+ ### @return [Boolean] doesit support MDM?
349
+ attr_reader :mdm_capable
350
+
351
+ ### @return [String] the name of the netboot server for this machine
352
+ attr_reader :netboot_server
353
+
354
+ ### @return [String] what kind of computer?
355
+ attr_reader :platform
356
+
357
+ ### @return [Time] the last recon time
358
+ attr_reader :report_date
359
+
360
+ ### @return [String] the serial number
361
+ attr_reader :serial_number
362
+
363
+
364
+ ### @return [Hash] the :name and :id of the site for this machine
365
+ attr_reader :site
366
+
367
+ ### @return [String] the name of the Software Update Server assigned to this machine.
368
+ attr_reader :sus
369
+
370
+ ### @return [String] the UDID of the computer
371
+ attr_reader :udid
372
+
373
+
374
+ ############
375
+ ### The remaining subsets each go into an attribute of their own.
376
+ ###
377
+
378
+ ### @return [Array<Hash>]
379
+ ###
380
+ ### A Hash for each ConfigurationProfile on the computer
381
+ ###
382
+ ### The Hash keys are:
383
+ ### * :id => the ConfigurationProfile id in the JSS
384
+ ### * :name => the username to whom this user-level profile has been applied (if it's a user-level profile)
385
+ ### * :uuid => the ConfigurationProfile uuid
386
+ ###
387
+ attr_reader :configuration_profiles
388
+
389
+ ### @return [Hash]
390
+ ###
391
+ ### Info about the local accts and ComputerGroups to which this machine beloings
392
+ ###
393
+ ### The Hash keys are:
394
+ ### * :computer_group_memberships => An Array of names of ComputerGroups to which this computer belongs
395
+ ### * :local_accounts => An Array of Hashes for each local user acct on this computer. Each hash has these keys:
396
+ ### * :name => String, the login name of the acct
397
+ ### * :realname => the real name of the acct
398
+ ### * :uid => String, the uid of the acct
399
+ ### * :home => String, the path to the home folder
400
+ ### * :home_size => String, the size of the homedir as a string like "53245MB"
401
+ ### * :home_size_mb => Integer, the size of the homedir as an integer like 53245
402
+ ### * :administrator => Boolean
403
+ ### * :filevault_enabled => Boolean
404
+ ###
405
+ attr_reader :groups_accounts
406
+
407
+ ### @return [Hash]
408
+ ###
409
+ ### A Hash with info about the hardware of this cmoputer.
410
+ ###
411
+ ### These are the keys & sample data
412
+ ### * :number_processors=>2,
413
+ ### * :processor_speed_mhz=>2530,
414
+ ### * :make=>"Apple",
415
+ ### * :cache_size=>3072,
416
+ ### * :processor_type=>"Intel Core i5",
417
+ ### * :total_ram_mb=>8192,
418
+ ### * :model=>"15-inch MacBook Pro (Mid 2010)",
419
+ ### * :available_ram_slots=>0,
420
+ ### * :processor_architecture=>"i386",
421
+ ### * :bus_speed_mhz=>0,
422
+ ### * :total_ram=>8192,
423
+ ### * :os_name=>"Mac OS X",
424
+ ### * :optical_drive=>"HL-DT-ST DVDRW GS23N",
425
+ ### * :model_identifier=>"MacBookPro6,2",
426
+ ### * :cache_size_kb=>3072,
427
+ ### * :boot_rom=>"MBP61.0057.B0F",
428
+ ### * :os_version=>"10.9.3",
429
+ ### * :mapped_printers=> An Array of Hashes, one per printer, with these keys
430
+ ### * :name => the name of the printer
431
+ ### * :location => the location of the printer
432
+ ### * :type => the printer model
433
+ ### * :uri => the uri to reach the printer on the network
434
+ ### * :nic_speed=>"10/100/1000",
435
+ ### * :processor_speed=>2530,
436
+ ### * :active_directory_status=>"Not Bound",
437
+ ### * :bus_speed=>0,
438
+ ### * :os_build=>"13D65",
439
+ ### * :smc_version=>"1.58f17",
440
+ ### * :service_pack=>"",
441
+ ### * :battery_capacity=>87
442
+ ### * :storage=> An Array of Hashes, one per Drive, with these keys
443
+ ### * :smart_status=>"Verified",
444
+ ### * :connection_type=>"NO",
445
+ ### * :model=>"M4-CT256M4SSD2",
446
+ ### * :revision=>"040H",
447
+ ### * :serial_number=>"00000000130709JH7GhhC",
448
+ ### * :size=>262205,
449
+ ### * :disk=>"disk0",
450
+ ### * :drive_capacity_mb=>262205}],
451
+ ### * :partition=> A Hash with these keys
452
+ ### * :filevault2_status=>"Encrypted",
453
+ ### * :type=>"boot",
454
+ ### * :filevault2_percent=>100,
455
+ ### * :partition_capacity_mb=>38014,
456
+ ### * :lvgUUID=>"C4883AF5-3E58-4F76-A56C-094D4CEC7E9F",
457
+ ### * :percentage_full=>61,
458
+ ### * :lvUUID=>"745A262E-AEA6-4608-8A3A-6CDC225B4DE6",
459
+ ### * :filevault_status=>"Encrypted",
460
+ ### * :size=>38014,
461
+ ### * :pvUUID=>"C38051CF-5066-442F-A442-1035060ED462",
462
+ ### * :name=>"KimDrive40 (Boot Partition)",
463
+ ### * :filevault_percent=>100
464
+ ###
465
+ attr_reader :hardware
466
+
467
+ ### DEPRECATED
468
+ ### attr_reader :iphones
469
+
470
+ ### @return [Array<Hash>]
471
+ ###
472
+ ### A Hash per peripheral
473
+ ###
474
+ ### Each hash has these keys & sample data:
475
+ ### * :id=>286,
476
+ ### * :type=>"Display",
477
+ ### * :field_0=>"HP",
478
+ ### * :field_1=>"HP LP2480zx",
479
+ ### * :field_2=>"DreamColor",
480
+ ### * :field_3=>"3CM10800F4",
481
+ ### * :field_4=>"",
482
+ ### * :field_5=>""
483
+ ### * :field_6=>"",
484
+ ### * :bar_code_1=>"",
485
+ ### * :bar_code_2=>"",
486
+ ### * :purchasing=> A hash with these keys:
487
+ ### * :warranty_expires_utc=>"",
488
+ ### * :is_leased=>false,
489
+ ### * :po_date=>"",
490
+ ### * :lease_expires=>"",
491
+ ### * :po_number=>"",
492
+ ### * :po_date_epoch=>0,
493
+ ### * :lease_expires_epoch=>0,
494
+ ### * :vendor=>"",
495
+ ### * :attachments=>[],
496
+ ### * :po_date_utc=>"",
497
+ ### * :lease_expires_utc=>"",
498
+ ### * :applecare_id=>"",
499
+ ### * :warranty_expires=>"",
500
+ ### * :life_expectancy=>0,
501
+ ### * :purchase_price=>"",
502
+ ### * :warranty_expires_epoch=>0,
503
+ ### * :is_purchased=>true,
504
+ ### * :purchasing_contact=>"",
505
+ ### * :purchasing_account=>""
506
+ ###
507
+ attr_reader :peripherals
508
+
509
+ ### @return [Hash]
510
+ ###
511
+ ### A Hash of software data
512
+ ###
513
+ ### The Hash has these keys:
514
+ ### * :running_services => An Array of services running on the computer (if gathered) TODO - is each item a hash?
515
+ ### * :installed_by_casper => An Array of Package names unstalled on this computer by Casper
516
+ ### * :fonts => An Array of fonts on this computer (if gathered) TODO - is each item a hash?
517
+ ### * :installed_by_installer_swu => An Array of pkg IDs for pkgs installed by SoftwareUpdate or the Apple Installer
518
+ ### * :applications => An Array of Hashes, one per Application on the computer, with these keys:
519
+ ### * :path => String, the path to the app
520
+ ### * :name => String, the name of the app, including the .app suffix
521
+ ### * :version => String, the version of the app at that path.
522
+ ### * :cached_by_casper => An Array of Casper Package names cached on the machine, awaiting installation
523
+ ### * :available_software_updates => An Array of available SoftwareUpdate (if gathered) TODO - is each item a hash?
524
+ ### * :plugins => An Array of plugins installed on the machine (if gathered) TODO - is each item a hash?
525
+ ### * :available_updates => A Hash - Deprecated?
526
+ ### * :licensed_software => An Array, the names of Licenced Software (as defined in Casper) on this machine
527
+ ### * :unix_executables => DEPRECATED
528
+ ###
529
+ attr_reader :software
530
+
531
+ #####################################
532
+ ### Instance Methods
533
+ #####################################
534
+
535
+ ###
536
+ ### @param (see APIObject#initialize)
537
+ ###
538
+ ### As well as :id and :name, computers can be queried using :udid, :serialnumber, and :mac_address
539
+ ###
540
+ def initialize (args = {})
541
+
542
+ super args, [:udid, :serialnumber, :mac_address]
543
+
544
+ ### now we have raw @init_data with something in it, so fill out the instance vars
545
+ @alt_mac_address = @init_data[:general][:alt_mac_address]
546
+ @asset_tag = @init_data[:general][:asset_tag]
547
+ @barcode_1 = @init_data[:general][:barcode_1]
548
+ @barcode_2 = @init_data[:general][:barcode_2]
549
+ @distribution_point = @init_data[:general][:distribution_point]
550
+ @initial_entry_date = JSS.epoch_to_time @init_data[:general][:initial_entry_date_epoch]
551
+ @ip_address = @init_data[:general][:ip_address]
552
+ @jamf_version = @init_data[:general][:jamf_version]
553
+ @last_contact_time = JSS.epoch_to_time @init_data[:general][:last_contact_time_epoch]
554
+ @mac_address = @init_data[:general][:mac_address]
555
+ @managed = @init_data[:general][:remote_management][:managed]
556
+ @management_username = @init_data[:general][:remote_management][:management_username]
557
+ @mdm_capable = @init_data[:general][:mdm_capable]
558
+ @netboot_server = @init_data[:general][:netboot_server]
559
+ @platform = @init_data[:general][:platform]
560
+ @report_date = JSS.epoch_to_time @init_data[:general][:report_date_epoch]
561
+ @serial_number = @init_data[:general][:serial_number]
562
+ @site = JSS::APIObject.get_name( @init_data[:general][:site])
563
+ @sus = @init_data[:general][:sus]
564
+ @udid = @init_data[:general][:udid]
565
+
566
+ parse_location
567
+ parse_purchasing
568
+ parse_ext_attrs
569
+
570
+ @configuration_profiles = @init_data[:configuration_profiles]
571
+ @extension_attributes = @init_data[:extension_attributes]
572
+ @groups_accounts = @init_data[:groups_accounts]
573
+ @hardware = @init_data[:hardware]
574
+ @peripherals = @init_data[:peripherals]
575
+ @software = @init_data[:software]
576
+
577
+ @management_password = nil
578
+
579
+ end # initialize
580
+
581
+ ###
582
+ ### @return [Array] the JSS groups to which thismachine belongs (smart and static)
583
+ ###
584
+ def computer_groups
585
+ @groups_accounts[:computer_group_memberships]
586
+ end
587
+
588
+ ###
589
+ ### @return [Array<Hash>] all the local accts on the machine.
590
+ ###
591
+ ### Each item has keys :name, :realname, :uid, :home, :home_size, :administrator, :filevault_enabled
592
+ ###
593
+ def local_accounts
594
+ @groups_accounts[:local_accounts]
595
+ end
596
+
597
+
598
+ ###
599
+ ### @return [Array<Hash>] each storage device
600
+ ###
601
+ def drives
602
+ @hardware[:storage]
603
+ end
604
+
605
+ ###
606
+ ### @return [Array<Hash>] each printer on this computer
607
+ ### Keys are :name, :uri, :type, :location
608
+ ###
609
+ def printers
610
+ @hardware[:mapped_printers]
611
+ end
612
+
613
+ ###
614
+ ### @return [Array<Hash>] all apps installed on this machine.
615
+ ### Hash keys are :name, :path, and :version
616
+ ###
617
+ def apps ; @software[:applications] ; end
618
+
619
+ ###
620
+ ### @return [Array<String>] the JSS-defined "licensed software" titles
621
+ ### installed on this machine.
622
+ ###
623
+ def licensed_sw ; @software[:licensed_software] ; end
624
+
625
+ ###
626
+ ### Set or unset management acct and password for this computer
627
+ ###
628
+ ### @param name[String] the name of the management acct.
629
+ ###
630
+ ### @param password[String] the password of the management acct
631
+ ###
632
+ ### @return [void]
633
+ ###
634
+ ### The changes will need to be pushed to the server with #update
635
+ ### before they take effect.
636
+ ###
637
+ ### CAUTION: this does nothing to confirm the name and password
638
+ ### will work on the machine!
639
+ ###
640
+ def set_management_to (name, password)
641
+ password = nil unless name
642
+ @management_username = name
643
+ @management_password = password
644
+ @managed = name ? true : false
645
+ @need_to_update = true
646
+ end
647
+
648
+ ###
649
+ ### Make the machine unmanaged.
650
+ ###
651
+ ### The same as
652
+ ### #set_management_to nil, nil
653
+ ### followed by
654
+ ### JSS::Computer.send_mdm_command @id, :unmanage_device
655
+ ### which currently isn't working
656
+ ###
657
+ ### @return [void]
658
+ ###
659
+ def make_unmanaged
660
+ return nil unless managed?
661
+ set_management_to(nil, nil)
662
+ begin
663
+ self.class.send_mdm_command(@id, :unmanage_device)
664
+ rescue
665
+ end
666
+ end
667
+
668
+ ###
669
+ def asset_tag= (new_val)
670
+ return nil if @asset_tag == new_val
671
+ new_val.strip!
672
+ @asset_tag = new_val
673
+ @need_to_update = true
674
+ end
675
+
676
+ ###
677
+ def barcode_1= (new_val)
678
+ return nil if @barcode_1 == new_val
679
+ new_val.strip!
680
+ @barcode_1 = new_val
681
+ @need_to_update = true
682
+ end
683
+
684
+ ###
685
+ def barcode_2= (new_val)
686
+ return nil if @barcode_2 == new_val
687
+ new_val.strip!
688
+ @barcode_2 = new_val
689
+ @need_to_update = true
690
+ end
691
+
692
+ ###
693
+ def ip_address= (new_val)
694
+ return nil if @ip_address == new_val
695
+ new_val.strip!
696
+ ### this raises an error if its an invalid IP address
697
+ IPAddr.new new_val
698
+ @ip_address = new_val
699
+ @need_to_update = true
700
+ end
701
+
702
+ ###
703
+ ### Send changes to the API
704
+ ###
705
+ ### @return [void]
706
+ ###
707
+ def update
708
+ id = super
709
+ @management_password = nil
710
+ id
711
+ end
712
+
713
+ ###
714
+ ### Delete this computer from the JSS
715
+ ###
716
+ ### @return [void]
717
+ ###
718
+ def delete
719
+ super
720
+ @alt_mac_address = nil
721
+ @asset_tag = nil
722
+ @barcode_1 = nil
723
+ @barcode_2 = nil
724
+ @distribution_point = nil
725
+ @initial_entry_date = nil
726
+ @ip_address = nil
727
+ @jamf_version = nil
728
+ @last_contact_time = nil
729
+ @macaddress = nil
730
+ @managed = nil
731
+ @management_username = nil
732
+ @mdm_capable = nil
733
+ @netboot_server = nil
734
+ @platform = nil
735
+ @report_date = nil
736
+ @serial_number = nil
737
+ @site = nil
738
+ @sus = nil
739
+ @udid = nil
740
+
741
+ @building = nil
742
+ @department = nil
743
+ @email_address = nil
744
+ @phone = nil
745
+ @position = nil
746
+ @real_name = nil
747
+ @room = nil
748
+ @username = nil
749
+
750
+ @configuration_profiles = nil
751
+ @extension_attributes = nil
752
+ @groups_accounts = nil
753
+ @hardware = nil
754
+ @peripherals = nil
755
+ @purchasing = nil
756
+ @software = nil
757
+ end #delete
758
+
759
+
760
+ # Not Functional until I get more docs from JAMF
761
+ #
762
+ # ###
763
+ # ### Send a blank_push MDM command
764
+ # ###
765
+ # def blank_push
766
+ # self.class.send_mdm_command @id, :blank_push
767
+ # end
768
+ # alias noop blank_push
769
+ # alias send_blank_push blank_push
770
+ #
771
+ # ###
772
+ # ### Send a device_lock MDM command
773
+ # ###
774
+ # def device_lock
775
+ # self.class.send_mdm_command @id, :device_lock
776
+ # end
777
+ # alias lock device_lock
778
+ # alias lock_device device_lock
779
+ #
780
+ # ###
781
+ # ### Send an erase_device MDM command
782
+ # ###
783
+ # def erase_device
784
+ # self.class.send_mdm_command @id, :erase_device
785
+ # end
786
+ # alias erase erase_device
787
+ # alias wipe erase_device
788
+
789
+
790
+ ### aliases
791
+ alias alt_macaddress alt_mac_address
792
+ alias bar_code_1 barcode_1
793
+ alias bar_code_2 barcode_2
794
+ alias managed? managed
795
+ alias mdm? mdm_capable
796
+ alias last_recon report_date
797
+ alias sn serial_number
798
+ alias serialnumber serial_number
799
+ alias accounts local_accounts
800
+ alias accts local_accounts
801
+ alias make_managed set_management_to
802
+
803
+
804
+
805
+
806
+
807
+ ##############################
808
+ ### private methods
809
+ ##############################
810
+ private
811
+
812
+ ###
813
+ ### Return a String with the XML Resource
814
+ ### for submitting changes to the JSS via
815
+ ### the API
816
+ ###
817
+ ### For Computers, only some items can be changed via the API
818
+ ### In particular, any data gatherd by a Recon cannot be changed
819
+ ###
820
+ def rest_xml
821
+ doc = REXML::Document.new APIConnection::XML_HEADER
822
+ computer = doc.add_element self.class::RSRC_OBJECT_KEY.to_s
823
+
824
+ general = computer.add_element('general')
825
+ general.add_element('name').text = @name
826
+ general.add_element('alt_mac_address').text = @alt_mac_address
827
+ general.add_element('asset_tag').text = @asset_tag
828
+ general.add_element('barcode_1').text = @barcode_1
829
+ general.add_element('barcode_2').text = @barcode_2
830
+ general.add_element('ip_address').text = @ip_address
831
+ general.add_element('mac_address').text = @mac_address
832
+ general.add_element('udid').text = @udid
833
+
834
+ rmgmt = general.add_element('remote_management')
835
+ rmgmt.add_element('managed').text = @managed
836
+ rmgmt.add_element('management_username').text = @management_username
837
+ rmgmt.add_element('management_password').text = @management_password if @management_password
838
+
839
+ computer << ext_attr_xml
840
+
841
+ if has_location?
842
+ computer << location_xml
843
+ end
844
+ if has_purchasing?
845
+ computer << purchasing_xml
846
+ end
847
+
848
+ return doc.to_s
849
+ end
850
+
851
+ end # class Computer
852
+ end # module