~axino/mojo/devel

« back to all changes in this revision

Viewing changes to mojo/juju/status.py

  • Committer: mergebot at canonical
  • Author(s): "Tom Haddon"
  • Date: 2021-04-15 12:46:23 UTC
  • mfrom: (585.1.3 error-on-deploy)
  • Revision ID: mergebot@juju-139df4-prod-is-toolbox-0.canonical.com-20210415124623-vkut2l891llb0wbd
Correctly deal with output from juju status, fixes lp#1902546

Reviewed-on: https://code.launchpad.net/~mthaddon/mojo/error-on-deploy/+merge/401190
Reviewed-by: Benjamin Allot <benjamin.allot@canonical.com>

Show diffs side-by-side

added added

removed removed

Lines of Context:
41
41
 
42
42
    cmd.extend(command)
43
43
    try:
44
 
        return subprocess.check_output(cmd, universal_newlines=True)
 
44
        return subprocess.check_output(cmd).decode("utf-8")
45
45
    except subprocess.CalledProcessError as cpe:
46
46
        if command_timeout is not None:
47
47
            # magic numbers here as per timeout(1)
202
202
        while True:
203
203
            check_and_wait_running = datetime.datetime.now() - check_and_wait_start
204
204
            if check_and_wait_running.total_seconds() > int(timeout):
205
 
                logging.error(
206
 
                    subprocess.check_output([juju_path, "status", "--format=tabular"], universal_newlines=True)
207
 
                )
 
205
                logging.error(subprocess.check_output([juju_path, "status", "--format=tabular"]).decode("utf-8"))
208
206
                raise JujuStatusError("Timed out checking Juju status for stable state")
209
207
            stable_state = []
210
208
            for check_info in checks.values():
213
211
                    states = check_function()
214
212
                    if self._error_check(states):
215
213
                        logging.error(
216
 
                            subprocess.check_output([juju_path, "status", "--format=tabular"], universal_newlines=True)
 
214
                            subprocess.check_output([juju_path, "status", "--format=tabular"]).decode("utf-8")
217
215
                        )
218
216
                        for unit in self._get_units_in_state("error"):
219
217
                            logging.error("Last 200 lines in %s unit log", unit)
227
225
                                        "tail",
228
226
                                        "-200",
229
227
                                        "/var/log/juju/unit-%s.log" % unit.replace("/", "-"),
230
 
                                    ],
231
 
                                    universal_newlines=True,
232
 
                                )
 
228
                                    ]
 
229
                                ).decode("utf-8")
233
230
                            )
234
231
                        raise JujuStatusError(
235
232
                            "Error in juju status on {}".format(", ".join(self._get_units_in_state("error")))