Reorganizes the data such that the deployment logic can find it all
        where it expects to be.

        The raw configuration file is intended to be as human-friendly as
        possible partly through the following mechanisms:

            - In order to minimize repetition, any attributes that are common
              to all server configurations can be specified in the
              ``server_common_attributes`` stanza even though the stanza itself
              does not map directly to a deployable resource.
            - For reference locality, each security group stanza contains its
              list of rules even though rules are actually created in a
              separate stage from the groups themselves.

        In order to make the :class:`Config` object more useful to the program
        logic, this method performs the following transformations:

            - Distributes the ``server_common_attributes`` among all the
              members of the ``servers`` stanza.
            - Extracts security group rules to a top-level key, and
              interpolates all source and target values.

def prepare(self):
        """
        Reorganizes the data such that the deployment logic can find it all
        where it expects to be.

        The raw configuration file is intended to be as human-friendly as
        possible partly through the following mechanisms:

            - In order to minimize repetition, any attributes that are common
              to all server configurations can be specified in the
              ``server_common_attributes`` stanza even though the stanza itself
              does not map directly to a deployable resource.
            - For reference locality, each security group stanza contains its
              list of rules even though rules are actually created in a
              separate stage from the groups themselves.

        In order to make the :class:`Config` object more useful to the program
        logic, this method performs the following transformations:

            - Distributes the ``server_common_attributes`` among all the
              members of the ``servers`` stanza.
            - Extracts security group rules to a top-level key, and
              interpolates all source and target values.

        """
        # TODO: take server_common_attributes and disperse it among the various
        # server stanzas

        # First stage - turn all the dicts (SERVER, SECGROUP, DATABASE, LOADBAL)
        # into lists now they're merged properly
        for stanza_key, name_key in (
                (R.SERVERS, A.server.NAME),
                (R.SERVER_SECURITY_GROUPS, A.secgroup.NAME),
                (R.LOAD_BALANCERS, A.loadbalancer.NAME),
                (R.DATABASES, A.database.NAME),
                (R.BUCKETS, A.NAME),
                (R.QUEUES, A.NAME)):
            self[stanza_key] = self._convert_to_list(stanza_key, name_key)

        self._prepare_ssh_keys()
        self._prepare_secgroups()
        self._prepare_tags()
        self._prepare_dbs()
        self._prepare_servers()
        self._prepare_load_balancers()
        self._prepare_ansible()