# pylint: disable=no-member
import logging
import subprocess
import os
import attr
from ..factory import target_factory
from ..resource.udev import USBMassStorage, USBSDMuxDevice
from ..resource.remote import NetworkUSBMassStorage, NetworkUSBSDMuxDevice
from ..step import step
from ..util.managedfile import ManagedFile
from .common import Driver
[docs]@target_factory.reg_driver
@attr.s(cmp=False)
class NetworkUSBStorageDriver(Driver):
bindings = {
"storage": {
USBMassStorage,
NetworkUSBMassStorage,
USBSDMuxDevice,
NetworkUSBSDMuxDevice
},
}
[docs] def __attrs_post_init__(self):
super().__attrs_post_init__()
self.logger = logging.getLogger("{}:{}".format(self, self.target))
[docs] def on_activate(self):
pass
[docs] def on_deactivate(self):
pass
[docs] @step(args=['filename'])
def write_image(self, filename):
mf = ManagedFile(filename, self.storage)
mf.sync_to_resource()
self.logger.info("pwd: %s", os.getcwd())
args = [
"dd",
"if={}".format(mf.get_remote_path()),
"of={} status=progress bs=4M conv=fdatasync"
.format(self.storage.path)
]
subprocess.check_call(
self.storage.command_prefix + args
)
[docs] @step(result=True)
def get_size(self):
args = ["cat", "/sys/class/block/{}/size" % self.storage.path[5:]]
size = subprocess.check_output(self.storage.command_prefix + args)
return int(size)