====== Foreman/QuickStack Tool Interaction ====== The purpose of this page is to go into some detail and provide the linkage to how the Foreman/QuickStack tools interact. It will go from initiating a deploy through the tools to show the interactions and files that are called. ===== Initial Deployment ===== Deployment is done via deploy.sh. Deploy.sh does the following: * Detects the networking setup * Gathers parameters to be used to deploy OPNFV via an [[https://github.com/trozet/bgs_vagrant/blob/master/opnfv_ksgen_settings.yml | inventory file]] * The parameters include global parameters later configured in Foreman, and a "nodes" yaml dictionary which describes the baremetal/VM topology * Deploy uses Vagrant to bring up VMs * 1 VM is used as Foreman, other VMs can be provided when doing a virtual deployment * For each VM, [[https://github.com/trozet/bgs_vagrant | bgs_vagrant]] is cloned into /tmp/ (/tmp/bgs_vagrant is Foreman VM, while other nodes are /tmp/controller1, etc) * Vagrant uses provisioners to configure the VM (done inside of the Vagrantfile under /tmp/) * deploy.sh will configure the [[https://github.com/trozet/bgs_vagrant/blob/master/Vagrantfile | Vagrantfile]] to use [[https://github.com/trozet/bgs_vagrant/blob/master/bootstrap.sh | bootstrap.sh]] to install Foreman * VMs are installed with a different Ansible playbook/ Vagrant provisioning (by editing the Vagrantfile in /tmp/controller1, etc) ===== Initial Provisioning Foreman VM ===== * bootsrap.sh installs, configures and executes [[https://github.com/trozet/khaleesi | Khaleesi]] * Khaleesi is an Ansible based framework that is capable of installing Foreman and deploying nodes * bootsrap.sh initiates execution of [[https://github.com/trozet/khaleesi/blob/opnfv/playbooks/opnfv.yml | opnfv.yml]] playbook * The opnfv.yml playbook then calls the [[https://github.com/trozet/khaleesi/blob/opnfv/roles/foreman/opnfv-install/tasks/main.yml | opnfv install role]] which will install Foreman * The OPNFV install role will install Foreman using [[https://github.com/trozet/astapor | Astapor]] * Astapor includes a bash script, [[https://github.com/trozet/astapor/blob/opendaylight/bin/foreman_server.sh | foreman_server.sh]], and [[https://github.com/trozet/astapor/blob/opendaylight/bin/opnfv-seeds.rb | opnfv-seeds.rb]] custom database file to install Foreman * Astapor also contains the QuickStack puppet modules which ar cloned into the Foreman VM * Also cloned are the [[https://github.com/trozet/puppet-trystack | Genesis/Trystack Puppet Modules]], and [[https://forge.puppetlabs.com/puppetlabs/openstack | OpenStack Puppet modules]] * The opnfv-seeds.rb contains Foreman configuration (hostgroups, puppet modules, etc) ===== Deploying Nodes (baremetal) ===== * After OPNFV install role is finished, opnfv.yml playbook calls the [[https://github.com/trozet/khaleesi/blob/opnfv/roles/get_nodes/foreman/tasks/main.yml | deploy nodes role]] * The role then uses the [[https://github.com/trozet/khaleesi/blob/opnfv/library/foreman.py | foreman.py]] library to issue a Foreman API call to reboot and build the nodes with PXE * The role will then wait for SSH access to the node * The role will then wait for puppet to complete and the node to be put into Active ("A") state in Foreman, indicating deploy is complete