class QB::Ansible::Modules::Docker::Image
Build a Docker
image if needed. Features to deal with version-tagging.
Public Instance Methods
build_segments_for_from_image()
click to toggle source
'openresty/openresty:1.11.2.4-xenial'
=> repository: 'openresty' name: 'openresty' tag: { major: 1, minor: 11, patch: 2, revision: [4], prerelease: ['xenial'], } => ['openresty--openresty', 1, 11, 2, 4, 'xenial'] which eventually becomes the Docker tag <semver>_openresty.openresty.1.11.2.4.xenial.<build_info?>
# File lib/qb/ansible/modules/docker/image.rb, line 92 def build_segments_for_from_image return [] unless include_from_image_build [ [ (from_image.repository == 'beiarea' ? nil : from_image.repository), from_image.name, ]. compact. map { |name| name.gsub( '_', '-' ) }. join( '-' ), *from_image.tag.version.to_a.flatten, ] end
force?()
click to toggle source
# File lib/qb/ansible/modules/docker/image.rb, line 209 def force? source_base_version.dev? && repo_dirty? end
git()
click to toggle source
# File lib/qb/ansible/modules/docker/image.rb, line 108 def git lazy_var :@git do QB::Repo::Git.from_path path end end
image_name()
click to toggle source
# File lib/qb/ansible/modules/docker/image.rb, line 186 def image_name lazy_var :@image_name do name.merge \ source: nil, # NEED this! tag: QB::Docker::Image::Tag.from_s( image_version.docker_tag ) end end
image_version()
click to toggle source
# File lib/qb/ansible/modules/docker/image.rb, line 175 def image_version lazy_var :@image_version do source_version.merge \ build: [ *build_segments_for_from_image, *source_version.build ] end end
main()
click to toggle source
Entry point for the module. invoked by {#run!}.
@return [nil | {Symbol => to_json}]
when returning: - `nil`: module will successfully exit with no additional changes. - `{Symbol => #to_json}`: Hash will be merged over @facts that are returned by the module to be set in the Ansible runtime and the module will exit successfully.
# File lib/qb/ansible/modules/docker/image.rb, line 228 def main logger.info \ "Starting `_image`...", path: path, from_image: from_image.to_s, build_arg: build_arg, fact_name: fact_name QB::Docker::Image.ensure_present! \ name: image_name, pull: !image_version.dev?, build: { path: path, build_arg: { from_image: from_image.string, image_version: image_version.semver, **build_arg.to_options, }, }, # Don't push dev images push: !image_version.dev?, force: force? response[:image] = { name: image_name, version: image_version, } if fact_name response.facts[fact_name] = response[:image] end return nil end
repo_clean?()
click to toggle source
# File lib/qb/ansible/modules/docker/image.rb, line 197 def repo_clean? lazy_var :@repo_clean do git.clean? end end
repo_dirty?()
click to toggle source
# File lib/qb/ansible/modules/docker/image.rb, line 204 def repo_dirty? !repo_clean? end
source_base_version()
click to toggle source
# File lib/qb/ansible/modules/docker/image.rb, line 115 def source_base_version lazy_var :@source_base_version do QB::Package::Version.from_string (path.to_pn / 'VERSION').read end end
source_dev_version()
click to toggle source
# File lib/qb/ansible/modules/docker/image.rb, line 122 def source_dev_version lazy_var :@source_dev_version do source_base_version.build_version \ branch: git.branch, ref: git.head_short, dirty: !git.clean? # time: now end end
source_non_dev_version()
click to toggle source
# File lib/qb/ansible/modules/docker/image.rb, line 144 def source_non_dev_version tag = "v#{ source_base_version.semver }" # We check... # # 1. Repo is clean unless git.clean? raise "Can't build #{ source_base_version.level } version from " \ "dirty repo" end # 2. Tag exists unless git.tags.include? tag raise "Tag #{ tag } not found" end # 3. Tag points to current commit tag_commit = Cmds. new( "git rev-list -n 1 %s", chdir: path ). out!( tag ). chomp unless tag_commit == git.head raise "Repo is not at tag #{ tag } commit #{ tag_commit }" end # Ok, we just use the version in the file! source_base_version end
source_version()
click to toggle source
# File lib/qb/ansible/modules/docker/image.rb, line 133 def source_version lazy_var :@source_version do if source_base_version.dev? source_dev_version else source_non_dev_version end end end