Version 26 (modified by 10 years ago) (diff) | ,
---|
Title of the Experiment
4. Configure and Initialize
omni
comes with a script, readyToLogin
which finds the login information for nodes in your slice. As of omni
version 2.8, readyToLogin
has an --ansible-inventory
flag which generates the Ansible inventory, which is a flat file which tells Ansible the name and login information for your nodes.
- Create your Ansible inventory file:
On your local machine:
$ readyToLogin MYSLICE --useSliceAggregates --ansible-inventory -o $ cat inventory
Here example output of running these commands:
$ readyToLogin ansible --useSliceAggregates --ansible-inventory -o Host info saved in inventory file: /Users/jdoe/projects/GENI/hellogeni/inventory $ cat inventory client ansible_ssh_host=pc3.instageni.clemson.edu ansible_ssh_port=33850 server ansible_ssh_host=pcvm3-6.instageni.clemson.edu
- Check to see if your nodes are up and ready.
This command uses the
ping
module to ping the specified nodes (in this caseall
) listed in the inventory file:$ ansible all -m ping -i inventory
Example output showing all of the nodes responding to ping:
$ ansible all -m ping -i inventory client | success >> { "changed": false, "ping": "pong" } server | success >> { "changed": false, "ping": "pong" }
- Try using the ping module in Ansible to only ping
server
orclient
by replacingall
in the above withserver
orclient
.
5. Execute Experiment
The following are some example Ansible Ad Hoc commands. You can run these commands one at a time from the machine where you have Ansible installed. `-s` tells Ansible to use `sudo` when executing the command. |
apt
module is used to installed packages:
ansible [-i inventory] [all/server/client] -s -m apt -a "name=apache2 update_cache=yes"
shell
module is used to execute an arbitrary shell command:
ansible [-i inventory] [all/server/client] -s -m shell -a "/usr/sbin/a2enmod status"
file
module is used to manipulate files:
ansible [-i inventory] [all/server/client] -s -m file -a "path=/var/www/html state=absent"
synchronize
module is an implementation of rsync
and is used to efficiently synchronize files between your local machine and the node:
ansible [-i inventory] [all/server/client] -s -m synchronize \ -a "src=website/index.html dest=/var/www"
lineinfile
module is used to see if an arbitrary line exists in a file:
ansible [-i inventory] [all/server/client] -s -m lineinfile \ -a "line='ExtendedStatus On' dest=/etc/apache2/conf.d/extendedstatus create=yes state=present"
service
module is used to start/stop/restart/etc services:
ansible [-i inventory] [all/server/client] -s -m service -a "name=apache2 state=restarted"
- Using the above Ad Hoc Ansible commands do the following:
- on both
client
andserver
, installapache2
andiperf
- on the
client
node, place thescripts
directory in/local
with permissions755
.
- on both
Ansible Ad Hoc commands easily map to commands used in an Ansible Playbook. |
The hello-client.yml
is:
--- - name: Configure client hosts: client sudo: True tasks: - name: install apache2 apt: name=apache2 update_cache=yes - name: install iperf apt: name=iperf update_cache=yes - name: copy scripts into /local with permissions 755 synchronize: src=scripts dest=/local mode=755
Run the playbook with the following commands on the local machine:
ansible-playbook hello-client.yml -i inventory ansible-playbook hello-server.yml -i inventory
- Using the above Ansible modules, reproduce the steps in the HelloGENI install script for the
server
node. As you find a command that works, carefully copy it into a text file and then into the Playbook.
6. Analyze Experiment
- You may have noticed that the server playbook and the client playbook contained duplicate text. This is because both nodes need to have apache installed so that they can act as webservers. As you might have guessed, there is a way to modularize this configuration. In Ansible this is done with "roles".