mirror of https://github.com/ansible/ansible.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
120 lines
3.3 KiB
Python
120 lines
3.3 KiB
Python
12 years ago
|
#!/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
|
||
12 years ago
|
module: filesystem
|
||
12 years ago
|
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
|
||
|
'''
|
||
|
|
||
12 years ago
|
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"
|
||
|
'''
|
||
|
|
||
12 years ago
|
def main():
|
||
|
module = AnsibleModule(
|
||
|
argument_spec = dict(
|
||
12 years ago
|
fstype=dict(required=True, aliases=['type']),
|
||
|
dev=dict(required=True, aliases=['device']),
|
||
12 years ago
|
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)
|
||
|
|
||
12 years ago
|
cmd = module.get_bin_path('blkid', required=True)
|
||
|
|
||
11 years ago
|
rc,raw_fs,err = module.run_command("%s -c /dev/null -o value -s TYPE %s" % (cmd, dev))
|
||
12 years ago
|
fs = raw_fs.strip()
|
||
|
|
||
|
|
||
|
if fs == fstype:
|
||
|
module.exit_json(changed=False)
|
||
|
elif fs and not force:
|
||
12 years ago
|
module.fail_json(msg="'%s' is already used as %s, use force=yes to overwrite"%(dev,fs), rc=rc, err=err)
|
||
12 years ago
|
|
||
|
### create fs
|
||
|
|
||
|
if module.check_mode:
|
||
|
changed = True
|
||
|
else:
|
||
12 years ago
|
mkfs = module.get_bin_path('mkfs', required=True)
|
||
12 years ago
|
cmd = None
|
||
11 years ago
|
if fstype in ['ext2', 'ext3', 'ext4', 'ext4dev']:
|
||
|
force_flag="-F"
|
||
|
elif fstype in ['btrfs']:
|
||
|
force_flag="-f"
|
||
|
else:
|
||
|
force_flag=""
|
||
|
|
||
12 years ago
|
if opts is None:
|
||
11 years ago
|
cmd = "%s -t %s %s '%s'" % (mkfs, fstype, force_flag, dev)
|
||
12 years ago
|
else:
|
||
11 years ago
|
cmd = "%s -t %s %s %s '%s'" % (mkfs, fstype, force_flag, opts, dev)
|
||
12 years ago
|
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)
|
||
|
|
||
11 years ago
|
# import module snippets
|
||
11 years ago
|
from ansible.module_utils.basic import *
|
||
12 years ago
|
main()
|