prompt: 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()
  
  ```
  
golden_diff: 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),
  
verification_info: {"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"}]}