yeh, they can be different on each env. I put them in the cookbook as a kind of example. they should be per-env attributes. 

I'll make ng_l3 attr in this file to have empty values and override them in prod env when deploying compute nodes in cheonan.
and node["openstack"]["network"]["linuxbridge"]["physical_network"] should also be set in env,
so i like to let setup_entities recipe to choose private_net between the two attrs;

attributes/ng_l3.rb
{code}
include_attribute "ktc-network"

# override this like the example below
default["openstack"]["network"]["ng_l3"] = {
  "private_network" => nil,
  "private_router" => nil,
  "private_subnet" => nil,
  "private_cidr" => nil,
  "private_nameservers" => nil,
  "floating_network" => nil,
  "floating_cidrs" => nil
}

# Example: Assume we use physical_network as our private_network. In this case,
#          don't override "private_network". setup_entities recipe will choose
#          node["openstack"]["network"]["linuxbridge"]["physical_network"] as the
#          private_network in runtime
#
# override["openstack"]["network"]["linuxbridge"]["physical_network"] = "private-net-01"
# override["openstack"]["network"]["ng_l3"] = {
#   "private_router" => "private-router-01",
#   "private_subnet" => "private-subnet-01",
#   "private_cidr" => "172.27.4.0/22",
#   "private_nameservers" => ["8.8.8.8"],
#   "floating_network" => "floating-net",
#   "floating_cidrs" => [
#     "14.63.205.50/32",
#     "14.63.205.51/32",
#     "14.63.205.52/32",
#     "14.63.205.53/32",
#     "14.63.205.54/32",
#     "14.63.205.55/32",
#     "14.63.205.56/32",
#     "14.63.205.57/32",
#     "14.63.205.58/32",
#     "14.63.205.59/32",
#     "14.63.205.60/32"
#   ]
# }
{code}

recipes/setup_entities.rb
{code}
private_net = node["openstack"]["network"]["ng_l3"]["private_network"] ||
  node["openstack"]["network"]["linuxbridge"]["physical_network"]
{code}

does it make sense?