knife-opc 0.3.2 → 0.4.7

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.
@@ -1,19 +1,59 @@
1
- require 'chef/org'
1
+ require_relative "../org"
2
2
 
3
3
  class Chef
4
4
  class Org
5
5
  module GroupOperations
6
+ def group(groupname)
7
+ @group ||= {}
8
+ @group[groupname] ||= chef_rest.get_rest "organizations/#{name}/groups/#{groupname}"
9
+ end
10
+
11
+ def user_member_of_group?(username, groupname)
12
+ group = group(groupname)
13
+ group["actors"].include? username
14
+ end
15
+
6
16
  def add_user_to_group(groupname, username)
7
- group = chef_rest.get_rest "organizations/#{name}/groups/#{groupname}"
17
+ group = group(groupname)
8
18
  body_hash = {
9
- :groupname => "#{groupname}",
10
- :actors => {
19
+ groupname: "#{groupname}",
20
+ actors: {
11
21
  "users" => group["actors"].concat([username]),
12
- "groups" => group["groups"]
13
- }
22
+ "groups" => group["groups"],
23
+ },
14
24
  }
15
25
  chef_rest.put_rest "organizations/#{name}/groups/#{groupname}", body_hash
16
26
  end
27
+
28
+ def remove_user_from_group(groupname, username)
29
+ group = group(groupname)
30
+ group["actors"].delete(username)
31
+ body_hash = {
32
+ groupname: "#{groupname}",
33
+ actors: {
34
+ "users" => group["actors"],
35
+ "groups" => group["groups"],
36
+ },
37
+ }
38
+ chef_rest.put_rest "organizations/#{name}/groups/#{groupname}", body_hash
39
+ end
40
+
41
+ def actor_delete_would_leave_admins_empty?
42
+ admins = group("admins")
43
+ if admins["groups"].empty?
44
+ # exclude 'pivotal' but don't mutate the group since we're caching it
45
+ if admins["actors"].include? "pivotal"
46
+ admins["actors"].length <= 2
47
+ else
48
+ admins["actors"].length <= 1
49
+ end
50
+ else
51
+ # We don't check recursively. If the admins group contains a group,
52
+ # and the user is the only member of that group,
53
+ # we'll still turn up a 'safe to delete'.
54
+ false
55
+ end
56
+ end
17
57
  end
18
58
  include Chef::Org::GroupOperations
19
59
  end
@@ -1,3 +1,3 @@
1
1
  module KnifeOPC
2
- VERSION = "0.3.2"
2
+ VERSION = "0.4.7".freeze
3
3
  end
metadata CHANGED
@@ -1,81 +1,22 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knife-opc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steven Danna
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-25 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: rake
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: rspec
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: chef
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: sdoc
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- description: Knife Tools for Opscode Chef Server
70
- email: steve@opscode.com
11
+ date: 2020-09-28 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Knife Tools for Chef Server
14
+ email: steve@chef.io
71
15
  executables: []
72
16
  extensions: []
73
- extra_rdoc_files:
74
- - README.md
75
- - LICENSE
17
+ extra_rdoc_files: []
76
18
  files:
77
19
  - LICENSE
78
- - README.md
79
20
  - lib/chef/knife/opc_org_create.rb
80
21
  - lib/chef/knife/opc_org_delete.rb
81
22
  - lib/chef/knife/opc_org_edit.rb
@@ -93,8 +34,9 @@ files:
93
34
  - lib/chef/org.rb
94
35
  - lib/chef/org/group_operations.rb
95
36
  - lib/knife-opc/version.rb
96
- homepage: http://wiki.opscode.com/display/chef
97
- licenses: []
37
+ homepage: https://github.com/knife-opc
38
+ licenses:
39
+ - Apache-2.0
98
40
  metadata: {}
99
41
  post_install_message:
100
42
  rdoc_options: []
@@ -111,10 +53,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
111
53
  - !ruby/object:Gem::Version
112
54
  version: '0'
113
55
  requirements: []
114
- rubyforge_project:
115
- rubygems_version: 2.4.4
56
+ rubygems_version: 3.0.3
116
57
  signing_key:
117
58
  specification_version: 4
118
- summary: Knife Tools for Opscode Chef Server
59
+ summary: Knife Tools for Chef Server
119
60
  test_files: []
