Просмотр исходного кода

ansible to setup a good tester node

Chris Mague 3 лет назад
Родитель
Сommit
2352892b4a

+ 17 - 0
ansible/templates/nginx_insights.j2

@@ -0,0 +1,17 @@
+######################################################################
+#		{{ ansible_managed }}
+######################################################################
+
+upstream insights {
+  server 127.0.0.1:8001;
+}
+
+server {
+  listen          {{ ansible_default_ipv4.address }}:8001;
+  server_name     _;
+  location / {
+    proxy_pass      http://insights;
+    proxy_set_header Host            $host;
+    proxy_set_header X-Forwarded-For $remote_addr;
+  }
+}

+ 21 - 0
ansible/templates/systemd_redis_insights.j2

@@ -0,0 +1,21 @@
+#####################################################################
+# {{ ansible_managed }}
+
+#####################################################################
+[Unit]
+Description=Redis Insights
+After=network.target
+
+[Service]
+WorkingDirectory=/home/redis
+Type=simple
+LimitNOFILE=65535
+User=redis
+ExecStart=/usr/local/bin/redisinsight
+StandardOutput=file:/var/log/redis-insight.log
+StandardError=file:/var/log/redis-insight-error.log
+
+
+[Install]
+WantedBy=multi-user.target
+Alias=redis-insights.service

+ 150 - 0
ansible/testernode.yml

@@ -0,0 +1,150 @@
+---
+
+- hosts: all
+  become: yes
+  become_user: root
+  become_method: sudo
+  gather_facts: yes
+
+  vars:
+    deb_packages:
+      - build-essential
+      - autoconf
+      - automake
+      - libbsd-dev
+      - libltdl-dev
+      - libltdl7
+      - libtool
+      - libevent-openssl-2.1-6
+      - libpcre3-dev 
+      - libevent-dev
+      - pkg-config
+      - zlib1g-dev
+      - libssl-dev
+      - nginx
+
+  handlers:
+    - name: restart_nginx
+      service:
+        name: nginx
+        state: restarted
+
+
+  pre_tasks:
+    - name: Update Apt Cache
+      apt: update_cache=yes 
+      when: ansible_os_family == "Debian"
+    - name: Ubuntu Packages
+      package:
+        name: "{{ deb_packages }}"
+    - name: Set to Realistic Hostname
+      hostname:
+        name: "tester"
+    - name: Setup Hostsfile
+      lineinfile:
+        dest: /etc/hosts
+        regexp: '^127\.0\.0\.1[ \t]+localhost'
+        line: "127.0.0.1 localhost tester"
+        state: present
+
+  tasks:
+    - name: load vars
+      include_vars: default.yaml
+    - name: create redis user
+      user:
+        name: redis
+        uid: 4001
+        shell: /bin/bash
+        state: present
+
+    - name: checkout redis git repo
+      git:
+        repo: 'https://github.com/antirez/redis'
+        dest: /home/redis/redis
+
+    - name: redis - Build the default target
+      make:
+        chdir: /home/redis/redis
+
+    - name: redis - Run 'install' target as root
+      make:
+        chdir: /home/redis/redis
+        target: install
+      become: yes
+
+    - name: checkout memtier_benchmark git repo
+      git:
+        repo: 'https://github.com/RedisLabs/memtier_benchmark'
+        dest: /home/redis/memtier_benchmark
+
+    - name: memtier - Run the autoconf
+      command: autoreconf -ivf
+      args:
+        chdir: /home/redis/memtier_benchmark
+        creates: /home/redis/memtier_benchmark/configure
+
+    - name: memtier - Run the configure script first
+      command: ./configure
+      args:
+        chdir: /home/redis/memtier_benchmark
+        creates: /home/redis/memtier_benchmark/Makefile
+
+    - name: memtier - Build the default target
+      make:
+        chdir: /home/redis/memtier_benchmark
+
+    - name: Run 'memtier_benchmark install' target as root
+      make:
+        chdir: /home/redis/memtier_benchmark
+        target: install
+      become: yes
+
+    - name: Install Redis Insights
+      get_url:
+        url: https://downloads.redisinsight.redislabs.com/latest/redisinsight-linux64
+        dest: /usr/local/bin/redisinsight
+        mode: '0755'
+    - name: Redis Insights Systemd
+      template:
+        src: systemd_redis_insights.j2
+        dest: /lib/systemd/system/redis-insights.service
+        owner: root
+        group: root
+        mode: 0644
+    - name: Enable Redis Insights Services
+      systemd:
+        name: redis-insights
+        enabled: yes
+        state: started
+    - name: Enable Redis Insights Services in Nginx
+      template:
+        src: nginx_insights.j2
+        dest: /etc/nginx/sites-enabled/insights
+        owner: root
+        group: root
+        mode: 0644
+      notify:
+        - restart_nginx
+    - name: Enable Redis Insights Services
+      file:
+        path: /etc/nginx/sites-enabled/default
+        state: absent
+      notify:
+        - restart_nginx
+    - name: Add Golang PPA
+      apt_repository:
+        repo: 'ppa:longsleep/golang-backports'
+        state: present
+    - name: Install Go
+      package:
+        name: golang
+
+
+  post_tasks:
+    - name: create the redis dir
+      file:
+        path: /redis
+        owner: redis
+        group: redis
+        mode: '0755'
+        state: directory

+ 26 - 0
provisioning.tf

@@ -26,6 +26,16 @@ data "template_file" "ansible_inventory" {
   }
   depends_on = [aws_instance.re, aws_eip_association.re-eip-assoc, aws_volume_attachment.re-ephemeral]
 }
+data "template_file" "ansible_tester_inventory" {
+  count    = local.tester_count
+  template = "${file("${path.module}/inventory.tpl")}"
+  vars = {
+    host_ip  = element(aws_eip.tester-eip.*.public_ip, count.index)
+    vpc_name = var.vpc-name
+    ncount   = count.index
+  }
+  depends_on = [aws_instance.tester, aws_eip_association.tester-eip-assoc]
+}
 
 data "template_file" "ssh_config" {
   template = "${file("${path.module}/ssh.tpl")}"
@@ -45,6 +55,14 @@ resource "null_resource" "inventory-setup" {
   depends_on = [data.template_file.ansible_inventory]
 }
 
+resource "null_resource" "tester-inventory-setup" {
+  count = local.tester_count
+  provisioner "local-exec" {
+    command = "echo \"${element(data.template_file.ansible_tester_inventory.*.rendered, count.index)}\" > /tmp/${var.vpc-name}_tester_node_${count.index}.ini"
+  }
+  depends_on = [data.template_file.ansible_inventory]
+}
+
 resource "null_resource" "ssh-setup" {
   provisioner "local-exec" {
     command = "echo \"${data.template_file.ssh_config.rendered}\" > /tmp/${var.vpc-name}_node.cfg"
@@ -61,3 +79,11 @@ resource "null_resource" "ansible-run" {
   }
   depends_on = [null_resource.remote-config]
 }
+
+resource "null_resource" "ansible-tester-run" {
+  count = var.data-node-count
+  provisioner "local-exec" {
+    command = "ansible-playbook ${path.module}/ansible/testernode.yml --private-key ${local.ssh_key_path} -i /tmp/${var.vpc-name}_tester_node_${count.index}.ini --become -e 'ENABLE_VOLUMES=${var.enable-volumes}'"
+  }
+  depends_on = [null_resource.remote-config]
+}