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: lxd_container.py
""" Manage LXD containers. .. versionadded:: 2019.2.0 .. note: - :ref:`pylxd` version 2 is required to let this work, currently only available via pip. To install on Ubuntu: $ apt-get install libssl-dev python-pip $ pip install -U pylxd - you need lxd installed on the minion for the init() and version() methods. - for the config_get() and config_get() methods you need to have lxd-client installed. .. _pylxd: https://github.com/lxc/pylxd/blob/master/doc/source/installation.rst :maintainer: RenΓ© Jochum <rene@jochums.at> :maturity: new :depends: python-pylxd :platform: Linux """ from salt.exceptions import CommandExecutionError, SaltInvocationError __docformat__ = "restructuredtext en" __virtualname__ = "lxd_container" # Keep in sync with: https://github.com/lxc/lxd/blob/master/shared/status.go CONTAINER_STATUS_RUNNING = 103 CONTAINER_STATUS_FROZEN = 110 CONTAINER_STATUS_STOPPED = 102 def __virtual__(): """ Only load if the lxd module is available in __salt__ """ if "lxd.version" in __salt__: return __virtualname__ return (False, "lxd module could not be loaded") def present( name, running=None, source=None, profiles=None, config=None, devices=None, architecture="x86_64", ephemeral=False, restart_on_change=False, remote_addr=None, cert=None, key=None, verify_cert=True, ): """ Create the named container if it does not exist name The name of the container to be created running : None * If ``True``, ensure that the container is running * If ``False``, ensure that the container is stopped * If ``None``, do nothing with regards to the running state of the container source : None Can be either a string containing an image alias: .. code-block:: none "xenial/amd64" or an dict with type "image" with alias: .. code-block:: python {"type": "image", "alias": "xenial/amd64"} or image with "fingerprint": .. code-block:: python {"type": "image", "fingerprint": "SHA-256"} or image with "properties": .. code-block:: python {"type": "image", "properties": { "os": "ubuntu", "release": "14.04", "architecture": "x86_64" }} or none: .. code-block:: python {"type": "none"} or copy: .. code-block:: python {"type": "copy", "source": "my-old-container"} profiles : ['default'] List of profiles to apply on this container config : A config dict or None (None = unset). Can also be a list: .. code-block:: python [{'key': 'boot.autostart', 'value': 1}, {'key': 'security.privileged', 'value': '1'}] devices : A device dict or None (None = unset). architecture : 'x86_64' Can be one of the following: * unknown * i686 * x86_64 * armv7l * aarch64 * ppc * ppc64 * ppc64le * s390x ephemeral : False Destroy this container after stop? restart_on_change : False Restart the container when we detect changes on the config or its devices? remote_addr : An URL to a remote Server, you also have to give cert and key if you provide remote_addr! Examples: https://myserver.lan:8443 /var/lib/mysocket.sock cert : PEM Formatted SSL Zertifikate. Examples: ~/.config/lxc/client.crt key : PEM Formatted SSL Key. Examples: ~/.config/lxc/client.key verify_cert : True Wherever to verify the cert, this is by default True but in the most cases you want to set it off as LXD normally uses self-signed certificates. """ if profiles is None: profiles = ["default"] if source is None: source = {} ret = { "name": name, "running": running, "profiles": profiles, "source": source, "config": config, "devices": devices, "architecture": architecture, "ephemeral": ephemeral, "restart_on_change": restart_on_change, "remote_addr": remote_addr, "cert": cert, "key": key, "verify_cert": verify_cert, "changes": {}, } container = None try: container = __salt__["lxd.container_get"]( name, remote_addr, cert, key, verify_cert, _raw=True ) except CommandExecutionError as e: return _error(ret, str(e)) except SaltInvocationError as e: # Profile not found pass if container is None: if __opts__["test"]: # Test is on, just return that we would create the container msg = 'Would create the container "{}"'.format(name) ret["changes"] = {"created": msg} if running is True: msg = msg + " and start it." ret["changes"]["started"] = 'Would start the container "{}"'.format( name ) ret["changes"] = {"created": msg} return _unchanged(ret, msg) # create the container try: __salt__["lxd.container_create"]( name, source, profiles, config, devices, architecture, ephemeral, True, # Wait remote_addr, cert, key, verify_cert, ) except CommandExecutionError as e: return _error(ret, str(e)) msg = 'Created the container "{}"'.format(name) ret["changes"] = {"created": msg} if running is True: try: __salt__["lxd.container_start"]( name, remote_addr, cert, key, verify_cert ) except CommandExecutionError as e: return _error(ret, str(e)) msg = msg + " and started it." ret["changes"] = {"started": 'Started the container "{}"'.format(name)} return _success(ret, msg) # Container exists, lets check for differences new_profiles = set(map(str, profiles)) old_profiles = set(map(str, container.profiles)) container_changed = False profile_changes = [] # Removed profiles for k in old_profiles.difference(new_profiles): if not __opts__["test"]: profile_changes.append('Removed profile "{}"'.format(k)) old_profiles.discard(k) else: profile_changes.append('Would remove profile "{}"'.format(k)) # Added profiles for k in new_profiles.difference(old_profiles): if not __opts__["test"]: profile_changes.append('Added profile "{}"'.format(k)) old_profiles.add(k) else: profile_changes.append('Would add profile "{}"'.format(k)) if profile_changes: container_changed = True ret["changes"]["profiles"] = profile_changes container.profiles = list(old_profiles) # Config and devices changes config, devices = __salt__["lxd.normalize_input_values"](config, devices) changes = __salt__["lxd.sync_config_devices"]( container, config, devices, __opts__["test"] ) if changes: container_changed = True ret["changes"].update(changes) is_running = container.status_code == CONTAINER_STATUS_RUNNING if not __opts__["test"]: try: __salt__["lxd.pylxd_save_object"](container) except CommandExecutionError as e: return _error(ret, str(e)) if running != is_running: if running is True: if __opts__["test"]: changes["running"] = "Would start the container" return _unchanged( ret, 'Container "{}" would get changed and started.'.format(name), ) else: container.start(wait=True) changes["running"] = "Started the container" elif running is False: if __opts__["test"]: changes["stopped"] = "Would stopped the container" return _unchanged( ret, 'Container "{}" would get changed and stopped.'.format(name), ) else: container.stop(wait=True) changes["stopped"] = "Stopped the container" if ( (running is True or running is None) and is_running and restart_on_change and container_changed ): if __opts__["test"]: changes["restarted"] = "Would restart the container" return _unchanged(ret, 'Would restart the container "{}"'.format(name)) else: container.restart(wait=True) changes["restarted"] = 'Container "{}" has been restarted'.format(name) return _success(ret, 'Container "{}" has been restarted'.format(name)) if not container_changed: return _success(ret, "No changes") if __opts__["test"]: return _unchanged(ret, 'Container "{}" would get changed.'.format(name)) return _success(ret, "{} changes".format(len(ret["changes"].keys()))) def absent(name, stop=False, remote_addr=None, cert=None, key=None, verify_cert=True): """ Ensure a LXD container is not present, destroying it if present name : The name of the container to destroy stop : stop before destroying default: false remote_addr : An URL to a remote Server, you also have to give cert and key if you provide remote_addr! Examples: https://myserver.lan:8443 /var/lib/mysocket.sock cert : PEM Formatted SSL Zertifikate. Examples: ~/.config/lxc/client.crt key : PEM Formatted SSL Key. Examples: ~/.config/lxc/client.key verify_cert : True Wherever to verify the cert, this is by default True but in the most cases you want to set it off as LXD normally uses self-signed certificates. """ ret = { "name": name, "stop": stop, "remote_addr": remote_addr, "cert": cert, "key": key, "verify_cert": verify_cert, "changes": {}, } try: container = __salt__["lxd.container_get"]( name, remote_addr, cert, key, verify_cert, _raw=True ) except CommandExecutionError as e: return _error(ret, str(e)) except SaltInvocationError as e: # Container not found return _success(ret, 'Container "{}" not found.'.format(name)) if __opts__["test"]: ret["changes"] = {"removed": 'Container "{}" would get deleted.'.format(name)} return _unchanged(ret, ret["changes"]["removed"]) if stop and container.status_code == CONTAINER_STATUS_RUNNING: container.stop(wait=True) container.delete(wait=True) ret["changes"]["deleted"] = 'Container "{}" has been deleted.'.format(name) return _success(ret, ret["changes"]["deleted"]) def running( name, restart=False, remote_addr=None, cert=None, key=None, verify_cert=True ): """ Ensure a LXD container is running and restart it if restart is True name : The name of the container to start/restart. restart : restart the container if it is already started. remote_addr : An URL to a remote Server, you also have to give cert and key if you provide remote_addr! Examples: https://myserver.lan:8443 /var/lib/mysocket.sock cert : PEM Formatted SSL Zertifikate. Examples: ~/.config/lxc/client.crt key : PEM Formatted SSL Key. Examples: ~/.config/lxc/client.key verify_cert : True Wherever to verify the cert, this is by default True but in the most cases you want to set it off as LXD normally uses self-signed certificates. """ ret = { "name": name, "restart": restart, "remote_addr": remote_addr, "cert": cert, "key": key, "verify_cert": verify_cert, "changes": {}, } try: container = __salt__["lxd.container_get"]( name, remote_addr, cert, key, verify_cert, _raw=True ) except CommandExecutionError as e: return _error(ret, str(e)) except SaltInvocationError as e: # Container not found return _error(ret, 'Container "{}" not found'.format(name)) is_running = container.status_code == CONTAINER_STATUS_RUNNING if is_running: if not restart: return _success(ret, 'The container "{}" is already running'.format(name)) else: if __opts__["test"]: ret["changes"]["restarted"] = 'Would restart the container "{}"'.format( name ) return _unchanged(ret, ret["changes"]["restarted"]) else: container.restart(wait=True) ret["changes"]["restarted"] = 'Restarted the container "{}"'.format( name ) return _success(ret, ret["changes"]["restarted"]) if __opts__["test"]: ret["changes"]["started"] = 'Would start the container "{}"'.format(name) return _unchanged(ret, ret["changes"]["started"]) container.start(wait=True) ret["changes"]["started"] = 'Started the container "{}"'.format(name) return _success(ret, ret["changes"]["started"]) def frozen(name, start=True, remote_addr=None, cert=None, key=None, verify_cert=True): """ Ensure a LXD container is frozen, start and freeze it if start is true name : The name of the container to freeze start : start and freeze it remote_addr : An URL to a remote Server, you also have to give cert and key if you provide remote_addr! Examples: https://myserver.lan:8443 /var/lib/mysocket.sock cert : PEM Formatted SSL Zertifikate. Examples: ~/.config/lxc/client.crt key : PEM Formatted SSL Key. Examples: ~/.config/lxc/client.key verify_cert : True Wherever to verify the cert, this is by default True but in the most cases you want to set it off as LXD normally uses self-signed certificates. """ ret = { "name": name, "start": start, "remote_addr": remote_addr, "cert": cert, "key": key, "verify_cert": verify_cert, "changes": {}, } try: container = __salt__["lxd.container_get"]( name, remote_addr, cert, key, verify_cert, _raw=True ) except CommandExecutionError as e: return _error(ret, str(e)) except SaltInvocationError as e: # Container not found return _error(ret, 'Container "{}" not found'.format(name)) if container.status_code == CONTAINER_STATUS_FROZEN: return _success(ret, 'Container "{}" is alredy frozen'.format(name)) is_running = container.status_code == CONTAINER_STATUS_RUNNING if not is_running and not start: return _error( ret, 'Container "{}" is not running and start is False, cannot freeze it'.format( name ), ) elif not is_running and start: if __opts__["test"]: ret["changes"][ "started" ] = 'Would start the container "{}" and freeze it after'.format(name) return _unchanged(ret, ret["changes"]["started"]) else: container.start(wait=True) ret["changes"]["started"] = 'Start the container "{}"'.format(name) if __opts__["test"]: ret["changes"]["frozen"] = 'Would freeze the container "{}"'.format(name) return _unchanged(ret, ret["changes"]["frozen"]) container.freeze(wait=True) ret["changes"]["frozen"] = 'Froze the container "{}"'.format(name) return _success(ret, ret["changes"]["frozen"]) def stopped(name, kill=False, remote_addr=None, cert=None, key=None, verify_cert=True): """ Ensure a LXD container is stopped, kill it if kill is true else stop it name : The name of the container to stop kill : kill if true remote_addr : An URL to a remote Server, you also have to give cert and key if you provide remote_addr! Examples: https://myserver.lan:8443 /var/lib/mysocket.sock cert : PEM Formatted SSL Zertifikate. Examples: ~/.config/lxc/client.crt key : PEM Formatted SSL Key. Examples: ~/.config/lxc/client.key verify_cert : True Wherever to verify the cert, this is by default True but in the most cases you want to set it off as LXD normally uses self-signed certificates. """ ret = { "name": name, "kill": kill, "remote_addr": remote_addr, "cert": cert, "key": key, "verify_cert": verify_cert, "changes": {}, } try: container = __salt__["lxd.container_get"]( name, remote_addr, cert, key, verify_cert, _raw=True ) except CommandExecutionError as e: return _error(ret, str(e)) except SaltInvocationError as e: # Container not found return _error(ret, 'Container "{}" not found'.format(name)) if container.status_code == CONTAINER_STATUS_STOPPED: return _success(ret, 'Container "{}" is already stopped'.format(name)) if __opts__["test"]: ret["changes"]["stopped"] = 'Would stop the container "{}"'.format(name) return _unchanged(ret, ret["changes"]["stopped"]) container.stop(force=kill, wait=True) ret["changes"]["stopped"] = 'Stopped the container "{}"'.format(name) return _success(ret, ret["changes"]["stopped"]) def migrated( name, remote_addr, cert, key, verify_cert, src_remote_addr, stop_and_start=False, src_cert=None, src_key=None, src_verify_cert=None, ): """Ensure a container is migrated to another host If the container is running, it either must be shut down first (use stop_and_start=True) or criu must be installed on the source and destination machines. For this operation both certs need to be authenticated, use :mod:`lxd.authenticate <salt.states.lxd.authenticate` to authenticate your cert(s). name : The container to migrate remote_addr : An URL to the destination remote Server Examples: https://myserver.lan:8443 /var/lib/mysocket.sock cert : PEM Formatted SSL Zertifikate. Examples: ~/.config/lxc/client.crt key : PEM Formatted SSL Key. Examples: ~/.config/lxc/client.key verify_cert : True Wherever to verify the cert, this is by default True but in the most cases you want to set it off as LXD normally uses self-signed certificates. src_remote_addr : An URL to the source remote Server Examples: https://myserver.lan:8443 /var/lib/mysocket.sock stop_and_start: Stop before migrating and start after src_cert : PEM Formatted SSL Zertifikate, if None we copy "cert" Examples: ~/.config/lxc/client.crt src_key : PEM Formatted SSL Key, if None we copy "key" Examples: ~/.config/lxc/client.key src_verify_cert : Wherever to verify the cert, if None we copy "verify_cert" """ ret = { "name": name, "remote_addr": remote_addr, "cert": cert, "key": key, "verify_cert": verify_cert, "src_remote_addr": src_remote_addr, "src_and_start": stop_and_start, "src_cert": src_cert, "src_key": src_key, "changes": {}, } dest_container = None try: dest_container = __salt__["lxd.container_get"]( name, remote_addr, cert, key, verify_cert, _raw=True ) except CommandExecutionError as e: return _error(ret, str(e)) except SaltInvocationError as e: # Destination container not found pass if dest_container is not None: return _success(ret, 'Container "{}" exists on the destination'.format(name)) if src_verify_cert is None: src_verify_cert = verify_cert try: __salt__["lxd.container_get"]( name, src_remote_addr, src_cert, src_key, src_verify_cert, _raw=True ) except CommandExecutionError as e: return _error(ret, str(e)) except SaltInvocationError as e: # Container not found return _error(ret, 'Source Container "{}" not found'.format(name)) if __opts__["test"]: ret["changes"][ "migrated" ] = 'Would migrate the container "{}" from "{}" to "{}"'.format( name, src_remote_addr, remote_addr ) return _unchanged(ret, ret["changes"]["migrated"]) try: __salt__["lxd.container_migrate"]( name, stop_and_start, remote_addr, cert, key, verify_cert, src_remote_addr, src_cert, src_key, src_verify_cert, ) except CommandExecutionError as e: return _error(ret, str(e)) ret["changes"]["migrated"] = 'Migrated the container "{}" from "{}" to "{}"'.format( name, src_remote_addr, remote_addr ) return _success(ret, ret["changes"]["migrated"]) def _success(ret, success_msg): ret["result"] = True ret["comment"] = success_msg if "changes" not in ret: ret["changes"] = {} return ret def _unchanged(ret, msg): ret["result"] = None ret["comment"] = msg if "changes" not in ret: ret["changes"] = {} return ret def _error(ret, err_msg): ret["result"] = False ret["comment"] = err_msg if "changes" not in ret: ret["changes"] = {} return ret
Upload File
Create Folder