コード例 #1
0
 def test_no_fstab(self):
     """ Handle images which do not include an fstab. """
     self.assertFalse(os.path.exists(cc_mounts.FSTAB_PATH))
     fstab_expected_content = ('%s\tnone\tswap\tsw,comment=cloudconfig\t'
                               '0\t0\n' % (self.swap_path, ))
     cc_mounts.handle(None, {}, self.mock_cloud, self.mock_log, [])
     with open(cc_mounts.FSTAB_PATH, 'r') as fd:
         fstab_new_content = fd.read()
         self.assertEqual(fstab_expected_content, fstab_new_content)
コード例 #2
0
    def test_swap_integrity(self):
        '''Ensure that the swap file is correctly created and can
        swapon successfully. Fixing the corner case of:
        kernel: swapon: swapfile has holes'''

        fstab = '/swap.img swap swap defaults 0 0\n'

        with open(cc_mounts.FSTAB_PATH, 'w') as fd:
            fd.write(fstab)
        cc = {'swap': ['filename: /swap.img', 'size: 512', 'maxsize: 512']}
        cc_mounts.handle(None, cc, self.mock_cloud, self.mock_log, [])
コード例 #3
0
    def test_swap_integrity(self):
        """Ensure that the swap file is correctly created and can
        swapon successfully. Fixing the corner case of:
        kernel: swapon: swapfile has holes"""

        fstab = "/swap.img swap swap defaults 0 0\n"

        with open(cc_mounts.FSTAB_PATH, "w") as fd:
            fd.write(fstab)
        cc = {"swap": ["filename: /swap.img", "size: 512", "maxsize: 512"]}
        cc_mounts.handle(None, cc, self.mock_cloud, self.mock_log, [])
コード例 #4
0
ファイル: test_cc_mounts.py プロジェクト: rongz609/cloud-init
    def test_swap_creation_method_ext4(self, m_kernel_version,
                                       m_get_mount_info):
        m_kernel_version.return_value = (5, 14)
        m_get_mount_info.return_value = ["", "ext4"]

        cc_mounts.handle(None, self.cc, self.mock_cloud, self.mock_log, [])
        self.m_subp_subp.assert_has_calls([
            mock.call(["fallocate", "-l", "0M", self.swap_path], capture=True),
            mock.call(["mkswap", self.swap_path]),
            mock.call(["swapon", "-a"]),
        ])
コード例 #5
0
    def test_swap_creation_method_ext4(self, m_kernel_version,
                                       m_get_mount_info):
        m_kernel_version.return_value = (5, 14)
        m_get_mount_info.return_value = ["", "ext4"]

        cc_mounts.handle(None, self.cc, self.mock_cloud, self.mock_log, [])
        self.m_subp_subp.assert_has_calls([
            mock.call(['fallocate', '-l', '0M', self.swap_path], capture=True),
            mock.call(['mkswap', self.swap_path]),
            mock.call(['swapon', '-a'])
        ])
コード例 #6
0
    def test_swap_creation_method_btrfs(self, m_kernel_version,
                                        m_get_mount_info):
        m_kernel_version.return_value = (4, 20)
        m_get_mount_info.return_value = ["", "btrfs"]

        cc_mounts.handle(None, self.cc, self.mock_cloud, self.mock_log, [])
        self.m_subp_subp.assert_has_calls([
            mock.call([
                'dd', 'if=/dev/zero', 'of=' + self.swap_path, 'bs=1M',
                'count=0'
            ],
                      capture=True),
            mock.call(['mkswap', self.swap_path]),
            mock.call(['swapon', '-a'])
        ])
コード例 #7
0
    def test_fstab_same_swap_device_already_configured(self):
        '''Ensure that cloud-init will not add a swap device if the same
        device already exists in /etc/fstab.'''

        fstab_original_content = '%s swap swap defaults 0 0\n' % (
            self.swap_path, )
        fstab_expected_content = fstab_original_content

        with open(cc_mounts.FSTAB_PATH, 'w') as fd:
            fd.write(fstab_original_content)

        cc_mounts.handle(None, {}, self.mock_cloud, self.mock_log, [])

        with open(cc_mounts.FSTAB_PATH, 'r') as fd:
            fstab_new_content = fd.read()
            self.assertEqual(fstab_expected_content, fstab_new_content)
