|
81 | 81 | "outputs": [],
|
82 | 82 | "source": [
|
83 | 83 | "#| 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", |
85 | 85 | " groups = listify(groups)\n",
|
86 | 86 | " if sudo and 'sudo' not in groups: groups.append('sudo')\n",
|
87 | 87 | " 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))" |
89 | 89 | ]
|
90 | 90 | },
|
91 | 91 | {
|
|
305 | 305 | "outputs": [],
|
306 | 306 | "source": [
|
307 | 307 | "#| 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", |
310 | 311 | " cfg = dict(\n",
|
311 | 312 | " 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", |
313 | 314 | " packages=listify(packages), package_update=True, package_upgrade=True,\n",
|
314 | 315 | " disable_root=True, ssh_pwauth=False,\n",
|
315 | 316 | " **ufw(internal=\"enp7s0\", OpenSSH=22),\n",
|
316 | 317 | " **apt(**sources),\n",
|
317 |
| - " **systemd({\"systemd-journald.service\":\"[Journal]\\nSystemMaxUse=250M\\n\"}),\n", |
| 318 | + " **systemd(dropins),\n", |
318 | 319 | " write_files=[ log_rotate() ],\n",
|
319 | 320 | " **mounts(devices),\n",
|
320 | 321 | " **phone_home(ping_host),\n",
|
|
323 | 324 | " return \"#cloud-config\\n\" + yaml.safe_dump(cfg, sort_keys=False, width=1_000_000)"
|
324 | 325 | ]
|
325 | 326 | },
|
| 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 | + }, |
326 | 367 | {
|
327 | 368 | "cell_type": "code",
|
328 | 369 | "execution_count": null,
|
|
336 | 377 | "#cloud-config\n",
|
337 | 378 | "hostname: myhost\n",
|
338 | 379 | "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", |
349 | 380 | "packages:\n",
|
350 | 381 | "- unattended-upgrades\n",
|
351 | 382 | "- vim-nox\n",
|
|
382 | 413 | "package_upgrade: true\n",
|
383 | 414 | "disable_root: true\n",
|
384 | 415 | "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", |
385 | 426 | "ufw:\n",
|
386 | 427 | " enabled: true\n",
|
387 | 428 | " logging: 'off'\n",
|
|
456 | 497 | " keyid=\"9DC858229FC7DD38854AE2D88D81803C0EBFCD88\", \n",
|
457 | 498 | " keyserver=\"https://download.docker.com/linux/ubuntu/gpg\")\n",
|
458 | 499 | "devices = [ ['mydevice', \"/data\", \"ext4\", \"defaults,nofail\", \"0\", \"0\"] ]\n",
|
| 500 | + "dropins = {\"systemd-journald.service\":\"[Journal]\\nSystemMaxUse=250M\\n\"}\n", |
459 | 501 | "\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", |
461 | 503 | " devices=devices, ping_host='https://ping.me', packages=packages, docker=dsource)\n",
|
462 | 504 | "print(res)"
|
463 | 505 | ]
|
|
0 commit comments