forked from jamf/API_Scripts
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy paththunderboltDisplayAPI.sh
More file actions
236 lines (220 loc) · 10.7 KB
/
thunderboltDisplayAPI.sh
File metadata and controls
236 lines (220 loc) · 10.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
#!/bin/sh
########################################################################################################
#
# Copyright (c) 2013, JAMF Software, LLC. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# * Neither the name of the JAMF Software, LLC nor the
# names of its contributors may be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY JAMF SOFTWARE, LLC "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL JAMF SOFTWARE, LLC BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
####################################################################################################
# HARDCODED VARIABLES
apiusername="" # Username that has API privileges for 'Peripherals'
apipassword="" # Password for User that has API privileges for 'Peripherals'
jssbase="" # JSS base url e.g. "https://yourJSSurl:8443"
# CHECK FOR SCRIPT PARAMETERS IN JSS
if [ "$4" != "" ] && [ "$apiusername" == "" ]
then
apiusername="$4"
fi
if [ "$5" != "" ] && [ "$apipassword" == "" ]
then
apipassword="$5"
fi
if [ "$6" != "" ] && [ "$jssbase" == "" ]
then
jssbase="$6"
fi
####################################################################################################
# SCRIPT FUNCTIONS - - DO NOT MODIFY BELOW THIS LINE
####################################################################################################
####################################################################################################
# FUNCTION - Get the serial number of a connected Thunderbolt Display
# $serial = serial number of Thunderbolt Display
####################################################################################################
function getSerialNumber() {
serial="$(/usr/sbin/system_profiler | egrep "Display Serial Number:" | awk '{print $4}')"
}
####################################################################################################
# FUNCTION - Get the Ethernet Interface MAC Addresses and save to variables en0 and en1
# $en0 - MAC address of interface en0 e.g 01.02.03.04.05.06
# $en1 - MAC address of interface en1 e.g 01.02.03.04.05.06
####################################################################################################
function getInterface() {
# Get interfaces Ethernet Addresses
for iface in `ifconfig -lu` ; do
case $iface in
en0)
en0="$(/sbin/ifconfig en0 | grep ether | awk '{print $NF}' | tr ':' '.')" ;;
en1)
en1="$(/sbin/ifconfig en1 | grep ether | awk '{print $NF}' | tr ':' '.')" ;;
esac
done
}
####################################################################################################
# FUNCTION - Get the count of JSS Peripherals and next ID that we would use
# $sizeoutput - current count of JSS Peripherals
# $next - number of the next peripheral that we would need to use
####################################################################################################
function getNextPeripheral() {
# Find the Next Peripheral ID, if its needed later
sizeoutput="$(/usr/bin/curl -k -u $apiusername:$apipassword $jssbase/JSSResource/peripherals -X GET | sed -n -e 's/.*<size>\(.*\)<\/size>.*/\1/p')"
next=`expr $sizeoutput + 1`
}
####################################################################################################
# FUNCTION - Generate an xml file for use by the cURL POST
# $filename - Path to the temp file we are writing xml
####################################################################################################
function generatePostXMLFile() {
filename="/tmp/Peripheral.xml"
/usr/bin/touch $filename
echo "<?xml version="1.0" encoding="UTF-8" standalone="no"?>" >> $filename
echo "<peripheral>" >> $filename
echo " <general>" >> $filename
echo " <fields>" >> $filename
echo " <type>Display</type>" >> $filename
echo " <field>" >> $filename
echo " <name>Manufacturer</name>" >> $filename
echo " <value>Apple</value>" >> $filename
echo " </field>" >> $filename
echo " <field>" >> $filename
echo " <name>Serial</name>" >> $filename
echo " <value>$serial</value>" >> $filename
echo " </field>" >> $filename
echo " </fields>" >> $filename
echo " </general>" >> $filename
echo " <location>" >> $filename
echo " <computer_id>$computerid</computer_id>" >> $filename
echo " </location>" >> $filename
echo "</peripheral>" >> $filename
/usr/bin/xmllint -o $filename --format $filename
}
####################################################################################################
# FUNCTION - Generate an xml file for use by the cURL PUT
# $filename - Path to the temp file we are writing xml
####################################################################################################
function generatePutXMLFile() {
filename="/tmp/Peripheral.xml"
/usr/bin/touch /tmp/Peripheral.xml
echo "<?xml version="1.0" encoding="UTF-8" standalone="no"?>" >> $filename
echo "<peripheral>" >> $filename
echo " <general>" >> $filename
echo " <fields>" >> $filename
echo " <field>" >> $filename
echo " <name>Serial</name>" >> $filename
echo " <value>$serial</value>" >> $filename
echo " </field>" >> $filename
echo " </fields>" >> $filename
echo " </general>" >> $filename
echo "</peripheral>" >> $filename
/usr/bin/xmllint -o $filename --format $filename
}
####################################################################################################
# FUNCTION - Process to clean up after ourselves
####################################################################################################
function deleteXMLFile() {
/bin/rm $filename
}
####################################################################################################
# FUNCTION - Get information via the JSSAPI to get the computerid# and peripheral id number
# $computerapioutput - Full API output of current Computer Record in the JSS
# $computerid - The computer ID in the JSS
# $periid - Peripheral serial # in the JSS for this computer
####################################################################################################
function getJSSInformationen0() {
computerapioutput="$(/usr/bin/curl -k -u $apiusername:$apipassword $jssbase/JSSResource/computers/macaddress/$en0 -X GET)"
computerid="$(echo $computerapioutput | sed -n -e 's/.*<id>\(.*\)<\/id>.*/\1/p')"
periid="$(echo $computerapioutput | sed -n -e 's/.*<field_1>\(.*\)<\/field_1>.*/\1/p')"
}
####################################################################################################
# FUNCTION - Get information via the JSSAPI to get the computerid# and peripheral id number
# $computerapioutput - Full API output of current Computer Record in the JSS
# $computerid - The computer ID in the JSS
# $periid - Peripheral serial # in the JSS for this computer
####################################################################################################
function getJSSInformationen1() {
computerapioutput="$(/usr/bin/curl -k -u $apiusername:$apipassword $jssbase/JSSResource/computers/macaddress/$en1 -X GET)"
computerid="$(echo $computerapioutput | sed -n -e 's/.*<id>\(.*\)<\/id>.*/\1/p')"
periid="$(echo $computerapioutput | sed -n -e 's/.*<field_1>\(.*\)<\/field_1>.*/\1/p')"
}
####################################################################################################
# FUNCTION - cURL POST of the generatePostXMLFile function
####################################################################################################
function xmlPost() {
echo "No previous Thunderbolt display found in JSS, Creating record for $serial"
/usr/bin/curl -k -u $apiusername:$apipassword $jssbase/JSSResource/peripherals/id/$next -T "/tmp/Peripheral.xml" -X POST
}
####################################################################################################
# FUNCTION - cURL PUT of the generatePutXMLFile function
####################################################################################################
function xmlPut() {
echo "Different Thunderbolt display found in JSS, updating record to $serial"
/usr/bin/curl -k -u $apiusername:$apipassword $jssbase/JSSResource/peripherals/id/$periid -T "/tmp/Peripheral.xml" -X PUT
}
####################################################################################################
# FUNCTION - Notification that Serial# is already set correctly
####################################################################################################
function alreadySetMessage() {
echo "Thunderbolt display serial already set correctly"
echo "Display in JSS: $perrid"
echo "Display attached: $serial"
}
####################################################################################################
# SCRIPT OPERATIONS - - REALLY!!! - DO NOT MODIFY BELOW THIS LINE
####################################################################################################
getSerialNumber
if [ "$serial" != "" ]; then
getInterface
if [ "$en0" != "" ]; then
getJSSInformationen0
if [ "$periid" = "" ]; then
getNextPeripheral
generatePostXMLFile
xmlPost
deleteXMLFile
elif [ "$periid" != "$serial" ]; then
generatePutXMLFile
xmlPut
deleteXMLFile
echo
else
alreadySetMessage
fi
elif [ "$en1" != "" ]; then
getJSSInformationen1
if [ "$periid" = "" ]; then
getNextPeripheral
generatePostXMLFile
xmlPost
deleteXMLFile
elif [ "$periid" != "$serial" ]; then
generatePutXMLFile
xmlPut
deleteXMLFile
else
alreadySetMessage
fi
else
echo "No Computer Record Found!"
fi
else
echo "No Thunderbolt Display Connected! - ABORT"
fi