Fedora Infrastructure Ansible Repository
callback_plugins | ||
files | ||
handlers | ||
inventory | ||
library | ||
lookup_plugins | ||
playbooks | ||
roles | ||
scripts | ||
tasks | ||
vars | ||
.gitignore | ||
README | ||
TODO |
ansible repository/structure files - files and templates for use in playbooks/tasks - subdirs for specific tasks/dirs highly recommended inventory - where the inventory and additional vars is stored library - library of custom local ansible modules playbooks - collections of plays we want to run on systems tasks - snippets of tasks that should be included in plays public path for everything is: /srv/web/infra/ansible private path - which is sysadmin-main accessible only is: /srv/private/ansible In general to run any ansible playbook you will want to run: sudo -i ansible-playbook /path/to/playbook.yml cloud instances: to startup a new cloud instance and configure for basic server use run (as root): el6: sudo -i ansible-playbook /srv/web/infra/ansible/playbooks/el6-temp-instance.yml f17: sudo -i ansible-playbook /srv/web/infra/ansible/playbooks/f17-temp-instance.yml The -i is important - ansible's tools need access to root's sshagent as well as the cloud credentials to run the above playbooks successfully. This will setup a new instance, provision it and email sysadmin-main that the instance was created, it's instance id (for terminating it, attaching volumes, etc) and it's ip address. You will then be able to login, as root. You can add various extra vars to the above commands to change the instance you've just spun up. variables to define: instance_type=c1.medium security_group=default root_auth_users='username1 username2 @groupname' hostbase=basename for hostname - will have instance id appended to it define these with: --extra-vars="varname=value varname1=value varname2=value" Name Memory_MB Disk VCPUs m1.tiny 512 0 1 m1.small 2048 20 1 m1.medium 4096 40 2 m1.large 8192 80 4 m1.xlarge 16384 160 8 m1.builder 5120 50 3 Setting up a new persistent cloud host: 1. select an ip: source /srv/private/ansible/files/openstack/persistent-admin/ec2rc.sh euca-describe-addresses - pick an ip from the list that is not assigned anywhere - add it into dns - normally in the cloud.fedoraproject.org but it doesn't have to be 2. If needed create a persistent storage disk for the instance: source /srv/private/ansible/files/openstack/persistent-admin/ec2rc.sh euca-create-volume -z nova -s <size in gigabytes> 3. set up the host/ip in ansible host inventory - add to ansible/inventory/inventory under [persistent-cloud] - either the ip itself or the hostname you want to refer to it as 4. setup the host_vars - create file named by the hostname or ip you used in the inventory - for adding persistent volumes add an entry like this into the host_vars file volumes: ['-d /dev/vdb vol-BCA33FCD', '-d /dev/vdc vol-DC833F48'] for each volume you want to attach to the instance. The device names matter - they start at /dev/vdb and increment. However, they are not reliable IN the instance. You should find the device, partition it, format it and label the formatted device then mount the device by label or by UUID. Do not count on the device name being the same each time. Contents should look like this (remove all the comments) --- # 2cpus, 3GB of ram 20GB of ephemeral space instance_type: m1.large # image id image: emi-B8793915 keypair: fedora-admin # what security group to add the host to security_group: webserver zone: fedoracloud # instance id will be appended hostbase: hostname_base- # ip should be in the 209.132.184.XXX range public_ip: $ip_you_selected # users/groups who should have root ssh access root_auth_users: skvidal bkabrda description: some description so someone else can know what this is The available images can be found by running:: source /srv/private/ansible/files/openstack/persistent-admin/ec2rc.sh euca-describe-images | grep emi 4. setup a host playbook ansible/playbooks/hosts/$YOUR_HOSTNAME_HERE.yml Note: the name of this file doesn't really matter but it should normally be the hostname of the host you're setting up. - name: check/create instance hosts: $YOUR_HOSTNAME/IP HERE user: root gather_facts: False vars_files: - /srv/web/infra/ansible/vars/global.yml - ${private}/vars.yml tasks: - include: $tasks/persistent_cloud.yml - name: provision instance hosts: $YOUR_HOSTNAME/IP HERE user: root gather_facts: True vars_files: - /srv/web/infra/ansible/vars/global.yml - ${private}/vars.yml - ${vars}/${ansible_distribution}.yml tasks: - include: $tasks/cloud_setup_basic.yml # fill in other actions/includes/etc here handlers: - include: $handlers/restart_services.yml 5. add/commit the above to the git repo and push your changes 6. set it up: sudo -i ansible-playbook /srv/web/infra/ansible/playbooks/hosts/$YOUR_HOSTNAME_HERE.yml 7. login, etc You should be able to run that playbook over and over again safely, it will only setup/create a new instance if the ip is not up/responding.