code: def generate_config_states(self, config_id, config_flags=ConfigFlags.NONE):
          
          c_map = self._policy.container_maps[config_id.map_name]
          clients = c_map.clients or [self._policy.default_client_name]
          config_type = config_id.config_type
  
          for client_name in clients:
              if config_type == ItemType.CONTAINER:
                  c_state = self.get_container_state(client_name, config_id, config_flags)
              elif config_type == ItemType.VOLUME:
                  client_config = self._policy.clients[client_name]
                  if client_config.features['volumes']:
                      c_state = self.get_volume_state(client_name, config_id, config_flags)
                  else:
                      c_state = self.get_container_state(client_name, config_id, config_flags)
              elif config_type == ItemType.NETWORK:
                  c_state = self.get_network_state(client_name, config_id, config_flags)
              elif config_type == ItemType.IMAGE:
                  c_state = self.get_image_state(client_name, config_id, config_flags)
              else:
                  raise ValueError("Invalid configuration type.", config_type)
              c_state.inspect()
              # Extract base state, state flags, and extra info.
              state_info = ConfigState(client_name, config_id, config_flags, *c_state.get_state())
              log.debug("Configuration state information: %s", state_info)
              yield state_info
docs: Generates the actions on a single item, which can be either a dependency or a explicitly selected
          container.
  
          :param config_id: Configuration id tuple.
          :type config_id: dockermap.map.input.MapConfigId
          :param config_flags: Optional configuration flags.
          :type config_flags: dockermap.map.policy.ConfigFlags
          :return: Generator for container state information.
          :rtype: collections.Iterable[dockermap.map.state.ContainerConfigStates]