linux_admin 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -40,27 +40,65 @@ class LinuxAdmin
40
40
  run!(cmd, :params => params)
41
41
  end
42
42
 
43
- def subscribe(options)
44
- raise ArgumentError, "channels, username and password are required" if options[:channels].blank? || options[:username].blank? || options[:password].blank?
45
- cmd = "rhn-channel -a"
43
+ def enable_channel(repo, options)
44
+ cmd = "rhn-channel -a"
45
+ params = user_pwd(options).merge("--channel=" => repo)
46
46
 
47
- channels = options[:channels].collect {|channel| ["--channel=", channel]}
47
+ run!(cmd, :params => params)
48
+ end
49
+ alias_method :subscribe, :enable_channel
50
+ alias_method :enable_repo, :enable_channel
48
51
 
49
- params = {}
50
- params["--user="] = options[:username]
51
- params["--password="] = options[:password]
52
- params = params.to_a + channels
52
+ def disable_channel(repo, options)
53
+ cmd = "rhn-channel -r"
54
+ params = user_pwd(options).merge("--channel=" => repo)
53
55
 
54
56
  run!(cmd, :params => params)
55
57
  end
58
+ alias_method :disable_repo, :disable_channel
56
59
 
57
- def subscribed_products
60
+ def enabled_channels
58
61
  cmd = "rhn-channel -l"
62
+
59
63
  run!(cmd).output.split("\n").compact
60
64
  end
65
+ alias_method :enabled_repos, :enabled_channels
66
+ alias_method :subscribed_products, :enabled_channels
67
+
68
+ def available_channels(options)
69
+ cmd = "rhn-channel -L"
70
+ params = user_pwd(options)
71
+
72
+ run!(cmd, :params => params).output.chomp.split("\n").compact
73
+ end
74
+
75
+ def all_repos(options)
76
+ available = available_channels_with_status(options)
77
+ merge_enabled_channels_with_status(available)
78
+ end
61
79
 
62
80
  private
63
81
 
82
+ def available_channels_with_status(options)
83
+ available_channels(options).collect { |ac| {:repo_id => ac, :enabled => false} }
84
+ end
85
+
86
+ def merge_enabled_channels_with_status(available)
87
+ enabled_channels.each_with_object(available) do |enabled, all|
88
+ if repo = all.detect { |i| i[:repo_id] == enabled }
89
+ repo[:enabled] = true
90
+ else
91
+ all.push({:repo_id => enabled, :enabled => true})
92
+ end
93
+ end
94
+ end
95
+
96
+ def user_pwd(options)
97
+ raise ArgumentError, "username and password are required" if options[:username].blank? || options[:password].blank?
98
+
99
+ {"--user=" => options[:username], "--password=" => options[:password]}
100
+ end
101
+
64
102
  def systemid_file
65
103
  "/etc/sysconfig/rhn/systemid"
66
104
  end
@@ -80,6 +80,31 @@ class LinuxAdmin
80
80
  parse_output(output).index_by {|i| i[:pool_id]}
81
81
  end
82
82
 
83
+ def enable_repo(repo, options = nil)
84
+ cmd = "subscription-manager repos"
85
+ params = {"--enable=" => repo}
86
+
87
+ run!(cmd, :params => params)
88
+ end
89
+
90
+ def disable_repo(repo, options = nil)
91
+ cmd = "subscription-manager repos"
92
+ params = {"--disable=" => repo}
93
+
94
+ run!(cmd, :params => params)
95
+ end
96
+
97
+ def all_repos(options = nil)
98
+ cmd = "subscription-manager repos"
99
+ output = run!(cmd).output
100
+
101
+ parse_output(output)
102
+ end
103
+
104
+ def enabled_repos
105
+ all_repos.select { |i| i[:enabled] }.collect { |r| r[:repo_id] }
106
+ end
107
+
83
108
  private
84
109
 
85
110
  def parse_output(output)
@@ -101,6 +126,7 @@ class LinuxAdmin
101
126
  end
102
127
 
103
128
  def format_values(content_group)
129
+ content_group[:enabled] = content_group[:enabled].to_i == 1 if content_group[:enabled]
104
130
  content_group[:ends] = Date.strptime(content_group[:ends], "%m/%d/%Y") if content_group[:ends]
105
131
  content_group[:starts] = Date.strptime(content_group[:starts], "%m/%d/%Y") if content_group[:starts]
106
132
  content_group
@@ -1,3 +1,3 @@
1
1
  class LinuxAdmin
2
- VERSION = "0.6.0"
2
+ VERSION = "0.7.0"
3
3
  end
