https://www.terraform.io/docs/commands/output.html

        Note that this method does not conform to the (ret_code, out, err) return convention. To use
        the "output" command with the standard convention, call "output_cmd" instead of
        "output".

        :param args:   Positional arguments. There is one optional positional
                       argument NAME; if supplied, the returned output text
                       will be the json for a single named output value.
        :param kwargs: Named options, passed to the command. In addition, 
                          'full_value': If True, and NAME is provided, then
                                        the return value will be a dict with
                                        "value', 'type', and 'sensitive'
                                        properties.
        :return: None, if an error occured
                 Output value as a string, if NAME is provided and full_value
                    is False or not provided
                 Output value as a dict with 'value', 'sensitive', and 'type' if
                    NAME is provided and full_value is True.
                 dict of named dicts each with 'value', 'sensitive', and 'type',
                    if NAME is not provided

def output(self, *args, **kwargs):
        """
        https://www.terraform.io/docs/commands/output.html

        Note that this method does not conform to the (ret_code, out, err) return convention. To use
        the "output" command with the standard convention, call "output_cmd" instead of
        "output".

        :param args:   Positional arguments. There is one optional positional
                       argument NAME; if supplied, the returned output text
                       will be the json for a single named output value.
        :param kwargs: Named options, passed to the command. In addition, 
                          'full_value': If True, and NAME is provided, then
                                        the return value will be a dict with
                                        "value', 'type', and 'sensitive'
                                        properties.
        :return: None, if an error occured
                 Output value as a string, if NAME is provided and full_value
                    is False or not provided
                 Output value as a dict with 'value', 'sensitive', and 'type' if
                    NAME is provided and full_value is True.
                 dict of named dicts each with 'value', 'sensitive', and 'type',
                    if NAME is not provided
        """
        full_value = kwargs.pop('full_value', False)
        name_provided = (len(args) > 0)
        kwargs['json'] = IsFlagged
        if not kwargs.get('capture_output', True) is True:
          raise ValueError('capture_output is required for this method')

        ret, out, err = self.output_cmd(*args, **kwargs)

        if ret != 0:
            return None

        out = out.lstrip()

        value = json.loads(out)

        if name_provided and not full_value:
            value = value['value']

        return value