EC2: Implement GetPasswordData (#5798)
This commit is contained in:
parent
ca60f13c45
commit
fb0a4d64c8
@ -2160,7 +2160,7 @@
|
|||||||
- [X] get_managed_prefix_list_entries
|
- [X] get_managed_prefix_list_entries
|
||||||
- [ ] get_network_insights_access_scope_analysis_findings
|
- [ ] get_network_insights_access_scope_analysis_findings
|
||||||
- [ ] get_network_insights_access_scope_content
|
- [ ] get_network_insights_access_scope_content
|
||||||
- [ ] get_password_data
|
- [x] get_password_data
|
||||||
- [ ] get_reserved_instances_exchange_quote
|
- [ ] get_reserved_instances_exchange_quote
|
||||||
- [ ] get_serial_console_access_status
|
- [ ] get_serial_console_access_status
|
||||||
- [ ] get_spot_placement_scores
|
- [ ] get_spot_placement_scores
|
||||||
|
@ -478,7 +478,7 @@ ec2
|
|||||||
- [X] get_managed_prefix_list_entries
|
- [X] get_managed_prefix_list_entries
|
||||||
- [ ] get_network_insights_access_scope_analysis_findings
|
- [ ] get_network_insights_access_scope_analysis_findings
|
||||||
- [ ] get_network_insights_access_scope_content
|
- [ ] get_network_insights_access_scope_content
|
||||||
- [ ] get_password_data
|
- [x] get_password_data
|
||||||
- [ ] get_reserved_instances_exchange_quote
|
- [ ] get_reserved_instances_exchange_quote
|
||||||
- [ ] get_serial_console_access_status
|
- [ ] get_serial_console_access_status
|
||||||
- [ ] get_spot_placement_scores
|
- [ ] get_spot_placement_scores
|
||||||
|
@ -47,6 +47,7 @@ from .vpn_connections import VPNConnectionBackend
|
|||||||
from .vpcs import VPCBackend
|
from .vpcs import VPCBackend
|
||||||
from .vpc_peering_connections import VPCPeeringConnectionBackend
|
from .vpc_peering_connections import VPCPeeringConnectionBackend
|
||||||
from .vpc_service_configuration import VPCServiceConfigurationBackend
|
from .vpc_service_configuration import VPCServiceConfigurationBackend
|
||||||
|
from .windows import WindowsBackend
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
EC2_RESOURCE_TO_PREFIX,
|
EC2_RESOURCE_TO_PREFIX,
|
||||||
is_valid_resource_id,
|
is_valid_resource_id,
|
||||||
@ -122,6 +123,7 @@ class EC2Backend(
|
|||||||
IamInstanceProfileAssociationBackend,
|
IamInstanceProfileAssociationBackend,
|
||||||
CarrierGatewayBackend,
|
CarrierGatewayBackend,
|
||||||
FleetsBackend,
|
FleetsBackend,
|
||||||
|
WindowsBackend,
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
moto includes a limited set of AMIs in `moto/ec2/resources/amis.json`.
|
moto includes a limited set of AMIs in `moto/ec2/resources/amis.json`.
|
||||||
|
11
moto/ec2/models/windows.py
Normal file
11
moto/ec2/models/windows.py
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
from moto.moto_api._internal import mock_random as random
|
||||||
|
|
||||||
|
from moto.core import BaseModel
|
||||||
|
|
||||||
|
|
||||||
|
class WindowsBackend(BaseModel):
|
||||||
|
def get_password_data(self, instance_id: str) -> str:
|
||||||
|
instance = self.get_instance(instance_id)
|
||||||
|
if instance.platform == "windows":
|
||||||
|
return random.get_random_string(length=128)
|
||||||
|
return ""
|
@ -1,4 +1,5 @@
|
|||||||
from moto.core.responses import BaseResponse
|
from moto.core.responses import BaseResponse
|
||||||
|
from moto.ec2.utils import utc_date_and_time
|
||||||
|
|
||||||
|
|
||||||
class Windows(BaseResponse):
|
class Windows(BaseResponse):
|
||||||
@ -14,4 +15,22 @@ class Windows(BaseResponse):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def get_password_data(self):
|
def get_password_data(self):
|
||||||
raise NotImplementedError("Windows.get_password_data is not yet implemented")
|
instance_id = self._get_param("InstanceId")
|
||||||
|
password_data = self.ec2_backend.get_password_data(instance_id)
|
||||||
|
template = self.response_template(GET_PASSWORD_DATA_RESPONSE)
|
||||||
|
return template.render(
|
||||||
|
password_data=password_data,
|
||||||
|
instance_id=instance_id,
|
||||||
|
timestamp=utc_date_and_time(),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
GET_PASSWORD_DATA_RESPONSE = """
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<GetPasswordDataResponse xmlns="http://ec2.amazonaws.com/doc/2016-11-15/">
|
||||||
|
<requestId>6b9528d5-6818-4bd0-8936-cdedaEXAMPLE</requestId>
|
||||||
|
<instanceId>{{ instance_id }}</instanceId>
|
||||||
|
<timestamp>{{ timestamp }}</timestamp>
|
||||||
|
<passwordData>{{ password_data }}</passwordData>
|
||||||
|
</GetPasswordDataResponse>
|
||||||
|
"""
|
||||||
|
@ -1,8 +1,26 @@
|
|||||||
|
import boto3
|
||||||
import sure # noqa # pylint: disable=unused-import
|
import sure # noqa # pylint: disable=unused-import
|
||||||
|
|
||||||
from moto import mock_ec2
|
from moto import mock_ec2
|
||||||
|
from tests import EXAMPLE_AMI_WINDOWS, EXAMPLE_AMI_PARAVIRTUAL
|
||||||
|
|
||||||
|
|
||||||
@mock_ec2
|
@mock_ec2
|
||||||
def test_windows():
|
def test_get_password_data():
|
||||||
pass
|
client = boto3.client("ec2", region_name="us-east-1")
|
||||||
|
|
||||||
|
# Ensure non-windows instances return empty password data
|
||||||
|
instance_id = client.run_instances(
|
||||||
|
ImageId=EXAMPLE_AMI_PARAVIRTUAL, MinCount=1, MaxCount=1
|
||||||
|
)["Instances"][0]["InstanceId"]
|
||||||
|
resp = client.get_password_data(InstanceId=instance_id)
|
||||||
|
resp["InstanceId"].should.equal(instance_id)
|
||||||
|
resp["PasswordData"].should.equal("")
|
||||||
|
|
||||||
|
# Ensure Windows instances
|
||||||
|
instance_id = client.run_instances(
|
||||||
|
ImageId=EXAMPLE_AMI_WINDOWS, MinCount=1, MaxCount=1
|
||||||
|
)["Instances"][0]["InstanceId"]
|
||||||
|
resp = client.get_password_data(InstanceId=instance_id)
|
||||||
|
resp["InstanceId"].should.equal(instance_id)
|
||||||
|
resp["PasswordData"].should.have.length_of(128)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user