Provisionamento com Vagrant, Virtual Box e Ansible
Vagrant é um software que abstrai provedores de máquinas virtuais como VMWare, VirtualBox, KVM, entre outros. Além de possuir um DSL baseado em Ruby, o Vagrant oferece uma grande gama de posibilidades para integração com sistemas de gerenciamento de configuração como: Puppet, Chef, Ansible, etc.
VirtualBox é um programa de máquina virtual, tecnologia que simula um computador dentro de outro. Com ele é possível utilizar um sistema Linux dentro de outro sistema operacional.
Ansible é um sistema de automação de configuração desenvolvido em Python que permite descrever procedimientos utilizando o formato YAML
.
Preparando o Ambiente
A instalação do Vagrant é realizada utilizando o pacote vagrant_1.8.1_x86_64.rpm
disponivel em vagrant.
Execute o pacote e verifique a versão instalada:
[mmagnani@linux DevOps]$ sudo rpm -Uvh vagrant_1.8.1_x86_64.rpm
[mmagnani@linux DevOps]$ vagrant -v Vagrant 1.8.1
Instale também os pacotes para a integração com S.O:
[mmagnani@linux DevOps]$ sudo yum -y install libxslt-devel libxml2-devel libguestfs-tools-c
[mmagnani@linux DevOps]$ vagrant plugin install vagrant-nfs_guest
Observe os plugins instalados:
[mmagnani@linux DevOps]$ vagrant plugin list vagrant-nfs_guest (0.1.8) vagrant-share (1.1.5, system)
Para instalar o Ansible execute os seguintes comandos:
[mmagnani@linux DevOps]$ sudo yum -y install ansible
[mmagnani@linux DevOps]$ ansible --version ansible 1.9.2 configured module search path = None
Provisionando o Primeiro Servidor
Escolha um diretório no sistema operacional para a criação das configurações do projeto com por exemplo /home/mmagnani/DevOps
.
Dentro desse diretório execute o comando vagrant init para provisionar o primeiro Boxe (VM)
através do repositorio publico chamado Atlas Hashcorp.
[mmagnani@linux DevOps]$ vagrant init centos/7
Esse comando criou um arquivo chamado VagrantFile
com uma estrutura inicial com comentários explicando cada opção. Inicialmente serão utilizadas apenas algumas dessas opções, sendo assim deixe o arquivo VagrantFile
como abaixo:
VAGRANTFILE_API_VERSION = "2"
ENV['VAGRANT_DEFAULT_PROVIDER'] = 'virtualbox'
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "centos/7"
config.vm.define :wildfly do |wildfly|
wildfly.vm.hostname = "wildfly"
wildfly.vm.network :private_network, :ip => "192.168.90.50"
wildfly.vm.provision "ansible" do |ansible|
ansible.playbook = "wildfly.yml"
ansible.verbose = "vvv"
end
wildfly.vm.provider :libvirt do |domain|
domain.memory = 1024
domain.cpus = 2
end
end
end
Para a instalação do WildFly crie um novo playbook chamado wildfly.yml
e deixe-o como abaixo:
- hosts: wildfly
sudo: True
user: vagrant
tasks:
- name: "Instala OpenJDK"
yum: name=java-1.8.0-openjdk-devel state=latest
- name: "Instala o wget e unzip"
shell: sudo yum -y install wget unzip
- name: "Instala o OpenSSL"
yum: name=openssl state=latest
- name: "Download do WildFly"
get_url: url=http://download.jboss.org/wildfly/8.2.1.Final/wildfly-8.2.1.Final.zip dest=/tmp/wildfly-8.2.1.Final.zip
- name: "Descompacta o WildFly em /opt"
unarchive: src=/tmp/wildfly-8.2.1.Final.zip dest=/opt copy=no
- name: "Cria link simbolico para o WildFly"
shell: sudo ln -s /opt/wildfly-* /opt/wildfly
- name: "Copia o arquivo wildfly.service para criar o serviço"
copy: src=wildfly.service dest=/etc/systemd/system
- name: "Permissão do serviço"
shell: sudo chmod 644 /etc/systemd/system/wildfly.service
- name: "Usuario WildFly"
shell: sudo useradd -p `openssl passwd -1 wildfly` wildfly
- name: "Adiciona ao Grupo wildfly"
shell: sudo usermod -aG wildfly wildfly
- name: "Permissão do diretório"
shell: sudo chown -R wildfly:wildfly /opt/wildfly*
- name: "Configura o usuario do wildfly como sudo"
lineinfile: 'dest=/etc/sudoers line="wildfly ALL=(ALL) NOPASSWD:ALL" state=present validate="visudo -cf %s"'
- name: "Habilita o servico do WildFly"
shell: sudo systemctl enable wildfly.service
- name: "Inicia o servico do WildFly"
shell: sudo systemctl start wildfly.service
No diretório onde estão todas as configurações, crie um novo arquivo chamadowildfly.service
que será utilizado pelo playbook wildfly.yml
:
[Unit]
Description=WildFly 8.2.1
After=syslog.target network.target
[Service]
Type=simple ExecStart=/opt/wildfly/bin/standalone.sh
[Install]
WantedBy=multi-user.target
Para inicializar o Box utilize o comando vagrant up
:
[mmagnani@linux DevOps]$ vagrant up
Terminada a instalação, navegue até a URL http://IP:8080, observe que o WildFly ainda não está acessível.
Acesse o servidor wildfly utilizando SSH com o comando vagrant ssh wildfly
:
[mmagnani@localhost DevOps]$ vagrant ssh wildfly
Edite o arquivo /opt/wildfly/bin/standalone.conf
e adicione as configurações de binding para a variável JAVA_OPTS
:
if [ "x$JAVA_OPTS" = "x" ]; then
JAVA_OPTS="-Xms64m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true"
JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS -Djava.awt.headless=true"
JAVA_OPTS="$JAVA_OPTS -Djboss.bind.address.management=192.168.90.50 -Djboss.bind.address=192.168.90.50"
Reinicie o WildFly:
[vagrant@wildfly bin]$ sudo systemctl restart wildfly.service
Acesse novamente a URL http://IP:8080 e a página inicial do WildFly será exibida:
Ainda no servidor do WildFly crie um usuário de gerenciamento para ser utilizados nos testes de integração e deploy. Adione um usuário com a Role ( ManagementRealm )
de Gerenciamento como abaixo:
[vagrant@wildfly bin]$ pwd
/opt/wildfly/bin
[vagrant@wildfly bin]$ sudo ./add-user.sh
What type of user do you wish to add?
a) Management User (mgmt-users.properties)
b) Application User (application-users.properties)
(a): a
Enter the details of the new user to add.
Using realm 'ManagementRealm' as discovered from the existing property files.
Username : devops
Password recommendations are listed below. To modify these restrictions edit the add-user.properties configuration file.
- The password should not be one of the following restricted values {root, admin, administrator}
- The password should contain at least 8 characters, 1 alphabetic character(s), 1 digit(s), 1 non-alphanumeric symbol(s)
- The password should be different from the username
Password : devops@2015
Re-enter Password : devops@2015
What groups do you want this user to belong to? (Please enter a comma separated list, or leave blank for none)[ ]:
About to add user 'devops' for realm 'ManagementRealm'
Is this correct yes/no? yes
Added user 'devops' to file '/opt/wildfly-8.2.1.Final/standalone/configuration/mgmt-users.properties'
Added user 'devops' to file '/opt/wildfly-8.2.1.Final/domain/configuration/mgmt-users.properties'
Added user 'devops' with groups to file '/opt/wildfly-8.2.1.Final/standalone/configuration/mgmt-groups.properties'
Added user 'devops' with groups to file '/opt/wildfly-8.2.1.Final/domain/configuration/mgmt-groups.properties'
Is this new user going to be used for one AS process to connect to another AS process?
e.g. for a slave
Navegue até a URL http://wildfly:9990 e faça login com o usuário devops
no painel de gerenciamento do WildFly:
A instalação e configuração do WildFly está finalizada.
Comments