class Chef::ChefFS::FileSystem::ChefServer::ChefServerRootDir

Represents the root of a Chef server (or organization), under which nodes, roles, cookbooks, etc. can be found.

Attributes

chef_private_key[R]
chef_server_url[R]
chef_username[R]
cookbook_version[R]
environment[R]
repo_mode[R]
versioned_cookbooks[R]

Public Class Methods

new(root_name, chef_config, options = {}) click to toggle source

Create a new Chef server root.

Parameters

root_name

A friendly name for the root, for printing–like “remote” or “chef_central”.

chef_config

A hash with options that look suspiciously like Chef::Config, including the following keys:

:chef_server_url

The URL to the Chef server or top of the organization

:node_name

The username to authenticate to the Chef server with

:client_key

The private key for the user for authentication

:environment

The environment in which you are presently working

:repo_mode

The repository mode, :hosted_everything, :everything or :static. This determines the set of subdirectories the Chef server will offer up.

:versioned_cookbooks

whether or not to include versions in cookbook names

options

Other options:

:cookbook_version

when cookbooks are retrieved, grab this version for them.

:freeze

freeze cookbooks on upload

# File lib/chef/chef_fs/file_system/chef_server/chef_server_root_dir.rb, line 77
def initialize(root_name, chef_config, options = {})
  super("", nil)
  @chef_server_url = chef_config[:chef_server_url]
  @chef_username = chef_config[:node_name]
  @chef_private_key = chef_config[:client_key]
  @environment = chef_config[:environment]
  @repo_mode = chef_config[:repo_mode]
  @versioned_cookbooks = chef_config[:versioned_cookbooks]
  @root_name = root_name
  @cookbook_version = options[:cookbook_version] # Used in knife diff and download for server cookbook version
end

Public Instance Methods

api_path() click to toggle source
# File lib/chef/chef_fs/file_system/chef_server/chef_server_root_dir.rb, line 113
def api_path
  ""
end
can_have_child?(name, is_dir) click to toggle source
# File lib/chef/chef_fs/file_system/chef_server/chef_server_root_dir.rb, line 121
def can_have_child?(name, is_dir)
  result = children.find { |child| child.name == name }
  result && !!result.dir? == !!is_dir
end
chef_rest() click to toggle source
# File lib/chef/chef_fs/file_system/chef_server/chef_server_root_dir.rb, line 109
def chef_rest
  Chef::ServerAPI.new(chef_server_url, client_name: chef_username, signing_key_filename: chef_private_key, api_version: "0")
end
children() click to toggle source
# File lib/chef/chef_fs/file_system/chef_server/chef_server_root_dir.rb, line 142
def children
  @children ||= begin
    result = [
      # /cookbooks
      versioned_cookbooks ? VersionedCookbooksDir.new("cookbooks", self) : CookbooksDir.new("cookbooks", self),
      # /data_bags
      DataBagsDir.new("data_bags", self, "data"),
      # /environments
      EnvironmentsDir.new("environments", self, nil, Chef::ChefFS::DataHandler::EnvironmentDataHandler.new),
      # /roles
      RestListDir.new("roles", self, nil, Chef::ChefFS::DataHandler::RoleDataHandler.new),
    ]
    if repo_mode == "hosted_everything"
      result += [
        # /acls
        AclsDir.new("acls", self),
        # /clients
        RestListDir.new("clients", self, nil, Chef::ChefFS::DataHandler::ClientDataHandler.new),
        # /containers
        RestListDir.new("containers", self, nil, Chef::ChefFS::DataHandler::ContainerDataHandler.new),
        # /cookbook_artifacts
        CookbookArtifactsDir.new("cookbook_artifacts", self),
        # /groups
        RestListDir.new("groups", self, nil, Chef::ChefFS::DataHandler::GroupDataHandler.new),
        # /nodes
        NodesDir.new("nodes", self, nil, Chef::ChefFS::DataHandler::NodeDataHandler.new),
        # /org.json
        OrgEntry.new("org.json", self),
        # /members.json
        OrganizationMembersEntry.new("members.json", self),
        # /invitations.json
        OrganizationInvitesEntry.new("invitations.json", self),
        # /policies
        PoliciesDir.new("policies", self, nil, Chef::ChefFS::DataHandler::PolicyDataHandler.new),
        # /policy_groups
        PolicyGroupsDir.new("policy_groups", self, nil, Chef::ChefFS::DataHandler::PolicyGroupDataHandler.new),
      ]
    elsif repo_mode != "static"
      result += [
        # /clients
        RestListDir.new("clients", self, nil, Chef::ChefFS::DataHandler::ClientDataHandler.new),
        # /nodes
        NodesDir.new("nodes", self, nil, Chef::ChefFS::DataHandler::NodeDataHandler.new),
        # /users
        RestListDir.new("users", self, nil, Chef::ChefFS::DataHandler::UserDataHandler.new),
      ]
    end
    result.sort_by(&:name)
  end
end
fs_description() click to toggle source
# File lib/chef/chef_fs/file_system/chef_server/chef_server_root_dir.rb, line 97
def fs_description
  "Chef server at #{chef_server_url} (user #{chef_username}), repo_mode = #{repo_mode}"
end
get_json(path) click to toggle source
# File lib/chef/chef_fs/file_system/chef_server/chef_server_root_dir.rb, line 105
def get_json(path)
  chef_rest.get(path)
end
make_child_entry(name) click to toggle source
# File lib/chef/chef_fs/file_system/chef_server/chef_server_root_dir.rb, line 138
def make_child_entry(name)
  children.find { |child| child.name == name }
end
org() click to toggle source
# File lib/chef/chef_fs/file_system/chef_server/chef_server_root_dir.rb, line 126
def org
  @org ||= begin
    path = Pathname.new(URI.parse(chef_server_url).path).cleanpath
    if File.dirname(path) == "/organizations"
      File.basename(path)
    else
      # In Chef 12, everything is in an org.
      "chef"
    end
  end
end
path_for_printing() click to toggle source
# File lib/chef/chef_fs/file_system/chef_server/chef_server_root_dir.rb, line 117
def path_for_printing
  "#{@root_name}/"
end
rest() click to toggle source
# File lib/chef/chef_fs/file_system/chef_server/chef_server_root_dir.rb, line 101
def rest
  Chef::ServerAPI.new(chef_server_url, client_name: chef_username, signing_key_filename: chef_private_key, raw_output: true, api_version: "0")
end