003 File Manager
Current Path:
/usr/local/lib/python3.8/site-packages/salt/states
usr
/
local
/
lib
/
python3.8
/
site-packages
/
salt
/
states
/
📁
..
📄
__init__.py
(25 B)
📁
__pycache__
📄
acme.py
(5.08 KB)
📄
alias.py
(2.49 KB)
📄
alternatives.py
(6.75 KB)
📄
ansiblegate.py
(7.61 KB)
📄
apache.py
(3.95 KB)
📄
apache_conf.py
(2.72 KB)
📄
apache_module.py
(2.73 KB)
📄
apache_site.py
(2.66 KB)
📄
aptpkg.py
(1.42 KB)
📄
archive.py
(67.76 KB)
📄
artifactory.py
(6.84 KB)
📄
at.py
(7.54 KB)
📄
augeas.py
(10.57 KB)
📄
aws_sqs.py
(2.59 KB)
📄
azurearm_compute.py
(10.86 KB)
📄
azurearm_dns.py
(25.09 KB)
📄
azurearm_network.py
(87.86 KB)
📄
azurearm_resource.py
(27.22 KB)
📄
beacon.py
(7.58 KB)
📄
bigip.py
(96.63 KB)
📄
blockdev.py
(5.13 KB)
📄
boto3_elasticache.py
(48.01 KB)
📄
boto3_elasticsearch.py
(32.6 KB)
📄
boto3_route53.py
(37.54 KB)
📄
boto3_sns.py
(12.69 KB)
📄
boto_apigateway.py
(82.78 KB)
📄
boto_asg.py
(31.93 KB)
📄
boto_cfn.py
(11.53 KB)
📄
boto_cloudfront.py
(6.01 KB)
📄
boto_cloudtrail.py
(13.18 KB)
📄
boto_cloudwatch_alarm.py
(6.4 KB)
📄
boto_cloudwatch_event.py
(12.33 KB)
📄
boto_cognitoidentity.py
(13.69 KB)
📄
boto_datapipeline.py
(18.5 KB)
📄
boto_dynamodb.py
(29.32 KB)
📄
boto_ec2.py
(71.98 KB)
📄
boto_elasticache.py
(16.75 KB)
📄
boto_elasticsearch_domain.py
(12.27 KB)
📄
boto_elb.py
(55.1 KB)
📄
boto_elbv2.py
(12.19 KB)
📄
boto_iam.py
(69.16 KB)
📄
boto_iam_role.py
(27.12 KB)
📄
boto_iot.py
(25.33 KB)
📄
boto_kinesis.py
(16.69 KB)
📄
boto_kms.py
(12.11 KB)
📄
boto_lambda.py
(35.52 KB)
📄
boto_lc.py
(11.04 KB)
📄
boto_rds.py
(26 KB)
📄
boto_route53.py
(19.38 KB)
📄
boto_s3.py
(9.32 KB)
📄
boto_s3_bucket.py
(24.67 KB)
📄
boto_secgroup.py
(32.62 KB)
📄
boto_sns.py
(8.92 KB)
📄
boto_sqs.py
(7.97 KB)
📄
boto_vpc.py
(61.77 KB)
📄
bower.py
(8.26 KB)
📄
btrfs.py
(10.31 KB)
📄
cabal.py
(5.73 KB)
📄
ceph.py
(1.9 KB)
📄
chef.py
(3.68 KB)
📄
chocolatey.py
(17.33 KB)
📄
chronos_job.py
(4.6 KB)
📄
cimc.py
(14.32 KB)
📄
cisconso.py
(3.14 KB)
📄
cloud.py
(14.4 KB)
📄
cmd.py
(41.24 KB)
📄
composer.py
(8.38 KB)
📄
cron.py
(23.39 KB)
📄
cryptdev.py
(6.17 KB)
📄
csf.py
(9.98 KB)
📄
cyg.py
(7.05 KB)
📄
ddns.py
(4.2 KB)
📄
debconfmod.py
(6.33 KB)
📄
dellchassis.py
(24.49 KB)
📄
disk.py
(6.49 KB)
📄
docker_container.py
(85.27 KB)
📄
docker_image.py
(16.38 KB)
📄
docker_network.py
(36.34 KB)
📄
docker_volume.py
(6.72 KB)
📄
drac.py
(4.17 KB)
📄
dvs.py
(26.29 KB)
📄
elasticsearch.py
(20.38 KB)
📄
elasticsearch_index.py
(3.25 KB)
📄
elasticsearch_index_template.py
(3.67 KB)
📄
environ.py
(5.81 KB)
📄
eselect.py
(2.27 KB)
📄
esxcluster.py
(21.16 KB)
📄
esxdatacenter.py
(3.24 KB)
📄
esxi.py
(61.77 KB)
📄
esxvm.py
(18.86 KB)
📄
etcd_mod.py
(8.36 KB)
📄
ethtool.py
(7.84 KB)
📄
event.py
(2.48 KB)
📄
file.py
(299.79 KB)
📄
firewall.py
(1.33 KB)
📄
firewalld.py
(26.08 KB)
📄
gem.py
(7.13 KB)
📄
git.py
(124.23 KB)
📄
github.py
(27.25 KB)
📄
glance_image.py
(2.26 KB)
📄
glassfish.py
(21.47 KB)
📄
glusterfs.py
(12.12 KB)
📄
gnomedesktop.py
(7.47 KB)
📄
gpg.py
(5.28 KB)
📄
grafana.py
(12.11 KB)
📄
grafana4_dashboard.py
(17.31 KB)
📄
grafana4_datasource.py
(6.15 KB)
📄
grafana4_org.py
(7.73 KB)
📄
grafana4_user.py
(5.52 KB)
📄
grafana_dashboard.py
(17.74 KB)
📄
grafana_datasource.py
(5.31 KB)
📄
grains.py
(15.57 KB)
📄
group.py
(9.57 KB)
📄
heat.py
(9.69 KB)
📄
helm.py
(10.39 KB)
📄
hg.py
(6.33 KB)
📄
highstate_doc.py
(1.41 KB)
📄
host.py
(8.64 KB)
📄
http.py
(7.43 KB)
📄
icinga2.py
(9.07 KB)
📄
idem.py
(3.91 KB)
📄
ifttt.py
(2.12 KB)
📄
incron.py
(5.71 KB)
📄
influxdb08_database.py
(2.85 KB)
📄
influxdb08_user.py
(3.39 KB)
📄
influxdb_continuous_query.py
(2.81 KB)
📄
influxdb_database.py
(2.11 KB)
📄
influxdb_retention_policy.py
(4.82 KB)
📄
influxdb_user.py
(4.84 KB)
📄
infoblox_a.py
(4.24 KB)
📄
infoblox_cname.py
(4.19 KB)
📄
infoblox_host_record.py
(6.59 KB)
📄
infoblox_range.py
(6.85 KB)
📄
ini_manage.py
(12.67 KB)
📄
ipmi.py
(8.39 KB)
📄
ipset.py
(9.66 KB)
📄
iptables.py
(25.96 KB)
📄
jboss7.py
(23.95 KB)
📄
jenkins.py
(3.36 KB)
📄
junos.py
(17.78 KB)
📄
kapacitor.py
(6.46 KB)
📄
kernelpkg.py
(6.42 KB)
📄
keyboard.py
(2.01 KB)
📄
keystone.py
(27.12 KB)
📄
keystone_domain.py
(2.81 KB)
📄
keystone_endpoint.py
(4.69 KB)
📄
keystone_group.py
(3.25 KB)
📄
keystone_project.py
(3.36 KB)
📄
keystone_role.py
(2.33 KB)
📄
keystone_role_grant.py
(4.08 KB)
📄
keystone_service.py
(2.89 KB)
📄
keystone_user.py
(3.47 KB)
📄
keystore.py
(5.29 KB)
📄
kmod.py
(8.38 KB)
📄
kubernetes.py
(24.87 KB)
📄
layman.py
(2.44 KB)
📄
ldap.py
(19.78 KB)
📄
libcloud_dns.py
(5.7 KB)
📄
libcloud_loadbalancer.py
(5.66 KB)
📄
libcloud_storage.py
(5.13 KB)
📄
linux_acl.py
(24.43 KB)
📄
locale.py
(2.52 KB)
📄
logadm.py
(4.73 KB)
📄
logrotate.py
(3.86 KB)
📄
loop.py
(7.74 KB)
📄
lvm.py
(13.33 KB)
📄
lvs_server.py
(6.28 KB)
📄
lvs_service.py
(4.38 KB)
📄
lxc.py
(22.17 KB)
📄
lxd.py
(7.88 KB)
📄
lxd_container.py
(22.25 KB)
📄
lxd_image.py
(10.59 KB)
📄
lxd_profile.py
(7.11 KB)
📄
mac_assistive.py
(1.59 KB)
📄
mac_keychain.py
(5.59 KB)
📄
mac_xattr.py
(3.15 KB)
📄
macdefaults.py
(2.65 KB)
📄
macpackage.py
(6.76 KB)
📄
makeconf.py
(6.87 KB)
📄
marathon_app.py
(4.45 KB)
📄
mdadm_raid.py
(6.41 KB)
📄
memcached.py
(3.95 KB)
📄
modjk.py
(2.84 KB)
📄
modjk_worker.py
(6.49 KB)
📄
module.py
(17.99 KB)
📄
mongodb_database.py
(1.65 KB)
📄
mongodb_user.py
(6.26 KB)
📄
monit.py
(2.68 KB)
📄
mount.py
(49.55 KB)
📄
mssql_database.py
(3 KB)
📄
mssql_login.py
(3.64 KB)
📄
mssql_role.py
(2.37 KB)
📄
mssql_user.py
(3.51 KB)
📄
msteams.py
(2.53 KB)
📄
mysql_database.py
(6.05 KB)
📄
mysql_grants.py
(8.49 KB)
📄
mysql_query.py
(13.07 KB)
📄
mysql_user.py
(9.51 KB)
📄
net_napalm_yang.py
(9.15 KB)
📄
netacl.py
(31.92 KB)
📄
netconfig.py
(33.42 KB)
📄
netntp.py
(12.48 KB)
📄
netsnmp.py
(11.33 KB)
📄
netusers.py
(16.1 KB)
📄
network.py
(23.7 KB)
📄
neutron_network.py
(3.96 KB)
📄
neutron_secgroup.py
(4 KB)
📄
neutron_secgroup_rule.py
(4.75 KB)
📄
neutron_subnet.py
(4.29 KB)
📄
nexus.py
(4.97 KB)
📄
nfs_export.py
(4.92 KB)
📄
nftables.py
(19.5 KB)
📄
npm.py
(11.21 KB)
📄
ntp.py
(2.12 KB)
📄
nxos.py
(10.67 KB)
📄
nxos_upgrade.py
(3.5 KB)
📄
openstack_config.py
(3.26 KB)
📄
openvswitch_bridge.py
(3.13 KB)
📄
openvswitch_port.py
(17.25 KB)
📄
opsgenie.py
(4.07 KB)
📄
pagerduty.py
(1.89 KB)
📄
pagerduty_escalation_policy.py
(5.42 KB)
📄
pagerduty_schedule.py
(6.09 KB)
📄
pagerduty_service.py
(3.93 KB)
📄
pagerduty_user.py
(1.18 KB)
📄
panos.py
(48.13 KB)
📄
pbm.py
(20.46 KB)
📄
pcs.py
(36.46 KB)
📄
pdbedit.py
(3.48 KB)
📄
pecl.py
(3.65 KB)
📄
pip_state.py
(37.55 KB)
📄
pkg.py
(127.05 KB)
📄
pkgbuild.py
(11.37 KB)
📄
pkgng.py
(685 B)
📄
pkgrepo.py
(23.59 KB)
📄
portage_config.py
(5.01 KB)
📄
ports.py
(5.65 KB)
📄
postgres_cluster.py
(4.19 KB)
📄
postgres_database.py
(6.08 KB)
📄
postgres_extension.py
(5.68 KB)
📄
postgres_group.py
(8.52 KB)
📄
postgres_initdb.py
(2.84 KB)
📄
postgres_language.py
(3.94 KB)
📄
postgres_privileges.py
(7.86 KB)
📄
postgres_schema.py
(4.34 KB)
📄
postgres_tablespace.py
(6.62 KB)
📄
postgres_user.py
(9.49 KB)
📄
powerpath.py
(2.34 KB)
📄
probes.py
(15.06 KB)
📄
process.py
(1.32 KB)
📄
proxy.py
(4.94 KB)
📄
pushover.py
(3.13 KB)
📄
pyenv.py
(6.07 KB)
📄
pyrax_queues.py
(2.97 KB)
📄
quota.py
(1.4 KB)
📄
rabbitmq_cluster.py
(1.84 KB)
📄
rabbitmq_plugin.py
(2.77 KB)
📄
rabbitmq_policy.py
(4.58 KB)
📄
rabbitmq_upstream.py
(7.9 KB)
📄
rabbitmq_user.py
(8.89 KB)
📄
rabbitmq_vhost.py
(3.04 KB)
📄
rbac_solaris.py
(6.67 KB)
📄
rbenv.py
(7.36 KB)
📄
rdp.py
(1.28 KB)
📄
redismod.py
(4.76 KB)
📄
reg.py
(19.22 KB)
📄
rsync.py
(4.45 KB)
📄
rvm.py
(6.56 KB)
📄
salt_proxy.py
(1.34 KB)
📄
saltmod.py
(30.88 KB)
📄
saltutil.py
(8.91 KB)
📄
schedule.py
(11.89 KB)
📄
selinux.py
(18.61 KB)
📄
serverdensity_device.py
(6.41 KB)
📄
service.py
(37.06 KB)
📄
slack.py
(4.98 KB)
📄
smartos.py
(44.89 KB)
📄
smtp.py
(2.3 KB)
📄
snapper.py
(7.24 KB)
📄
solrcloud.py
(4.48 KB)
📄
splunk.py
(4.32 KB)
📄
splunk_search.py
(3.17 KB)
📄
sqlite3.py
(14.7 KB)
📄
ssh_auth.py
(19.1 KB)
📄
ssh_known_hosts.py
(7.87 KB)
📄
stateconf.py
(494 B)
📄
status.py
(2.21 KB)
📄
statuspage.py
(17.29 KB)
📄
supervisord.py
(10.48 KB)
📄
svn.py
(8.14 KB)
📄
sysctl.py
(3.82 KB)
📄
syslog_ng.py
(2.97 KB)
📄
sysrc.py
(2.82 KB)
📄
telemetry_alert.py
(7.04 KB)
📄
test.py
(13.09 KB)
📄
testinframod.py
(1.35 KB)
📄
timezone.py
(3.42 KB)
📄
tls.py
(1.81 KB)
📄
tomcat.py
(9.72 KB)
📄
trafficserver.py
(8.82 KB)
📄
tuned.py
(3.32 KB)
📄
uptime.py
(1.87 KB)
📄
user.py
(35.43 KB)
📄
vagrant.py
(11.4 KB)
📄
vault.py
(3.28 KB)
📄
vbox_guest.py
(4.05 KB)
📄
victorops.py
(3.32 KB)
📄
virt.py
(80.06 KB)
📄
virtualenv_mod.py
(11.21 KB)
📄
webutil.py
(3.78 KB)
📄
win_certutil.py
(2.88 KB)
📄
win_dacl.py
(7.96 KB)
📄
win_dism.py
(13.02 KB)
📄
win_dns_client.py
(8.32 KB)
📄
win_firewall.py
(6.87 KB)
📄
win_iis.py
(31.56 KB)
📄
win_lgpo.py
(25.41 KB)
📄
win_license.py
(1.6 KB)
📄
win_network.py
(14.18 KB)
📄
win_path.py
(6.39 KB)
📄
win_pki.py
(5.56 KB)
📄
win_powercfg.py
(3.79 KB)
📄
win_servermanager.py
(10.4 KB)
📄
win_smtp_server.py
(10.01 KB)
📄
win_snmp.py
(6.64 KB)
📄
win_system.py
(13.78 KB)
📄
win_wua.py
(14.47 KB)
📄
win_wusa.py
(3.53 KB)
📄
winrepo.py
(2.74 KB)
📄
wordpress.py
(4.82 KB)
📄
x509.py
(26.98 KB)
📄
xml.py
(1.75 KB)
📄
xmpp.py
(2.61 KB)
📄
zabbix_action.py
(9.35 KB)
📄
zabbix_host.py
(27.25 KB)
📄
zabbix_hostgroup.py
(5.64 KB)
📄
zabbix_mediatype.py
(16.89 KB)
📄
zabbix_template.py
(35.14 KB)
📄
zabbix_user.py
(15.76 KB)
📄
zabbix_usergroup.py
(9.64 KB)
📄
zabbix_usermacro.py
(9.69 KB)
📄
zabbix_valuemap.py
(8.11 KB)
📄
zcbuildout.py
(5.16 KB)
📄
zenoss.py
(2.89 KB)
📄
zfs.py
(34.27 KB)
📄
zk_concurrency.py
(5.81 KB)
📄
zone.py
(46.49 KB)
📄
zookeeper.py
(11.53 KB)
📄
zpool.py
(13.08 KB)
Editing: zpool.py
""" States for managing zpools :maintainer: Jorge Schrauwen <sjorge@blackdot.be> :maturity: new :depends: salt.utils.zfs, salt.modules.zpool :platform: smartos, illumos, solaris, freebsd, linux .. versionadded:: 2016.3.0 .. versionchanged:: 2018.3.1 Big refactor to remove duplicate code, better type conversions and improved consistency in output. .. code-block:: yaml oldpool: zpool.absent: - export: true newpool: zpool.present: - config: import: false force: true - properties: comment: salty storage pool - layout: - mirror: - /dev/disk0 - /dev/disk1 - mirror: - /dev/disk2 - /dev/disk3 partitionpool: zpool.present: - config: import: false force: true - properties: comment: disk partition salty storage pool ashift: '12' feature@lz4_compress: enabled - filesystem_properties: compression: lz4 atime: on relatime: on - layout: - /dev/disk/by-uuid/3e43ce94-77af-4f52-a91b-6cdbb0b0f41b simplepool: zpool.present: - config: import: false force: true - properties: comment: another salty storage pool - layout: - /dev/disk0 - /dev/disk1 .. warning:: The layout will never be updated, it will only be used at time of creation. It's a whole lot of work to figure out if a devices needs to be detached, removed, etc. This is best done by the sysadmin on a case per case basis. Filesystem properties are also not updated, this should be managed by the zfs state module. """ import logging import os from salt.utils.odict import OrderedDict log = logging.getLogger(__name__) # Define the state's virtual name __virtualname__ = "zpool" def __virtual__(): """ Provides zpool state """ if not __grains__.get("zfs_support"): return False, "The zpool state cannot be loaded: zfs not supported" return __virtualname__ def _layout_to_vdev(layout, device_dir=None): """ Turn the layout data into usable vdevs spedcification We need to support 2 ways of passing the layout: .. code:: layout_new: - mirror: - disk0 - disk1 - mirror: - disk2 - disk3 .. code: layout_legacy: mirror-0: disk0 disk1 mirror-1: disk2 disk3 """ vdevs = [] # NOTE: check device_dir exists if device_dir and not os.path.exists(device_dir): device_dir = None # NOTE: handle list of OrderedDicts (new layout) if isinstance(layout, list): # NOTE: parse each vdev as a tiny layout and just append for vdev in layout: if isinstance(vdev, OrderedDict): vdevs.extend(_layout_to_vdev(vdev, device_dir)) else: if device_dir and vdev[0] != "/": vdev = os.path.join(device_dir, vdev) vdevs.append(vdev) # NOTE: handle nested OrderedDict (legacy layout) # this is also used to parse the nested OrderedDicts # from the new layout elif isinstance(layout, OrderedDict): for vdev in layout: # NOTE: extract the vdev type and disks in the vdev vdev_type = vdev.split("-")[0] vdev_disk = layout[vdev] # NOTE: skip appending the dummy type 'disk' if vdev_type != "disk": vdevs.append(vdev_type) # NOTE: ensure the disks are a list (legacy layout are not) if not isinstance(vdev_disk, list): vdev_disk = vdev_disk.split(" ") # NOTE: also append the actualy disks behind the type # also prepend device_dir to disks if required for disk in vdev_disk: if device_dir and disk[0] != "/": disk = os.path.join(device_dir, disk) vdevs.append(disk) # NOTE: we got invalid data for layout else: vdevs = None return vdevs def present( name, properties=None, filesystem_properties=None, layout=None, config=None ): """ ensure storage pool is present on the system name : string name of storage pool properties : dict optional set of properties to set for the storage pool filesystem_properties : dict optional set of filesystem properties to set for the storage pool (creation only) layout: dict disk layout to use if the pool does not exist (creation only) config : dict fine grain control over this state .. note:: The following configuration properties can be toggled in the config parameter. - import (true) - try to import the pool before creating it if absent - import_dirs (None) - specify additional locations to scan for devices on import (comma-separated) - device_dir (None, SunOS=/dev/dsk, Linux=/dev) - specify device directory to prepend for none absolute device paths - force (false) - try to force the import or creation .. note:: It is no longer needed to give a unique name to each top-level vdev, the old layout format is still supported but no longer recommended. .. code-block:: yaml - mirror: - /tmp/vdisk3 - /tmp/vdisk2 - mirror: - /tmp/vdisk0 - /tmp/vdisk1 The above yaml will always result in the following zpool create: .. code-block:: bash zpool create mypool mirror /tmp/vdisk3 /tmp/vdisk2 mirror /tmp/vdisk0 /tmp/vdisk1 .. warning:: The legacy format is also still supported but not recommended, because ID's inside the layout dict must be unique they need to have a suffix. .. code-block:: yaml mirror-0: /tmp/vdisk3 /tmp/vdisk2 mirror-1: /tmp/vdisk0 /tmp/vdisk1 .. warning:: Pay attention to the order of your dict! .. code-block:: yaml - mirror: - /tmp/vdisk0 - /tmp/vdisk1 - /tmp/vdisk2 The above will result in the following zpool create: .. code-block:: bash zpool create mypool mirror /tmp/vdisk0 /tmp/vdisk1 /tmp/vdisk2 Creating a 3-way mirror! While you probably expect it to be mirror root vdev with 2 devices + a root vdev of 1 device! """ ret = {"name": name, "changes": {}, "result": None, "comment": ""} # config defaults default_config = { "import": True, "import_dirs": None, "device_dir": None, "force": False, } if __grains__["kernel"] == "SunOS": default_config["device_dir"] = "/dev/dsk" elif __grains__["kernel"] == "Linux": default_config["device_dir"] = "/dev" # merge state config if config: default_config.update(config) config = default_config # ensure properties are zfs values if properties: properties = __utils__["zfs.from_auto_dict"](properties) elif properties is None: properties = {} if filesystem_properties: filesystem_properties = __utils__["zfs.from_auto_dict"](filesystem_properties) elif filesystem_properties is None: filesystem_properties = {} # parse layout vdevs = _layout_to_vdev(layout, config["device_dir"]) if vdevs: vdevs.insert(0, name) # log configuration log.debug("zpool.present::%s::config - %s", name, config) log.debug("zpool.present::%s::vdevs - %s", name, vdevs) log.debug("zpool.present::%s::properties - %s", name, properties) log.debug( "zpool.present::%s::filesystem_properties - %s", name, filesystem_properties ) # ensure the pool is present ret["result"] = False # don't do anything because this is a test if __opts__["test"]: if __salt__["zpool.exists"](name): ret["result"] = True ret["comment"] = "storage pool {} is {}".format(name, "uptodate") else: ret["result"] = None ret["changes"][name] = "imported" if config["import"] else "created" ret["comment"] = "storage pool {} would have been {}".format( name, ret["changes"][name] ) # update pool elif __salt__["zpool.exists"](name): ret["result"] = True # fetch current pool properties properties_current = __salt__["zpool.get"](name, parsable=True) # build list of properties to update properties_update = [] if properties: for prop in properties: # skip unexisting properties if prop not in properties_current: log.warning( "zpool.present::%s::update - unknown property: %s", name, prop ) continue # compare current and wanted value if properties_current[prop] != properties[prop]: properties_update.append(prop) # update pool properties for prop in properties_update: res = __salt__["zpool.set"](name, prop, properties[prop]) if res["set"]: if name not in ret["changes"]: ret["changes"][name] = {} ret["changes"][name][prop] = properties[prop] else: ret["result"] = False if ret["comment"] == "": ret["comment"] = "The following properties were not updated:" ret["comment"] = "{} {}".format(ret["comment"], prop) if ret["result"]: ret["comment"] = ( "properties updated" if ret["changes"] else "no update needed" ) # import or create the pool (at least try to anyway) else: # import pool if config["import"]: mod_res = __salt__["zpool.import"]( name, force=config["force"], dir=config["import_dirs"], ) ret["result"] = mod_res["imported"] if ret["result"]: ret["changes"][name] = "imported" ret["comment"] = "storage pool {} was imported".format(name) # create pool if not ret["result"] and vdevs: log.debug("zpool.present::%s::creating", name) # execute zpool.create mod_res = __salt__["zpool.create"]( *vdevs, force=config["force"], properties=properties, filesystem_properties=filesystem_properties ) ret["result"] = mod_res["created"] if ret["result"]: ret["changes"][name] = "created" ret["comment"] = "storage pool {} was created".format(name) elif "error" in mod_res: ret["comment"] = mod_res["error"] else: ret["comment"] = "could not create storage pool {}".format(name) # give up, we cannot import the pool and we do not have a layout to create it if not ret["result"] and not vdevs: ret["comment"] = ( "storage pool {} was not imported, no (valid) layout specified for" " creation".format(name) ) return ret def absent(name, export=False, force=False): """ ensure storage pool is absent on the system name : string name of storage pool export : boolean export instead of destroy the zpool if present force : boolean force destroy or export """ ret = {"name": name, "changes": {}, "result": None, "comment": ""} # log configuration log.debug("zpool.absent::%s::config::force = %s", name, force) log.debug("zpool.absent::%s::config::export = %s", name, export) # ensure the pool is absent if __salt__["zpool.exists"](name): # looks like we need to do some work mod_res = {} ret["result"] = False # NOTE: handle test if __opts__["test"]: ret["result"] = True # NOTE: try to export the pool elif export: mod_res = __salt__["zpool.export"](name, force=force) ret["result"] = mod_res["exported"] # NOTE: try to destroy the pool else: mod_res = __salt__["zpool.destroy"](name, force=force) ret["result"] = mod_res["destroyed"] if ret["result"]: # update the changes and comment ret["changes"][name] = "exported" if export else "destroyed" ret["comment"] = "storage pool {} was {}".format(name, ret["changes"][name]) elif "error" in mod_res: ret["comment"] = mod_res["error"] else: # we are looking good ret["result"] = True ret["comment"] = "storage pool {} is absent".format(name) return ret # vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4
Upload File
Create Folder