foreman_docker 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 79d46d67b21374126131d7fc7550feb71bbabb2c
4
- data.tar.gz: 1b8d4d788c2ba1c72ab8aa62641082aff4a7c8e1
3
+ metadata.gz: d4e681e8c0ceee246d607633e6b910b9dc6ba280
4
+ data.tar.gz: 8e56c72c227e1a14cb14a22f44b854fab6f2bc6c
5
5
  SHA512:
6
- metadata.gz: 813096a864f743b67807f6065aa581d18a6c5182653dcb93c5e0d187378dcf62e91e92c1a377090cd32b76eac5df61faf5d0ffc2efa6f8ceb6840f49cacba30b
7
- data.tar.gz: 7d1e069cdbc84cc05078274476f19ad69441f454f5d20775e155fb3cdfe4df1cd949f25c8db582bbaa00284e4ac8db01ce5dbf64f1d5e008dae7538c476b00fc
6
+ metadata.gz: ee41e12ec2a7dca60bb0d2bed285e1cbdada0ec0b28e853e33d6bc3d998b0436d37c2dec7c01313b367f184b5ad44d3d7df32c72d2c9886c8a4f4adddc86a89e
7
+ data.tar.gz: 8cd2fb046a8e8521954cafa9f6e6183b1b6fb6a45a06ec228a7d3800d8ec5e12342b6e36bf5259078c9165b4764e3cf41b37c168b9565050d25ac1c8ddfd1077
@@ -1,5 +1,15 @@
1
1
  $(document).ready(function() {
2
- var tag = $('#tag');
2
+ setupAutoComplete("hub");
3
+ setupAutoComplete("registry");
4
+ $('#hub_tab').click( function() {
5
+ $('#docker_container_wizard_states_image_registry_id').val('');
6
+ });
7
+ });
8
+
9
+ function setupAutoComplete(registryType) {
10
+ var tag = getTag(registryType),
11
+ repo = getRepo(registryType);
12
+
3
13
  tag.autocomplete({
4
14
  source: [],
5
15
  autoFocus: true,
@@ -9,18 +19,12 @@ $(document).ready(function() {
9
19
  $(this).data("uiAutocomplete").search($(this).val());
10
20
  });
11
21
 
12
- var target = $('#search');
13
- //autoCompleteRepo(target);
14
- target.autocomplete({
15
- source: function( request, response ) { autoCompleteRepo(target); },
22
+ repo.autocomplete({
23
+ source: function( request, response ) { autoCompleteRepo(repo); },
16
24
  delay: 500,
17
25
  minLength: 1
18
26
  });
19
-
20
- $('#hub_tab').click( function() {
21
- $('#docker_container_wizard_states_image_registry_id').val('');
22
- });
23
- });
27
+ }
24
28
 
25
29
  function autoCompleteRepo(item) {
26
30
  $.ajax({
@@ -29,67 +33,103 @@ function autoCompleteRepo(item) {
29
33
  data: { search: item.val(), registry_id: $('#docker_container_wizard_states_image_registry_id').val() },
30
34
  //data:'search=' + item.val(),
31
35
  success:function (result) {
36
+ var registryType = $(item).data('registry'),
37
+ search_add_on = getSearchAddOn(registryType),
38
+ tag = getTag(registryType);
32
39
  if(result == 'true'){
33
- $('#search-addon').attr('title', 'Image found in the compute resource');
34
- $('#search-addon').removeClass('glyphicon-remove');
35
- $('#search-addon').css('color', 'lightgreen');
36
- $('#search-addon').addClass('glyphicon-ok');
37
- setWaitingText('Image found: <strong>' + item.val() + '</strong>. Retrieving available tags, please wait...');
38
- setAutocompleteTags();
40
+ search_add_on.attr('title', 'Image found in the compute resource');
41
+ search_add_on.removeClass('glyphicon-remove');
42
+ search_add_on.css('color', 'lightgreen');
43
+ search_add_on.addClass('glyphicon-ok');
44
+ setWaitingText('Image found: <strong>' + item.val() + '</strong>. Retrieving available tags, please wait...', registryType);
45
+ setAutocompleteTags(registryType);
39
46
  } else {
40
- $('#search-addon').attr('title', 'Image NOT found in the compute resource');
41
- $('#search-addon').removeClass('glyphicon-ok');
42
- $('#search-addon').css('color', 'red');
43
- $('#search-addon').addClass('glyphicon-remove');
44
- $('#tag').autocomplete('option', 'source', []);
47
+ search_add_on.attr('title', 'Image NOT found in the compute resource');
48
+ search_add_on.removeClass('glyphicon-ok');
49
+ search_add_on.css('color', 'red');
50
+ search_add_on.addClass('glyphicon-remove');
51
+ tag.autocomplete('option', 'source', []);
45
52
  }
46
53
  }
47
54
  });
48
55
  }
49
56
 
50
- function setAutocompleteTags() {
51
- var tag = $('#tag');
57
+ function setAutocompleteTags(registryType) {
58
+ var tag = getTag(registryType);
52
59
  tag.addClass('tags-autocomplete-loading');
53
60
  tag.val('');
54
61
  var source = [];
55
- $.getJSON( tag.data("url"), { search: $('#search').val(), registry_id: $('#docker_container_wizard_states_image_registry_id').val() },
62
+ $.getJSON( tag.data("url"), { search: getRepo(registryType).val(), registry_id: $('#docker_container_wizard_states_image_registry_id').val() },
56
63
  function(data) {
57
- $('#searching_spinner').hide();
64
+ getSearchSpinner(registryType).hide();
58
65
  tag.removeClass('tags-autocomplete-loading');
59
66
  $.each( data, function(index, value) {
60
67
  source.push({label: value.label, value: value.value});
61
68
  });
62
- $('#tag').focus();
69
+ tag.focus();
63
70
  });
64
71
  tag.autocomplete('option', 'source', source);
65
72
  }
66
73
 
67
74
  function searchRepo(item) {
68
- setWaitingText('<strong>Searching</strong> in the hub, this can be slow, please wait...');
69
- $('#repository_search_results').html('');
70
- $('#repository_search_results').show();
75
+ var registryType = $(item).data('registry'),
76
+ results = getRepositorySearchResults(registryType),
77
+ search = getRepo(registryType),
78
+ searching_spinner = getSearchSpinner(registryType);
79
+ setWaitingText('<strong>Searching</strong> in the hub, this can be slow, please wait...', registryType);
80
+ results.html('');
81
+ results.show();
71
82
  $.ajax({
72
83
  type:'get',
73
84
  dataType:'text',
74
85
  url: $(item).attr('data-url'),
75
- data: { search: $('#search').val(), registry_id: $('#docker_container_wizard_states_image_registry_id').val() },
86
+ data: { search: search.val(), registry_id: $('#docker_container_wizard_states_image_registry_id').val() },
76
87
  success: function (result) {
77
- $('#repository_search_results').html(result);
88
+ results.html(result);
78
89
  },
79
90
  complete: function (result) {
80
- $('#searching_spinner').hide();
91
+ searching_spinner.hide();
81
92
  }
82
93
  });
83
94
  }
84
95
 
85
96
  function repoSelected(item) {
86
- $('#repository_search_results').hide();
87
- setWaitingText('Image selected: <strong>' + item.text + '</strong>. Retrieving available tags, please wait...');
88
- $('#search').val(item.text);
89
- setAutocompleteTags(item);
97
+ var registryType = "hub";
98
+ if ($(item).data("hub") !== true) {
99
+ registryType = "registry";
100
+ }
101
+
102
+ getRepositorySearchResults(registryType).hide();
103
+ setWaitingText('Image selected: <strong>' + item.text + '</strong>. Retrieving available tags, please wait...', registryType);
104
+ getRepo(registryType).val(item.text);
105
+ setAutocompleteTags(registryType);
106
+ }
107
+
108
+ function setWaitingText(string, registryType) {
109
+ getWaitText(registryType).html(string);
110
+ getSearchSpinner(registryType).show();
111
+ }
112
+
113
+ function getTag(registryType) {
114
+ return $('form[data-registry="' + registryType + '"] input[data-tag]:first');
115
+ }
116
+
117
+ function getRepo(registryType) {
118
+ return $('form[data-registry="' + registryType + '"] input[data-search]:first');
119
+ }
120
+
121
+ function getSearchSpinner(registryType) {
122
+ return $('form[data-registry="' + registryType + '"] [data-search-spinner]:first');
90
123
  }
91
124
 
92
- function setWaitingText(string) {
93
- $('#waiting_text').html(string);
94
- $('#searching_spinner').show();
125
+ function getRepositorySearchResults(registryType) {
126
+ return $('form[data-registry="' + registryType + '"] [data-repository-search-results]:first');
95
127
  }
128
+
129
+ function getSearchAddOn(registryType) {
130
+ return $('form[data-registry="' + registryType + '"] [data-search-addon]:first');
131
+ }
132
+
133
+ function getWaitText(registryType) {
134
+ return $('form[data-registry="' + registryType + '"] [data-wait-text]:first');
135
+ }
@@ -24,7 +24,8 @@ class ImageSearchController < ::ApplicationController
24
24
  respond_to do |format|
25
25
  format.js do
26
26
  render :partial => 'repository_search_results',
27
- :locals => { :repositories => repositories }
27
+ :locals => { :repositories => repositories,
28
+ :use_hub => use_hub? }
28
29
  end
29
30
  end
30
31
  end
@@ -25,4 +25,26 @@ module ContainerStepsHelper
25
25
  def taxonomy_icon(taxonomy)
26
26
  taxonomy == 'locations' ? 'globe' : 'briefcase'
27
27
  end
28
+
29
+ def tab_class(tab_name)
30
+ active_tab.to_s == tab_name.to_s ? "active" : ""
31
+ end
32
+
33
+ def model_for(registry_type)
34
+ if active_tab.to_s == registry_type.to_s
35
+ @docker_container_wizard_states_image
36
+ else
37
+ DockerContainerWizardStates::Image.new(:wizard_state => @state)
38
+ end
39
+ end
40
+
41
+ def active_tab
42
+ if @docker_container_wizard_states_image.katello?
43
+ :katello
44
+ elsif @docker_container_wizard_states_image.registry_id.nil?
45
+ :hub
46
+ else
47
+ :registry
48
+ end
49
+ end
28
50
  end
@@ -13,7 +13,8 @@ class Container < ActiveRecord::Base
13
13
 
14
14
  attr_accessible :command, :repository_name, :name, :compute_resource_id, :entrypoint,
15
15
  :cpu_set, :cpu_shares, :memory, :tty, :attach_stdin, :registry_id,
16
- :attach_stdout, :attach_stderr, :tag, :uuid, :environment_variables_attributes
16
+ :attach_stdout, :attach_stderr, :tag, :uuid, :environment_variables_attributes,
17
+ :katello
17
18
 
18
19
  def repository_pull_url
19
20
  repo = tag.blank? ? repository_name : "#{repository_name}:#{tag}"
@@ -15,6 +15,7 @@ class DockerContainerWizardState < ActiveRecord::Base
15
15
  { :repository_name => image.repository_name,
16
16
  :tag => image.tag,
17
17
  :registry_id => image.registry_id,
18
+ :katello => image.katello?,
18
19
  :name => configuration.name,
19
20
  :compute_resource_id => preliminary.compute_resource_id,
20
21
  :tty => environment.tty,
@@ -25,6 +26,7 @@ class DockerContainerWizardState < ActiveRecord::Base
25
26
  :attach_stdin => environment.attach_stdin,
26
27
  :attach_stderr => environment.attach_stderr,
27
28
  :cpu_shares => configuration.cpu_shares,
28
- :cpu_set => configuration.cpu_set }
29
+ :cpu_set => configuration.cpu_set
30
+ }
29
31
  end
30
32
  end
@@ -11,13 +11,13 @@ module DockerContainerWizardStates
11
11
  def used_location_ids
12
12
  Location.joins(:taxable_taxonomies).where(
13
13
  'taxable_taxonomies.taxable_type' => 'DockerContainerWizardStates::Preliminary',
14
- 'taxable_taxonomies.taxable_id' => id).pluck(:id)
14
+ 'taxable_taxonomies.taxable_id' => id).pluck("#{Taxonomy.table_name}.id")
15
15
  end
16
16
 
17
17
  def used_organization_ids
18
18
  Organization.joins(:taxable_taxonomies).where(
19
19
  'taxable_taxonomies.taxable_type' => 'DockerContainerWizardStates::Preliminary',
20
- 'taxable_taxonomies.taxable_id' => id).pluck(:id)
20
+ 'taxable_taxonomies.taxable_id' => id).pluck("#{Taxonomy.table_name}.id")
21
21
  end
22
22
  end
23
23
  end
@@ -6,19 +6,22 @@ class DockerRegistry < ActiveRecord::Base
6
6
  has_many :containers, :foreign_key => "registry_id", :dependent => :destroy
7
7
  encrypts :password
8
8
 
9
+ validates_lengths_from_database
10
+ validates :name, :presence => true, :uniqueness => true
11
+
9
12
  scoped_search :on => :name, :complete_value => true
10
13
  scoped_search :on => :url
11
14
 
12
15
  def used_location_ids
13
16
  Location.joins(:taxable_taxonomies).where(
14
17
  'taxable_taxonomies.taxable_type' => 'DockerRegistry',
15
- 'taxable_taxonomies.taxable_id' => id).pluck(:id)
18
+ 'taxable_taxonomies.taxable_id' => id).pluck("#{Taxonomy.table_name}.id")
16
19
  end
17
20
 
18
21
  def used_organization_ids
19
22
  Organization.joins(:taxable_taxonomies).where(
20
23
  'taxable_taxonomies.taxable_type' => 'DockerRegistry',
21
- 'taxable_taxonomies.taxable_id' => id).pluck(:id)
24
+ 'taxable_taxonomies.taxable_id' => id).pluck("#{Taxonomy.table_name}.id")
22
25
  end
23
26
 
24
27
  def prefixed_url(image_name)
@@ -6,8 +6,8 @@ module Service
6
6
  def initialize(params = {})
7
7
  config = DEFAULTS.merge(params)
8
8
  uri = URI(config.delete(:url))
9
- uri.user = config.delete(:user)
10
- uri.password = config.delete(:password)
9
+ uri.user = config.delete(:user) unless config[:user].blank?
10
+ uri.password = config.delete(:password) unless config[:password].blank?
11
11
  @config = config.merge(:url => uri.to_s)
12
12
  end
13
13
 
@@ -8,7 +8,8 @@
8
8
  <%= _("Back") %>
9
9
  </a>
10
10
  <% end %>
11
- <%= button_tag(:type => 'submit', :class => "btn btn-primary pull-right") do %>
11
+ <% next_id = defined?(registry) ? "next_#{registry}" : "next" %>
12
+ <%= button_tag(:id => next_id, :type => 'submit', :class => "btn btn-primary pull-right") do %>
12
13
  <% if last_step? %>
13
14
  <%= _("Submit") %>
14
15
  <% else %>
@@ -0,0 +1,53 @@
1
+ <%- model = model_for(registry) %>
2
+ <%= form_for model, :namespace => registry,
3
+ :class => 'form-horizontal',
4
+ :url => wizard_path,
5
+ :method => :put,
6
+ :html => {:data => {:registry => registry}} do |f| %>
7
+ <% if registry == "registry" -%>
8
+ <div class="input-group col-md-6">
9
+ <%= select_registry f %>
10
+ </div>
11
+ <% end -%>
12
+
13
+ <div>
14
+ <div class="form-group col-md-6">
15
+ <%= label_tag "image_id", _('Search'), :class=>"col-sm-2 control-label" %>
16
+ <div class="input-group">
17
+
18
+ <%= auto_complete_docker_search('docker_container_wizard_states_image[repository_name]', '',
19
+ :'data-url' => auto_complete_repository_name_image_search_path(model.compute_resource_id),
20
+ :value => f.object.repository_name.present? ? f.object.repository_name : '',
21
+ :'data-registry' => registry,
22
+ :'data-search' => true,
23
+ :focus_on_load => true,
24
+ :placeholder => _('Find your favorite container, e.g: centos')) %>
25
+ <span class="input-group-addon glyphicon" data-search-addon=true></span>
26
+ <span class="input-group-btn">
27
+ <%= button_tag(:class => 'btn btn-default',
28
+ :type => 'button',
29
+ :id => "search_repository_#{registry}",
30
+ :'data-registry' => registry,
31
+ :'data-url' => search_repository_image_search_path(model.compute_resource_id),
32
+ :onclick => 'searchRepo(this)') do %>
33
+ <span class="glyphicon glyphicon-search"></span>
34
+ <% end %>
35
+ </span>
36
+ </div>
37
+ </div>
38
+ <%= text_f f, :tag,
39
+ :'data-registry' => registry,
40
+ :'data-tag' => true,
41
+ :'data-url' => auto_complete_image_tag_image_search_path(model.compute_resource_id) %>
42
+ <div class="col-md-12">
43
+ <div data-search-spinner=true class='col-md-offset-3 hide'>
44
+ <span data-wait-text=true>
45
+ </span>
46
+ <%= image_tag('/assets/spinner.gif', :id => "loading_repositories_indicator_#{registry}") %>
47
+ </div>
48
+ <div data-repository-search-results=true >
49
+ </div>
50
+ </div>
51
+ <%= render :partial => 'form_buttons', locals: { :registry => registry} %>
52
+ </div>
53
+ <% end -%>
@@ -3,68 +3,39 @@
3
3
 
4
4
  <%= render :layout => 'title', :locals => { :step => 2 } do %>
5
5
  <ul class="nav nav-tabs" data-tabs="tabs">
6
- <li class=<%= ("active" if @docker_container_wizard_states_image.registry_id.nil?) %>><a href="#hub" data-toggle="tab" id="hub_tab">
6
+ <% if defined? Katello -%>
7
+ <li class="<%= tab_class(:katello)%>"><a href="#katello" data-toggle="tab" id="katello_tab">
8
+ <span class="glyphicon glyphicon-tower"></span>
9
+ <%= _("Katello") %>
10
+ </a></li>
11
+ <% end -%>
12
+
13
+ <li class='<%= tab_class(:hub) %>'><a href="#hub" data-toggle="tab" id="hub_tab">
7
14
  <span class="glyphicon glyphicon-cloud-download"></span>
8
15
  <%= _("Docker hub") %>
9
16
  </a></li>
10
- <li class=<%= ("active" unless @docker_container_wizard_states_image.registry_id.nil?) %>><a href="#registry" data-toggle="tab" id="registry_tab">
17
+ <li class='<%= tab_class(:registry) %>'><a href="#registry" data-toggle="tab" id="registry_tab">
11
18
  <span class="glyphicon glyphicon-cloud-download"></span>
12
19
  <%= _("External registry") %>
13
20
  </a></li>
14
21
  </ul>
15
-
16
- <%= form_for @docker_container_wizard_states_image, :class => 'form-horizontal', :url => wizard_path, :method => :put do |f| %>
17
- <div class="tab-content">
18
- <% if @docker_container_wizard_states_image.registry_id.nil? %>
19
- <div class="tab-pane active" id="hub">
20
- </div>
21
- <div class="tab-pane" id="registry">
22
- <% else %>
23
- <div class="tab-pane" id="hub">
24
- </div>
25
- <div class="tab-pane active" id="registry">
26
- <% end %>
27
- <div class="input-group col-md-6">
28
- <%= select_registry f %>
29
- </div>
30
- </div>
31
- <div>
32
- <div class="form-group col-md-6">
33
- <%= label_tag "image_id", _('Search'), :class=>"col-sm-2 control-label" %>
34
- <div class="input-group">
35
-
36
- <%= auto_complete_docker_search('docker_container_wizard_states_image[repository_name]', '',
37
- :'data-url' => auto_complete_repository_name_image_search_path(@docker_container_wizard_states_image.compute_resource_id),
38
- :value => f.object.repository_name.present? ? f.object.repository_name : '',
39
- :id => :search,
40
- :focus_on_load => true,
41
- :placeholder => _('Find your favorite container, e.g: centos')) %>
42
- <span class="input-group-addon glyphicon" id="search-addon"></span>
43
- <span class="input-group-btn">
44
- <%= button_tag(:class => 'btn btn-default',
45
- :type => 'button',
46
- :id => 'search_repository',
47
- :'data-url' => search_repository_image_search_path(@docker_container_wizard_states_image.compute_resource_id),
48
- :onclick => 'searchRepo(this)') do %>
49
- <span class="glyphicon glyphicon-search"></span>
50
- <% end %>
51
- </span>
52
- </div>
53
- </div>
54
- <%= text_f f, :tag,
55
- :id => 'tag',
56
- :'data-url' => auto_complete_image_tag_image_search_path(@docker_container_wizard_states_image.compute_resource_id) %>
57
- <div class="col-md-12">
58
- <div id='searching_spinner' class='col-md-offset-3 hide'>
59
- <span id='waiting_text'>
60
- </span>
61
- <%= image_tag('/assets/spinner.gif', :id => 'loading_repositories_indicator') %>
62
- </div>
63
- <div id='repository_search_results'>
64
- </div>
65
- </div>
66
- </div>
67
- <%= render :partial => 'form_buttons' %>
22
+ <div class="tab-content">
23
+ <% if defined?(Katello) -%>
24
+ <div class='tab-pane <%= tab_class(:katello) %>' id="katello">
25
+ <%= form_for model_for("katello"), :namespace => "katello",
26
+ :class => 'form-horizontal',
27
+ :url => wizard_path,
28
+ :method => :put do |f| %>
29
+ <%= katello_partial(f) %>
30
+ <%= render :partial => 'form_buttons', locals: { :registry => "katello"} %>
31
+ <% end -%>
68
32
  </div>
69
- <% end %>
33
+ <% end -%>
34
+ <div class='tab-pane <%= tab_class(:hub) %>' id="hub">
35
+ <%= render :partial => 'image_hub_tab' , locals: { :registry => "hub" } %>
36
+ </div>
37
+ <div class='tab-pane <%= tab_class(:registry) %>' id="registry">
38
+ <%= render :partial => 'image_hub_tab' , locals: { :registry => "registry"} %>
39
+ </div>
40
+ </div>
70
41
  <% end %>
@@ -1,5 +1,5 @@
1
1
  <% repositories.each do |repository| %>
2
- <h3><%= link_to repository['name'], '#', :onclick => 'repoSelected(this)' %></h3>
2
+ <h3><%= link_to repository['name'], '#', :onclick => 'repoSelected(this)', "data-hub" => use_hub %></h3>
3
3
  <p>
4
4
  <%= '<span class="glyphicon glyphicon-certificate" title="Official"></span>'.html_safe if repository['is_official'] %>
5
5
  <%= '<span class="glyphicon glyphicon-thumbs-up" title="Trusted"></span>'.html_safe if repository['is_trusted'] %>
@@ -0,0 +1,9 @@
1
+ class AddKatelloFlagToDockerWizardImage < ActiveRecord::Migration
2
+ def up
3
+ add_column :docker_container_wizard_states_images, :katello, :boolean
4
+ end
5
+
6
+ def down
7
+ remove_column :docker_container_wizard_states_images, :katello
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ class AddKatelloFlagToContainers < ActiveRecord::Migration
2
+ def up
3
+ add_column :containers, :katello, :boolean
4
+ end
5
+
6
+ def down
7
+ remove_column :containers, :katello
8
+ end
9
+ end
@@ -1,3 +1,3 @@
1
1
  module ForemanDocker
2
- VERSION = '1.0.1'
2
+ VERSION = '1.1.0'
3
3
  end
@@ -17,5 +17,23 @@ module Containers
17
17
 
18
18
  assert_redirected_to container_path(:id => @container.id)
19
19
  end
20
+
21
+ test 'image show doesnot load katello' do
22
+ compute_resource = FactoryGirl.create(:docker_cr)
23
+ state = DockerContainerWizardState.create!
24
+ create_options = { :wizard_state => state,
25
+ :compute_resource_id => compute_resource.id
26
+
27
+ }
28
+ state.preliminary = DockerContainerWizardStates::Preliminary.create!(create_options)
29
+ DockerContainerWizardState.expects(:find).at_least_once.returns(state)
30
+ get :show, { :wizard_state_id => state.id, :id => :image }, set_session_user
31
+ refute state.image.katello?
32
+ refute response.body.include?("katello") # this is code generated by katello partial
33
+ docker_image = @controller.instance_eval do
34
+ @docker_container_wizard_states_image
35
+ end
36
+ assert_equal state.image, docker_image
37
+ end
20
38
  end
21
39
  end
@@ -18,7 +18,12 @@ class DockerRegistryTest < ActiveSupport::TestCase
18
18
  end
19
19
 
20
20
  test 'password is stored encrypted' do
21
- r = as_admin { FactoryGirl.create(:docker_registry) }
22
- assert r.is_decryptable?(r.password_in_db)
21
+ registry = as_admin { FactoryGirl.create(:docker_registry) }
22
+ assert registry.is_decryptable?(registry.password_in_db)
23
+ end
24
+
25
+ test 'registries need a name' do
26
+ registry = FactoryGirl.build(:docker_registry, :name => '')
27
+ refute registry.valid?
23
28
  end
24
29
  end
@@ -0,0 +1,17 @@
1
+ require 'test_plugin_helper'
2
+
3
+ class RegistryApiTest < ActiveSupport::TestCase
4
+ test "initialize handles username password info correctly" do
5
+ uname = "tardis"
6
+ password = "boo"
7
+ url = "http://docker-who.gov"
8
+ reg = Service::RegistryApi.new(:url => url,
9
+ :user => uname,
10
+ :password => password)
11
+ assert reg.config[:url].include?(uname)
12
+ assert reg.config[:url].include?(password)
13
+
14
+ reg = Service::RegistryApi.new(:url => url)
15
+ assert_equal url, reg.config[:url]
16
+ end
17
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_docker
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Lobato, Amos Benari
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-05 00:00:00.000000000 Z
11
+ date: 2015-02-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: docker-api
@@ -85,6 +85,7 @@ files:
85
85
  - app/views/containers/index.html.erb
86
86
  - app/views/containers/show.html.erb
87
87
  - app/views/containers/steps/_form_buttons.html.erb
88
+ - app/views/containers/steps/_image_hub_tab.html.erb
88
89
  - app/views/containers/steps/_title.html.erb
89
90
  - app/views/containers/steps/configuration.html.erb
90
91
  - app/views/containers/steps/environment.html.erb
@@ -111,6 +112,8 @@ files:
111
112
  - db/migrate/20141120123003_add_user_credentials_to_docker_registries.rb
112
113
  - db/migrate/20141209182008_remove_docker_tables.rb
113
114
  - db/migrate/20141222113313_create_wizard_states.rb
115
+ - db/migrate/20150122011747_add_katello_flag_to_docker_wizard_image.rb
116
+ - db/migrate/20150129054944_add_katello_flag_to_containers.rb
114
117
  - lib/foreman_docker.rb
115
118
  - lib/foreman_docker/engine.rb
116
119
  - lib/foreman_docker/tasks/test.rake
@@ -127,6 +130,7 @@ files:
127
130
  - test/units/container_test.rb
128
131
  - test/units/containers_service_test.rb
129
132
  - test/units/docker_registry_test.rb
133
+ - test/units/registry_api_test.rb
130
134
  homepage: http://github.com/theforeman/foreman-docker
131
135
  licenses:
132
136
  - GPL-3
@@ -159,6 +163,7 @@ test_files:
159
163
  - test/factories/containers.rb
160
164
  - test/units/container_test.rb
161
165
  - test/units/docker_registry_test.rb
166
+ - test/units/registry_api_test.rb
162
167
  - test/units/containers_service_test.rb
163
168
  - test/test_plugin_helper.rb
164
169
  - test/integration/container_steps_test.rb