Just for some insight,

This is the stuff we are putting into our kolla image(s):

{% block openstack_base_header %}
ADD additions-archive /

# Because we have a internal pip with internal packages.
RUN cp /additions/pip/pip.conf /etc/pip.conf
ENV PIP_CONFIG_FILE /etc/pip.conf

LABEL JENKINS_BUILD=${jenkins_job.build_number}
LABEL JENKINS_BUILD_TAG=${jenkins_job.build_tag}
LABEL JENKINS_BUILD_URL=${jenkins_job.build_url}
{% endblock %}

So the above shows up, and can be linked back into the jenkins job that built the images.

Then inside the image we have the following:::

$ cat /job.json  | python -mjson.tool
{
    "build_id": "15",
    "build_name": null,
    "build_number": "15",
    "build_tag": "jenkins-cinder-15",
    "build_url": "https://cloud1.jenkins.int.godaddy.com/job/cinder/15/";,
    "kolla_customizations": {
        "extra_requirements": [],
        "repositories": [
            {
                "name": "kolla",
                "ref": "stable/newton",
                "url": "git://git.openstack.org/openstack/kolla"
            },
            {
                "name": "clean",
                "ref": "7.0.1",
                "url": "git://git.openstack.org/openstack/cinder.git"
            },
            {
                "name": "dirty",
                "ref": "7.0.1",
                "url": "git://git.openstack.org/openstack/cinder.git"
            },
            {
                "name": "deploy",
                "ref": "master",
"url": "[email protected]:cloudplatform/openstack-deploy.git"
            },
            {
                "name": "requirements",
                "ref": "stable/liberty",
                "url": "git://git.openstack.org/openstack/requirements"
            }
        ],
"template_overrides": "\n\n{% set cinder_volume_packages_override = ['python-rados', 'python-rbd', 'ceph'] %}\n\n"
    },
    "project": {
        "author": "OpenStack",
        "fullname": "cinder-7.0.1",
        "name": "cinder",
        "url": "http://www.openstack.org/";,
        "version": "7.0.1"
    },
    "run": {
        "deploy_git": null,
        "deploy_ref": null,
        "git_target_repo": null,
        "git_target_repo_branch": null,
        "kolla_git": null,
        "kolla_image_namespace": null,
        "kolla_ref": null,
        "maintainers": null,
        "project": null,
        "project_git": null,
        "project_ref": null,
        "pushing_to_artifactory": null,
        "requirement_git": null,
        "requirement_ref": null,
        "running_unit_tests": null,
        "unit_test_path": null
    }
}

Though the run dict values are `null`, gotta fix that, haha.

But the general idea is hopefully clear.

-Josh

Steve Baker wrote:


On Thu, Apr 20, 2017 at 8:12 AM, Michał Jastrzębski <[email protected]
<mailto:[email protected]>> wrote:

    So after discussion started here [1] we came up with something like
    that:

    1. Docker build will create "fingerprint" - manifesto of versions
    saved somewhere (LABEL?)


This would be great, especially a full package version listing in an
image label. However I don't see an easy way of populating a label from
data inside the image. Other options could be:
- have a script inside the image in a known location which generates the
package manifest on the fly, do a docker run whenever you need to get a
manifest to compare with another image.
- write out the package list during image build to a known location, do
a docker run to cat out its contents when needed

As for the format, taking a yum only image as an example would we need
anything more than the output of "rpm -qa | sort"?

    2. We create new CLI tool kolla-registry for easier management of
    pushing and versioning
    3. kolla-registry will be able to query existing source docker
    registry (incl. dockerhub) for latest tag-revision and it's version
    manifesto, also dest registry for tags-revisions and manifesto
    4. if source image manifesto != dest image manifesto -> push source
    image to dest registry and increase tag-revision by 1
    5. kolla-registry will output latest list of images:tags-revisions
    available for kolla-k8s/ansible to consume
    6. we keep :4.0.0 style images for every tag in kolla repository.
    These are static and will not be revised.


Yes, this is fine, but please keep in mind that this change[1] could be
merged without changing these published 4.0.0 style image tags, with the
added advantage of locally built images with a git checkout of kolla
have a less ambiguous default tag.
[1] https://review.openstack.org/#/c/448380/

    Different scenerios can be handled this way
    1. Autopushing to dockerhub will query freshest built registry
    (tarballs, source) and and dockerhub (dest), it will create
    image:branchname (nova-api:ocata) for HEAD of stable branch every run
    and image:branchname-revision with revision increase
    2. Users will have easy time managing their local registry - dockerhub
    (source) and local (dest), if nova-api:ocata on dockerhub is newer
    than local, pull it to local and increase local tip and revision

    Thoughts?


