Automatizacija
Darbą su virtualiomis mašinomis galima automatizuoti. Čia pateikiami naudojimo atvejai ir jų įgyvendinimo pavyzdžiai. Galima naudoti pavyzdžius, pakeičiant kintamuosius, arba remtis jais rašant naujus skriptus.
Pasiruošimas
Informaciją apie virtualias mašinas Ansible iš OpenStack gauna per skriptą openstack_inventory.py. Jį reikia atsisiųsti.
Darbui su OpenStack reikės autentifikuotis - galima importuoti aplinkos kintamuosius kaip dirbant su CLI, tačiau patogesnė alternatyva į ta patį katalogą patalpinti failą clouds.yaml:
--- clouds: Example_project: auth: auth_url: https://keystone.cloud.litnet.lt:5000/v3 username: example_project_username password: example_project_password project_id: example_project_id project_name: Example_project user_domain_name: "ktu.lt" region_name: KTU interface: "public" identity_api_version: 3
Svarbu: šį failą galima atsiųsti prisijungus prie OpenStack, tačiau reikės pagal pavyzdį pakeisti user_domain_name bei pridėti įraša password su savo slaptažodžiu, gautu iš administratoriaus.
Laikyti slaptažodį teksto faile yra pavojinga. Užtikrinkite, kad niekas kitas jo nepasieks.
Toliau reikia į ssh-agent pridėti visus ssh raktus, kurių reikės prisijungimui prie nuotolinių serverių:
eval "$(ssh-agent -s)" ssh-add ~/manoraktas1.key ssh-add /tmp/key
Nurodant savo raktą(-us). Daugiau informacijos čia. Dabar jau galima kviesti komandas.
Sukurti SSH prisijungimus naujam naudotojui
Atvejis: reikia naujam asmeniui prie nurodytų VM sukurti prisijungimus. Pirmiausia sukuriamas ansible playbook užduočių sąrašas, failas users.yml:
--- - hosts: all #vm ip adresai remote_user: ubuntu #priklauso nuo OS become: true #reikalinga root teisems tasks: #uzduociu sarasas - name: Sukurti (trukstama) grupe 'vardas' #uzduoties pavadinimas group: name: vardas #cia grupes vardas state: present #uztikrinti, kad egzistuoja - name: Sukurti (trukstama) naudotoja #nurodomas ir slaptazodis user: name: vardas #cia vartotojo vardas shell: '/bin/bash' password: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" #sifruotas slaptazodis groups: "vardas,sudo" #grupes append: true state: present - name: Sukurti '.ssh' kataloga naudotojui 'vardas' file: path: /home/vardas/.ssh #vieta state: directory #katalogas owner: vardas group: vardas - name: Nurodyti leidziamus prisijungimo raktus copy: src: authorized_keys #failo vieta vietineje masinoje dest: /home/vardas/.ssh/authorized_keys #failo vieta nuotolineje masinoje owner: vardas group: vardas mode: 0640 #failo teises
Playbook veikimas:
- sukuria naują grupę
- sukuria naują vartotoją, priskiria grupes ir nurodo slaptažodį
- sukiria .ssh katalogą
- į sukurtą katalogą nukopijuoja pateiktą failą authorized_keys
Paleidimas:
ansible-playbook users.yml -i openstack_inventory.py
Paleisti du LAMP stekus
Atvejis: reikia dviejų linux VM su Apache2, MySQL ir PHP.
Svarbu: Ansible nežino naujai sukurtų VM IP adresų. Kad juos pasiimti iš OpenStack, reikia pridėti meta: refresh_inventory po sukūrimo. Visi aktualūs kintamieji yra vars segmentuose (jų yra du). servers turi sutapti abiejuose segmentuose. Failas 2lamps.yml:
- name: Paleisti du Ubuntu serverius hosts: localhost gather_facts: false #pradziai nereikia jokios informacijos is OpenStack vars: #pasiraktojantys kintamieji iskeliami patogumui cloud: openstack #projekto informacija is clouds.yaml public_key: /home/ubuntu/.ssh/id_rsa.pub #viesas raktas ssh serveriams public_key_name: lampkey #raktu poros pavadinimas pub_network: vlan229 #isorinis OpenStack tinklas; galima keisti i savo vidini, taciau nepriskyrus floating ip, ansible ju nepasieks sec_grp: lamp flavor: l1.2xsmall image: Ubuntu-19.10 servers: ['primary-LAMP', 'fallback-LAMP'] #vm vardai tasks: - name: Importuoti SSH raktu pora os_keypair: cloud: "{{ cloud }}" state: present name: "{{ public_key_name }}" public_key_file: "{{ public_key }}" - name: Sukurti ugniasienes taisykliu grupe os_security_group: cloud: "{{ cloud }}" state: present name: "{{ sec_grp }}" description: Lamp steko taisykles SSH ir HTTP - name: Sukurti grupes SSH taisykle os_security_group_rule: cloud: "{{ cloud }}" state: present security_group: "{{ sec_grp }}" protocol: tcp port_range_min: 22 port_range_max: 22 remote_ip_prefix: 0.0.0.0/0 #tai nera saugu - name: Sukurti grupes HTTP taisykle os_security_group_rule: cloud: "{{ cloud }}" state: present security_group: "{{ sec_grp }}" protocol: tcp port_range_min: 80 port_range_max: 80 remote_ip_prefix: 0.0.0.0/0 - name: Sukurti dvi VM os_server: name: "{{ item }}" cloud: "{{ cloud }}" state: present availability_zone: nova key_name: "{{ public_key_name }}" flavor: "{{ flavor }}" timeout: 300 image: "{{ image }}" security_groups: "{{ sec_grp }}" nics: - net-name: "{{ pub_network }}" with_items: "{{ servers }}" - meta: refresh_inventory - name: Prisijungti prie vm, paruosti darbui hosts: "{{ servers }}" remote_user: ubuntu #priklauso nuo image become: true #sudo vars: servers: ['primary-LAMP', 'fallback-LAMP'] #vm vardai cloud: "{{ cloud }}" ansible_ssh_private_key_file: home/ubuntu/.ssh/id_rsa #privatus raktas ssh prisijungimui tasks: - name: Laukti 300 sekundziu arba kol ssh portas pranes "OpenSSH" wait_for: port: 22 search_regex: OpenSSH delay: 10 - name: Atnaujinti apt podeli apt: update_cache: yes - name: Instaliuoti Apache apt: name: apache2 state: present - name: Spausdinti VM pavadinima puslapyje shell: "echo 'Sveiki, as <b> {{ ansible_fqdn }}' > /var/www/html/index.html" #pagrindinis puslapis rodys vidini openstack vm fqdn - pavadinimas.local.litnet.lt - name: Instaliuoti MySQL apt: name: mariadb-server state: present - name: Instaliuoti PHP apt: name: php,libapache2-mod-php,php-mysql state: present
Playbook veikimas:
- į OpenStack įkeliamas viešas raktas (os_keypair)
- sukuriama ugniasienės taisyklių grupė (os_security-group)
- ji papildoma taisyklėmis iš viso interneto praleisti įeinantį srautą prievadais 80 ir 22 (os_security_group_rule)
- sukuria dvi vm nurodytais pavadinimais (os_server)
- iš openstack_inventory.py susirenka sukurtų mašinų IP adresus (meta: refresh_inventory)
- palaukia, kol mašinos sukuriamos ir startuoja ssh servisas (wait_for)
- atnaujina apt podėlį (apt: update_cache: yes)
- instaliuoja apache2 taip pat išspausdina pilną vm vardą į pagrindinį puslapį (shell)
- instaliuoja mariadb ir php
Paleidimas:
ansible-playbook 2lamps.yml -i openstack_inventory.py