5959# local Administrator into the domain Administrator with the same password, so
6060# the connection survives the promotion. The password is never written into the
6161# export: it is supplied at run time from the terraform output, read from the
62- # environment. See goad-native-recreation.
62+ # environment.
6363RANGE_WINDOWS_CONNECTION = {
6464 "ansible_connection" : "psrp" ,
6565 "ansible_port" : 5986 ,
@@ -93,8 +93,7 @@ class GenerationError(Exception):
9393# before planting them, so a template can declare an id on every host and have
9494# it silently no-op on a provider it cannot land on -- the same id the canvas
9595# greys out there. Kept in sync with the `providers` field in
96- # frontend/src/vulns.js by tests/test_vuln_providers_sync.py. See
97- # current-activity-list (provider-aware toggles) and goad-fidelity-build.
96+ # frontend/src/vulns.js by tests/test_vuln_providers_sync.py.
9897VULN_PROVIDERS = {
9998 # The relay payoff (mitm6/WPAD, or coercion into a CVE-2019-1040-vulnerable
10099 # relay) needs a real L2 broadcast/multicast domain. Proxmox/ESXi put the
@@ -366,7 +365,7 @@ def _host_vars(self):
366365 # hosts-file play can give each host a friendly alias -- the id
367366 # the user set (and can rename) on the canvas, not a hardcoded
368367 # mythic/sliver. AD hosts also get an FQDN below. See the
369- # redstackpro.hosts role and range-access-model .
368+ # redstackpro.hosts role.
370369 "redstackpro_host_shortname" : nid ,
371370 # The host's PRIVATE address, for the /etc/hosts block -- NOT
372371 # ansible_host, which is the public address for a jumpbox or
@@ -388,7 +387,7 @@ def _host_vars(self):
388387 # list and pins the listen port so Ansible and Terraform agree on it.
389388 # Per-operator peers and client credentials are generated at apply from
390389 # redstackpro_jumpbox_operators, which the overlay already emitted. See
391- # vpn-multiuser-spec and plan.vpn_access.
390+ # plan.vpn_access.
392391 if node ["kind" ] == "jumpbox" :
393392 self ._jumpbox_vpn_vars (node , vars_ )
394393
@@ -397,7 +396,7 @@ def _host_vars(self):
397396 # member (the dc role seeds the domain side). Note the local account
398397 # no longer opens an SSH session -- sshd here is key-only as of
399398 # 2026-09-10 -- but the account is still what makes the breach real on
400- # this host. See range-access-model and P2.5.
399+ # this host.
401400 if self ._is_range () and node ["kind" ] == "jumpbox" :
402401 breach = [u ["username" ] for u in self ._assumed_breach_users ()]
403402 if breach :
@@ -422,9 +421,9 @@ def _host_vars(self):
422421 # And it carries the offensive toolchain by default, because in a
423422 # range this host IS the assumed-breach foothold the solution is
424423 # run from: leaving it bare would mean every operator hand-installs
425- # the same tools before step one. An ops-mode bastion gets nothing,
424+ # the same tools before step one. An offense bastion gets nothing,
426425 # since there the tooling belongs on the operator box. The overlay
427- # wins if it says either way. Opens no ports. See PZ-2.
426+ # wins if it says either way. Opens no ports.
428427 vars_ .setdefault ("redstackpro_jumpbox_offensive_toolkit" , True )
429428
430429 # A redirector carries two things for its cover site, and the split
@@ -498,8 +497,7 @@ def _host_vars(self):
498497 # anyway would look like a management path that works. See 0019.
499498 # A range's Windows host is provisioned over psrp as the local
500499 # Administrator; an ops range's Windows box self-provisions and
501- # is only ever reached by the winrm_ca bootstrap. See
502- # goad-native-recreation.
500+ # is only ever reached by the winrm_ca bootstrap.
503501 vars_ .update (RANGE_WINDOWS_CONNECTION if self ._is_range ()
504502 else WINDOWS_CONNECTION )
505503 # A Windows operator is internal and reached at its private
@@ -528,7 +526,7 @@ def _host_vars(self):
528526 # it by fully-qualified name as well as by its canvas alias
529527 # (redstackpro_host_shortname, set for every host above). The
530528 # address is a placeholder resolved at apply, carried in
531- # ansible_host; here we only need the name. See range-access-model.
529+ # ansible_host; here we only need the name.
532530 fqdn = self ._host_fqdn (node )
533531 if fqdn :
534532 vars_ ["redstackpro_host_fqdn" ] = fqdn
@@ -581,7 +579,7 @@ def _assumed_breach_users(self):
581579 """Every domain user flagged assumed_breach: the range's patient-zero
582580 foothold identities. Each is a low-priv domain user (seeded by the dc
583581 role) the jumpbox also creates as a local admin so an operator can SSH in
584- as it. See range-access-model and P2.5. """
582+ as it."""
585583 out = []
586584 for node in self .ctx .nodes .values ():
587585 if node .get ("kind" ) != "domain" :
@@ -956,7 +954,6 @@ def _group_vars(self):
956954 "{{ lookup('env', 'REDSTACKPRO_LAB_PASSWORD') }}"
957955 if self ._is_range ():
958956 # The account the range's Windows hosts are provisioned as.
959- # See goad-native-recreation.
960957 all_ ["redstackpro_range_admin_user" ] = "Administrator"
961958 # Per-user passwords, for a lab that seeds real per-account
962959 # credentials (GOAD's documented passwords). A task that logs on as,
@@ -986,7 +983,7 @@ def _group_vars(self):
986983 # differ by platform branch on this rather than sharing one path, so
987984 # a fix proven on one provider cannot regress another. Defaults to
988985 # "generic" when the compile did not name a provider. See
989- # goad-native-recreation and the dc role's promotion branch.
986+ # the dc role's promotion branch.
990987 all_ ["redstackpro_platform" ] = self .provider or "generic"
991988 # The SIEM addresses a Windows host's agents report to. A host reports
992989 # to every SIEM box the range has, so this maps each SIEM box's
@@ -1281,8 +1278,7 @@ def _render_site(plan):
12811278 # (the account, the password, and RDP are set at first boot), so a group
12821279 # that holds one excludes it from the play. A range inverts this: its
12831280 # Windows hosts are the domain controllers and members the play exists to
1284- # provision, so they stay in and are driven over psrp. See 0019, 0022 and
1285- # goad-native-recreation.
1281+ # provision, so they stay in and are driven over psrp. See 0019, 0022.
12861282 host_pattern = group
12871283 if group_windows and not range_mode :
12881284 host_pattern = "%s:!windows" % group
@@ -1377,7 +1373,7 @@ def _render_site(plan):
13771373 # self-provisions at boot), so it is NOT an ansible recipient -- its hosts
13781374 # block rides the boot script instead (operator_setup.ps1 / RSP_HOSTS). That
13791375 # is why the Windows play is range-only: only a range's Windows hosts are
1380- # reachable over psrp. See range-access-model and the /etc/hosts PAI item.
1376+ # reachable over psrp.
13811377 ad_groups = [g for g in ("domain_controllers" , "servers" , "workstations" )
13821378 if g in plan .groups ]
13831379 ad_hosts = set ().union (* (set (plan .groups [g ]) for g in ad_groups )) \
0 commit comments