コード例 #1
0
    def get_mount_info(self, mount, device, uuids):

            mount_size = get_mount_size(mount)

            # _udevadm_uuid is a fallback for versions of lsblk <= 2.23 that don't have --paths
            # see _run_lsblk() above
            # https://github.com/ansible/ansible/issues/36077
            uuid = uuids.get(device, self._udevadm_uuid(device))

            return mount_size, uuid
コード例 #2
0
    def get_mount_facts(self):
        mount_facts = {}

        mount_facts['mounts'] = []

        mounts = []

        # AIX does not have mtab but mount command is only source of info (or to use
        # api calls to get same info)
        mount_path = self.module.get_bin_path('mount')
        rc, mount_out, err = self.module.run_command(mount_path)
        if mount_out:
            for line in mount_out.split('\n'):
                fields = line.split()
                if len(fields) != 0 and fields[
                        0] != 'node' and fields[0][0] != '-' and re.match(
                            '^/.*|^[a-zA-Z].*|^[0-9].*', fields[0]):
                    if re.match('^/', fields[0]):
                        # normal mount
                        mount = fields[1]
                        mount_info = {
                            'mount': mount,
                            'device': fields[0],
                            'fstype': fields[2],
                            'options': fields[6],
                            'time':
                            '%s %s %s' % (fields[3], fields[4], fields[5])
                        }
                        mount_info.update(get_mount_size(mount))
                    else:
                        # nfs or cifs based mount
                        # in case of nfs if no mount options are provided on command line
                        # add into fields empty string...
                        if len(fields) < 8:
                            fields.append("")

                        mount_info = {
                            'mount': fields[2],
                            'device': '%s:%s' % (fields[0], fields[1]),
                            'fstype': fields[3],
                            'options': fields[7],
                            'time':
                            '%s %s %s' % (fields[4], fields[5], fields[6])
                        }

                    mounts.append(mount_info)

        mount_facts['mounts'] = mounts

        return mount_facts
コード例 #3
0
    def get_mount_facts(self):
        mount_facts = {}

        mount_facts['mounts'] = []

        bind_mounts = self._find_bind_mounts()
        uuids = self._lsblk_uuid()
        mtab_entries = self._mtab_entries()

        mounts = []
        for fields in mtab_entries:
            device, mount, fstype, options = fields[0], fields[1], fields[
                2], fields[3]

            if not device.startswith('/') and ':/' not in device:
                continue

            if fstype == 'none':
                continue

            mount_statvfs_info = get_mount_size(mount)

            if mount in bind_mounts:
                # only add if not already there, we might have a plain /etc/mtab
                if not self.MTAB_BIND_MOUNT_RE.match(options):
                    options += ",bind"

            # _udevadm_uuid is a fallback for versions of lsblk <= 2.23 that don't have --paths
            # see _run_lsblk() above
            # https://github.com/ansible/ansible/issues/36077
            uuid = uuids.get(device, self._udevadm_uuid(device))

            mount_info = {
                'mount': mount,
                'device': device,
                'fstype': fstype,
                'options': options,
                'uuid': uuid
            }

            mount_info.update(mount_statvfs_info)

            mounts.append(mount_info)

        mount_facts['mounts'] = mounts

        return mount_facts
コード例 #4
0
ファイル: linux.py プロジェクト: awiddersheim/ansible
    def get_mount_facts(self):
        mount_facts = {}

        mount_facts['mounts'] = []

        bind_mounts = self._find_bind_mounts()
        uuids = self._lsblk_uuid()
        mtab_entries = self._mtab_entries()

        mounts = []
        for fields in mtab_entries:
            device, mount, fstype, options = fields[0], fields[1], fields[2], fields[3]

            if not device.startswith('/') and ':/' not in device:
                continue

            if fstype == 'none':
                continue

            mount_statvfs_info = get_mount_size(mount)

            if mount in bind_mounts:
                # only add if not already there, we might have a plain /etc/mtab
                if not self.MTAB_BIND_MOUNT_RE.match(options):
                    options += ",bind"

            # _udevadm_uuid is a fallback for versions of lsblk <= 2.23 that don't have --paths
            # see _run_lsblk() above
            # https://github.com/ansible/ansible/issues/36077
            uuid = uuids.get(device, self._udevadm_uuid(device))

            mount_info = {'mount': mount,
                          'device': device,
                          'fstype': fstype,
                          'options': options,
                          'uuid': uuid}

            mount_info.update(mount_statvfs_info)

            mounts.append(mount_info)

        mount_facts['mounts'] = mounts

        return mount_facts
