golden hour
/opt/saltstack/salt/lib/python3.10/site-packages/salt/modules
⬆️ Go Up
Upload
File/Folder
Size
Actions
__init__.py
35 B
Del
OK
__pycache__
-
Del
OK
acme.py
12.74 KB
Del
OK
aix_group.py
4.12 KB
Del
OK
aix_shadow.py
1.93 KB
Del
OK
aixpkg.py
24.15 KB
Del
OK
aliases.py
5.07 KB
Del
OK
alternatives.py
5.71 KB
Del
OK
ansiblegate.py
19.51 KB
Del
OK
apache.py
12.47 KB
Del
OK
apcups.py
2.15 KB
Del
OK
apf.py
3.09 KB
Del
OK
apkpkg.py
16 KB
Del
OK
aptly.py
15.28 KB
Del
OK
aptpkg.py
116.64 KB
Del
OK
archive.py
48.63 KB
Del
OK
arista_pyeapi.py
22.06 KB
Del
OK
artifactory.py
24.78 KB
Del
OK
at.py
10.72 KB
Del
OK
at_solaris.py
8.51 KB
Del
OK
augeas_cfg.py
13.93 KB
Del
OK
aws_sqs.py
6.55 KB
Del
OK
azurearm_compute.py
20.8 KB
Del
OK
azurearm_dns.py
15.8 KB
Del
OK
azurearm_network.py
82.99 KB
Del
OK
azurearm_resource.py
35.75 KB
Del
OK
bamboohr.py
7.36 KB
Del
OK
baredoc.py
11.13 KB
Del
OK
bcache.py
28.97 KB
Del
OK
beacons.py
27.82 KB
Del
OK
bigip.py
69.11 KB
Del
OK
bluez_bluetooth.py
6.76 KB
Del
OK
boto3_elasticache.py
37.34 KB
Del
OK
boto3_elasticsearch.py
53.17 KB
Del
OK
boto3_route53.py
39.82 KB
Del
OK
boto3_sns.py
12.93 KB
Del
OK
boto_apigateway.py
61.86 KB
Del
OK
boto_asg.py
35.69 KB
Del
OK
boto_cfn.py
7.95 KB
Del
OK
boto_cloudfront.py
12.75 KB
Del
OK
boto_cloudtrail.py
14.45 KB
Del
OK
boto_cloudwatch.py
10.99 KB
Del
OK
boto_cloudwatch_event.py
9.48 KB
Del
OK
boto_cognitoidentity.py
14.63 KB
Del
OK
boto_datapipeline.py
6.94 KB
Del
OK
boto_dynamodb.py
14.98 KB
Del
OK
boto_ec2.py
79.27 KB
Del
OK
boto_efs.py
14.05 KB
Del
OK
boto_elasticache.py
23.69 KB
Del
OK
boto_elasticsearch_domain.py
15.85 KB
Del
OK
boto_elb.py
35.53 KB
Del
OK
boto_elbv2.py
10.78 KB
Del
OK
boto_iam.py
75.62 KB
Del
OK
boto_iot.py
26.2 KB
Del
OK
boto_kinesis.py
19.62 KB
Del
OK
boto_kms.py
17.29 KB
Del
OK
boto_lambda.py
35.05 KB
Del
OK
boto_rds.py
34.92 KB
Del
OK
boto_route53.py
32.55 KB
Del
OK
boto_s3.py
4.24 KB
Del
OK
boto_s3_bucket.py
31.8 KB
Del
OK
boto_secgroup.py
25.22 KB
Del
OK
boto_sns.py
7.22 KB
Del
OK
boto_sqs.py
6.43 KB
Del
OK
boto_ssm.py
3.63 KB
Del
OK
boto_vpc.py
113.08 KB
Del
OK
bower.py
5.85 KB
Del
OK
bridge.py
10.81 KB
Del
OK
bsd_shadow.py
6.25 KB
Del
OK
btrfs.py
33.66 KB
Del
OK
cabal.py
3.79 KB
Del
OK
capirca_acl.py
40.04 KB
Del
OK
cassandra_cql.py
54.16 KB
Del
OK
cassandra_mod.py
4.3 KB
Del
OK
celery.py
3.33 KB
Del
OK
ceph.py
15.82 KB
Del
OK
chassis.py
1.52 KB
Del
OK
chef.py
4.66 KB
Del
OK
chocolatey.py
41.55 KB
Del
OK
chronos.py
2.89 KB
Del
OK
chroot.py
11.73 KB
Del
OK
cimc.py
23.02 KB
Del
OK
ciscoconfparse_mod.py
14.79 KB
Del
OK
cisconso.py
3.83 KB
Del
OK
cloud.py
9.39 KB
Del
OK
cmdmod.py
163.73 KB
Del
OK
composer.py
10.31 KB
Del
OK
config.py
16.98 KB
Del
OK
consul.py
69.3 KB
Del
OK
container_resource.py
12.94 KB
Del
OK
cp.py
31.98 KB
Del
OK
cpan.py
5.54 KB
Del
OK
cron.py
28.09 KB
Del
OK
cryptdev.py
10.08 KB
Del
OK
csf.py
16.04 KB
Del
OK
cyg.py
8.32 KB
Del
OK
daemontools.py
5.41 KB
Del
OK
data.py
3.85 KB
Del
OK
datadog_api.py
7.76 KB
Del
OK
ddns.py
7.12 KB
Del
OK
deb_apache.py
7.41 KB
Del
OK
deb_postgres.py
4.18 KB
Del
OK
debconfmod.py
4.06 KB
Del
OK
debian_ip.py
64.91 KB
Del
OK
debian_service.py
6.55 KB
Del
OK
debuild_pkgbuild.py
34.68 KB
Del
OK
defaults.py
6.55 KB
Del
OK
devinfo.py
9.07 KB
Del
OK
devmap.py
627 B
Del
OK
dig.py
8.75 KB
Del
OK
disk.py
30.82 KB
Del
OK
djangomod.py
7.53 KB
Del
OK
dnsmasq.py
5.71 KB
Del
OK
dnsutil.py
11.51 KB
Del
OK
dockercompose.py
32.62 KB
Del
OK
dockermod.py
224.85 KB
Del
OK
dpkg_lowpkg.py
12.94 KB
Del
OK
drac.py
10.97 KB
Del
OK
dracr.py
38.53 KB
Del
OK
drbd.py
7.19 KB
Del
OK
dummyproxy_pkg.py
2.46 KB
Del
OK
dummyproxy_service.py
2.91 KB
Del
OK
ebuildpkg.py
38.74 KB
Del
OK
eix.py
1.58 KB
Del
OK
elasticsearch.py
51.44 KB
Del
OK
environ.py
8.96 KB
Del
OK
eselect.py
4.99 KB
Del
OK
esxcluster.py
1.66 KB
Del
OK
esxdatacenter.py
1.68 KB
Del
OK
esxi.py
2.79 KB
Del
OK
esxvm.py
1.63 KB
Del
OK
etcd_mod.py
8.56 KB
Del
OK
ethtool.py
11.12 KB
Del
OK
event.py
7.67 KB
Del
OK
extfs.py
8.78 KB
Del
OK
file.py
232.18 KB
Del
OK
firewalld.py
20.51 KB
Del
OK
freebsd_sysctl.py
4.99 KB
Del
OK
freebsd_update.py
6.19 KB
Del
OK
freebsdjail.py
7.16 KB
Del
OK
freebsdkmod.py
6.17 KB
Del
OK
freebsdpkg.py
17.04 KB
Del
OK
freebsdports.py
13.13 KB
Del
OK
freebsdservice.py
12.53 KB
Del
OK
freezer.py
10.2 KB
Del
OK
gcp_addon.py
4.07 KB
Del
OK
gem.py
10.6 KB
Del
OK
genesis.py
21.75 KB
Del
OK
gentoo_service.py
9.18 KB
Del
OK
gentoolkitmod.py
8.39 KB
Del
OK
git.py
172.01 KB
Del
OK
github.py
53.19 KB
Del
OK
glanceng.py
4.69 KB
Del
OK
glassfish.py
19.49 KB
Del
OK
glusterfs.py
19.55 KB
Del
OK
gnomedesktop.py
6.85 KB
Del
OK
google_chat.py
1.52 KB
Del
OK
gpg.py
39.09 KB
Del
OK
grafana4.py
30.27 KB
Del
OK
grains.py
21.81 KB
Del
OK
groupadd.py
11.87 KB
Del
OK
grub_legacy.py
3.08 KB
Del
OK
guestfs.py
2.37 KB
Del
OK
hadoop.py
3.76 KB
Del
OK
haproxyconn.py
10.17 KB
Del
OK
hashutil.py
6.77 KB
Del
OK
heat.py
25.25 KB
Del
OK
helm.py
39.27 KB
Del
OK
hg.py
7.16 KB
Del
OK
highstate_doc.py
22.76 KB
Del
OK
hosts.py
10.47 KB
Del
OK
http.py
3.76 KB
Del
OK
icinga2.py
4.46 KB
Del
OK
idem.py
1.75 KB
Del
OK
ifttt.py
2.28 KB
Del
OK
ilo.py
15.98 KB
Del
OK
incron.py
7.68 KB
Del
OK
influxdb08mod.py
15.07 KB
Del
OK
influxdbmod.py
16.13 KB
Del
OK
infoblox.py
17.53 KB
Del
OK
ini_manage.py
14.63 KB
Del
OK
inspectlib
-
Del
OK
inspector.py
8.19 KB
Del
OK
introspect.py
4.02 KB
Del
OK
iosconfig.py
14.78 KB
Del
OK
ipmi.py
25.47 KB
Del
OK
ipset.py
17.97 KB
Del
OK
iptables.py
57.44 KB
Del
OK
iwtools.py
3.99 KB
Del
OK
jboss7.py
20.51 KB
Del
OK
jboss7_cli.py
15.23 KB
Del
OK
jenkinsmod.py
11.9 KB
Del
OK
jinja.py
2.66 KB
Del
OK
jira_mod.py
7.07 KB
Del
OK
junos.py
73.96 KB
Del
OK
k8s.py
24.87 KB
Del
OK
kapacitor.py
5.37 KB
Del
OK
kerberos.py
5.42 KB
Del
OK
kernelpkg_linux_apt.py
6.71 KB
Del
OK
kernelpkg_linux_yum.py
7.26 KB
Del
OK
key.py
1007 B
Del
OK
keyboard.py
2.64 KB
Del
OK
keystone.py
43.14 KB
Del
OK
keystoneng.py
21.82 KB
Del
OK
keystore.py
7.18 KB
Del
OK
kmod.py
7.65 KB
Del
OK
kubeadm.py
34.64 KB
Del
OK
kubernetesmod.py
46.77 KB
Del
OK
launchctl_service.py
9.69 KB
Del
OK
layman.py
4.22 KB
Del
OK
ldap3.py
18.81 KB
Del
OK
ldapmod.py
5.9 KB
Del
OK
libcloud_compute.py
23.48 KB
Del
OK
libcloud_dns.py
9.73 KB
Del
OK
libcloud_loadbalancer.py
13.14 KB
Del
OK
libcloud_storage.py
12.16 KB
Del
OK
linux_acl.py
7.7 KB
Del
OK
linux_ip.py
5.55 KB
Del
OK
linux_lvm.py
17.86 KB
Del
OK
linux_service.py
4.64 KB
Del
OK
linux_shadow.py
12.96 KB
Del
OK
linux_sysctl.py
7.5 KB
Del
OK
localemod.py
11.84 KB
Del
OK
locate.py
2.58 KB
Del
OK
logadm.py
9.44 KB
Del
OK
logmod.py
1.25 KB
Del
OK
logrotate.py
7.72 KB
Del
OK
lvs.py
11.54 KB
Del
OK
lxc.py
147.27 KB
Del
OK
lxd.py
90.07 KB
Del
OK
mac_assistive.py
11.37 KB
Del
OK
mac_brew_pkg.py
19.91 KB
Del
OK
mac_desktop.py
2.77 KB
Del
OK
mac_group.py
6.62 KB
Del
OK
mac_keychain.py
6.39 KB
Del
OK
mac_pkgutil.py
2.84 KB
Del
OK
mac_portspkg.py
11.36 KB
Del
OK
mac_power.py
13.29 KB
Del
OK
mac_service.py
19.64 KB
Del
OK
mac_shadow.py
14.23 KB
Del
OK
mac_softwareupdate.py
14.52 KB
Del
OK
mac_sysctl.py
5.13 KB
Del
OK
mac_system.py
15.07 KB
Del
OK
mac_timezone.py
8.34 KB
Del
OK
mac_user.py
16.41 KB
Del
OK
mac_xattr.py
6.27 KB
Del
OK
macdefaults.py
2.33 KB
Del
OK
macpackage.py
6.66 KB
Del
OK
makeconf.py
17.31 KB
Del
OK
mandrill.py
6.31 KB
Del
OK
marathon.py
5.36 KB
Del
OK
match.py
13 KB
Del
OK
mattermost.py
3.4 KB
Del
OK
mdadm_raid.py
9.86 KB
Del
OK
mdata.py
3.38 KB
Del
OK
memcached.py
6.13 KB
Del
OK
mine.py
18.84 KB
Del
OK
minion.py
7.68 KB
Del
OK
mod_random.py
7.18 KB
Del
OK
modjk.py
12.48 KB
Del
OK
mongodb.py
29.75 KB
Del
OK
monit.py
5.51 KB
Del
OK
moosefs.py
3.87 KB
Del
OK
mount.py
58.44 KB
Del
OK
mssql.py
14.64 KB
Del
OK
msteams.py
2.11 KB
Del
OK
munin.py
2.4 KB
Del
OK
mysql.py
90.66 KB
Del
OK
nacl.py
9.72 KB
Del
OK
nagios.py
6.53 KB
Del
OK
nagios_rpc.py
5.09 KB
Del
OK
namecheap_domains.py
12.84 KB
Del
OK
namecheap_domains_dns.py
5.93 KB
Del
OK
namecheap_domains_ns.py
4.51 KB
Del
OK
namecheap_ssl.py
25.69 KB
Del
OK
namecheap_users.py
2.4 KB
Del
OK
napalm_bgp.py
9.72 KB
Del
OK
napalm_formula.py
11.33 KB
Del
OK
napalm_mod.py
61.37 KB
Del
OK
napalm_netacl.py
28.59 KB
Del
OK
napalm_network.py
93.22 KB
Del
OK
napalm_ntp.py
10.22 KB
Del
OK
napalm_probes.py
13.25 KB
Del
OK
napalm_route.py
5.09 KB
Del
OK
napalm_snmp.py
7.05 KB
Del
OK
napalm_users.py
6.49 KB
Del
OK
napalm_yang_mod.py
20.28 KB
Del
OK
netaddress.py
1.6 KB
Del
OK
netbox.py
32.22 KB
Del
OK
netbsd_sysctl.py
3.92 KB
Del
OK
netbsdservice.py
6.43 KB
Del
OK
netmiko_mod.py
19.61 KB
Del
OK
netscaler.py
27.02 KB
Del
OK
network.py
63.42 KB
Del
OK
neutron.py
44.92 KB
Del
OK
neutronng.py
15.02 KB
Del
OK
nexus.py
22.95 KB
Del
OK
nfs3.py
3.9 KB
Del
OK
nftables.py
33.58 KB
Del
OK
nginx.py
3.83 KB
Del
OK
nilrt_ip.py
36.18 KB
Del
OK
nix.py
8.03 KB
Del
OK
nova.py
19.6 KB
Del
OK
npm.py
10.4 KB
Del
OK
nspawn.py
41.35 KB
Del
OK
nxos.py
24.65 KB
Del
OK
nxos_api.py
14.72 KB
Del
OK
nxos_upgrade.py
14.74 KB
Del
OK
omapi.py
3.6 KB
Del
OK
openbsd_sysctl.py
3.74 KB
Del
OK
openbsdpkg.py
10.97 KB
Del
OK
openbsdrcctl_service.py
6.33 KB
Del
OK
openbsdservice.py
8.31 KB
Del
OK
openscap.py
2.81 KB
Del
OK
openstack_config.py
3.21 KB
Del
OK
openstack_mng.py
2.71 KB
Del
OK
openvswitch.py
17.19 KB
Del
OK
opkg.py
49.67 KB
Del
OK
opsgenie.py
3.29 KB
Del
OK
oracle.py
5.82 KB
Del
OK
osquery.py
24.93 KB
Del
OK
out.py
2.53 KB
Del
OK
pacmanpkg.py
31.92 KB
Del
OK
pagerduty.py
4.7 KB
Del
OK
pagerduty_util.py
13.48 KB
Del
OK
pam.py
2.01 KB
Del
OK
panos.py
61.05 KB
Del
OK
parallels.py
19.85 KB
Del
OK
parted_partition.py
21.53 KB
Del
OK
pcs.py
14.11 KB
Del
OK
pdbedit.py
10.79 KB
Del
OK
pecl.py
3.79 KB
Del
OK
peeringdb.py
8.39 KB
Del
OK
pf.py
9.51 KB
Del
OK
philips_hue.py
1.55 KB
Del
OK
pillar.py
21.37 KB
Del
OK
pip.py
53.42 KB
Del
OK
pkg_resource.py
12.3 KB
Del
OK
pkgin.py
17.29 KB
Del
OK
pkgng.py
61.07 KB
Del
OK
pkgutil.py
9.85 KB
Del
OK
portage_config.py
22.73 KB
Del
OK
postfix.py
16.24 KB
Del
OK
postgres.py
88.24 KB
Del
OK
poudriere.py
7.85 KB
Del
OK
powerpath.py
2.57 KB
Del
OK
proxy.py
11.49 KB
Del
OK
ps.py
20.89 KB
Del
OK
publish.py
10.25 KB
Del
OK
puppet.py
10.9 KB
Del
OK
purefa.py
33.59 KB
Del
OK
purefb.py
13.69 KB
Del
OK
pushbullet.py
1.88 KB
Del
OK
pushover_notify.py
3.48 KB
Del
OK
pw_group.py
4.62 KB
Del
OK
pw_user.py
12.47 KB
Del
OK
pyenv.py
6.93 KB
Del
OK
qemu_img.py
1.53 KB
Del
OK
qemu_nbd.py
3.28 KB
Del
OK
quota.py
6.43 KB
Del
OK
rabbitmq.py
38.4 KB
Del
OK
rallydev.py
6.09 KB
Del
OK
random_org.py
23.76 KB
Del
OK
rbac_solaris.py
16.05 KB
Del
OK
rbenv.py
10.75 KB
Del
OK
rdp.py
6.08 KB
Del
OK
rebootmgr.py
7.68 KB
Del
OK
redismod.py
16.36 KB
Del
OK
reg.py
16.36 KB
Del
OK
rest_pkg.py
2.26 KB
Del
OK
rest_sample_utils.py
558 B
Del
OK
rest_service.py
3.63 KB
Del
OK
restartcheck.py
24.1 KB
Del
OK
restconf.py
3.15 KB
Del
OK
ret.py
1.27 KB
Del
OK
rh_ip.py
38.55 KB
Del
OK
rh_service.py
16.61 KB
Del
OK
riak.py
5.19 KB
Del
OK
rpm_lowpkg.py
27.67 KB
Del
OK
rpmbuild_pkgbuild.py
24.53 KB
Del
OK
rsync.py
8.04 KB
Del
OK
runit.py
17.17 KB
Del
OK
rvm.py
11.1 KB
Del
OK
s3.py
9.93 KB
Del
OK
s6.py
3.62 KB
Del
OK
salt_proxy.py
4.48 KB
Del
OK
salt_version.py
4.58 KB
Del
OK
saltcheck.py
46.66 KB
Del
OK
saltcloudmod.py
954 B
Del
OK
saltutil.py
57.49 KB
Del
OK
schedule.py
50.81 KB
Del
OK
scp_mod.py
6.22 KB
Del
OK
scsi.py
2.66 KB
Del
OK
sdb.py
2.48 KB
Del
OK
seed.py
8.87 KB
Del
OK
selinux.py
24.2 KB
Del
OK
sensehat.py
7.79 KB
Del
OK
sensors.py
1.3 KB
Del
OK
serverdensity_device.py
8.1 KB
Del
OK
servicenow.py
4.36 KB
Del
OK
slack_notify.py
7.83 KB
Del
OK
slackware_service.py
6.84 KB
Del
OK
slsutil.py
19.04 KB
Del
OK
smartos_imgadm.py
12.04 KB
Del
OK
smartos_nictagadm.py
6.46 KB
Del
OK
smartos_virt.py
5.21 KB
Del
OK
smartos_vmadm.py
26.2 KB
Del
OK
smbios.py
10.05 KB
Del
OK
smf_service.py
8.52 KB
Del
OK
smtp.py
5.41 KB
Del
OK
snapper.py
27.14 KB
Del
OK
solaris_fmadm.py
11.2 KB
Del
OK
solaris_group.py
2.8 KB
Del
OK
solaris_shadow.py
7.98 KB
Del
OK
solaris_system.py
3.72 KB
Del
OK
solaris_user.py
11.06 KB
Del
OK
solarisipspkg.py
18.68 KB
Del
OK
solarispkg.py
15.4 KB
Del
OK
solr.py
45.54 KB
Del
OK
solrcloud.py
14.63 KB
Del
OK
splunk.py
8.14 KB
Del
OK
splunk_search.py
8.76 KB
Del
OK
sqlite3.py
2.54 KB
Del
OK
ssh.py
43.89 KB
Del
OK
ssh_pkg.py
1.08 KB
Del
OK
ssh_service.py
3.39 KB
Del
OK
state.py
82.34 KB
Del
OK
status.py
57.79 KB
Del
OK
statuspage.py
14.67 KB
Del
OK
supervisord.py
11.15 KB
Del
OK
suse_apache.py
2.45 KB
Del
OK
suse_ip.py
35.72 KB
Del
OK
svn.py
10.75 KB
Del
OK
swarm.py
13.5 KB
Del
OK
swift.py
5.53 KB
Del
OK
sysbench.py
6.62 KB
Del
OK
sysfs.py
6.61 KB
Del
OK
syslog_ng.py
31.52 KB
Del
OK
sysmod.py
22.59 KB
Del
OK
sysrc.py
3.38 KB
Del
OK
system.py
19.28 KB
Del
OK
system_profiler.py
3.54 KB
Del
OK
systemd_service.py
46.29 KB
Del
OK
telegram.py
3.28 KB
Del
OK
telemetry.py
12.87 KB
Del
OK
temp.py
831 B
Del
OK
test.py
15.4 KB
Del
OK
test_virtual.py
237 B
Del
OK
testinframod.py
9.92 KB
Del
OK
textfsm_mod.py
16.22 KB
Del
OK
timezone.py
19.98 KB
Del
OK
tls.py
58.63 KB
Del
OK
tomcat.py
18.59 KB
Del
OK
trafficserver.py
10.44 KB
Del
OK
transactional_update.py
35.83 KB
Del
OK
travisci.py
2.05 KB
Del
OK
tuned.py
2.34 KB
Del
OK
twilio_notify.py
2.95 KB
Del
OK
udev.py
3.72 KB
Del
OK
upstart_service.py
16.92 KB
Del
OK
uptime.py
3.23 KB
Del
OK
useradd.py
22.63 KB
Del
OK
uwsgi.py
996 B
Del
OK
vagrant.py
20.4 KB
Del
OK
varnish.py
3.08 KB
Del
OK
vault.py
15.61 KB
Del
OK
vbox_guest.py
10.55 KB
Del
OK
vboxmanage.py
14.71 KB
Del
OK
vcenter.py
1.61 KB
Del
OK
victorops.py
6.54 KB
Del
OK
virt.py
287.71 KB
Del
OK
virtualenv_mod.py
15.09 KB
Del
OK
vmctl.py
9.56 KB
Del
OK
vsphere.py
380.41 KB
Del
OK
webutil.py
3.66 KB
Del
OK
win_auditpol.py
4.74 KB
Del
OK
win_autoruns.py
2.29 KB
Del
OK
win_certutil.py
4.55 KB
Del
OK
win_dacl.py
32.27 KB
Del
OK
win_disk.py
1.8 KB
Del
OK
win_dism.py
20.7 KB
Del
OK
win_dns_client.py
4.19 KB
Del
OK
win_dsc.py
27.54 KB
Del
OK
win_event.py
22.32 KB
Del
OK
win_file.py
64.39 KB
Del
OK
win_firewall.py
20.15 KB
Del
OK
win_groupadd.py
11.27 KB
Del
OK
win_iis.py
68.78 KB
Del
OK
win_ip.py
11.43 KB
Del
OK
win_lgpo.py
491.76 KB
Del
OK
win_lgpo_reg.py
17.9 KB
Del
OK
win_license.py
2.72 KB
Del
OK
win_network.py
13.9 KB
Del
OK
win_ntp.py
1.8 KB
Del
OK
win_path.py
11.12 KB
Del
OK
win_pkg.py
86.43 KB
Del
OK
win_pki.py
15.8 KB
Del
OK
win_powercfg.py
9.85 KB
Del
OK
win_psget.py
8.97 KB
Del
OK
win_servermanager.py
14.21 KB
Del
OK
win_service.py
32.96 KB
Del
OK
win_shadow.py
3.03 KB
Del
OK
win_shortcut.py
16.49 KB
Del
OK
win_smtp_server.py
17.67 KB
Del
OK
win_snmp.py
13.38 KB
Del
OK
win_status.py
16.94 KB
Del
OK
win_system.py
40.61 KB
Del
OK
win_task.py
79.17 KB
Del
OK
win_timezone.py
13.3 KB
Del
OK
win_useradd.py
27.39 KB
Del
OK
win_wua.py
38.29 KB
Del
OK
win_wusa.py
5.88 KB
Del
OK
winrepo.py
6.09 KB
Del
OK
wordpress.py
4.71 KB
Del
OK
x509.py
63.1 KB
Del
OK
x509_v2.py
74.15 KB
Del
OK
xapi_virt.py
24.07 KB
Del
OK
xbpspkg.py
15.84 KB
Del
OK
xfs.py
15.35 KB
Del
OK
xml.py
2.14 KB
Del
OK
xmpp.py
5.28 KB
Del
OK
yaml.py
1.94 KB
Del
OK
yumpkg.py
116.5 KB
Del
OK
zabbix.py
97.55 KB
Del
OK
zcbuildout.py
28.16 KB
Del
OK
zenoss.py
5.64 KB
Del
OK
zfs.py
34.44 KB
Del
OK
zk_concurrency.py
11.16 KB
Del
OK
znc.py
2.26 KB
Del
OK
zoneadm.py
15.05 KB
Del
OK
zonecfg.py
21.85 KB
Del
OK
zookeeper.py
14.72 KB
Del
OK
zpool.py
44.02 KB
Del
OK
zypperpkg.py
94.87 KB
Del
OK
Edit: solr.py
""" Apache Solr Salt Module Author: Jed Glazner Version: 0.2.1 Modified: 12/09/2011 This module uses HTTP requests to talk to the apache solr request handlers to gather information and report errors. Because of this the minion doesn't necessarily need to reside on the actual slave. However if you want to use the signal function the minion must reside on the physical solr host. This module supports multi-core and standard setups. Certain methods are master/slave specific. Make sure you set the solr.type. If you have questions or want a feature request please ask. Coming Features in 0.3 ---------------------- 1. Add command for checking for replication failures on slaves 2. Improve match_index_versions since it's pointless on busy solr masters 3. Add additional local fs checks for backups to make sure they succeeded Override these in the minion config ----------------------------------- solr.cores A list of core names e.g. ['core1','core2']. An empty list indicates non-multicore setup. solr.baseurl The root level URL to access solr via HTTP solr.request_timeout The number of seconds before timing out an HTTP/HTTPS/FTP request. If nothing is specified then the python global timeout setting is used. solr.type Possible values are 'master' or 'slave' solr.backup_path The path to store your backups. If you are using cores and you can specify to append the core name to the path in the backup method. solr.num_backups For versions of solr >= 3.5. Indicates the number of backups to keep. This option is ignored if your version is less. solr.init_script The full path to your init script with start/stop options solr.dih.options A list of options to pass to the DIH. Required Options for DIH ------------------------ clean : False Clear the index before importing commit : True Commit the documents to the index upon completion optimize : True Optimize the index after commit is complete verbose : True Get verbose output """ import os import urllib.request import salt.utils.json import salt.utils.path # ######################### PRIVATE METHODS ############################## def __virtual__(): """ PRIVATE METHOD Solr needs to be installed to use this. Return: str/bool """ if salt.utils.path.which("solr"): return "solr" if salt.utils.path.which("apache-solr"): return "solr" return ( False, "The solr execution module failed to load: requires both the solr and" " apache-solr binaries in the path.", ) def _get_none_or_value(value): """ PRIVATE METHOD Checks to see if the value of a primitive or built-in container such as a list, dict, set, tuple etc is empty or none. None type is returned if the value is empty/None/False. Number data types that are 0 will return None. value : obj The primitive or built-in container to evaluate. Return: None or value """ if value is None: return None elif not value: return value # if it's a string, and it's not empty check for none elif isinstance(value, str): if value.lower() == "none": return None return value # return None else: return None def _check_for_cores(): """ PRIVATE METHOD Checks to see if using_cores has been set or not. if it's been set return it, otherwise figure it out and set it. Then return it Return: boolean True if one or more cores defined in __opts__['solr.cores'] """ return len(__salt__["config.option"]("solr.cores")) > 0 def _get_return_dict(success=True, data=None, errors=None, warnings=None): """ PRIVATE METHOD Creates a new return dict with default values. Defaults may be overwritten. success : boolean (True) True indicates a successful result. data : dict<str,obj> ({}) Data to be returned to the caller. errors : list<str> ([()]) A list of error messages to be returned to the caller warnings : list<str> ([]) A list of warnings to be returned to the caller. Return: dict<str,obj>:: {'success':boolean, 'data':dict, 'errors':list, 'warnings':list} """ data = {} if data is None else data errors = [] if errors is None else errors warnings = [] if warnings is None else warnings ret = {"success": success, "data": data, "errors": errors, "warnings": warnings} return ret def _update_return_dict(ret, success, data, errors=None, warnings=None): """ PRIVATE METHOD Updates the return dictionary and returns it. ret : dict<str,obj> The original return dict to update. The ret param should have been created from _get_return_dict() success : boolean (True) True indicates a successful result. data : dict<str,obj> ({}) Data to be returned to the caller. errors : list<str> ([()]) A list of error messages to be returned to the caller warnings : list<str> ([]) A list of warnings to be returned to the caller. Return: dict<str,obj>:: {'success':boolean, 'data':dict, 'errors':list, 'warnings':list} """ errors = [] if errors is None else errors warnings = [] if warnings is None else warnings ret["success"] = success ret["data"].update(data) ret["errors"] = ret["errors"] + errors ret["warnings"] = ret["warnings"] + warnings return ret def _format_url(handler, host=None, core_name=None, extra=None): """ PRIVATE METHOD Formats the URL based on parameters, and if cores are used or not handler : str The request handler to hit. host : str (None) The solr host to query. __opts__['host'] is default core_name : str (None) The name of the solr core if using cores. Leave this blank if you are not using cores or if you want to check all cores. extra : list<str> ([]) A list of name value pairs in string format. e.g. ['name=value'] Return: str Fully formatted URL (http://<host>:<port>/solr/<handler>?wt=json&<extra>) """ extra = [] if extra is None else extra if _get_none_or_value(host) is None or host == "None": host = __salt__["config.option"]("solr.host") port = __salt__["config.option"]("solr.port") baseurl = __salt__["config.option"]("solr.baseurl") if _get_none_or_value(core_name) is None: if extra is None or len(extra) == 0: return "http://{}:{}{}/{}?wt=json".format(host, port, baseurl, handler) else: return "http://{}:{}{}/{}?wt=json&{}".format( host, port, baseurl, handler, "&".join(extra) ) else: if extra is None or len(extra) == 0: return "http://{}:{}{}/{}/{}?wt=json".format( host, port, baseurl, core_name, handler ) else: return "http://{}:{}{}/{}/{}?wt=json&{}".format( host, port, baseurl, core_name, handler, "&".join(extra) ) def _auth(url): """ Install an auth handler for urllib2 """ user = __salt__["config.get"]("solr.user", False) password = __salt__["config.get"]("solr.passwd", False) realm = __salt__["config.get"]("solr.auth_realm", "Solr") if user and password: basic = urllib.request.HTTPBasicAuthHandler() basic.add_password(realm=realm, uri=url, user=user, passwd=password) digest = urllib.request.HTTPDigestAuthHandler() digest.add_password(realm=realm, uri=url, user=user, passwd=password) urllib.request.install_opener(urllib.request.build_opener(basic, digest)) def _http_request(url, request_timeout=None): """ PRIVATE METHOD Uses salt.utils.json.load to fetch the JSON results from the solr API. url : str a complete URL that can be passed to urllib.open request_timeout : int (None) The number of seconds before the timeout should fail. Leave blank/None to use the default. __opts__['solr.request_timeout'] Return: dict<str,obj>:: {'success':boolean, 'data':dict, 'errors':list, 'warnings':list} """ _auth(url) try: request_timeout = __salt__["config.option"]("solr.request_timeout") kwargs = {} if request_timeout is None else {"timeout": request_timeout} data = salt.utils.json.load(urllib.request.urlopen(url, **kwargs)) return _get_return_dict(True, data, []) except Exception as err: # pylint: disable=broad-except return _get_return_dict(False, {}, ["{} : {}".format(url, err)]) def _replication_request(command, host=None, core_name=None, params=None): """ PRIVATE METHOD Performs the requested replication command and returns a dictionary with success, errors and data as keys. The data object will contain the JSON response. command : str The replication command to execute. host : str (None) The solr host to query. __opts__['host'] is default core_name: str (None) The name of the solr core if using cores. Leave this blank if you are not using cores or if you want to check all cores. params : list<str> ([]) Any additional parameters you want to send. Should be a lsit of strings in name=value format. e.g. ['name=value'] Return: dict<str, obj>:: {'success':boolean, 'data':dict, 'errors':list, 'warnings':list} """ params = [] if params is None else params extra = ["command={}".format(command)] + params url = _format_url("replication", host=host, core_name=core_name, extra=extra) return _http_request(url) def _get_admin_info(command, host=None, core_name=None): """ PRIVATE METHOD Calls the _http_request method and passes the admin command to execute and stores the data. This data is fairly static but should be refreshed periodically to make sure everything this OK. The data object will contain the JSON response. command : str The admin command to execute. host : str (None) The solr host to query. __opts__['host'] is default core_name: str (None) The name of the solr core if using cores. Leave this blank if you are not using cores or if you want to check all cores. Return: dict<str,obj>:: {'success':boolean, 'data':dict, 'errors':list, 'warnings':list} """ url = _format_url("admin/{}".format(command), host, core_name=core_name) resp = _http_request(url) return resp def _is_master(): """ PRIVATE METHOD Simple method to determine if the minion is configured as master or slave Return: boolean:: True if __opts__['solr.type'] = master """ return __salt__["config.option"]("solr.type") == "master" def _merge_options(options): """ PRIVATE METHOD updates the default import options from __opts__['solr.dih.import_options'] with the dictionary passed in. Also converts booleans to strings to pass to solr. options : dict<str,boolean> Dictionary the over rides the default options defined in __opts__['solr.dih.import_options'] Return: dict<str,boolean>:: {option:boolean} """ defaults = __salt__["config.option"]("solr.dih.import_options") if isinstance(options, dict): defaults.update(options) for key, val in defaults.items(): if isinstance(val, bool): defaults[key] = str(val).lower() return defaults def _pre_index_check(handler, host=None, core_name=None): """ PRIVATE METHOD - MASTER CALL Does a pre-check to make sure that all the options are set and that we can talk to solr before trying to send a command to solr. This Command should only be issued to masters. handler : str The import handler to check the state of host : str (None): The solr host to query. __opts__['host'] is default core_name (None): The name of the solr core if using cores. Leave this blank if you are not using cores or if you want to check all cores. REQUIRED if you are using cores. Return: dict<str,obj>:: {'success':boolean, 'data':dict, 'errors':list, 'warnings':list} """ # make sure that it's a master minion if _get_none_or_value(host) is None and not _is_master(): err = ['solr.pre_indexing_check can only be called by "master" minions'] return _get_return_dict(False, err) # solr can run out of memory quickly if the dih is processing multiple # handlers at the same time, so if it's a multicore setup require a # core_name param. if _get_none_or_value(core_name) is None and _check_for_cores(): errors = ["solr.full_import is not safe to multiple handlers at once"] return _get_return_dict(False, errors=errors) # check to make sure that we're not already indexing resp = import_status(handler, host, core_name) if resp["success"]: status = resp["data"]["status"] if status == "busy": warn = ["An indexing process is already running."] return _get_return_dict(True, warnings=warn) if status != "idle": errors = ['Unknown status: "{}"'.format(status)] return _get_return_dict(False, data=resp["data"], errors=errors) else: errors = ["Status check failed. Response details: {}".format(resp)] return _get_return_dict(False, data=resp["data"], errors=errors) return resp def _find_value(ret_dict, key, path=None): """ PRIVATE METHOD Traverses a dictionary of dictionaries/lists to find key and return the value stored. TODO:// this method doesn't really work very well, and it's not really very useful in its current state. The purpose for this method is to simplify parsing the JSON output so you can just pass the key you want to find and have it return the value. ret : dict<str,obj> The dictionary to search through. Typically this will be a dict returned from solr. key : str The key (str) to find in the dictionary Return: list<dict<str,obj>>:: [{path:path, value:value}] """ if path is None: path = key else: path = "{}:{}".format(path, key) ret = [] for ikey, val in ret_dict.items(): if ikey == key: ret.append({path: val}) if isinstance(val, list): for item in val: if isinstance(item, dict): ret = ret + _find_value(item, key, path) if isinstance(val, dict): ret = ret + _find_value(val, key, path) return ret # ######################### PUBLIC METHODS ############################## def lucene_version(core_name=None): """ Gets the lucene version that solr is using. If you are running a multi-core setup you should specify a core name since all the cores run under the same servlet container, they will all have the same version. core_name : str (None) The name of the solr core if using cores. Leave this blank if you are not using cores or if you want to check all cores. Return: dict<str,obj>:: {'success':boolean, 'data':dict, 'errors':list, 'warnings':list} CLI Example: .. code-block:: bash salt '*' solr.lucene_version """ ret = _get_return_dict() # do we want to check for all the cores? if _get_none_or_value(core_name) is None and _check_for_cores(): success = True for name in __salt__["config.option"]("solr.cores"): resp = _get_admin_info("system", core_name=name) if resp["success"]: version_num = resp["data"]["lucene"]["lucene-spec-version"] data = {name: {"lucene_version": version_num}} else: # generally this means that an exception happened. data = {name: {"lucene_version": None}} success = False ret = _update_return_dict(ret, success, data, resp["errors"]) return ret else: resp = _get_admin_info("system", core_name=core_name) if resp["success"]: version_num = resp["data"]["lucene"]["lucene-spec-version"] return _get_return_dict(True, {"version": version_num}, resp["errors"]) else: return resp def version(core_name=None): """ Gets the solr version for the core specified. You should specify a core here as all the cores will run under the same servlet container and so will all have the same version. core_name : str (None) The name of the solr core if using cores. Leave this blank if you are not using cores or if you want to check all cores. Return : dict<str,obj>:: {'success':boolean, 'data':dict, 'errors':list, 'warnings':list} CLI Example: .. code-block:: bash salt '*' solr.version """ ret = _get_return_dict() # do we want to check for all the cores? if _get_none_or_value(core_name) is None and _check_for_cores(): success = True for name in __opts__["solr.cores"]: resp = _get_admin_info("system", core_name=name) if resp["success"]: lucene = resp["data"]["lucene"] data = {name: {"version": lucene["solr-spec-version"]}} else: success = False data = {name: {"version": None}} ret = _update_return_dict( ret, success, data, resp["errors"], resp["warnings"] ) return ret else: resp = _get_admin_info("system", core_name=core_name) if resp["success"]: version_num = resp["data"]["lucene"]["solr-spec-version"] return _get_return_dict( True, {"version": version_num}, resp["errors"], resp["warnings"] ) else: return resp def optimize(host=None, core_name=None): """ Search queries fast, but it is a very expensive operation. The ideal process is to run this with a master/slave configuration. Then you can optimize the master, and push the optimized index to the slaves. If you are running a single solr instance, or if you are going to run this on a slave be aware than search performance will be horrible while this command is being run. Additionally it can take a LONG time to run and your HTTP request may timeout. If that happens adjust your timeout settings. host : str (None) The solr host to query. __opts__['host'] is default. core_name : str (None) The name of the solr core if using cores. Leave this blank if you are not using cores or if you want to check all cores. Return : dict<str,obj>:: {'success':boolean, 'data':dict, 'errors':list, 'warnings':list} CLI Example: .. code-block:: bash salt '*' solr.optimize music """ ret = _get_return_dict() if _get_none_or_value(core_name) is None and _check_for_cores(): success = True for name in __salt__["config.option"]("solr.cores"): url = _format_url( "update", host=host, core_name=name, extra=["optimize=true"] ) resp = _http_request(url) if resp["success"]: data = {name: {"data": resp["data"]}} ret = _update_return_dict( ret, success, data, resp["errors"], resp["warnings"] ) else: success = False data = {name: {"data": resp["data"]}} ret = _update_return_dict( ret, success, data, resp["errors"], resp["warnings"] ) return ret else: url = _format_url( "update", host=host, core_name=core_name, extra=["optimize=true"] ) return _http_request(url) def ping(host=None, core_name=None): """ Does a health check on solr, makes sure solr can talk to the indexes. host : str (None) The solr host to query. __opts__['host'] is default. core_name : str (None) The name of the solr core if using cores. Leave this blank if you are not using cores or if you want to check all cores. Return : dict<str,obj>:: {'success':boolean, 'data':dict, 'errors':list, 'warnings':list} CLI Example: .. code-block:: bash salt '*' solr.ping music """ ret = _get_return_dict() if _get_none_or_value(core_name) is None and _check_for_cores(): success = True for name in __opts__["solr.cores"]: resp = _get_admin_info("ping", host=host, core_name=name) if resp["success"]: data = {name: {"status": resp["data"]["status"]}} else: success = False data = {name: {"status": None}} ret = _update_return_dict(ret, success, data, resp["errors"]) return ret else: resp = _get_admin_info("ping", host=host, core_name=core_name) return resp def is_replication_enabled(host=None, core_name=None): """ SLAVE CALL Check for errors, and determine if a slave is replicating or not. host : str (None) The solr host to query. __opts__['host'] is default. core_name : str (None) The name of the solr core if using cores. Leave this blank if you are not using cores or if you want to check all cores. Return : dict<str,obj>:: {'success':boolean, 'data':dict, 'errors':list, 'warnings':list} CLI Example: .. code-block:: bash salt '*' solr.is_replication_enabled music """ ret = _get_return_dict() success = True # since only slaves can call this let's check the config: if _is_master() and host is None: errors = ['Only "slave" minions can run "is_replication_enabled"'] return ret.update({"success": False, "errors": errors}) # define a convenience method so we don't duplicate code def _checks(ret, success, resp, core): if response["success"]: slave = resp["data"]["details"]["slave"] # we need to initialize this to false in case there is an error # on the master and we can't get this info. enabled = "false" master_url = slave["masterUrl"] # check for errors on the slave if "ERROR" in slave: success = False err = "{}: {} - {}".format(core, slave["ERROR"], master_url) resp["errors"].append(err) # if there is an error return everything data = slave if core is None else {core: {"data": slave}} else: enabled = slave["masterDetails"]["master"]["replicationEnabled"] # if replication is turned off on the master, or polling is # disabled we need to return false. These may not be errors, # but the purpose of this call is to check to see if the slaves # can replicate. if enabled == "false": resp["warnings"].append("Replication is disabled on master.") success = False if slave["isPollingDisabled"] == "true": success = False resp["warning"].append("Polling is disabled") # update the return ret = _update_return_dict( ret, success, data, resp["errors"], resp["warnings"] ) return (ret, success) if _get_none_or_value(core_name) is None and _check_for_cores(): for name in __opts__["solr.cores"]: response = _replication_request("details", host=host, core_name=name) ret, success = _checks(ret, success, response, name) else: response = _replication_request("details", host=host, core_name=core_name) ret, success = _checks(ret, success, response, core_name) return ret def match_index_versions(host=None, core_name=None): """ SLAVE CALL Verifies that the master and the slave versions are in sync by comparing the index version. If you are constantly pushing updates the index the master and slave versions will seldom match. A solution to this is pause indexing every so often to allow the slave to replicate and then call this method before allowing indexing to resume. host : str (None) The solr host to query. __opts__['host'] is default. core_name : str (None) The name of the solr core if using cores. Leave this blank if you are not using cores or if you want to check all cores. Return : dict<str,obj>:: {'success':boolean, 'data':dict, 'errors':list, 'warnings':list} CLI Example: .. code-block:: bash salt '*' solr.match_index_versions music """ # since only slaves can call this let's check the config: ret = _get_return_dict() success = True if _is_master() and _get_none_or_value(host) is None: return ret.update( { "success": False, "errors": [ 'solr.match_index_versions can only be called by "slave" minions' ], } ) # get the default return dict def _match(ret, success, resp, core): if response["success"]: slave = resp["data"]["details"]["slave"] master_url = resp["data"]["details"]["slave"]["masterUrl"] if "ERROR" in slave: error = slave["ERROR"] success = False err = "{}: {} - {}".format(core, error, master_url) resp["errors"].append(err) # if there was an error return the entire response so the # alterer can get what it wants data = slave if core is None else {core: {"data": slave}} else: versions = { "master": slave["masterDetails"]["master"][ "replicatableIndexVersion" ], "slave": resp["data"]["details"]["indexVersion"], "next_replication": slave["nextExecutionAt"], "failed_list": [], } if "replicationFailedAtList" in slave: versions.update({"failed_list": slave["replicationFailedAtList"]}) # check the index versions if versions["master"] != versions["slave"]: success = False resp["errors"].append( "Master and Slave index versions do not match." ) data = versions if core is None else {core: {"data": versions}} ret = _update_return_dict( ret, success, data, resp["errors"], resp["warnings"] ) else: success = False err = resp["errors"] data = resp["data"] ret = _update_return_dict(ret, success, data, errors=err) return (ret, success) # check all cores? if _get_none_or_value(core_name) is None and _check_for_cores(): success = True for name in __opts__["solr.cores"]: response = _replication_request("details", host=host, core_name=name) ret, success = _match(ret, success, response, name) else: response = _replication_request("details", host=host, core_name=core_name) ret, success = _match(ret, success, response, core_name) return ret def replication_details(host=None, core_name=None): """ Get the full replication details. host : str (None) The solr host to query. __opts__['host'] is default. core_name : str (None) The name of the solr core if using cores. Leave this blank if you are not using cores or if you want to check all cores. Return : dict<str,obj>:: {'success':boolean, 'data':dict, 'errors':list, 'warnings':list} CLI Example: .. code-block:: bash salt '*' solr.replication_details music """ ret = _get_return_dict() if _get_none_or_value(core_name) is None: success = True for name in __opts__["solr.cores"]: resp = _replication_request("details", host=host, core_name=name) data = {name: {"data": resp["data"]}} ret = _update_return_dict( ret, success, data, resp["errors"], resp["warnings"] ) else: resp = _replication_request("details", host=host, core_name=core_name) if resp["success"]: ret = _update_return_dict( ret, resp["success"], resp["data"], resp["errors"], resp["warnings"] ) else: return resp return ret def backup(host=None, core_name=None, append_core_to_path=False): """ Tell solr make a backup. This method can be mis-leading since it uses the backup API. If an error happens during the backup you are not notified. The status: 'OK' in the response simply means that solr received the request successfully. host : str (None) The solr host to query. __opts__['host'] is default. core_name : str (None) The name of the solr core if using cores. Leave this blank if you are not using cores or if you want to check all cores. append_core_to_path : boolean (False) If True add the name of the core to the backup path. Assumes that minion backup path is not None. Return : dict<str,obj>:: {'success':boolean, 'data':dict, 'errors':list, 'warnings':list} CLI Example: .. code-block:: bash salt '*' solr.backup music """ path = __opts__["solr.backup_path"] num_backups = __opts__["solr.num_backups"] if path is not None: if not path.endswith(os.path.sep): path += os.path.sep ret = _get_return_dict() if _get_none_or_value(core_name) is None and _check_for_cores(): success = True for name in __opts__["solr.cores"]: params = [] if path is not None: path = path + name if append_core_to_path else path params.append("&location={}".format(path + name)) params.append("&numberToKeep={}".format(num_backups)) resp = _replication_request( "backup", host=host, core_name=name, params=params ) if not resp["success"]: success = False data = {name: {"data": resp["data"]}} ret = _update_return_dict( ret, success, data, resp["errors"], resp["warnings"] ) return ret else: if core_name is not None and path is not None: if append_core_to_path: path += core_name if path is not None: params = ["location={}".format(path)] params.append("&numberToKeep={}".format(num_backups)) resp = _replication_request( "backup", host=host, core_name=core_name, params=params ) return resp def set_is_polling(polling, host=None, core_name=None): """ SLAVE CALL Prevent the slaves from polling the master for updates. polling : boolean True will enable polling. False will disable it. host : str (None) The solr host to query. __opts__['host'] is default. core_name : str (None) The name of the solr core if using cores. Leave this blank if you are not using cores or if you want to check all cores. Return : dict<str,obj>:: {'success':boolean, 'data':dict, 'errors':list, 'warnings':list} CLI Example: .. code-block:: bash salt '*' solr.set_is_polling False """ ret = _get_return_dict() # since only slaves can call this let's check the config: if _is_master() and _get_none_or_value(host) is None: err = ['solr.set_is_polling can only be called by "slave" minions'] return ret.update({"success": False, "errors": err}) cmd = "enablepoll" if polling else "disapblepoll" if _get_none_or_value(core_name) is None and _check_for_cores(): success = True for name in __opts__["solr.cores"]: resp = set_is_polling(cmd, host=host, core_name=name) if not resp["success"]: success = False data = {name: {"data": resp["data"]}} ret = _update_return_dict( ret, success, data, resp["errors"], resp["warnings"] ) return ret else: resp = _replication_request(cmd, host=host, core_name=core_name) return resp def set_replication_enabled(status, host=None, core_name=None): """ MASTER ONLY Sets the master to ignore poll requests from the slaves. Useful when you don't want the slaves replicating during indexing or when clearing the index. status : boolean Sets the replication status to the specified state. host : str (None) The solr host to query. __opts__['host'] is default. core_name : str (None) The name of the solr core if using cores. Leave this blank if you are not using cores or if you want to set the status on all cores. Return : dict<str,obj>:: {'success':boolean, 'data':dict, 'errors':list, 'warnings':list} CLI Example: .. code-block:: bash salt '*' solr.set_replication_enabled false, None, music """ if not _is_master() and _get_none_or_value(host) is None: return _get_return_dict( False, errors=["Only minions configured as master can run this"] ) cmd = "enablereplication" if status else "disablereplication" if _get_none_or_value(core_name) is None and _check_for_cores(): ret = _get_return_dict() success = True for name in __opts__["solr.cores"]: resp = set_replication_enabled(status, host, name) if not resp["success"]: success = False data = {name: {"data": resp["data"]}} ret = _update_return_dict( ret, success, data, resp["errors"], resp["warnings"] ) return ret else: if status: return _replication_request(cmd, host=host, core_name=core_name) else: return _replication_request(cmd, host=host, core_name=core_name) def signal(signal=None): """ Signals Apache Solr to start, stop, or restart. Obviously this is only going to work if the minion resides on the solr host. Additionally Solr doesn't ship with an init script so one must be created. signal : str (None) The command to pass to the apache solr init valid values are 'start', 'stop', and 'restart' CLI Example: .. code-block:: bash salt '*' solr.signal restart """ valid_signals = ("start", "stop", "restart") # Give a friendly error message for invalid signals # TODO: Fix this logic to be reusable and used by apache.signal if signal not in valid_signals: return "{} is an invalid signal. Try: one of: {} or {}".format( signal, ", ".join(valid_signals[:-1]), valid_signals[-1] ) cmd = "{} {}".format(__opts__["solr.init_script"], signal) __salt__["cmd.run"](cmd, python_shell=False) def reload_core(host=None, core_name=None): """ MULTI-CORE HOSTS ONLY Load a new core from the same configuration as an existing registered core. While the "new" core is initializing, the "old" one will continue to accept requests. Once it has finished, all new request will go to the "new" core, and the "old" core will be unloaded. host : str (None) The solr host to query. __opts__['host'] is default. core_name : str The name of the core to reload Return : dict<str,obj>:: {'success':boolean, 'data':dict, 'errors':list, 'warnings':list} CLI Example: .. code-block:: bash salt '*' solr.reload_core None music Return data is in the following format:: {'success':bool, 'data':dict, 'errors':list, 'warnings':list} """ ret = _get_return_dict() if not _check_for_cores(): err = ['solr.reload_core can only be called by "multi-core" minions'] return ret.update({"success": False, "errors": err}) if _get_none_or_value(core_name) is None and _check_for_cores(): success = True for name in __opts__["solr.cores"]: resp = reload_core(host, name) if not resp["success"]: success = False data = {name: {"data": resp["data"]}} ret = _update_return_dict( ret, success, data, resp["errors"], resp["warnings"] ) return ret extra = ["action=RELOAD", "core={}".format(core_name)] url = _format_url("admin/cores", host=host, core_name=None, extra=extra) return _http_request(url) def core_status(host=None, core_name=None): """ MULTI-CORE HOSTS ONLY Get the status for a given core or all cores if no core is specified host : str (None) The solr host to query. __opts__['host'] is default. core_name : str The name of the core to reload Return : dict<str,obj>:: {'success':boolean, 'data':dict, 'errors':list, 'warnings':list} CLI Example: .. code-block:: bash salt '*' solr.core_status None music """ ret = _get_return_dict() if not _check_for_cores(): err = ['solr.reload_core can only be called by "multi-core" minions'] return ret.update({"success": False, "errors": err}) if _get_none_or_value(core_name) is None and _check_for_cores(): success = True for name in __opts__["solr.cores"]: resp = reload_core(host, name) if not resp["success"]: success = False data = {name: {"data": resp["data"]}} ret = _update_return_dict( ret, success, data, resp["errors"], resp["warnings"] ) return ret extra = ["action=STATUS", "core={}".format(core_name)] url = _format_url("admin/cores", host=host, core_name=None, extra=extra) return _http_request(url) # ################## DIH (Direct Import Handler) COMMANDS ##################### def reload_import_config(handler, host=None, core_name=None, verbose=False): """ MASTER ONLY re-loads the handler config XML file. This command can only be run if the minion is a 'master' type handler : str The name of the data import handler. host : str (None) The solr host to query. __opts__['host'] is default. core : str (None) The core the handler belongs to. verbose : boolean (False) Run the command with verbose output. Return : dict<str,obj>:: {'success':boolean, 'data':dict, 'errors':list, 'warnings':list} CLI Example: .. code-block:: bash salt '*' solr.reload_import_config dataimport None music {'clean':True} """ # make sure that it's a master minion if not _is_master() and _get_none_or_value(host) is None: err = ['solr.pre_indexing_check can only be called by "master" minions'] return _get_return_dict(False, err) if _get_none_or_value(core_name) is None and _check_for_cores(): err = ['No core specified when minion is configured as "multi-core".'] return _get_return_dict(False, err) params = ["command=reload-config"] if verbose: params.append("verbose=true") url = _format_url(handler, host=host, core_name=core_name, extra=params) return _http_request(url) def abort_import(handler, host=None, core_name=None, verbose=False): """ MASTER ONLY Aborts an existing import command to the specified handler. This command can only be run if the minion is configured with solr.type=master handler : str The name of the data import handler. host : str (None) The solr host to query. __opts__['host'] is default. core : str (None) The core the handler belongs to. verbose : boolean (False) Run the command with verbose output. Return : dict<str,obj>:: {'success':boolean, 'data':dict, 'errors':list, 'warnings':list} CLI Example: .. code-block:: bash salt '*' solr.abort_import dataimport None music {'clean':True} """ if not _is_master() and _get_none_or_value(host) is None: err = ['solr.abort_import can only be called on "master" minions'] return _get_return_dict(False, errors=err) if _get_none_or_value(core_name) is None and _check_for_cores(): err = ['No core specified when minion is configured as "multi-core".'] return _get_return_dict(False, err) params = ["command=abort"] if verbose: params.append("verbose=true") url = _format_url(handler, host=host, core_name=core_name, extra=params) return _http_request(url) def full_import(handler, host=None, core_name=None, options=None, extra=None): """ MASTER ONLY Submits an import command to the specified handler using specified options. This command can only be run if the minion is configured with solr.type=master handler : str The name of the data import handler. host : str (None) The solr host to query. __opts__['host'] is default. core : str (None) The core the handler belongs to. options : dict (__opts__) A list of options such as clean, optimize commit, verbose, and pause_replication. leave blank to use __opts__ defaults. options will be merged with __opts__ extra : dict ([]) Extra name value pairs to pass to the handler. e.g. ["name=value"] Return : dict<str,obj>:: {'success':boolean, 'data':dict, 'errors':list, 'warnings':list} CLI Example: .. code-block:: bash salt '*' solr.full_import dataimport None music {'clean':True} """ options = {} if options is None else options extra = [] if extra is None else extra if not _is_master(): err = ['solr.full_import can only be called on "master" minions'] return _get_return_dict(False, errors=err) if _get_none_or_value(core_name) is None and _check_for_cores(): err = ['No core specified when minion is configured as "multi-core".'] return _get_return_dict(False, err) resp = _pre_index_check(handler, host, core_name) if not resp["success"]: return resp options = _merge_options(options) if options["clean"]: resp = set_replication_enabled(False, host=host, core_name=core_name) if not resp["success"]: errors = ["Failed to set the replication status on the master."] return _get_return_dict(False, errors=errors) params = ["command=full-import"] for key, val in options.items(): params.append("&{}={}".format(key, val)) url = _format_url(handler, host=host, core_name=core_name, extra=params + extra) return _http_request(url) def delta_import(handler, host=None, core_name=None, options=None, extra=None): """ Submits an import command to the specified handler using specified options. This command can only be run if the minion is configured with solr.type=master handler : str The name of the data import handler. host : str (None) The solr host to query. __opts__['host'] is default. core : str (None) The core the handler belongs to. options : dict (__opts__) A list of options such as clean, optimize commit, verbose, and pause_replication. leave blank to use __opts__ defaults. options will be merged with __opts__ extra : dict ([]) Extra name value pairs to pass to the handler. e.g. ["name=value"] Return : dict<str,obj>:: {'success':boolean, 'data':dict, 'errors':list, 'warnings':list} CLI Example: .. code-block:: bash salt '*' solr.delta_import dataimport None music {'clean':True} """ options = {} if options is None else options extra = [] if extra is None else extra if not _is_master() and _get_none_or_value(host) is None: err = ['solr.delta_import can only be called on "master" minions'] return _get_return_dict(False, errors=err) resp = _pre_index_check(handler, host=host, core_name=core_name) if not resp["success"]: return resp options = _merge_options(options) # if we're nuking data, and we're multi-core disable replication for safety if options["clean"] and _check_for_cores(): resp = set_replication_enabled(False, host=host, core_name=core_name) if not resp["success"]: errors = ["Failed to set the replication status on the master."] return _get_return_dict(False, errors=errors) params = ["command=delta-import"] for key, val in options.items(): params.append("{}={}".format(key, val)) url = _format_url(handler, host=host, core_name=core_name, extra=params + extra) return _http_request(url) def import_status(handler, host=None, core_name=None, verbose=False): """ Submits an import command to the specified handler using specified options. This command can only be run if the minion is configured with solr.type: 'master' handler : str The name of the data import handler. host : str (None) The solr host to query. __opts__['host'] is default. core : str (None) The core the handler belongs to. verbose : boolean (False) Specifies verbose output Return : dict<str,obj>:: {'success':boolean, 'data':dict, 'errors':list, 'warnings':list} CLI Example: .. code-block:: bash salt '*' solr.import_status dataimport None music False """ if not _is_master() and _get_none_or_value(host) is None: errors = ['solr.import_status can only be called by "master" minions'] return _get_return_dict(False, errors=errors) extra = ["command=status"] if verbose: extra.append("verbose=true") url = _format_url(handler, host=host, core_name=core_name, extra=extra) return _http_request(url)
Save