Example #1
0
def cluster(cluster_name):
  """Load and configure the cluster on the Fabric environment."""

  # moved to the first line to auto configure the chef api
  env.roledefs = chef_roledefs(hostname_attr=['ipaddress'])

  cluster = Cluster.TYPES.get(cluster_name)
  if cluster is None:

    loader = YAMLLoader(cluster_name)
    cluster = loader.load()

    for facet in cluster.facets:
      create_nodes(cluster, facet)
      # update list of hosts
      hosts = facet.nodes.keys()
      #env.hosts.extend(hosts)

  # update env
  env.cluster = cluster
  env.cluster_name = cluster.name
  env.user = env.cluster.cloud.user

  # update the roledefs and set the cluster role
  env.roledefs[env.cluster_name] = env.cluster.hosts
  env.roles.append(env.cluster_name)
  # get chef_environment from the cluster when not specified
  if not getattr(env, 'chef_environment', None):
    env.chef_environment = env.cluster.environment
def update_roledefs(environment):
    """Update Fabric's role definitions with our chef based roles.

    :param environment: The chef environment to search for.
    :type environment: string
    """
    roledefs = chef_roledefs(
        hostname_attr=['ipaddress'],
        environment=environment,
    )
    role_database = api.env.get('role_database', None)
    if role_database:
        api.env.roledefs['database'] = roledefs.get(role_database)

    role_frontend = api.env.get('role_frontend')
    if role_frontend:
        api.env.roledefs['frontend'] = roledefs.get(role_frontend)

    role_staging = api.env.get('role_staging')
    if role_staging:
        api.env.roledefs['staging'] = roledefs.get(role_staging)

    role_worker = api.env.get('role_worker')
    if role_worker:
        api.env.roledefs['worker'] = roledefs.get(role_worker)
Example #3
0
from fabric.api import *
from fabric.decorators import task, roles
from chef.fabric import chef_roledefs

### set me. full path to where your AWS key file is located. ###
env.key_filename = ""
env.user = "******"

env.roledefs = chef_roledefs(hostname_attr="ec2.public_hostname")


@task
@roles("base")
def chef_client():
    sudo("chef-client")
Example #4
0
from fabric.api import env, sudo, roles, task
from chef.fabric import chef_roledefs

# Setup our roles based on chef roles
env.roledefs = chef_roledefs()


@task
@roles("pypi")
def deploy():
    sudo("chef-client")