Commit graph

23334 commits

Author SHA1 Message Date
Matt Martz
49eb53b44d
pylint plugin to catch due/past-due deprecated calls (#44143)
* Start of work on pylint plugin to catch due/past-due deprecated calls

* Improve deprecated pylint plugin

* Catch call to AnsibleModule.deprecate also

* Skip splatted kwargs, we can't infer that info

* Add error for invalid version in deprecation

* Skip version if it's a reference to a var

* Disable ansible-deprecated-no-version for displaying deprecated module info

* fix comments

* is None

* Force specifying a version, this can be disabled on a per case basis

* Disable ansible-deprecated-version by default

* Remove to look for 2.8 deprecated

* Revert "Remove to look for 2.8 deprecated"

This reverts commit 4e84034fd1.

* Add script and template used for creating issues for deprecated issues

* Fix underscore var
2018-09-25 10:31:41 -05:00
René Moser
e7926cf9f4
cs_instance: fix host migration without volume (#46115) 2018-09-25 16:48:45 +02:00
s-hertel
7e8435b96d Fix _uri option documentation for cache plugins that expect strings 2018-09-25 09:57:03 -04:00
Abhijeet Kasurde
4b4b21d745 [docs] Fix typos in aws_s3 and s3_bucket module docs (#46106)
Eucalypus to Eucalyptus

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
2018-09-25 08:57:44 -04:00
newtonne
aac1ce7333 homebrew_cask: Pass install_options during uninstall (#44938)
Until https://github.com/Homebrew/homebrew-cask/issues/40866 is fixed,
install_options should be passed when uninstalling casks to ensure that
all artefacts are removed.
2018-09-25 12:21:52 +01:00
Dan
f20938788a fixed nxos_aaa_server_host issue with type 7 encrypt key (#46015)
* fixed nxos_aaa_server_host issue with type 7 encrypt and added test cases

* added idempotence tests
2018-09-25 16:39:22 +05:30
Hirshr
c11c3506cd spotinst_aws_elastigroup elastic_ips example (#41190)
* Update spotinst_aws_elastigroup.py
2018-09-25 11:41:07 +01:00
tomww
c44de1069c Update synchronize.py, mention variable ansible_rsync_path needed for different local rsync binary (#41870)
* Update synchronize.py

If you want a different rsync binary on the local side, you need to set task variable ansible_rsync_path.
See examples.

Variable ansible_rsync_path looks to not be documented anywhere. If documented, needs to be said that is does not belong to synchronise options, instead belongs to tasks. (Sorry, I have no better wording)
2018-09-25 11:27:24 +01:00
Anoop Sood
d1688adefc Update sl_vm.py (#43966)
* Update sl_vm.py

Updated the list of datacenters to include new datacenters.
2018-09-25 11:15:51 +01:00
akira6592
8213096b7f The sshkey option is available in version 2.7 and above (#46103) 2018-09-25 10:41:23 +01:00
Gustavo Muniz do Carmo
7a747341fb Fix iterator to list conversion in ldap_entry module
PR #45778 fixes #45417
2018-09-25 11:24:44 +02:00
Joachim Mathes
30314c15c7 Generalize config retrieval in ios_l3_interface module (#45270)
This makes it work with Cisco 3750E.
2018-09-25 12:28:32 +05:30
Dan
a6c20488d3 Add ospf net type (#45904)
* Added ospf network type option to nxos_interface_ospf module

* Added documentation and example for the 'network' parameter

* adding version
2018-09-25 11:38:39 +05:30
Tobias Wolf
d5f8738bf2 [rabbitmq_binding] Fix the quoting of vhost and other names (#45109)
* [rabbitmq_binding] Fix the quoting of vhost and other names, which was broken in PR #35651
* Merge missing urllib_parse.quote from PR #42422
* Missed one line, where  also needs to be escaped, i.e., the destination
2018-09-25 11:04:41 +05:30
tstoner
e74e8b8e75 Additional feature enhancements to nxos_logging (#45844)
* Various changes to nxos_logging.  Plus added purge capibility.

* Made a few new nxapi_logging test cases conditional based on version
and/or platform.

* Addressed PR comments and ansibot shippable.  Fixed up nxos_logging documentation format.

* Addressed ansibot shippable issues with whitespaces and documentation.

* Resolved ansibot codestyle trailing whitespace
2018-09-25 11:02:09 +05:30
Jordan Borean
d6251e5b27
winrm: add further conditional to using pexect for kerb auth (#45952) 2018-09-25 09:21:22 +10:00
Peter Sprygada
1e68881c40 adds support for null values to the ternary filter (#45303)
* adds support for null values to the ternary filter

This change adds a third optional argument to the ternary filter to
handle a null value.  If the third option is specified null and false
are treated differently.

For instance, take the following example:

{{ enabled | ternary('no shutdown', 'shutdown') }}

If enabled == True, then 'no shutdown' is used.
If enabled in (False, None), then 'shutdown' is used.

With this change the following is possible:

{{ enabled | ternary('no shutdown', 'shutdown', omit) }}

If enabled == True, then 'no shutdown'
If enabled == False, then 'shutdown'
If enabled == None, then omit

* update documentation with example of filter

* update filter documentation example per comments

* fix logic error in user_guide example
2018-09-24 18:57:19 -04:00
Horie Issei
d8d4be40b0 Update typetalk.py to use com domain (#46045)
Typetalk now uses "com" domain.
FYI: https://www.typetalk.com/blog/typetalk-gets-new-top-level-domain-typetalk-com/

+label: docsite_pr
2018-09-24 16:42:06 -05:00
Sandra McCann
c5a8a911b3 fix doc links (#46094) 2018-09-24 16:08:05 -05:00
Dominik Holler
67e87d3d1c ovirt_host_network: Add save parameter to example (#45965)
The parameter 'save' is added to an example and the default
behavior is mentioned in the description of the other
examples.
2018-09-24 16:44:07 -04:00
Susant Sahani
8ef18839a6 Add systemctl daemon-reexec to systemd module
```
- name: systemctl daemon-reexec
  - systemd:
       daemon_reexec=yes
```

Closes: #38880

Signed-off-by: Susant Sahani <susant@redhat.com>
2018-09-24 15:51:44 -04:00
Matt Martz
172137c3ca
Fix issues with PLUGIN_FILTERS_CFG config handling (#45994)
* Ensure that the value of PLUGIN_FILTERS_CFG is treated as type=path, and that we use the standard section of 'defaults' instead of 'default'

* deprecate the default section

* Don't add version_added for the corrected section
2018-09-24 14:34:59 -05:00
Matt Martz
c0915e2f5a
Support nested JSON decoding in AnsibleJSONDecoder (#45924)
* Support nested JSON decoding in AnsibleJSONDecoder

* Add tests for vault portion of AnsibleJSONDecoder
2018-09-24 14:33:19 -05:00
Sandra McCann
df3655968f Infoblox scenario guide (#45664)
* creates infoblox scenario guide
* adds link to infoblox guide from modules
* adds WAPI to prerequisites
2018-09-24 14:25:01 -05:00
Rémy Léone
53886ecc9b Add an Online servers fact 2018-09-24 21:03:50 +02:00
Vinay Dandekar
fe6b7f6b5d [aws] Change IAM role name parsing to come from the ARN (#45534) 2018-09-24 12:41:23 -04:00
Sloane Hertel
485320aab8 [sns_topic] Don't mask non-authorization errors (#46030) 2018-09-24 11:58:46 -04:00
Dag Wieers
db5b65f5d6 win_get_url: Clarify the encoded slash issue (#45376)
* win_get_url; Clarify the encoded slash issue
2018-09-24 10:18:06 -05:00
Dag Wieers
f90fc8a9a2 Fix author in modules (#46068)
Fix a few cases where the author was incomplete or incorrect.
2018-09-24 10:14:29 -05:00
santascsi
6ddfd912dc Update cron.py (#46055)
<!--- Your description here -->
The documentation states the use of the "value" attribute for environment variables while this should also be the "job" attribute.
+label: docsite_pr
2018-09-24 10:06:33 -05:00
José Maia
9039002886 Fix typo in Azure ARM module documentation (#46065) 2018-09-24 09:57:23 -05:00
jgkirschbaum
0fd1a71027 New module: Manage RabbitMQ global parameters [messaging/rabbitmq_global_parameter] (#26080)
* Created rabbitmq_global_parameter.py for managing RabbitMQ global parameters

* Contributed rabbitmq_global_parameter.py for managing RabbitMQ global parameters

* Contributed rabbitmq_global_parameter.py for managing RabbitMQ global parameters

* Contributed rabbitmq_global_parameter.py for managing RabbitMQ global parameters

* Contributing rabbitmq_global_parameter.py for managing RabbitMQ global parameters

* Update rabbitmq_global_parameter.py

* Update rabbitmq_global_parameter.py

* Updated Copyright Statement

* __future__ and __metaclass__ added

* Typo corrected

* Example changed

* Import Statement changed

* Returning of values changed

* Fixed Typo

* type for parameters added

* JSON fix

* Reverted

* missing conditional when calling main added

* version_added and PEP issues corrected

* Trigger build

* version_added bumped

version_added bumped to 2.6

* Bumped version_added

* version_added bumped to 2.8

* pep8 issue corrected
2018-09-24 10:24:58 -04:00
Rémy Léone
f6154bb2e3 Refactor attribute lookup to make it multithreaded (#45786) 2018-09-24 10:23:23 -04:00
Rémy Léone
6d7004f367 Add a Scaleway IP module (#45121)
- Add an option to enable public ip at server creation
2018-09-24 10:14:23 -04:00
Nathaniel Case
03d8fa05b6
Try to be more helpful when JSON gives up (#45600)
* Try to be more helpful when JSON gives up
2018-09-24 09:09:17 -04:00
Felix Fontein
7caf70db42 docker_container: fix various idempotency problems and non-working options (#45905)
* Sorting args.

* Doing comparisons of options with container parameters in a more context-sensitive way.

This prevents unnecessary restarts, or missing restarts (f.ex. if parameters are removed from ``cmd``).

* Make blkio_weight work.

* Fix cap_drop idempotency problem.

* Making groups idempotent if it contains integers.

* Make cpuset_mems work.

* Make dns_opts work.

* Fixing log_opts: docker expects string values, returns error for integer.

* Adding tests from felixfontein/ansible-docker_container-test#2.

* Make uts work.

* Adding changelog entry.

* Forgot option security_opts.

* Fixing typo.

* Explain strict set(dict) comparison a bit more.

* Improving idempotency tests.

* Making dns_servers a list, since the ordering is relevant.

* Making dns_search_domains a list, since the ordering is relevant.

* Improving dns_search_domains/dns_servers.

* Fixing entrypoint test.

* Making sure options are only supported for correct docker-py versions.
2018-09-24 10:40:05 +01:00
Sebastian Gumprich
0b801a0595 Update yaml-style in password-lookup example (#46046)
* Update yaml-style in password-lookup example

##### SUMMARY

Update the  yaml-style in a password-lookup example to match best-practices.

##### ISSUE TYPE
- Docs Pull Request


##### COMPONENT NAME
password_lookup plugin

##### ANSIBLE VERSION
devel

* remove whitespace
2018-09-24 09:34:12 +02:00
René Moser
83ec418470
cs_loadbalancer_rule_member: fix error handling (#46012)
* make use of query_api
* fix sanity
2018-09-22 13:40:40 +02:00
Tom Hodder
c123b4e7ef digital_ocean_domain: fix to allow updating the module param ip between calls (#42009)
* update the domain record with the new ip from params if resource exists

* fixes for pylint and pep8 checks
2018-09-22 03:13:20 -04:00
Matt Davis
3b52d968e6
fix premature exit when RG doesn't exist (#46013)
* fixes #45941
* corrects regression introduced by #26104; when the resource group doesn't exist, the module exits prematurely with an error instead of creating it.
2018-09-21 16:23:21 -07:00
Adam Harvie
8659a88fea Add 'signalled' state to supervisorctl module with associated 'signal' parameter. (#32694)
https://github.com/ansible/ansible/issues/29847
2018-09-21 15:59:14 -04:00
Sam Doran
b60854357b
Unify terms and UI between 1Password lookups and facts module (#45427)
* Unify login behavior between 1Password lookup plugins and module

- Use the same names for all credential aspects
- Only require the minimal amount of information for each
- Add more examples

* Change parameter terms

- use terms in line with 1Password documentation.
- update examples
- update tests

* Improve error messages in lookup plugin

* Unify onepassword_facts with lookup plugins

- use same methods and logic for signing in or reusing existing session
- unify terms with lookup plugins

* Change rc test for determing login

An rc other than 1 can be returned when a current login session does not exist.

* Create AnsibleModuleError class

ansible.errors is not available to modules, so create an AnsibleModuleError class within the module

Do not user os.path.expanduser since this is already done by virtue of the type being "path" in the argument spec.

* Add note about risk with fact caching sensitive data

* Add note on op version that was used for testing
2018-09-21 14:26:05 -04:00
Brian Coca
a47671aad1 allow openstack invetnory to work cacheless
fixes #45431
2018-09-21 12:33:24 -04:00
Dag Wieers
66eec42f53 Fix calling deprecate with correct arguments (#44726)
This fixes #44702
2018-09-21 12:30:31 -04:00
Rémy Léone
574ed8dc7f Add documentation about the query filters (#45835) 2018-09-21 12:09:35 -04:00
Colin McCarthy
ccb89a8cb8 [network] fix typo in ftd_configuration - all operation(s) are performed over REST API (#45977) 2018-09-21 11:35:54 -04:00
Chris Smolen
0677dabad4 Add docs for say.py to indicate how to list voices (#37737)
* Update say.py

* Update say.py

* Update say.py
2018-09-21 14:51:34 +01:00
Abhijeet Kasurde
0ecbd50c3b Misc typo fixes (#45969)
Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
2018-09-21 14:43:22 +01:00
Abhijeet Kasurde
a9680ee3ef
VMware: new module vcenter_extension_facts (#45472)
Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
2018-09-21 13:57:47 +05:30
Jordan Borean
198423d6fb
powershell: do not quote join_path result to reflect ShellBase join_path (#45944) 2018-09-21 15:31:12 +10:00
Jordan Borean
ce515a626c
powershell - fix for ANSIBLE_KEEP_REMOTE_FILES on older Pythons (#45942) 2018-09-21 10:03:57 +10:00
Yanis Guenane
a7bf505474 inventory/tower: authors -< author so Doc can pick it up (#45936) 2018-09-20 16:44:22 -05:00
Sam Doran
4b121ea2ad
Remove temp checksum file (#45871) 2018-09-20 16:32:21 -04:00
lwm
0947948d6b Use dashes not underscores for linode labels. (#44719)
This is because underscores are illegals in hostnames and users might
want to create the same host names are the name of the Linode machine
(as in the report in #30059).

Closes https://github.com/ansible/ansible/issues/30059.
2018-09-20 15:42:45 -04:00
lwm
4774ea7a15 Linode: docs note for py3 limitation and deprecated API (#44723)
* Add note that linode-python having no py3 support.

Closes https://github.com/ansible/ansible/issues/44695.

* Add note that the module uses the deprecated API.
2018-09-20 15:41:46 -04:00
Andrew Gaffney
acac001742 Add number of skipped tasks to play recap in 'default' callback (#45797) 2018-09-20 14:38:54 -04:00
Michael Johnson
1a3bc7d746 Update azure_rm_virtualmachine.py (#45325)
* Update azure_rm_virtualmachine.py

A lot of Azure images are not cloud-init ready and need to be prepared manually before attempting to use the custom_data option of this module. Adding a line to the description to make others aware. If, like me, they are used to working with AWS AMIs that all seem to have cloud-init baked in, this could prevent some troubleshooting as to why their custom_data scripts aren't running in Azure.

* fixing addition to azure_rm_virtualmachine.py

* Update azure_rm_virtualmachine.py

* final update

* fixed url syntax

* nuked trailing whitespace
2018-09-21 02:22:53 +08:00
Matt Martz
95e77ac853
Ensure that the src file contents is converted to unicode in diff info (#45744)
* Ensure that the src file contents is converted to unicode in diff info. Fixes #45717

* Fix up and cleanup

* The diff functionality in the callback plugins should have the
  to_text() calls removed since we're now doing it in ActionBase
* catching of UnicodeError and warnings in the callback diff
  functionality from 61d01f549f haven't been
  needed since we switched to to_text so remove them.
* Add a note to ActionBase's diff function giving an example of when the
  diff function will be inaccurate and how to fix it

* Fix callback get_diff() tests

I believe the unittests of callback's get_diff() were wrong.  They were
sending in a list where strings were expected.  Because previous code
was transforming the lists into strings via their repr, the previous
tests did not fail but they would have formatted the test cases output
in an odd way if we had looked at it.
2018-09-20 12:31:48 -05:00
Roman D
dd5d191d7a Clarified documentation for the unsafe_writes option (#27471)
* Clarified documentation for the unsafe_writes option per #24449.
2018-09-20 11:40:14 -05:00
Rémy Léone
7c7a7efbbe Add an option to enable public ip at server creation (#44826) 2018-09-20 12:13:26 -04:00
Adam Miller
2fe150a1ef fix dnf wildcard pkg removal - fixes #27744 and #36970 (#45357)
Signed-off-by: Adam Miller <admiller@redhat.com>
2018-09-20 12:13:17 -04:00
max-allan-surevine
cb460dee74 Update keycloak_client.py (#43547)
* Update keycloak_client.py to document the 'realm' parameter, eliminate E322 ignore
2018-09-20 10:34:04 -05:00
Nathaniel Case
406b59aeba
Move persistent connections to only use registered variables (#45616)
* Try to intuit proper plugins to send to ansible-connection

* Move sub-plugins to init so that vars will be populated in executor

* Fix connection unit tests
2018-09-20 09:56:43 -04:00
Jose Delarosa
e701b5a412 Fixes HTTP redirect issue (#45513) 2018-09-20 15:23:51 +03:00
Alicia Cozine
34b8cbd365 Explain what happens when gpgcheck is not set in yum
PR #45796
2018-09-20 15:14:55 +03:00
Yanis LISIMA
45c7facd64 ec2_vpc_igw: migrate to boto3 (#45346)
* ec2_vpc_igw: draft migrate to boto3

* ec2_vpc_igw: migrate to boto3

* ec2_vpc_igw: fix error and implement code review

* ec2_vpc_igw: always catch BotoCoreError with ClientError, remove unused fail method

* ec2_vpc_igw: fix pep error
2018-09-20 19:56:19 +10:00
Jordan Borean
5c73d4f4bd
async: use async_dir for the async results file directory (#45461)
* win async: use async_dir for the async results file directory

* tried to unify POSIX and PowerShell async implementations of async_dir

* fix sanity issue
2018-09-20 19:37:54 +10:00
Zim Kalinowski
60979a96a9
Fixing azure_rm_containerregistry_facts (#45897)
* fixing cr facts

* final fix?

* fixed

* syntax

* sanity
2018-09-20 16:58:07 +08:00
Dag Wieers
51c5e60e49 Add missing ConnectionError imports (#45879)
Small fix
2018-09-20 12:01:01 +10:00
Dag Wieers
197ddd3c45
Fix incorrect type in arg_spec 2018-09-20 02:13:29 +02:00
Zim Kalinowski
83645963fb Fixing assigning ssl certificate to http listener in app gateway (#45830)
* fixed ssl certificate reference

* modified test
2018-09-19 17:00:27 -07:00
Zim Kalinowski
16fa49a894 adding os disk name (#45126)
* adding os disk name

* fixed test
2018-09-19 16:51:37 -07:00
Marc Sensenich
2b4e40c109 Add Check Mode to consul_kv (#28934) 2018-09-19 18:21:03 -04:00
ansibot
534de2df27
Fixing but on version check when the "Apache/2.4.x (Distro)" regex is not met (#27457) 2018-09-19 18:10:29 -04:00
Joseph Benden
36ab77d454 New module: Xfconf-based management of the Xfce 4 DE (#28112) 2018-09-19 18:10:22 -04:00
David Resnick
02bfb9047c datadog_monitor: fix template vars in 'name' and 'escalation_message' (#38483) 2018-09-19 17:34:53 -04:00
Adam Miller
5fdf0290d0 handle yum and dnf lockfiles - fixes #44120 (#45359)
* handle yum and dnf lockfiles - fixes #44120

Signed-off-by: Adam Miller <admiller@redhat.com>

* fix logic problem to properly check for dnf lockfile glob

Signed-off-by: Adam Miller <admiller@redhat.com>
2018-09-19 16:14:25 -04:00
Chris Archibald
e3ec9e5345 NetApp Bulk Doc changes (#45856)
* Doc changes

* fix ansibot issue

* Fix spacing
2018-09-19 20:26:28 +01:00
Adrián
f85065dabf Explain disk size in mount and add example (#41681)
* Explain disk size in mount and add example

- Explain mount with 8GB
- Add new example to start container with mount

* Removed trailing whitespace
2018-09-19 20:01:49 +01:00
Tom Paine
61f2791d95 Update postgresql_user.py (#45777)
<!--- Your description here -->
Add expires example.
+label: docsite_pr
2018-09-19 19:46:26 +01:00
Stuart MacKay
f964277628 Added documentation for collectstatic --clear. (#42007)
* Added documentation for collectstatic --clear.

Added a description of the --clear argument used with the Django management
command, collectstatic. (When #1810 added this feature the documentation
was not updated).
2018-09-19 19:23:17 +01:00
Eric Helms
74b94e119e Deprecate foreman and katello modules (#42043)
* Deprecate foreman and katello modules in 2.8, remove in 2.12
2018-09-19 11:41:54 -05:00
Felix Fontein
bc69aeca7f Fixing HTTPError case of fetch_url for Python 3 compatibility. (#45628)
* Fixing HTTPError case of fetch_url for Python 3 compatibility.

* Adding unit test.

* PEP8.

* Changelog.
2018-09-19 10:53:16 -05:00
Daniel Speichert
d34cf93f1a Migrate from MySQLdb to PyMySQL (#40123)
* Migrate from MySQLdb to PyMySQL

* Deduplicate driver loading and failure message

* Explain requirements

* Apply requirements docs change to proxysql too

* Add changelog
2018-09-19 08:44:05 -07:00
ndswartz
205693a3f9 Update short description for NetApp E-Series modules. (#45820)
Update short description according to new standards
2018-09-19 11:23:49 -04:00
Michael Scherer
ec2c131bac Remove unused import and lines, to make linter happy (#45665) 2018-09-19 19:52:52 +05:30
cordones
742d702b96 incorrect sample eos_config usage (#45750)
no such option "config" for diff_against argument.
Further below, there is an example of eos_config using diff_against with a valid option.
+label: docsite_pr
2018-09-19 19:50:33 +05:30
Trishna Guha
1b0c4fde86
fix nxos_facts indefinite hang for text based output (#45845)
Signed-off-by: Trishna Guha <trishnaguha17@gmail.com>
2018-09-19 19:37:44 +05:30
Dag Wieers
2edf20d1ed Docs: Avoid use of 'default: null' (#45795)
Various modules document the default 'null' value, but it causes None to
be shown in the documentation explicitly.
2018-09-19 09:02:27 -05:00
Jon Dufresne
2097d25506 Correct capitalization of PyPI (#45698)
As spelled on https://pypi.org/.
2018-09-19 08:51:49 -05:00
Michael Scherer
795b711394 Do not reset permissions in checkmode
If using authorized_key on a directory with non standard permissions,
using checkmode will reset the permission silently.
2018-09-19 14:40:33 +02:00
Michael Tipton
1b92e43dcb VMware: vCenter plugin : new module (#44963) 2018-09-19 17:58:11 +05:30
Dag Wieers
5f4173b8bf A few small fixes 2018-09-19 12:52:31 +02:00
João Soares
097902c35a Remove whitespaces 2018-09-19 12:52:31 +02:00
João Soares
01db7239ed Add input validation for the new asn parameter
Fix asn type from str to int
2018-09-19 12:52:31 +02:00
João Soares
165000adcd Update version_added on the asn parameter 2018-09-19 12:52:31 +02:00
João Soares
a60b14c826 Update aci_l3out documentation 2018-09-19 12:52:31 +02:00
João Soares
dd67e89f47 Add eigrp as a possible l3protocol in aci_l3out
Also fixes an error related to the required parameters. The l3out parameter is required but only 'name' was being accepted, and that should only be the alias.
2018-09-19 12:52:31 +02:00
Sviatoslav Sydorenko
a978d7f283 Fix collections.deque import in compat module 2018-09-19 13:14:24 +03:00
Tim Rupp
ccfbed3dbc
Adds bigiq_device_facts module (#45822)
This module can be used to query a variety of facts from a BIG-IQ
2018-09-18 22:30:31 -04:00