~citrix-openstack/nova/xenapi-netinject-prop

« back to all changes in this revision

Viewing changes to nova/virt/disk.py

  • Committer: Salvatore Orlando
  • Date: 2011-03-10 11:13:01 UTC
  • mfrom: (669.1.112 nova)
  • Revision ID: salvatore.orlando@eu.citrix.com-20110310111301-7gin30vxpwa1ajfx
Merge trunk
Conflicts solved

Show diffs side-by-side

added added

removed removed

Lines of Context:
54
54
    file_size = os.path.getsize(image)
55
55
    if file_size >= size:
56
56
        return
57
 
    utils.execute('truncate -s %s %s' % (size, image))
 
57
    utils.execute('truncate', '-s', size, image)
58
58
    # NOTE(vish): attempts to resize filesystem
59
 
    utils.execute('e2fsck -fp %s' % image, check_exit_code=False)
60
 
    utils.execute('resize2fs %s' % image, check_exit_code=False)
 
59
    utils.execute('e2fsck', '-fp', mage, check_exit_code=False)
 
60
    utils.execute('resize2fs', image, check_exit_code=False)
61
61
 
62
62
 
63
63
def inject_data(image, key=None, net=None, partition=None, nbd=False):
73
73
    try:
74
74
        if not partition is None:
75
75
            # create partition
76
 
            out, err = utils.execute('sudo kpartx -a %s' % device)
 
76
            out, err = utils.execute('sudo', 'kpartx', '-a', device)
77
77
            if err:
78
78
                raise exception.Error(_('Failed to load partition: %s') % err)
79
79
            mapped_device = '/dev/mapper/%sp%s' % (device.split('/')[-1],
89
89
                                  mapped_device)
90
90
 
91
91
        # Configure ext2fs so that it doesn't auto-check every N boots
92
 
        out, err = utils.execute('sudo tune2fs -c 0 -i 0 %s' % mapped_device)
 
92
        out, err = utils.execute('sudo', 'tune2fs',
 
93
                                 '-c', 0, '-i', 0, mapped_device)
93
94
 
94
95
        tmpdir = tempfile.mkdtemp()
95
96
        try:
96
97
            # mount loopback to dir
97
98
            out, err = utils.execute(
98
 
                    'sudo mount %s %s' % (mapped_device, tmpdir))
 
99
                    'sudo', 'mount', mapped_device, tmpdir)
99
100
            if err:
100
101
                raise exception.Error(_('Failed to mount filesystem: %s')
101
102
                                      % err)
104
105
                inject_data_into_fs(tmpdir, key, net, utils.execute)
105
106
            finally:
106
107
                # unmount device
107
 
                utils.execute('sudo umount %s' % mapped_device)
 
108
                utils.execute('sudo', 'umount', mapped_device)
108
109
        finally:
109
110
            # remove temporary directory
110
 
            utils.execute('rmdir %s' % tmpdir)
 
111
            utils.execute('rmdir', tmpdir)
111
112
            if not partition is None:
112
113
                # remove partitions
113
 
                utils.execute('sudo kpartx -d %s' % device)
 
114
                utils.execute('sudo', 'kpartx', '-d', device)
114
115
    finally:
115
116
        _unlink_device(device, nbd)
116
117
 
119
120
    """Link image to device using loopback or nbd"""
120
121
    if nbd:
121
122
        device = _allocate_device()
122
 
        utils.execute('sudo qemu-nbd -c %s %s' % (device, image))
 
123
        utils.execute('sudo', 'qemu-nbd', '-c', device, image)
123
124
        # NOTE(vish): this forks into another process, so give it a chance
124
125
        #             to set up before continuuing
125
126
        for i in xrange(FLAGS.timeout_nbd):
128
129
            time.sleep(1)
129
130
        raise exception.Error(_('nbd device %s did not show up') % device)
130
131
    else:
131
 
        out, err = utils.execute('sudo losetup --find --show %s' % image)
 
132
        out, err = utils.execute('sudo', 'losetup', '--find', '--show', image)
132
133
        if err:
133
134
            raise exception.Error(_('Could not attach image to loopback: %s')
134
135
                                  % err)
138
139
def _unlink_device(device, nbd):
139
140
    """Unlink image from device using loopback or nbd"""
140
141
    if nbd:
141
 
        utils.execute('sudo qemu-nbd -d %s' % device)
 
142
        utils.execute('sudo', 'qemu-nbd', '-d', device)
142
143
        _free_device(device)
143
144
    else:
144
 
        utils.execute('sudo losetup --detach %s' % device)
 
145
        utils.execute('sudo', 'losetup', '--detach', device)
145
146
 
146
147
 
147
148
_DEVICES = ['/dev/nbd%s' % i for i in xrange(FLAGS.max_nbd_devices)]
204
205
    fs is the path to the base of the filesystem into which to inject the key.
205
206
    """
206
207
    sshdir = os.path.join(fs, 'root', '.ssh')
207
 
    utils.execute('sudo mkdir -p %s' % sshdir)  # existing dir doesn't matter
208
 
    utils.execute('sudo chown root %s' % sshdir)
209
 
    utils.execute('sudo chmod 700 %s' % sshdir)
 
208
    utils.execute('sudo', 'mkdir', '-p', sshdir)  # existing dir doesn't matter
 
209
    utils.execute('sudo', 'chown', 'root', sshdir)
 
210
    utils.execute('sudo', 'chmod', '700', sshdir)
210
211
    keyfile = os.path.join(sshdir, 'authorized_keys')
211
 
    utils.execute('sudo tee -a %s' % keyfile, '\n' + key.strip() + '\n')
 
212
    utils.execute('sudo', 'tee', '-a', keyfile,
 
213
            process_input='\n' + key.strip() + '\n')
212
214
 
213
215
 
214
216
def _inject_net_into_fs(net, fs, execute=None):
217
219
    net is the contents of /etc/network/interfaces.
218
220
    """
219
221
    netdir = os.path.join(os.path.join(fs, 'etc'), 'network')
220
 
    utils.execute('sudo mkdir -p %s' % netdir)  # existing dir doesn't matter
221
 
    utils.execute('sudo chown root:root %s' % netdir)
222
 
    utils.execute('sudo chmod 755 %s' % netdir)
 
222
    utils.execute('sudo', 'mkdir', '-p', netdir)  # existing dir doesn't matter
 
223
    utils.execute('sudo', 'chown', 'root:root', netdir)
 
224
    utils.execute('sudo', 'chmod', 755, netdir)
223
225
    netfile = os.path.join(netdir, 'interfaces')
224
 
    utils.execute('sudo tee %s' % netfile, net)
 
226
    utils.execute('sudo', 'tee', netfile, net)