コード例 #5
0
ファイル: freebsd.py プロジェクト: awiddersheim/ansible
    def get_mount_facts(self):
        mount_facts = {}

        mount_facts['mounts'] = []
        fstab = get_file_content('/etc/fstab')
        if fstab:
            for line in fstab.splitlines():
                if line.startswith('#') or line.strip() == '':
                    continue
                fields = re.sub(r'\s+', ' ', line).split()
                mount_statvfs_info = get_mount_size(fields[1])
                mount_info = {'mount': fields[1],
                              'device': fields[0],
                              'fstype': fields[2],
                              'options': fields[3]}
                mount_info.update(mount_statvfs_info)
                mount_facts['mounts'].append(mount_info)

        return mount_facts
コード例 #6
0
ファイル: linux.py プロジェクト: yoraer/ansible
    def get_mount_facts(self):
        mount_facts = {}

        mount_facts['mounts'] = []

        bind_mounts = self._find_bind_mounts()
        uuids = self._lsblk_uuid()
        mtab_entries = self._mtab_entries()

        mounts = []
        for fields in mtab_entries:
            device, mount, fstype, options = fields[0], fields[1], fields[
                2], fields[3]

            if not device.startswith('/') and ':/' not in device:
                continue

            if fstype == 'none':
                continue

            size_total, size_available = get_mount_size(mount)

            if mount in bind_mounts:
                # only add if not already there, we might have a plain /etc/mtab
                if not self.MTAB_BIND_MOUNT_RE.match(options):
                    options += ",bind"

            mount_info = {
                'mount': mount,
                'device': device,
                'fstype': fstype,
                'options': options,
                # statvfs data
                'size_total': size_total,
                'size_available': size_available,
                'uuid': uuids.get(device, 'N/A')
            }

            mounts.append(mount_info)

        mount_facts['mounts'] = mounts

        return mount_facts
コード例 #7
0
    def get_mount_facts(self):
        mount_facts = {}

        mount_facts['mounts'] = []
        fstab = get_file_content('/etc/fstab')
        if fstab:
            for line in fstab.splitlines():
                if line.startswith('#') or line.strip() == '':
                    continue
                fields = re.sub(r'\s+', ' ', line).split()
                mount_statvfs_info = get_mount_size(fields[1])
                mount_info = {'mount': fields[1],
                              'device': fields[0],
                              'fstype': fields[2],
                              'options': fields[3]}
                mount_info.update(mount_statvfs_info)
                mount_facts['mounts'].append(mount_info)

        return mount_facts
コード例 #8
0
ファイル: freebsd.py プロジェクト: yoraer/ansible
    def get_mount_facts(self):
        mount_facts = {}

        mount_facts['mounts'] = []
        fstab = get_file_content('/etc/fstab')
        if fstab:
            for line in fstab.splitlines():
                if line.startswith('#') or line.strip() == '':
                    continue
                fields = re.sub(r'\s+', ' ', line).split()
                size_total, size_available = get_mount_size(fields[1])
                mount_facts['mounts'].append({
                    'mount': fields[1],
                    'device': fields[0],
                    'fstype': fields[2],
                    'options': fields[3],
                    'size_total': size_total,
                    'size_available': size_available
                })

        return mount_facts
