Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] Add support for Initializing Windows based AMI's #31

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 41 additions & 4 deletions carthage_aws/vm.py
Original file line number Diff line number Diff line change
Expand Up @@ -222,15 +222,52 @@ async def find(self):

async def pre_create_hook(self):
# operation lock is held by overriding find_or_create
if getattr(self.model, 'cloud_init', False):
cloud_config = await self.ainjector(generate_cloud_init_cloud_config, model=self.model)
_cloud_init = getattr(self.model, 'cloud_init', False)
_win_init = getattr(self.model, 'win_init', False)
cloud_config = await self.ainjector(generate_cloud_init_cloud_config, model=self.model)

if _cloud_init and _win_init:
raise ValueError("Can not win_init and cloud_init at the same time.")
if not _cloud_init and not _win_init:
self._user_data = await self.user_data()

if _cloud_init:
user_data = "#cloud-config\n"
user_data += yaml.dump(cloud_config.user_data, default_flow_style=False)
self._user_data = user_data
if self.ssh_online_command == Machine.ssh_online_command:
self.ssh_online_command = 'systemctl --wait is-system-running'
else:
self._user_data = await self.user_data()

if _win_init:
script_content = []
password = cloud_config.user_data.get('password', None)
if password:
script_content.append(f"net user Administrator {password}")
enable_winrm = cloud_config.user_data.get('winrm', False)
if enable_winrm:
script_content = script_content + [
"winrm quickconfig -q",
"winrm set winrm/config/service '@{{AllowUnencrypted=\"true\"}}'",
"winrm set winrm/config/service/auth '@{{Basic=\"true\"}}'",
]
user_data = {
'version': 1.0,
'tasks': [
{
'task': 'executeScript',
'inputs': [
{
'frequency': 'always',
'type': 'powershell',
'runAs': 'localSystem',
'content': "\n".join(script_content),
}
]
}
]
}
self._user_data = yaml.dump(user_data)

self.image_id = await self.ainjector.get_instance_async('aws_ami')
self.iam_profile = await self.ainjector.get_instance_async(InjectionKey("aws_iam_profile", _optional=True))
await self.start_dependencies()
Expand Down
Loading