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)
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")
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")