mirror of
				https://github.com/ansible-collections/community.general.git
				synced 2024-09-14 20:13:21 +02:00 
			
		
		
		
	Sometimes, `blkid` will incorrectly return no information about a block device, even if it exists and has a valid filesystem. This causes the *filesystem* module to fail if *force=no*. Instructing `blkid` to use `/dev/null` as a cache file will force it to rescan the block device on each run, making results more consistent. Signed-off-by: Dustin C. Hatch <admiralnemo@gmail.com>
		
			
				
	
	
		
			112 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			112 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/usr/bin/python
 | |
| # -*- coding: utf-8 -*-
 | |
| 
 | |
| # (c) 2013, Alexander Bulimov <lazywolf0@gmail.com>
 | |
| #
 | |
| # This file is part of Ansible
 | |
| #
 | |
| # Ansible is free software: you can redistribute it and/or modify
 | |
| # it under the terms of the GNU General Public License as published by
 | |
| # the Free Software Foundation, either version 3 of the License, or
 | |
| # (at your option) any later version.
 | |
| #
 | |
| # Ansible is distributed in the hope that it will be useful,
 | |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 | |
| # GNU General Public License for more details.
 | |
| #
 | |
| # You should have received a copy of the GNU General Public License
 | |
| # along with Ansible. If not, see <http://www.gnu.org/licenses/>.
 | |
| 
 | |
| DOCUMENTATION = '''
 | |
| ---
 | |
| author: Alexander Bulimov
 | |
| module: filesystem
 | |
| short_description: Makes file system on block device
 | |
| description:
 | |
|   - This module creates file system.
 | |
| version_added: "1.2"
 | |
| options:
 | |
|   fstype:
 | |
|     description:
 | |
|     - File System type to be created.
 | |
|     required: true
 | |
|   dev:
 | |
|     description:
 | |
|     - Target block device.
 | |
|     required: true
 | |
|   force:
 | |
|     choices: [ "yes", "no" ]
 | |
|     default: "no"
 | |
|     description:
 | |
|     - If yes, allows to create new filesystem on devices that already has filesystem.
 | |
|     required: false
 | |
|   opts:
 | |
|     description:
 | |
|     - List of options to be passed to mkfs command.
 | |
| notes:
 | |
|   - uses mkfs command
 | |
| '''
 | |
| 
 | |
| EXAMPLES = '''
 | |
| # Create a ext2 filesystem on /dev/sdb1.
 | |
| - filesystem: fstype=ext2 dev=/dev/sdb1
 | |
| 
 | |
| # Create a ext4 filesystem on /dev/sdb1 and check disk blocks.
 | |
| - filesystem: fstype=ext4 dev=/dev/sdb1 opts="-cc"
 | |
| '''
 | |
| 
 | |
| def main():
 | |
|     module = AnsibleModule(
 | |
|         argument_spec = dict(
 | |
|             fstype=dict(required=True, aliases=['type']),
 | |
|             dev=dict(required=True, aliases=['device']),
 | |
|             opts=dict(),
 | |
|             force=dict(type='bool', default='no'),
 | |
|         ),
 | |
|         supports_check_mode=True,
 | |
|     )
 | |
| 
 | |
|     dev = module.params['dev']
 | |
|     fstype = module.params['fstype']
 | |
|     opts = module.params['opts']
 | |
|     force = module.boolean(module.params['force'])
 | |
| 
 | |
|     changed = False
 | |
| 
 | |
|     if not os.path.exists(dev):
 | |
|         module.fail_json(msg="Device %s not found."%dev)
 | |
| 
 | |
|     cmd = module.get_bin_path('blkid', required=True)
 | |
| 
 | |
|     rc,raw_fs,err = module.run_command("%s -c /dev/null -o value -s TYPE %s" % (cmd, dev))
 | |
|     fs = raw_fs.strip()
 | |
| 
 | |
| 
 | |
|     if fs == fstype:
 | |
|         module.exit_json(changed=False)
 | |
|     elif fs and not force:
 | |
|         module.fail_json(msg="'%s' is already used as %s, use force=yes to overwrite"%(dev,fs), rc=rc, err=err)
 | |
| 
 | |
|     ### create fs
 | |
| 
 | |
|     if module.check_mode:
 | |
|         changed = True
 | |
|     else:
 | |
|         mkfs = module.get_bin_path('mkfs', required=True)
 | |
|         cmd = None
 | |
|         if opts is None:
 | |
|             cmd = "%s -t %s '%s'" % (mkfs, fstype, dev)
 | |
|         else:
 | |
|             cmd = "%s -t %s %s '%s'" % (mkfs, fstype, opts, dev)
 | |
|         rc,_,err = module.run_command(cmd)
 | |
|         if rc == 0:
 | |
|             changed = True
 | |
|         else:
 | |
|             module.fail_json(msg="Creating filesystem %s on device '%s' failed"%(fstype,dev), rc=rc, err=err)
 | |
| 
 | |
|     module.exit_json(changed=changed)
 | |
| 
 | |
| # import module snippets
 | |
| from ansible.module_utils.basic import *
 | |
| main()
 |