コード例 #9
0
    def get_mount_facts(self):
        mount_facts = {}
        mount_facts['mounts'] = []

        # For a detailed format description see mnttab(4)
        #   special mount_point fstype options time
        fstab = get_file_content('/etc/mnttab')

        if fstab:
            for line in fstab.splitlines():
                fields = line.split('\t')
                mount_statvfs_info = get_mount_size(fields[1])
                mount_info = {'mount': fields[1],
                              'device': fields[0],
                              'fstype': fields[2],
                              'options': fields[3],
                              'time': fields[4]}
                mount_info.update(mount_statvfs_info)
                mount_facts['mounts'].append(mount_info)

        return mount_facts
コード例 #10
0
ファイル: linux.py プロジェクト: ernstp/ansible
    def get_mount_facts(self):
        mount_facts = {}

        mount_facts['mounts'] = []

        bind_mounts = self._find_bind_mounts()
        uuids = self._lsblk_uuid()
        mtab_entries = self._mtab_entries()

        mounts = []
        for fields in mtab_entries:
            device, mount, fstype, options = fields[0], fields[1], fields[2], fields[3]

            if not device.startswith('/') and ':/' not in device:
                continue

            if fstype == 'none':
                continue

            mount_statvfs_info = get_mount_size(mount)

            if mount in bind_mounts:
                # only add if not already there, we might have a plain /etc/mtab
                if not self.MTAB_BIND_MOUNT_RE.match(options):
                    options += ",bind"

            mount_info = {'mount': mount,
                          'device': device,
                          'fstype': fstype,
                          'options': options,
                          'uuid': uuids.get(device, 'N/A')}

            mount_info.update(mount_statvfs_info)

            mounts.append(mount_info)

        mount_facts['mounts'] = mounts

        return mount_facts
コード例 #11
0
    def get_mount_facts(self):
        mount_facts = {}
        mount_facts['mounts'] = []

        # For a detailed format description see mnttab(4)
        #   special mount_point fstype options time
        fstab = get_file_content('/etc/mnttab')

        if fstab:
            for line in fstab.splitlines():
                fields = line.split('\t')
                size_total, size_available = get_mount_size(fields[1])
                mount_facts['mounts'].append({
                    'mount': fields[1],
                    'device': fields[0],
                    'fstype': fields[2],
                    'options': fields[3],
                    'time': fields[4],
                    'size_total': size_total,
                    'size_available': size_available
                })

        return mount_facts
コード例 #12
0
def main():
    module = AnsibleModule(
        argument_spec=dict(
            test=dict(type='str', default='strip'),
            touch_file=dict(type='str', default='/dev/null'),
            line_sep_file=dict(type='str', default='/dev/null'),
            line_sep_sep=dict(type='str', default='\n'),
        )
    )

    test = module.params['test']
    facts = {}

    if test == 'strip':
        etc_passwd = get_file_content('/etc/passwd')
        etc_passwd_unstripped = get_file_content('/etc/passwd', strip=False)
        facts['etc_passwd_newlines'] = etc_passwd.count('\n')
        facts['etc_passwd_newlines_unstripped'] = etc_passwd_unstripped.count('\n')

    elif test == 'default':
        path = module.params['touch_file']
        facts['touch_default'] = get_file_content(path, default='i am a default')

    elif test == 'line_sep':
        path = module.params['line_sep_file']
        sep = module.params['line_sep_sep']
        facts['line_sep'] = get_file_lines(path, line_sep=sep)

    elif test == 'invalid_mountpoint':
        facts['invalid_mountpoint'] = get_mount_size('/doesnotexist')

    result = {
        'changed': False,
        'ansible_facts': facts,
    }

    module.exit_json(**result)
コード例 #13
0
 def test_oserror_on_statvfs(self, mock_statvfs):
     mount_info = utils.get_mount_size('/dev/null/doesnt/matter')
     self.assertIsInstance(mount_info, dict)
     self.assertDictEqual(mount_info, {})
コード例 #14
0
 def test_proc(self):
     mount_info = utils.get_mount_size('/proc')
     self.assertIsInstance(mount_info, dict)
コード例 #15
0
 def test(self):
     mount_info = utils.get_mount_size('/dev/null/not/a/real/mountpoint')
     self.assertIsInstance(mount_info, dict)