Version 1

    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.