@@ -0,0 +1,4 @@
1
+ rhel-x86_64-server-6-cf-me-2
2
+ rhel-x86_64-server-6-cf-me-2-beta
3
+ rhel-x86_64-server-6-cf-me-3
4
+ rhel-x86_64-server-6-cf-me-3-beta
@@ -0,0 +1,18 @@
1
+ +----------------------------------------------------------+
2
+ Available Repositories in /etc/yum.repos.d/redhat.repo
3
+ +----------------------------------------------------------+
4
+ Repo ID: some-repo-source-rpms
5
+ Repo Name: Some Repo (Source RPMs)
6
+ Repo URL: https://my.host.example.com/repos/some-repo/source/rpms
7
+ Enabled: 1
8
+
9
+ Repo ID: some-repo-rpms
10
+ Repo Name: Some Repo
11
+ Repo URL: https://my.host.example.com/repos/some-repo/rpms
12
+ Enabled: 1
13
+
14
+ Repo ID: some-repo-2-beta-rpms
15
+ Repo Name: Some Repo (Beta RPMs)
16
+ Repo URL: https://my.host.example.com/repos/some-repo-2/beta/rpms
17
+ Enabled: 0
18
+
data/spec/rhn_spec.rb CHANGED
@@ -70,23 +70,64 @@ describe LinuxAdmin::Rhn do
70
70
  end
71
71
  end
72
72
 
73
- context "#subscribe" do
74
- it "without arguments" do
75
- expect { described_class.new.subscribe({}) }.to raise_error(ArgumentError)
76
- end
73
+ it "#enable_channel" do
74
+ described_class.any_instance.should_receive(:run!).once.with("rhn-channel -a", {:params=>{"--user="=>"SomeUser", "--password="=>"SomePass", "--channel="=>123}})
77
75
 
78
- it "with channels" do
79
- described_class.any_instance.should_receive(:run!).once.with("rhn-channel -a", {:params=>[["--user=", "SomeUser"], ["--password=", "SomePass"], ["--channel=", 123], ["--channel=", 456]]})
80
- described_class.new.subscribe({
81
- :username => "SomeUser",
82
- :password => "SomePass",
83
- :channels => [123, 456]
84
- })
85
- end
76
+ described_class.new.enable_channel(123, :username => "SomeUser", :password => "SomePass")
86
77
  end
87
78
 
88
- it "#subscribed_products" do
79
+ it "#enabled_channels" do
89
80
  described_class.any_instance.should_receive(:run!).once.with("rhn-channel -l").and_return(double(:output => sample_output("rhn/output_rhn-channel_list")))
90
- expect(described_class.new.subscribed_products).to eq(["rhel-x86_64-server-6", "rhel-x86_64-server-6-cf-me-2"])
81
+
82
+ expect(described_class.new.enabled_channels).to eq(["rhel-x86_64-server-6", "rhel-x86_64-server-6-cf-me-2"])
83
+ end
84
+
85
+ it "#disable_channel" do
86
+ described_class.any_instance.should_receive(:run!).once.with("rhn-channel -r", {:params=>{"--user="=>"SomeUser", "--password="=>"SomePass", "--channel="=>123}})
87
+
88
+ described_class.new.disable_channel(123, :username => "SomeUser", :password => "SomePass")
89
+ end
90
+
91
+ it "#available_channels" do
92
+ credentials = {
93
+ :username => "some_user",
94
+ :password => "password"
95
+ }
96
+ expected = [
97
+ "rhel-x86_64-server-6-cf-me-2",
98
+ "rhel-x86_64-server-6-cf-me-2-beta",
99
+ "rhel-x86_64-server-6-cf-me-3",
100
+ "rhel-x86_64-server-6-cf-me-3-beta"
101
+ ]
102
+ cmd = "rhn-channel -L"
103
+ params = {
104
+ :params => {
105
+ "--user=" => "some_user",
106
+ "--password=" => "password"
107
+ }
108
+ }
109
+
110
+ described_class.any_instance.should_receive(:run!).once.with(cmd, params).and_return(double(:output => sample_output("rhn/output_rhn-channel_list_available")))
111
+
112
+ expect(described_class.new.available_channels(credentials)).to eq(expected)
113
+ end
114
+
115
+ it "#all_repos" do
116
+ credentials = {
117
+ :username => "some_user",
118
+ :password => "password"
119
+ }
120
+ expected = [
121
+ {:repo_id => "rhel-x86_64-server-6-cf-me-2", :enabled => true},
122
+ {:repo_id => "rhel-x86_64-server-6-cf-me-2-beta", :enabled => false},
123
+ {:repo_id => "rhel-x86_64-server-6-cf-me-3", :enabled => false},
124
+ {:repo_id => "rhel-x86_64-server-6-cf-me-3-beta", :enabled => false},
125
+ {:repo_id => "rhel-x86_64-server-6", :enabled => true}
126
+ ]
127
+
128
+ described_class.any_instance.should_receive(:run!).once.and_return(double(:output => sample_output("rhn/output_rhn-channel_list_available")))
129
+ described_class.any_instance.should_receive(:run!).once.with("rhn-channel -l").and_return(double(:output => sample_output("rhn/output_rhn-channel_list")))
130
+
131
+ expect(described_class.new.all_repos(credentials)).to eq(expected)
91
132
  end
