= [http://groups.geni.net/geni/wiki/GENIExperimenter/Tutorials/AnsibleHelloGENI Title of the Experiment] = {{{ #!html
Image Map
}}} == 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. a. Create your Ansible inventory file: {{{ #!div style="background: #ffd; border: 3px ridge; width: 800px;" On your local machine: {{{ #!sh $ readyToLogin MYSLICE --useSliceAggregates --ansible-inventory -o $ cat inventory }}} Here example output of running these commands: {{{ #!sh $ 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 }}} }}} b. Check to see if your nodes are up and ready. {{{ #!div style="background: #ffd; border: 3px ridge; width: 800px;" This command uses the `ping` module to ping the specified nodes (in this case `all`) listed in the inventory file: {{{ #!sh $ ansible all -m ping -i inventory }}} Example output showing all of the nodes responding to ping: {{{ #!sh $ ansible all -m ping -i inventory client | success >> { "changed": false, "ping": "pong" } server | success >> { "changed": false, "ping": "pong" } }}} }}} c. Try using the ping module in Ansible to only ping `server` or `client` by replacing `all` in the above with `server` or `client`. == 5. Execute Experiment == {{{ #!div style="background: #ffd; border: 3px ridge; width: 800px;" {{{ #!html
Tip The following are some example Ansible commands.
}}} `apt` module is used to installed packages: {{{ #!sh 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: {{{ #!sh ansible [-i inventory] [all/server/client] -s -m shell -a "/usr/sbin/a2enmod status" }}} `file` module is used to manipulate files: {{{ #!sh 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: {{{ #!sh 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: {{{ #!sh 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: {{{ #!sh ansible [-i inventory] [all/server/client] -s -m service -a "name=apache2 state=restarted" }}} }}} == 6. Analyze Experiment == ---- = [wiki:GENIExperimenter/Tutorials/AnsibleHelloGENI Introduction/DesignSetup] = = [wiki:GENIExperimenter/Tutorials/AnsibleHelloGENI/Finish Next: Finish] =