Документация
Инструкции
Установка и конфигурирвание Vagrant для работы с Openstack


Vagrant - инструмент для создания виртуальной среды, написанный на языке Ruby. Вы можете создать сервер c установленным Vagrant, полностью настроенный и готовый к работе с датацентром, используя форму установки окружения из шаблона Openstack Heat.



Для самостоятельной установки выполянем следующие шаги:

1. Устанавливаем необходимые пакеты.
    $ apt update
    $ apt -y install git python python-pip virtualenv python-apt
  
2. Если нужен форвардинг SSH ключей, разрешаем форвард ключей для SSH сервера
    $ sed -i '/^#AllowAgentForwarding\ yes/s/#//' /etc/ssh/sshd_config
    $ systemctl restart ssh
    $ echo 'Defaults    env_keep+=SSH_AUTH_SOCK' | tee -a /etc/sudoers.d/sudo_ssh_forward
3. Устанавливаем пакеты и конфигурируем окружение virtualenv
    $ virtualenv ~/ansible2.9
    $ echo 'source ~/ansible2.9/bin/activate' >> ~/.bashrc
    $ source ~/ansible2.9/bin/activate
    $ sudo apt install -y vagrant
    $ sudo apt remove -y ruby-fog-libvirt
    $ sudo vagrant plugin install vagrant-openstack-provider
    $ pip install ansible==2.9.7
    $ pip install openstacksdk==0.43.0
    $ pip install openstackclient
    $ pip install "python-ironicclient!=2.5.2,!=2.7.1,!=3.0.0,>=2.3.0,<4.0.0;python_version=='2.7'"
  
4. Конфигурируем параметры подключения к датацентру, параметры подключения доступны в Панели управления
    $ cat > ~/keystone_dc01 <<EOF
    unset OS_USERNAME OS_PASSWORD OS_TENANT_NAME OS_AUTH_URL OS_TOKEN OS_URL
    unset SERVICE_TOKEN SERVICE_ENDPOINT
    unset OS_USER_DOMAIN_NAME OS_PROJECT_DOMAIN_NAME OS_PROJECT_NAME
    export OS_IMAGE_API_VERSION=2
    export OS_URL=<< dc_endpoint_public_url >>
    export OS_AUTH_URL=<< dc_endpoint_public_url >>
    export NEW_OS_AUTH_URL=<< dc_endpoint_public_url >>
    export OS_USER_DOMAIN_NAME=myaccount003-domain
    export OS_PROJECT_DOMAIN_NAME=myaccount003-domain
    export OS_USERNAME=myaccount003
    export OS_PROJECT_NAME=myaccount003-dc01
    export OS_PASSWORD=<< openstack_password >>
    export OS_IDENTITY_API_VERSION=3
    EOF
  
5. Создаем файл Vagrantfile
    $ cat > ~/Vagrantfile <<EOF
    VAGRANTFILE_API_VERSION = "2"
    Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
      # Specify the default SSH username
      config.ssh.username = "ubuntu"
      # Configure the OpenStack provider for Vagrant
      config.vm.provider "openstack" do |os,override|
        # Specify OpenStack authentication information
        os.identity_api_version = '3'
        os.username             = ENV['OS_USERNAME']
        os.password             = ENV['OS_PASSWORD']
        os.project_name         = ENV['OS_PROJECT_NAME']
        os.project_domain_name  = ENV['OS_PROJECT_DOMAIN_NAME']
        os.user_domain_name     = ENV['OS_USER_DOMAIN_NAME']
        os.openstack_auth_url   = ENV['OS_AUTH_URL']
        # Specify instance information
        os.server_name = "vagrant-test"
        os.flavor = "vibox1"
        os.image = "Ubuntu Server 18.04 LTS (2020-05-08)"
        os.security_groups = ["default"]
      end
    end
    EOF
  
Теперь вы можете создавать виртуальные серверы в своем датацентре из vagrant
    $ vagrant up
    ==> default: Launching a server with the following settings...
    ==> default:  -- Name            : vagrant-test
    ==> default:  -- Flavor          : vibox1
    ==> default:  -- KeyPair         : vagrant-generated-3g54m0ax
    ==> default: Waiting for the server to be built...
    ==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 10.20.1.3:22
    default: SSH username: ubuntu
    default: SSH auth method: private key
    default: Warning: Host unreachable. Retrying...
    default: Warning: Connection refused. Retrying...
    ==> default: Machine booted and ready!
    $ vagrant ssh
    Welcome to Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-88-generic x86_64)
    ubuntu@vagrant-test:~$ sudo id
    uid=0(root) gid=0(root) groups=0(root)
  
Обратите внимание, что в приведенном примере Vagrantfile не указан приватный SSH ключ, в таком случае ключи будут созданы автоматически, публичный ключ будет сохранен в инфраструктуре датацентра.