92
- end
133
+ end
@@ -144,4 +144,51 @@ describe LinuxAdmin::SubscriptionManager do
144
144
  expect { described_class.new.organizations({:username=>"BadUser", :password=>"BadPass"}) }.to raise_error(LinuxAdmin::CredentialError)
145
145
  end
146
146
  end
147
+
148
+ it "#enable_repo" do
149
+ described_class.any_instance.should_receive(:run!).once.with("subscription-manager repos", {:params=>{"--enable="=>"abc"}})
150
+
151
+ described_class.new.enable_repo("abc")
152
+ end
153
+
154
+ it "#disable_repo" do
155
+ described_class.any_instance.should_receive(:run!).once.with("subscription-manager repos", {:params=>{"--disable="=>"abc"}})
156
+
157
+ described_class.new.disable_repo("abc")
158
+ end
159
+
160
+ it "#all_repos" do
161
+ expected = [
162
+ {
163
+ :repo_id => "some-repo-source-rpms",
164
+ :repo_name => "Some Repo (Source RPMs)",
165
+ :repo_url => "https://my.host.example.com/repos/some-repo/source/rpms",
166
+ :enabled => true
167
+ },
168
+ {
169
+ :repo_id => "some-repo-rpms",
170
+ :repo_name => "Some Repo",
171
+ :repo_url => "https://my.host.example.com/repos/some-repo/rpms",
172
+ :enabled => true
173
+ },
174
+ {
175
+ :repo_id => "some-repo-2-beta-rpms",
176
+ :repo_name => "Some Repo (Beta RPMs)",
177
+ :repo_url => "https://my.host.example.com/repos/some-repo-2/beta/rpms",
178
+ :enabled => false
179
+ }
180
+ ]
181
+
182
+ described_class.any_instance.should_receive(:run!).once.with("subscription-manager repos").and_return(double(:output => sample_output("subscription_manager/output_repos")))
183
+
184
+ expect(described_class.new.all_repos).to eq(expected)
185
+ end
186
+
187
+ it "#enabled_repos" do
188
+ expected = ["some-repo-source-rpms", "some-repo-rpms"]
189
+
190
+ described_class.any_instance.should_receive(:run!).once.with("subscription-manager repos").and_return(double(:output => sample_output("subscription_manager/output_repos")))
191
+
192
+ expect(described_class.new.enabled_repos).to eq(expected)
193
+ end
147
194
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: linux_admin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2014-01-27 00:00:00.000000000 Z
15
+ date: 2014-02-03 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: bundler
@@ -196,6 +196,7 @@ files:
196
196
  - spec/command_result_spec.rb
197
197
  - spec/common_spec.rb
198
198
  - spec/data/rhn/output_rhn-channel_list
199
+ - spec/data/rhn/output_rhn-channel_list_available
199
200
  - spec/data/rhn/systemid
200
201
  - spec/data/rhn/systemid.missing_system_id
201
202
  - spec/data/rpm/cmd_output_for_list_installed
@@ -203,6 +204,7 @@ files:
203
204
  - spec/data/subscription_manager/output_list_installed_not_subscribed
204
205
  - spec/data/subscription_manager/output_list_installed_subscribed
205
206
  - spec/data/subscription_manager/output_orgs
207
+ - spec/data/subscription_manager/output_repos
206
208
  - spec/data/yum/first.repo
207
209
  - spec/data/yum/output_repo_list
208
210
  - spec/data/yum/output_repoquery_multiple
@@ -243,7 +245,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
243
245
  version: '0'
244
246
  segments:
245
247
  - 0
246
- hash: 2200727000358996343
248
+ hash: 1694480219788171348
247
249
  required_rubygems_version: !ruby/object:Gem::Requirement
248
250
  none: false
249
251
  requirements:
@@ -252,7 +254,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
252
254
  version: '0'
253
255
  segments:
254
256
  - 0
255
- hash: 2200727000358996343
257
+ hash: 1694480219788171348
256
258
  requirements: []
257
259
  rubyforge_project:
258
260
  rubygems_version: 1.8.23
@@ -263,6 +265,7 @@ test_files:
263
265
  - spec/command_result_spec.rb
264
266
  - spec/common_spec.rb
265
267
  - spec/data/rhn/output_rhn-channel_list
268
+ - spec/data/rhn/output_rhn-channel_list_available
266
269
  - spec/data/rhn/systemid
267
270
  - spec/data/rhn/systemid.missing_system_id
268
271
  - spec/data/rpm/cmd_output_for_list_installed
@@ -270,6 +273,7 @@ test_files:
270
273
  - spec/data/subscription_manager/output_list_installed_not_subscribed
271
274
  - spec/data/subscription_manager/output_list_installed_subscribed
272
275
  - spec/data/subscription_manager/output_orgs
276
+ - spec/data/subscription_manager/output_repos
273
277
  - spec/data/yum/first.repo
274
278
  - spec/data/yum/output_repo_list
275
279
  - spec/data/yum/output_repoquery_multiple