120
- has_rdoc:
data/README.md DELETED
@@ -1,183 +0,0 @@
1
- # knife OPC #
2
-
3
- * Documentation: http://docs.opscode.com/
4
- * Tickets/Issues: http://tickets.opscode.com
5
- * IRC: [#chef](irc://irc.freenode.net/chef) and [#chef-hacking](irc://irc.freenode.net/chef-hacking) on Freenode
6
- * Mailing list: http://lists.opscode.com
7
-
8
- # Description
9
-
10
- This knife plugin supports basic organization and user operations in
11
- Enterprise Chef (formerly Opscode Private Chef) and Chef Server 12.
12
-
13
- # Installation
14
-
15
- This knife plugin is packaged as a gem. To install it, run:
16
-
17
- gem install knife-opc
18
-
19
- If you are using ChefDK, run:
20
-
21
- chef gem install knife-opc
22
-
23
- ## Development version
24
-
25
- To install the latest development version:
26
-
27
- git clone https://github.com/opscode/knife-opc.git
28
- cd knife-opc
29
- gem build knife-opc.gemspec
30
- gem install knife-opc-0.3.2.gem
31
-
32
- # Configuration
33
-
34
- ## knife.rb
35
- Unlike other knife subcommands the subcommands in the knife-opc
36
- plugin make API calls against the root of your OPC installations API
37
- endpoint.
38
-
39
- Typically the chef_server_url for your OPC installation may look like
40
- this:
41
-
42
- chef_server_url https://chef.yourdomain.com/organizations/ORGNAME
43
-
44
- To configure knife-opc, set the `chef_server_root` option to the root
45
- of your OPC installation:
46
-
47
- chef_server_root https://chef.yourdomain.com/
48
-
49
- Note that most users in an OPC installation lack the permissions to
50
- run most of the commands from this plugin. On Chef Server 12, the
51
- majority of the commands provided by this plugin can be accessed via
52
- `chef-server-ctl` wrapper commands that properly configure knife-opc
53
- for administrative action. We recommend you use the wrapper commands
54
- whenever possible
55
-
56
- When using knife-opc directly, many of the commands require special
57
- permissions. For instance, in order to use commands such as `knife opc
58
- org create`, you must authenticate as the 'pivotal' user.
59
-
60
- Note that the key for the pivotal user is in /etc/opscode on any node
61
- in your Chef Server cluster. We recommend that you only use the
62
- pivotal user from a Chef Server itself and not copy this key off the
63
- machine. In that case, you should run knife opc on the **Frontend
64
- server** as root, with a `knife.rb` in root's home directory.
65
-
66
- current_dir = File.dirname(__FILE__)
67
- log_level :info
68
- log_location STDOUT
69
- node_name "pivotal"
70
- client_key "/etc/opscode/pivotal.pem"
71
- chef_server_root "https://chef.yourdomain.com/"
72
-
73
- # Subcommands
74
-
75
- ## knife opc user list (options)
76
-
77
- *Options*
78
-
79
- * `-w`, `--with-uri`:
80
- Show corresponding URIs
81
-
82
- Show a list of all users in your OPC installation.
83
-
84
- ## knife opc user show USERNAME (options)
85
-
86
- * `-l`, `--with-orgs`:
87
- Show the organizations of which the user is a member.
88
-
89
- Shows the details of a user in your OPC installation.
90
-
91
- ## knife opc user create USERNAME FIRST_NAME [MIDDLE_NAME] LAST_NAME EMAIL PASSWORD (options)
92
-
93
- * `-f FILENAME`, `--filename FILENAME`:
94
- Write private key to FILENAME rather than STDOUT.
95
-
96
- Creates a new user in your OPC installation. The user's private key
97
- will be returned in response. Without this key, the user will need to
98
- log into the WebUI and regenerate their key before they can use knife.
99
-
100
- ## knife opc user delete USERNAME [-d]
101
-
102
- Deletes the given OPC user.
103
-
104
- ## knife opc user edit USERNAME
105
-
106
- Will open $EDITOR. When finished, Knife will update the given OPC user.
107
-
108
- ## knife opc user password USERNAME [PASSWORD | --enable_external_auth]
109
-
110
- Command for managing password and authentication for a user.
111
-
112
- The last argument should either be a string you want the password to or you can pass --enable_external_auth instead of a password to enable external authentication for this user.
113
-
114
- ## knife opc org list
115
-
116
- * `-w`, `--with-uri`:
117
- Show corresponding URIs
118
-
119
- * `-a`, `--all-orgs`:
120
- Display hidden orgs
121
-
122
- Show a list of all organizations in your OPC installation.
123
-
124
- ## knife opc org show ORG_NAME
125
-
126
- Shows description of given ORG_NAME.
127
-
128
- ## knife opc org create ORG_NAME ORG_FULL_NAME
129
-
130
- * `-f FILENAME`, `--filename FILENAME`:
131
- Write private key to FILENAME rather than STDOUT.
132
-
133
- * `-a USERNAME`, `--association_user USERNAME`,
134
- Associate USERNAME with the organization after creation.
135
-
136
- Creates a new OPC Organization. The private key for the organization's
137
- validator client is returned.
138
-
139
- ## knife opc org delete ORG_NAME
140
-
141
- Deletes the given OPC organization.
142
-
143
- ## knife opc org user add ORGNAME USERNAME
144
-
145
- Adds a user to an organization. Requires that the named organization
146
- and user both exist.
147
-
148
- ## knife opc org user remove ORGNAME USERNAME
149
-
150
- Removes a user from an organization. Requires that the named
151
- organization and user both exist, and that the user is currently
152
- associated with the organization.
153
-
154
- # KNOWN ISSUES
155
-
156
- * Attempting to delete and immediately recreate an organization will
157
- result in an error (a 500 or a 409 Conflict depending on the server
158
- version). This is because of a server-side cache that must be
159
- cleared. Restarting the frontend services before recreating the org
160
- is necessary to avoid the error.
161
-
162
- # TODO
163
-
164
- * `--with-users` option for `org show` subcommand.
165
-
166
- ## License ##
167
-
168
- | | |
169
- |:---------------------|:-----------------------------------------|
170
- | **Copyright:** | Copyright (c) 2011-2014 Opscode, Inc.
171
- | **License:** | Apache License, Version 2.0
172
-
173
- Licensed under the Apache License, Version 2.0 (the "License");
174
- you may not use this file except in compliance with the License.
175
- You may obtain a copy of the License at
176
-
177
- http://www.apache.org/licenses/LICENSE-2.0
178
-
179
- Unless required by applicable law or agreed to in writing, software
180
- distributed under the License is distributed on an "AS IS" BASIS,
181
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
182
- See the License for the specific language governing permissions and
183
- limitations under the License.