Generally positive :)


    [1]
    
http://eavesdrop.openstack.org/irclogs/%23openstack-kolla/%23openstack-kolla.2017-04-19.log.html#t2017-04-19T19:10:25
    
<http://eavesdrop.openstack.org/irclogs/%23openstack-kolla/%23openstack-kolla.2017-04-19.log.html#t2017-04-19T19:10:25>

    On 19 April 2017 at 10:45, Fox, Kevin M <[email protected]
    <mailto:[email protected]>> wrote:
     > That works for detecting changes in the build system.
     >
     > It does not solve the issue of how to keep containers atomic on
    end user systems.
     >
     > All images in a k8s deployment should be the same image. This is
    done by specifying the same tag. When a new update is done, the
    updated deployment should specify a new tag to distinguish it from
    the old tag so that roll forwards/roll backs work atomically and as
    designed. Otherwise, roll back can actually break or roll forward
    wont actually grab newer images.
     >
     > Thanks,
     > Kevin
     >
     > ________________________________________
     > From: Michał Jastrzębski [[email protected] <mailto:[email protected]>]
     > Sent: Wednesday, April 19, 2017 8:32 AM
     > To: OpenStack Development Mailing List (not for usage questions)
     > Subject: Re: [openstack-dev] [kolla] Tags, revisions, dockerhub
     >
     > I think LABEL is great idea for all the "informative" stuff. In fact
     > if we could somehow abuse LABEL to fill it up after we get packages
     > installed, we could use it for version manifesto. That will make
    logic
     > around "if version changed" much easier since we'll have easy access
     > to this information on both image and container.
     >
     > Our autopushing mechanism will work with tags and HEAD of stable
     > branch in this case.
     >
     > Kevin, then your use case would be done like that:
     > 1. pull container nova-compute:ocata, tag it locally to
     > nova-compute:ocata-deployed, deploy it
     > 2. every now and then pull fresh nova-compute:ocata from dockerhub
     > 3. compare versions in LABELs to see whether you want to upgrade
    or not
     > 4. if you do, retag :ocata-deployed to :ocata-old, :ocata to
     > :ocata-deployed and run upgrade
     > 5. keep ocata-old, revision it, backup it for as long as you want
     >
     > I also think that we can ship utils to do this in kolla, so people
     > won't need to write these themselves.
     >
     > Does that work?
     >
     > Cheers,
     > Michal
     >
     > On 19 April 2017 at 05:02, Flavio Percoco <[email protected]
    <mailto:[email protected]>> wrote:
     >> On 19/04/17 11:20 +0100, Paul Bourke wrote:
     >>>
     >>> I'm wondering if moving to using docker labels is a better way
    of solving
     >>> the various issue being raised here.
     >>>
     >>> We can maintain a tag for each of master/ocata/newton/etc, and
    on each
     >>> image have a LABEL with info such as 'pbr of service/pbr of
    kolla/link to CI
     >>> of build/etc'. I believe this solves all points Kevin mentioned
    except
     >>> rollback, which afaik, OpenStack doesn't support anyway. It
    also solves
     >>> people's concerns with what is actually in the images, and is a
    standard
     >>> Docker mechanism.
     >>>
     >>> Also as Michal mentioned, if users are concerned about keeping
    images,
     >>> they can tag and stash them away themselves. It is overkill to
    maintain
     >>> hundreds of (imo meaningless) tags in a registry, the majority
    of which
     >>> people don't care about - they only want the latest of the
    branch they're
     >>> deploying.
     >>>
     >>> Every detail of a running Kolla system can be easily deduced by
    scanning
     >>> across nodes and printing the labels of running containers,
    functionality
     >>> which can be shipped by Kolla. There are also methods for
    fetching labels of
     >>> remote images[0][1] for users wishing to inspect what they are
    upgrading to.
     >>>
     >>> [0] https://github.com/projectatomic/skopeo
    <https://github.com/projectatomic/skopeo>
     >>> [1] https://github.com/docker/distribution/issues/1252
    <https://github.com/docker/distribution/issues/1252>
     >>
     >>
     >>
     >> You beat me to it, Paul.
     >>
     >> I think using lables to communicate the version of each
    openstack software
     >> installed in the image is the way to go here. We're looking into
    doing this
     >> ourselves as part of the RDO pipeline and it'd be awesome to
    have it being
     >> part
     >> of kolla-build itself. Steve Baker, I believe, was working on this.
     >>
     >> The more explicit we are about the contents of the image, the
    better. People
     >> want to know what's in there, rather than assuming based on the tag.
     >>
     >> Flavio
     >>
     >>
     >>> -Paul
     >>>
     >>> On 18/04/17 22:10, Michał Jastrzębski wrote:
     >>>>
     >>>> On 18 April 2017 at 13:54, Doug Hellmann
    <[email protected] <mailto:[email protected]>> wrote:
     >>>>>
     >>>>> Excerpts from Michał Jastrzębski's message of 2017-04-18
    13:37:30 -0700:
     >>>>>>
     >>>>>> On 18 April 2017 at 12:41, Doug Hellmann
    <[email protected] <mailto:[email protected]>> wrote:
     >>>>>>>
     >>>>>>> Excerpts from Steve Baker's message of 2017-04-18 10:46:43
    +1200:
     >>>>>>>>
     >>>>>>>> On Tue, Apr 18, 2017 at 9:57 AM, Doug Hellmann
     >>>>>>>> <[email protected] <mailto:[email protected]>>
     >>>>>>>> wrote:
     >>>>>>>>
     >>>>>>>>> Excerpts from Michał Jastrzębski's message of 2017-04-12
    15:59:34
     >>>>>>>>> -0700:
     >>>>>>>>>>
     >>>>>>>>>> My dear Kollegues,
     >>>>>>>>>>
     >>>>>>>>>> Today we had discussion about how to properly name/tag
    images being
     >>>>>>>>>> pushed to dockerhub. That moved towards general
    discussion on
     >>>>>>>>>> revision
     >>>>>>>>>> mgmt.
     >>>>>>>>>>
     >>>>>>>>>> Problem we're trying to solve is this:
     >>>>>>>>>> If you build/push images today, your tag is 4.0
     >>>>>>>>>> if you do it tomorrow, it's still 4.0, and will keep
    being 4.0
     >>>>>>>>>> until
     >>>>>>>>>> we tag new release.
     >>>>>>>>>>
     >>>>>>>>>> But image built today is not equal to image built
    tomorrow, so we
     >>>>>>>>>> would like something like 4.0.0-1, 4.0.0-2.
     >>>>>>>>>> While we can reasonably detect history of revisions in
    dockerhub,
     >>>>>>>>>> local env will be extremely hard to do.
     >>>>>>>>>>
     >>>>>>>>>> I'd like to ask you for opinions on desired behavior and
    how we
     >>>>>>>>>> want
     >>>>>>>>>> to deal with revision management in general.
     >>>>>>>>>>
     >>>>>>>>>> Cheers,
     >>>>>>>>>> Michal
     >>>>>>>>>>
     >>>>>>>>>
     >>>>>>>>> What's in the images, kolla? Other OpenStack components?
     >>>>>>>>
     >>>>>>>>
     >>>>>>>>
     >>>>>>>> Yes, each image will typically contain all software
    required for one
     >>>>>>>> OpenStack service, including dependencies from OpenStack
    projects or
     >>>>>>>> the
     >>>>>>>> base OS. Installed via some combination of git, pip, rpm, deb.
     >>>>>>>>
     >>>>>>>>> Where does the
     >>>>>>>>> 4.0.0 come from?
     >>>>>>>>>
     >>>>>>>>>
     >>>>>>>> Its the python version string from the kolla project
    itself, so
     >>>>>>>> ultimately
     >>>>>>>> I think pbr. I'm suggesting that we switch to using the
     >>>>>>>> version.release_string[1] which will tag with the longer
    version we
     >>>>>>>> use for
     >>>>>>>> other dev packages.
     >>>>>>>>
     >>>>>>>>
    [1]https://review.openstack.org/#/c/448380/1/kolla/common/config.py
    <https://review.openstack.org/#/c/448380/1/kolla/common/config.py>
     >>>>>>>
     >>>>>>>
     >>>>>>> Why are you tagging the artifacts containing other projects
    with the
     >>>>>>> version number of kolla, instead of their own version
    numbers and some
     >>>>>>> sort of incremented build number?
     >>>>>>
     >>>>>>
     >>>>>> This is what we do in Kolla and I'd say logistics and
    simplicity of
     >>>>>> implementation. Tags are more than just information for us.
    We have to
     >>>>>
     >>>>>
     >>>>> But for a user consuming the image, they have no idea what
    version of
     >>>>> nova is in it because the version on the image is tied to a
    different
     >>>>> application entirely.
     >>>>
     >>>>
     >>>> That's easy enough to check tho (just docker exec into
    container and
     >>>> do pip freeze). On the other hand you'll have information that
    "this
     >>>> set of various versions was tested together" which is arguably
    more
     >>>> important.
     >>>>
     >>>>>> deploy these images and we have to know a tag. Combine that
    with clear
     >>>>>> separation of build phase from deployment phase (really
    build phase is
     >>>>>> entirely optional thanks to dockerhub), you'll end up with
    either
     >>>>>> automagical script that will have to somehow detect correct
    version
     >>>>>> mix of containers that works with each other, or hand
    crafted list
     >>>>>> that will have 100+ versions hardcoded.
     >>>>>>
     >>>>>> Incremental build is hard because builds are atomic and you
    never
     >>>>>> really know how many times images were rebuilt (also local
    rebuilt vs
     >>>>>> dockerhub-pushed rebuild will cause collisions in tags).
     >>>>>>
     >>>>>>> Doug
     >>>>>>>
     >>>>>>>
     >>>>>>>
    __________________________________________________________________________
     >>>>>>> OpenStack Development Mailing List (not for usage questions)
     >>>>>>> Unsubscribe:
     >>>>>>>
    [email protected]?subject:unsubscribe
    <http://[email protected]?subject:unsubscribe>
     >>>>>>>
    http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
    <http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev>
     >>>>>>
     >>>>>>
     >>>>>
     >>>>>
     >>>>>
    __________________________________________________________________________
     >>>>> OpenStack Development Mailing List (not for usage questions)
     >>>>> Unsubscribe:
     >>>>> [email protected]?subject:unsubscribe
    <http://[email protected]?subject:unsubscribe>
     >>>>>
    http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
    <http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev>
     >>>>
     >>>>
     >>>>
     >>>>
    __________________________________________________________________________
     >>>> OpenStack Development Mailing List (not for usage questions)
     >>>> Unsubscribe:
     >>>> [email protected]?subject:unsubscribe
    <http://[email protected]?subject:unsubscribe>
     >>>>
    http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
    <http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev>
     >>>>
     >>>
     >>>
    __________________________________________________________________________
     >>> OpenStack Development Mailing List (not for usage questions)
     >>> Unsubscribe:
    [email protected]?subject:unsubscribe
    <http://[email protected]?subject:unsubscribe>
     >>>
    http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
    <http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev>
     >>
     >>
     >> --
     >> @flaper87
     >> Flavio Percoco
     >>
     >>
    __________________________________________________________________________
     >> OpenStack Development Mailing List (not for usage questions)
     >> Unsubscribe:
    [email protected]?subject:unsubscribe
    <http://[email protected]?subject:unsubscribe>
     >>
    http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
    <http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev>
     >>
     >
     >
    __________________________________________________________________________
     > OpenStack Development Mailing List (not for usage questions)
     > Unsubscribe:
    [email protected]?subject:unsubscribe
    <http://[email protected]?subject:unsubscribe>
     > http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
    <http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev>
     >
     >
    __________________________________________________________________________
     > OpenStack Development Mailing List (not for usage questions)
     > Unsubscribe:
    [email protected]?subject:unsubscribe
    <http://[email protected]?subject:unsubscribe>
     > http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
    <http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev>

    __________________________________________________________________________
    OpenStack Development Mailing List (not for usage questions)
    Unsubscribe:
    [email protected]?subject:unsubscribe
    <http://[email protected]?subject:unsubscribe>
    http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
    <http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev>


__________________________________________________________________________
OpenStack Development Mailing List (not for usage questions)
Unsubscribe: [email protected]?subject:unsubscribe
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

__________________________________________________________________________
OpenStack Development Mailing List (not for usage questions)
Unsubscribe: [email protected]?subject:unsubscribe
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

Reply via email to