Class: Xolo::Server::Version

Inherits:
Core::BaseClasses::Version
  • Object
show all
Includes:
Comparable, Helpers::JamfPro, Helpers::Log, Helpers::Notification, Helpers::TitleEditor, Mixins::Changelog, Mixins::VersionJamfAccess, Mixins::VersionTedAccess
Defined in:
lib/xolo/server/version.rb

Overview

Xolo Version/Patch as used on the Xolo Server

The code in this file mostly deals with the data on the Xolo server itself, and general methods for manipulating the version.

Code for interacting with the Title Editor and Jamf Pro are in the helpers and mixins.

NOTE be sure to only instantiate these using the server's 'instantiate_version' method, or else they might not have all the correct innards

Constant Summary collapse

VERSIONS_DIRNAME =

On the server, xolo versions are represented by JSON files in the 'versions' directory of the title directory

So a title 'foobar' would have a directory (Xolo::Server::DATA_DIR)/titles/foobar/

In there will be a 'versions' dir containing json files for each version of the title.

'versions'
JAMF_PKG_NOTES_VERS_PH =
'XOLO-VERSION-HERE'
JAMF_PKG_NOTES_TITLE_PH =
'XOLO-TITLE-HERE'
JAMF_PKG_NOTES_PREFIX =

The 'Notes' of a jamf pkg are the Xolo Title Description, with this prepended

<<~ENDNOTES
  This package is maintained by 'xolo', to install version '#{JAMF_PKG_NOTES_VERS_PH}' of title '#{JAMF_PKG_NOTES_TITLE_PH}'. The description in Xolo is:


ENDNOTES
MAX_PKG_DELETION_THREADS =
10
STUB_PATCH_VERSION =

STUB PATCH

We create a fake 'stub' patch with all ted titles so that we can activate the title before any real version is added and also accept any EA/version_script, either manually or automatically

This version should never be available to any mac, and needs no patch policies or packages.

It should also never be deleted until the title itself is deleted.

'0.0.0x0'
STUB_PATCH_CAPABILITY_CRITERION_NAME =

machines that can install this version

'Operating System Version'
STUB_PATCH_CAPABILITY_CRITERION_OPERATOR =
'less than or equal'
STUB_PATCH_CAPABILITY_CRITERION_VALUE =
'10.0'
STUB_PATCH_COMPONENT_NAME =

machines that have this version installed

'Xolo Stub'
STUB_PATCH_COMPONENT_CRITERION_NAME =
'Application Title'
STUB_PATCH_COMPONENT_CRITERION_OPERATOR =
'is'
STUB_PATCH_COMPONENT_CRITERION_VALUE =
'XoloStub-DoesNotExist.app'

Constants included from Mixins::VersionJamfAccess

Mixins::VersionJamfAccess::JAMF_POLICY_NAME_AUTO_INSTALL_SFX, Mixins::VersionJamfAccess::JAMF_POLICY_NAME_AUTO_REINSTALL_SFX, Mixins::VersionJamfAccess::JAMF_POLICY_NAME_MANUAL_INSTALL_SFX, Mixins::VersionJamfAccess::JAMF_SMART_GROUP_NAME_INSTALLED_SFX

Constants included from Mixins::Changelog

Mixins::Changelog::TITLE_CHANGELOG_FILENAME

Constants included from Helpers::Notification

Helpers::Notification::ALERT_TOOL_EMAIL_PREFIX, Helpers::Notification::DFT_EMAIL_FROM

Constants included from Helpers::JamfPro

Helpers::JamfPro::PATCH_REPORT_JPAPI_PAGE_SIZE, Helpers::JamfPro::PATCH_REPORT_UNKNOWN_VERSION

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Mixins::VersionTedAccess

#create_patch_in_ted, #delete_patch_from_ted, #enable_ted_patch, #get_patch_component_criteria_params, included, #repair_ted_patch, #set_app_component, #set_ea_component, #set_patch_capabilites, #set_patch_killapps, #set_ted_patch_component_criteria, #ted_patch_url, #update_patch_in_ted

Methods included from Mixins::VersionJamfAccess

#activate_managed_patch_version_in_jamf, #activate_patch_version_in_jamf, #activate_subscribed_patch_version_in_jamf, #assign_pkg_to_patch_in_jamf, #configure_jamf_auto_install_policy, #configure_jamf_auto_reinstall_policy, #configure_jamf_installed_group, #configure_jamf_manual_install_policy, #configure_jamf_patch_policy, #configure_patch_pol_for_self_service, #create_in_jamf, #create_jamf_auto_install_policy, #create_jamf_auto_reinstall_policy, #create_jamf_installed_group, #create_jamf_manual_install_policy, #create_jamf_package, #create_jamf_patch_policy, #delete_jamf_package, #delete_version_from_jamf, #deploy_via_mdm, #disable_policies_for_deprecation_or_skipping, #expand_groups_for_deploy, extended, included, #jamf_auto_install_policy, #jamf_auto_install_policy_exist?, #jamf_auto_install_policy_url, #jamf_auto_reinstall_policy, #jamf_auto_reinstall_policy_exist?, #jamf_auto_reinstall_policy_url, #jamf_gui_url, #jamf_installed_group, #jamf_installed_group_criteria, #jamf_installed_group_exist?, #jamf_installed_group_url, #jamf_manual_install_policy, #jamf_manual_install_policy_exist?, #jamf_manual_install_policy_url, #jamf_package, #jamf_package_exist?, #jamf_package_notes, #jamf_package_url, #jamf_patch_policy, #jamf_patch_policy_exist?, #jamf_patch_policy_url, #jamf_patch_version, #patch_report, #remove_exclusions_from_deploy, #remove_invalid_computers_for_deploy, #repair_jamf_auto_install_policy, #repair_jamf_auto_reinstall_policy, #repair_jamf_installed_group, #repair_jamf_manual_install_policy, #repair_jamf_package, #repair_jamf_patch_policy, #repair_jamf_version_objects, #reset_policies_to_pilot, #set_patch_policy_ssvc_icon, #set_policy_exclusions, #set_policy_pilot_groups, #set_policy_release_groups, #set_policy_to_all_targets, #update_excluded_groups, #update_jamf_package_notes, #update_jamf_patch_policy_patch_unknown, #update_jamf_pkg_min_os, #update_jamf_pkg_reboot, #update_pilot_groups, #update_release_groups, #update_version_in_jamf

Methods included from Mixins::Changelog

#backup_changelog, backup_file_dir, #changelog, #changelog_backup_file, #changelog_file, #changelog_lock, changelog_locks, #delete_changelog, #hostname_from_ip, included, #log_change, #log_update_changes, #note_changes_for_update_and_log

Methods included from Helpers::Notification

#email_from, included, #send_alert, #send_email, #send_email_alert, #server_fqdn, #server_name

Methods included from Helpers::Log

included, #log_debug, #log_error, #log_fatal, #log_info, #log_unknown, #log_warn, #logger, #session_svr_obj_id

Methods included from Helpers::TitleEditor

included

Methods included from Helpers::JamfPro

extended, included, #jamf_gui_url, #jamf_obj_name_pfx_base, #jamf_xolo_category_id, #valid_forced_exclusion_group_name

Constructor Details

#initialize(data_hash) ⇒ Version

NOTE: be sure to only instantiate these using the servers 'instantiate_version' method, or else they might not have all the correct innards



387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
# File 'lib/xolo/server/version.rb', line 387

def initialize(data_hash)
  super

  # These attrs aren't defined in the ATTRIBUTES
  # and/or are not stored in the on-disk json file

  @ted_id_number ||= data_hash[:ted_id_number]
  @jamf_pkg_id ||= data_hash[:jamf_pkg_id]

  # and these can be generated now
  @jamf_obj_name_pfx = "#{jamf_obj_name_pfx_base}#{title}-#{version}"

  @jamf_pkg_name ||= @jamf_obj_name_pfx

  @jamf_installed_group_name = "#{jamf_obj_name_pfx}-#{JAMF_SMART_GROUP_NAME_INSTALLED_SFX}"

  @jamf_auto_install_policy_name = "#{jamf_obj_name_pfx}-#{JAMF_POLICY_NAME_AUTO_INSTALL_SFX}"
  @jamf_manual_install_policy_name = "#{jamf_obj_name_pfx}-#{JAMF_POLICY_NAME_MANUAL_INSTALL_SFX}"
  @jamf_auto_reinstall_policy_name = "#{jamf_obj_name_pfx}-#{JAMF_POLICY_NAME_AUTO_REINSTALL_SFX}"

  @jamf_patch_policy_name = @jamf_obj_name_pfx

  # we set @jamf_pkg_file when a pkg is uploaded
  # since we don't know until then if its a .pkg or .zip
  # It will be stored in the local data and reloaded as needed
end

Instance Attribute Details

#changes_for_updateHash (readonly)

Also when applying updates, this will hold the changes being made: the differences between tne current attributs and the new_data_for_update We'll figure this out at the start of the update and can use it later to

  1. avoid doing things we don't need to
  2. log the changes in the change log at the very end

This is a Hash with keys of the attribute names that have changed the values are Hashes with keys of :old and :new e.g. { pilot_groups: { old: ['foo'], new: ['bar'] } }

Returns:

  • (Hash)


371
372
373
# File 'lib/xolo/server/version.rb', line 371

def changes_for_update
  @changes_for_update
end

#current_actionSymbol

Returns The current action being taken on this title one of :creating, :updating, :deleting.

Returns:

  • (Symbol)

    The current action being taken on this title one of :creating, :updating, :deleting



375
376
377
# File 'lib/xolo/server/version.rb', line 375

def current_action
  @current_action
end

#jamf_auto_install_policy_nameObject (readonly)

Jamf auto-install policies are named this



336
337
338
# File 'lib/xolo/server/version.rb', line 336

def jamf_auto_install_policy_name
  @jamf_auto_install_policy_name
end

#jamf_auto_reinstall_policy_nameObject (readonly)

Jamf auto re-install policies are named this



342
343
344
# File 'lib/xolo/server/version.rb', line 342

def jamf_auto_reinstall_policy_name
  @jamf_auto_reinstall_policy_name
end

#jamf_installed_group_nameString (readonly)

