Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Abstract away chef search for discovery #77

Open
josephholsten opened this issue Jul 17, 2015 · 2 comments
Open

Abstract away chef search for discovery #77

josephholsten opened this issue Jul 17, 2015 · 2 comments
Milestone

Comments

@josephholsten
Copy link
Contributor

From edelight/chef-mongodb#215

Chef Search is used for three purposes in this cookbook:

While chef search is great for a good out-of-the-box experience, it's actually quite poorly suited to the task of configuring a database cluster:

  • solr updates not synchronous, so an overloaded chef-server may be many seconds behind actual configuration
  • node objects in the chef-server may diverge from actual running instances
  • chef solo does not natively support search, requiring chef-solo-search

Additionally, our use of search has other problems:

  • hard-coded search queries require nodes to match our expected attributes, which may not suit the needs of some users
  • assuming the result of discovery is from chef search causes the code to assume it is receiving chef node objects, which makes it cumbersome to replace with another discovery implementation, or ever to stub for testing

Considering all those issues, we should strive to isolate our use of chef-search for discovery. To tackle this, we'll need to:

Improve Library, Definition & Resource APIs

Pull access to node objects out from library functions, and ultimately out of the mongodb_instance definition so wrapper cookbooks can provide alternative discovery methods. These should be possible while remaining backwards compatible.

This should require refactoring MongoDB::configure_replicaset and MongoDB::configure_shards to accept a mere array of strings as node identifiers. To do this, mongodb_instance will need to extract the correct attributes for each node.

With this done, that logic will need to be pulled up into the cookbooks which call mongodb_instance. At this point, it will probably be useful to create a helper library to abstract this discovery. I suggest we model this library after search_for_nodes from the elasticsearch cookbook, and the discovery cookbook from Heavywater.

Improve cookbook API

Define a set of node attributes which allow overriding discovery for most use cases:

  • search by role
  • search by tag
  • search by arbitrary query
  • select fqdn attribute from each matched nodes
  • select cloud.local_ipv4 attribute from each matched nodes
  • select cloud. public_ipv4 attribute from each matched nodes
  • select ipaddress attributes from each matched nodes

I suggest we model our use of attributes after search in the elasticsearch cookbook, which uses:

  • node['elasticsearch']['discovery']['search_query'] - which defaults to roles:elasticsearch AND chef_environment:#{node.chef_environment} AND elasticsearch_cluster_name:#{node[:elasticsearch][:cluster][:name]}"
  • node['elasticsearch']['discovery']['node_attribute'] - which defaults to cloud.local_ipv4 if it exists, or ipaddress

This implies the following :

  • node['elasticsearch']['discovery']['search_query'] - which defaults to roles:elasticsearch AND chef_environment:#{node.chef_environment} AND elasticsearch_cluster_name:#{node[:elasticsearch][:cluster][:name]}"
  • node['elasticsearch']['discovery']['node_attribute'] - which defaults to cloud.local_ipv4 if it exists, or ipaddress
@majormoses
Copy link

my 2 cents is that just like the elasticsearch cookbook (as of the 1.x rewrite) we should convert this to a library cb and let the users do their chef search in their wrappers.

@damacus damacus added this to the 1.1.0 milestone Dec 17, 2016
@github-actions
Copy link

Marking stale due to inactivity. Remove stale label or comment or this will be closed in 7 days. Alternatively drop by the #sous-chefs channel on the Chef Community Slack and we'll be happy to help! Thanks, Sous-Chefs.

@github-actions github-actions bot added the Stale label Sep 30, 2020
@xorimabot xorimabot removed the Stale label Sep 30, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants