Skip to content

Commit 5be8c34

Browse files
committed
fixes #1
1 parent 9696908 commit 5be8c34

File tree

3 files changed

+93
-24
lines changed

3 files changed

+93
-24
lines changed

fastcloudinit/_modidx.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
'git_url': 'https://github.com/AnswerDotAI/fastcloudinit',
77
'lib_path': 'fastcloudinit'},
88
'syms': { 'fastcloudinit.core': { 'fastcloudinit.core.apt': ('core.html#apt', 'fastcloudinit/core.py'),
9+
'fastcloudinit.core.cloud_init_base': ('core.html#cloud_init_base', 'fastcloudinit/core.py'),
910
'fastcloudinit.core.cloud_init_config': ('core.html#cloud_init_config', 'fastcloudinit/core.py'),
1011
'fastcloudinit.core.log_rotate': ('core.html#log_rotate', 'fastcloudinit/core.py'),
1112
'fastcloudinit.core.mounts': ('core.html#mounts', 'fastcloudinit/core.py'),

fastcloudinit/core.py

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
# AUTOGENERATED! DO NOT EDIT! File to edit: ../nbs/00_core.ipynb.
22

33
# %% auto 0
4-
__all__ = ['ufw', 'user', 'source', 'apt', 'systemd', 'log_rotate', 'phone_home', 'reboot', 'mounts', 'cloud_init_config']
4+
__all__ = ['ufw', 'user', 'source', 'apt', 'systemd', 'log_rotate', 'phone_home', 'reboot', 'mounts', 'cloud_init_config',
5+
'cloud_init_base']
56

67
# %% ../nbs/00_core.ipynb
78
from fastcore.utils import *
@@ -17,11 +18,11 @@ def ufw(logging="off", def_incoming="deny", def_outgoing="allow", internal=None,
1718
return dict(ufw=res)
1819

1920
# %% ../nbs/00_core.ipynb
20-
def user(name, pub_key, groups=None, shell="/bin/bash", sudo=True):
21+
def user(name, pub_keys, groups=None, shell="/bin/bash", sudo=True):
2122
groups = listify(groups)
2223
if sudo and 'sudo' not in groups: groups.append('sudo')
2324
sudo = ["ALL=(ALL) NOPASSWD:ALL"] if sudo else []
24-
return dict(name=name, groups=groups, shell=shell, sudo=sudo, ssh_authorized_keys=[pub_key])
25+
return dict(name=name, groups=groups, shell=shell, sudo=sudo, ssh_authorized_keys=listify(pub_keys))
2526

2627
# %% ../nbs/00_core.ipynb
2728
def source(url, keyid, keyserver):
@@ -79,19 +80,44 @@ def mounts(devices):
7980
return dict(mounts=devices)
8081

8182
# %% ../nbs/00_core.ipynb
82-
def cloud_init_config(hostname, username, ssh_pub_key, email='',
83-
devices=None, ping_host=None, packages=None, **sources):
83+
def cloud_init_config(hostname, username, pub_keys, email='',
84+
devices=None, ping_host=None, packages=None, dropins=None, **sources):
85+
if not dropins: dropins={}
8486
cfg = dict(
8587
hostname=hostname, preserve_hostname=False,
86-
users=[user(username, ssh_pub_key, groups="docker")],
88+
users=[user(username, pub_keys, groups="docker")],
8789
packages=listify(packages), package_update=True, package_upgrade=True,
8890
disable_root=True, ssh_pwauth=False,
8991
**ufw(internal="enp7s0", OpenSSH=22),
9092
**apt(**sources),
91-
**systemd({"systemd-journald.service":"[Journal]\nSystemMaxUse=250M\n"}),
93+
**systemd(dropins),
9294
write_files=[ log_rotate() ],
9395
**mounts(devices),
9496
**phone_home(ping_host),
9597
**reboot(),
9698
)
9799
return "#cloud-config\n" + yaml.safe_dump(cfg, sort_keys=False, width=1_000_000)
100+
101+
# %% ../nbs/00_core.ipynb
102+
def cloud_init_base(hostname, packages=None, **kw):
103+
cfg = dict(
104+
hostname=hostname, preserve_hostname=False,
105+
packages=listify(packages), package_update=True, package_upgrade=True,
106+
disable_root=True, ssh_pwauth=False, **kw
107+
)
108+
return "#cloud-config\n" + yaml.safe_dump(cfg, sort_keys=False, width=1_000_000)
109+
110+
# %% ../nbs/00_core.ipynb
111+
def cloud_init_config(hostname, username, pub_keys, email='', groups=None, internal=None,
112+
devices=None, ping_host=None, packages=None, dropins=None, **sources):
113+
return cloud_init_base(
114+
hostname, packages=packages,
115+
users=[user(username, pub_keys, groups=groups)],
116+
**ufw(internal=internal, OpenSSH=22),
117+
**apt(**sources),
118+
**systemd(dropins or {}),
119+
write_files=[ log_rotate() ],
120+
**mounts(devices),
121+
**phone_home(ping_host),
122+
**reboot(),
123+
)

nbs/00_core.ipynb

Lines changed: 59 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,11 @@
8181
"outputs": [],
8282
"source": [
8383
"#| export\n",
84-
"def user(name, pub_key, groups=None, shell=\"/bin/bash\", sudo=True):\n",
84+
"def user(name, pub_keys, groups=None, shell=\"/bin/bash\", sudo=True):\n",
8585
" groups = listify(groups)\n",
8686
" if sudo and 'sudo' not in groups: groups.append('sudo')\n",
8787
" sudo = [\"ALL=(ALL) NOPASSWD:ALL\"] if sudo else []\n",
88-
" return dict(name=name, groups=groups, shell=shell, sudo=sudo, ssh_authorized_keys=[pub_key])"
88+
" return dict(name=name, groups=groups, shell=shell, sudo=sudo, ssh_authorized_keys=listify(pub_keys))"
8989
]
9090
},
9191
{
@@ -305,16 +305,17 @@
305305
"outputs": [],
306306
"source": [
307307
"#| export\n",
308-
"def cloud_init_config(hostname, username, ssh_pub_key, email='',\n",
309-
" devices=None, ping_host=None, packages=None, **sources):\n",
308+
"def cloud_init_config(hostname, username, pub_keys, email='',\n",
309+
" devices=None, ping_host=None, packages=None, dropins=None, **sources):\n",
310+
" if not dropins: dropins={}\n",
310311
" cfg = dict(\n",
311312
" hostname=hostname, preserve_hostname=False,\n",
312-
" users=[user(username, ssh_pub_key, groups=\"docker\")],\n",
313+
" users=[user(username, pub_keys, groups=\"docker\")],\n",
313314
" packages=listify(packages), package_update=True, package_upgrade=True,\n",
314315
" disable_root=True, ssh_pwauth=False,\n",
315316
" **ufw(internal=\"enp7s0\", OpenSSH=22),\n",
316317
" **apt(**sources),\n",
317-
" **systemd({\"systemd-journald.service\":\"[Journal]\\nSystemMaxUse=250M\\n\"}),\n",
318+
" **systemd(dropins),\n",
318319
" write_files=[ log_rotate() ],\n",
319320
" **mounts(devices),\n",
320321
" **phone_home(ping_host),\n",
@@ -323,6 +324,46 @@
323324
" return \"#cloud-config\\n\" + yaml.safe_dump(cfg, sort_keys=False, width=1_000_000)"
324325
]
325326
},
327+
{
328+
"cell_type": "code",
329+
"execution_count": null,
330+
"id": "b5634371",
331+
"metadata": {},
332+
"outputs": [],
333+
"source": [
334+
"#| export\n",
335+
"def cloud_init_base(hostname, packages=None, **kw):\n",
336+
" cfg = dict(\n",
337+
" hostname=hostname, preserve_hostname=False,\n",
338+
" packages=listify(packages), package_update=True, package_upgrade=True,\n",
339+
" disable_root=True, ssh_pwauth=False, **kw\n",
340+
" )\n",
341+
" return \"#cloud-config\\n\" + yaml.safe_dump(cfg, sort_keys=False, width=1_000_000)"
342+
]
343+
},
344+
{
345+
"cell_type": "code",
346+
"execution_count": null,
347+
"id": "cd7ccd28",
348+
"metadata": {},
349+
"outputs": [],
350+
"source": [
351+
"#| export\n",
352+
"def cloud_init_config(hostname, username, pub_keys, email='', groups=None, internal=None,\n",
353+
" devices=None, ping_host=None, packages=None, dropins=None, **sources):\n",
354+
" return cloud_init_base(\n",
355+
" hostname, packages=packages,\n",
356+
" users=[user(username, pub_keys, groups=groups)],\n",
357+
" **ufw(internal=internal, OpenSSH=22),\n",
358+
" **apt(**sources),\n",
359+
" **systemd(dropins or {}),\n",
360+
" write_files=[ log_rotate() ],\n",
361+
" **mounts(devices),\n",
362+
" **phone_home(ping_host),\n",
363+
" **reboot(),\n",
364+
" )"
365+
]
366+
},
326367
{
327368
"cell_type": "code",
328369
"execution_count": null,
@@ -336,16 +377,6 @@
336377
"#cloud-config\n",
337378
"hostname: myhost\n",
338379
"preserve_hostname: false\n",
339-
"users:\n",
340-
"- name: jph\n",
341-
" groups:\n",
342-
" - docker\n",
343-
" - sudo\n",
344-
" shell: /bin/bash\n",
345-
" sudo:\n",
346-
" - ALL=(ALL) NOPASSWD:ALL\n",
347-
" ssh_authorized_keys:\n",
348-
" - mykey\n",
349380
"packages:\n",
350381
"- unattended-upgrades\n",
351382
"- vim-nox\n",
@@ -382,6 +413,16 @@
382413
"package_upgrade: true\n",
383414
"disable_root: true\n",
384415
"ssh_pwauth: false\n",
416+
"users:\n",
417+
"- name: jph\n",
418+
" groups:\n",
419+
" - docker\n",
420+
" - sudo\n",
421+
" shell: /bin/bash\n",
422+
" sudo:\n",
423+
" - ALL=(ALL) NOPASSWD:ALL\n",
424+
" ssh_authorized_keys:\n",
425+
" - mykey\n",
385426
"ufw:\n",
386427
" enabled: true\n",
387428
" logging: 'off'\n",
@@ -456,8 +497,9 @@
456497
" keyid=\"9DC858229FC7DD38854AE2D88D81803C0EBFCD88\", \n",
457498
" keyserver=\"https://download.docker.com/linux/ubuntu/gpg\")\n",
458499
"devices = [ ['mydevice', \"/data\", \"ext4\", \"defaults,nofail\", \"0\", \"0\"] ]\n",
500+
"dropins = {\"systemd-journald.service\":\"[Journal]\\nSystemMaxUse=250M\\n\"}\n",
459501
"\n",
460-
"res = cloud_init_config('myhost', 'jph', 'mykey', 'j@answer.ai',\n",
502+
"res = cloud_init_config('myhost', 'jph', 'mykey', 'j@answer.ai', dropins=dropins, groups=\"docker\", internal=\"enp7s0\",\n",
461503
" devices=devices, ping_host='https://ping.me', packages=packages, docker=dsource)\n",
462504
"print(res)"
463505
]

0 commit comments

Comments
 (0)