Reorganize docs into user/admin guide

Refresh the user and admin guide for v3 changes, and reorganize into
a narrative structure which makes more sense for v3.

Change-Id: I4ac3b18d5ed33b0fea4e2ef0318b19bfc3447ccc
diff --git a/doc/source/user/concepts.rst b/doc/source/user/concepts.rst
new file mode 100644
index 0000000..6197396
--- /dev/null
+++ b/doc/source/user/concepts.rst
@@ -0,0 +1,85 @@
+:title: Zuul Concepts
+
+Zuul Concepts
+=============
+
+Zuul's configuration is organized around the concept of a *pipeline*.
+In Zuul, a pipeline encompasses a workflow process which can be
+applied to one or more projects.  For instance, a "check" pipeline
+might describe the actions which should cause newly proposed changes
+to projects to be tested.  A "gate" pipeline might implement
+:ref:`project_gating` to automate merging changes to projects only if
+their tests pass.  A "post" pipeline might update published
+documentation for a project when changes land.
+
+The names "check", "gate", and "post" are arbitrary -- these are not
+concepts built into Zuul, but rather they are just a few common
+examples of workflow processes that can be described to Zuul and
+implemented as pipelines.
+
+Once a pipeline has been defined, any number of projects may be
+associated with it, each one specifying what jobs should be run for
+that project in a given pipeline.
+
+Pipelines have associated *triggers* which are descriptions of events
+which should cause something to be enqueued into a pipeline.  For
+example, when a patchset is uploaded to Gerrit, a Gerrit
+*patchset-created* event is emitted.  A pipeline configured to trigger
+on *patchset-created* events would then enqueue the associated change
+when Zuul receives that event.  If there are jobs associated with that
+project and pipeline, they will be run.  In addition to Gerrit, other
+triggers are available, including GitHub, timer, and zuul.  See
+:ref:`drivers` for a full list of available triggers.
+
+Once all of the jobs for an item in a pipeline have been run, the
+pipeline's *reporters* are responsible for reporting the results of
+all of the jobs.  Continuing the example from earlier, if a pipeline
+were configured with a Gerrit reporter, it would leave a review
+comment on the change and set any approval votes that are configured.
+There are several reporting phases available; each of which may be
+configured with any number of reporters.  See :ref:`drivers` for a
+full list of available reporters.
+
+The items enqueued into a pipeline are each associated with a git ref.
+That ref may point to a proposed change, or it may be the tip of a
+branch or a tag.  The triggering event determines the ref, and whether
+it represents a proposed or merged commit.  Zuul prepares the ref for
+an item before running jobs.  In the case of a proposed change, that
+means speculatively merging the change into its target branch.  This
+means that any jobs that operate on the change will run with the git
+repo in the state it will be in after the change merges (which may be
+substantially different than the git repo state of the change itself
+since the repo may have merged other changes since the change was
+originally authored).  Items in a pipeline may depend on other items,
+and if they do, all of their dependent changes will be included in the
+git repo state that Zuul prepares.  For more detail on this process,
+see :ref:`project_gating` and :ref:`dependencies`.
+
+The configuration for nearly everything described above is held in
+files inside of the git repos upon which Zuul operates.  Zuul's
+configuration is global, but distributed.  Jobs which are defined in
+one project might be used in another project while pipelines are
+available to all projects.  When Zuul starts, it reads its
+configuration from all of the projects it knows about, and when
+changes to its configuration are proposed, those changes may take
+effect temporarily as part of the proposed change, or immediately
+after the change merges, depending on the type of project in which the
+change appears.
+
+Jobs specify the type and quantity of nodes which they require.
+Before executing each job, Zuul will contact it's companion program,
+Nodepool, to supply them.  Nodepool may be configured to supply static
+nodes or contact cloud providers to create or delete nodes as
+necessary.  The types of nodes available to Zuul are determined by the
+Nodepool administrator.
+
+The executable contents of jobs themselves are Ansible playbooks.
+Ansible's support for orchestrating tasks on remote nodes is
+particularly suited to Zuul's support for multi-node testing.  Ansible
+is also easy to use for simple tasks (such as executing a shell
+script) or sophisticated deployment scenarios.  When Zuul runs
+Ansible, it attempts to do so in a manner most similar to the way that
+Ansible might be used to orchestrate remote systems.  Ansible itself
+is run on the executor and acts remotely upon the test nodes supplied
+to a job.  This facilitates continuous delivery by making it possible
+to use the same Ansible playbooks in testing and production.