)]}'
{"ironic_python_agent/agent.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"cafc51cf260f734abd5ca94262a0644261ec9a19","unresolved":false,"context_lines":[{"line_number":354,"context_line":"    def _attempt_clock_sync(self):"},{"line_number":355,"context_line":"        if cfg.CONF.ntp_server:"},{"line_number":356,"context_line":"            try:"},{"line_number":357,"context_line":"                utils.execute(\u0027ntpdate\u0027, cfg.CONF.ntp_server)"},{"line_number":358,"context_line":"            except processutils.ProcessExecutionError as e:"},{"line_number":359,"context_line":"                LOG.warning(\u0027Error occured when attempting to sync the \u0027"},{"line_number":360,"context_line":"                            \u0027system software clock: %s\u0027, e)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_87ebf278","line":357,"updated":"2020-02-15 15:26:36.000000000","message":"Looks like ntpdate is the old and chrony is the new that requires additional steps/work :(","commit_id":"d8525089064991b72e1b276c35e261f00a1cb956"}],"ironic_python_agent/config.py":[{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"fdf2b6d376c6845c0db0e2fcf0c4590c12f371c6","unresolved":false,"context_lines":[{"line_number":222,"context_line":"    cfg.StrOpt(\u0027ntp_server\u0027,"},{"line_number":223,"context_line":"               default\u003dAPARAMS.get(\u0027ipa-ntp-server\u0027, None),"},{"line_number":224,"context_line":"               help\u003d\u0027Address of a single NTP server against which the \u0027"},{"line_number":225,"context_line":"                    \u0027agent should sync the hardware clock prior to.\u0027"},{"line_number":226,"context_line":"                    \u0027rebooting to an instance.\u0027),"},{"line_number":227,"context_line":"    cfg.BoolOpt(\u0027fail_if_clock_not_set\u0027,"},{"line_number":228,"context_line":"                default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_2a9bdb16","line":225,"range":{"start_line":225,"start_character":66,"end_line":225,"end_character":67},"updated":"2020-02-17 13:45:28.000000000","message":"Nit: the dot should be a blank","commit_id":"5fafd6700b6ff219293b3bbbf15111ffffc8db07"},{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"fdf2b6d376c6845c0db0e2fcf0c4590c12f371c6","unresolved":false,"context_lines":[{"line_number":227,"context_line":"    cfg.BoolOpt(\u0027fail_if_clock_not_set\u0027,"},{"line_number":228,"context_line":"                default\u003dFalse,"},{"line_number":229,"context_line":"                help\u003d\u0027If operations should fail if the clock time sync \u0027"},{"line_number":230,"context_line":"                     \u0027fails to complete successfuly.\u0027),"},{"line_number":231,"context_line":"]"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"CONF.register_cli_opts(cli_opts)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_4a8c17de","line":230,"range":{"start_line":230,"start_character":40,"end_line":230,"end_character":51},"updated":"2020-02-17 13:45:28.000000000","message":"Nit: successfully","commit_id":"5fafd6700b6ff219293b3bbbf15111ffffc8db07"}],"ironic_python_agent/extensions/standby.py":[{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"fdf2b6d376c6845c0db0e2fcf0c4590c12f371c6","unresolved":false,"context_lines":[{"line_number":691,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":692,"context_line":"            msg \u003d \u0027Failed to sync hardware clock: %s\u0027 % e"},{"line_number":693,"context_line":"            LOG.error(msg)"},{"line_number":694,"context_line":"            if CONF.fail_if_clock_not_set or ignore_errors:"},{"line_number":695,"context_line":"                raise errors.CommandExecutionError(msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_0aafff2d","line":694,"range":{"start_line":694,"start_character":45,"end_line":694,"end_character":58},"updated":"2020-02-17 13:45:28.000000000","message":"this should be \"not ignore_errors\", no?","commit_id":"5fafd6700b6ff219293b3bbbf15111ffffc8db07"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"59222868baf0a898abb742cb4215a1879bde2ac5","unresolved":false,"context_lines":[{"line_number":691,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":692,"context_line":"            msg \u003d \u0027Failed to sync hardware clock: %s\u0027 % e"},{"line_number":693,"context_line":"            LOG.error(msg)"},{"line_number":694,"context_line":"            if CONF.fail_if_clock_not_set or ignore_errors:"},{"line_number":695,"context_line":"                raise errors.CommandExecutionError(msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_7f22e810","line":694,"range":{"start_line":694,"start_character":45,"end_line":694,"end_character":58},"in_reply_to":"3fa7e38b_0aafff2d","updated":"2020-02-17 21:15:15.000000000","message":"yes, yes it should!","commit_id":"5fafd6700b6ff219293b3bbbf15111ffffc8db07"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"970263e0225265b52450c6be737144f5882d36c2","unresolved":false,"context_lines":[{"line_number":666,"context_line":"            LOG.error(error_msg)"},{"line_number":667,"context_line":"            raise errors.CommandExecutionError(error_msg)"},{"line_number":668,"context_line":""},{"line_number":669,"context_line":"    @base.sync_command(\u0027sync_clock\u0027)"},{"line_number":670,"context_line":"    def sync_clock(self):"},{"line_number":671,"context_line":"        \"\"\"Sync the system clock to the hardware clock."},{"line_number":672,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_163dcf28","line":669,"updated":"2020-02-18 15:05:45.000000000","message":"I\u0027d prefer we don\u0027t add more commands and limit this patch to only start-up/shut-down, adding this functionality as a deploy step later.","commit_id":"9802d4f1abdd9c474a94f88d82ffba988f6cf4d2"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"74c737ce1125b340fa07ee290a14b746056bfa33","unresolved":false,"context_lines":[{"line_number":666,"context_line":"            LOG.error(error_msg)"},{"line_number":667,"context_line":"            raise errors.CommandExecutionError(error_msg)"},{"line_number":668,"context_line":""},{"line_number":669,"context_line":"    @base.sync_command(\u0027sync_clock\u0027)"},{"line_number":670,"context_line":"    def sync_clock(self):"},{"line_number":671,"context_line":"        \"\"\"Sync the system clock to the hardware clock."},{"line_number":672,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_87aabd6a","line":669,"in_reply_to":"3fa7e38b_163dcf28","updated":"2020-02-20 20:36:55.000000000","message":"I can go with that, the code path in utils will take care of that.  In that case we woudl basically just move the hwclock sync up to _run_shutdown_command.\n\nWhat may be best is nuke sync_clock method for now, implement it when we have deploy steps, and keep the helper around as referenced in the shutdown command. Just put a todo to change it later.","commit_id":"9802d4f1abdd9c474a94f88d82ffba988f6cf4d2"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"970263e0225265b52450c6be737144f5882d36c2","unresolved":false,"context_lines":[{"line_number":675,"context_line":"        \"\"\""},{"line_number":676,"context_line":"        self._sync_clock()"},{"line_number":677,"context_line":""},{"line_number":678,"context_line":"    def _sync_clock(self, ignore_errors\u003dFalse):"},{"line_number":679,"context_line":"        \"\"\"Sync the clock to a configured NTP server."},{"line_number":680,"context_line":""},{"line_number":681,"context_line":"        :param ignore_errors: Boolean option to indicate if the"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_b60b9b7d","line":678,"updated":"2020-02-18 15:05:45.000000000","message":"nit: no need for a separte function","commit_id":"9802d4f1abdd9c474a94f88d82ffba988f6cf4d2"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"970263e0225265b52450c6be737144f5882d36c2","unresolved":false,"context_lines":[{"line_number":687,"context_line":"        \"\"\""},{"line_number":688,"context_line":"        try:"},{"line_number":689,"context_line":"            utils.sync_clock(ignore_errors\u003dignore_errors)"},{"line_number":690,"context_line":"            utils.execute(\u0027hwclock\u0027, \u0027-v\u0027, \u0027--systohc\u0027)"},{"line_number":691,"context_line":"        except (processutils.ProcessExecutionError,"},{"line_number":692,"context_line":"                errors.CommandExecutionError) as e:"},{"line_number":693,"context_line":"            msg \u003d \u0027Failed to sync hardware clock: %s\u0027 % e"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_d61097ad","line":690,"updated":"2020-02-18 15:05:45.000000000","message":"What\u0027s the reason of not doing it on start-up as well?","commit_id":"9802d4f1abdd9c474a94f88d82ffba988f6cf4d2"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"74c737ce1125b340fa07ee290a14b746056bfa33","unresolved":false,"context_lines":[{"line_number":687,"context_line":"        \"\"\""},{"line_number":688,"context_line":"        try:"},{"line_number":689,"context_line":"            utils.sync_clock(ignore_errors\u003dignore_errors)"},{"line_number":690,"context_line":"            utils.execute(\u0027hwclock\u0027, \u0027-v\u0027, \u0027--systohc\u0027)"},{"line_number":691,"context_line":"        except (processutils.ProcessExecutionError,"},{"line_number":692,"context_line":"                errors.CommandExecutionError) as e:"},{"line_number":693,"context_line":"            msg \u003d \u0027Failed to sync hardware clock: %s\u0027 % e"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_c787550a","line":690,"in_reply_to":"3fa7e38b_d61097ad","updated":"2020-02-20 20:36:55.000000000","message":"AFAIK, the only cases where the hardware clock is frequently accessed is with virtualization because of how the VT layer works, so syncing prior seems kind of silly, and we ideally want to sync right before rebooting in the case of a long running ramdisk, as the clock can still drift while the the machine is on. (Yay!)","commit_id":"9802d4f1abdd9c474a94f88d82ffba988f6cf4d2"},{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"250f0632b0540dd704fa26b11aa7436dae3999ab","unresolved":false,"context_lines":[{"line_number":617,"context_line":"        :raises: SystemRebootError if the command errors out with an"},{"line_number":618,"context_line":"            unsuccessful exit code."},{"line_number":619,"context_line":"        \"\"\""},{"line_number":620,"context_line":"        # TODO(TheJulia): When we have deploy steps, we should remove this"},{"line_number":621,"context_line":"        # upon shutdown. The clock sync deploy step can run before."},{"line_number":622,"context_line":"        self._sync_clock(ignore_errors\u003dTrue)"},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"        if command not in (\u0027reboot\u0027, \u0027poweroff\u0027):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1fa4df85_9795b835","line":621,"range":{"start_line":620,"start_character":0,"end_line":621,"end_character":67},"updated":"2020-03-04 15:01:20.000000000","message":"Deploy steps are only run on deployments, no? Why would we limit to update the hwclock to deployments only?","commit_id":"27d42bef1a0b0bb705e6b006e6086559f9372045"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"761c7f1f134ab191aa78adb467e12ef683f68a6b","unresolved":false,"context_lines":[{"line_number":617,"context_line":"        :raises: SystemRebootError if the command errors out with an"},{"line_number":618,"context_line":"            unsuccessful exit code."},{"line_number":619,"context_line":"        \"\"\""},{"line_number":620,"context_line":"        # TODO(TheJulia): When we have deploy steps, we should remove this"},{"line_number":621,"context_line":"        # upon shutdown. The clock sync deploy step can run before."},{"line_number":622,"context_line":"        self._sync_clock(ignore_errors\u003dTrue)"},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"        if command not in (\u0027reboot\u0027, \u0027poweroff\u0027):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1fa4df85_1c2d37a7","line":621,"range":{"start_line":620,"start_character":0,"end_line":621,"end_character":67},"in_reply_to":"1fa4df85_9795b835","updated":"2020-03-07 17:16:05.000000000","message":"Good point, and I was thinking deploy steps as in the larger composition of work. Updated the TODO note.","commit_id":"27d42bef1a0b0bb705e6b006e6086559f9372045"},{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"250f0632b0540dd704fa26b11aa7436dae3999ab","unresolved":false,"context_lines":[{"line_number":668,"context_line":"            LOG.error(error_msg)"},{"line_number":669,"context_line":"            raise errors.CommandExecutionError(error_msg)"},{"line_number":670,"context_line":""},{"line_number":671,"context_line":"    # TODO(TheJulia): One we have deploy steps, this should become a"},{"line_number":672,"context_line":"    # deploy step, which we ideally have enabled by default."},{"line_number":673,"context_line":"    def _sync_clock(self, ignore_errors\u003dFalse):"},{"line_number":674,"context_line":"        \"\"\"Sync the clock to a configured NTP server."}],"source_content_type":"text/x-python","patch_set":6,"id":"1fa4df85_1772287c","line":671,"range":{"start_line":671,"start_character":22,"end_line":671,"end_character":25},"updated":"2020-03-04 15:01:20.000000000","message":"Nit: once","commit_id":"27d42bef1a0b0bb705e6b006e6086559f9372045"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"761c7f1f134ab191aa78adb467e12ef683f68a6b","unresolved":false,"context_lines":[{"line_number":668,"context_line":"            LOG.error(error_msg)"},{"line_number":669,"context_line":"            raise errors.CommandExecutionError(error_msg)"},{"line_number":670,"context_line":""},{"line_number":671,"context_line":"    # TODO(TheJulia): One we have deploy steps, this should become a"},{"line_number":672,"context_line":"    # deploy step, which we ideally have enabled by default."},{"line_number":673,"context_line":"    def _sync_clock(self, ignore_errors\u003dFalse):"},{"line_number":674,"context_line":"        \"\"\"Sync the clock to a configured NTP server."}],"source_content_type":"text/x-python","patch_set":6,"id":"1fa4df85_3c283395","line":671,"range":{"start_line":671,"start_character":22,"end_line":671,"end_character":25},"in_reply_to":"1fa4df85_1772287c","updated":"2020-03-07 17:16:05.000000000","message":"Done","commit_id":"27d42bef1a0b0bb705e6b006e6086559f9372045"},{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"250f0632b0540dd704fa26b11aa7436dae3999ab","unresolved":false,"context_lines":[{"line_number":677,"context_line":"                              errors should be fatal. This option"},{"line_number":678,"context_line":"                              does not override the fail_if_clock_not_set"},{"line_number":679,"context_line":"                              configuration option."},{"line_number":680,"context_line":"        :raises: CommandExecutionError if a failure is encountered and"},{"line_number":681,"context_line":"                 errors are not ignored."},{"line_number":682,"context_line":"        \"\"\""},{"line_number":683,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1fa4df85_17f788d5","line":680,"range":{"start_line":680,"start_character":17,"end_line":680,"end_character":38},"updated":"2020-03-04 15:01:20.000000000","message":"Nit: ClockSyncError","commit_id":"27d42bef1a0b0bb705e6b006e6086559f9372045"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"761c7f1f134ab191aa78adb467e12ef683f68a6b","unresolved":false,"context_lines":[{"line_number":677,"context_line":"                              errors should be fatal. This option"},{"line_number":678,"context_line":"                              does not override the fail_if_clock_not_set"},{"line_number":679,"context_line":"                              configuration option."},{"line_number":680,"context_line":"        :raises: CommandExecutionError if a failure is encountered and"},{"line_number":681,"context_line":"                 errors are not ignored."},{"line_number":682,"context_line":"        \"\"\""},{"line_number":683,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1fa4df85_dc1c7f79","line":680,"range":{"start_line":680,"start_character":17,"end_line":680,"end_character":38},"in_reply_to":"1fa4df85_17f788d5","updated":"2020-03-07 17:16:05.000000000","message":"Done","commit_id":"27d42bef1a0b0bb705e6b006e6086559f9372045"}],"ironic_python_agent/utils.py":[{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"fdf2b6d376c6845c0db0e2fcf0c4590c12f371c6","unresolved":false,"context_lines":[{"line_number":495,"context_line":""},{"line_number":496,"context_line":"    :returns: \"ntpdate\" if ntpdate has been found, \"chrony\" if chrony"},{"line_number":497,"context_line":"              was located, and None if neither are located. If both tools"},{"line_number":498,"context_line":"              are present, \"chrony\" will superceed \"ntpdate\"."},{"line_number":499,"context_line":"    \"\"\""},{"line_number":500,"context_line":"    method \u003d None"},{"line_number":501,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_ca6d6703","line":498,"range":{"start_line":498,"start_character":41,"end_line":498,"end_character":50},"updated":"2020-02-17 13:45:28.000000000","message":"Nit: supercede","commit_id":"5fafd6700b6ff219293b3bbbf15111ffffc8db07"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"d5d0817c7e6b9dfe977b4c81ec2a5eb300c3121a","unresolved":false,"context_lines":[{"line_number":499,"context_line":"    \"\"\""},{"line_number":500,"context_line":"    method \u003d None"},{"line_number":501,"context_line":"    try:"},{"line_number":502,"context_line":"        execute(\u0027ntpdate\u0027, \u0027-v\u0027, check_exit_code\u003d[0, 1])"},{"line_number":503,"context_line":"        method \u003d \u0027ntpdate\u0027"},{"line_number":504,"context_line":"    except processutils.ProcessExecutionError:"},{"line_number":505,"context_line":"        LOG.debug(\u0027Command \\\u0027ntpdate\\\u0027 not found for time sync.\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_c4c79e3e","line":502,"range":{"start_line":502,"start_character":16,"end_line":502,"end_character":31},"updated":"2020-02-17 10:28:44.000000000","message":"I saw you\u0027re using a ntpclient-based script in tinycore as replacement for ntpdate, just be aware that the \u0027-v\u0027 option is not valid for that command","commit_id":"5fafd6700b6ff219293b3bbbf15111ffffc8db07"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"59222868baf0a898abb742cb4215a1879bde2ac5","unresolved":false,"context_lines":[{"line_number":499,"context_line":"    \"\"\""},{"line_number":500,"context_line":"    method \u003d None"},{"line_number":501,"context_line":"    try:"},{"line_number":502,"context_line":"        execute(\u0027ntpdate\u0027, \u0027-v\u0027, check_exit_code\u003d[0, 1])"},{"line_number":503,"context_line":"        method \u003d \u0027ntpdate\u0027"},{"line_number":504,"context_line":"    except processutils.ProcessExecutionError:"},{"line_number":505,"context_line":"        LOG.debug(\u0027Command \\\u0027ntpdate\\\u0027 not found for time sync.\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_dfe75cd7","line":502,"range":{"start_line":502,"start_character":16,"end_line":502,"end_character":31},"in_reply_to":"3fa7e38b_aa226bb6","updated":"2020-02-17 21:15:15.000000000","message":"fixed the magical little wrapper \\o/","commit_id":"5fafd6700b6ff219293b3bbbf15111ffffc8db07"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"de36ae54c9d356ff158fb74cebd4014bb4559dc5","unresolved":false,"context_lines":[{"line_number":499,"context_line":"    \"\"\""},{"line_number":500,"context_line":"    method \u003d None"},{"line_number":501,"context_line":"    try:"},{"line_number":502,"context_line":"        execute(\u0027ntpdate\u0027, \u0027-v\u0027, check_exit_code\u003d[0, 1])"},{"line_number":503,"context_line":"        method \u003d \u0027ntpdate\u0027"},{"line_number":504,"context_line":"    except processutils.ProcessExecutionError:"},{"line_number":505,"context_line":"        LOG.debug(\u0027Command \\\u0027ntpdate\\\u0027 not found for time sync.\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_aa226bb6","line":502,"range":{"start_line":502,"start_character":16,"end_line":502,"end_character":31},"in_reply_to":"3fa7e38b_c4c79e3e","updated":"2020-02-17 13:36:43.000000000","message":"doh! I\u0027ll have to make it a little smarter.","commit_id":"5fafd6700b6ff219293b3bbbf15111ffffc8db07"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"970263e0225265b52450c6be737144f5882d36c2","unresolved":false,"context_lines":[{"line_number":499,"context_line":"    \"\"\""},{"line_number":500,"context_line":"    method \u003d None"},{"line_number":501,"context_line":"    try:"},{"line_number":502,"context_line":"        execute(\u0027ntpdate\u0027, \u0027-v\u0027, check_exit_code\u003d[0, 1])"},{"line_number":503,"context_line":"        method \u003d \u0027ntpdate\u0027"},{"line_number":504,"context_line":"    except processutils.ProcessExecutionError:"},{"line_number":505,"context_line":"        LOG.debug(\u0027Command \\\u0027ntpdate\\\u0027 not found for time sync.\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_76052368","line":502,"updated":"2020-02-18 15:05:45.000000000","message":"Shouldn\u0027t chrony go first? It seems to be the preferred option nowadays.","commit_id":"9802d4f1abdd9c474a94f88d82ffba988f6cf4d2"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"74c737ce1125b340fa07ee290a14b746056bfa33","unresolved":false,"context_lines":[{"line_number":499,"context_line":"    \"\"\""},{"line_number":500,"context_line":"    method \u003d None"},{"line_number":501,"context_line":"    try:"},{"line_number":502,"context_line":"        execute(\u0027ntpdate\u0027, \u0027-v\u0027, check_exit_code\u003d[0, 1])"},{"line_number":503,"context_line":"        method \u003d \u0027ntpdate\u0027"},{"line_number":504,"context_line":"    except processutils.ProcessExecutionError:"},{"line_number":505,"context_line":"        LOG.debug(\u0027Command \\\u0027ntpdate\\\u0027 not found for time sync.\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_67bf81ac","line":502,"in_reply_to":"3fa7e38b_76052368","updated":"2020-02-20 20:36:55.000000000","message":"Chrony is preferred if present... I guess it really doesn\u0027t mater.","commit_id":"9802d4f1abdd9c474a94f88d82ffba988f6cf4d2"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"970263e0225265b52450c6be737144f5882d36c2","unresolved":false,"context_lines":[{"line_number":501,"context_line":"    try:"},{"line_number":502,"context_line":"        execute(\u0027ntpdate\u0027, \u0027-v\u0027, check_exit_code\u003d[0, 1])"},{"line_number":503,"context_line":"        method \u003d \u0027ntpdate\u0027"},{"line_number":504,"context_line":"    except processutils.ProcessExecutionError:"},{"line_number":505,"context_line":"        LOG.debug(\u0027Command \\\u0027ntpdate\\\u0027 not found for time sync.\u0027)"},{"line_number":506,"context_line":"    try:"},{"line_number":507,"context_line":"        execute(\u0027chronyd\u0027, \u0027-h\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_960a1f76","line":504,"updated":"2020-02-18 15:05:45.000000000","message":"It\u0027s OSError if the command is not found, ProcessExecutionError only if it fails.","commit_id":"9802d4f1abdd9c474a94f88d82ffba988f6cf4d2"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"761c7f1f134ab191aa78adb467e12ef683f68a6b","unresolved":false,"context_lines":[{"line_number":501,"context_line":"    try:"},{"line_number":502,"context_line":"        execute(\u0027ntpdate\u0027, \u0027-v\u0027, check_exit_code\u003d[0, 1])"},{"line_number":503,"context_line":"        method \u003d \u0027ntpdate\u0027"},{"line_number":504,"context_line":"    except processutils.ProcessExecutionError:"},{"line_number":505,"context_line":"        LOG.debug(\u0027Command \\\u0027ntpdate\\\u0027 not found for time sync.\u0027)"},{"line_number":506,"context_line":"    try:"},{"line_number":507,"context_line":"        execute(\u0027chronyd\u0027, \u0027-h\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_87063d74","line":504,"in_reply_to":"3fa7e38b_960a1f76","updated":"2020-03-07 17:16:05.000000000","message":"and OSError should catch any failure there... so that works! Thanks!","commit_id":"9802d4f1abdd9c474a94f88d82ffba988f6cf4d2"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"970263e0225265b52450c6be737144f5882d36c2","unresolved":false,"context_lines":[{"line_number":506,"context_line":"    try:"},{"line_number":507,"context_line":"        execute(\u0027chronyd\u0027, \u0027-h\u0027)"},{"line_number":508,"context_line":"        method \u003d \u0027chronyd\u0027"},{"line_number":509,"context_line":"    except processutils.ProcessExecutionError:"},{"line_number":510,"context_line":"        LOG.debug(\u0027Comand \\\u0027chronyd\\\u0027 not found for time sync.\u0027)"},{"line_number":511,"context_line":"    return method"},{"line_number":512,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_361fabba","line":509,"updated":"2020-02-18 15:05:45.000000000","message":"ditto","commit_id":"9802d4f1abdd9c474a94f88d82ffba988f6cf4d2"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"761c7f1f134ab191aa78adb467e12ef683f68a6b","unresolved":false,"context_lines":[{"line_number":506,"context_line":"    try:"},{"line_number":507,"context_line":"        execute(\u0027chronyd\u0027, \u0027-h\u0027)"},{"line_number":508,"context_line":"        method \u003d \u0027chronyd\u0027"},{"line_number":509,"context_line":"    except processutils.ProcessExecutionError:"},{"line_number":510,"context_line":"        LOG.debug(\u0027Comand \\\u0027chronyd\\\u0027 not found for time sync.\u0027)"},{"line_number":511,"context_line":"    return method"},{"line_number":512,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_a709f983","line":509,"in_reply_to":"3fa7e38b_361fabba","updated":"2020-03-07 17:16:05.000000000","message":"Done","commit_id":"9802d4f1abdd9c474a94f88d82ffba988f6cf4d2"},{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"250f0632b0540dd704fa26b11aa7436dae3999ab","unresolved":false,"context_lines":[{"line_number":491,"context_line":""},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"def determine_time_method():"},{"line_number":494,"context_line":"    \"\"\"Helper method to determine what time of time utility is present."},{"line_number":495,"context_line":""},{"line_number":496,"context_line":"    :returns: \"ntpdate\" if ntpdate has been found, \"chrony\" if chrony"},{"line_number":497,"context_line":"              was located, and None if neither are located. If both tools"}],"source_content_type":"text/x-python","patch_set":6,"id":"1fa4df85_97d8587b","line":494,"range":{"start_line":494,"start_character":38,"end_line":494,"end_character":46},"updated":"2020-03-04 15:01:20.000000000","message":"Nit: drop?","commit_id":"27d42bef1a0b0bb705e6b006e6086559f9372045"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"761c7f1f134ab191aa78adb467e12ef683f68a6b","unresolved":false,"context_lines":[{"line_number":491,"context_line":""},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"def determine_time_method():"},{"line_number":494,"context_line":"    \"\"\"Helper method to determine what time of time utility is present."},{"line_number":495,"context_line":""},{"line_number":496,"context_line":"    :returns: \"ntpdate\" if ntpdate has been found, \"chrony\" if chrony"},{"line_number":497,"context_line":"              was located, and None if neither are located. If both tools"}],"source_content_type":"text/x-python","patch_set":6,"id":"1fa4df85_3c53533b","line":494,"range":{"start_line":494,"start_character":38,"end_line":494,"end_character":46},"in_reply_to":"1fa4df85_97d8587b","updated":"2020-03-07 17:16:05.000000000","message":"Done","commit_id":"27d42bef1a0b0bb705e6b006e6086559f9372045"},{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"250f0632b0540dd704fa26b11aa7436dae3999ab","unresolved":false,"context_lines":[{"line_number":501,"context_line":"        execute(\u0027chronyd\u0027, \u0027-h\u0027)"},{"line_number":502,"context_line":"        return \u0027chronyd\u0027"},{"line_number":503,"context_line":"    except OSError:"},{"line_number":504,"context_line":"        LOG.debug(\u0027Comand \\\u0027chronyd\\\u0027 not found for time sync.\u0027)"},{"line_number":505,"context_line":"    try:"},{"line_number":506,"context_line":"        execute(\u0027ntpdate\u0027, \u0027-v\u0027, check_exit_code\u003d[0, 1])"},{"line_number":507,"context_line":"        return \u0027ntpdate\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"1fa4df85_f7c66c9a","line":504,"range":{"start_line":504,"start_character":19,"end_line":504,"end_character":25},"updated":"2020-03-04 15:01:20.000000000","message":"Nit: command","commit_id":"27d42bef1a0b0bb705e6b006e6086559f9372045"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"761c7f1f134ab191aa78adb467e12ef683f68a6b","unresolved":false,"context_lines":[{"line_number":501,"context_line":"        execute(\u0027chronyd\u0027, \u0027-h\u0027)"},{"line_number":502,"context_line":"        return \u0027chronyd\u0027"},{"line_number":503,"context_line":"    except OSError:"},{"line_number":504,"context_line":"        LOG.debug(\u0027Comand \\\u0027chronyd\\\u0027 not found for time sync.\u0027)"},{"line_number":505,"context_line":"    try:"},{"line_number":506,"context_line":"        execute(\u0027ntpdate\u0027, \u0027-v\u0027, check_exit_code\u003d[0, 1])"},{"line_number":507,"context_line":"        return \u0027ntpdate\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"1fa4df85_dc331f13","line":504,"range":{"start_line":504,"start_character":19,"end_line":504,"end_character":25},"in_reply_to":"1fa4df85_f7c66c9a","updated":"2020-03-07 17:16:05.000000000","message":"Done","commit_id":"27d42bef1a0b0bb705e6b006e6086559f9372045"}],"releasenotes/notes/set-clock-prior-to-poweroff-af6ec210aad8b45a.yaml":[{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"250f0632b0540dd704fa26b11aa7436dae3999ab","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Adds a feature where IPA will utilize a ``[DEFAULT]ntp_server`` or"},{"line_number":5,"context_line":"    ``ipa-ntp-server`` kernel command line argument to cause the agent"},{"line_number":6,"context_line":"    to attempt to sync the clock to the NTP source. The agent also attempts"},{"line_number":7,"context_line":"    to sync the software clock to the NTP time source, and assert an udpate to"},{"line_number":8,"context_line":"    the hardware clock prior to powering the machine offline."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"1fa4df85_1720e847","line":7,"range":{"start_line":7,"start_character":69,"end_line":7,"end_character":75},"updated":"2020-03-04 15:01:20.000000000","message":"Nit: update","commit_id":"27d42bef1a0b0bb705e6b006e6086559f9372045"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"761c7f1f134ab191aa78adb467e12ef683f68a6b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Adds a feature where IPA will utilize a ``[DEFAULT]ntp_server`` or"},{"line_number":5,"context_line":"    ``ipa-ntp-server`` kernel command line argument to cause the agent"},{"line_number":6,"context_line":"    to attempt to sync the clock to the NTP source. The agent also attempts"},{"line_number":7,"context_line":"    to sync the software clock to the NTP time source, and assert an udpate to"},{"line_number":8,"context_line":"    the hardware clock prior to powering the machine offline."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"1fa4df85_7cd8ebed","line":7,"range":{"start_line":7,"start_character":69,"end_line":7,"end_character":75},"in_reply_to":"1fa4df85_1720e847","updated":"2020-03-07 17:16:05.000000000","message":"Done","commit_id":"27d42bef1a0b0bb705e6b006e6086559f9372045"},{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"250f0632b0540dd704fa26b11aa7436dae3999ab","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    ``ipa-ntp-server`` kernel command line argument to cause the agent"},{"line_number":6,"context_line":"    to attempt to sync the clock to the NTP source. The agent also attempts"},{"line_number":7,"context_line":"    to sync the software clock to the NTP time source, and assert an udpate to"},{"line_number":8,"context_line":"    the hardware clock prior to powering the machine offline."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"1fa4df85_d71570e6","line":8,"range":{"start_line":8,"start_character":53,"end_line":8,"end_character":60},"updated":"2020-03-04 15:01:20.000000000","message":"Nit: off?","commit_id":"27d42bef1a0b0bb705e6b006e6086559f9372045"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"761c7f1f134ab191aa78adb467e12ef683f68a6b","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    ``ipa-ntp-server`` kernel command line argument to cause the agent"},{"line_number":6,"context_line":"    to attempt to sync the clock to the NTP source. The agent also attempts"},{"line_number":7,"context_line":"    to sync the software clock to the NTP time source, and assert an udpate to"},{"line_number":8,"context_line":"    the hardware clock prior to powering the machine offline."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"1fa4df85_1ce3f7a5","line":8,"range":{"start_line":8,"start_character":53,"end_line":8,"end_character":60},"in_reply_to":"1fa4df85_d71570e6","updated":"2020-03-07 17:16:05.000000000","message":"Done","commit_id":"27d42bef1a0b0bb705e6b006e6086559f9372045"}]}
