use logging for multiple levels of verbosity
Signed-off-by: Doug Hellmann <doug@doughellmann.com>
This commit is contained in:
parent
e9f52ca2d7
commit
69a15ce38e
|
@ -74,5 +74,20 @@ def main():
|
||||||
|
|
||||||
args = parser.parse_args(sys.argv[1:])
|
args = parser.parse_args(sys.argv[1:])
|
||||||
|
|
||||||
return args.func(config, args)
|
cloud_config = config.get_one_cloud(options=(args, []))
|
||||||
|
cloud = shade.OpenStackCloud(cloud_config=cloud_config)
|
||||||
|
|
||||||
|
root_logger = logging.getLogger('')
|
||||||
|
root_logger.setLevel(logging.DEBUG)
|
||||||
|
console = logging.StreamHandler(sys.stderr)
|
||||||
|
console_level = {
|
||||||
|
0: logging.WARNING,
|
||||||
|
1: logging.INFO,
|
||||||
|
2: logging.DEBUG,
|
||||||
|
}.get(args.verbose_level, logging.DEBUG)
|
||||||
|
console.setLevel(console_level)
|
||||||
|
formatter = logging.Formatter('[%(asctime)s] %(message)s')
|
||||||
|
console.setFormatter(formatter)
|
||||||
|
root_logger.addHandler(console)
|
||||||
|
|
||||||
return args.func(cloud, config, args)
|
return args.func(cloud, config, args)
|
||||||
|
|
|
@ -12,10 +12,13 @@
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
|
import logging
|
||||||
import os.path
|
import os.path
|
||||||
|
|
||||||
import progressbar
|
import progressbar
|
||||||
|
|
||||||
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class ProgressBarDownloader:
|
class ProgressBarDownloader:
|
||||||
|
|
||||||
|
@ -61,6 +64,7 @@ class Downloader:
|
||||||
self._tasks = []
|
self._tasks = []
|
||||||
|
|
||||||
def _add(self, resource_type, resource, output_path):
|
def _add(self, resource_type, resource, output_path):
|
||||||
|
LOG.info('scheduling download of %s %s', resource_type, resource.name)
|
||||||
self._tasks.append((resource_type, resource, output_path))
|
self._tasks.append((resource_type, resource, output_path))
|
||||||
|
|
||||||
def add_image(self, image):
|
def add_image(self, image):
|
||||||
|
@ -70,20 +74,27 @@ class Downloader:
|
||||||
return base
|
return base
|
||||||
|
|
||||||
def add_volume(self, volume):
|
def add_volume(self, volume):
|
||||||
print('DO NOT KNOW HOW TO SAVE VOLUME STATE YET', volume.name)
|
LOG.error('DO NOT KNOW HOW TO SAVE VOLUME STATE YET %s', volume.name)
|
||||||
|
|
||||||
def start(self):
|
def start(self):
|
||||||
# FIXME(dhellmann): start downloads in a separate thread or process
|
# FIXME(dhellmann): start downloads in a separate thread or process
|
||||||
for resource_type, resource, output_path in self._tasks:
|
for resource_type, resource, output_path in self._tasks:
|
||||||
if os.path.exists(output_path):
|
if os.path.exists(output_path):
|
||||||
print(
|
LOG.info(
|
||||||
'output file {} already exists, skipping download'.format(
|
'output file %s already exists, skipping download',
|
||||||
output_path))
|
output_path,
|
||||||
|
)
|
||||||
continue
|
continue
|
||||||
if resource_type == 'image':
|
if resource_type == 'image':
|
||||||
print('downloading image {} to {}'.format(
|
LOG.info(
|
||||||
|
'downloading image %s to %s',
|
||||||
resource.name,
|
resource.name,
|
||||||
output_path,
|
output_path,
|
||||||
))
|
)
|
||||||
with ProgressBarDownloader(output_path, resource.size) as out:
|
with ProgressBarDownloader(output_path, resource.size) as out:
|
||||||
self.cloud.download_image(resource.name, output_file=out)
|
self.cloud.download_image(resource.name, output_file=out)
|
||||||
|
LOG.info(
|
||||||
|
'downloaded image %s to %s',
|
||||||
|
resource.name,
|
||||||
|
output_path,
|
||||||
|
)
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
|
import logging
|
||||||
import os.path
|
import os.path
|
||||||
|
|
||||||
import yaml
|
import yaml
|
||||||
|
@ -20,6 +21,8 @@ from aerostat import download
|
||||||
from aerostat import resolver
|
from aerostat import resolver
|
||||||
from aerostat import resources
|
from aerostat import resources
|
||||||
|
|
||||||
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
def export_data(cloud, config, args):
|
def export_data(cloud, config, args):
|
||||||
output_path = args.output_path
|
output_path = args.output_path
|
||||||
|
@ -55,6 +58,6 @@ def export_data(cloud, config, args):
|
||||||
playbook_filename = os.path.join(output_path, 'playbook.yml')
|
playbook_filename = os.path.join(output_path, 'playbook.yml')
|
||||||
with open(playbook_filename, 'w', encoding='utf-8') as fd:
|
with open(playbook_filename, 'w', encoding='utf-8') as fd:
|
||||||
yaml.dump(playbook, fd, default_flow_style=False, explicit_start=True)
|
yaml.dump(playbook, fd, default_flow_style=False, explicit_start=True)
|
||||||
print('wrote playbook to {}'.format(playbook_filename))
|
LOG.info('wrote playbook to %s', playbook_filename)
|
||||||
|
|
||||||
downloader.start()
|
downloader.start()
|
||||||
|
|
|
@ -12,11 +12,16 @@
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
import munch
|
import munch
|
||||||
|
|
||||||
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
def load(filename):
|
def load(filename):
|
||||||
"Read the file and return the parsed data in a consistent format."
|
"Read the file and return the parsed data in a consistent format."
|
||||||
|
LOG.info('loading resource list from %s', filename)
|
||||||
|
|
||||||
# Ensure the return value has a basic set of keys representing the
|
# Ensure the return value has a basic set of keys representing the
|
||||||
# types of resources we expect to find.
|
# types of resources we expect to find.
|
||||||
|
|
Loading…
Reference in New Issue