For each version there will be a smart group containing all macs that have that version of the title installed. The smart group will be named 'xolo--<version>-installed'</p> <p>It will be used as the target for the auto-reinstall</p> </div> </div> <div class="tags"> <p class="tag_title">Returns:</p> <ul class="return"> <li> <span class='type'>(<tt>String</tt>)</span> — <div class='inline'><p>the name of the smart group</p></div> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 333 334 335</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 333</span> <span class='kw'>def</span> <span class='id identifier rubyid_jamf_installed_group_name'>jamf_installed_group_name</span> <span class='ivar'>@jamf_installed_group_name</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <span id=""></span> <div class="method_details "> <h3 class="signature " id="jamf_manual_install_policy_name-instance_method"> #<strong>jamf_manual_install_policy_name</strong> ⇒ <tt>Object</tt> <span class="extras">(readonly)</span> <span class="aliases">Also known as: <span class="names"><span id='jamf_manual_install_trigger-instance_method'>jamf_manual_install_trigger</span></span> </span> </h3><div class="docstring"> <div class="discussion"> <p>Jamf manual install policies are named this</p> </div> </div> <div class="tags"> </div><table class="source_code"> <tr> <td> <pre class="lines"> 339 340 341</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 339</span> <span class='kw'>def</span> <span class='id identifier rubyid_jamf_manual_install_policy_name'>jamf_manual_install_policy_name</span> <span class='ivar'>@jamf_manual_install_policy_name</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <span id=""></span> <div class="method_details "> <h3 class="signature " id="jamf_obj_name_pfx-instance_method"> #<strong>jamf_obj_name_pfx</strong> ⇒ <tt>Object</tt> <span class="extras">(readonly)</span> </h3><div class="docstring"> <div class="discussion"> <p>Jamf object names start with this</p> </div> </div> <div class="tags"> </div><table class="source_code"> <tr> <td> <pre class="lines"> 324 325 326</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 324</span> <span class='kw'>def</span> <span class='id identifier rubyid_jamf_obj_name_pfx'>jamf_obj_name_pfx</span> <span class='ivar'>@jamf_obj_name_pfx</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <span id=""></span> <div class="method_details "> <h3 class="signature " id="jamf_patch_policy_name-instance_method"> #<strong>jamf_patch_policy_name</strong> ⇒ <tt>Object</tt> <span class="extras">(readonly)</span> </h3><div class="docstring"> <div class="discussion"> <p>Jamf Patch Policy is named this</p> </div> </div> <div class="tags"> </div><table class="source_code"> <tr> <td> <pre class="lines"> 348 349 350</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 348</span> <span class='kw'>def</span> <span class='id identifier rubyid_jamf_patch_policy_name'>jamf_patch_policy_name</span> <span class='ivar'>@jamf_patch_policy_name</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <span id=""></span> <div class="method_details "> <h3 class="signature " id="jamf_pkg_id-instance_method"> #<strong>jamf_pkg_id</strong> ⇒ <tt>Object</tt> <span class="extras">(readonly)</span> </h3><div class="docstring"> <div class="discussion"> <p>The Jamf Package object has this jamf id</p> </div> </div> <div class="tags"> </div><table class="source_code"> <tr> <td> <pre class="lines"> 351 352 353</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 351</span> <span class='kw'>def</span> <span class='id identifier rubyid_jamf_pkg_id'>jamf_pkg_id</span> <span class='ivar'>@jamf_pkg_id</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <span id=""></span> <div class="method_details "> <h3 class="signature " id="new_data_for_update-instance_method"> #<strong>new_data_for_update</strong> ⇒ <tt>Object</tt> <span class="extras">(readonly)</span> </h3><div class="docstring"> <div class="discussion"> <p>when applying updates, the new data is stored here so it can be accessed by update-methods and compared to the current instanace values both for updating the title, and the versions</p> </div> </div> <div class="tags"> </div><table class="source_code"> <tr> <td> <pre class="lines"> 357 358 359</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 357</span> <span class='kw'>def</span> <span class='id identifier rubyid_new_data_for_update'>new_data_for_update</span> <span class='ivar'>@new_data_for_update</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <span id="pkg_is_from_autopkg=-instance_method"></span> <div class="method_details "> <h3 class="signature " id="pkg_is_from_autopkg-instance_method"> #<strong>pkg_is_from_autopkg</strong> ⇒ <tt>Boolean</tt> </h3><div class="docstring"> <div class="discussion"> <p>Returns is the pkg being processed now from an autopkg recipe?.</p> </div> </div> <div class="tags"> <p class="tag_title">Returns:</p> <ul class="return"> <li> <span class='type'>(<tt>Boolean</tt>)</span> — <div class='inline'><p>is the pkg being processed now from an autopkg recipe?</p></div> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 378 379 380</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 378</span> <span class='kw'>def</span> <span class='id identifier rubyid_pkg_is_from_autopkg'>pkg_is_from_autopkg</span> <span class='ivar'>@pkg_is_from_autopkg</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <span id="server_app_instance=-instance_method"></span> <div class="method_details "> <h3 class="signature " id="server_app_instance-instance_method"> #<strong>server_app_instance</strong> ⇒ <tt>Object</tt> </h3><div class="docstring"> <div class="discussion"> <p>The instance of Xolo::Server::App that instantiated this version object. This is how we access things that are available in routes and helpers, like the single Jamf and TEd connections for this App instance.</p> </div> </div> <div class="tags"> </div><table class="source_code"> <tr> <td> <pre class="lines"> 311 312 313</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 311</span> <span class='kw'>def</span> <span class='id identifier rubyid_server_app_instance'>server_app_instance</span> <span class='ivar'>@server_app_instance</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <span id="ted_id_number=-instance_method"></span> <div class="method_details "> <h3 class="signature " id="ted_id_number-instance_method"> #<strong>ted_id_number</strong> ⇒ <tt>Object</tt> </h3><div class="docstring"> <div class="discussion"> <p>The Windoo::Patch#patchId</p> </div> </div> <div class="tags"> </div><table class="source_code"> <tr> <td> <pre class="lines"> 321 322 323</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 321</span> <span class='kw'>def</span> <span class='id identifier rubyid_ted_id_number'>ted_id_number</span> <span class='ivar'>@ted_id_number</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <span id="title_object=-instance_method"></span> <div class="method_details "> <h3 class="signature " id="title_object-instance_method"> #<strong>title_object</strong>(refresh: false) ⇒ <tt><span class='object_link'><a href="Title.html" title="Xolo::Server::Title (class)">Xolo::Server::Title</a></span></tt> </h3><div class="docstring"> <div class="discussion"> <p>This might have been set already if we were instantiated via our title</p> </div> </div> <div class="tags"> <p class="tag_title">Returns:</p> <ul class="return"> <li> <span class='type'>(<tt><span class='object_link'><a href="Title.html" title="Xolo::Server::Title (class)">Xolo::Server::Title</a></span></tt>)</span> — <div class='inline'><p>the title for this version</p></div> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 574 575 576 577</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 574</span> <span class='kw'>def</span> <span class='id identifier rubyid_title_object'>title_object</span><span class='lparen'>(</span><span class='label'>refresh:</span> <span class='kw'>false</span><span class='rparen'>)</span> <span class='ivar'>@title_object</span> <span class='op'>=</span> <span class='kw'>nil</span> <span class='kw'>if</span> <span class='id identifier rubyid_refresh'>refresh</span> <span class='ivar'>@title_object</span> <span class='op'>||=</span> <span class='id identifier rubyid_server_app_instance'>server_app_instance</span><span class='period'>.</span><span class='id identifier rubyid_instantiate_title'>instantiate_title</span> <span class='id identifier rubyid_title'>title</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> </div> <div id="class_method_details" class="method_details_list"> <h2>Class Method Details</h2> <div class="method_details first"> <h3 class="signature first" id="add_version_via_subscription-class_method"> .<strong>add_version_via_subscription</strong>(title_object:, new_version:) ⇒ <tt>void</tt> </h3><div class="docstring"> <div class="discussion"> <p class="note returns_void">This method returns an undefined value.</p><p>add a new version in response to a patch title update webhook event. This doesn't upload a pkg - it just creates the version in Xolo, and then someone can upload a pkg to it via xadm or autopkg will do it if configured.</p> </div> </div> <div class="tags"> <p class="tag_title">Parameters:</p> <ul class="param"> <li> <span class='name'>title_object</span> <span class='type'>(<tt><span class='object_link'><a href="Title.html" title="Xolo::Server::Title (class)">Xolo::Server::Title</a></span></tt>)</span> — <div class='inline'><p>the title object for the subscribed title</p></div> </li> <li> <span class='name'>new_version</span> <span class='type'>(<tt>String</tt>)</span> — <div class='inline'><p>the new version to add</p></div> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 234</span> <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_add_version_via_subscription'>add_version_via_subscription</span><span class='lparen'>(</span><span class='label'>title_object:</span><span class='comma'>,</span> <span class='label'>new_version:</span><span class='rparen'>)</span> <span class='id identifier rubyid_title_object'>title_object</span><span class='period'>.</span><span class='id identifier rubyid_log_info'>log_info</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Adding new version '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_new_version'>new_version</span><span class='embexpr_end'>}</span><span class='tstring_content'>' for subscribed title '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_title_object'>title_object</span><span class='period'>.</span><span class='id identifier rubyid_title'>title</span><span class='embexpr_end'>}</span><span class='tstring_content'>'</span><span class='tstring_end'>"</span></span> <span class='comment'># get more details about this version from the JPAPI </span> <span class='id identifier rubyid_patch_version_data'>patch_version_data</span> <span class='op'>=</span> <span class='id identifier rubyid_title_object'>title_object</span><span class='period'>.</span><span class='id identifier rubyid_patch_versions'>patch_versions</span><span class='lparen'>(</span><span class='label'>version:</span> <span class='id identifier rubyid_new_version'>new_version</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span> <span class='kw'>unless</span> <span class='id identifier rubyid_patch_version_data'>patch_version_data</span> <span class='id identifier rubyid_msg'>msg</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Could not get patch version data from JPAPI for version '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_new_version'>new_version</span><span class='embexpr_end'>}</span><span class='tstring_content'>' of subscribed title '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_title_object'>title_object</span><span class='period'>.</span><span class='id identifier rubyid_title'>title</span><span class='embexpr_end'>}</span><span class='tstring_content'>'. Cannot create new version in Xolo without this data. Aborting.</span><span class='tstring_end'>"</span></span> <span class='id identifier rubyid_title_object'>title_object</span><span class='period'>.</span><span class='id identifier rubyid_log_error'>log_error</span> <span class='id identifier rubyid_msg'>msg</span><span class='comma'>,</span> <span class='label'>alert:</span> <span class='kw'>true</span> <span class='kw'>return</span> <span class='kw'>end</span> <span class='id identifier rubyid_title_object'>title_object</span><span class='period'>.</span><span class='id identifier rubyid_log_debug'>log_debug</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Got patch version data from JPAPI for version '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_new_version'>new_version</span><span class='embexpr_end'>}</span><span class='tstring_content'>': </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_patch_version_data'>patch_version_data</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span> <span class='comment'># put the data into a hash for creating a new version object </span> <span class='id identifier rubyid_vobj_data'>vobj_data</span> <span class='op'>=</span> <span class='lbrace'>{</span> <span class='label'>publish_date:</span> <span class='const'>Time</span><span class='period'>.</span><span class='id identifier rubyid_parse'>parse</span><span class='lparen'>(</span><span class='id identifier rubyid_patch_version_data'>patch_version_data</span><span class='lbracket'>[</span><span class='symbol'>:releaseDate</span><span class='rbracket'>]</span><span class='rparen'>)</span><span class='comma'>,</span> <span class='label'>standalone:</span> <span class='id identifier rubyid_patch_version_data'>patch_version_data</span><span class='lbracket'>[</span><span class='symbol'>:standalone</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='label'>min_os:</span> <span class='id identifier rubyid_patch_version_data'>patch_version_data</span><span class='lbracket'>[</span><span class='symbol'>:minimumOperatingSystem</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='label'>reboot:</span> <span class='id identifier rubyid_patch_version_data'>patch_version_data</span><span class='lbracket'>[</span><span class='symbol'>:rebootRequired</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='label'>killapps:</span> <span class='lbracket'>[</span><span class='rbracket'>]</span> <span class='rbrace'>}</span> <span class='comment'># Killapps for subscribed titles? The API only shows app names without the .app, e.g. </span> <span class='comment'># "killApps": [ </span> <span class='comment'># { </span> <span class='comment'># "appName": "ChrislTestHelper" </span> <span class='comment'># }, </span> <span class='comment'># { </span> <span class='comment'># "appName": "Chrisl Test" </span> <span class='comment'># } </span> <span class='comment'># ] </span> <span class='comment'># Since we don't manage them, we'll just record them in the data like this... </span> <span class='kw'>unless</span> <span class='id identifier rubyid_patch_version_data'>patch_version_data</span><span class='lbracket'>[</span><span class='symbol'>:killApps</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_pix_empty?'>pix_empty?</span> <span class='id identifier rubyid_patch_version_data'>patch_version_data</span><span class='lbracket'>[</span><span class='symbol'>:killApps</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_ka'>ka</span><span class='op'>|</span> <span class='id identifier rubyid_vobj_data'>vobj_data</span><span class='lbracket'>[</span><span class='symbol'>:killapps</span><span class='rbracket'>]</span> <span class='op'><<</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_ka'>ka</span><span class='lbracket'>[</span><span class='symbol'>:appName</span><span class='rbracket'>]</span><span class='embexpr_end'>}</span><span class='tstring_content'>.app;unknown.from.subscription</span><span class='tstring_end'>"</span></span> <span class='kw'>end</span> <span class='kw'>end</span> <span class='comment'># instantiate the version object </span> <span class='id identifier rubyid_title_object'>title_object</span><span class='period'>.</span><span class='id identifier rubyid_log_debug'>log_debug</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Instantiating version via subscription '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_new_version'>new_version</span><span class='embexpr_end'>}</span><span class='tstring_content'>' of title '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_title_object'>title_object</span><span class='period'>.</span><span class='id identifier rubyid_title'>title</span><span class='embexpr_end'>}</span><span class='tstring_content'>' (</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_title_object'>title_object</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='embexpr_end'>}</span><span class='tstring_content'>) with data: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_vobj_data'>vobj_data</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span> <span class='id identifier rubyid_vobj'>vobj</span> <span class='op'>=</span> <span class='id identifier rubyid_title_object'>title_object</span><span class='period'>.</span><span class='id identifier rubyid_server_app_instance'>server_app_instance</span><span class='period'>.</span><span class='id identifier rubyid_instantiate_version'>instantiate_version</span><span class='lparen'>(</span> <span class='label'>title:</span> <span class='id identifier rubyid_title_object'>title_object</span><span class='comma'>,</span> <span class='label'>version:</span> <span class='id identifier rubyid_new_version'>new_version</span><span class='comma'>,</span> <span class='op'>**</span><span class='id identifier rubyid_vobj_data'>vobj_data</span> <span class='rparen'>)</span> <span class='comment'># create it in xolo </span> <span class='id identifier rubyid_vobj'>vobj</span><span class='period'>.</span><span class='id identifier rubyid_create'>create</span> <span class='comment'># moved to vobj.create: </span> <span class='comment'># vobj.server_app_instance.update_client_data </span> <span class='comment'># tell someone </span> <span class='id identifier rubyid_msg'>msg</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>ACTION REQUIRED: New pilot for subscribed title '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_title_object'>title_object</span><span class='period'>.</span><span class='id identifier rubyid_title'>title</span><span class='embexpr_end'>}</span><span class='tstring_content'>', version '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_new_version'>new_version</span><span class='embexpr_end'>}</span><span class='tstring_content'>' has been created in Xolo via subscription.</span><span class='tstring_end'>"</span></span> <span class='comment'># if not autopkg enabled, we need to tell someone to upload a pkg for this new version </span> <span class='kw'>unless</span> <span class='id identifier rubyid_title_object'>title_object</span><span class='period'>.</span><span class='id identifier rubyid_autopkg_enabled?'>autopkg_enabled?</span> <span class='comment'># update general alert msg </span> <span class='id identifier rubyid_msg'>msg</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_msg'>msg</span><span class='embexpr_end'>}</span><span class='tstring_content'>\nPlease upload a .pkg for it ASAP using this command:\n xadm edit-version </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_title_object'>title_object</span><span class='period'>.</span><span class='id identifier rubyid_title'>title</span><span class='embexpr_end'>}</span><span class='tstring_content'> </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_new_version'>new_version</span><span class='embexpr_end'>}</span><span class='tstring_content'> --pkg-to-upload /path/to/installer.pkg</span><span class='tstring_end'>"</span></span> <span class='comment'># email to title contact </span> <span class='id identifier rubyid_vobj'>vobj</span><span class='period'>.</span><span class='id identifier rubyid_server_app_instance'>server_app_instance</span><span class='period'>.</span><span class='id identifier rubyid_send_email'>send_email</span> <span class='label'>to:</span> <span class='id identifier rubyid_title_object'>title_object</span><span class='period'>.</span><span class='id identifier rubyid_contact_email'>contact_email</span><span class='comma'>,</span> <span class='label'>subject:</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Need manual upload of xolo pkg</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='label'>msg:</span> <span class='id identifier rubyid_msg'>msg</span> <span class='kw'>end</span> <span class='comment'># if title_object.autopkg_enabled? </span> <span class='comment'># send general alert </span> <span class='id identifier rubyid_vobj'>vobj</span><span class='period'>.</span><span class='id identifier rubyid_log_info'>log_info</span> <span class='id identifier rubyid_msg'>msg</span><span class='comma'>,</span> <span class='label'>alert:</span> <span class='kw'>true</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="all_versions-class_method"> .<strong>all_versions</strong>(title) ⇒ <tt>Array<String></tt> </h3><div class="docstring"> <div class="discussion"> <p>Returns A list of all known versions for a title, just the basenames of all the version files with the extension removed.</p> </div> </div> <div class="tags"> <p class="tag_title">Returns:</p> <ul class="return"> <li> <span class='type'>(<tt>Array<String></tt>)</span> — <div class='inline'><p>A list of all known versions for a title, just the basenames of all the version files with the extension removed</p></div> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 117 118 119</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 117</span> <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_all_versions'>all_versions</span><span class='lparen'>(</span><span class='id identifier rubyid_title'>title</span><span class='rparen'>)</span> <span class='id identifier rubyid_version_dirs'>version_dirs</span><span class='lparen'>(</span><span class='id identifier rubyid_title'>title</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_c'>c</span><span class='op'>|</span> <span class='id identifier rubyid_c'>c</span><span class='period'>.</span><span class='id identifier rubyid_basename'>basename</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span> <span class='rbrace'>}</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="data_dir-class_method"> .<strong>data_dir</strong>(title, version) ⇒ <tt>Pathname</tt> </h3><div class="docstring"> <div class="discussion"> <p>The the local directory containing various files specific to the given version of a title</p> </div> </div> <div class="tags"> <p class="tag_title">Returns:</p> <ul class="return"> <li> <span class='type'>(<tt>Pathname</tt>)</span> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 130 131 132</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 130</span> <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_data_dir'>data_dir</span><span class='lparen'>(</span><span class='id identifier rubyid_title'>title</span><span class='comma'>,</span> <span class='id identifier rubyid_version'>version</span><span class='rparen'>)</span> <span class='id identifier rubyid_version_dir'>version_dir</span><span class='lparen'>(</span><span class='id identifier rubyid_title'>title</span><span class='rparen'>)</span> <span class='op'>+</span> <span class='id identifier rubyid_version'>version</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="data_file-class_method"> .<strong>data_file</strong>(title, version) ⇒ <tt>Pathname</tt> </h3><div class="docstring"> <div class="discussion"> <p>The the local JSON file containing the current values for the given version of a title</p> </div> </div> <div class="tags"> <p class="tag_title">Returns:</p> <ul class="return"> <li> <span class='type'>(<tt>Pathname</tt>)</span> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 143 144 145</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 143</span> <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_data_file'>data_file</span><span class='lparen'>(</span><span class='id identifier rubyid_title'>title</span><span class='comma'>,</span> <span class='id identifier rubyid_version'>version</span><span class='rparen'>)</span> <span class='id identifier rubyid_data_dir'>data_dir</span><span class='lparen'>(</span><span class='id identifier rubyid_title'>title</span><span class='comma'>,</span> <span class='id identifier rubyid_version'>version</span><span class='rparen'>)</span> <span class='op'>+</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_version'>version</span><span class='embexpr_end'>}</span><span class='tstring_content'>.json</span><span class='tstring_end'>"</span></span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="in_ted?-class_method"> .<strong>in_ted?</strong>(patch_id, cnx:) ⇒ <tt>Boolean</tt> </h3><div class="docstring"> <div class="discussion"> <p>Returns Does the given patch exist in the Title Editor?.</p> </div> </div> <div class="tags"> <p class="tag_title">Parameters:</p> <ul class="param"> <li> <span class='name'>patch_id</span> <span class='type'>(<tt>String</tt>)</span> — <div class='inline'><p>the id number of the patch we are looking for</p></div> </li> </ul> <p class="tag_title">Returns:</p> <ul class="return"> <li> <span class='type'>(<tt>Boolean</tt>)</span> — <div class='inline'><p>Does the given patch exist in the Title Editor?</p></div> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 182 183 184</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 182</span> <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_in_ted?'>in_ted?</span><span class='lparen'>(</span><span class='id identifier rubyid_patch_id'>patch_id</span><span class='comma'>,</span> <span class='label'>cnx:</span><span class='rparen'>)</span> <span class='const'>Windoo</span><span class='op'>::</span><span class='const'>Patch</span><span class='period'>.</span><span class='id identifier rubyid_all_ids'>all_ids</span><span class='lparen'>(</span><span class='label'>cnx:</span> <span class='id identifier rubyid_cnx'>cnx</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span> <span class='id identifier rubyid_patch_id'>patch_id</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="load-class_method"> .<strong>load</strong>(title, version) ⇒ <tt><span class='object_link'><a href="Title.html" title="Xolo::Server::Title (class)">Xolo::Server::Title</a></span></tt> </h3><div class="docstring"> <div class="discussion"> <p>Instantiate from the local JSON file containing the current values for the given version of a title</p> <p>NOTE: All instantiation should happen using the #instantiate_version method in the server app instance. Please don't call this method directly</p> </div> </div> <div class="tags"> <p class="tag_title">Returns:</p> <ul class="return"> <li> <span class='type'>(<tt><span class='object_link'><a href="Title.html" title="Xolo::Server::Title (class)">Xolo::Server::Title</a></span></tt>)</span> — <div class='inline'><p>load an existing title from the on-disk JSON file</p></div> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 173 174 175 176</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 173</span> <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_load'>load</span><span class='lparen'>(</span><span class='id identifier rubyid_title'>title</span><span class='comma'>,</span> <span class='id identifier rubyid_version'>version</span><span class='rparen'>)</span> <span class='const'><span class='object_link'><a href="../../Xolo.html" title="Xolo (module)">Xolo</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Server.html" title="Xolo::Server (module)">Server</a></span></span><span class='period'>.</span><span class='id identifier rubyid_logger'><span class='object_link'><a href="../Server.html#logger-class_method" title="Xolo::Server.logger (method)">logger</a></span></span><span class='period'>.</span><span class='id identifier rubyid_debug'>debug</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Loading version '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_version'>version</span><span class='embexpr_end'>}</span><span class='tstring_content'>' of title '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_title'>title</span><span class='embexpr_end'>}</span><span class='tstring_content'>' from file</span><span class='tstring_end'>"</span></span> <span class='id identifier rubyid_new'>new</span> <span class='id identifier rubyid_parse_json'>parse_json</span><span class='lparen'>(</span><span class='id identifier rubyid_data_file'>data_file</span><span class='lparen'>(</span><span class='id identifier rubyid_title'>title</span><span class='comma'>,</span> <span class='id identifier rubyid_version'>version</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_read'>read</span><span class='rparen'>)</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="locked?-class_method"> .<strong>locked?</strong>(title, version) ⇒ <tt>Boolean</tt> </h3><div class="docstring"> <div class="discussion"> <p>Is a version locked for updates?</p> </div> </div> <div class="tags"> <p class="tag_title">Returns:</p> <ul class="return"> <li> <span class='type'>(<tt>Boolean</tt>)</span> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 188 189 190 191</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 188</span> <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_locked?'>locked?</span><span class='lparen'>(</span><span class='id identifier rubyid_title'>title</span><span class='comma'>,</span> <span class='id identifier rubyid_version'>version</span><span class='rparen'>)</span> <span class='id identifier rubyid_curr_lock'>curr_lock</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../../Xolo.html" title="Xolo (module)">Xolo</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Server.html" title="Xolo::Server (module)">Server</a></span></span><span class='period'>.</span><span class='id identifier rubyid_object_locks'><span class='object_link'><a href="ObjectLocks.html#object_locks-instance_method" title="Xolo::Server::ObjectLocks#object_locks (method)">object_locks</a></span></span><span class='period'>.</span><span class='id identifier rubyid_dig'>dig</span> <span class='id identifier rubyid_title'>title</span><span class='comma'>,</span> <span class='symbol'>:versions</span><span class='comma'>,</span> <span class='id identifier rubyid_version'>version</span> <span class='id identifier rubyid_curr_lock'>curr_lock</span> <span class='op'>&&</span> <span class='id identifier rubyid_curr_lock'>curr_lock</span> <span class='op'>></span> <span class='const'>Time</span><span class='period'>.</span><span class='id identifier rubyid_now'>now</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="manifest_file-class_method"> .<strong>manifest_file</strong>(title, version) ⇒ <tt>Pathname</tt> </h3><div class="docstring"> <div class="discussion"> <p>The the local xml plist file containing the .pkg manifest for the given version of a title</p> </div> </div> <div class="tags"> <p class="tag_title">Returns:</p> <ul class="return"> <li> <span class='type'>(<tt>Pathname</tt>)</span> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 156 157 158</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 156</span> <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_manifest_file'>manifest_file</span><span class='lparen'>(</span><span class='id identifier rubyid_title'>title</span><span class='comma'>,</span> <span class='id identifier rubyid_version'>version</span><span class='rparen'>)</span> <span class='id identifier rubyid_data_dir'>data_dir</span><span class='lparen'>(</span><span class='id identifier rubyid_title'>title</span><span class='comma'>,</span> <span class='id identifier rubyid_version'>version</span><span class='rparen'>)</span> <span class='op'>+</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_version'>version</span><span class='embexpr_end'>}</span><span class='tstring_content'>.manifest.plist</span><span class='tstring_end'>"</span></span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="pkg_deletion_pool-class_method"> .<strong>pkg_deletion_pool</strong> ⇒ <tt>Queue</tt> </h3><div class="docstring"> <div class="discussion"> <p>The package-deletion thread pool</p> <p>the auto_terminate is false to prevents the threads from being daemonized, and running after the main thread exits. This is important because launchd jobs should never do that.</p> <p>See <a href="https://ruby-concurrency.github.io/concurrent-ruby/master/file.thread_pools.html">https://ruby-concurrency.github.io/concurrent-ruby/master/file.thread_pools.html</a></p> </div> </div> <div class="tags"> <p class="tag_title">Returns:</p> <ul class="return"> <li> <span class='type'>(<tt>Queue</tt>)</span> — <div class='inline'><p>The package-deletion thread pool</p></div> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 202 203 204 205 206 207 208 209 210 211 212 213</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 202</span> <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_pkg_deletion_pool'>pkg_deletion_pool</span> <span class='ivar'>@pkg_deletion_pool</span> <span class='op'>||=</span> <span class='const'>Concurrent</span><span class='op'>::</span><span class='const'>ThreadPoolExecutor</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span> <span class='label'>name:</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>package-deletion</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='label'>min_threads:</span> <span class='int'>1</span><span class='comma'>,</span> <span class='comment'># start with 1 thread </span> <span class='label'>max_threads:</span> <span class='const'><span class='object_link'><a href="#MAX_PKG_DELETION_THREADS-constant" title="Xolo::Server::Version::MAX_PKG_DELETION_THREADS (constant)">MAX_PKG_DELETION_THREADS</a></span></span><span class='comma'>,</span> <span class='comment'># create at most 10 threads </span> <span class='label'>max_queue:</span> <span class='int'>0</span><span class='comma'>,</span> <span class='comment'># no limit </span> <span class='label'>auto_terminate:</span> <span class='kw'>false</span><span class='comma'>,</span> <span class='comment'># see method comments above </span> <span class='label'>idletime:</span> <span class='int'>60</span> <span class='comment'># seconds thread can remain idle before it is reclaimed, default is 60 </span> <span class='comment'># fallback_policy: :abort # the default is :abort, which will raise a </span> <span class='comment'># Concurrent::RejectedExecutionError exception and discard the task </span> <span class='rparen'>)</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="pkg_deletion_pool_info-class_method"> .<strong>pkg_deletion_pool_info</strong> ⇒ <tt>Hash</tt> </h3><div class="docstring"> <div class="discussion"> <p>info about the current pkg deletion pool state, for the /state route</p> </div> </div> <div class="tags"> <p class="tag_title">Returns:</p> <ul class="return"> <li> <span class='type'>(<tt>Hash</tt>)</span> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 219 220 221 222 223 224</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 219</span> <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_pkg_deletion_pool_info'>pkg_deletion_pool_info</span> <span class='lbrace'>{</span> <span class='label'>threads:</span> <span class='id identifier rubyid_pkg_deletion_pool'>pkg_deletion_pool</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span><span class='comma'>,</span> <span class='label'>queued_tasks:</span> <span class='id identifier rubyid_pkg_deletion_pool'>pkg_deletion_pool</span><span class='period'>.</span><span class='id identifier rubyid_queue_length'>queue_length</span> <span class='rbrace'>}</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="version_dir-class_method"> .<strong>version_dir</strong>(title) ⇒ <tt>Pathname</tt> </h3><div class="docstring"> <div class="discussion"> <p>Returns The directory containing subdirectories for each version of a title. They contain JSON and other files for the versions.</p> </div> </div> <div class="tags"> <p class="tag_title">Returns:</p> <ul class="return"> <li> <span class='type'>(<tt>Pathname</tt>)</span> — <div class='inline'><p>The directory containing subdirectories for each version of a title. They contain JSON and other files for the versions.</p></div> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 101 102 103</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 101</span> <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_version_dir'>version_dir</span><span class='lparen'>(</span><span class='id identifier rubyid_title'>title</span><span class='rparen'>)</span> <span class='const'><span class='object_link'><a href="../../Xolo.html" title="Xolo (module)">Xolo</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Server.html" title="Xolo::Server (module)">Server</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Title.html" title="Xolo::Server::Title (class)">Title</a></span></span><span class='period'>.</span><span class='id identifier rubyid_title_dir'><span class='object_link'><a href="Title.html#title_dir-class_method" title="Xolo::Server::Title.title_dir (method)">title_dir</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_title'>title</span><span class='rparen'>)</span> <span class='op'>+</span> <span class='const'><span class='object_link'><a href="#VERSIONS_DIRNAME-constant" title="Xolo::Server::Version::VERSIONS_DIRNAME (constant)">VERSIONS_DIRNAME</a></span></span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="version_dirs-class_method"> .<strong>version_dirs</strong>(title) ⇒ <tt>Array<Pathname></tt> </h3><div class="docstring"> <div class="discussion"> <p>Returns All version directories for a title.</p> </div> </div> <div class="tags"> <p class="tag_title">Returns:</p> <ul class="return"> <li> <span class='type'>(<tt>Array<Pathname></tt>)</span> — <div class='inline'><p>All version directories for a title</p></div> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 108 109 110 111</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 108</span> <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_version_dirs'>version_dirs</span><span class='lparen'>(</span><span class='id identifier rubyid_title'>title</span><span class='rparen'>)</span> <span class='id identifier rubyid_vdir'>vdir</span> <span class='op'>=</span> <span class='id identifier rubyid_version_dir'>version_dir</span><span class='lparen'>(</span><span class='id identifier rubyid_title'>title</span><span class='rparen'>)</span> <span class='id identifier rubyid_vdir'>vdir</span><span class='period'>.</span><span class='id identifier rubyid_directory?'>directory?</span> <span class='op'>?</span> <span class='id identifier rubyid_vdir'>vdir</span><span class='period'>.</span><span class='id identifier rubyid_children'>children</span> <span class='op'>:</span> <span class='lbracket'>[</span><span class='rbracket'>]</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> </div> <div id="instance_method_details" class="method_details_list"> <h2>Instance Method Details</h2> <div class="method_details first"> <h3 class="signature first" id="<=>-instance_method"> #<strong><=></strong>(other) ⇒ <tt>Object</tt> </h3><div class="docstring"> <div class="discussion"> <p>version comparison</p> </div> </div> <div class="tags"> <p class="tag_title">Raises:</p> <ul class="raise"> <li> <span class='type'>(<tt>Xolo::InvalidDataError</tt>)</span> </li> </ul> <p class="tag_title">See Also:</p> <ul class="see"> <li>Comparable</li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 421 422 423 424 425 426</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 421</span> <span class='kw'>def</span> <span class='op'><=></span><span class='lparen'>(</span><span class='id identifier rubyid_other'>other</span><span class='rparen'>)</span> <span class='id identifier rubyid_raise'>raise</span> <span class='const'><span class='object_link'><a href="../../Xolo.html" title="Xolo (module)">Xolo</a></span></span><span class='op'>::</span><span class='const'>InvalidDataError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Cannot compare with other classes</span><span class='tstring_end'>'</span></span> <span class='kw'>unless</span> <span class='id identifier rubyid_other'>other</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span> <span class='const'><span class='object_link'><a href="../../Xolo.html" title="Xolo (module)">Xolo</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Server.html" title="Xolo::Server (module)">Server</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="" title="Xolo::Server::Version (class)">Version</a></span></span> <span class='id identifier rubyid_raise'>raise</span> <span class='const'><span class='object_link'><a href="../../Xolo.html" title="Xolo (module)">Xolo</a></span></span><span class='op'>::</span><span class='const'>InvalidDataError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Cannot compare versions of different titles</span><span class='tstring_end'>'</span></span> <span class='kw'>unless</span> <span class='id identifier rubyid_other'>other</span><span class='period'>.</span><span class='id identifier rubyid_title'>title</span> <span class='op'>==</span> <span class='id identifier rubyid_title'>title</span> <span class='id identifier rubyid_order_index'>order_index</span> <span class='op'><=></span> <span class='id identifier rubyid_other'>other</span><span class='period'>.</span><span class='id identifier rubyid_order_index'>order_index</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="admin-instance_method"> #<strong>admin</strong> ⇒ <tt>String</tt> </h3><div class="docstring"> <div class="discussion"> <p>This can be manually set earlier in the request handling to use a non-standard admin username</p> </div> </div> <div class="tags"> <p class="tag_title">Returns:</p> <ul class="return"> <li> <span class='type'>(<tt>String</tt>)</span> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 553 554 555</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 553</span> <span class='kw'>def</span> <span class='id identifier rubyid_admin'>admin</span> <span class='ivar'>@admin</span> <span class='op'>||=</span> <span class='id identifier rubyid_session'>session</span><span class='lbracket'>[</span><span class='symbol'>:admin</span><span class='rbracket'>]</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="create-instance_method"> #<strong>create</strong> ⇒ <tt>void</tt> </h3><div class="docstring"> <div class="discussion"> <p class="note returns_void">This method returns an undefined value.</p><p>Save a new version, adding to the local filesystem, Jamf Pro, and the Title Editor as needed This should be running in the context of #with_streaming</p> </div> </div> <div class="tags"> </div><table class="source_code"> <tr> <td> <pre class="lines"> 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 640</span> <span class='kw'>def</span> <span class='id identifier rubyid_create'>create</span> <span class='id identifier rubyid_lock'>lock</span> <span class='ivar'>@current_action</span> <span class='op'>=</span> <span class='symbol'>:creating</span> <span class='comment'># NOTE: this for later in this method, </span> <span class='comment'># since uploads are processed in separate threads </span> <span class='id identifier rubyid_pkg_upload_given'>pkg_upload_given</span> <span class='op'>=</span> <span class='op'>!</span><span class='id identifier rubyid_pkg_to_upload'>pkg_to_upload</span><span class='period'>.</span><span class='id identifier rubyid_pix_empty?'>pix_empty?</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_creation_date'>creation_date</span> <span class='op'>=</span> <span class='const'>Time</span><span class='period'>.</span><span class='id identifier rubyid_now'>now</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_created_by'>created_by</span> <span class='op'>=</span> <span class='id identifier rubyid_admin'>admin</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_status'>status</span> <span class='op'>=</span> <span class='const'>STATUS_PENDING</span> <span class='id identifier rubyid_log_debug'>log_debug</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>creation_date: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_creation_date'>creation_date</span><span class='embexpr_end'>}</span><span class='tstring_content'>, created_by: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_created_by'>created_by</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span> <span class='comment'># save to file here so that we have something to delete if </span> <span class='comment'># the next couple steps fail </span> <span class='id identifier rubyid_progress'>progress</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Saving version data to Xolo server</span><span class='tstring_end'>'</span></span> <span class='id identifier rubyid_save_local_data'>save_local_data</span> <span class='id identifier rubyid_create_patch_in_ted'>create_patch_in_ted</span> <span class='kw'>unless</span> <span class='id identifier rubyid_subscribed?'>subscribed?</span> <span class='id identifier rubyid_create_in_jamf'>create_in_jamf</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_status'>status</span> <span class='op'>=</span> <span class='const'>STATUS_PILOT</span> <span class='comment'># save to file again now, because saving to TitleEd and Jamf will </span> <span class='comment'># add some data </span> <span class='id identifier rubyid_save_local_data'>save_local_data</span> <span class='comment'># prepend our version to the version_order array of the title </span> <span class='id identifier rubyid_progress'>progress</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Updating title version_order, prepending '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_version'>version</span><span class='embexpr_end'>}</span><span class='tstring_content'>'</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='label'>log:</span> <span class='symbol'>:info</span> <span class='id identifier rubyid_title_object'>title_object</span><span class='period'>.</span><span class='id identifier rubyid_prepend_version'>prepend_version</span><span class='lparen'>(</span><span class='id identifier rubyid_version'>version</span><span class='rparen'>)</span> <span class='id identifier rubyid_log_change'>log_change</span> <span class='label'>msg:</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Version Created</span><span class='tstring_end'>'</span></span> <span class='id identifier rubyid_progress'>progress</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Version '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_version'>version</span><span class='embexpr_end'>}</span><span class='tstring_content'>' of Title '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_title'>title</span><span class='embexpr_end'>}</span><span class='tstring_content'>' has been created in Xolo.</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='label'>log:</span> <span class='symbol'>:info</span> <span class='comment'># all done unless we need to get a pkg via autopkg </span> <span class='comment'># pkg upload from xadm will happen in a separate process, </span> <span class='comment'># so we don't want to do it here in the create method </span> <span class='comment'># do we have an uploaded pkg? </span> <span class='kw'>if</span> <span class='id identifier rubyid_pkg_upload_given'>pkg_upload_given</span> <span class='id identifier rubyid_progress'>progress</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Pkg will be uploaded to xolo via xadm shortly, from path '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_pkg_to_upload'>pkg_to_upload</span><span class='embexpr_end'>}</span><span class='tstring_content'>'</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='label'>log:</span> <span class='symbol'>:info</span> <span class='comment'># if we have an autopkg recipe and dir, get the .pkg and upload it to Jamf </span> <span class='kw'>elsif</span> <span class='id identifier rubyid_title_object'>title_object</span><span class='period'>.</span><span class='id identifier rubyid_autopkg_enabled?'>autopkg_enabled?</span> <span class='id identifier rubyid_handle_autopkg_during_create'>handle_autopkg_during_create</span> <span class='comment'># otherwise tell someone we need a .pkg </span> <span class='kw'>else</span> <span class='id identifier rubyid_msg'>msg</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>No --pkg-to-upload given for version '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_version'>version</span><span class='embexpr_end'>}</span><span class='tstring_content'>' of title </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_title'>title</span><span class='embexpr_end'>}</span><span class='tstring_content'>, and no autopkg recipe enabled. Please upload a pkg via xadm or enable autopkg for this title.</span><span class='tstring_end'>"</span></span> <span class='comment'># no alert when subscribed because a better alert mesg is sent from add_version_via_subscription </span> <span class='id identifier rubyid_subscribed?'>subscribed?</span> <span class='op'>?</span> <span class='id identifier rubyid_progress'>progress</span><span class='lparen'>(</span><span class='id identifier rubyid_msg'>msg</span><span class='comma'>,</span> <span class='label'>log:</span> <span class='symbol'>:warn</span><span class='rparen'>)</span> <span class='op'>:</span> <span class='id identifier rubyid_progress'>progress</span><span class='lparen'>(</span><span class='id identifier rubyid_msg'>msg</span><span class='comma'>,</span> <span class='label'>log:</span> <span class='symbol'>:warn</span><span class='comma'>,</span> <span class='label'>alert:</span> <span class='kw'>true</span><span class='rparen'>)</span> <span class='kw'>end</span> <span class='id identifier rubyid_server_app_instance'>server_app_instance</span><span class='period'>.</span><span class='id identifier rubyid_update_client_data'>update_client_data</span> <span class='kw'>ensure</span> <span class='id identifier rubyid_unlock'>unlock</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="creating?-instance_method"> #<strong>creating?</strong> ⇒ <tt>Boolean</tt> </h3><div class="docstring"> <div class="discussion"> <p>Returns Are we creating this version?.</p> </div> </div> <div class="tags"> <p class="tag_title">Returns:</p> <ul class="return"> <li> <span class='type'>(<tt>Boolean</tt>)</span> — <div class='inline'><p>Are we creating this version?</p></div> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 438 439 440</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 438</span> <span class='kw'>def</span> <span class='id identifier rubyid_creating?'>creating?</span> <span class='id identifier rubyid_current_action'>current_action</span> <span class='op'>==</span> <span class='symbol'>:creating</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="data_dir-instance_method"> #<strong>data_dir</strong> ⇒ <tt>Pathname</tt> </h3><div class="docstring"> <div class="discussion"> <p>The data directory for this version</p> </div> </div> <div class="tags"> <p class="tag_title">Returns:</p> <ul class="return"> <li> <span class='type'>(<tt>Pathname</tt>)</span> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 596 597 598</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 596</span> <span class='kw'>def</span> <span class='id identifier rubyid_data_dir'>data_dir</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_data_dir'>data_dir</span> <span class='id identifier rubyid_title'>title</span><span class='comma'>,</span> <span class='id identifier rubyid_version'>version</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="data_file-instance_method"> #<strong>data_file</strong> ⇒ <tt>Pathname</tt> </h3><div class="docstring"> <div class="discussion"> <p>The JSON data file for this version</p> </div> </div> <div class="tags"> <p class="tag_title">Returns:</p> <ul class="return"> <li> <span class='type'>(<tt>Pathname</tt>)</span> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 603 604 605</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 603</span> <span class='kw'>def</span> <span class='id identifier rubyid_data_file'>data_file</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_data_file'>data_file</span> <span class='id identifier rubyid_title'>title</span><span class='comma'>,</span> <span class='id identifier rubyid_version'>version</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="delete-instance_method"> #<strong>delete</strong>(update_title: true, deleting_title: false) ⇒ <tt>void</tt> </h3><div class="docstring"> <div class="discussion"> <p class="note returns_void">This method returns an undefined value.</p><p>Delete the version</p> </div> </div> <div class="tags"> <p class="tag_title">Parameters:</p> <ul class="param"> <li> <span class='name'>update_title</span> <span class='type'>(<tt>Boolean</tt>)</span> <em class="default">(defaults to: <tt>true</tt>)</em> — <div class='inline'><p>Update the title for this version to know the version is gone. Set this to false when the title itself is being deleted and calling this method.</p></div> </li> <li> <span class='name'>deleting_title</span> <span class='type'>(<tt>Boolean</tt>)</span> <em class="default">(defaults to: <tt>false</tt>)</em> — <div class='inline'><p>Is the title itself being deleted?</p></div> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 995</span> <span class='kw'>def</span> <span class='id identifier rubyid_delete'>delete</span><span class='lparen'>(</span><span class='label'>update_title:</span> <span class='kw'>true</span><span class='comma'>,</span> <span class='label'>deleting_title:</span> <span class='kw'>false</span><span class='rparen'>)</span> <span class='id identifier rubyid_lock'>lock</span> <span class='ivar'>@current_action</span> <span class='op'>=</span> <span class='symbol'>:deleting</span> <span class='id identifier rubyid_delete_version_from_jamf'>delete_version_from_jamf</span> <span class='comment'># NOTE: we no longer delete the patch from the Title Editor </span> <span class='comment'># unless the whole title is being deleted, because </span> <span class='comment'># patches may be needed for reporting purposes. </span> <span class='comment'># When the title is deleted, the title's delete method </span> <span class='comment'># will delete all patches for all versions. </span> <span class='comment'># If other situations arise where we need to delete </span> <span class='comment'># ted patches individually, set deleting_title to true. </span> <span class='id identifier rubyid_delete_patch_from_ted'>delete_patch_from_ted</span> <span class='kw'>if</span> <span class='id identifier rubyid_deleting_title'>deleting_title</span> <span class='op'>&&</span> <span class='id identifier rubyid_managed?'>managed?</span> <span class='comment'># remove from the title's list of versions </span> <span class='id identifier rubyid_progress'>progress</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Deleting version from title data on the Xolo server</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='label'>log:</span> <span class='symbol'>:debug</span> <span class='id identifier rubyid_title_object'>title_object</span><span class='period'>.</span><span class='id identifier rubyid_remove_version'>remove_version</span><span class='lparen'>(</span><span class='id identifier rubyid_version'>version</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_update_title'>update_title</span> <span class='comment'># delete the local data </span> <span class='id identifier rubyid_progress'>progress</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Deleting version data from the Xolo server</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='label'>log:</span> <span class='symbol'>:info</span> <span class='id identifier rubyid_data_dir'>data_dir</span><span class='period'>.</span><span class='id identifier rubyid_rmtree'>rmtree</span> <span class='id identifier rubyid_log_change'>log_change</span> <span class='label'>msg:</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Version Deleted</span><span class='tstring_end'>'</span></span> <span class='id identifier rubyid_progress'>progress</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Version '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_version'>version</span><span class='embexpr_end'>}</span><span class='tstring_content'>' of Title '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_title'>title</span><span class='embexpr_end'>}</span><span class='tstring_content'>' has been deleted from Xolo.</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='label'>log:</span> <span class='symbol'>:info</span> <span class='id identifier rubyid_server_app_instance'>server_app_instance</span><span class='period'>.</span><span class='id identifier rubyid_update_client_data'>update_client_data</span> <span class='kw'>ensure</span> <span class='id identifier rubyid_unlock'>unlock</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="deleting?-instance_method"> #<strong>deleting?</strong> ⇒ <tt>Boolean</tt> </h3><div class="docstring"> <div class="discussion"> <p>Returns Are we deleting this version?.</p> </div> </div> <div class="tags"> <p class="tag_title">Returns:</p> <ul class="return"> <li> <span class='type'>(<tt>Boolean</tt>)</span> — <div class='inline'><p>Are we deleting this version?</p></div> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 456 457 458</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 456</span> <span class='kw'>def</span> <span class='id identifier rubyid_deleting?'>deleting?</span> <span class='id identifier rubyid_current_action'>current_action</span> <span class='op'>==</span> <span class='symbol'>:deleting</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="deprecate-instance_method"> #<strong>deprecate</strong> ⇒ <tt>void</tt> </h3><div class="docstring"> <div class="discussion"> <p class="note returns_void">This method returns an undefined value.</p><p>deprecate this version</p> </div> </div> <div class="tags"> </div><table class="source_code"> <tr> <td> <pre class="lines"> 889 890 891 892 893 894 895 896 897 898 899 900 901</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 889</span> <span class='kw'>def</span> <span class='id identifier rubyid_deprecate'>deprecate</span> <span class='id identifier rubyid_lock'>lock</span> <span class='id identifier rubyid_progress'>progress</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Deprecating older released version '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_version'>version</span><span class='embexpr_end'>}</span><span class='tstring_content'>'</span><span class='tstring_end'>"</span></span> <span class='id identifier rubyid_disable_policies_for_deprecation_or_skipping'>disable_policies_for_deprecation_or_skipping</span> <span class='symbol'>:deprecated</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_status'>status</span> <span class='op'>=</span> <span class='const'>STATUS_DEPRECATED</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_deprecation_date'>deprecation_date</span> <span class='op'>=</span> <span class='const'>Time</span><span class='period'>.</span><span class='id identifier rubyid_now'>now</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_deprecated_by'>deprecated_by</span> <span class='op'>=</span> <span class='id identifier rubyid_admin'>admin</span> <span class='id identifier rubyid_log_change'>log_change</span> <span class='label'>msg:</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Version Deprecated</span><span class='tstring_end'>'</span></span> <span class='id identifier rubyid_save_local_data'>save_local_data</span> <span class='kw'>ensure</span> <span class='id identifier rubyid_unlock'>unlock</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="excluded_groups_to_use-instance_method"> #<strong>excluded_groups_to_use</strong>(ttl_obj: nil) ⇒ <tt>Array<String></tt> </h3><div class="docstring"> <div class="discussion"> <p>The scope excluded groups to use in policies and patch policies for all versions of this title.</p> <p>Excluded groups are defined in the title, applying to all versions, and may be augmented by:</p> <ul> <li>Xolo::Server.config.forced_exclusion, a group excluded from ALL of xolo, defined in the server config.</li> <li>The title's jamf_frozen_group_name, if it exists, containing computers that have been 'frozen' to a single version.</li> </ul> <p>For initial install policies, the smart group of macs with any version installed (jamf_installed_group_name) "xolo-<title>-installed" is also excluded, because otherwise the initial-install policies would stomp on the patch policies.</p> </div> </div> <div class="tags"> <p class="tag_title">Parameters:</p> <ul class="param"> <li> <span class='name'>ttl_obj</span> <span class='type'>(<tt><span class='object_link'><a href="Title.html" title="Xolo::Server::Title (class)">Xolo::Server::Title</a></span></tt>)</span> <em class="default">(defaults to: <tt>nil</tt>)</em> — <div class='inline'><p>The pre-instantiated title for ths version. if nil, we'll instantiate it now</p></div> </li> </ul> <p class="tag_title">Returns:</p> <ul class="return"> <li> <span class='type'>(<tt>Array<String></tt>)</span> — <div class='inline'><p>the excluded groups to use</p></div> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 505</span> <span class='kw'>def</span> <span class='id identifier rubyid_excluded_groups_to_use'>excluded_groups_to_use</span><span class='lparen'>(</span><span class='label'>ttl_obj:</span> <span class='kw'>nil</span><span class='rparen'>)</span> <span class='kw'>return</span> <span class='ivar'>@excluded_groups_to_use</span> <span class='kw'>if</span> <span class='ivar'>@excluded_groups_to_use</span> <span class='id identifier rubyid_ttl_obj'>ttl_obj</span> <span class='op'>||=</span> <span class='id identifier rubyid_title_object'>title_object</span> <span class='comment'># get the excluded groups from the title </span> <span class='comment'># Use .dup so we don't modify the original </span> <span class='ivar'>@excluded_groups_to_use</span> <span class='op'>=</span> <span class='id identifier rubyid_ttl_obj'>ttl_obj</span><span class='period'>.</span><span class='id identifier rubyid_changes_for_update'>changes_for_update</span><span class='op'>&.</span><span class='id identifier rubyid_key?'>key?</span><span class='lparen'>(</span><span class='symbol'>:excluded_groups</span><span class='rparen'>)</span> <span class='op'>?</span> <span class='id identifier rubyid_ttl_obj'>ttl_obj</span><span class='period'>.</span><span class='id identifier rubyid_changes_for_update'>changes_for_update</span><span class='lbracket'>[</span><span class='symbol'>:excluded_groups</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='symbol'>:new</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_dup'>dup</span> <span class='op'>:</span> <span class='id identifier rubyid_ttl_obj'>ttl_obj</span><span class='period'>.</span><span class='id identifier rubyid_excluded_groups'>excluded_groups</span><span class='period'>.</span><span class='id identifier rubyid_dup'>dup</span> <span class='comment'># always exclude the frozen static group </span> <span class='comment'># calling ttl_obj.jamf_frozen_group will create the group if needed </span> <span class='ivar'>@excluded_groups_to_use</span> <span class='op'><<</span> <span class='id identifier rubyid_ttl_obj'>ttl_obj</span><span class='period'>.</span><span class='id identifier rubyid_jamf_frozen_group'>jamf_frozen_group</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span> <span class='id identifier rubyid_log_debug'>log_debug</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Appended '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_ttl_obj'>ttl_obj</span><span class='period'>.</span><span class='id identifier rubyid_jamf_frozen_group_name'>jamf_frozen_group_name</span><span class='embexpr_end'>}</span><span class='tstring_content'>' to @excluded_groups_to_use</span><span class='tstring_end'>"</span></span> <span class='comment'># always exclude Xolo::Server.config.forced_exclusion if defined </span> <span class='ivar'>@excluded_groups_to_use</span> <span class='op'><<</span> <span class='id identifier rubyid_valid_forced_exclusion_group_name'>valid_forced_exclusion_group_name</span> <span class='kw'>if</span> <span class='id identifier rubyid_valid_forced_exclusion_group_name'>valid_forced_exclusion_group_name</span> <span class='ivar'>@excluded_groups_to_use</span><span class='period'>.</span><span class='id identifier rubyid_uniq!'>uniq!</span> <span class='id identifier rubyid_log_debug'>log_debug</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Excluded groups to use: </span><span class='embexpr_beg'>#{</span><span class='ivar'>@excluded_groups_to_use</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>, </span><span class='tstring_end'>'</span></span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span> <span class='ivar'>@excluded_groups_to_use</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="handle_autopkg_during_create-instance_method"> #<strong>handle_autopkg_during_create</strong> ⇒ <tt>Object</tt> </h3><div class="docstring"> <div class="discussion"> <p>Do autopkg stuff during creation</p> </div> </div> <div class="tags"> </div><table class="source_code"> <tr> <td> <pre class="lines"> 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 705</span> <span class='kw'>def</span> <span class='id identifier rubyid_handle_autopkg_during_create'>handle_autopkg_during_create</span> <span class='kw'>return</span> <span class='kw'>unless</span> <span class='id identifier rubyid_title_object'>title_object</span><span class='period'>.</span><span class='id identifier rubyid_autopkg_enabled?'>autopkg_enabled?</span> <span class='id identifier rubyid_pkg_src'>pkg_src</span> <span class='op'>=</span> <span class='id identifier rubyid_title_object'>title_object</span><span class='period'>.</span><span class='id identifier rubyid_run_autopkg_recipe'>run_autopkg_recipe</span> <span class='kw'>if</span> <span class='id identifier rubyid_pkg_src'>pkg_src</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='id identifier rubyid_msg'>msg</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>AutoPkg recipe is enabled for this title, but no pkg was found after running the recipe. Please check the AutoPkg recipe and the server log for details.</span><span class='tstring_end'>'</span></span> <span class='id identifier rubyid_progress'>progress</span> <span class='id identifier rubyid_msg'>msg</span><span class='comma'>,</span> <span class='label'>log:</span> <span class='symbol'>:warn</span><span class='comma'>,</span> <span class='label'>alert:</span> <span class='kw'>true</span> <span class='kw'>return</span> <span class='kw'>end</span> <span class='id identifier rubyid_oldest_allowed'>oldest_allowed</span> <span class='op'>=</span> <span class='const'>Time</span><span class='period'>.</span><span class='id identifier rubyid_now'>now</span> <span class='op'>-</span> <span class='int'>1200</span> <span class='comment'># 20 minutes ago </span> <span class='kw'>if</span> <span class='id identifier rubyid_pkg_src'>pkg_src</span><span class='period'>.</span><span class='id identifier rubyid_mtime'>mtime</span> <span class='op'><</span> <span class='id identifier rubyid_oldest_allowed'>oldest_allowed</span> <span class='id identifier rubyid_msg'>msg</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>AutoPkg recipe is enabled for this title, and a pkg was found after running the recipe, but it was last modified at </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_pkg_src'>pkg_src</span><span class='period'>.</span><span class='id identifier rubyid_mtime'>mtime</span><span class='embexpr_end'>}</span><span class='tstring_content'>, which is more than 20 minutes ago. To avoid accidentally uploading an old pkg, the server will not upload this pkg. Please check the AutoPkg recipe and the server log for details.</span><span class='tstring_end'>"</span></span> <span class='id identifier rubyid_progress'>progress</span> <span class='id identifier rubyid_msg'>msg</span><span class='comma'>,</span> <span class='label'>log:</span> <span class='symbol'>:warn</span><span class='comma'>,</span> <span class='label'>alert:</span> <span class='kw'>true</span> <span class='kw'>return</span> <span class='kw'>end</span> <span class='comment'># this lets future code know that the pkg we're working with came from autopkg </span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_pkg_is_from_autopkg'>pkg_is_from_autopkg</span> <span class='op'>=</span> <span class='kw'>true</span> <span class='comment'># Upload the pkg to Jamf, and associate it with this version </span> <span class='id identifier rubyid_server_app_instance'>server_app_instance</span><span class='period'>.</span><span class='id identifier rubyid_process_and_upload_autopkg_pkg'>process_and_upload_autopkg_pkg</span><span class='lparen'>(</span><span class='id identifier rubyid_title'>title</span><span class='comma'>,</span> <span class='kw'>self</span><span class='comma'>,</span> <span class='id identifier rubyid_pkg_src'>pkg_src</span><span class='rparen'>)</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="jamf_cnx-instance_method"> #<strong>jamf_cnx</strong>(refresh: false) ⇒ <tt>Jamf::Connection</tt> </h3><div class="docstring"> <div class="discussion"> <p>Returns a single Jamf Pro API connection to use for the life of this instance.</p> </div> </div> <div class="tags"> <p class="tag_title">Returns:</p> <ul class="return"> <li> <span class='type'>(<tt>Jamf::Connection</tt>)</span> — <div class='inline'><p>a single Jamf Pro API connection to use for the life of this instance</p></div> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 589 590 591</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 589</span> <span class='kw'>def</span> <span class='id identifier rubyid_jamf_cnx'>jamf_cnx</span><span class='lparen'>(</span><span class='label'>refresh:</span> <span class='kw'>false</span><span class='rparen'>)</span> <span class='id identifier rubyid_server_app_instance'>server_app_instance</span><span class='period'>.</span><span class='id identifier rubyid_jamf_cnx'>jamf_cnx</span> <span class='label'>refresh:</span> <span class='id identifier rubyid_refresh'>refresh</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="lock-instance_method"> #<strong>lock</strong> ⇒ <tt>Object</tt> </h3><div class="docstring"> <div class="discussion"> <p>Lock this version for updates</p> </div> </div> <div class="tags"> <p class="tag_title">Raises:</p> <ul class="raise"> <li> <span class='type'>(<tt>Xolo::ServerError</tt>)</span> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 1033</span> <span class='kw'>def</span> <span class='id identifier rubyid_lock'>lock</span> <span class='id identifier rubyid_raise'>raise</span> <span class='const'><span class='object_link'><a href="../../Xolo.html" title="Xolo (module)">Xolo</a></span></span><span class='op'>::</span><span class='const'>ServerError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Server is shutting down</span><span class='tstring_end'>'</span></span> <span class='kw'>if</span> <span class='const'><span class='object_link'><a href="../../Xolo.html" title="Xolo (module)">Xolo</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Server.html" title="Xolo::Server (module)">Server</a></span></span><span class='period'>.</span><span class='id identifier rubyid_shutting_down?'><span class='object_link'><a href="../Server.html#shutting_down%3F-class_method" title="Xolo::Server.shutting_down? (method)">shutting_down?</a></span></span> <span class='kw'>while</span> <span class='id identifier rubyid_locked?'>locked?</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='const'>Time</span><span class='period'>.</span><span class='id identifier rubyid_now'>now</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span> <span class='op'>%</span> <span class='int'>5</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_zero?'>zero?</span> <span class='id identifier rubyid_log_debug'>log_debug</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Method </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_caller_locations'>caller_locations</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='period'>.</span><span class='id identifier rubyid_label'>label</span><span class='embexpr_end'>}</span><span class='tstring_content'> is waiting for update lock on Version '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_version'>version</span><span class='embexpr_end'>}</span><span class='tstring_content'>' of title '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_title'>title</span><span class='embexpr_end'>}</span><span class='tstring_content'>'...</span><span class='tstring_end'>"</span></span> <span class='kw'>end</span> <span class='id identifier rubyid_sleep'>sleep</span> <span class='float'>0.33</span> <span class='kw'>end</span> <span class='const'><span class='object_link'><a href="../../Xolo.html" title="Xolo (module)">Xolo</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Server.html" title="Xolo::Server (module)">Server</a></span></span><span class='period'>.</span><span class='id identifier rubyid_object_locks'><span class='object_link'><a href="ObjectLocks.html#object_locks-instance_method" title="Xolo::Server::ObjectLocks#object_locks (method)">object_locks</a></span></span><span class='lbracket'>[</span><span class='id identifier rubyid_title'>title</span><span class='rbracket'>]</span> <span class='op'>||=</span> <span class='lbrace'>{</span> <span class='label'>versions:</span> <span class='lbrace'>{</span><span class='rbrace'>}</span> <span class='rbrace'>}</span> <span class='id identifier rubyid_exp'>exp</span> <span class='op'>=</span> <span class='const'>Time</span><span class='period'>.</span><span class='id identifier rubyid_now'>now</span> <span class='op'>+</span> <span class='const'><span class='object_link'><a href="../../Xolo.html" title="Xolo (module)">Xolo</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Server.html" title="Xolo::Server (module)">Server</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="ObjectLocks.html" title="Xolo::Server::ObjectLocks (module)">ObjectLocks</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="ObjectLocks.html#OBJECT_LOCK_LIMIT-constant" title="Xolo::Server::ObjectLocks::OBJECT_LOCK_LIMIT (constant)">OBJECT_LOCK_LIMIT</a></span></span> <span class='const'><span class='object_link'><a href="../../Xolo.html" title="Xolo (module)">Xolo</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Server.html" title="Xolo::Server (module)">Server</a></span></span><span class='period'>.</span><span class='id identifier rubyid_object_locks'><span class='object_link'><a href="ObjectLocks.html#object_locks-instance_method" title="Xolo::Server::ObjectLocks#object_locks (method)">object_locks</a></span></span><span class='lbracket'>[</span><span class='id identifier rubyid_title'>title</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='symbol'>:versions</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='id identifier rubyid_version'>version</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_exp'>exp</span> <span class='id identifier rubyid_log_debug'>log_debug</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Locked version '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_version'>version</span><span class='embexpr_end'>}</span><span class='tstring_content'>' of title '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_title'>title</span><span class='embexpr_end'>}</span><span class='tstring_content'>' for updates until </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_exp'>exp</span><span class='embexpr_end'>}</span><span class='tstring_content'>, by method </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_caller_locations'>caller_locations</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='period'>.</span><span class='id identifier rubyid_label'>label</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="locked?-instance_method"> #<strong>locked?</strong> ⇒ <tt>Boolean</tt> </h3><div class="docstring"> <div class="discussion"> <p>Is this version locked for updates?</p> </div> </div> <div class="tags"> <p class="tag_title">Returns:</p> <ul class="return"> <li> <span class='type'>(<tt>Boolean</tt>)</span> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 1027 1028 1029</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 1027</span> <span class='kw'>def</span> <span class='id identifier rubyid_locked?'>locked?</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_locked?'>locked?</span><span class='lparen'>(</span><span class='id identifier rubyid_title'>title</span><span class='comma'>,</span> <span class='id identifier rubyid_version'>version</span><span class='rparen'>)</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="managed?-instance_method"> #<strong>managed?</strong> ⇒ <tt>Boolean</tt> </h3><div class="docstring"> <div class="discussion"> <p>or a managed title?</p> </div> </div> <div class="tags"> <p class="tag_title">Returns:</p> <ul class="return"> <li> <span class='type'>(<tt>Boolean</tt>)</span> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 736 737 738</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 736</span> <span class='kw'>def</span> <span class='id identifier rubyid_managed?'>managed?</span> <span class='op'>!</span><span class='id identifier rubyid_subscribed?'>subscribed?</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="manifest_file-instance_method"> #<strong>manifest_file</strong> ⇒ <tt>Pathname</tt> </h3><div class="docstring"> <div class="discussion"> <p>The manifest plist file for this version</p> </div> </div> <div class="tags"> <p class="tag_title">Returns:</p> <ul class="return"> <li> <span class='type'>(<tt>Pathname</tt>)</span> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 610 611 612</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 610</span> <span class='kw'>def</span> <span class='id identifier rubyid_manifest_file'>manifest_file</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_manifest_file'>manifest_file</span> <span class='id identifier rubyid_title'>title</span><span class='comma'>,</span> <span class='id identifier rubyid_version'>version</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="order_index-instance_method"> #<strong>order_index</strong> ⇒ <tt>Integer</tt> </h3><div class="docstring"> <div class="discussion"> <p>Returns The index of this version in the title's reversed version_order array. We reverse it because the version_order array holds the newest versions first, so the index of the newest version is 0, the next newest is 1, etc - we need the opposite of that.</p> </div> </div> <div class="tags"> <p class="tag_title">Returns:</p> <ul class="return"> <li> <span class='type'>(<tt>Integer</tt>)</span> — <div class='inline'><p>The index of this version in the title's reversed version_order array. We reverse it because the version_order array holds the newest versions first, so the index of the newest version is 0, the next newest is 1, etc - we need the opposite of that.</p></div> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 432 433 434</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 432</span> <span class='kw'>def</span> <span class='id identifier rubyid_order_index'>order_index</span> <span class='id identifier rubyid_title_object'>title_object</span><span class='period'>.</span><span class='id identifier rubyid_version_order'>version_order</span><span class='period'>.</span><span class='id identifier rubyid_reverse'>reverse</span><span class='period'>.</span><span class='id identifier rubyid_index'>index</span> <span class='id identifier rubyid_version'>version</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="pilot_groups_to_use-instance_method"> #<strong>pilot_groups_to_use</strong> ⇒ <tt>Array<String></tt> </h3><div class="docstring"> <div class="discussion"> <p>The scope target groups to use in policies and patch policies during pilot This is defined in each version, and inherited when new versions are created.</p> </div> </div> <div class="tags"> <p class="tag_title">Returns:</p> <ul class="return"> <li> <span class='type'>(<tt>Array<String></tt>)</span> — <div class='inline'><p>the pilot groups to use</p></div> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 471</span> <span class='kw'>def</span> <span class='id identifier rubyid_pilot_groups_to_use'>pilot_groups_to_use</span> <span class='kw'>return</span> <span class='ivar'>@pilot_groups_to_use</span> <span class='kw'>if</span> <span class='ivar'>@pilot_groups_to_use</span> <span class='comment'># any defined in the version override any in the title </span> <span class='ivar'>@pilot_groups_to_use</span> <span class='op'>=</span> <span class='id identifier rubyid_changes_for_update'>changes_for_update</span><span class='op'>&.</span><span class='id identifier rubyid_key?'>key?</span><span class='lparen'>(</span><span class='symbol'>:pilot_groups</span><span class='rparen'>)</span> <span class='op'>?</span> <span class='id identifier rubyid_changes_for_update'>changes_for_update</span><span class='lbracket'>[</span><span class='symbol'>:pilot_groups</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='symbol'>:new</span><span class='rbracket'>]</span> <span class='op'>:</span> <span class='id identifier rubyid_pilot_groups'>pilot_groups</span> <span class='kw'>return</span> <span class='ivar'>@pilot_groups_to_use</span> <span class='kw'>unless</span> <span class='ivar'>@pilot_groups_to_use</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span> <span class='comment'># if none defined in the version, look in the title </span> <span class='ivar'>@pilot_groups_to_use</span> <span class='op'>=</span> <span class='kw'>if</span> <span class='id identifier rubyid_title_object'>title_object</span><span class='period'>.</span><span class='id identifier rubyid_changes_for_update'>changes_for_update</span><span class='op'>&.</span><span class='id identifier rubyid_key?'>key?</span><span class='lparen'>(</span><span class='symbol'>:pilot_groups</span><span class='rparen'>)</span> <span class='id identifier rubyid_title_object'>title_object</span><span class='period'>.</span><span class='id identifier rubyid_changes_for_update'>changes_for_update</span><span class='lbracket'>[</span><span class='symbol'>:pilot_groups</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='symbol'>:new</span><span class='rbracket'>]</span> <span class='kw'>else</span> <span class='id identifier rubyid_title_object'>title_object</span><span class='period'>.</span><span class='id identifier rubyid_pilot_groups'>pilot_groups</span> <span class='kw'>end</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="progress-instance_method"> #<strong>progress</strong>(msg, log: :debug, alert: false) ⇒ <tt>void</tt> </h3><div class="docstring"> <div class="discussion"> <p class="note returns_void">This method returns an undefined value.</p><p>Append a message to the progress stream file, optionally sending it also to the log</p> </div> </div> <div class="tags"> <p class="tag_title">Parameters:</p> <ul class="param"> <li> <span class='name'>message</span> <span class='type'>(<tt>String</tt>)</span> — <div class='inline'><p>the message to append</p></div> </li> <li> <span class='name'>log</span> <span class='type'>(<tt>Symbol</tt>)</span> <em class="default">(defaults to: <tt>:debug</tt>)</em> — <div class='inline'><p>the level at which to log the message one of :debug, :info, :warn, :error, :fatal, or :unknown. Default is nil, which doesn't log the message at all.</p></div> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 567 568 569</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 567</span> <span class='kw'>def</span> <span class='id identifier rubyid_progress'>progress</span><span class='lparen'>(</span><span class='id identifier rubyid_msg'>msg</span><span class='comma'>,</span> <span class='label'>log:</span> <span class='symbol'>:debug</span><span class='comma'>,</span> <span class='label'>alert:</span> <span class='kw'>false</span><span class='rparen'>)</span> <span class='id identifier rubyid_server_app_instance'>server_app_instance</span><span class='period'>.</span><span class='id identifier rubyid_progress'>progress</span> <span class='id identifier rubyid_msg'>msg</span><span class='comma'>,</span> <span class='label'>log:</span> <span class='id identifier rubyid_log'>log</span><span class='comma'>,</span> <span class='label'>alert:</span> <span class='id identifier rubyid_alert'>alert</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="release-instance_method"> #<strong>release</strong>(rollback:) ⇒ <tt>void</tt> </h3><div class="docstring"> <div class="discussion"> <p class="note returns_void">This method returns an undefined value.</p><p>Release this version, possibly rolling back from a previously newer version This should only be called by the title. The initial 'release' action starts in the title, and then calls this method on the version to do the version-specific release steps.</p> </div> </div> <div class="tags"> <p class="tag_title">Parameters:</p> <ul class="param"> <li> <span class='name'>rollback</span> <span class='type'>(<tt>Boolean</tt>)</span> — <div class='inline'><p>If true, this version is being released as a rollback</p></div> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 846</span> <span class='kw'>def</span> <span class='id identifier rubyid_release'>release</span><span class='lparen'>(</span><span class='label'>rollback:</span><span class='rparen'>)</span> <span class='id identifier rubyid_lock'>lock</span> <span class='ivar'>@current_action</span> <span class='op'>=</span> <span class='symbol'>:releasing</span> <span class='comment'># set scope targets of auto-install policy to release-groups </span> <span class='id identifier rubyid_msg'>msg</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Jamf: Version '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_version'>version</span><span class='embexpr_end'>}</span><span class='tstring_content'>': Setting scope targets of auto-install policy to release_groups: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_release_groups_to_use'>release_groups_to_use</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>, </span><span class='tstring_end'>'</span></span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span> <span class='id identifier rubyid_progress'>progress</span> <span class='id identifier rubyid_msg'>msg</span><span class='comma'>,</span> <span class='label'>log:</span> <span class='symbol'>:info</span> <span class='id identifier rubyid_pol'>pol</span> <span class='op'>=</span> <span class='id identifier rubyid_jamf_auto_install_policy'>jamf_auto_install_policy</span> <span class='id identifier rubyid_set_policy_release_groups'>set_policy_release_groups</span> <span class='id identifier rubyid_pol'>pol</span> <span class='id identifier rubyid_pol'>pol</span><span class='period'>.</span><span class='id identifier rubyid_enable'>enable</span> <span class='id identifier rubyid_pol'>pol</span><span class='period'>.</span><span class='id identifier rubyid_save'>save</span> <span class='comment'># set scope targets of patch policy to all (in patch pols, 'all' means 'all eligible') </span> <span class='id identifier rubyid_msg'>msg</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Jamf: Version '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_version'>version</span><span class='embexpr_end'>}</span><span class='tstring_content'>': Setting scope targets of patch policy to all eligible computers</span><span class='tstring_end'>"</span></span> <span class='id identifier rubyid_progress'>progress</span> <span class='id identifier rubyid_msg'>msg</span><span class='comma'>,</span> <span class='label'>log:</span> <span class='symbol'>:info</span> <span class='id identifier rubyid_ppol'>ppol</span> <span class='op'>=</span> <span class='id identifier rubyid_jamf_patch_policy'>jamf_patch_policy</span> <span class='id identifier rubyid_ppol'>ppol</span><span class='period'>.</span><span class='id identifier rubyid_scope'>scope</span><span class='period'>.</span><span class='id identifier rubyid_set_all_targets'>set_all_targets</span> <span class='comment'># if rollback, make sure the patch policy is set to 'allow downgrade' </span> <span class='kw'>if</span> <span class='id identifier rubyid_rollback'>rollback</span> <span class='id identifier rubyid_msg'>msg</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Jamf: Version '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_version'>version</span><span class='embexpr_end'>}</span><span class='tstring_content'>': Setting patch policy to allow downgrade</span><span class='tstring_end'>"</span></span> <span class='id identifier rubyid_progress'>progress</span> <span class='id identifier rubyid_msg'>msg</span><span class='comma'>,</span> <span class='label'>log:</span> <span class='symbol'>:info</span> <span class='id identifier rubyid_ppol'>ppol</span><span class='period'>.</span><span class='id identifier rubyid_allow_downgrade'>allow_downgrade</span> <span class='op'>=</span> <span class='kw'>true</span> <span class='kw'>else</span> <span class='id identifier rubyid_ppol'>ppol</span><span class='period'>.</span><span class='id identifier rubyid_allow_downgrade'>allow_downgrade</span> <span class='op'>=</span> <span class='kw'>false</span> <span class='kw'>end</span> <span class='id identifier rubyid_ppol'>ppol</span><span class='period'>.</span><span class='id identifier rubyid_save'>save</span> <span class='comment'># change status to 'released' </span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_status'>status</span> <span class='op'>=</span> <span class='const'>STATUS_RELEASED</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_release_date'>release_date</span> <span class='op'>=</span> <span class='const'>Time</span><span class='period'>.</span><span class='id identifier rubyid_now'>now</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_released_by'>released_by</span> <span class='op'>=</span> <span class='id identifier rubyid_admin'>admin</span> <span class='id identifier rubyid_chg_msg'>chg_msg</span> <span class='op'>=</span> <span class='id identifier rubyid_rollback'>rollback</span> <span class='op'>?</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Version Released - Rolled Back</span><span class='tstring_end'>'</span></span> <span class='op'>:</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Version Released</span><span class='tstring_end'>'</span></span> <span class='id identifier rubyid_log_change'>log_change</span> <span class='label'>msg:</span> <span class='id identifier rubyid_chg_msg'>chg_msg</span> <span class='id identifier rubyid_save_local_data'>save_local_data</span> <span class='kw'>ensure</span> <span class='id identifier rubyid_unlock'>unlock</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="release_groups_to_use-instance_method"> #<strong>release_groups_to_use</strong>(ttl_obj: nil) ⇒ <tt>Array<String></tt> </h3><div class="docstring"> <div class="discussion"> <p>The scope target groups to use in policies and patch policies when the version is released This is defined in the title and applies to all versions.</p> </div> </div> <div class="tags"> <p class="tag_title">Parameters:</p> <ul class="param"> <li> <span class='name'>ttl_obj</span> <span class='type'>(<tt><span class='object_link'><a href="Title.html" title="Xolo::Server::Title (class)">Xolo::Server::Title</a></span></tt>)</span> <em class="default">(defaults to: <tt>nil</tt>)</em> — <div class='inline'><p>The pre-instantiated title for ths version. if nil, we'll instantiate it now</p></div> </li> </ul> <p class="tag_title">Returns:</p> <ul class="return"> <li> <span class='type'>(<tt>Array<String></tt>)</span> — <div class='inline'><p>the target groups to use</p></div> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 535 536 537 538 539 540</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 535</span> <span class='kw'>def</span> <span class='id identifier rubyid_release_groups_to_use'>release_groups_to_use</span><span class='lparen'>(</span><span class='label'>ttl_obj:</span> <span class='kw'>nil</span><span class='rparen'>)</span> <span class='kw'>return</span> <span class='ivar'>@release_groups_to_use</span> <span class='kw'>if</span> <span class='ivar'>@release_groups_to_use</span> <span class='id identifier rubyid_ttl_obj'>ttl_obj</span> <span class='op'>||=</span> <span class='id identifier rubyid_title_object'>title_object</span> <span class='ivar'>@release_groups_to_use</span> <span class='op'>=</span> <span class='id identifier rubyid_ttl_obj'>ttl_obj</span><span class='period'>.</span><span class='id identifier rubyid_changes_for_update'>changes_for_update</span><span class='op'>&.</span><span class='id identifier rubyid_key?'>key?</span><span class='lparen'>(</span><span class='symbol'>:release_groups</span><span class='rparen'>)</span> <span class='op'>?</span> <span class='id identifier rubyid_ttl_obj'>ttl_obj</span><span class='period'>.</span><span class='id identifier rubyid_changes_for_update'>changes_for_update</span><span class='lbracket'>[</span><span class='symbol'>:release_groups</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='symbol'>:new</span><span class='rbracket'>]</span> <span class='op'>:</span> <span class='id identifier rubyid_ttl_obj'>ttl_obj</span><span class='period'>.</span><span class='id identifier rubyid_release_groups'>release_groups</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="releasing?-instance_method"> #<strong>releasing?</strong> ⇒ <tt>Boolean</tt> </h3><div class="docstring"> <div class="discussion"> <p>Returns Are we releasing this version?.</p> </div> </div> <div class="tags"> <p class="tag_title">Returns:</p> <ul class="return"> <li> <span class='type'>(<tt>Boolean</tt>)</span> — <div class='inline'><p>Are we releasing this version?</p></div> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 462 463 464</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 462</span> <span class='kw'>def</span> <span class='id identifier rubyid_releasing?'>releasing?</span> <span class='id identifier rubyid_current_action'>current_action</span> <span class='op'>==</span> <span class='symbol'>:releasing</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="repair-instance_method"> #<strong>repair</strong> ⇒ <tt>Object</tt> </h3><div class="docstring"> <div class="discussion"> <p>Repair this version. Look at the Title Editor patch object, and ensure it's correct based on the local data file.</p> <ul> <li>version order</li> <li>min os</li> <li>max os</li> <li>standalone</li> <li>reboot</li> <li>release date</li> <li>killapps</li> <li>component criteria <ul> <li>component name '<title>'</li> </ul> </li> <li>capability criteria</li> <li>enabled</li> </ul> <p>Then look at the various Jamf objects pertaining to this version, and ensure they are correct</p> <ul> <li>package object 'xolo-<title>-<version>' <ul> <li>filename 'xolo-<title>-<version>.pkg'</li> <li>description</li> <li>os limitations</li> </ul> </li> <li>auto install policy 'xolo-<title>-<version>-auto-install'</li> <li>manual install policy 'xolo-<title>-<version>-manual-install'</li> <li>patch policy 'xolo-<title>-<version>'</li> </ul> <p>Then look at the xolo metadata, and fix whatever is needed</p> </div> </div> <div class="tags"> </div><table class="source_code"> <tr> <td> <pre class="lines"> 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 806</span> <span class='kw'>def</span> <span class='id identifier rubyid_repair'>repair</span> <span class='id identifier rubyid_lock'>lock</span> <span class='ivar'>@current_action</span> <span class='op'>=</span> <span class='symbol'>:repairing</span> <span class='id identifier rubyid_log_change'>log_change</span> <span class='label'>msg:</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Repairing version '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_version'>version</span><span class='embexpr_end'>}</span><span class='tstring_content'>'</span><span class='tstring_end'>"</span></span> <span class='id identifier rubyid_progress'>progress</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Starting repair of version '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_version'>version</span><span class='embexpr_end'>}</span><span class='tstring_content'>' of title '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_title'>title</span><span class='embexpr_end'>}</span><span class='tstring_content'>'</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='label'>log:</span> <span class='symbol'>:debug</span> <span class='id identifier rubyid_repair_ted_patch'>repair_ted_patch</span> <span class='id identifier rubyid_repair_jamf_version_objects'>repair_jamf_version_objects</span> <span class='comment'># If there's a reupload, but no original, make the orig the same as the re </span> <span class='kw'>unless</span> <span class='id identifier rubyid_upload_date'>upload_date</span> <span class='kw'>if</span> <span class='id identifier rubyid_reupload_date'>reupload_date</span> <span class='op'>&&</span> <span class='id identifier rubyid_reuploaded_by'>reuploaded_by</span> <span class='id identifier rubyid_new_date'>new_date</span> <span class='op'>=</span> <span class='id identifier rubyid_reupload_date'>reupload_date</span> <span class='id identifier rubyid_new_by'>new_by</span> <span class='op'>=</span> <span class='id identifier rubyid_reuploaded_by'>reuploaded_by</span> <span class='kw'>else</span> <span class='id identifier rubyid_new_date'>new_date</span> <span class='op'>=</span> <span class='const'>Time</span><span class='period'>.</span><span class='id identifier rubyid_parse'>parse</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>2025-02-15</span><span class='tstring_end'>'</span></span> <span class='id identifier rubyid_new_by'>new_by</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>buzzlightyear</span><span class='tstring_end'>'</span></span> <span class='kw'>end</span> <span class='id identifier rubyid_progress'>progress</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Fixing original upload date: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_new_date'>new_date</span><span class='embexpr_end'>}</span><span class='tstring_content'>, by: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_new_by'>new_by</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='label'>log:</span> <span class='symbol'>:debug</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_upload_date'>upload_date</span> <span class='op'>=</span> <span class='id identifier rubyid_new_date'>new_date</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_uploaded_by'>uploaded_by</span> <span class='op'>=</span> <span class='id identifier rubyid_new_by'>new_by</span> <span class='kw'>end</span> <span class='id identifier rubyid_save_local_data'>save_local_data</span> <span class='comment'># no need to update client data now if we're being repaired along with our title </span> <span class='kw'>return</span> <span class='kw'>if</span> <span class='id identifier rubyid_title_object'>title_object</span><span class='period'>.</span><span class='id identifier rubyid_current_action'>current_action</span> <span class='op'>==</span> <span class='symbol'>:repairing</span> <span class='id identifier rubyid_server_app_instance'>server_app_instance</span><span class='period'>.</span><span class='id identifier rubyid_update_client_data'>update_client_data</span> <span class='kw'>ensure</span> <span class='id identifier rubyid_unlock'>unlock</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="repairing?-instance_method"> #<strong>repairing?</strong> ⇒ <tt>Boolean</tt> </h3><div class="docstring"> <div class="discussion"> <p>Returns Are we repairing this version?.</p> </div> </div> <div class="tags"> <p class="tag_title">Returns:</p> <ul class="return"> <li> <span class='type'>(<tt>Boolean</tt>)</span> — <div class='inline'><p>Are we repairing this version?</p></div> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 450 451 452</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 450</span> <span class='kw'>def</span> <span class='id identifier rubyid_repairing?'>repairing?</span> <span class='id identifier rubyid_current_action'>current_action</span> <span class='op'>==</span> <span class='symbol'>:repairing</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="reset_to_pilot-instance_method"> #<strong>reset_to_pilot</strong> ⇒ <tt>void</tt> </h3><div class="docstring"> <div class="discussion"> <p class="note returns_void">This method returns an undefined value.</p><p>Reset this version to 'pilot' status, since we are rolling back to a previous version</p> </div> </div> <div class="tags"> </div><table class="source_code"> <tr> <td> <pre class="lines"> 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 925</span> <span class='kw'>def</span> <span class='id identifier rubyid_reset_to_pilot'>reset_to_pilot</span> <span class='kw'>return</span> <span class='kw'>if</span> <span class='id identifier rubyid_status'>status</span> <span class='op'>==</span> <span class='const'>STATUS_PILOT</span> <span class='id identifier rubyid_lock'>lock</span> <span class='id identifier rubyid_progress'>progress</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Resetting version '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_version'>version</span><span class='embexpr_end'>}</span><span class='tstring_content'>' to pilot status due to rollback of an older version</span><span class='tstring_end'>"</span></span> <span class='id identifier rubyid_reset_policies_to_pilot'>reset_policies_to_pilot</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_status'>status</span> <span class='op'>=</span> <span class='const'>STATUS_PILOT</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_skipped_date'>skipped_date</span> <span class='op'>=</span> <span class='kw'>nil</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_skipped_by'>skipped_by</span> <span class='op'>=</span> <span class='kw'>nil</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_deprecation_date'>deprecation_date</span> <span class='op'>=</span> <span class='kw'>nil</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_deprecated_by'>deprecated_by</span> <span class='op'>=</span> <span class='kw'>nil</span> <span class='id identifier rubyid_log_change'>log_change</span> <span class='label'>msg:</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Version Reset to Pilot</span><span class='tstring_end'>'</span></span> <span class='id identifier rubyid_save_local_data'>save_local_data</span> <span class='kw'>ensure</span> <span class='id identifier rubyid_unlock'>unlock</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="save_local_data-instance_method"> #<strong>save_local_data</strong> ⇒ <tt>void</tt> </h3><div class="docstring"> <div class="discussion"> <p class="note returns_void">This method returns an undefined value.</p><p>Save our current data out to our JSON data file This overwrites the existing data.</p> </div> </div> <div class="tags"> </div><table class="source_code"> <tr> <td> <pre class="lines"> 973 974 975 976 977 978 979 980 981 982 983</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 973</span> <span class='kw'>def</span> <span class='id identifier rubyid_save_local_data'>save_local_data</span> <span class='id identifier rubyid_data_dir'>data_dir</span><span class='period'>.</span><span class='id identifier rubyid_mkpath'>mkpath</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_modification_date'>modification_date</span> <span class='op'>=</span> <span class='const'>Time</span><span class='period'>.</span><span class='id identifier rubyid_now'>now</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_modified_by'>modified_by</span> <span class='op'>=</span> <span class='id identifier rubyid_admin'>admin</span> <span class='id identifier rubyid_log_debug'>log_debug</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Version '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_version'>version</span><span class='embexpr_end'>}</span><span class='tstring_content'>' of Title '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_title'>title</span><span class='embexpr_end'>}</span><span class='tstring_content'>' noting modification by </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_modified_by'>modified_by</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span> <span class='id identifier rubyid_file'>file</span> <span class='op'>=</span> <span class='id identifier rubyid_data_file'>data_file</span> <span class='id identifier rubyid_log_debug'>log_debug</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Saving local version data to: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_file'>file</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span> <span class='id identifier rubyid_file'>file</span><span class='period'>.</span><span class='id identifier rubyid_pix_atomic_write'>pix_atomic_write</span> <span class='id identifier rubyid_to_json'>to_json</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="session-instance_method"> #<strong>session</strong> ⇒ <tt>Hash</tt> </h3><div class="docstring"> <div class="discussion"> </div> </div> <div class="tags"> <p class="tag_title">Returns:</p> <ul class="return"> <li> <span class='type'>(<tt>Hash</tt>)</span> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 544 545 546 547</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 544</span> <span class='kw'>def</span> <span class='id identifier rubyid_session'>session</span> <span class='id identifier rubyid_server_app_instance'>server_app_instance</span><span class='op'>&.</span><span class='id identifier rubyid_session'>session</span> <span class='op'>||</span> <span class='lbrace'>{</span><span class='rbrace'>}</span> <span class='comment'># @session ||= {} </span><span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="skip-instance_method"> #<strong>skip</strong> ⇒ <tt>void</tt> </h3><div class="docstring"> <div class="discussion"> <p class="note returns_void">This method returns an undefined value.</p><p>skip this version</p> </div> </div> <div class="tags"> </div><table class="source_code"> <tr> <td> <pre class="lines"> 907 908 909 910 911 912 913 914 915 916 917 918</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 907</span> <span class='kw'>def</span> <span class='id identifier rubyid_skip'>skip</span> <span class='id identifier rubyid_lock'>lock</span> <span class='id identifier rubyid_progress'>progress</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Skipping unreleased version '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_version'>version</span><span class='embexpr_end'>}</span><span class='tstring_content'>'</span><span class='tstring_end'>"</span></span> <span class='id identifier rubyid_disable_policies_for_deprecation_or_skipping'>disable_policies_for_deprecation_or_skipping</span> <span class='symbol'>:skipped</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_status'>status</span> <span class='op'>=</span> <span class='const'>STATUS_SKIPPED</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_skipped_date'>skipped_date</span> <span class='op'>=</span> <span class='const'>Time</span><span class='period'>.</span><span class='id identifier rubyid_now'>now</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_skipped_by'>skipped_by</span> <span class='op'>=</span> <span class='id identifier rubyid_admin'>admin</span> <span class='id identifier rubyid_log_change'>log_change</span> <span class='label'>msg:</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Version Skipped</span><span class='tstring_end'>'</span></span> <span class='id identifier rubyid_save_local_data'>save_local_data</span> <span class='kw'>ensure</span> <span class='id identifier rubyid_unlock'>unlock</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="subscribed?-instance_method"> #<strong>subscribed?</strong> ⇒ <tt>Boolean</tt> </h3><div class="docstring"> <div class="discussion"> <p>Is this version part of a subscribed title?</p> </div> </div> <div class="tags"> <p class="tag_title">Returns:</p> <ul class="return"> <li> <span class='type'>(<tt>Boolean</tt>)</span> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 731 732 733</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 731</span> <span class='kw'>def</span> <span class='id identifier rubyid_subscribed?'>subscribed?</span> <span class='id identifier rubyid_title_object'>title_object</span><span class='period'>.</span><span class='id identifier rubyid_subscribed?'>subscribed?</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="ted_cnx-instance_method"> #<strong>ted_cnx</strong> ⇒ <tt>Windoo::Connection</tt> </h3><div class="docstring"> <div class="discussion"> <p>Returns a single Title Editor connection to use for the life of this instance.</p> </div> </div> <div class="tags"> <p class="tag_title">Returns:</p> <ul class="return"> <li> <span class='type'>(<tt>Windoo::Connection</tt>)</span> — <div class='inline'><p>a single Title Editor connection to use for the life of this instance</p></div> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 582 583 584</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 582</span> <span class='kw'>def</span> <span class='id identifier rubyid_ted_cnx'>ted_cnx</span> <span class='id identifier rubyid_server_app_instance'>server_app_instance</span><span class='period'>.</span><span class='id identifier rubyid_ted_cnx'>ted_cnx</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="ted_patch-instance_method"> #<strong>ted_patch</strong>(refresh: false) ⇒ <tt>Windoo::Patch</tt> </h3><div class="docstring"> <div class="discussion"> <p>TODO: maybe pass in an appropriate Windoo::SoftwareTitle, so we don't have to use refresh all the time to re-fetch, if we just re-fetched from elsewhere?</p> </div> </div> <div class="tags"> <p class="tag_title">Returns:</p> <ul class="return"> <li> <span class='type'>(<tt>Windoo::Patch</tt>)</span> — <div class='inline'><p>The Windoo::Patch object that represents this version in the title editor</p></div> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 621 622 623 624</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 621</span> <span class='kw'>def</span> <span class='id identifier rubyid_ted_patch'>ted_patch</span><span class='lparen'>(</span><span class='label'>refresh:</span> <span class='kw'>false</span><span class='rparen'>)</span> <span class='ivar'>@ted_patch</span> <span class='op'>=</span> <span class='kw'>nil</span> <span class='kw'>if</span> <span class='id identifier rubyid_refresh'>refresh</span> <span class='ivar'>@ted_patch</span> <span class='op'>||=</span> <span class='id identifier rubyid_ted_title'>ted_title</span><span class='lparen'>(</span><span class='label'>refresh:</span> <span class='id identifier rubyid_refresh'>refresh</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_patches'>patches</span><span class='period'>.</span><span class='id identifier rubyid_patch'>patch</span><span class='lparen'>(</span><span class='id identifier rubyid_version'>version</span><span class='rparen'>)</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="ted_title-instance_method"> #<strong>ted_title</strong>(refresh: false) ⇒ <tt>Windoo::SoftwareTitle</tt> </h3><div class="docstring"> <div class="discussion"> <p>Returns The Windoo::SoftwareTitle object that represents this version's title in the title editor.</p> </div> </div> <div class="tags"> <p class="tag_title">Returns:</p> <ul class="return"> <li> <span class='type'>(<tt>Windoo::SoftwareTitle</tt>)</span> — <div class='inline'><p>The Windoo::SoftwareTitle object that represents this version's title in the title editor</p></div> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 629 630 631 632</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 629</span> <span class='kw'>def</span> <span class='id identifier rubyid_ted_title'>ted_title</span><span class='lparen'>(</span><span class='label'>refresh:</span> <span class='kw'>false</span><span class='rparen'>)</span> <span class='ivar'>@ted_title</span> <span class='op'>=</span> <span class='kw'>nil</span> <span class='kw'>if</span> <span class='id identifier rubyid_refresh'>refresh</span> <span class='ivar'>@ted_title</span> <span class='op'>||=</span> <span class='const'>Windoo</span><span class='op'>::</span><span class='const'>SoftwareTitle</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span> <span class='label'>id:</span> <span class='id identifier rubyid_title'>title</span><span class='comma'>,</span> <span class='label'>cnx:</span> <span class='id identifier rubyid_ted_cnx'>ted_cnx</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="to_h-instance_method"> #<strong>to_h</strong> ⇒ <tt>Object</tt> </h3><div class="docstring"> <div class="discussion"> <p>Add more data to our hash</p> </div> </div> <div class="tags"> </div><table class="source_code"> <tr> <td> <pre class="lines"> 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 1061</span> <span class='kw'>def</span> <span class='id identifier rubyid_to_h'>to_h</span> <span class='id identifier rubyid_hash'>hash</span> <span class='op'>=</span> <span class='kw'>super</span> <span class='comment'># These attrs aren't defined in the ATTRIBUTES </span> <span class='comment'># but we want them in the hash and/or JSON </span> <span class='id identifier rubyid_hash'>hash</span><span class='lbracket'>[</span><span class='symbol'>:jamf_pkg_id</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_jamf_pkg_id'>jamf_pkg_id</span> <span class='id identifier rubyid_hash'>hash</span><span class='lbracket'>[</span><span class='symbol'>:ted_id_number</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_ted_id_number'>ted_id_number</span> <span class='id identifier rubyid_hash'>hash</span><span class='lbracket'>[</span><span class='symbol'>:pilot_groups_to_use</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_pilot_groups_to_use'>pilot_groups_to_use</span> <span class='id identifier rubyid_hash'>hash</span><span class='lbracket'>[</span><span class='symbol'>:release_groups_to_use</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_release_groups_to_use'>release_groups_to_use</span> <span class='id identifier rubyid_hash'>hash</span><span class='period'>.</span><span class='id identifier rubyid_sort'>sort</span><span class='period'>.</span><span class='id identifier rubyid_to_h'>to_h</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="unlock-instance_method"> #<strong>unlock</strong> ⇒ <tt>Object</tt> </h3><div class="docstring"> <div class="discussion"> <p>Unlock this version for updates</p> </div> </div> <div class="tags"> </div><table class="source_code"> <tr> <td> <pre class="lines"> 1051 1052 1053 1054 1055 1056 1057</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 1051</span> <span class='kw'>def</span> <span class='id identifier rubyid_unlock'>unlock</span> <span class='id identifier rubyid_curr_lock'>curr_lock</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../../Xolo.html" title="Xolo (module)">Xolo</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Server.html" title="Xolo::Server (module)">Server</a></span></span><span class='period'>.</span><span class='id identifier rubyid_object_locks'><span class='object_link'><a href="ObjectLocks.html#object_locks-instance_method" title="Xolo::Server::ObjectLocks#object_locks (method)">object_locks</a></span></span><span class='period'>.</span><span class='id identifier rubyid_dig'>dig</span> <span class='id identifier rubyid_title'>title</span><span class='comma'>,</span> <span class='symbol'>:versions</span><span class='comma'>,</span> <span class='id identifier rubyid_version'>version</span> <span class='kw'>return</span> <span class='kw'>unless</span> <span class='id identifier rubyid_curr_lock'>curr_lock</span> <span class='const'><span class='object_link'><a href="../../Xolo.html" title="Xolo (module)">Xolo</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Server.html" title="Xolo::Server (module)">Server</a></span></span><span class='period'>.</span><span class='id identifier rubyid_object_locks'><span class='object_link'><a href="ObjectLocks.html#object_locks-instance_method" title="Xolo::Server::ObjectLocks#object_locks (method)">object_locks</a></span></span><span class='lbracket'>[</span><span class='id identifier rubyid_title'>title</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='symbol'>:versions</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span> <span class='id identifier rubyid_version'>version</span> <span class='id identifier rubyid_log_debug'>log_debug</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Unlocked version '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_version'>version</span><span class='embexpr_end'>}</span><span class='tstring_content'>' of title '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_title'>title</span><span class='embexpr_end'>}</span><span class='tstring_content'>' for updates</span><span class='tstring_end'>"</span></span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="update-instance_method"> #<strong>update</strong>(new_data) ⇒ <tt>void</tt> </h3><div class="docstring"> <div class="discussion"> <p class="note returns_void">This method returns an undefined value.</p><p>Update a this version, updating to the local filesystem, Jamf Pro, and the Title Editor as needed</p> </div> </div> <div class="tags"> <p class="tag_title">Parameters:</p> <ul class="param"> <li> <span class='name'>new_data</span> <span class='type'>(<tt>Hash</tt>)</span> — <div class='inline'><p>The new data sent from xadm</p></div> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 746</span> <span class='kw'>def</span> <span class='id identifier rubyid_update'>update</span><span class='lparen'>(</span><span class='id identifier rubyid_new_data'>new_data</span><span class='rparen'>)</span> <span class='id identifier rubyid_lock'>lock</span> <span class='ivar'>@current_action</span> <span class='op'>=</span> <span class='symbol'>:updating</span> <span class='ivar'>@new_data_for_update</span> <span class='op'>=</span> <span class='id identifier rubyid_new_data'>new_data</span> <span class='ivar'>@changes_for_update</span> <span class='op'>=</span> <span class='id identifier rubyid_note_changes_for_update_and_log'>note_changes_for_update_and_log</span> <span class='kw'>if</span> <span class='ivar'>@changes_for_update</span><span class='period'>.</span><span class='id identifier rubyid_pix_empty?'>pix_empty?</span> <span class='id identifier rubyid_progress'>progress</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>No changes to make</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='label'>log:</span> <span class='symbol'>:info</span> <span class='kw'>return</span> <span class='kw'>end</span> <span class='id identifier rubyid_log_info'>log_info</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Updating version '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_version'>version</span><span class='embexpr_end'>}</span><span class='tstring_content'>' of title '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_title'>title</span><span class='embexpr_end'>}</span><span class='tstring_content'>' for admin '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_admin'>admin</span><span class='embexpr_end'>}</span><span class='tstring_content'>'</span><span class='tstring_end'>"</span></span> <span class='comment'># changelog - log the changes now, and </span> <span class='comment'># if there is an error, we'll log that too </span> <span class='comment'># saying the above changes were not completed and to </span> <span class='comment'># look at the server log for details. </span> <span class='id identifier rubyid_log_update_changes'>log_update_changes</span> <span class='comment'># update ted before jamf </span> <span class='id identifier rubyid_update_patch_in_ted'>update_patch_in_ted</span> <span class='id identifier rubyid_update_version_in_jamf'>update_version_in_jamf</span> <span class='id identifier rubyid_update_local_instance_values'>update_local_instance_values</span> <span class='id identifier rubyid_save_local_data'>save_local_data</span> <span class='id identifier rubyid_server_app_instance'>server_app_instance</span><span class='period'>.</span><span class='id identifier rubyid_update_client_data'>update_client_data</span> <span class='comment'># new pkg uploads happen in a separate process </span><span class='kw'>rescue</span> <span class='op'>=></span> <span class='id identifier rubyid_e'>e</span> <span class='id identifier rubyid_log_change'>log_change</span> <span class='label'>msg:</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>ERROR: The update failed and the changes didn't all go through!\n</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_e'>e</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='embexpr_end'>}</span><span class='tstring_content'>: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_e'>e</span><span class='period'>.</span><span class='id identifier rubyid_message'>message</span><span class='embexpr_end'>}</span><span class='tstring_content'>\nSee server log for details.</span><span class='tstring_end'>"</span></span> <span class='comment'># re-raise for proper error handling in the server app </span> <span class='id identifier rubyid_raise'>raise</span> <span class='kw'>ensure</span> <span class='id identifier rubyid_unlock'>unlock</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="update_local_instance_values-instance_method"> #<strong>update_local_instance_values</strong> ⇒ <tt>void</tt> </h3><div class="docstring"> <div class="discussion"> <p class="note returns_void">This method returns an undefined value.</p><p>Update our instance attributes with any new data before saving the changes back out to the file system</p> </div> </div> <div class="tags"> </div><table class="source_code"> <tr> <td> <pre class="lines"> 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 946</span> <span class='kw'>def</span> <span class='id identifier rubyid_update_local_instance_values'>update_local_instance_values</span> <span class='comment'># update instance data with new data before writing out to the filesystem. </span> <span class='comment'># Do this last so that the instance values can be compared to </span> <span class='comment'># new_data_for_update in the steps above. </span> <span class='comment'># Also, those steps might have updated some server-specific attributes </span> <span class='comment'># which will be saved to the file system as well. </span> <span class='const'>ATTRIBUTES</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_attr'>attr</span><span class='comma'>,</span> <span class='id identifier rubyid_deets'>deets</span><span class='op'>|</span> <span class='comment'># make sure these are updated elsewhere if needed, </span> <span class='comment'># e.g. modification data. </span> <span class='kw'>next</span> <span class='kw'>if</span> <span class='id identifier rubyid_deets'>deets</span><span class='lbracket'>[</span><span class='symbol'>:read_only</span><span class='rbracket'>]</span> <span class='kw'>next</span> <span class='kw'>unless</span> <span class='id identifier rubyid_deets'>deets</span><span class='lbracket'>[</span><span class='symbol'>:cli</span><span class='rbracket'>]</span> <span class='id identifier rubyid_new_val'>new_val</span> <span class='op'>=</span> <span class='id identifier rubyid_new_data_for_update'>new_data_for_update</span><span class='lbracket'>[</span><span class='id identifier rubyid_attr'>attr</span><span class='rbracket'>]</span> <span class='id identifier rubyid_old_val'>old_val</span> <span class='op'>=</span> <span class='id identifier rubyid_send'>send</span><span class='lparen'>(</span><span class='id identifier rubyid_attr'>attr</span><span class='rparen'>)</span> <span class='kw'>next</span> <span class='kw'>if</span> <span class='id identifier rubyid_new_val'>new_val</span> <span class='op'>==</span> <span class='id identifier rubyid_old_val'>old_val</span> <span class='id identifier rubyid_log_debug'>log_debug</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Updating Xolo Version attribute '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_attr'>attr</span><span class='embexpr_end'>}</span><span class='tstring_content'>': '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_old_val'>old_val</span><span class='embexpr_end'>}</span><span class='tstring_content'>' -> '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_new_val'>new_val</span><span class='embexpr_end'>}</span><span class='tstring_content'>'</span><span class='tstring_end'>"</span></span> <span class='id identifier rubyid_send'>send</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_attr'>attr</span><span class='embexpr_end'>}</span><span class='tstring_content'>=</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='id identifier rubyid_new_val'>new_val</span> <span class='kw'>end</span> <span class='comment'># update any other server-specific attributes here... </span><span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="updating?-instance_method"> #<strong>updating?</strong> ⇒ <tt>Boolean</tt> </h3><div class="docstring"> <div class="discussion"> <p>Returns Are we updating this version?.</p> </div> </div> <div class="tags"> <p class="tag_title">Returns:</p> <ul class="return"> <li> <span class='type'>(<tt>Boolean</tt>)</span> — <div class='inline'><p>Are we updating this version?</p></div> </li> </ul> </div><table class="source_code"> <tr> <td> <pre class="lines"> 444 445 446</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/xolo/server/version.rb', line 444</span> <span class='kw'>def</span> <span class='id identifier rubyid_updating?'>updating?</span> <span class='id identifier rubyid_current_action'>current_action</span> <span class='op'>==</span> <span class='symbol'>:updating</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> </div> </div> <div id="footer"> Generated on Sat Jul 25 19:08:02 2026 by <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a> 0.9.44 (ruby-4.0.2). </div> </div> </body> </html>