Merge ~mwhudson/curtin:write-local-image-to-disk into curtin:master

Proposed by Michael Hudson-Doyle
Status: Merged
Approved by: Michael Hudson-Doyle
Approved revision: 0f7f28b7a447df889bb10cb2b21bdbbbaef93f43
Merge reported by: Server Team CI bot
Merged at revision: not available
Proposed branch: ~mwhudson/curtin:write-local-image-to-disk
Merge into: curtin:master
Diff against target: 110 lines (+56/-20)
2 files modified
curtin/commands/block_meta.py (+17/-11)
tests/unittests/test_commands_block_meta.py (+39/-9)
Reviewer Review Type Date Requested Status
Server Team CI bot continuous-integration Approve
Dan Bungert Approve
Review via email: mp+446014@code.launchpad.net

Commit message

support dd-raw:file:// urls

Description of the change

I was quite angry when I wrote this, in case you were wondering.

To post a comment you must log in.
Revision history for this message
Server Team CI bot (server-team-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Server Team CI bot (server-team-bot) wrote :
review: Approve (continuous-integration)
Revision history for this message
Dan Bungert (dbungert) :
review: Approve
Revision history for this message
Server Team CI bot (server-team-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Server Team CI bot (server-team-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Server Team CI bot (server-team-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Server Team CI bot (server-team-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Server Team CI bot (server-team-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Server Team CI bot (server-team-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Michael Hudson-Doyle (mwhudson) wrote :

Setting status back to in review until CI is fixed.

Revision history for this message
Server Team CI bot (server-team-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Server Team CI bot (server-team-bot) :
review: Approve (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/curtin/commands/block_meta.py b/curtin/commands/block_meta.py
2index 34acd75..421b048 100644
3--- a/curtin/commands/block_meta.py
4+++ b/curtin/commands/block_meta.py
5@@ -146,20 +146,26 @@ def write_image_to_disk(source, dev):
6 """
7 LOG.info('writing image to disk %s, %s', source, dev)
8 extractor = {
9- 'dd-tgz': '|tar -xOzf -',
10- 'dd-txz': '|tar -xOJf -',
11- 'dd-tbz': '|tar -xOjf -',
12- 'dd-tar': '|smtar -xOf -',
13- 'dd-bz2': '|bzcat',
14- 'dd-gz': '|zcat',
15- 'dd-xz': '|xzcat',
16+ 'dd-tgz': '| tar -xOzf -',
17+ 'dd-txz': '| tar -xOJf -',
18+ 'dd-tbz': '| tar -xOjf -',
19+ 'dd-tar': '| smtar -xOf -',
20+ 'dd-bz2': '| bzcat',
21+ 'dd-gz': '| zcat',
22+ 'dd-xz': '| xzcat',
23 'dd-raw': ''
24 }
25+ uri = source['uri']
26+ if uri.startswith('file://'):
27+ uri = uri[len('file://'):]
28+ fetch = 'cat "$1"'
29+ else:
30+ fetch = 'wget "$1" --progress=dot:mega -O - '
31 (devname, devnode) = block.get_dev_name_entry(dev)
32- util.subp(args=['sh', '-c',
33- ('wget "$1" --progress=dot:mega -O - ' +
34- extractor[source['type']] + '| dd bs=4M of="$2"'),
35- '--', source['uri'], devnode])
36+ util.subp(args=[
37+ 'sh', '-c',
38+ fetch + extractor[source['type']] + ' | dd bs=4M of="$2"',
39+ '--', uri, devnode])
40 util.subp(['partprobe', devnode])
41
42 for i in range(3):
43diff --git a/tests/unittests/test_commands_block_meta.py b/tests/unittests/test_commands_block_meta.py
44index 5599886..f1bc18c 100644
45--- a/tests/unittests/test_commands_block_meta.py
46+++ b/tests/unittests/test_commands_block_meta.py
47@@ -444,11 +444,13 @@ class TestBlockMetaSimple(CiTestCase):
48
49 block_meta.write_image_to_disk(source, devname)
50
51- wget = ['sh', '-c',
52- 'wget "$1" --progress=dot:mega -O - |xzcat| dd bs=4M of="$2"',
53- '--', source['uri'], devnode]
54+ write = [
55+ 'sh', '-c',
56+ 'wget "$1" --progress=dot:mega -O - | xzcat | dd bs=4M of="$2"',
57+ '--', source['uri'], devnode,
58+ ]
59 self.mock_block_get_dev_name_entry.assert_called_with(devname)
60- self.mock_subp.assert_has_calls([call(args=wget),
61+ self.mock_subp.assert_has_calls([call(args=write),
62 call(['partprobe', devnode]),
63 call(['udevadm', 'trigger', devnode]),
64 call(['udevadm', 'settle']),
65@@ -468,12 +470,40 @@ class TestBlockMetaSimple(CiTestCase):
66
67 block_meta.write_image_to_disk(source, devname)
68
69- wget = ['sh', '-c',
70- 'wget "$1" --progress=dot:mega -O - |'
71- 'tar -xOzf -| dd bs=4M of="$2"',
72- '--', source['uri'], devnode]
73+ write = [
74+ 'sh', '-c',
75+ 'wget "$1" --progress=dot:mega -O - | '
76+ 'tar -xOzf - | dd bs=4M of="$2"',
77+ '--', source['uri'], devnode,
78+ ]
79+ self.mock_block_get_dev_name_entry.assert_called_with(devname)
80+ self.mock_subp.assert_has_calls([call(args=write),
81+ call(['partprobe', devnode]),
82+ call(['udevadm', 'trigger', devnode]),
83+ call(['udevadm', 'settle']),
84+ call(['udevadm', 'settle'])])
85+ paths = ["curtin", "system-data/var/lib/snapd", "snaps"]
86+ self.mock_block_get_root_device.assert_called_with([devname],
87+ paths=paths)
88+
89+ def test_write_image_to_disk_ddrawfile(self):
90+ source = {
91+ 'type': 'dd-raw',
92+ 'uri': 'file:///pc.img'
93+ }
94+ devname = "fakedisk1p1"
95+ devnode = "/dev/" + devname
96+ self.mock_block_get_dev_name_entry.return_value = (devname, devnode)
97+
98+ block_meta.write_image_to_disk(source, devname)
99+
100+ write = [
101+ 'sh', '-c',
102+ 'cat "$1" | dd bs=4M of="$2"',
103+ '--', '/pc.img', devnode,
104+ ]
105 self.mock_block_get_dev_name_entry.assert_called_with(devname)
106- self.mock_subp.assert_has_calls([call(args=wget),
107+ self.mock_subp.assert_has_calls([call(args=write),
108 call(['partprobe', devnode]),
109 call(['udevadm', 'trigger', devnode]),
110 call(['udevadm', 'settle']),

Subscribers

People subscribed via source and target branches