# # Example file for building out a multi-node environment # # for this to work, you need to run the nodes in this order: # # 1. storage nodes # 2. ringbuilder # 3. run the storage nodes again # 4. run the proxy # 5. test that everything works!! # # # This example file is almost the # same as what I have been using # to build swift in my environment (which is based on vagrant) $swift_shared_secret='changeme' Exec { logoutput => true } if($clientcert == 'swift_storage_1') { $swift_local_net_ip = $ipaddress $swift_zone = 1 include role_swift_storage } elsif($clientcert == 'swift_storage_2') { $swift_local_net_ip = $ipaddress $swift_zone = 2 include role_swift_storage } elsif($clientcert == 'swift_storage_2') { $swift_local_net_ip = $ipaddress $swift_zone = 3 include role_swift_storage } elsif($clientcert == 'swift_proxy') { $swift_local_net_ip = $ipaddress include role_swift_proxy } elsif($clientcert == 'swift_ringbuilding') { $swift_local_net_ip = $ipaddress include role_swift_ringbuilder } class role_swift { class { 'ssh::server::install': } class { 'swift': # not sure how I want to deal with this shared secret swift_hash_suffix => $swift_shared_secret, package_ensure => latest, } } class role_swift_ringbuilder inherits role_swif { class { 'swift::ringbuilder': part_power => '18', replicas => '3', min_part_hours => 1, require => Class['swift'], } # collect the ring devices to build # TODO - this should be done with resource collection include ring_hack # now build an rsync server to host the data } class role_swift_proxy inherits role_swift { package { 'curl': ensure => present } class { 'memcached': listen_ip => $proxy_local_net_ip, } # TODO should I enable swath in the default config? class { 'swift::proxy': account_autocreate => true, require => Class['swift::ringbuilder'], } } class role_swift_storage inherits role_swift { class { 'swift::storage': } # create xfs partitions on a loopback device and mount them swift::storage::loopback { '1': require => Class['swift'], } swift::storage::device::object { '6001': device_name => '1', zone => $swift_zone, weight => 1, storage_local_net_ip => $swift_local_net_ip, manage_ring => false, } swift::storage::device::container { '6002': device_name => '1', zone => $swift_zone, weight => 1, storage_local_net_ip => $swift_local_net_ip, manage_ring => false, } swift::storage::device::account { '6003': device_name => '1', zone => $swift_zone, weight => 1, storage_local_net_ip => $swift_local_net_ip, manage_ring => false, } } class ring_hack { }