We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Elasticsearch Domain DomainName shouldn't be required
According to the CF documentation, `DomainName` isn't required: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticsearch-domain.html


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `troposphere/elasticsearch.py`
Content:
```
1 # Copyright (c) 2012-2015, Mark Peek <mark@peek.org>
2 # All rights reserved.
3 #
4 # See LICENSE file for full license.
5 
6 from . import AWSProperty, AWSObject
7 from .validators import boolean, integer, integer_range, positive_integer
8 
9 VALID_VOLUME_TYPES = ('standard', 'gp2', 'io1')
10 
11 try:
12     from awacs.aws import Policy
13     policytypes = (dict, Policy)
14 except ImportError:
15     policytypes = dict,
16 
17 
18 def validate_volume_type(volume_type):
19     """Validate VolumeType for ElasticsearchDomain"""
20     if volume_type not in VALID_VOLUME_TYPES:
21         raise ValueError("Elasticsearch Domain VolumeType must be one of: %s" %
22                          ", ".join(VALID_VOLUME_TYPES))
23     return volume_type
24 
25 
26 class EBSOptions(AWSProperty):
27     props = {
28         'EBSEnabled': (boolean, False),
29         'Iops': (positive_integer, False),
30         'VolumeSize': (integer, False),
31         'VolumeType': (validate_volume_type, False)
32     }
33 
34     def validate(self):
35         volume_type = self.properties.get('VolumeType')
36         iops = self.properties.get('Iops')
37         if volume_type == 'io1' and not iops:
38             raise ValueError("Must specify Iops if VolumeType is 'io1'.")
39 
40 
41 class ElasticsearchClusterConfig(AWSProperty):
42     props = {
43         'DedicatedMasterCount': (integer, False),
44         'DedicatedMasterEnabled': (boolean, False),
45         'DedicatedMasterType': (basestring, False),
46         'InstanceCount': (integer, False),
47         'InstanceType': (basestring, False),
48         'ZoneAwarenessEnabled': (boolean, False)
49     }
50 
51 
52 class SnapshotOptions(AWSProperty):
53     props = {
54         'AutomatedSnapshotStartHour': (integer_range(0, 23), False)
55     }
56 
57 
58 class ElasticsearchDomain(AWSObject):
59     resource_type = "AWS::Elasticsearch::Domain"
60 
61     props = {
62         'AccessPolicies': (policytypes, False),
63         'AdvancedOptions': (dict, False),
64         'DomainName': (basestring, True),
65         'EBSOptions': (EBSOptions, False),
66         'ElasticsearchClusterConfig': (ElasticsearchClusterConfig, False),
67         'SnapshotOptions': (SnapshotOptions, False),
68         'Tags': (list, False)
69     }
70
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/troposphere/elasticsearch.py b/troposphere/elasticsearch.py
--- a/troposphere/elasticsearch.py
+++ b/troposphere/elasticsearch.py
@@ -61,7 +61,7 @@
     props = {
         'AccessPolicies': (policytypes, False),
         'AdvancedOptions': (dict, False),
-        'DomainName': (basestring, True),
+        'DomainName': (basestring, False),
         'EBSOptions': (EBSOptions, False),
         'ElasticsearchClusterConfig': (ElasticsearchClusterConfig, False),
         'SnapshotOptions': (SnapshotOptions, False),

{"golden_diff": "diff --git a/troposphere/elasticsearch.py b/troposphere/elasticsearch.py\n--- a/troposphere/elasticsearch.py\n+++ b/troposphere/elasticsearch.py\n@@ -61,7 +61,7 @@\n     props = {\n         'AccessPolicies': (policytypes, False),\n         'AdvancedOptions': (dict, False),\n-        'DomainName': (basestring, True),\n+        'DomainName': (basestring, False),\n         'EBSOptions': (EBSOptions, False),\n         'ElasticsearchClusterConfig': (ElasticsearchClusterConfig, False),\n         'SnapshotOptions': (SnapshotOptions, False),\n", "issue": "Elasticsearch Domain DomainName shouldn't be required\nAccording to the CF documentation, `DomainName` isn't required: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticsearch-domain.html\n\n", "before_files": [{"content": "# Copyright (c) 2012-2015, Mark Peek <mark@peek.org>\n# All rights reserved.\n#\n# See LICENSE file for full license.\n\nfrom . import AWSProperty, AWSObject\nfrom .validators import boolean, integer, integer_range, positive_integer\n\nVALID_VOLUME_TYPES = ('standard', 'gp2', 'io1')\n\ntry:\n    from awacs.aws import Policy\n    policytypes = (dict, Policy)\nexcept ImportError:\n    policytypes = dict,\n\n\ndef validate_volume_type(volume_type):\n    \"\"\"Validate VolumeType for ElasticsearchDomain\"\"\"\n    if volume_type not in VALID_VOLUME_TYPES:\n        raise ValueError(\"Elasticsearch Domain VolumeType must be one of: %s\" %\n                         \", \".join(VALID_VOLUME_TYPES))\n    return volume_type\n\n\nclass EBSOptions(AWSProperty):\n    props = {\n        'EBSEnabled': (boolean, False),\n        'Iops': (positive_integer, False),\n        'VolumeSize': (integer, False),\n        'VolumeType': (validate_volume_type, False)\n    }\n\n    def validate(self):\n        volume_type = self.properties.get('VolumeType')\n        iops = self.properties.get('Iops')\n        if volume_type == 'io1' and not iops:\n            raise ValueError(\"Must specify Iops if VolumeType is 'io1'.\")\n\n\nclass ElasticsearchClusterConfig(AWSProperty):\n    props = {\n        'DedicatedMasterCount': (integer, False),\n        'DedicatedMasterEnabled': (boolean, False),\n        'DedicatedMasterType': (basestring, False),\n        'InstanceCount': (integer, False),\n        'InstanceType': (basestring, False),\n        'ZoneAwarenessEnabled': (boolean, False)\n    }\n\n\nclass SnapshotOptions(AWSProperty):\n    props = {\n        'AutomatedSnapshotStartHour': (integer_range(0, 23), False)\n    }\n\n\nclass ElasticsearchDomain(AWSObject):\n    resource_type = \"AWS::Elasticsearch::Domain\"\n\n    props = {\n        'AccessPolicies': (policytypes, False),\n        'AdvancedOptions': (dict, False),\n        'DomainName': (basestring, True),\n        'EBSOptions': (EBSOptions, False),\n        'ElasticsearchClusterConfig': (ElasticsearchClusterConfig, False),\n        'SnapshotOptions': (SnapshotOptions, False),\n        'Tags': (list, False)\n    }\n", "path": "troposphere/elasticsearch.py"}], "after_files": [{"content": "# Copyright (c) 2012-2015, Mark Peek <mark@peek.org>\n# All rights reserved.\n#\n# See LICENSE file for full license.\n\nfrom . import AWSProperty, AWSObject\nfrom .validators import boolean, integer, integer_range, positive_integer\n\nVALID_VOLUME_TYPES = ('standard', 'gp2', 'io1')\n\ntry:\n    from awacs.aws import Policy\n    policytypes = (dict, Policy)\nexcept ImportError:\n    policytypes = dict,\n\n\ndef validate_volume_type(volume_type):\n    \"\"\"Validate VolumeType for ElasticsearchDomain\"\"\"\n    if volume_type not in VALID_VOLUME_TYPES:\n        raise ValueError(\"Elasticsearch Domain VolumeType must be one of: %s\" %\n                         \", \".join(VALID_VOLUME_TYPES))\n    return volume_type\n\n\nclass EBSOptions(AWSProperty):\n    props = {\n        'EBSEnabled': (boolean, False),\n        'Iops': (positive_integer, False),\n        'VolumeSize': (integer, False),\n        'VolumeType': (validate_volume_type, False)\n    }\n\n    def validate(self):\n        volume_type = self.properties.get('VolumeType')\n        iops = self.properties.get('Iops')\n        if volume_type == 'io1' and not iops:\n            raise ValueError(\"Must specify Iops if VolumeType is 'io1'.\")\n\n\nclass ElasticsearchClusterConfig(AWSProperty):\n    props = {\n        'DedicatedMasterCount': (integer, False),\n        'DedicatedMasterEnabled': (boolean, False),\n        'DedicatedMasterType': (basestring, False),\n        'InstanceCount': (integer, False),\n        'InstanceType': (basestring, False),\n        'ZoneAwarenessEnabled': (boolean, False)\n    }\n\n\nclass SnapshotOptions(AWSProperty):\n    props = {\n        'AutomatedSnapshotStartHour': (integer_range(0, 23), False)\n    }\n\n\nclass ElasticsearchDomain(AWSObject):\n    resource_type = \"AWS::Elasticsearch::Domain\"\n\n    props = {\n        'AccessPolicies': (policytypes, False),\n        'AdvancedOptions': (dict, False),\n        'DomainName': (basestring, False),\n        'EBSOptions': (EBSOptions, False),\n        'ElasticsearchClusterConfig': (ElasticsearchClusterConfig, False),\n        'SnapshotOptions': (SnapshotOptions, False),\n        'Tags': (list, False)\n    }\n", "path": "troposphere/elasticsearch.py"}]}