コード例 #8
0
    def test_fstab_no_swap_device(self):
        '''Ensure that cloud-init adds a discovered swap partition
        to /etc/fstab.'''

        fstab_original_content = ''
        fstab_expected_content = ('%s\tnone\tswap\tsw,comment=cloudconfig\t'
                                  '0\t0\n' % (self.swap_path, ))

        with open(cc_mounts.FSTAB_PATH, 'w') as fd:
            fd.write(fstab_original_content)

        cc_mounts.handle(None, {}, self.mock_cloud, self.mock_log, [])

        with open(cc_mounts.FSTAB_PATH, 'r') as fd:
            fstab_new_content = fd.read()
            self.assertEqual(fstab_expected_content, fstab_new_content)
コード例 #9
0
    def test_fstab_same_swap_device_already_configured(self):
        '''Ensure that cloud-init will not add a swap device if the same
        device already exists in /etc/fstab.'''

        fstab_original_content = '%s swap swap defaults 0 0\n' % (
            self.swap_path,)
        fstab_expected_content = fstab_original_content

        with open(cc_mounts.FSTAB_PATH, 'w') as fd:
            fd.write(fstab_original_content)

        cc_mounts.handle(None, {}, self.mock_cloud, self.mock_log, [])

        with open(cc_mounts.FSTAB_PATH, 'r') as fd:
            fstab_new_content = fd.read()
            self.assertEqual(fstab_expected_content, fstab_new_content)
コード例 #10
0
 def test_no_change_fstab_sets_needs_mount_all(self):
     '''verify unchanged fstab entries are mounted if not call mount -a'''
     fstab_original_content = (
         'LABEL=cloudimg-rootfs / ext4 defaults 0 0\n'
         'LABEL=UEFI /boot/efi vfat defaults 0 0\n'
         '/dev/vdb /mnt auto defaults,noexec,comment=cloudconfig 0 2\n')
     fstab_expected_content = fstab_original_content
     cc = {'mounts': [['/dev/vdb', '/mnt', 'auto', 'defaults,noexec']]}
     with open(cc_mounts.FSTAB_PATH, 'w') as fd:
         fd.write(fstab_original_content)
     with open(cc_mounts.FSTAB_PATH, 'r') as fd:
         fstab_new_content = fd.read()
         self.assertEqual(fstab_expected_content, fstab_new_content)
     cc_mounts.handle(None, cc, self.mock_cloud, self.mock_log, [])
     self.m_util_subp.assert_has_calls([
         mock.call(['mount', '-a']),
         mock.call(['systemctl', 'daemon-reload'])
     ])
コード例 #11
0
    def test_fstab_alternate_swap_device_already_configured(self):
        '''Ensure that cloud-init will add a discovered swap device to
        /etc/fstab even when there exists a swap definition on another
        device.'''

        fstab_original_content = '/dev/sdc1 swap swap defaults 0 0\n'
        fstab_expected_content = (fstab_original_content +
                                  '%s\tnone\tswap\tsw,comment=cloudconfig\t'
                                  '0\t0\n' % (self.swap_path, ))

        with open(cc_mounts.FSTAB_PATH, 'w') as fd:
            fd.write(fstab_original_content)

        cc_mounts.handle(None, {}, self.mock_cloud, self.mock_log, [])

        with open(cc_mounts.FSTAB_PATH, 'r') as fd:
            fstab_new_content = fd.read()
            self.assertEqual(fstab_expected_content, fstab_new_content)
コード例 #12
0
    def test_fstab_no_swap_device(self):
        '''Ensure that cloud-init adds a discovered swap partition
        to /etc/fstab.'''

        fstab_original_content = ''
        fstab_expected_content = (
            '%s\tnone\tswap\tsw,comment=cloudconfig\t'
            '0\t0\n' % (self.swap_path,)
        )

        with open(cc_mounts.FSTAB_PATH, 'w') as fd:
            fd.write(fstab_original_content)

        cc_mounts.handle(None, {}, self.mock_cloud, self.mock_log, [])

        with open(cc_mounts.FSTAB_PATH, 'r') as fd:
            fstab_new_content = fd.read()
            self.assertEqual(fstab_expected_content, fstab_new_content)
