I'm not sure exactly what you mean when saying you don't want to hardcode them in a lookup. I think you have a couple different options.
First, if those are literally the only two environements and sites, you could just create a couple calculated fields
eval env = case(match(host,"(?i)\.prod\."),"Production",match(host,"(?i)\.sys\."),"System Testing",1=1,"unknown")
eval site = case(match(host,"(?i)\.d2"),"BOHO",match(host,"(?i)\.d3"),"Cranebank",1=1,"unknown")
Or i you have a lot of them, you can use a couple lookup tables - maybe one for site and one for environment. Configure them to allow wildcard matching on host, and I think you should be fine.
For example:
host,env
*.prod.*,Production
*.sys.*,System Testing
... View more