コード例 #13
0
ファイル: test_cc_mounts.py プロジェクト: rongz609/cloud-init
 def test_no_change_fstab_sets_needs_mount_all(self):
     """verify unchanged fstab entries are mounted if not call mount -a"""
     fstab_original_content = (
         "LABEL=cloudimg-rootfs / ext4 defaults 0 0\n"
         "LABEL=UEFI /boot/efi vfat defaults 0 0\n"
         "/dev/vdb /mnt auto defaults,noexec,comment=cloudconfig 0 2\n")
     fstab_expected_content = fstab_original_content
     cc = {"mounts": [["/dev/vdb", "/mnt", "auto", "defaults,noexec"]]}
     with open(cc_mounts.FSTAB_PATH, "w") as fd:
         fd.write(fstab_original_content)
     with open(cc_mounts.FSTAB_PATH, "r") as fd:
         fstab_new_content = fd.read()
         self.assertEqual(fstab_expected_content, fstab_new_content)
     cc_mounts.handle(None, cc, self.mock_cloud, self.mock_log, [])
     self.m_subp_subp.assert_has_calls([
         mock.call(["mount", "-a"]),
         mock.call(["systemctl", "daemon-reload"]),
     ])
コード例 #14
0
 def test_no_change_fstab_sets_needs_mount_all(self):
     '''verify unchanged fstab entries are mounted if not call mount -a'''
     fstab_original_content = (
         'LABEL=cloudimg-rootfs / ext4 defaults 0 0\n'
         'LABEL=UEFI /boot/efi vfat defaults 0 0\n'
         '/dev/vdb /mnt auto defaults,noexec,comment=cloudconfig 0 2\n'
     )
     fstab_expected_content = fstab_original_content
     cc = {'mounts': [
              ['/dev/vdb', '/mnt', 'auto', 'defaults,noexec']]}
     with open(cc_mounts.FSTAB_PATH, 'w') as fd:
         fd.write(fstab_original_content)
     with open(cc_mounts.FSTAB_PATH, 'r') as fd:
         fstab_new_content = fd.read()
         self.assertEqual(fstab_expected_content, fstab_new_content)
     cc_mounts.handle(None, cc, self.mock_cloud, self.mock_log, [])
     self.m_util_subp.assert_has_calls([
         mock.call(['mount', '-a']),
         mock.call(['systemctl', 'daemon-reload'])])
コード例 #15
0
    def test_fstab_alternate_swap_device_already_configured(self):
        '''Ensure that cloud-init will add a discovered swap device to
        /etc/fstab even when there exists a swap definition on another
        device.'''

        fstab_original_content = '/dev/sdc1 swap swap defaults 0 0\n'
        fstab_expected_content = (
            fstab_original_content +
            '%s\tnone\tswap\tsw,comment=cloudconfig\t'
            '0\t0\n' % (self.swap_path,)
        )

        with open(cc_mounts.FSTAB_PATH, 'w') as fd:
            fd.write(fstab_original_content)

        cc_mounts.handle(None, {}, self.mock_cloud, self.mock_log, [])

        with open(cc_mounts.FSTAB_PATH, 'r') as fd:
            fstab_new_content = fd.read()
            self.assertEqual(fstab_expected_content, fstab_new_content)
コード例 #16
0
ファイル: test_cc_mounts.py プロジェクト: rongz609/cloud-init
    def test_swap_creation_method_btrfs(self, m_kernel_version,
                                        m_get_mount_info):
        m_kernel_version.return_value = (4, 20)
        m_get_mount_info.return_value = ["", "btrfs"]

        cc_mounts.handle(None, self.cc, self.mock_cloud, self.mock_log, [])
        self.m_subp_subp.assert_has_calls([
            mock.call(
                [
                    "dd",
                    "if=/dev/zero",
                    "of=" + self.swap_path,
                    "bs=1M",
                    "count=0",
                ],
                capture=True,
            ),
            mock.call(["mkswap", self.swap_path]),
            mock.call(["swapon", "-a"]),
        ])