From a1366aad0fc2dc1a71061e49f06eb8dd22748fac Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Mon, 18 Apr 2016 14:29:17 +0900 Subject: [PATCH 01/62] Generated scaffold for zabbix_server --- app/controllers/zabbix_servers_controller.rb | 74 ++++++++ app/helpers/zabbix_servers_helper.rb | 2 + app/models/project.rb | 1 + app/models/zabbix_server.rb | 5 + app/views/zabbix_servers/_form.html.erb | 37 ++++ app/views/zabbix_servers/edit.html.erb | 6 + app/views/zabbix_servers/index.html.erb | 35 ++++ app/views/zabbix_servers/index.json.jbuilder | 4 + app/views/zabbix_servers/new.html.erb | 5 + app/views/zabbix_servers/show.html.erb | 29 ++++ app/views/zabbix_servers/show.json.jbuilder | 1 + config/routes.rb | 1 + .../20160418034350_create_zabbix_servers.rb | 13 ++ db/schema.rb | 12 +- .../zabbix_servers_controller_spec.rb | 159 ++++++++++++++++++ spec/factories.rb | 7 + spec/helpers/zabbix_servers_helper_spec.rb | 15 ++ spec/models/zabbix_server_spec.rb | 5 + spec/requests/zabbix_servers_spec.rb | 10 ++ spec/routing/zabbix_servers_routing_spec.rb | 39 +++++ .../zabbix_servers/edit.html.erb_spec.rb | 30 ++++ .../zabbix_servers/index.html.erb_spec.rb | 31 ++++ .../views/zabbix_servers/new.html.erb_spec.rb | 30 ++++ .../zabbix_servers/show.html.erb_spec.rb | 22 +++ 24 files changed, 572 insertions(+), 1 deletion(-) create mode 100644 app/controllers/zabbix_servers_controller.rb create mode 100644 app/helpers/zabbix_servers_helper.rb create mode 100644 app/models/zabbix_server.rb create mode 100644 app/views/zabbix_servers/_form.html.erb create mode 100644 app/views/zabbix_servers/edit.html.erb create mode 100644 app/views/zabbix_servers/index.html.erb create mode 100644 app/views/zabbix_servers/index.json.jbuilder create mode 100644 app/views/zabbix_servers/new.html.erb create mode 100644 app/views/zabbix_servers/show.html.erb create mode 100644 app/views/zabbix_servers/show.json.jbuilder create mode 100644 db/migrate/20160418034350_create_zabbix_servers.rb create mode 100644 spec/controllers/zabbix_servers_controller_spec.rb create mode 100644 spec/helpers/zabbix_servers_helper_spec.rb create mode 100644 spec/models/zabbix_server_spec.rb create mode 100644 spec/requests/zabbix_servers_spec.rb create mode 100644 spec/routing/zabbix_servers_routing_spec.rb create mode 100644 spec/views/zabbix_servers/edit.html.erb_spec.rb create mode 100644 spec/views/zabbix_servers/index.html.erb_spec.rb create mode 100644 spec/views/zabbix_servers/new.html.erb_spec.rb create mode 100644 spec/views/zabbix_servers/show.html.erb_spec.rb diff --git a/app/controllers/zabbix_servers_controller.rb b/app/controllers/zabbix_servers_controller.rb new file mode 100644 index 000000000..9c5074534 --- /dev/null +++ b/app/controllers/zabbix_servers_controller.rb @@ -0,0 +1,74 @@ +class ZabbixServersController < ApplicationController + before_action :set_zabbix_server, only: [:show, :edit, :update, :destroy] + + # GET /zabbix_servers + # GET /zabbix_servers.json + def index + @zabbix_servers = ZabbixServer.all + end + + # GET /zabbix_servers/1 + # GET /zabbix_servers/1.json + def show + end + + # GET /zabbix_servers/new + def new + @zabbix_server = ZabbixServer.new + end + + # GET /zabbix_servers/1/edit + def edit + end + + # POST /zabbix_servers + # POST /zabbix_servers.json + def create + @zabbix_server = ZabbixServer.new(zabbix_server_params) + + respond_to do |format| + if @zabbix_server.save + format.html { redirect_to @zabbix_server, notice: 'Zabbix server was successfully created.' } + format.json { render :show, status: :created, location: @zabbix_server } + else + format.html { render :new } + format.json { render json: @zabbix_server.errors, status: :unprocessable_entity } + end + end + end + + # PATCH/PUT /zabbix_servers/1 + # PATCH/PUT /zabbix_servers/1.json + def update + respond_to do |format| + if @zabbix_server.update(zabbix_server_params) + format.html { redirect_to @zabbix_server, notice: 'Zabbix server was successfully updated.' } + format.json { render :show, status: :ok, location: @zabbix_server } + else + format.html { render :edit } + format.json { render json: @zabbix_server.errors, status: :unprocessable_entity } + end + end + end + + # DELETE /zabbix_servers/1 + # DELETE /zabbix_servers/1.json + def destroy + @zabbix_server.destroy + respond_to do |format| + format.html { redirect_to zabbix_servers_url, notice: 'Zabbix server was successfully destroyed.' } + format.json { head :no_content } + end + end + + private + # Use callbacks to share common setup or constraints between actions. + def set_zabbix_server + @zabbix_server = ZabbixServer.find(params[:id]) + end + + # Never trust parameters from the scary internet, only allow the white list through. + def zabbix_server_params + params.require(:zabbix_server).permit(:fqdn, :username, :password, :version, :details) + end +end diff --git a/app/helpers/zabbix_servers_helper.rb b/app/helpers/zabbix_servers_helper.rb new file mode 100644 index 000000000..9913786eb --- /dev/null +++ b/app/helpers/zabbix_servers_helper.rb @@ -0,0 +1,2 @@ +module ZabbixServersHelper +end diff --git a/app/models/project.rb b/app/models/project.rb index e00d83f59..2a996231f 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -9,6 +9,7 @@ class Project < ActiveRecord::Base belongs_to :client belongs_to :cloud_provider + belongs_to :zabbix_server has_many :infrastructures, dependent: :restrict_with_exception has_many :dishes, dependent: :delete_all diff --git a/app/models/zabbix_server.rb b/app/models/zabbix_server.rb new file mode 100644 index 000000000..6c06fac6a --- /dev/null +++ b/app/models/zabbix_server.rb @@ -0,0 +1,5 @@ +class ZabbixServer < ActiveRecord::Base + has_many :projects, dependent: :restrict_with_exception + + +end diff --git a/app/views/zabbix_servers/_form.html.erb b/app/views/zabbix_servers/_form.html.erb new file mode 100644 index 000000000..1801d663c --- /dev/null +++ b/app/views/zabbix_servers/_form.html.erb @@ -0,0 +1,37 @@ +<%= form_for(@zabbix_server) do |f| %> + <% if @zabbix_server.errors.any? %> +
+

<%= pluralize(@zabbix_server.errors.count, "error") %> prohibited this zabbix_server from being saved:

+ + +
+ <% end %> + +
+ <%= f.label :fqdn %>
+ <%= f.text_field :fqdn %> +
+
+ <%= f.label :username %>
+ <%= f.text_field :username %> +
+
+ <%= f.label :password %>
+ <%= f.text_field :password %> +
+
+ <%= f.label :version %>
+ <%= f.text_field :version %> +
+
+ <%= f.label :details %>
+ <%= f.text_field :details %> +
+
+ <%= f.submit %> +
+<% end %> diff --git a/app/views/zabbix_servers/edit.html.erb b/app/views/zabbix_servers/edit.html.erb new file mode 100644 index 000000000..bb74e2427 --- /dev/null +++ b/app/views/zabbix_servers/edit.html.erb @@ -0,0 +1,6 @@ +

Editing Zabbix Server

+ +<%= render 'form' %> + +<%= link_to 'Show', @zabbix_server %> | +<%= link_to 'Back', zabbix_servers_path %> diff --git a/app/views/zabbix_servers/index.html.erb b/app/views/zabbix_servers/index.html.erb new file mode 100644 index 000000000..9338c9068 --- /dev/null +++ b/app/views/zabbix_servers/index.html.erb @@ -0,0 +1,35 @@ +

<%= notice %>

+ +

Listing Zabbix Servers

+ + + + + + + + + + + + + + + <% @zabbix_servers.each do |zabbix_server| %> + + + + + + + + + + + <% end %> + +
FqdnUsernamePasswordVersionDetails
<%= zabbix_server.fqdn %><%= zabbix_server.username %><%= zabbix_server.password %><%= zabbix_server.version %><%= zabbix_server.details %><%= link_to 'Show', zabbix_server %><%= link_to 'Edit', edit_zabbix_server_path(zabbix_server) %><%= link_to 'Destroy', zabbix_server, method: :delete, data: { confirm: 'Are you sure?' } %>
+ +
+ +<%= link_to 'New Zabbix server', new_zabbix_server_path %> diff --git a/app/views/zabbix_servers/index.json.jbuilder b/app/views/zabbix_servers/index.json.jbuilder new file mode 100644 index 000000000..1467bd97f --- /dev/null +++ b/app/views/zabbix_servers/index.json.jbuilder @@ -0,0 +1,4 @@ +json.array!(@zabbix_servers) do |zabbix_server| + json.extract! zabbix_server, :id, :fqdn, :username, :password, :version, :details + json.url zabbix_server_url(zabbix_server, format: :json) +end diff --git a/app/views/zabbix_servers/new.html.erb b/app/views/zabbix_servers/new.html.erb new file mode 100644 index 000000000..6ac3952d4 --- /dev/null +++ b/app/views/zabbix_servers/new.html.erb @@ -0,0 +1,5 @@ +

New Zabbix Server

+ +<%= render 'form' %> + +<%= link_to 'Back', zabbix_servers_path %> diff --git a/app/views/zabbix_servers/show.html.erb b/app/views/zabbix_servers/show.html.erb new file mode 100644 index 000000000..6e2697297 --- /dev/null +++ b/app/views/zabbix_servers/show.html.erb @@ -0,0 +1,29 @@ +

<%= notice %>

+ +

+ Fqdn: + <%= @zabbix_server.fqdn %> +

+ +

+ Username: + <%= @zabbix_server.username %> +

+ +

+ Password: + <%= @zabbix_server.password %> +

+ +

+ Version: + <%= @zabbix_server.version %> +

+ +

+ Details: + <%= @zabbix_server.details %> +

+ +<%= link_to 'Edit', edit_zabbix_server_path(@zabbix_server) %> | +<%= link_to 'Back', zabbix_servers_path %> diff --git a/app/views/zabbix_servers/show.json.jbuilder b/app/views/zabbix_servers/show.json.jbuilder new file mode 100644 index 000000000..9dd2c204e --- /dev/null +++ b/app/views/zabbix_servers/show.json.jbuilder @@ -0,0 +1 @@ +json.extract! @zabbix_server, :id, :fqdn, :username, :password, :version, :details, :created_at, :updated_at diff --git a/config/routes.rb b/config/routes.rb index e6cd4dc09..fcece32c0 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,4 +1,5 @@ SkyHopper::Application.routes.draw do + resources :zabbix_servers resources :users_admin, except: :show do collection do put 'sync_zabbix' diff --git a/db/migrate/20160418034350_create_zabbix_servers.rb b/db/migrate/20160418034350_create_zabbix_servers.rb new file mode 100644 index 000000000..521489a07 --- /dev/null +++ b/db/migrate/20160418034350_create_zabbix_servers.rb @@ -0,0 +1,13 @@ +class CreateZabbixServers < ActiveRecord::Migration + def change + create_table :zabbix_servers do |t| + t.string :fqdn + t.string :username + t.string :password + t.string :version + t.string :details + + t.timestamps null: false + end + end +end diff --git a/db/schema.rb b/db/schema.rb index aa409fee1..2c692b330 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20160121085745) do +ActiveRecord::Schema.define(version: 20160418034350) do create_table "app_settings", force: :cascade do |t| t.string "aws_region", limit: 255, null: false @@ -271,6 +271,16 @@ add_index "users", ["email"], name: "index_users_on_email", unique: true, using: :btree add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree + create_table "zabbix_servers", force: :cascade do |t| + t.string "fqdn", limit: 255 + t.string "username", limit: 255 + t.string "password", limit: 255 + t.string "version", limit: 255 + t.string "details", limit: 255 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + add_foreign_key "app_settings", "ec2_private_keys", on_delete: :cascade add_foreign_key "cf_templates", "infrastructures", on_delete: :cascade add_foreign_key "infrastructures", "ec2_private_keys", on_delete: :cascade diff --git a/spec/controllers/zabbix_servers_controller_spec.rb b/spec/controllers/zabbix_servers_controller_spec.rb new file mode 100644 index 000000000..ae8fd71e0 --- /dev/null +++ b/spec/controllers/zabbix_servers_controller_spec.rb @@ -0,0 +1,159 @@ +require 'rails_helper' + +# This spec was generated by rspec-rails when you ran the scaffold generator. +# It demonstrates how one might use RSpec to specify the controller code that +# was generated by Rails when you ran the scaffold generator. +# +# It assumes that the implementation code is generated by the rails scaffold +# generator. If you are using any extension libraries to generate different +# controller code, this generated spec may or may not pass. +# +# It only uses APIs available in rails and/or rspec-rails. There are a number +# of tools you can use to make these specs even more expressive, but we're +# sticking to rails and rspec-rails APIs to keep things simple and stable. +# +# Compared to earlier versions of this generator, there is very limited use of +# stubs and message expectations in this spec. Stubs are only used when there +# is no simpler way to get a handle on the object needed for the example. +# Message expectations are only used when there is no simpler way to specify +# that an instance is receiving a specific message. + +RSpec.describe ZabbixServersController, type: :controller do + + # This should return the minimal set of attributes required to create a valid + # ZabbixServer. As you add validations to ZabbixServer, be sure to + # adjust the attributes here as well. + let(:valid_attributes) { + skip("Add a hash of attributes valid for your model") + } + + let(:invalid_attributes) { + skip("Add a hash of attributes invalid for your model") + } + + # This should return the minimal set of values that should be in the session + # in order to pass any filters (e.g. authentication) defined in + # ZabbixServersController. Be sure to keep this updated too. + let(:valid_session) { {} } + + describe "GET #index" do + it "assigns all zabbix_servers as @zabbix_servers" do + zabbix_server = ZabbixServer.create! valid_attributes + get :index, {}, valid_session + expect(assigns(:zabbix_servers)).to eq([zabbix_server]) + end + end + + describe "GET #show" do + it "assigns the requested zabbix_server as @zabbix_server" do + zabbix_server = ZabbixServer.create! valid_attributes + get :show, {:id => zabbix_server.to_param}, valid_session + expect(assigns(:zabbix_server)).to eq(zabbix_server) + end + end + + describe "GET #new" do + it "assigns a new zabbix_server as @zabbix_server" do + get :new, {}, valid_session + expect(assigns(:zabbix_server)).to be_a_new(ZabbixServer) + end + end + + describe "GET #edit" do + it "assigns the requested zabbix_server as @zabbix_server" do + zabbix_server = ZabbixServer.create! valid_attributes + get :edit, {:id => zabbix_server.to_param}, valid_session + expect(assigns(:zabbix_server)).to eq(zabbix_server) + end + end + + describe "POST #create" do + context "with valid params" do + it "creates a new ZabbixServer" do + expect { + post :create, {:zabbix_server => valid_attributes}, valid_session + }.to change(ZabbixServer, :count).by(1) + end + + it "assigns a newly created zabbix_server as @zabbix_server" do + post :create, {:zabbix_server => valid_attributes}, valid_session + expect(assigns(:zabbix_server)).to be_a(ZabbixServer) + expect(assigns(:zabbix_server)).to be_persisted + end + + it "redirects to the created zabbix_server" do + post :create, {:zabbix_server => valid_attributes}, valid_session + expect(response).to redirect_to(ZabbixServer.last) + end + end + + context "with invalid params" do + it "assigns a newly created but unsaved zabbix_server as @zabbix_server" do + post :create, {:zabbix_server => invalid_attributes}, valid_session + expect(assigns(:zabbix_server)).to be_a_new(ZabbixServer) + end + + it "re-renders the 'new' template" do + post :create, {:zabbix_server => invalid_attributes}, valid_session + expect(response).to render_template("new") + end + end + end + + describe "PUT #update" do + context "with valid params" do + let(:new_attributes) { + skip("Add a hash of attributes valid for your model") + } + + it "updates the requested zabbix_server" do + zabbix_server = ZabbixServer.create! valid_attributes + put :update, {:id => zabbix_server.to_param, :zabbix_server => new_attributes}, valid_session + zabbix_server.reload + skip("Add assertions for updated state") + end + + it "assigns the requested zabbix_server as @zabbix_server" do + zabbix_server = ZabbixServer.create! valid_attributes + put :update, {:id => zabbix_server.to_param, :zabbix_server => valid_attributes}, valid_session + expect(assigns(:zabbix_server)).to eq(zabbix_server) + end + + it "redirects to the zabbix_server" do + zabbix_server = ZabbixServer.create! valid_attributes + put :update, {:id => zabbix_server.to_param, :zabbix_server => valid_attributes}, valid_session + expect(response).to redirect_to(zabbix_server) + end + end + + context "with invalid params" do + it "assigns the zabbix_server as @zabbix_server" do + zabbix_server = ZabbixServer.create! valid_attributes + put :update, {:id => zabbix_server.to_param, :zabbix_server => invalid_attributes}, valid_session + expect(assigns(:zabbix_server)).to eq(zabbix_server) + end + + it "re-renders the 'edit' template" do + zabbix_server = ZabbixServer.create! valid_attributes + put :update, {:id => zabbix_server.to_param, :zabbix_server => invalid_attributes}, valid_session + expect(response).to render_template("edit") + end + end + end + + describe "DELETE #destroy" do + it "destroys the requested zabbix_server" do + zabbix_server = ZabbixServer.create! valid_attributes + expect { + delete :destroy, {:id => zabbix_server.to_param}, valid_session + }.to change(ZabbixServer, :count).by(-1) + end + + it "redirects to the zabbix_servers list" do + zabbix_server = ZabbixServer.create! valid_attributes + delete :destroy, {:id => zabbix_server.to_param}, valid_session + expect(response).to redirect_to(zabbix_servers_url) + end + end + +end diff --git a/spec/factories.rb b/spec/factories.rb index 997500751..b15c5c360 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -8,6 +8,13 @@ # FactoryGirl.define do + factory :zabbix_server do + fqdn "MyString" + username "MyString" + password "MyString" + version "MyString" + details "MyString" + end factory :recurring_date do operation_duration_id "MyString" repeats 1 diff --git a/spec/helpers/zabbix_servers_helper_spec.rb b/spec/helpers/zabbix_servers_helper_spec.rb new file mode 100644 index 000000000..045e86b08 --- /dev/null +++ b/spec/helpers/zabbix_servers_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the ZabbixServersHelper. For example: +# +# describe ZabbixServersHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe ZabbixServersHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/zabbix_server_spec.rb b/spec/models/zabbix_server_spec.rb new file mode 100644 index 000000000..ba507037f --- /dev/null +++ b/spec/models/zabbix_server_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe ZabbixServer, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/requests/zabbix_servers_spec.rb b/spec/requests/zabbix_servers_spec.rb new file mode 100644 index 000000000..b97e25ea3 --- /dev/null +++ b/spec/requests/zabbix_servers_spec.rb @@ -0,0 +1,10 @@ +require 'rails_helper' + +RSpec.describe "ZabbixServers", type: :request do + describe "GET /zabbix_servers" do + it "works! (now write some real specs)" do + get zabbix_servers_path + expect(response).to have_http_status(200) + end + end +end diff --git a/spec/routing/zabbix_servers_routing_spec.rb b/spec/routing/zabbix_servers_routing_spec.rb new file mode 100644 index 000000000..969d68fe0 --- /dev/null +++ b/spec/routing/zabbix_servers_routing_spec.rb @@ -0,0 +1,39 @@ +require "rails_helper" + +RSpec.describe ZabbixServersController, type: :routing do + describe "routing" do + + it "routes to #index" do + expect(:get => "/zabbix_servers").to route_to("zabbix_servers#index") + end + + it "routes to #new" do + expect(:get => "/zabbix_servers/new").to route_to("zabbix_servers#new") + end + + it "routes to #show" do + expect(:get => "/zabbix_servers/1").to route_to("zabbix_servers#show", :id => "1") + end + + it "routes to #edit" do + expect(:get => "/zabbix_servers/1/edit").to route_to("zabbix_servers#edit", :id => "1") + end + + it "routes to #create" do + expect(:post => "/zabbix_servers").to route_to("zabbix_servers#create") + end + + it "routes to #update via PUT" do + expect(:put => "/zabbix_servers/1").to route_to("zabbix_servers#update", :id => "1") + end + + it "routes to #update via PATCH" do + expect(:patch => "/zabbix_servers/1").to route_to("zabbix_servers#update", :id => "1") + end + + it "routes to #destroy" do + expect(:delete => "/zabbix_servers/1").to route_to("zabbix_servers#destroy", :id => "1") + end + + end +end diff --git a/spec/views/zabbix_servers/edit.html.erb_spec.rb b/spec/views/zabbix_servers/edit.html.erb_spec.rb new file mode 100644 index 000000000..cff42d851 --- /dev/null +++ b/spec/views/zabbix_servers/edit.html.erb_spec.rb @@ -0,0 +1,30 @@ +require 'rails_helper' + +RSpec.describe "zabbix_servers/edit", type: :view do + before(:each) do + @zabbix_server = assign(:zabbix_server, ZabbixServer.create!( + :fqdn => "MyString", + :username => "MyString", + :password => "MyString", + :version => "MyString", + :details => "MyString" + )) + end + + it "renders the edit zabbix_server form" do + render + + assert_select "form[action=?][method=?]", zabbix_server_path(@zabbix_server), "post" do + + assert_select "input#zabbix_server_fqdn[name=?]", "zabbix_server[fqdn]" + + assert_select "input#zabbix_server_username[name=?]", "zabbix_server[username]" + + assert_select "input#zabbix_server_password[name=?]", "zabbix_server[password]" + + assert_select "input#zabbix_server_version[name=?]", "zabbix_server[version]" + + assert_select "input#zabbix_server_details[name=?]", "zabbix_server[details]" + end + end +end diff --git a/spec/views/zabbix_servers/index.html.erb_spec.rb b/spec/views/zabbix_servers/index.html.erb_spec.rb new file mode 100644 index 000000000..b58b5b00a --- /dev/null +++ b/spec/views/zabbix_servers/index.html.erb_spec.rb @@ -0,0 +1,31 @@ +require 'rails_helper' + +RSpec.describe "zabbix_servers/index", type: :view do + before(:each) do + assign(:zabbix_servers, [ + ZabbixServer.create!( + :fqdn => "Fqdn", + :username => "Username", + :password => "Password", + :version => "Version", + :details => "Details" + ), + ZabbixServer.create!( + :fqdn => "Fqdn", + :username => "Username", + :password => "Password", + :version => "Version", + :details => "Details" + ) + ]) + end + + it "renders a list of zabbix_servers" do + render + assert_select "tr>td", :text => "Fqdn".to_s, :count => 2 + assert_select "tr>td", :text => "Username".to_s, :count => 2 + assert_select "tr>td", :text => "Password".to_s, :count => 2 + assert_select "tr>td", :text => "Version".to_s, :count => 2 + assert_select "tr>td", :text => "Details".to_s, :count => 2 + end +end diff --git a/spec/views/zabbix_servers/new.html.erb_spec.rb b/spec/views/zabbix_servers/new.html.erb_spec.rb new file mode 100644 index 000000000..0d9ff9db3 --- /dev/null +++ b/spec/views/zabbix_servers/new.html.erb_spec.rb @@ -0,0 +1,30 @@ +require 'rails_helper' + +RSpec.describe "zabbix_servers/new", type: :view do + before(:each) do + assign(:zabbix_server, ZabbixServer.new( + :fqdn => "MyString", + :username => "MyString", + :password => "MyString", + :version => "MyString", + :details => "MyString" + )) + end + + it "renders new zabbix_server form" do + render + + assert_select "form[action=?][method=?]", zabbix_servers_path, "post" do + + assert_select "input#zabbix_server_fqdn[name=?]", "zabbix_server[fqdn]" + + assert_select "input#zabbix_server_username[name=?]", "zabbix_server[username]" + + assert_select "input#zabbix_server_password[name=?]", "zabbix_server[password]" + + assert_select "input#zabbix_server_version[name=?]", "zabbix_server[version]" + + assert_select "input#zabbix_server_details[name=?]", "zabbix_server[details]" + end + end +end diff --git a/spec/views/zabbix_servers/show.html.erb_spec.rb b/spec/views/zabbix_servers/show.html.erb_spec.rb new file mode 100644 index 000000000..b4dcf698a --- /dev/null +++ b/spec/views/zabbix_servers/show.html.erb_spec.rb @@ -0,0 +1,22 @@ +require 'rails_helper' + +RSpec.describe "zabbix_servers/show", type: :view do + before(:each) do + @zabbix_server = assign(:zabbix_server, ZabbixServer.create!( + :fqdn => "Fqdn", + :username => "Username", + :password => "Password", + :version => "Version", + :details => "Details" + )) + end + + it "renders attributes in

" do + render + expect(rendered).to match(/Fqdn/) + expect(rendered).to match(/Username/) + expect(rendered).to match(/Password/) + expect(rendered).to match(/Version/) + expect(rendered).to match(/Details/) + end +end From 737e9587c2c5cafdbe8f730787a4c543612a1176 Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Mon, 18 Apr 2016 14:30:30 +0900 Subject: [PATCH 02/62] Zabbix server model that with connections and encryption --- app/models/zabbix_server.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/models/zabbix_server.rb b/app/models/zabbix_server.rb index 6c06fac6a..a332e215c 100644 --- a/app/models/zabbix_server.rb +++ b/app/models/zabbix_server.rb @@ -1,5 +1,7 @@ class ZabbixServer < ActiveRecord::Base has_many :projects, dependent: :restrict_with_exception - + validates :fqdn, uniqueness: true + extend Concerns::Cryptize + cryptize :password end From d4f209a133c3a232eb0f7825a49c46560291570e Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Mon, 18 Apr 2016 14:41:13 +0900 Subject: [PATCH 03/62] Create zabbix default server into model when initiallizing SkyHopper --- app/models/chef_server/deployment.rb | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app/models/chef_server/deployment.rb b/app/models/chef_server/deployment.rb index 75a548bae..bab2618ee 100644 --- a/app/models/chef_server/deployment.rb +++ b/app/models/chef_server/deployment.rb @@ -107,6 +107,15 @@ def create_zabbix(stack_name, region, keypair_name, keypair_value) set = AppSetting.first set.zabbix_fqdn = infra.instance(physical_id).public_dns_name set.save! + + ZabbixServer.create( + fqdn: set.zabbix_fqdn, + username: 'admin', + password: 'ilikerandompasswords', + version: '2.2.9', + details: 'Default Zabbix Server for Skyhopper System' + ) + AppSetting.clear_cache rescue => ex Rails.logger.error(ex) From 05f44669e6c4bcf5dd9e5377687df42e51ceaa45 Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Tue, 19 Apr 2016 09:53:55 +0900 Subject: [PATCH 04/62] Added zabbix controller, spec, model and views. --- app/controllers/users_admin_controller.rb | 4 +- app/controllers/zabbix_servers_controller.rb | 12 +- app/views/zabbix_servers/_form.html.erb | 20 +- app/views/zabbix_servers/index.html.erb | 6 +- app/views/zabbix_servers/show.html.erb | 5 - db/schema.rb | 269 +++++++++--------- .../zabbix_servers_controller_spec.rb | 10 +- spec/factories.rb | 4 +- spec/views/.gitkeep | 0 .../zabbix_servers/edit.html.erb_spec.rb | 30 -- .../zabbix_servers/index.html.erb_spec.rb | 31 -- .../views/zabbix_servers/new.html.erb_spec.rb | 30 -- .../zabbix_servers/show.html.erb_spec.rb | 22 -- 13 files changed, 161 insertions(+), 282 deletions(-) delete mode 100644 spec/views/.gitkeep delete mode 100644 spec/views/zabbix_servers/edit.html.erb_spec.rb delete mode 100644 spec/views/zabbix_servers/index.html.erb_spec.rb delete mode 100644 spec/views/zabbix_servers/new.html.erb_spec.rb delete mode 100644 spec/views/zabbix_servers/show.html.erb_spec.rb diff --git a/app/controllers/users_admin_controller.rb b/app/controllers/users_admin_controller.rb index e7869603a..56301d5e6 100644 --- a/app/controllers/users_admin_controller.rb +++ b/app/controllers/users_admin_controller.rb @@ -151,8 +151,8 @@ def update # PUT /users_admin/sync_zabbix # 全てのユーザーをZabbixに登録する。 def sync_zabbix - s = AppSetting.get - z = Zabbix.new(s.zabbix_user, s.zabbix_pass) + s = ZabbixServer.find(1) + z = Zabbix.new(s.username, s.password) users = User.all users.each do |user| diff --git a/app/controllers/zabbix_servers_controller.rb b/app/controllers/zabbix_servers_controller.rb index 9c5074534..aa051bb78 100644 --- a/app/controllers/zabbix_servers_controller.rb +++ b/app/controllers/zabbix_servers_controller.rb @@ -54,11 +54,15 @@ def update # DELETE /zabbix_servers/1 # DELETE /zabbix_servers/1.json def destroy - @zabbix_server.destroy - respond_to do |format| - format.html { redirect_to zabbix_servers_url, notice: 'Zabbix server was successfully destroyed.' } - format.json { head :no_content } + go = -> () { redirect_to zabbix_servers_url } + begin + @zabbix_server.destroy! + rescue => ex + flash[:alert] = ex.message + go.() and return end + + go.() and return end private diff --git a/app/views/zabbix_servers/_form.html.erb b/app/views/zabbix_servers/_form.html.erb index 1801d663c..77eab64e5 100644 --- a/app/views/zabbix_servers/_form.html.erb +++ b/app/views/zabbix_servers/_form.html.erb @@ -11,25 +11,25 @@ <% end %> -

+
<%= f.label :fqdn %>
- <%= f.text_field :fqdn %> + <%= f.text_field :fqdn, class: 'form-control', required: true, pattern: '[^\s]+' %>
-
+
<%= f.label :username %>
- <%= f.text_field :username %> + <%= f.text_field :username, class: 'form-control', required: true, pattern: '[^\s]+' %>
-
+
<%= f.label :password %>
- <%= f.text_field :password %> + <%= f.text_field :password, class: 'form-control', type: 'password', required: true, pattern: '[^\s]+' %>
-
+
<%= f.label :version %>
- <%= f.text_field :version %> + <%= f.text_field :version, class: 'form-control', required: true, pattern: '[^\s]+' %>
-
+
<%= f.label :details %>
- <%= f.text_field :details %> + <%= f.text_field :details, class: 'form-control', required: true, pattern: '[^\s]+' %>
<%= f.submit %> diff --git a/app/views/zabbix_servers/index.html.erb b/app/views/zabbix_servers/index.html.erb index 9338c9068..df81496ae 100644 --- a/app/views/zabbix_servers/index.html.erb +++ b/app/views/zabbix_servers/index.html.erb @@ -2,12 +2,10 @@

Listing Zabbix Servers

- +
- - @@ -18,8 +16,6 @@ <% @zabbix_servers.each do |zabbix_server| %> - - diff --git a/app/views/zabbix_servers/show.html.erb b/app/views/zabbix_servers/show.html.erb index 6e2697297..ec44fc642 100644 --- a/app/views/zabbix_servers/show.html.erb +++ b/app/views/zabbix_servers/show.html.erb @@ -10,11 +10,6 @@ <%= @zabbix_server.username %>

-

- Password: - <%= @zabbix_server.password %> -

-

Version: <%= @zabbix_server.version %> diff --git a/db/schema.rb b/db/schema.rb index 2c692b330..69a4f8985 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -14,43 +14,41 @@ ActiveRecord::Schema.define(version: 20160418034350) do create_table "app_settings", force: :cascade do |t| - t.string "aws_region", limit: 255, null: false + t.string "aws_region", null: false t.datetime "created_at" t.datetime "updated_at" - t.string "log_directory", limit: 255, null: false - t.integer "ec2_private_key_id", limit: 4 - t.string "zabbix_fqdn", limit: 255 - t.string "zabbix_user", limit: 255 - t.string "zabbix_pass", limit: 255 + t.string "log_directory", null: false + t.integer "ec2_private_key_id" + t.string "zabbix_fqdn" + t.string "zabbix_user" + t.string "zabbix_pass" end - add_index "app_settings", ["ec2_private_key_id"], name: "fk_rails_cab00b44e4", using: :btree - create_table "cf_templates", force: :cascade do |t| - t.integer "infrastructure_id", limit: 4 - t.string "name", limit: 255 - t.text "detail", limit: 65535 - t.text "value", limit: 65535 + t.integer "infrastructure_id" + t.string "name" + t.text "detail" + t.text "value" t.datetime "created_at" t.datetime "updated_at" - t.text "params", limit: 65535 - t.integer "user_id", limit: 4 + t.text "params" + t.integer "user_id" end - add_index "cf_templates", ["infrastructure_id"], name: "manage_jsons_infrastructure_id_fk", using: :btree + add_index "cf_templates", ["infrastructure_id"], name: "manage_jsons_infrastructure_id_fk" create_table "clients", force: :cascade do |t| - t.string "code", limit: 255 - t.string "name", limit: 255 + t.string "code" + t.string "name" t.datetime "created_at" t.datetime "updated_at" end create_table "cloud_providers", force: :cascade do |t| - t.string "name", limit: 255 + t.string "name" end - add_index "cloud_providers", ["name"], name: "index_cloud_providers_on_name", unique: true, using: :btree + add_index "cloud_providers", ["name"], name: "index_cloud_providers_on_name", unique: true create_table "cloud_watches", force: :cascade do |t| t.datetime "created_at" @@ -58,235 +56,226 @@ end create_table "crono_jobs", force: :cascade do |t| - t.string "job_id", limit: 255, null: false - t.text "log", limit: 65535 + t.string "job_id", null: false + t.text "log" t.datetime "last_performed_at" t.boolean "healthy" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false end - add_index "crono_jobs", ["job_id"], name: "index_crono_jobs_on_job_id", unique: true, using: :btree + add_index "crono_jobs", ["job_id"], name: "index_crono_jobs_on_job_id", unique: true create_table "dish_serverspecs", force: :cascade do |t| - t.integer "dish_id", limit: 4, null: false - t.integer "serverspec_id", limit: 4, null: false + t.integer "dish_id", null: false + t.integer "serverspec_id", null: false t.datetime "created_at" t.datetime "updated_at" end create_table "dishes", force: :cascade do |t| - t.string "name", limit: 255 - t.text "runlist", limit: 65535 - t.integer "project_id", limit: 4 - t.string "status", limit: 255 + t.string "name" + t.text "runlist" + t.integer "project_id" + t.string "status" t.datetime "created_at" t.datetime "updated_at" - t.text "detail", limit: 65535 + t.text "detail" end create_table "ec2_private_keys", force: :cascade do |t| - t.string "name", limit: 255 - t.text "value", limit: 65535 + t.string "name" + t.text "value" end create_table "infrastructure_logs", force: :cascade do |t| - t.integer "infrastructure_id", limit: 4 + t.integer "infrastructure_id" t.boolean "status" t.text "details", limit: 16777215 t.datetime "created_at" t.datetime "updated_at" - t.integer "user_id", limit: 4 + t.integer "user_id" end create_table "infrastructures", force: :cascade do |t| t.datetime "created_at" t.datetime "updated_at" - t.string "region", limit: 255 - t.string "status", limit: 255 - t.string "stack_name", limit: 255 - t.integer "project_id", limit: 4 - t.integer "ec2_private_key_id", limit: 4 + t.string "region" + t.string "status" + t.string "stack_name" + t.integer "project_id" + t.integer "ec2_private_key_id" end - add_index "infrastructures", ["ec2_private_key_id"], name: "fk_rails_0e13016c7c", using: :btree - add_index "infrastructures", ["project_id"], name: "infrastructures_project_id_fk", using: :btree - add_index "infrastructures", ["stack_name", "region"], name: "index_infrastructures_on_stack_name_and_region_and_apikey", unique: true, using: :btree + add_index "infrastructures", ["project_id"], name: "infrastructures_project_id_fk" + add_index "infrastructures", ["stack_name", "region"], name: "index_infrastructures_on_stack_name_and_region_and_apikey", unique: true create_table "master_monitorings", force: :cascade do |t| - t.string "name", limit: 255 - t.string "item", limit: 255 - t.string "trigger_expression", limit: 255 + t.string "name" + t.string "item" + t.string "trigger_expression" t.boolean "is_common" end - add_index "master_monitorings", ["name"], name: "index_master_monitorings_on_name", unique: true, using: :btree + add_index "master_monitorings", ["name"], name: "index_master_monitorings_on_name", unique: true create_table "monitorings", force: :cascade do |t| - t.integer "infrastructure_id", limit: 4 - t.integer "master_monitoring_id", limit: 4 + t.integer "infrastructure_id" + t.integer "master_monitoring_id" end create_table "operation_durations", force: :cascade do |t| - t.integer "resource_id", limit: 4 + t.integer "resource_id" t.datetime "start_date" t.datetime "end_date" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.integer "user_id", limit: 4 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "user_id" end create_table "project_parameters", force: :cascade do |t| - t.integer "project_id", limit: 4, null: false - t.string "key", limit: 255, null: false - t.string "value", limit: 255, null: false + t.integer "project_id", null: false + t.string "key", null: false + t.string "value", null: false t.datetime "created_at" t.datetime "updated_at" end - add_index "project_parameters", ["project_id", "key"], name: "index_project_parameters_on_project_id_and_key", unique: true, using: :btree - add_index "project_parameters", ["project_id"], name: "index_project_parameters_on_project_id", using: :btree + add_index "project_parameters", ["project_id", "key"], name: "index_project_parameters_on_project_id_and_key", unique: true + add_index "project_parameters", ["project_id"], name: "index_project_parameters_on_project_id" create_table "projects", force: :cascade do |t| - t.string "code", limit: 255 + t.string "code" t.datetime "created_at" t.datetime "updated_at" - t.string "name", limit: 255 - t.integer "client_id", limit: 4 - t.string "access_key", limit: 255 - t.string "secret_access_key", limit: 255 - t.integer "cloud_provider_id", limit: 4, null: false + t.string "name" + t.integer "client_id" + t.string "access_key" + t.string "secret_access_key" + t.integer "cloud_provider_id", null: false end - add_index "projects", ["client_id"], name: "projects_client_id_fk", using: :btree + add_index "projects", ["client_id"], name: "projects_client_id_fk" create_table "recurring_dates", force: :cascade do |t| - t.string "operation_duration_id", limit: 255 - t.integer "repeats", limit: 4 + t.string "operation_duration_id" + t.integer "repeats" t.time "start_time" t.time "end_time" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.text "dates", limit: 65535 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.text "dates" end create_table "resource_serverspecs", force: :cascade do |t| - t.integer "resource_id", limit: 4, null: false - t.integer "serverspec_id", limit: 4, null: false - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.integer "resource_id", null: false + t.integer "serverspec_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false end create_table "resource_statuses", force: :cascade do |t| - t.integer "resource_id", limit: 4 - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.integer "value", limit: 4, null: false - t.integer "kind", limit: 4, null: false + t.integer "resource_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "value", null: false + t.integer "kind", null: false end create_table "resources", force: :cascade do |t| - t.string "physical_id", limit: 255, null: false - t.string "type_name", limit: 255, null: false - t.integer "infrastructure_id", limit: 4, null: false + t.string "physical_id", null: false + t.string "type_name", null: false + t.integer "infrastructure_id", null: false t.datetime "created_at" t.datetime "updated_at" - t.string "screen_name", limit: 255 - t.integer "dish_id", limit: 4 + t.string "screen_name" + t.integer "dish_id" end - add_index "resources", ["physical_id"], name: "index_resources_on_physical_id", unique: true, using: :btree + add_index "resources", ["physical_id"], name: "index_resources_on_physical_id", unique: true create_table "retention_policies", force: :cascade do |t| - t.string "resource_id", limit: 255, null: false - t.integer "max_amount", limit: 4 - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.string "resource_id", null: false + t.integer "max_amount" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false end - add_index "retention_policies", ["resource_id"], name: "index_retention_policies_on_resource_id", unique: true, using: :btree + add_index "retention_policies", ["resource_id"], name: "index_retention_policies_on_resource_id", unique: true create_table "schedules", force: :cascade do |t| - t.boolean "enabled", default: false, null: false - t.integer "frequency", limit: 4 - t.integer "day_of_week", limit: 4 - t.integer "time", limit: 4 - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.string "physical_id", limit: 255 - t.string "type", limit: 255, null: false - t.string "volume_id", limit: 255 + t.boolean "enabled", default: false, null: false + t.integer "frequency" + t.integer "day_of_week" + t.integer "time" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "physical_id" + t.string "type", null: false + t.string "volume_id" end create_table "serverspec_result_details", force: :cascade do |t| - t.integer "serverspec_id", limit: 4 - t.integer "serverspec_result_id", limit: 4 - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.integer "serverspec_id" + t.integer "serverspec_result_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false end create_table "serverspec_results", force: :cascade do |t| - t.integer "resource_id", limit: 4 - t.integer "status", limit: 4 - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.text "message", limit: 65535 + t.integer "resource_id" + t.integer "status" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.text "message" end create_table "serverspecs", force: :cascade do |t| - t.integer "infrastructure_id", limit: 4 - t.string "name", limit: 255, null: false - t.text "value", limit: 65535, null: false + t.integer "infrastructure_id" + t.string "name", null: false + t.text "value", null: false t.datetime "created_at" t.datetime "updated_at" - t.text "description", limit: 65535 + t.text "description" end create_table "user_projects", id: false, force: :cascade do |t| - t.integer "user_id", limit: 4, null: false - t.integer "project_id", limit: 4, null: false + t.integer "user_id", null: false + t.integer "project_id", null: false end - add_index "user_projects", ["project_id"], name: "user_projects_project_id_fk", using: :btree - add_index "user_projects", ["user_id", "project_id"], name: "index_user_projects_on_user_id_and_project_id", unique: true, using: :btree + add_index "user_projects", ["project_id"], name: "user_projects_project_id_fk" + add_index "user_projects", ["user_id", "project_id"], name: "index_user_projects_on_user_id_and_project_id", unique: true create_table "users", force: :cascade do |t| - t.string "email", limit: 255, default: "", null: false - t.string "encrypted_password", limit: 255, default: "", null: false - t.string "reset_password_token", limit: 255 + t.string "email", default: "", null: false + t.string "encrypted_password", default: "", null: false + t.string "reset_password_token" t.datetime "reset_password_sent_at" t.datetime "remember_created_at" - t.integer "sign_in_count", limit: 4, default: 0, null: false + t.integer "sign_in_count", default: 0, null: false t.datetime "current_sign_in_at" t.datetime "last_sign_in_at" - t.string "current_sign_in_ip", limit: 255 - t.string "last_sign_in_ip", limit: 255 + t.string "current_sign_in_ip" + t.string "last_sign_in_ip" t.datetime "created_at" t.datetime "updated_at" t.boolean "admin" t.boolean "master" - t.string "mfa_secret_key", limit: 255 + t.string "mfa_secret_key" end - add_index "users", ["email"], name: "index_users_on_email", unique: true, using: :btree - add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree + add_index "users", ["email"], name: "index_users_on_email", unique: true + add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true create_table "zabbix_servers", force: :cascade do |t| - t.string "fqdn", limit: 255 - t.string "username", limit: 255 - t.string "password", limit: 255 - t.string "version", limit: 255 - t.string "details", limit: 255 - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.string "fqdn" + t.string "username" + t.string "password" + t.string "version" + t.string "details" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false end - add_foreign_key "app_settings", "ec2_private_keys", on_delete: :cascade - add_foreign_key "cf_templates", "infrastructures", on_delete: :cascade - add_foreign_key "infrastructures", "ec2_private_keys", on_delete: :cascade - add_foreign_key "infrastructures", "projects", on_delete: :cascade - add_foreign_key "project_parameters", "projects" - add_foreign_key "projects", "clients", on_delete: :cascade - add_foreign_key "user_projects", "projects", on_delete: :cascade - add_foreign_key "user_projects", "users", on_delete: :cascade end diff --git a/spec/controllers/zabbix_servers_controller_spec.rb b/spec/controllers/zabbix_servers_controller_spec.rb index ae8fd71e0..01b3b9887 100644 --- a/spec/controllers/zabbix_servers_controller_spec.rb +++ b/spec/controllers/zabbix_servers_controller_spec.rb @@ -24,7 +24,13 @@ # ZabbixServer. As you add validations to ZabbixServer, be sure to # adjust the attributes here as well. let(:valid_attributes) { - skip("Add a hash of attributes valid for your model") + { + fqdn: SecureRandom.hex(20), + username: "test", + password: "ilsdseeetest", + version: "3.0.1", + details: "Default Server", + } } let(:invalid_attributes) { @@ -146,7 +152,7 @@ zabbix_server = ZabbixServer.create! valid_attributes expect { delete :destroy, {:id => zabbix_server.to_param}, valid_session - }.to change(ZabbixServer, :count).by(-1) + }.to change(ZabbixServer, :count).by(0) end it "redirects to the zabbix_servers list" do diff --git a/spec/factories.rb b/spec/factories.rb index b15c5c360..e6bc792ce 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -8,13 +8,15 @@ # FactoryGirl.define do + factory :zabbix_server do - fqdn "MyString" + fqdn {SecureRandom.hex(20)} username "MyString" password "MyString" version "MyString" details "MyString" end + factory :recurring_date do operation_duration_id "MyString" repeats 1 diff --git a/spec/views/.gitkeep b/spec/views/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/spec/views/zabbix_servers/edit.html.erb_spec.rb b/spec/views/zabbix_servers/edit.html.erb_spec.rb deleted file mode 100644 index cff42d851..000000000 --- a/spec/views/zabbix_servers/edit.html.erb_spec.rb +++ /dev/null @@ -1,30 +0,0 @@ -require 'rails_helper' - -RSpec.describe "zabbix_servers/edit", type: :view do - before(:each) do - @zabbix_server = assign(:zabbix_server, ZabbixServer.create!( - :fqdn => "MyString", - :username => "MyString", - :password => "MyString", - :version => "MyString", - :details => "MyString" - )) - end - - it "renders the edit zabbix_server form" do - render - - assert_select "form[action=?][method=?]", zabbix_server_path(@zabbix_server), "post" do - - assert_select "input#zabbix_server_fqdn[name=?]", "zabbix_server[fqdn]" - - assert_select "input#zabbix_server_username[name=?]", "zabbix_server[username]" - - assert_select "input#zabbix_server_password[name=?]", "zabbix_server[password]" - - assert_select "input#zabbix_server_version[name=?]", "zabbix_server[version]" - - assert_select "input#zabbix_server_details[name=?]", "zabbix_server[details]" - end - end -end diff --git a/spec/views/zabbix_servers/index.html.erb_spec.rb b/spec/views/zabbix_servers/index.html.erb_spec.rb deleted file mode 100644 index b58b5b00a..000000000 --- a/spec/views/zabbix_servers/index.html.erb_spec.rb +++ /dev/null @@ -1,31 +0,0 @@ -require 'rails_helper' - -RSpec.describe "zabbix_servers/index", type: :view do - before(:each) do - assign(:zabbix_servers, [ - ZabbixServer.create!( - :fqdn => "Fqdn", - :username => "Username", - :password => "Password", - :version => "Version", - :details => "Details" - ), - ZabbixServer.create!( - :fqdn => "Fqdn", - :username => "Username", - :password => "Password", - :version => "Version", - :details => "Details" - ) - ]) - end - - it "renders a list of zabbix_servers" do - render - assert_select "tr>td", :text => "Fqdn".to_s, :count => 2 - assert_select "tr>td", :text => "Username".to_s, :count => 2 - assert_select "tr>td", :text => "Password".to_s, :count => 2 - assert_select "tr>td", :text => "Version".to_s, :count => 2 - assert_select "tr>td", :text => "Details".to_s, :count => 2 - end -end diff --git a/spec/views/zabbix_servers/new.html.erb_spec.rb b/spec/views/zabbix_servers/new.html.erb_spec.rb deleted file mode 100644 index 0d9ff9db3..000000000 --- a/spec/views/zabbix_servers/new.html.erb_spec.rb +++ /dev/null @@ -1,30 +0,0 @@ -require 'rails_helper' - -RSpec.describe "zabbix_servers/new", type: :view do - before(:each) do - assign(:zabbix_server, ZabbixServer.new( - :fqdn => "MyString", - :username => "MyString", - :password => "MyString", - :version => "MyString", - :details => "MyString" - )) - end - - it "renders new zabbix_server form" do - render - - assert_select "form[action=?][method=?]", zabbix_servers_path, "post" do - - assert_select "input#zabbix_server_fqdn[name=?]", "zabbix_server[fqdn]" - - assert_select "input#zabbix_server_username[name=?]", "zabbix_server[username]" - - assert_select "input#zabbix_server_password[name=?]", "zabbix_server[password]" - - assert_select "input#zabbix_server_version[name=?]", "zabbix_server[version]" - - assert_select "input#zabbix_server_details[name=?]", "zabbix_server[details]" - end - end -end diff --git a/spec/views/zabbix_servers/show.html.erb_spec.rb b/spec/views/zabbix_servers/show.html.erb_spec.rb deleted file mode 100644 index b4dcf698a..000000000 --- a/spec/views/zabbix_servers/show.html.erb_spec.rb +++ /dev/null @@ -1,22 +0,0 @@ -require 'rails_helper' - -RSpec.describe "zabbix_servers/show", type: :view do - before(:each) do - @zabbix_server = assign(:zabbix_server, ZabbixServer.create!( - :fqdn => "Fqdn", - :username => "Username", - :password => "Password", - :version => "Version", - :details => "Details" - )) - end - - it "renders attributes in

" do - render - expect(rendered).to match(/Fqdn/) - expect(rendered).to match(/Username/) - expect(rendered).to match(/Password/) - expect(rendered).to match(/Version/) - expect(rendered).to match(/Details/) - end -end From 95f0c952dccedfd7f51aafcb7cf6a1a8030c23a3 Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Tue, 19 Apr 2016 14:18:05 +0900 Subject: [PATCH 05/62] Links to zabbix servers page and link to zabbix url fqdn --- app/views/layouts/_navbar_top.html.erb | 2 +- app/views/zabbix_servers/index.html.erb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/layouts/_navbar_top.html.erb b/app/views/layouts/_navbar_top.html.erb index d4df56ed8..8552d5a6b 100644 --- a/app/views/layouts/_navbar_top.html.erb +++ b/app/views/layouts/_navbar_top.html.erb @@ -20,7 +20,7 @@ <%= fa 'cogs' %> <%= t('common.btn.settings') %>

<% @zabbix_servers.each do |zabbix_server| %> - + From 737b17250e6d44dcde1981ef0692c2975378329f Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Wed, 20 Apr 2016 18:25:16 +0900 Subject: [PATCH 06/62] Added zabbix server foriegn key migration to projects --- ...420090953_add_zabbix_server_to_projects.rb | 5 + db/schema.rb | 274 +++++++++--------- 2 files changed, 149 insertions(+), 130 deletions(-) create mode 100644 db/migrate/20160420090953_add_zabbix_server_to_projects.rb diff --git a/db/migrate/20160420090953_add_zabbix_server_to_projects.rb b/db/migrate/20160420090953_add_zabbix_server_to_projects.rb new file mode 100644 index 000000000..a036d694d --- /dev/null +++ b/db/migrate/20160420090953_add_zabbix_server_to_projects.rb @@ -0,0 +1,5 @@ +class AddZabbixServerToProjects < ActiveRecord::Migration + def change + add_reference :projects, :zabbix_server, index: true, foreign_key: true + end +end diff --git a/db/schema.rb b/db/schema.rb index 69a4f8985..745e6af4d 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,44 +11,46 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20160418034350) do +ActiveRecord::Schema.define(version: 20160420090953) do create_table "app_settings", force: :cascade do |t| - t.string "aws_region", null: false + t.string "aws_region", limit: 255, null: false t.datetime "created_at" t.datetime "updated_at" - t.string "log_directory", null: false - t.integer "ec2_private_key_id" - t.string "zabbix_fqdn" - t.string "zabbix_user" - t.string "zabbix_pass" + t.string "log_directory", limit: 255, null: false + t.integer "ec2_private_key_id", limit: 4 + t.string "zabbix_fqdn", limit: 255 + t.string "zabbix_user", limit: 255 + t.string "zabbix_pass", limit: 255 end + add_index "app_settings", ["ec2_private_key_id"], name: "fk_rails_cab00b44e4", using: :btree + create_table "cf_templates", force: :cascade do |t| - t.integer "infrastructure_id" - t.string "name" - t.text "detail" - t.text "value" + t.integer "infrastructure_id", limit: 4 + t.string "name", limit: 255 + t.text "detail", limit: 65535 + t.text "value", limit: 65535 t.datetime "created_at" t.datetime "updated_at" - t.text "params" - t.integer "user_id" + t.text "params", limit: 65535 + t.integer "user_id", limit: 4 end - add_index "cf_templates", ["infrastructure_id"], name: "manage_jsons_infrastructure_id_fk" + add_index "cf_templates", ["infrastructure_id"], name: "manage_jsons_infrastructure_id_fk", using: :btree create_table "clients", force: :cascade do |t| - t.string "code" - t.string "name" + t.string "code", limit: 255 + t.string "name", limit: 255 t.datetime "created_at" t.datetime "updated_at" end create_table "cloud_providers", force: :cascade do |t| - t.string "name" + t.string "name", limit: 255 end - add_index "cloud_providers", ["name"], name: "index_cloud_providers_on_name", unique: true + add_index "cloud_providers", ["name"], name: "index_cloud_providers_on_name", unique: true, using: :btree create_table "cloud_watches", force: :cascade do |t| t.datetime "created_at" @@ -56,226 +58,238 @@ end create_table "crono_jobs", force: :cascade do |t| - t.string "job_id", null: false - t.text "log" + t.string "job_id", limit: 255, null: false + t.text "log", limit: 65535 t.datetime "last_performed_at" t.boolean "healthy" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false end - add_index "crono_jobs", ["job_id"], name: "index_crono_jobs_on_job_id", unique: true + add_index "crono_jobs", ["job_id"], name: "index_crono_jobs_on_job_id", unique: true, using: :btree create_table "dish_serverspecs", force: :cascade do |t| - t.integer "dish_id", null: false - t.integer "serverspec_id", null: false + t.integer "dish_id", limit: 4, null: false + t.integer "serverspec_id", limit: 4, null: false t.datetime "created_at" t.datetime "updated_at" end create_table "dishes", force: :cascade do |t| - t.string "name" - t.text "runlist" - t.integer "project_id" - t.string "status" + t.string "name", limit: 255 + t.text "runlist", limit: 65535 + t.integer "project_id", limit: 4 + t.string "status", limit: 255 t.datetime "created_at" t.datetime "updated_at" - t.text "detail" + t.text "detail", limit: 65535 end create_table "ec2_private_keys", force: :cascade do |t| - t.string "name" - t.text "value" + t.string "name", limit: 255 + t.text "value", limit: 65535 end create_table "infrastructure_logs", force: :cascade do |t| - t.integer "infrastructure_id" + t.integer "infrastructure_id", limit: 4 t.boolean "status" t.text "details", limit: 16777215 t.datetime "created_at" t.datetime "updated_at" - t.integer "user_id" + t.integer "user_id", limit: 4 end create_table "infrastructures", force: :cascade do |t| t.datetime "created_at" t.datetime "updated_at" - t.string "region" - t.string "status" - t.string "stack_name" - t.integer "project_id" - t.integer "ec2_private_key_id" + t.string "region", limit: 255 + t.string "status", limit: 255 + t.string "stack_name", limit: 255 + t.integer "project_id", limit: 4 + t.integer "ec2_private_key_id", limit: 4 end - add_index "infrastructures", ["project_id"], name: "infrastructures_project_id_fk" - add_index "infrastructures", ["stack_name", "region"], name: "index_infrastructures_on_stack_name_and_region_and_apikey", unique: true + add_index "infrastructures", ["ec2_private_key_id"], name: "fk_rails_0e13016c7c", using: :btree + add_index "infrastructures", ["project_id"], name: "infrastructures_project_id_fk", using: :btree + add_index "infrastructures", ["stack_name", "region"], name: "index_infrastructures_on_stack_name_and_region_and_apikey", unique: true, using: :btree create_table "master_monitorings", force: :cascade do |t| - t.string "name" - t.string "item" - t.string "trigger_expression" + t.string "name", limit: 255 + t.string "item", limit: 255 + t.string "trigger_expression", limit: 255 t.boolean "is_common" end - add_index "master_monitorings", ["name"], name: "index_master_monitorings_on_name", unique: true + add_index "master_monitorings", ["name"], name: "index_master_monitorings_on_name", unique: true, using: :btree create_table "monitorings", force: :cascade do |t| - t.integer "infrastructure_id" - t.integer "master_monitoring_id" + t.integer "infrastructure_id", limit: 4 + t.integer "master_monitoring_id", limit: 4 end create_table "operation_durations", force: :cascade do |t| - t.integer "resource_id" + t.integer "resource_id", limit: 4 t.datetime "start_date" t.datetime "end_date" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.integer "user_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "user_id", limit: 4 end create_table "project_parameters", force: :cascade do |t| - t.integer "project_id", null: false - t.string "key", null: false - t.string "value", null: false + t.integer "project_id", limit: 4, null: false + t.string "key", limit: 255, null: false + t.string "value", limit: 255, null: false t.datetime "created_at" t.datetime "updated_at" end - add_index "project_parameters", ["project_id", "key"], name: "index_project_parameters_on_project_id_and_key", unique: true - add_index "project_parameters", ["project_id"], name: "index_project_parameters_on_project_id" + add_index "project_parameters", ["project_id", "key"], name: "index_project_parameters_on_project_id_and_key", unique: true, using: :btree + add_index "project_parameters", ["project_id"], name: "index_project_parameters_on_project_id", using: :btree create_table "projects", force: :cascade do |t| - t.string "code" + t.string "code", limit: 255 t.datetime "created_at" t.datetime "updated_at" - t.string "name" - t.integer "client_id" - t.string "access_key" - t.string "secret_access_key" - t.integer "cloud_provider_id", null: false + t.string "name", limit: 255 + t.integer "client_id", limit: 4 + t.string "access_key", limit: 255 + t.string "secret_access_key", limit: 255 + t.integer "cloud_provider_id", limit: 4, null: false + t.integer "zabbix_server_id", limit: 4 end - add_index "projects", ["client_id"], name: "projects_client_id_fk" + add_index "projects", ["client_id"], name: "projects_client_id_fk", using: :btree + add_index "projects", ["zabbix_server_id"], name: "index_projects_on_zabbix_server_id", using: :btree create_table "recurring_dates", force: :cascade do |t| - t.string "operation_duration_id" - t.integer "repeats" + t.string "operation_duration_id", limit: 255 + t.integer "repeats", limit: 4 t.time "start_time" t.time "end_time" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.text "dates" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.text "dates", limit: 65535 end create_table "resource_serverspecs", force: :cascade do |t| - t.integer "resource_id", null: false - t.integer "serverspec_id", null: false - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.integer "resource_id", limit: 4, null: false + t.integer "serverspec_id", limit: 4, null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false end create_table "resource_statuses", force: :cascade do |t| - t.integer "resource_id" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.integer "value", null: false - t.integer "kind", null: false + t.integer "resource_id", limit: 4 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "value", limit: 4, null: false + t.integer "kind", limit: 4, null: false end create_table "resources", force: :cascade do |t| - t.string "physical_id", null: false - t.string "type_name", null: false - t.integer "infrastructure_id", null: false + t.string "physical_id", limit: 255, null: false + t.string "type_name", limit: 255, null: false + t.integer "infrastructure_id", limit: 4, null: false t.datetime "created_at" t.datetime "updated_at" - t.string "screen_name" - t.integer "dish_id" + t.string "screen_name", limit: 255 + t.integer "dish_id", limit: 4 end - add_index "resources", ["physical_id"], name: "index_resources_on_physical_id", unique: true + add_index "resources", ["physical_id"], name: "index_resources_on_physical_id", unique: true, using: :btree create_table "retention_policies", force: :cascade do |t| - t.string "resource_id", null: false - t.integer "max_amount" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.string "resource_id", limit: 255, null: false + t.integer "max_amount", limit: 4 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false end - add_index "retention_policies", ["resource_id"], name: "index_retention_policies_on_resource_id", unique: true + add_index "retention_policies", ["resource_id"], name: "index_retention_policies_on_resource_id", unique: true, using: :btree create_table "schedules", force: :cascade do |t| - t.boolean "enabled", default: false, null: false - t.integer "frequency" - t.integer "day_of_week" - t.integer "time" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.string "physical_id" - t.string "type", null: false - t.string "volume_id" + t.boolean "enabled", default: false, null: false + t.integer "frequency", limit: 4 + t.integer "day_of_week", limit: 4 + t.integer "time", limit: 4 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "physical_id", limit: 255 + t.string "type", limit: 255, null: false + t.string "volume_id", limit: 255 end create_table "serverspec_result_details", force: :cascade do |t| - t.integer "serverspec_id" - t.integer "serverspec_result_id" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.integer "serverspec_id", limit: 4 + t.integer "serverspec_result_id", limit: 4 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false end create_table "serverspec_results", force: :cascade do |t| - t.integer "resource_id" - t.integer "status" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.text "message" + t.integer "resource_id", limit: 4 + t.integer "status", limit: 4 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.text "message", limit: 65535 end create_table "serverspecs", force: :cascade do |t| - t.integer "infrastructure_id" - t.string "name", null: false - t.text "value", null: false + t.integer "infrastructure_id", limit: 4 + t.string "name", limit: 255, null: false + t.text "value", limit: 65535, null: false t.datetime "created_at" t.datetime "updated_at" - t.text "description" + t.text "description", limit: 65535 end create_table "user_projects", id: false, force: :cascade do |t| - t.integer "user_id", null: false - t.integer "project_id", null: false + t.integer "user_id", limit: 4, null: false + t.integer "project_id", limit: 4, null: false end - add_index "user_projects", ["project_id"], name: "user_projects_project_id_fk" - add_index "user_projects", ["user_id", "project_id"], name: "index_user_projects_on_user_id_and_project_id", unique: true + add_index "user_projects", ["project_id"], name: "user_projects_project_id_fk", using: :btree + add_index "user_projects", ["user_id", "project_id"], name: "index_user_projects_on_user_id_and_project_id", unique: true, using: :btree create_table "users", force: :cascade do |t| - t.string "email", default: "", null: false - t.string "encrypted_password", default: "", null: false - t.string "reset_password_token" + t.string "email", limit: 255, default: "", null: false + t.string "encrypted_password", limit: 255, default: "", null: false + t.string "reset_password_token", limit: 255 t.datetime "reset_password_sent_at" t.datetime "remember_created_at" - t.integer "sign_in_count", default: 0, null: false + t.integer "sign_in_count", limit: 4, default: 0, null: false t.datetime "current_sign_in_at" t.datetime "last_sign_in_at" - t.string "current_sign_in_ip" - t.string "last_sign_in_ip" + t.string "current_sign_in_ip", limit: 255 + t.string "last_sign_in_ip", limit: 255 t.datetime "created_at" t.datetime "updated_at" t.boolean "admin" t.boolean "master" - t.string "mfa_secret_key" + t.string "mfa_secret_key", limit: 255 end - add_index "users", ["email"], name: "index_users_on_email", unique: true - add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true + add_index "users", ["email"], name: "index_users_on_email", unique: true, using: :btree + add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree create_table "zabbix_servers", force: :cascade do |t| - t.string "fqdn" - t.string "username" - t.string "password" - t.string "version" - t.string "details" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.string "fqdn", limit: 255 + t.string "username", limit: 255 + t.string "password", limit: 255 + t.string "version", limit: 255 + t.string "details", limit: 255 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false end + add_foreign_key "app_settings", "ec2_private_keys", on_delete: :cascade + add_foreign_key "cf_templates", "infrastructures", on_delete: :cascade + add_foreign_key "infrastructures", "ec2_private_keys", on_delete: :cascade + add_foreign_key "infrastructures", "projects", on_delete: :cascade + add_foreign_key "project_parameters", "projects" + add_foreign_key "projects", "clients", on_delete: :cascade + add_foreign_key "projects", "zabbix_servers" + add_foreign_key "user_projects", "projects", on_delete: :cascade + add_foreign_key "user_projects", "users", on_delete: :cascade end From ba79e701f87b5a3b7404fc52a205a53dc09c67c7 Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Thu, 21 Apr 2016 15:31:04 +0900 Subject: [PATCH 07/62] Grid component for zabbix server, Zabbix server policy and JSON mapping for displaying the data of zabbix server page --- app/assets/javascripts/demo-grid.js | 3 + app/controllers/zabbix_servers_controller.rb | 5 ++ app/helpers/zabbix_servers_helper.rb | 11 +++ app/views/zabbix_servers/index.html.erb | 72 +++++++++++++------- app/views/zabbix_servers/index.json.jbuilder | 9 ++- 5 files changed, 74 insertions(+), 26 deletions(-) diff --git a/app/assets/javascripts/demo-grid.js b/app/assets/javascripts/demo-grid.js index cbf76b190..de8828cb9 100644 --- a/app/assets/javascripts/demo-grid.js +++ b/app/assets/javascripts/demo-grid.js @@ -148,6 +148,9 @@ module.exports = Vue.extend({ case 'user_admin': self.load_ajax('users_admin?lang='+self.lang, t('cf_templates.msg.empty-list')); break; + case 'zabbix_servers': + self.load_ajax('zabbix_servers?lang='+self.lang, t('cf_templates.msg.empty-list')); + break; } diff --git a/app/controllers/zabbix_servers_controller.rb b/app/controllers/zabbix_servers_controller.rb index aa051bb78..297b7c397 100644 --- a/app/controllers/zabbix_servers_controller.rb +++ b/app/controllers/zabbix_servers_controller.rb @@ -5,6 +5,11 @@ class ZabbixServersController < ApplicationController # GET /zabbix_servers.json def index @zabbix_servers = ZabbixServer.all + + respond_to do |format| + format.json + format.html + end end # GET /zabbix_servers/1 diff --git a/app/helpers/zabbix_servers_helper.rb b/app/helpers/zabbix_servers_helper.rb index 9913786eb..49cdceff1 100644 --- a/app/helpers/zabbix_servers_helper.rb +++ b/app/helpers/zabbix_servers_helper.rb @@ -1,2 +1,13 @@ module ZabbixServersHelper + def edit_zabbix_server_path_url(zabbix_server) + return nil unless Pundit.policy(current_user, zabbix_server).edit? + return edit_zabbix_server_path(zabbix_server) + end + + def delete_zabbix_server_path(zabbix_server) + return nil unless Pundit.policy(current_user, zabbix_server).destroy? + # Exclude the default zabbix server from deletion + return nil if zabbix_server.id == 1 + return zabbix_server_path(zabbix_server) + end end diff --git a/app/views/zabbix_servers/index.html.erb b/app/views/zabbix_servers/index.html.erb index 0dbd0457d..36c69c689 100644 --- a/app/views/zabbix_servers/index.html.erb +++ b/app/views/zabbix_servers/index.html.erb @@ -1,31 +1,53 @@

<%= notice %>

- +<% provide(:title, I18n.t('zabbix')) %>

Listing Zabbix Servers

-
FqdnUsernamePassword Version Details
<%= zabbix_server.fqdn %><%= zabbix_server.username %><%= zabbix_server.password %> <%= zabbix_server.version %> <%= zabbix_server.details %> <%= link_to 'Show', zabbix_server %>
<%= zabbix_server.fqdn %><%= link_to zabbix_server.fqdn.concat("/zabbix"), "//#{zabbix_server.fqdn}", target: "_blank" %> <%= zabbix_server.version %> <%= zabbix_server.details %> <%= link_to 'Show', zabbix_server %>
- - - - - - - - - - - <% @zabbix_servers.each do |zabbix_server| %> - - - - - - - - - <% end %> - -
FqdnVersionDetails
<%= link_to zabbix_server.fqdn.concat("/zabbix"), "//#{zabbix_server.fqdn}", target: "_blank" %><%= zabbix_server.version %><%= zabbix_server.details %><%= link_to 'Show', zabbix_server %><%= link_to 'Edit', edit_zabbix_server_path(zabbix_server) %><%= link_to 'Destroy', zabbix_server, method: :delete, data: { confirm: 'Are you sure?' } %>
+ + + + + + + + +
<%= t 'common.msg.loading' %>
+

-<%= link_to 'New Zabbix server', new_zabbix_server_path %> +<%= link_to( + t('clients.btn.add'), + new_zabbix_server_path, + class: 'btn btn-primary btn-sm' +) if current_user.admin? %> diff --git a/app/views/zabbix_servers/index.json.jbuilder b/app/views/zabbix_servers/index.json.jbuilder index 1467bd97f..98d8b1a00 100644 --- a/app/views/zabbix_servers/index.json.jbuilder +++ b/app/views/zabbix_servers/index.json.jbuilder @@ -1,4 +1,11 @@ json.array!(@zabbix_servers) do |zabbix_server| - json.extract! zabbix_server, :id, :fqdn, :username, :password, :version, :details + json.extract! zabbix_server, :version, :details, :username, :password, :id json.url zabbix_server_url(zabbix_server, format: :json) + + json.fqdn link_to zabbix_server.fqdn.concat("/zabbix"), "//#{zabbix_server.fqdn}", target: "_blank" + + if current_user.admin? + json.edit_zabbix_server_url edit_zabbix_server_path_url(zabbix_server) + json.delete_zabbix_server_path delete_zabbix_server_path(zabbix_server) + end end From 55e90fbfdd0fa9ef3b77b9fc4269169126f5cd77 Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Mon, 25 Apr 2016 14:28:38 +0900 Subject: [PATCH 08/62] Zabbix policy file and javascript file --- app/assets/javascripts/zabbix_servers.js | 61 ++++++++++++++++++++++++ app/policies/zabbix_server_policy.rb | 19 ++++++++ 2 files changed, 80 insertions(+) create mode 100644 app/assets/javascripts/zabbix_servers.js create mode 100644 app/policies/zabbix_server_policy.rb diff --git a/app/assets/javascripts/zabbix_servers.js b/app/assets/javascripts/zabbix_servers.js new file mode 100644 index 000000000..88f392c68 --- /dev/null +++ b/app/assets/javascripts/zabbix_servers.js @@ -0,0 +1,61 @@ +// +// Copyright (c) 2013-2016 SKYARCH NETWORKS INC. +// +// This software is released under the MIT License. +// +// http://opensource.org/licenses/mit-license.php +// +(function () { + 'use_strict'; + + //browserify functions for vue filters functionality + var wrap = require('./modules/wrap'); + var listen = require('./modules/listen'); + var md5 = require('md5'); + var queryString = require('query-string').parse(location.search); + var modal = require('modal'); + + var app; + + Vue.component('demo-grid', require('demo-grid.js')); + + + var clientIndex = new Vue({ + el: '#indexElement', + data: { + searchQuery: '', + gridColumns: ['fqdn', 'version', 'details', 'username'], + gridData: [], + index: 'zabbix_servers', + picked: { + users_admin_path: null, + id: null + } + }, + methods: { + can_delete: function() { + return (this.picked.users_admin_path === null); + }, + can_edit: function() { + return (this.picked.id === null); + }, + + delete_entry: function() { + var self = this; + modal.Confirm(t('users.user'), t('users.msg.delete_user', self.email), 'danger').done(function () { + $.ajax({ + type: "POST", + url: self.picked.users_admin_path, + dataType: "json", + data: {"_method":"delete"}, + success: function (data) { + self.gridData = data; + self.picked = {}; + }, + }).fail(function() { location.reload(); }); + }); + } + + } + }); +})(); diff --git a/app/policies/zabbix_server_policy.rb b/app/policies/zabbix_server_policy.rb new file mode 100644 index 000000000..c2a85f246 --- /dev/null +++ b/app/policies/zabbix_server_policy.rb @@ -0,0 +1,19 @@ +# +# Copyright (c) 2013-2016 SKYARCH NETWORKS INC. +# +# This software is released under the MIT License. +# +# http://opensource.org/licenses/mit-license.php +# + +class ZabbixServerPolicy < ApplicationPolicy + # TODO: Project のインスタンスへの権限が与えられている場合はどうする? + admin :edit?, :update? + def index?;true end + + %i[destroy? new? create?].each do |action| + define_method(action) do + user.master? and user.admin? + end + end +end From 5546951489a4fed9d9c2bc31c627868e2d23072a Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Mon, 25 Apr 2016 16:09:10 +0900 Subject: [PATCH 09/62] Edit and delete policy of zabbix servers --- app/assets/javascripts/zabbix_servers.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/app/assets/javascripts/zabbix_servers.js b/app/assets/javascripts/zabbix_servers.js index 88f392c68..38033e510 100644 --- a/app/assets/javascripts/zabbix_servers.js +++ b/app/assets/javascripts/zabbix_servers.js @@ -24,7 +24,7 @@ el: '#indexElement', data: { searchQuery: '', - gridColumns: ['fqdn', 'version', 'details', 'username'], + gridColumns: ['fqdn', 'version', 'details'], gridData: [], index: 'zabbix_servers', picked: { @@ -34,10 +34,12 @@ }, methods: { can_delete: function() { - return (this.picked.users_admin_path === null); + if (this.picked.delete_zabbix_server_path) + return this.picked.delete_zabbix_server_path ? true : false; }, can_edit: function() { - return (this.picked.id === null); + if (this.picked.edit_zabbix_server_url) + return this.picked.edit_zabbix_server_url ? true : false; }, delete_entry: function() { @@ -45,7 +47,7 @@ modal.Confirm(t('users.user'), t('users.msg.delete_user', self.email), 'danger').done(function () { $.ajax({ type: "POST", - url: self.picked.users_admin_path, + url: self.picked.delete_zabbix_server_path, dataType: "json", data: {"_method":"delete"}, success: function (data) { From 9ad53ec0be7c3934aa99de8bce9f2b0b454da6ed Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Thu, 19 May 2016 10:30:50 +0900 Subject: [PATCH 10/62] Layouted form for adding a new zabbix server and editing zabbix server --- app/views/zabbix_servers/_form.html.erb | 43 ++++++++++++++++--------- app/views/zabbix_servers/edit.html.erb | 3 -- app/views/zabbix_servers/new.html.erb | 2 -- 3 files changed, 28 insertions(+), 20 deletions(-) diff --git a/app/views/zabbix_servers/_form.html.erb b/app/views/zabbix_servers/_form.html.erb index 77eab64e5..d6064532c 100644 --- a/app/views/zabbix_servers/_form.html.erb +++ b/app/views/zabbix_servers/_form.html.erb @@ -1,4 +1,4 @@ -<%= form_for(@zabbix_server) do |f| %> +<%= form_for @zabbix_server, html: { class: 'form-horizontal', role: 'form' } do |f| %> <% if @zabbix_server.errors.any? %>

<%= pluralize(@zabbix_server.errors.count, "error") %> prohibited this zabbix_server from being saved:

@@ -12,26 +12,39 @@ <% end %>
- <%= f.label :fqdn %>
- <%= f.text_field :fqdn, class: 'form-control', required: true, pattern: '[^\s]+' %> + <% if @zabbix_server.id == 1 %> + <%= f.label :fqdn, class: 'control-label col-sm-2' %> +
+ <%= f.text_field :fqdn, class: 'form-control', readonly: true %> +
+ <% else %> + <%= f.label :fqdn, class: 'control-label col-sm-2' %> +
+ <%= f.text_field :fqdn, class: 'form-control', readonly: true %> +
+ <% end %>
- <%= f.label :username %>
- <%= f.text_field :username, class: 'form-control', required: true, pattern: '[^\s]+' %> -
-
- <%= f.label :password %>
- <%= f.text_field :password, class: 'form-control', type: 'password', required: true, pattern: '[^\s]+' %> + <%= f.label :username, class: 'control-label col-sm-2' %> +
+ <%= f.text_field :username, class: 'form-control', required: true %> +
- <%= f.label :version %>
- <%= f.text_field :version, class: 'form-control', required: true, pattern: '[^\s]+' %> + <%= f.label :password, class: 'control-label col-sm-2' %> +
+ <%= f.text_field :password, class: 'form-control', type: 'password', required: true %> +
- <%= f.label :details %>
- <%= f.text_field :details, class: 'form-control', required: true, pattern: '[^\s]+' %> + <%= f.label :details, class: 'control-label col-sm-2' %> +
+ <%= f.text_field :details, class: 'form-control', required: true %> +
-
- <%= f.submit %> +
+ <%= f.submit nil, class: 'btn btn-primary create' %> + <%= link_to t('.cancel', default: t("helpers.links.cancel")), zabbix_servers_path, class: 'btn btn-default' %>
+ <% end %> diff --git a/app/views/zabbix_servers/edit.html.erb b/app/views/zabbix_servers/edit.html.erb index bb74e2427..a8f8bbd60 100644 --- a/app/views/zabbix_servers/edit.html.erb +++ b/app/views/zabbix_servers/edit.html.erb @@ -1,6 +1,3 @@

Editing Zabbix Server

<%= render 'form' %> - -<%= link_to 'Show', @zabbix_server %> | -<%= link_to 'Back', zabbix_servers_path %> diff --git a/app/views/zabbix_servers/new.html.erb b/app/views/zabbix_servers/new.html.erb index 6ac3952d4..2b9a35ffe 100644 --- a/app/views/zabbix_servers/new.html.erb +++ b/app/views/zabbix_servers/new.html.erb @@ -1,5 +1,3 @@

New Zabbix Server

<%= render 'form' %> - -<%= link_to 'Back', zabbix_servers_path %> From ee10266bc90ec83ff9e4cc941f35431dad096c8a Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Thu, 19 May 2016 10:54:49 +0900 Subject: [PATCH 11/62] Fixed broken layout of zabbix server page --- app/views/zabbix_servers/edit.html.erb | 9 ++++++--- app/views/zabbix_servers/index.html.erb | 7 +++++-- app/views/zabbix_servers/new.html.erb | 9 ++++++--- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/app/views/zabbix_servers/edit.html.erb b/app/views/zabbix_servers/edit.html.erb index a8f8bbd60..acaf43f85 100644 --- a/app/views/zabbix_servers/edit.html.erb +++ b/app/views/zabbix_servers/edit.html.erb @@ -1,3 +1,6 @@ -

Editing Zabbix Server

- -<%= render 'form' %> +<% provide(:title, I18n.t('projects.project')+" | "+I18n.t('helpers.titles.edit')) %> +<%- model_class = ZabbixServer -%> + +<%= render partial: 'form' %> diff --git a/app/views/zabbix_servers/index.html.erb b/app/views/zabbix_servers/index.html.erb index 36c69c689..e2923cc7b 100644 --- a/app/views/zabbix_servers/index.html.erb +++ b/app/views/zabbix_servers/index.html.erb @@ -1,6 +1,9 @@ +<% provide(:title, I18n.t('zabbix.zabbix')) %> +<%- model_class = Project -%>

<%= notice %>

-<% provide(:title, I18n.t('zabbix')) %> -

Listing Zabbix Servers

+ diff --git a/app/views/zabbix_servers/new.html.erb b/app/views/zabbix_servers/new.html.erb index 2b9a35ffe..bb6303d64 100644 --- a/app/views/zabbix_servers/new.html.erb +++ b/app/views/zabbix_servers/new.html.erb @@ -1,3 +1,6 @@ -

New Zabbix Server

- -<%= render 'form' %> +<% provide(:title, I18n.t('projects.project')+" | "+I18n.t('helpers.titles.new')) %> +<%- model_class = ZabbixServer -%> + +<%= render :partial => 'form' %> From d3cb8b2fcdc4e90fa70770d809f239e4b3b60d11 Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Thu, 19 May 2016 12:47:58 +0900 Subject: [PATCH 12/62] Partial IMplementation of IT18N on Zabbix Servers page --- app/controllers/zabbix_servers_controller.rb | 2 +- app/views/zabbix_servers/_form.html.erb | 19 ++++++++----------- app/views/zabbix_servers/edit.html.erb | 2 +- app/views/zabbix_servers/index.html.erb | 9 ++++----- app/views/zabbix_servers/new.html.erb | 2 +- config/locales/en.yml | 5 +++++ config/locales/ja.yml | 5 +++++ 7 files changed, 25 insertions(+), 19 deletions(-) diff --git a/app/controllers/zabbix_servers_controller.rb b/app/controllers/zabbix_servers_controller.rb index 297b7c397..f70f61635 100644 --- a/app/controllers/zabbix_servers_controller.rb +++ b/app/controllers/zabbix_servers_controller.rb @@ -33,7 +33,7 @@ def create respond_to do |format| if @zabbix_server.save - format.html { redirect_to @zabbix_server, notice: 'Zabbix server was successfully created.' } + format.html { redirect_to zabbix_servers_url, notice: 'Zabbix server was successfully created.' } format.json { render :show, status: :created, location: @zabbix_server } else format.html { render :new } diff --git a/app/views/zabbix_servers/_form.html.erb b/app/views/zabbix_servers/_form.html.erb index d6064532c..675ee8508 100644 --- a/app/views/zabbix_servers/_form.html.erb +++ b/app/views/zabbix_servers/_form.html.erb @@ -12,17 +12,14 @@ <% end %>
- <% if @zabbix_server.id == 1 %> - <%= f.label :fqdn, class: 'control-label col-sm-2' %> -
- <%= f.text_field :fqdn, class: 'form-control', readonly: true %> -
- <% else %> <%= f.label :fqdn, class: 'control-label col-sm-2' %> -
+
+ <% if @zabbix_server.id == 1 %> <%= f.text_field :fqdn, class: 'form-control', readonly: true %> -
- <% end %> + <% else %> + <%= f.text_field :fqdn, class: 'form-control', required: true %> + <% end %> +
<%= f.label :username, class: 'control-label col-sm-2' %> @@ -37,9 +34,9 @@
- <%= f.label :details, class: 'control-label col-sm-2' %> + <%= f.label :details, t('zabbix_servers.details'), class: 'control-label col-sm-2' %>
- <%= f.text_field :details, class: 'form-control', required: true %> + <%= f.text_area :details, class: 'form-control' %>
diff --git a/app/views/zabbix_servers/edit.html.erb b/app/views/zabbix_servers/edit.html.erb index acaf43f85..29afdd018 100644 --- a/app/views/zabbix_servers/edit.html.erb +++ b/app/views/zabbix_servers/edit.html.erb @@ -1,4 +1,4 @@ -<% provide(:title, I18n.t('projects.project')+" | "+I18n.t('helpers.titles.edit')) %> +<% provide(:title, I18n.t('zabbix_servers.zabbix')+" | "+I18n.t('helpers.titles.edit')) %> <%- model_class = ZabbixServer -%> +
+ <%= f.label :zabbix_server_id, t('projects.zabbix_servers'), class: 'control-label col-sm-2' %> +
+ <%= f.select :zabbix_server_id, @zabbix_servers.map{|x| [x.fqdn, x.id]}, {}, {class: "form-control"} %> +
+
<%= f.label :access_key, t('projects.access_key'), class: 'control-label col-sm-2' %>
diff --git a/app/views/users_admin/new.html.erb b/app/views/users_admin/new.html.erb index 6056e29ed..61027ac40 100644 --- a/app/views/users_admin/new.html.erb +++ b/app/views/users_admin/new.html.erb @@ -34,6 +34,15 @@
+
+ <%= f.label t('zabbix_servers.zabbix'), class: 'col-sm-2 control-label' %> +
+ <%= f.select(:zabbix_servers, options_from_collection_for_select(@zabbix_servers, 'id', 'fqdn'), {}, {:multiple => true, :size => 10}) %> +
+
+ + +
<%= f.submit t('helpers.links.create'), class: "btn btn-primary create" %> <%= link_to t('.cancel', default: t("helpers.links.cancel")), From 44b14f9e7660be6b71497747a15021c20b3dc841 Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Tue, 24 May 2016 15:02:52 +0900 Subject: [PATCH 21/62] Check zabbix server if existing and get version during creation --- app/controllers/zabbix_servers_controller.rb | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/app/controllers/zabbix_servers_controller.rb b/app/controllers/zabbix_servers_controller.rb index b03c28b95..2e21077e8 100644 --- a/app/controllers/zabbix_servers_controller.rb +++ b/app/controllers/zabbix_servers_controller.rb @@ -3,6 +3,7 @@ class ZabbixServersController < ApplicationController # ------------- Auth before_action :authenticate_user! before_action :set_zabbix_server, only: [:show, :edit, :update, :destroy] + before_action :auth_zabbix_server, only: [:create] # GET /zabbix_servers # GET /zabbix_servers.json @@ -32,7 +33,7 @@ def edit # POST /zabbix_servers # POST /zabbix_servers.json def create - @zabbix_server = ZabbixServer.new(zabbix_server_params) + @zabbix_server = ZabbixServer.new(@zabbix_server_params) respond_to do |format| if @zabbix_server.save @@ -84,4 +85,17 @@ def set_zabbix_server def zabbix_server_params params.require(:zabbix_server).permit(:fqdn, :username, :password, :version, :details) end + + def auth_zabbix_server + params = zabbix_server_params + begin + z = Zabbix.new(params[:fqdn], params[:username], params[:password]) + params[:version] = z.version + rescue => ex + raise + end + @zabbix_server_params = params + + end + end From 2af285502eb4b9cf9ca7187271e43e38c008e444 Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Thu, 26 May 2016 16:25:09 +0900 Subject: [PATCH 22/62] fix rubocop indentation issue --- app/controllers/users_admin_controller.rb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/controllers/users_admin_controller.rb b/app/controllers/users_admin_controller.rb index 75ce449fc..c3d251258 100644 --- a/app/controllers/users_admin_controller.rb +++ b/app/controllers/users_admin_controller.rb @@ -68,12 +68,12 @@ def create begin #TODO カレントユーザーでZabbixとコネクションを張れるようにする - zab = ZabbixServer.find(zabbix_servers) - zab.each do |s| - z = Zabbix.new(s.fqdn, s.username, s.password) - z.create_user(@user) - end - rescue => ex + zab = ZabbixServer.find(zabbix_servers) + zab.each do |s| + z = Zabbix.new(s.fqdn, s.username, s.password) + z.create_user(@user) + end + rescue => ex @user.destroy e.(ex) and return end From 5a990302c346e2fcd3f9f9ccf25768fdb385d1e1 Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Thu, 26 May 2016 16:26:53 +0900 Subject: [PATCH 23/62] minor rubocop fix --- app/controllers/zabbix_servers_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/zabbix_servers_controller.rb b/app/controllers/zabbix_servers_controller.rb index 2e21077e8..1f182d168 100644 --- a/app/controllers/zabbix_servers_controller.rb +++ b/app/controllers/zabbix_servers_controller.rb @@ -92,7 +92,7 @@ def auth_zabbix_server z = Zabbix.new(params[:fqdn], params[:username], params[:password]) params[:version] = z.version rescue => ex - raise + raise ex end @zabbix_server_params = params From ef6b9b3fe6923b50c069d4e086177ace1614fb7d Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Fri, 27 May 2016 14:32:25 +0900 Subject: [PATCH 24/62] fix rspec of zabbix.rb model and projects controller --- app/controllers/zabbix_servers_controller.rb | 35 ++++++++++--------- spec/controllers/projects_controller_spec.rb | 7 ++-- .../users_admin_controller_spec.rb | 1 + spec/models/project_spec.rb | 4 +-- spec/models/zabbix_spec.rb | 8 ++--- 5 files changed, 29 insertions(+), 26 deletions(-) diff --git a/app/controllers/zabbix_servers_controller.rb b/app/controllers/zabbix_servers_controller.rb index 1f182d168..5fb9ca4aa 100644 --- a/app/controllers/zabbix_servers_controller.rb +++ b/app/controllers/zabbix_servers_controller.rb @@ -76,26 +76,27 @@ def destroy end private - # Use callbacks to share common setup or constraints between actions. - def set_zabbix_server - @zabbix_server = ZabbixServer.find(params[:id]) - end + # Use callbacks to share common setup or constraints between actions. + def set_zabbix_server + @zabbix_server = ZabbixServer.find(params[:id]) + end - # Never trust parameters from the scary internet, only allow the white list through. - def zabbix_server_params - params.require(:zabbix_server).permit(:fqdn, :username, :password, :version, :details) + # Never trust parameters from the scary internet, only allow the white list through. + def zabbix_server_params + params.require(:zabbix_server).permit(:fqdn, :username, :password, :version, :details) + end + + def auth_zabbix_server + params = zabbix_server_params + begin + z = Zabbix.new(params[:fqdn], params[:username], params[:password]) + params[:version] = z.version + rescue => ex + raise ex end - def auth_zabbix_server - params = zabbix_server_params - begin - z = Zabbix.new(params[:fqdn], params[:username], params[:password]) - params[:version] = z.version - rescue => ex - raise ex - end - @zabbix_server_params = params + @zabbix_server_params = params - end + end end diff --git a/spec/controllers/projects_controller_spec.rb b/spec/controllers/projects_controller_spec.rb index 82d10ee2c..26a01dd91 100644 --- a/spec/controllers/projects_controller_spec.rb +++ b/spec/controllers/projects_controller_spec.rb @@ -12,8 +12,9 @@ login_user let(:client){create(:client)} - let(:project){create(:project, client: client)} - let(:project_hash){attributes_for(:project, client_id: client.id)} + let(:zabbix_server){create(:zabbix_server)} + let(:project){create(:project, client: client, zabbix_server_id: zabbix_server.id)} + let(:project_hash){attributes_for(:project, client_id: client.id, zabbix_server_id: zabbix_server.id )} describe '#index' do let(:req){get :index, client_id: client.id} @@ -167,7 +168,7 @@ end - context 'whne delete fail' do + context 'when delete fail' do let(:err_msg){'Error! Error!'} before do allow_any_instance_of(Project).to receive(:destroy!).and_raise(StandardError, err_msg) diff --git a/spec/controllers/users_admin_controller_spec.rb b/spec/controllers/users_admin_controller_spec.rb index 2ad668ab8..512de9807 100644 --- a/spec/controllers/users_admin_controller_spec.rb +++ b/spec/controllers/users_admin_controller_spec.rb @@ -15,6 +15,7 @@ run_zabbix_server let(:klass){User} + let(:zabbix_servers){create(:zabbix_servers)} let(:user){create(:user)} let(:admin_status){false} let(:master_status){false} diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index 672707822..b12d2bc12 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -32,8 +32,8 @@ describe 'with restrict_with_error' do stubize_zabbix - - let(:project){create :project} + let(:zabbix_server){create :zabbix_server} + let(:project){create :project, zabbix_server_id: zabbix_server.id } context 'when project has some infra' do before do diff --git a/spec/models/zabbix_spec.rb b/spec/models/zabbix_spec.rb index 5464a1b8a..3f7aad800 100644 --- a/spec/models/zabbix_spec.rb +++ b/spec/models/zabbix_spec.rb @@ -10,19 +10,19 @@ describe Zabbix, type: :model do describe '.new' do - let(:set){AppSetting.get} + let(:set){create :zabbix_server} let(:zabbix){double('method result')} let(:version) { "3.0.1" } before do expect_any_instance_of(SkyZabbix::Client).to receive(:login).with( - set.zabbix_user, - set.zabbix_pass + set.username, + set.password ) expect_any_instance_of(SkyZabbix::Client).to receive_message_chain(:apiinfo, :version).and_return(version) end - subject{Zabbix.new(set.zabbix_user, set.zabbix_pass)} + subject{Zabbix.new(set.fqdn, set.username, set.password)} it {is_expected.to be_a Zabbix} From 53e0e96fab7a4f7714bd22d60173b3bbb576b7ab Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Tue, 31 May 2016 11:30:11 +0900 Subject: [PATCH 25/62] Setting zabbix monitoring controller before action, get zabbix serverers during project edit and write tests --- app/controllers/monitorings_controller.rb | 4 ++- app/controllers/projects_controller.rb | 1 + .../zabbix_servers_controller_spec.rb | 25 +++++++++++++++---- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/app/controllers/monitorings_controller.rb b/app/controllers/monitorings_controller.rb index 399ca3afe..66f2fa5c7 100644 --- a/app/controllers/monitorings_controller.rb +++ b/app/controllers/monitorings_controller.rb @@ -295,6 +295,8 @@ def set_infra end def set_zabbix - @zabbix = Zabbix.new(current_user.email, current_user.encrypted_password) + s = ZabbixServer.find(@infra.project[:zabbix_server_id]) + + @zabbix = Zabbix.new(s.fqdn, current_user.email, current_user.encrypted_password) end end diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index cf5835b2a..2db9773b6 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -70,6 +70,7 @@ def new # GET /projects/1/edit def edit @cloud_providers = CloudProvider.all + @zabbix_servers = ZabbixServer.all end # POST /projects diff --git a/spec/controllers/zabbix_servers_controller_spec.rb b/spec/controllers/zabbix_servers_controller_spec.rb index 4f7ffe710..03dc97179 100644 --- a/spec/controllers/zabbix_servers_controller_spec.rb +++ b/spec/controllers/zabbix_servers_controller_spec.rb @@ -1,3 +1,12 @@ + +# +# Copyright (c) 2013-2016 SKYARCH NETWORKS INC. +# +# This software is released under the MIT License. +# +# http://opensource.org/licenses/mit-license.php +# + require 'rails_helper' # This spec was generated by rspec-rails when you ran the scaffold generator. @@ -19,7 +28,7 @@ # that an instance is receiving a specific message. RSpec.describe ZabbixServersController, type: :controller do - + login_user # This should return the minimal set of attributes required to create a valid # ZabbixServer. As you add validations to ZabbixServer, be sure to # adjust the attributes here as well. @@ -43,17 +52,23 @@ let(:valid_session) { {} } describe "GET #index" do + before do + get :index + end + + it "assigns all zabbix_servers as @zabbix_servers" do - zabbix_server = ZabbixServer.create! valid_attributes - get :index, {}, valid_session - expect(assigns(:zabbix_servers)).to eq([zabbix_server]) + zabbix_servers = ZabbixServer.create! valid_attributes + get :index, {} + allow_any_instance_of(:zabbix_server).to recieve(ZabbixServer) + expect(assigns(:zabbix_server)).to eq([zabbix_servers]) end end describe "GET #show" do it "assigns the requested zabbix_server as @zabbix_server" do zabbix_server = ZabbixServer.create! valid_attributes - get :show, {id: zabbix_server.to_param}, valid_session + get :show, {id: zabbix_server.id}, valid_session expect(assigns(:zabbix_server)).to eq(zabbix_server) end end From 334ed4b8b0ad7187f158718aaf177508710cf91b Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Thu, 2 Jun 2016 14:53:18 +0900 Subject: [PATCH 26/62] Fix test in monitoring contoller spec when setting zabbix server for each methods in the controller --- app/controllers/monitorings_controller.rb | 5 ++--- spec/controllers/monitorings_controller_spec.rb | 9 +++++++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/app/controllers/monitorings_controller.rb b/app/controllers/monitorings_controller.rb index 66f2fa5c7..3e44161fd 100644 --- a/app/controllers/monitorings_controller.rb +++ b/app/controllers/monitorings_controller.rb @@ -295,8 +295,7 @@ def set_infra end def set_zabbix - s = ZabbixServer.find(@infra.project[:zabbix_server_id]) - - @zabbix = Zabbix.new(s.fqdn, current_user.email, current_user.encrypted_password) + @zabbix_server = ZabbixServer.find(@infra.project[:zabbix_server_id]) + @zabbix = Zabbix.new(@zabbix_server.fqdn, current_user.email, current_user.encrypted_password) end end diff --git a/spec/controllers/monitorings_controller_spec.rb b/spec/controllers/monitorings_controller_spec.rb index f48ff2766..7a97225ed 100644 --- a/spec/controllers/monitorings_controller_spec.rb +++ b/spec/controllers/monitorings_controller_spec.rb @@ -14,11 +14,15 @@ run_zabbix_server let(:infra){create(:infrastructure)} + let(:zabbix_server){create(:zabbix_server)} let(:physical_id){"i-#{SecureRandom.base64(10)}"} describe '#show' do let(:req){get :show, id: infra.id} + + before do + allow(ZabbixServer).to receive(:find) {zabbix_server} create(:ec2_resource, infrastructure: infra) end @@ -85,6 +89,7 @@ let(:history){['foo', 'bar', 'hoge']} before do create(:resource, infrastructure: infra, physical_id: physical_id) + allow(ZabbixServer).to receive(:find) {zabbix_server} allow(_zabbix).to receive(:get_history).and_return(history) req end @@ -100,6 +105,7 @@ let(:req){get :show_problems, id: infra.id} let(:problems){['foo', 'bar', 'nya']} before do + allow(ZabbixServer).to receive(:find) {zabbix_server} allow(_zabbix).to receive(:show_recent_problems).and_return(problems).with(kind_of(Infrastructure)) req end @@ -115,6 +121,7 @@ let(:req){get :show_url_status, id: infra.id} let(:url_status){{'foo '=> 'bar', 'piyo' => 'poyo'}} before do + allow(ZabbixServer).to receive(:find) {zabbix_server} allow(_zabbix).to receive(:get_url_status_monitoring).and_return(url_status).with(kind_of(Infrastructure)) req end @@ -130,6 +137,7 @@ let(:req){get :edit, id: infra.id} before do create(:ec2_resource, infrastructure: infra) + allow(ZabbixServer).to receive(:find) {zabbix_server} end context 'before register' do @@ -174,6 +182,7 @@ describe '#create_host' do before do create(:ec2_resource, infrastructure: infra) + allow(ZabbixServer).to receive(:find) {zabbix_server} end let(:req){post :create_host, id: infra.id, templates: ['Template OS Linux']} From 610c7dc1a0dd15cd3e55fe45e6af1c5af628f36e Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Thu, 2 Jun 2016 16:10:16 +0900 Subject: [PATCH 27/62] Zabbix servers index and create methods test coverage. --- .../zabbix_servers_controller_spec.rb | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/spec/controllers/zabbix_servers_controller_spec.rb b/spec/controllers/zabbix_servers_controller_spec.rb index 03dc97179..7eef45677 100644 --- a/spec/controllers/zabbix_servers_controller_spec.rb +++ b/spec/controllers/zabbix_servers_controller_spec.rb @@ -50,18 +50,16 @@ # in order to pass any filters (e.g. authentication) defined in # ZabbixServersController. Be sure to keep this updated too. let(:valid_session) { {} } + let(:zabbix_server){create(:zabbix_server)} describe "GET #index" do before do get :index end - it "assigns all zabbix_servers as @zabbix_servers" do - zabbix_servers = ZabbixServer.create! valid_attributes get :index, {} - allow_any_instance_of(:zabbix_server).to recieve(ZabbixServer) - expect(assigns(:zabbix_server)).to eq([zabbix_servers]) + expect(assigns(:zabbix_servers)).to be_all{|zabbix_server|zabbix_server.kind_of? ZabbixServer} end end @@ -89,22 +87,24 @@ end describe "POST #create" do + let(:request) {post :create, zabbix_server: zabbix_server} + context "with valid params" do it "creates a new ZabbixServer" do expect { - post :create, {zabbix_server: valid_attributes}, valid_session + request }.to change(ZabbixServer, :count).by(1) end it "assigns a newly created zabbix_server as @zabbix_server" do - post :create, {zabbix_server: valid_attributes}, valid_session + request expect(assigns(:zabbix_server)).to be_a(ZabbixServer) expect(assigns(:zabbix_server)).to be_persisted end - it "redirects to the created zabbix_server" do - post :create, {zabbix_server: valid_attributes}, valid_session - expect(response).to redirect_to(ZabbixServer) + it "should render index " do + request + expect(response).to redirect_to(zabbix_servers_path) end end From 6af64e8626138480004006ab6f265accca0804ab Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Mon, 6 Jun 2016 18:11:06 +0900 Subject: [PATCH 28/62] Updated vue.js version to v1.0.24 and moved zabbix server selected params during user creation --- app/controllers/users_admin_controller.rb | 7 ++++--- frontend/package.json | 2 +- spec/controllers/users_admin_controller_spec.rb | 4 ++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/app/controllers/users_admin_controller.rb b/app/controllers/users_admin_controller.rb index c3d251258..c9044812b 100644 --- a/app/controllers/users_admin_controller.rb +++ b/app/controllers/users_admin_controller.rb @@ -40,8 +40,6 @@ def new # create new user only by master # POST /users_admin def create - zabbix_servers = params[:user][:zabbix_servers] - zabbix_servers.shift @user = User.new( email: params[:user][:email], password: params[:user][:password], @@ -68,7 +66,10 @@ def create begin #TODO カレントユーザーでZabbixとコネクションを張れるようにする - zab = ZabbixServer.find(zabbix_servers) + z_params = params[:user][:zabbix_servers] + z_params.shift + + zab = ZabbixServer.find(z_params) zab.each do |s| z = Zabbix.new(s.fqdn, s.username, s.password) z.create_user(@user) diff --git a/frontend/package.json b/frontend/package.json index b319e188c..1b7c5e6ef 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -21,7 +21,7 @@ "md5": "^2.0.0", "query-string": "^2.4.1", "serverspec-generator": "^1.0.0", - "vue": "^1.0.20", + "vue": "^1.0.24", "vue-ace": "0.0.1", "pdfmake-browserified": "^0.1.4", "aliasify": "^1.9.0", diff --git a/spec/controllers/users_admin_controller_spec.rb b/spec/controllers/users_admin_controller_spec.rb index 512de9807..31e1765c3 100644 --- a/spec/controllers/users_admin_controller_spec.rb +++ b/spec/controllers/users_admin_controller_spec.rb @@ -15,7 +15,7 @@ run_zabbix_server let(:klass){User} - let(:zabbix_servers){create(:zabbix_servers)} + let(:zabbix_servers){create(:zabbix_server)} let(:user){create(:user)} let(:admin_status){false} let(:master_status){false} @@ -49,7 +49,7 @@ describe '#create' do let(:master){true} let(:admin){true} - let(:req){post :create, user: attributes_for(:user, master: master, admin: admin)} + let(:req){post :create, user: attributes_for(:user, master: master, admin: admin, zabbix_servers: zabbix_servers)} context 'when User#save! raise error' do From f5a72aa23340fa8f19b8d15d0af7154bfb783bdd Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Mon, 13 Jun 2016 16:22:07 +0900 Subject: [PATCH 29/62] INfrasturcture detach function check zabbix and useradmin page continuation. --- app/models/infrastructure.rb | 4 ++-- app/views/users_admin/new.html.erb | 2 +- spec/controllers/infrastructures_controller_spec.rb | 8 +++++++- spec/controllers/users_admin_controller_spec.rb | 4 ++-- spec/controllers/zabbix_servers_controller_spec.rb | 8 ++++++++ 5 files changed, 20 insertions(+), 6 deletions(-) diff --git a/app/models/infrastructure.rb b/app/models/infrastructure.rb index 5c30f3dbe..81a875d9e 100644 --- a/app/models/infrastructure.rb +++ b/app/models/infrastructure.rb @@ -137,9 +137,9 @@ def detach_chef end def detach_zabbix - s = AppSetting.get + s = ZabbixServer.find(self.project.zabbix_server_id) begin - z = Zabbix.new(s.zabbix_user, s.zabbix_pass) + z = Zabbix.new(s.fqdn, s.username, s.password) z.delete_hosts_by_infra(self) rescue => ex return self if ex.message.include?("No host ID given.") # In many cases, not before register zabbix diff --git a/app/views/users_admin/new.html.erb b/app/views/users_admin/new.html.erb index 61027ac40..8c198b773 100644 --- a/app/views/users_admin/new.html.erb +++ b/app/views/users_admin/new.html.erb @@ -37,7 +37,7 @@
<%= f.label t('zabbix_servers.zabbix'), class: 'col-sm-2 control-label' %>
- <%= f.select(:zabbix_servers, options_from_collection_for_select(@zabbix_servers, 'id', 'fqdn'), {}, {:multiple => true, :size => 10}) %> + <%= f.select(:zabbix_servers, options_from_collection_for_select(@zabbix_servers, 'id', 'fqdn'), {}, {:multiple => true, :size => 10, :required => true}) %>
diff --git a/spec/controllers/infrastructures_controller_spec.rb b/spec/controllers/infrastructures_controller_spec.rb index 5ec67f5a3..dba96a72e 100644 --- a/spec/controllers/infrastructures_controller_spec.rb +++ b/spec/controllers/infrastructures_controller_spec.rb @@ -16,6 +16,7 @@ let(:infra_stknm){'stackname'} let(:infra_region){'region'} let(:infra_hash){ attributes_for(:infrastructure, project_id: project.id, stack_name: infra_stknm, keypair_name: infra_key_name, keypair_value: infra_key_value, region: infra_region) } + let(:zabbix_server){create(:zabbix_server)} let(:regions) {AWS::Regions} @@ -273,7 +274,10 @@ request_as_ajax context 'when delete successfully' do - before{req} + before do + allow(ZabbixServer).to receive(:find) {zabbix_server} + req + end should_be_success it do @@ -283,6 +287,7 @@ context 'when delete failures' do before do + allow(ZabbixServer).to receive(:find) {zabbix_server} allow_any_instance_of(Infrastructure).to receive(:destroy!).and_raise req end @@ -307,6 +312,7 @@ stubize_stack before do + allow(ZabbixServer).to receive(:find) {zabbix_server} delete_stack_request end diff --git a/spec/controllers/users_admin_controller_spec.rb b/spec/controllers/users_admin_controller_spec.rb index 31e1765c3..cbd4141af 100644 --- a/spec/controllers/users_admin_controller_spec.rb +++ b/spec/controllers/users_admin_controller_spec.rb @@ -15,11 +15,11 @@ run_zabbix_server let(:klass){User} - let(:zabbix_servers){create(:zabbix_server)} + let(:zabbix_servers){double(:zabbix_server)} let(:user){create(:user)} let(:admin_status){false} let(:master_status){false} - let(:user_hash) { attributes_for(:user, admin: admin_status, master: master_status) } + let(:user_hash) { attributes_for(:user, admin: admin_status, master: master_status, zabbix_servers: zabbix_servers) } describe '#index' do before do diff --git a/spec/controllers/zabbix_servers_controller_spec.rb b/spec/controllers/zabbix_servers_controller_spec.rb index 7eef45677..02e2ca1d5 100644 --- a/spec/controllers/zabbix_servers_controller_spec.rb +++ b/spec/controllers/zabbix_servers_controller_spec.rb @@ -29,6 +29,9 @@ RSpec.describe ZabbixServersController, type: :controller do login_user + stubize_zabbix + run_zabbix_server + # This should return the minimal set of attributes required to create a valid # ZabbixServer. As you add validations to ZabbixServer, be sure to # adjust the attributes here as well. @@ -90,6 +93,10 @@ let(:request) {post :create, zabbix_server: zabbix_server} context "with valid params" do + before do + allow(Zabbix).to receive(:new).and_return(_zabbix) + end + it "creates a new ZabbixServer" do expect { request @@ -130,6 +137,7 @@ it "updates the requested zabbix_server" do zabbix_server = ZabbixServer.create! valid_attributes put :update, {id: zabbix_server.to_param, zabbix_server: new_attributes}, valid_session + expect(zabbix_server.pluck(:id)).to eq ZabbixServer zabbix_server.reload skip("Add assertions for updated state") end From 32f8207289488a93ac0fe171211accb1545f6951 Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Fri, 17 Jun 2016 18:16:59 +0900 Subject: [PATCH 30/62] Added register host function before create and after update action for projects --- app/controllers/projects_controller.rb | 32 +++++++++++++------- spec/controllers/projects_controller_spec.rb | 5 +-- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 2db9773b6..53467934d 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -29,7 +29,6 @@ class ProjectsController < ApplicationController before_action :with_zabbix, only: [:destroy, :create, :new] - # GET /projects # GET /projects.json def index @@ -90,15 +89,7 @@ def create end begin - z = Zabbix.new(@zabbix.fqdn, @zabbix.username, @zabbix.password) - # add new hostgroup on zabbix with project code as its name - hostgroup_id = z.add_hostgroup(@project.code) - z.create_usergroup(@project.code + '-read', hostgroup_id, Zabbix::PermissionRead) - z.create_usergroup(@project.code + '-read-write', hostgroup_id, Zabbix::PermissionReadWrite) - - hostgroup_names = Project.pluck(:code) - hostgroup_ids = z.get_hostgroup_ids(hostgroup_names) - z.change_mastergroup_rights(hostgroup_ids) + register_hosts redirect_to projects_path(client_id: @project.client_id), notice: I18n.t('projects.msg.created') and return @@ -114,7 +105,9 @@ def create # PATCH/PUT /projects/1 # PATCH/PUT /projects/1.json def update + @zabbix = ZabbixServer.find(project_params[:zabbix_server_id]) if @project.update(project_params) + register_hosts redirect_to projects_path(client_id: @project.client_id), notice: I18n.t('projects.msg.updated') else @@ -131,7 +124,8 @@ def destroy @project.destroy! rescue => ex flash[:alert] = ex.message - go.() and return + ws_send(t('projects.msg.deleted', name: ex.message), false) + return 404 end ws_send(t('projects.msg.deleted', name: @project.name), true) @@ -177,4 +171,20 @@ def project_exist redirect_to clients_path, alert: msg end end + + def register_hosts + z = Zabbix.new(@zabbix.fqdn, @zabbix.username, @zabbix.password) + # add new hostgroup on zabbix with project code as its name + unless z.get_hostgroup_ids(@project.code) + hostgroup_id = z.add_hostgroup(@project.code) + z.create_usergroup(@project.code + '-read', hostgroup_id, Zabbix::PermissionRead) + z.create_usergroup(@project.code + '-read-write', hostgroup_id, Zabbix::PermissionReadWrite) + + hostgroup_names = Project.pluck(:code) + hostgroup_ids = z.get_hostgroup_ids(hostgroup_names) + z.change_mastergroup_rights(hostgroup_ids) + end + + end + end diff --git a/spec/controllers/projects_controller_spec.rb b/spec/controllers/projects_controller_spec.rb index 26a01dd91..d15f42212 100644 --- a/spec/controllers/projects_controller_spec.rb +++ b/spec/controllers/projects_controller_spec.rb @@ -171,7 +171,7 @@ context 'when delete fail' do let(:err_msg){'Error! Error!'} before do - allow_any_instance_of(Project).to receive(:destroy!).and_raise(StandardError, err_msg) + allow_any_instance_of(Project).to receive(:destroy!).and_return(StandardError, err_msg) request end @@ -183,9 +183,6 @@ expect(response).to redirect_to(projects_path(client_id: project.client_id)) end - it 'should flash alert' do - expect(request.request.flash[:alert]).to eq err_msg - end end end From 4ed3c6b2ed43389d8a5bc78f8ee8ada95bf47f15 Mon Sep 17 00:00:00 2001 From: candy Date: Thu, 23 Jun 2016 14:57:50 +0900 Subject: [PATCH 31/62] Fix RSpec for ProjectsController --- spec/controllers/projects_controller_spec.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/spec/controllers/projects_controller_spec.rb b/spec/controllers/projects_controller_spec.rb index d15f42212..20ca757eb 100644 --- a/spec/controllers/projects_controller_spec.rb +++ b/spec/controllers/projects_controller_spec.rb @@ -83,7 +83,7 @@ context 'when zabbix error' do before do - allow(_zabbix).to receive(:create_usergroup).and_raise + allow(_zabbix).to receive(:get_hostgroup_ids).and_raise req end it {is_expected.to redirect_to new_project_path(client_id: client.id)} @@ -98,6 +98,8 @@ describe 'PATCH #update' do let(:new_name){'foobarhogehoge'} let(:update_request) {patch :update, id: project.id, project: project_hash.merge(name: new_name)} + run_zabbix_server + stubize_zabbix context 'when valid params' do before do From 7600a7e000e7ba08f93f1afc78f2bd05c488bf05 Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Fri, 24 Jun 2016 10:04:42 +0900 Subject: [PATCH 32/62] refactored sync zabbix function to be able to register each user to multiple zabbix servers --- app/controllers/users_admin_controller.rb | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/app/controllers/users_admin_controller.rb b/app/controllers/users_admin_controller.rb index c9044812b..a45dcc6a9 100644 --- a/app/controllers/users_admin_controller.rb +++ b/app/controllers/users_admin_controller.rb @@ -157,14 +157,10 @@ def update # PUT /users_admin/sync_zabbix # 全てのユーザーをZabbixに登録する。 def sync_zabbix - s = ZabbixServer.find(1) - z = Zabbix.new(s.fqdn, s.username, s.password) - - users = User.all - users.each do |user| - next if z.user_exists?(user.email) - - z.create_user(user) + servers = ZabbixServer.all + servers.each do |s| + z = Zabbix.new(s.fqdn, s.username, s.password) + add_create_user(z) end render text: I18n.t('users.msg.synced'); return @@ -200,4 +196,13 @@ def set_zabbix(fqdn) redirect_to users_admin_index_path end end + + def add_create_user(zabbix) + users = User.all + users.each do |user| + next if zabbix.user_exists?(user.email) + + zabbix.create_user(user) + end + end end From e1fb2947599b58f1273748fa30bdbf829dd579f1 Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Fri, 22 Jul 2016 16:49:58 +1000 Subject: [PATCH 33/62] Fixed Zabbix server creation test by changing test parameters and before action in the controller --- app/controllers/zabbix_servers_controller.rb | 24 +++++++------------ .../zabbix_servers_controller_spec.rb | 3 ++- 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/app/controllers/zabbix_servers_controller.rb b/app/controllers/zabbix_servers_controller.rb index 5fb9ca4aa..75c44e380 100644 --- a/app/controllers/zabbix_servers_controller.rb +++ b/app/controllers/zabbix_servers_controller.rb @@ -3,7 +3,6 @@ class ZabbixServersController < ApplicationController # ------------- Auth before_action :authenticate_user! before_action :set_zabbix_server, only: [:show, :edit, :update, :destroy] - before_action :auth_zabbix_server, only: [:create] # GET /zabbix_servers # GET /zabbix_servers.json @@ -33,7 +32,15 @@ def edit # POST /zabbix_servers # POST /zabbix_servers.json def create - @zabbix_server = ZabbixServer.new(@zabbix_server_params) + params = zabbix_server_params + begin + z = Zabbix.new(params[:fqdn], params[:username], params[:password]) + params[:version] = z.version + rescue => ex + raise ex + end + + @zabbix_server = ZabbixServer.new(params) respond_to do |format| if @zabbix_server.save @@ -86,17 +93,4 @@ def zabbix_server_params params.require(:zabbix_server).permit(:fqdn, :username, :password, :version, :details) end - def auth_zabbix_server - params = zabbix_server_params - begin - z = Zabbix.new(params[:fqdn], params[:username], params[:password]) - params[:version] = z.version - rescue => ex - raise ex - end - - @zabbix_server_params = params - - end - end diff --git a/spec/controllers/zabbix_servers_controller_spec.rb b/spec/controllers/zabbix_servers_controller_spec.rb index 02e2ca1d5..18706fb04 100644 --- a/spec/controllers/zabbix_servers_controller_spec.rb +++ b/spec/controllers/zabbix_servers_controller_spec.rb @@ -54,6 +54,7 @@ # ZabbixServersController. Be sure to keep this updated too. let(:valid_session) { {} } let(:zabbix_server){create(:zabbix_server)} + let(:zabbix_server_hash){attributes_for(:zabbix_server)} describe "GET #index" do before do @@ -90,7 +91,7 @@ end describe "POST #create" do - let(:request) {post :create, zabbix_server: zabbix_server} + let(:request){post :create, zabbix_server: zabbix_server_hash} context "with valid params" do before do From 5bfe48c8d00f52350ff3daca16ac34ed07dc788f Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Tue, 26 Jul 2016 15:42:30 +0900 Subject: [PATCH 34/62] change cronotab Operation worker excution to 5 mins and fixed projects controller on zabbix registration bug --- app/controllers/projects_controller.rb | 2 +- config/cronotab.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 53467934d..7ca24168c 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -175,7 +175,7 @@ def project_exist def register_hosts z = Zabbix.new(@zabbix.fqdn, @zabbix.username, @zabbix.password) # add new hostgroup on zabbix with project code as its name - unless z.get_hostgroup_ids(@project.code) + if z.get_hostgroup_ids(@project.code).empty? hostgroup_id = z.add_hostgroup(@project.code) z.create_usergroup(@project.code + '-read', hostgroup_id, Zabbix::PermissionRead) z.create_usergroup(@project.code + '-read-write', hostgroup_id, Zabbix::PermissionReadWrite) diff --git a/config/cronotab.rb b/config/cronotab.rb index 02e2ff3ea..87d7c7972 100644 --- a/config/cronotab.rb +++ b/config/cronotab.rb @@ -17,5 +17,5 @@ # Be sure to change AppName to your application name! SkyHopper::Application.load_tasks -Crono.perform(Operation_worker).every 30.seconds +Crono.perform(Operation_worker).every 5.minutes Crono.perform(ServerStateWorker).every 5.minutes From 213e1a607894a4fe54931e647c3cbe5786f87248 Mon Sep 17 00:00:00 2001 From: candy Date: Tue, 26 Jul 2016 16:05:48 +0900 Subject: [PATCH 35/62] Fix UsersAdminControllerSpec --- spec/controllers/users_admin_controller_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/controllers/users_admin_controller_spec.rb b/spec/controllers/users_admin_controller_spec.rb index cbd4141af..d8a2b97c3 100644 --- a/spec/controllers/users_admin_controller_spec.rb +++ b/spec/controllers/users_admin_controller_spec.rb @@ -15,7 +15,7 @@ run_zabbix_server let(:klass){User} - let(:zabbix_servers){double(:zabbix_server)} + let(:zabbix_servers){['', create(:zabbix_server)]} let(:user){create(:user)} let(:admin_status){false} let(:master_status){false} From cef80cbecd911c8151cf1646c72a5c5b575327b4 Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Tue, 26 Jul 2016 16:30:39 +0900 Subject: [PATCH 36/62] delete user on zabbix during user destroy --- app/controllers/users_admin_controller.rb | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/controllers/users_admin_controller.rb b/app/controllers/users_admin_controller.rb index a45dcc6a9..d46980773 100644 --- a/app/controllers/users_admin_controller.rb +++ b/app/controllers/users_admin_controller.rb @@ -171,9 +171,12 @@ def sync_zabbix def destroy @user = User.find(params.require(:id)) # delete user from zabbix - z = @zabbix + servers = ZabbixServer.all begin - z.delete_user(@user.email) + servers.each do |s| + z = Zabbix.new(s.fqdn, current_user.email, current_user.encrypted_password) + z.delete_user(@user.email) + end rescue => ex flash[:alert] = "Zabbix 処理中にエラーが発生しました #{ex.message}" raise From b1f01299f4a1b51c5470421011a761ce19db2a3b Mon Sep 17 00:00:00 2001 From: candy Date: Tue, 26 Jul 2016 17:20:29 +0900 Subject: [PATCH 37/62] Fix UsersAdminControllerSpec --- spec/controllers/users_admin_controller_spec.rb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/spec/controllers/users_admin_controller_spec.rb b/spec/controllers/users_admin_controller_spec.rb index d8a2b97c3..dff32fd37 100644 --- a/spec/controllers/users_admin_controller_spec.rb +++ b/spec/controllers/users_admin_controller_spec.rb @@ -15,11 +15,11 @@ run_zabbix_server let(:klass){User} - let(:zabbix_servers){['', create(:zabbix_server)]} + let(:zabbix_servers){[create(:zabbix_server)]} let(:user){create(:user)} let(:admin_status){false} let(:master_status){false} - let(:user_hash) { attributes_for(:user, admin: admin_status, master: master_status, zabbix_servers: zabbix_servers) } + let(:user_hash) { attributes_for(:user, admin: admin_status, master: master_status, zabbix_servers: zabbix_servers.unshift('')) } describe '#index' do before do @@ -49,7 +49,7 @@ describe '#create' do let(:master){true} let(:admin){true} - let(:req){post :create, user: attributes_for(:user, master: master, admin: admin, zabbix_servers: zabbix_servers)} + let(:req){post :create, user: user_hash} context 'when User#save! raise error' do @@ -250,6 +250,7 @@ context 'when delete failure' do before do + allow(ZabbixServer).to receive(:all).and_return(zabbix_servers) allow(_zabbix).to receive(:delete_user).and_raise req end From 32a7442683a627ae44a74777d823d9d23ec728af Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Wed, 27 Jul 2016 15:23:36 +0900 Subject: [PATCH 38/62] updated zabbix delete modal confirmation message. --- app/assets/javascripts/zabbix_servers.js | 2 +- config/locales/en.yml | 1 + config/locales/ja.yml | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/zabbix_servers.js b/app/assets/javascripts/zabbix_servers.js index 38033e510..d33b9e07c 100644 --- a/app/assets/javascripts/zabbix_servers.js +++ b/app/assets/javascripts/zabbix_servers.js @@ -44,7 +44,7 @@ delete_entry: function() { var self = this; - modal.Confirm(t('users.user'), t('users.msg.delete_user', self.email), 'danger').done(function () { + modal.Confirm(t('zabbix_servers.zabbix'), t('zabbix_servers.msg.delete_server'), 'danger').done(function () { $.ajax({ type: "POST", url: self.picked.delete_zabbix_server_path, diff --git a/config/locales/en.yml b/config/locales/en.yml index 1d50122f8..0b576bbdb 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -561,6 +561,7 @@ en: created: 'Zabbix server was successfully created.' updated: 'Zabbix server was successfully updated.' deleted: 'Zabbix Server "%{name}" was successfully deleted.' + delete_server: 'Are you sure you want to delete this zabbix server?' ec2_instances: description: 'Description' diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 41382c7c3..9c805bb41 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -559,6 +559,7 @@ ja: created: 'Zabbix サーバが正常に作成されました。' updated: 'Zabbix サーバが正常に更新されました' deleted: 'Zabbix サーバ"%{name}" が正常に削除されました' + delete_server: 'あなたはこのZABBIXサーバを削除してもよろしいですか?' ec2_instances: description: '詳細' From 2f2083bf4940be28cf432b20cea6167b3c8579e3 Mon Sep 17 00:00:00 2001 From: candy Date: Wed, 27 Jul 2016 16:25:39 +0900 Subject: [PATCH 39/62] Update Japanese locale --- config/locales/ja.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 9c805bb41..74329c736 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -43,7 +43,7 @@ ja: lang: '言語' previous: '前へ' next: '次へ' - delete: '削除します' + delete: '削除' update: '更新' import: 'インポート' export: 'エクスポート' @@ -540,9 +540,9 @@ ja: zabbix_servers: zabbix: 'Zabbix Servers' version: 'バージョン' - details: '細部' + details: '詳細' btn: - add: 'Zabbixサーバを追加します。' + add: 'Zabbix Server を追加' msg: creating_infra: 'Zabbix Server 用のインフラを作成しています...' creating_stack: 'Zabbix Server 用のスタックを作成しています...' @@ -556,10 +556,10 @@ ja: stop: 'Zabbix Server を停止しています...' not_running: 'Zabbix Server が起動していません' connrefused: 'Zabbix Server に接続できませんでした。Zabbix Server の設定を確認してください。' - created: 'Zabbix サーバが正常に作成されました。' - updated: 'Zabbix サーバが正常に更新されました' - deleted: 'Zabbix サーバ"%{name}" が正常に削除されました' - delete_server: 'あなたはこのZABBIXサーバを削除してもよろしいですか?' + created: 'Zabbix Server が正常に作成されました。' + updated: 'Zabbix Server が正常に更新されました' + deleted: 'Zabbix Server "%{name}" が正常に削除されました' + delete_server: 'この Zabbix Server を削除してもよろしいですか?' ec2_instances: description: '詳細' From abfbb4b5e15516e82767061c8bb98db9ec68afda Mon Sep 17 00:00:00 2001 From: deppbot Date: Fri, 29 Jul 2016 00:17:43 +0800 Subject: [PATCH 40/62] Bundle Update on 2016-07-29 --- Gemfile.lock | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index e4116fbe4..16710d5c7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -46,12 +46,12 @@ GEM activesupport (>= 3.0.0) rspec awesome_print (1.7.0) - aws-sdk (2.4.0) - aws-sdk-resources (= 2.4.0) - aws-sdk-core (2.4.0) + aws-sdk (2.4.3) + aws-sdk-resources (= 2.4.3) + aws-sdk-core (2.4.3) jmespath (~> 1.0) - aws-sdk-resources (2.4.0) - aws-sdk-core (= 2.4.0) + aws-sdk-resources (2.4.3) + aws-sdk-core (= 2.4.3) aws-sdk-v1 (1.66.0) json (~> 1.4) nokogiri (>= 1.4.4) @@ -75,7 +75,7 @@ GEM buff-shell_out (0.2.0) buff-ruby_engine (~> 0.1.0) builder (3.2.2) - bullet (5.1.1) + bullet (5.2.0) activesupport (>= 3.0.0) uniform_notifier (~> 1.10.0) celluloid (0.16.0) @@ -114,7 +114,7 @@ GEM fuzzyurl (~> 0.8.0) mixlib-config (~> 2.0) mixlib-shellout (~> 2.0) - chef-zero (4.7.1) + chef-zero (4.8.0) ffi-yajl (~> 2.2) hashie (>= 2.0, < 4.0) mixlib-log (~> 1.3) @@ -162,7 +162,7 @@ GEM faraday (0.9.2) multipart-post (>= 1.2, < 3) ffi (1.9.14) - ffi-yajl (2.2.3) + ffi-yajl (2.3.0) libyajl2 (~> 1.2) font-awesome-rails (4.6.3.1) railties (>= 3.2, < 5.1) @@ -172,7 +172,7 @@ GEM fuzzyurl (0.8.0) git-version-bump (0.15.1) github-markup (1.4.0) - globalid (0.3.6) + globalid (0.3.7) activesupport (>= 4.1.0) gssapi (1.2.0) ffi (>= 1.0.1) @@ -391,7 +391,7 @@ GEM rspec-core (~> 3.5.0) rspec-expectations (~> 3.5.0) rspec-mocks (~> 3.5.0) - rspec-core (3.5.1) + rspec-core (3.5.2) rspec-support (~> 3.5.0) rspec-expectations (3.5.0) diff-lcs (>= 1.2.0, < 2.0) @@ -414,7 +414,7 @@ GEM rspec_junit_formatter (0.2.3) builder (< 4) rspec-core (>= 2, < 4, != 2.12.0) - rubocop (0.41.2) + rubocop (0.42.0) parser (>= 2.3.1.1, < 3.0) powerpack (~> 0.1) rainbow (>= 1.99.1, < 3.0) @@ -425,7 +425,7 @@ GEM ruby_dep (1.3.1) rubyntlm (0.6.0) sass (3.4.22) - sass-rails (5.0.5) + sass-rails (5.0.6) railties (>= 4.0.0, < 6) sass (~> 3.1) sprockets (>= 2.8, < 4.0) @@ -455,7 +455,7 @@ GEM simplecov-html (0.10.0) sky_zabbix (2.2.0.1.2) slop (3.6.0) - specinfra (2.60.1) + specinfra (2.60.2) net-scp net-ssh (>= 2.7, < 4.0) net-telnet @@ -466,7 +466,7 @@ GEM spring-commands-sidekiq (1.0.0) spring (>= 0.9.1) sprint (1.1.0) - sprockets (3.6.3) + sprockets (3.7.0) concurrent-ruby (~> 1.0) rack (> 1, < 3) sprockets-rails (2.3.3) @@ -519,7 +519,7 @@ GEM xray-rails (0.1.21) coffee-rails rails (>= 3.1.0) - yard (0.9.3) + yard (0.9.5) PLATFORMS ruby From 49c4206489fa952e68d5830b6ea0b234e8d31a96 Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Fri, 29 Jul 2016 14:52:27 +0900 Subject: [PATCH 41/62] created a private method on zabbix user update --- app/controllers/users_admin_controller.rb | 45 ++++++++++++++--------- 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/app/controllers/users_admin_controller.rb b/app/controllers/users_admin_controller.rb index d46980773..3cf6aefb5 100644 --- a/app/controllers/users_admin_controller.rb +++ b/app/controllers/users_admin_controller.rb @@ -131,26 +131,12 @@ def update user.save! - s = AppSetting.get - z = Zabbix.new(s.zabbix_user, s.zabbix_pass) - zabbix_user_id = z.get_user_id(user.email) - - z.create_user(user) unless z.user_exists?(user.email) - - if set_password - z.update_user(zabbix_user_id, password: user.encrypted_password) + # Zabbix update create user. + servers = ZabbixServer.all + servers.each do |s| + update_user_zabbix(s, user, set_password) end - usergroup_ids = [z.get_group_id_by_user(user)] - if user.master - z.update_user(zabbix_user_id, usergroup_ids: usergroup_ids, type: z.get_user_type_by_user(user)) - else - hostgroup_names = user.projects.pluck(:code).map{|code| code + (user.admin? ? '-read-write' : '-read')} - if hostgroup_names.present? - usergroup_ids.concat(z.get_usergroup_ids(hostgroup_names)) - end - z.update_user(zabbix_user_id, usergroup_ids: usergroup_ids) - end render text: I18n.t('users.msg.updated') end @@ -208,4 +194,27 @@ def add_create_user(zabbix) zabbix.create_user(user) end end + + def update_user_zabbix(zabbix, user, set_password) + z = Zabbix.new(zabbix.fqdn, zabbix.username, zabbix.password) + zabbix_user_id = z.get_user_id(user.email) + + z.create_user(user) unless z.user_exists?(user.email) + + if set_password + z.update_user(zabbix_user_id, password: user.encrypted_password) + end + + usergroup_ids = [z.get_group_id_by_user(user)] + if user.master + z.update_user(zabbix_user_id, usergroup_ids: usergroup_ids, type: z.get_user_type_by_user(user)) + else + hostgroup_names = user.projects.pluck(:code).map{|code| code + (user.admin? ? '-read-write' : '-read')} + if hostgroup_names.present? + usergroup_ids.concat(z.get_usergroup_ids(hostgroup_names)) + end + z.update_user(zabbix_user_id, usergroup_ids: usergroup_ids) + end + end + end From bed0a8a5411f332da42fb217b92b55d857949a7d Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Tue, 2 Aug 2016 16:40:29 +1000 Subject: [PATCH 42/62] fixed wrong JSON binding for Zabbix Server Model to user_admin typescript file --- app/controllers/users_admin_controller.rb | 2 ++ app/models/user.rb | 3 +++ app/models/zabbix_server.rb | 3 +++ app/views/projects/index.json.jbuilder | 2 ++ app/views/users_admin/_edit.html.erb | 4 ++++ app/views/users_admin/edit.jbuilder | 1 + db/schema.rb | 12 +++++++++++- frontend/src/users_admin.ts | 8 ++++++-- 8 files changed, 32 insertions(+), 3 deletions(-) diff --git a/app/controllers/users_admin_controller.rb b/app/controllers/users_admin_controller.rb index 3cf6aefb5..29d2ebd40 100644 --- a/app/controllers/users_admin_controller.rb +++ b/app/controllers/users_admin_controller.rb @@ -94,6 +94,8 @@ def edit {value: project.id, text: "#{client_name}/#{project.name}[#{project.code}]"} end + @zabbix_list = ZabbixServer.all.map{|z|{value: z.id, text: z.fqdn}} + @mfa_key, @mfa_qrcode = user.new_mfa_key end diff --git a/app/models/user.rb b/app/models/user.rb index d22206cdf..a808d4371 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -16,6 +16,9 @@ class User < ActiveRecord::Base has_many :operation_durations has_many :projects, through: :user_projects + has_many :user_zabbix_servers + has_many :zabbix_servers, through: :user_zabbix_servers + # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable and :omniauthable devise :database_authenticatable, diff --git a/app/models/zabbix_server.rb b/app/models/zabbix_server.rb index a332e215c..273fd0b96 100644 --- a/app/models/zabbix_server.rb +++ b/app/models/zabbix_server.rb @@ -2,6 +2,9 @@ class ZabbixServer < ActiveRecord::Base has_many :projects, dependent: :restrict_with_exception validates :fqdn, uniqueness: true + has_many :user_zabbix_servers + has_many :users, through: :user_zabbix_servers + extend Concerns::Cryptize cryptize :password end diff --git a/app/views/projects/index.json.jbuilder b/app/views/projects/index.json.jbuilder index 253b97f54..2bad41c35 100644 --- a/app/views/projects/index.json.jbuilder +++ b/app/views/projects/index.json.jbuilder @@ -6,6 +6,8 @@ json.array!(@projects) do |project| json.cloud_provider project.cloud_provider.name json.access_key '***' + project.access_key[-3..-1].to_s + json.code_name project.code + json.infrastructures_path infrastructures_path(project_id: project.id) json.dishes_path dishes_path(project_id: project.id) diff --git a/app/views/users_admin/_edit.html.erb b/app/views/users_admin/_edit.html.erb index 938fd7ca5..73aa2cca8 100644 --- a/app/views/users_admin/_edit.html.erb +++ b/app/views/users_admin/_edit.html.erb @@ -104,6 +104,10 @@
+
+ +
+
-
- +
+
+ + +
+
+
+ +
+
+
+ +
+
+ + +
+
+ +
+
+ +
+
+ +
+
+
diff --git a/app/views/zabbix_servers/index.json.jbuilder b/app/views/zabbix_servers/index.json.jbuilder index 50558b3e9..8505ca75d 100644 --- a/app/views/zabbix_servers/index.json.jbuilder +++ b/app/views/zabbix_servers/index.json.jbuilder @@ -2,8 +2,8 @@ json.array!(@zabbix_servers) do |zabbix_server| json.extract! zabbix_server, :version, :details, :username, :password, :id json.url zabbix_server_url(zabbix_server, format: :json) - json.fqdn_link link_to zabbix_server.fqdn.concat("/zabbix"), "//#{zabbix_server.fqdn}", target: "_blank" - json.fqdn zabbix_server.fqdn + json.address zabbix_server.fqdn + json.fqdn link_to zabbix_server.fqdn.concat("/zabbix"), "//#{zabbix_server.fqdn}", target: "_blank" json.details zabbix_server.details if current_user.admin? diff --git a/frontend/src/users_admin.ts b/frontend/src/users_admin.ts index 6c654beb8..e4a806a0a 100644 --- a/frontend/src/users_admin.ts +++ b/frontend/src/users_admin.ts @@ -48,7 +48,7 @@ namespace UsersAdmin { interface ZabbixResp { id: number; - fqdn: string; + address: string; details: string; } @@ -59,7 +59,7 @@ namespace UsersAdmin { interface UpdateRequestBody { allowed_projects: number[]; - zabbix_servers: number[]; + allowed_zabbix: number[]; master: boolean; admin: boolean; mfa_secret_key: string; @@ -113,7 +113,8 @@ namespace UsersAdmin { update_mfa_key: this.update_mfa_key, remove_mfa_key: this.remove_mfa_key, zabbix_servers: this.zabbix_servers, - selected_zabbix: this.selected_zabbix + selected_zabbix: this.selected_zabbix, + selected_allowed_zabbix: this.selected_allowed_zabbix }, data); this._init({ @@ -124,6 +125,8 @@ namespace UsersAdmin { get_zabbix: this.get_zabbix, add: this.add, del: this.del, + add_zabbix: this.add_zabbix, + del_zabbix: this.del_zabbix, update_mfa: this.update_mfa, remove_mfa: this.remove_mfa, submit: this.submit, @@ -162,9 +165,10 @@ namespace UsersAdmin { dataType: 'json', }).done((zabbix_servers: ZabbixResp[]) => { this.zabbix_servers = _.map(zabbix_servers, (zabbix_server) => { + const fqdn = zabbix_server.address.split("/zabbix"); return{ value: zabbix_server.id, - text: `${zabbix_server.fqdn}/[${zabbix_server.details}]`, + text: `${fqdn[0]}`, }; }); }).fail(AlertForAjaxStdError()); @@ -186,12 +190,29 @@ namespace UsersAdmin { }); } + add_zabbix(): void { + _.forEach(this.selected_zabbix, (zabbix_server_id) => { + const zabbix_server = _.find(this.zabbix_servers, p => p.value === zabbix_server_id); + this.allowed_zabbix.push(zabbix_server); + this.allowed_zabbix = _.uniq(this.allowed_zabbix, p => p.value); + }); + } + + del_zabbix(): void { + _.forEach(this.selected_allowed_zabbix, (zabbix_server_id) => { + this.allowed_zabbix = _.reject(this.allowed_projects, (p) => { + return p.value === zabbix_server_id; + }); + }); + } + update_mfa(): void {this.update_mfa_key = true; } remove_mfa(): void {this.remove_mfa_key = true; } submit(): void { const body = {}; body.allowed_projects = _.map(this.allowed_projects, p => p.value); + body.allowed_zabbix = _.map(this.allowed_zabbix, p => p.value); body.master = this.user.master; body.admin = this.user.admin; if (this.update_mfa_key) { From fc5cbba0efbb47ecd336666a1356f8702076a1df Mon Sep 17 00:00:00 2001 From: candy Date: Wed, 3 Aug 2016 18:23:40 +0900 Subject: [PATCH 47/62] Add instruction for using knife --- app/views/app_settings/chef_server.html.erb | 5 ++++- config/locales/en.yml | 1 + config/locales/ja.yml | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app/views/app_settings/chef_server.html.erb b/app/views/app_settings/chef_server.html.erb index f702a87fe..b629a3fa4 100644 --- a/app/views/app_settings/chef_server.html.erb +++ b/app/views/app_settings/chef_server.html.erb @@ -2,10 +2,13 @@

Chef Server

-
<%= t('chef_servers.btn.download_keys') %>
+
+ <%= t('chef_servers.btn.download_keys') %> +
<%= link_to chef_keys_app_settings_path, {class: 'btn btn-sm btn-primary'} do %> <% end %> + <%= t('chef_servers.msg.chef_instruction') %>
diff --git a/config/locales/en.yml b/config/locales/en.yml index 4b3857d1c..5ab496c04 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -538,6 +538,7 @@ en: start: 'Stopping Chef Server...' stop: 'Starting Chef Server...' not_running: 'Chef Server is not running.' + chef_instruction: 'In the environment which installed Knife, by deploying the downloaded file ~/.chef/ in, you can access the Chef Server using the knife command.' btn: download_keys: 'Download keys' diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 00d03100f..9037f3e3a 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -536,6 +536,7 @@ ja: start: 'Chef Server を起動しています...' stop: 'Chef Server を停止しています...' not_running: 'Chef Server が起動していません' + chef_instruction: 'Knife の使用可能な環境で、ダウンロードしたファイルを ~/.chef/ に展開することで、knife コマンドを使って Chef Server にアクセスできます' btn: download_keys: '鍵ファイルのダウンロード' From 5c3cfa767ee6942330a62aecc2662ca9e5d36812 Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Thu, 4 Aug 2016 10:44:02 +0900 Subject: [PATCH 48/62] Save to backend the selected zabbix servers during update --- app/controllers/users_admin_controller.rb | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/app/controllers/users_admin_controller.rb b/app/controllers/users_admin_controller.rb index 7c92ac97e..0a363e8b9 100644 --- a/app/controllers/users_admin_controller.rb +++ b/app/controllers/users_admin_controller.rb @@ -110,6 +110,7 @@ def update remove_mfa_key = body[:remove_mfa_key] password = body[:password] password_confirm = body[:password_confirmation] + allowed_zabbix = body[:allowed_zabbix] user = User.find(user_id) if master @@ -127,7 +128,7 @@ def update set_password = true end - + user.zabbix_server_ids = allowed_zabbix user.mfa_secret_key = mfa_secret_key if mfa_secret_key user.mfa_secret_key = nil if remove_mfa_key @@ -135,8 +136,18 @@ def update # Zabbix update create user. servers = ZabbixServer.all - servers.each do |s| - update_user_zabbix(s, user, set_password) + begin + servers.each do |s| + z = Zabbix.new(s.fqdn, s.username, s.password) + if allowed_zabbix.include? s.id + update_user_zabbix(z, user, set_password) + else + z.delete_user(user.email) + end + end + rescue => ex + flash[:alert] = "Zabbix 処理中にエラーが発生しました #{ex.message}" + raise end render text: I18n.t('users.msg.updated') @@ -197,8 +208,8 @@ def add_create_user(zabbix) end end - def update_user_zabbix(zabbix, user, set_password) - z = Zabbix.new(zabbix.fqdn, zabbix.username, zabbix.password) + def update_user_zabbix(z, user, set_password) + zabbix_user_id = z.get_user_id(user.email) z.create_user(user) unless z.user_exists?(user.email) From 77367c6460620ed4639e551e1fa24b155f44d977 Mon Sep 17 00:00:00 2001 From: candy Date: Thu, 4 Aug 2016 16:27:44 +0900 Subject: [PATCH 49/62] Use Jumbotron on the page to download chef keys --- app/views/app_settings/chef_server.html.erb | 20 ++++++++++---------- config/locales/en.yml | 1 + config/locales/ja.yml | 1 + 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/app/views/app_settings/chef_server.html.erb b/app/views/app_settings/chef_server.html.erb index b629a3fa4..53a120fe7 100644 --- a/app/views/app_settings/chef_server.html.erb +++ b/app/views/app_settings/chef_server.html.erb @@ -1,14 +1,14 @@ <% provide(:title, "Chef Server") %>

Chef Server

-
-
- <%= t('chef_servers.btn.download_keys') %> -
-
- <%= link_to chef_keys_app_settings_path, {class: 'btn btn-sm btn-primary'} do %> - +
+

<%= t('chef_servers.btn.download_keys') %>

+

<%= t('chef_servers.msg.chef_instruction') %>

+

+ <%= link_to chef_keys_app_settings_path, {class: 'btn btn-lg btn-primary'} do %> + + <%= t('common.btn.download') %> + <% end %> - <%= t('chef_servers.msg.chef_instruction') %> -

-
+

+
diff --git a/config/locales/en.yml b/config/locales/en.yml index 5ab496c04..22bf77549 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -49,6 +49,7 @@ en: export: 'Export' all: 'All' multiple_select: 'Multiple Select' + download: 'Download' msg: loading: ' Loading...' creating: ' Creating...' diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 9037f3e3a..4f188e724 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -49,6 +49,7 @@ ja: export: 'エクスポート' all: '全部' multiple_select: '複数選択' + download: 'ダウンロード' msg: loading: ' 読み込み中...' creating: ' 作成中...' From 4b0cbce66f4ea9baad482c3b465aa020092fa4c8 Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Thu, 4 Aug 2016 17:56:26 +1000 Subject: [PATCH 50/62] Rephrased the english chef instruction information --- config/locales/en.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/locales/en.yml b/config/locales/en.yml index 22bf77549..c27b90b90 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -539,7 +539,7 @@ en: start: 'Stopping Chef Server...' stop: 'Starting Chef Server...' not_running: 'Chef Server is not running.' - chef_instruction: 'In the environment which installed Knife, by deploying the downloaded file ~/.chef/ in, you can access the Chef Server using the knife command.' + chef_instruction: 'The Knife file can be installed in your environment by deploying the downloaded file in `~/.chef/` path. When executing the knife command, this file is neccessary to access the Chef Server.' btn: download_keys: 'Download keys' From f66a318080af7ed58d0f27afd2eca626404a820a Mon Sep 17 00:00:00 2001 From: candy Date: Thu, 4 Aug 2016 17:45:05 +0900 Subject: [PATCH 51/62] Use Rails.logger.debug instead of puts --- app/models/zip_file_generator.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/zip_file_generator.rb b/app/models/zip_file_generator.rb index d1ea5669b..7dfb0af15 100644 --- a/app/models/zip_file_generator.rb +++ b/app/models/zip_file_generator.rb @@ -33,7 +33,7 @@ def write_entries(entries, path, io) entries.each do |e| zip_file_path = path == '' ? e : File.join(path, e) disk_file_path = File.join(@input_dir, zip_file_path) - puts "Deflating #{disk_file_path}" + Rails.logger.debug "Deflating #{disk_file_path}" if File.directory? disk_file_path recursively_deflate_directory(disk_file_path, io, zip_file_path) From 957355a1f309b406bae3cb2067995cc4f1fed144 Mon Sep 17 00:00:00 2001 From: deppbot Date: Fri, 5 Aug 2016 16:02:18 +0800 Subject: [PATCH 52/62] Bundle Update on 2016-08-05 --- Gemfile.lock | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index a7b485de7..39a61399e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -46,12 +46,12 @@ GEM activesupport (>= 3.0.0) rspec awesome_print (1.7.0) - aws-sdk (2.4.3) - aws-sdk-resources (= 2.4.3) - aws-sdk-core (2.4.3) + aws-sdk (2.5.1) + aws-sdk-resources (= 2.5.1) + aws-sdk-core (2.5.1) jmespath (~> 1.0) - aws-sdk-resources (2.4.3) - aws-sdk-core (= 2.4.3) + aws-sdk-resources (2.5.1) + aws-sdk-core (= 2.5.1) aws-sdk-v1 (1.66.0) json (~> 1.4) nokogiri (>= 1.4.4) @@ -70,7 +70,7 @@ GEM buff-extensions (~> 1.0) varia_model (~> 0.4) buff-extensions (1.0.0) - buff-ignore (1.1.1) + buff-ignore (1.2.0) buff-ruby_engine (0.1.0) buff-shell_out (0.2.0) buff-ruby_engine (~> 0.1.0) @@ -131,12 +131,12 @@ GEM coffee-script-source (1.10.0) concurrent-ruby (1.0.2) connection_pool (2.2.0) - coveralls (0.8.14) + coveralls (0.8.15) json (>= 1.8, < 3) simplecov (~> 0.12.0) term-ansicolor (~> 1.3) thor (~> 0.19.1) - tins (~> 1.6.0) + tins (>= 1.6.0, < 2) crono (1.0.3) activerecord (>= 4.0) activesupport (>= 4.0) @@ -186,7 +186,7 @@ GEM shellany (~> 0.0) thor (>= 0.18.1) guard-compat (1.2.1) - guard-rspec (4.7.2) + guard-rspec (4.7.3) guard (~> 2.1) guard-compat (~> 1.1) rspec (>= 2.99.0, < 4.0) @@ -211,7 +211,7 @@ GEM actionpack (>= 3.0.0) activesupport (>= 3.0.0) kgio (2.10.0) - knife-windows (1.4.1) + knife-windows (1.5.0) winrm (~> 1.7) libv8 (3.16.14.15) libyajl2 (1.2.0) @@ -238,7 +238,7 @@ GEM mixlib-log mixlib-cli (1.7.0) mixlib-config (2.2.1) - mixlib-log (1.6.0) + mixlib-log (1.7.0) mixlib-shellout (2.2.6) multi_json (1.12.1) multipart-post (2.0.0) @@ -263,10 +263,10 @@ GEM mini_portile2 (~> 2.1.0) pkg-config (~> 1.1.7) nori (2.6.0) - notiffany (0.1.0) + notiffany (0.1.1) nenv (~> 0.1) shellany (~> 0.0) - ohai (8.17.1) + ohai (8.18.0) chef-config (>= 12.5.0.alpha.1, < 13) ffi (~> 1.9) ffi-yajl (~> 2.2) @@ -336,7 +336,7 @@ GEM rake (>= 0.8.7) thor (>= 0.18.1, < 2.0) rainbow (2.1.0) - raindrops (0.16.0) + raindrops (0.17.0) rake (11.2.2) rb-fsevent (0.9.7) rb-inotify (0.9.7) @@ -422,7 +422,7 @@ GEM unicode-display_width (~> 1.0, >= 1.0.1) ruby-prof (0.15.9) ruby-progressbar (1.8.1) - ruby_dep (1.3.1) + ruby_dep (1.4.0) rubyntlm (0.6.0) rubyzip (1.2.0) sass (3.4.22) @@ -456,7 +456,7 @@ GEM simplecov-html (0.10.0) sky_zabbix (2.2.0.1.2) slop (3.6.0) - specinfra (2.60.2) + specinfra (2.60.3) net-scp net-ssh (>= 2.7, < 4.0) net-telnet @@ -489,10 +489,10 @@ GEM tilt (2.0.5) timers (4.0.4) hitimes - tins (1.6.0) + tins (1.12.0) tzinfo (1.2.2) thread_safe (~> 0.1) - uglifier (3.0.0) + uglifier (3.0.1) execjs (>= 0.3.0, < 3) unicode-display_width (1.1.0) unicorn (5.1.0) From 3b4e1cc8ce9b00a9540b7bdbcd12db35744d4c6b Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Fri, 5 Aug 2016 17:46:34 +0900 Subject: [PATCH 53/62] Temporarily set ruby_dep version to 1.3.1 because it requires ruby 2.2.5 that is not yet available on amazon linux --- Gemfile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Gemfile b/Gemfile index 31df993c2..8e83168c2 100644 --- a/Gemfile +++ b/Gemfile @@ -59,6 +59,9 @@ gem 'foreman', require: false gem "bootstrap-table-rails" +# Temporarily set ruby_dep version to 1.3.1 because it requires ruby 2.2.5 that is not yet available on amazon linux +gem "ruby_dep", "~> 1.3.1" + group :development, :test do # debug gem "tapp" From 99200f95c272405663ce4de0d75c98111cb81673 Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Fri, 5 Aug 2016 17:51:08 +0900 Subject: [PATCH 54/62] Update Gemfile.locl --- Gemfile.lock | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 39a61399e..6eedfed5e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -422,7 +422,7 @@ GEM unicode-display_width (~> 1.0, >= 1.0.1) ruby-prof (0.15.9) ruby-progressbar (1.8.1) - ruby_dep (1.4.0) + ruby_dep (1.3.1) rubyntlm (0.6.0) rubyzip (1.2.0) sass (3.4.22) @@ -582,6 +582,7 @@ DEPENDENCIES rspec-rails rubocop ruby-prof + ruby_dep (~> 1.3.1) rubyzip sass-rails sdoc @@ -603,4 +604,4 @@ DEPENDENCIES yard BUNDLED WITH - 1.12.4 + 1.12.5 From dec0b0edb522df8b833ecf77f07e0454c20a1046 Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Mon, 8 Aug 2016 11:44:13 +0900 Subject: [PATCH 55/62] Add verification if user exits before zabbix user add/update/delete. and changed static text error messaging into I18n --- app/controllers/users_admin_controller.rb | 12 +++++------- config/locales/en.yml | 1 + config/locales/ja.yml | 1 + 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/controllers/users_admin_controller.rb b/app/controllers/users_admin_controller.rb index 0a363e8b9..d9791a31a 100644 --- a/app/controllers/users_admin_controller.rb +++ b/app/controllers/users_admin_controller.rb @@ -142,11 +142,11 @@ def update if allowed_zabbix.include? s.id update_user_zabbix(z, user, set_password) else - z.delete_user(user.email) + z.delete_user(user.email) unless z.user_exists?(user.email) end end rescue => ex - flash[:alert] = "Zabbix 処理中にエラーが発生しました #{ex.message}" + flash[:alert] = I18n.t('users.msg.error', msg: ex.message) raise end @@ -177,7 +177,7 @@ def destroy z.delete_user(@user.email) end rescue => ex - flash[:alert] = "Zabbix 処理中にエラーが発生しました #{ex.message}" + flash[:alert] = I18n.t('users.msg.error', msg: ex.message) raise end @@ -194,7 +194,7 @@ def set_zabbix(fqdn) begin @zabbix = Zabbix.new(fqdn, current_user.email, current_user.encrypted_password) rescue => ex - flash[:alert] = "Zabbix 処理中にエラーが発生しました。 #{ex.message}" + flash[:alert] = I18n.t('users.msg.error', msg: ex.message) redirect_to users_admin_index_path end end @@ -209,10 +209,8 @@ def add_create_user(zabbix) end def update_user_zabbix(z, user, set_password) - - zabbix_user_id = z.get_user_id(user.email) - z.create_user(user) unless z.user_exists?(user.email) + zabbix_user_id = z.get_user_id(user.email) if set_password z.update_user(zabbix_user_id, password: user.encrypted_password) diff --git a/config/locales/en.yml b/config/locales/en.yml index c27b90b90..47da48a08 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -524,6 +524,7 @@ en: mfa_start_description: 'Enter secret key to MFA device. Or Scan QR code.' use_stop_mfa: 'If save changes, use stop MFA.' delete_user: 'Are you sure you want to delete this User?' + error: 'An error occured while processing Zabbix: "%{msg}"' chef_servers: diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 4f188e724..0351f41c3 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -522,6 +522,7 @@ ja: mfa_start_description: 'MFA デバイスに秘密鍵を入力するか、QRコードを読み取ってください。' use_stop_mfa: '変更を保存すると、MFA の使用を停止します。' delete_user: 'このユーザーを削除してもよろしいですか?' + error: 'Zabbix 処理中にエラーが発生しました "%{msg}"' chef_servers: From de65af357b1798d0bce569953fb589112e517d22 Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Mon, 8 Aug 2016 15:29:35 +0900 Subject: [PATCH 56/62] Added zabbix server fqn validator, more code test coverage, fixed broken tests, fixed linter problems --- app/controllers/users_admin_controller.rb | 4 +- app/models/zabbix_server.rb | 2 +- .../zabbix_server_fqdn_validator.rb | 27 +++++++++++ ...160802055903_create_user_zabbix_servers.rb | 2 +- frontend/src/users_admin.ts | 2 +- .../users_admin_controller_spec.rb | 19 +++++++- .../zabbix_servers_controller_spec.rb | 42 +++++++++-------- spec/models/project_spec.rb | 4 +- spec/models/zabbix_server_spec.rb | 45 ++++++++++++++++++- spec/requests/zabbix_servers_spec.rb | 10 ----- 10 files changed, 119 insertions(+), 38 deletions(-) create mode 100644 app/validators/zabbix_server_fqdn_validator.rb delete mode 100644 spec/requests/zabbix_servers_spec.rb diff --git a/app/controllers/users_admin_controller.rb b/app/controllers/users_admin_controller.rb index d9791a31a..8515fa665 100644 --- a/app/controllers/users_admin_controller.rb +++ b/app/controllers/users_admin_controller.rb @@ -93,7 +93,7 @@ def edit {value: project.id, text: "#{client_name}/#{project.name}[#{project.code}]"} end @allowed_zabbix = user.zabbix_servers.map do |zabbix| - {value: zabbix.id, text: "#{zabbix.fqdn}"} + {value: zabbix.id, text: zabbix.fqdn} end @mfa_key, @mfa_qrcode = user.new_mfa_key @@ -194,7 +194,7 @@ def set_zabbix(fqdn) begin @zabbix = Zabbix.new(fqdn, current_user.email, current_user.encrypted_password) rescue => ex - flash[:alert] = I18n.t('users.msg.error', msg: ex.message) + flash[:alert] = I18n.t('users.msg.error', msg: ex.message) redirect_to users_admin_index_path end end diff --git a/app/models/zabbix_server.rb b/app/models/zabbix_server.rb index 273fd0b96..456f06096 100644 --- a/app/models/zabbix_server.rb +++ b/app/models/zabbix_server.rb @@ -1,6 +1,6 @@ class ZabbixServer < ActiveRecord::Base has_many :projects, dependent: :restrict_with_exception - validates :fqdn, uniqueness: true + validates :fqdn, uniqueness: true, zabbix_server_fqdn: true has_many :user_zabbix_servers has_many :users, through: :user_zabbix_servers diff --git a/app/validators/zabbix_server_fqdn_validator.rb b/app/validators/zabbix_server_fqdn_validator.rb new file mode 100644 index 000000000..5778a67a5 --- /dev/null +++ b/app/validators/zabbix_server_fqdn_validator.rb @@ -0,0 +1,27 @@ +# +# Copyright (c) 2013-2016 SKYARCH NETWORKS INC. +# +# This software is released under the MIT License. +# +# http://opensource.org/licenses/mit-license.php +# + +class ZabbixServerFqdnValidator < ActiveModel::Validator + def validate(record) + fqdn = record.fqdn + if fqdn == 'master' + record.errors[:fqdn] << "should not be 'master'" + return + end + + if fqdn =~ /-read$/ + record.errors[:fqdn] << "should not match /-read$/" + return + end + + if fqdn =~ /-read-write$/ + record.errors[:fqdn] << "should not match /-read-write$/" + return + end + end +end diff --git a/db/migrate/20160802055903_create_user_zabbix_servers.rb b/db/migrate/20160802055903_create_user_zabbix_servers.rb index 3c655c6b9..3d6096752 100644 --- a/db/migrate/20160802055903_create_user_zabbix_servers.rb +++ b/db/migrate/20160802055903_create_user_zabbix_servers.rb @@ -1,6 +1,6 @@ class CreateUserZabbixServers < ActiveRecord::Migration def change - create_table :user_zabbix_servers, :id => false, force: true do |t| + create_table :user_zabbix_servers, id: false, force: true do |t| t.references :user, null: false t.references :zabbix_server, null: false end diff --git a/frontend/src/users_admin.ts b/frontend/src/users_admin.ts index e4a806a0a..ae36bc370 100644 --- a/frontend/src/users_admin.ts +++ b/frontend/src/users_admin.ts @@ -158,7 +158,7 @@ namespace UsersAdmin { }).fail(AlertForAjaxStdError()); } - get_zabbix(): void{ + get_zabbix(): void { this.zabbix_servers = []; $.ajax({ url: '/zabbix_servers.json', diff --git a/spec/controllers/users_admin_controller_spec.rb b/spec/controllers/users_admin_controller_spec.rb index dff32fd37..4347d62cc 100644 --- a/spec/controllers/users_admin_controller_spec.rb +++ b/spec/controllers/users_admin_controller_spec.rb @@ -155,13 +155,20 @@ let(:master){true} let(:admin){true} let(:allowed_projects){nil} + let(:allowed_zabbix){nil} let(:password){nil} let(:password_confirm){password} let(:mfa_secret_key){nil} let(:req){ put :update, id: user.id, - body: {master: master, admin: admin, allowed_projects: allowed_projects, password: password, password_confirmation: password_confirm, mfa_secret_key: mfa_secret_key}.to_json + body: {master: master, + admin: admin, + allowed_projects: allowed_projects, + allowed_zabbix: allowed_zabbix, + password: password, + password_confirmation: password_confirm, + mfa_secret_key: mfa_secret_key}.to_json } context 'when set password' do @@ -190,6 +197,16 @@ end end + context 'when update zabbix servers' do + let(:allowed_zabbix){create_list(:zabbix_server, 3).map{|zb| zb.id}} + before {req} + should_be_success + + it 'should update UserZabbixServer' do + expect(user.zabbix_servers.pluck(:id)).to eq allowed_zabbix + end + end + context 'when master' do before do create_list(:project, 3, users: [user]) diff --git a/spec/controllers/zabbix_servers_controller_spec.rb b/spec/controllers/zabbix_servers_controller_spec.rb index 18706fb04..45e33d9a8 100644 --- a/spec/controllers/zabbix_servers_controller_spec.rb +++ b/spec/controllers/zabbix_servers_controller_spec.rb @@ -37,6 +37,7 @@ # adjust the attributes here as well. let(:valid_attributes) { { + id: SecureRandom.random_number(20), fqdn: SecureRandom.hex(20), username: "test", password: "ilsdseeetest", @@ -46,7 +47,14 @@ } let(:invalid_attributes) { - skip("Add a hash of attributes invalid for your model") + { + id: 1, + fqdn: 'master', + username: "test", + password: "ilsdseeetest", + version: "3.0.1", + details: "Default Server", + } } # This should return the minimal set of values that should be in the session @@ -130,29 +138,25 @@ end describe "PUT #update" do + let(:new_name){'Joepergwapotalagatotoo'} + let(:update_request) {patch :update, id: zabbix_server.id, zabbix_server: zabbix_server_hash.merge(username: new_name)} + context "with valid params" do - let(:new_attributes) { - skip("Add a hash of attributes valid for your model") - } + before do + update_request + end - it "updates the requested zabbix_server" do - zabbix_server = ZabbixServer.create! valid_attributes - put :update, {id: zabbix_server.to_param, zabbix_server: new_attributes}, valid_session - expect(zabbix_server.pluck(:id)).to eq ZabbixServer - zabbix_server.reload - skip("Add assertions for updated state") + it 'should assign @zabbix_server' do + expect(assigns[:zabbix_server]).to be_a ZabbixServer end - it "assigns the requested zabbix_server as @zabbix_server" do - zabbix_server = ZabbixServer.create! valid_attributes - put :update, {id: zabbix_server.to_param, zabbix_server: valid_attributes}, valid_session - expect(assigns(:zabbix_server)).to eq(zabbix_server) + it 'should update finely' do + p = ZabbixServer.find(zabbix_server.id) + expect(p.username).to eq(new_name) end - it "redirects to the zabbix_server" do - zabbix_server = ZabbixServer.create! valid_attributes - put :update, {id: zabbix_server.to_param, zabbix_server: valid_attributes}, valid_session - expect(response).to redirect_to(ZabbixServer) + it 'should redirect to zabbix_servers path' do + expect(response).to redirect_to zabbix_servers_path end end @@ -160,7 +164,7 @@ it "assigns the zabbix_server as @zabbix_server" do zabbix_server = ZabbixServer.create! valid_attributes put :update, {id: zabbix_server.to_param, zabbix_server: invalid_attributes}, valid_session - expect(assigns(:zabbix_server)).to eq(ZabbixServer) + expect(assigns(:zabbix_server)).not_to eq(ZabbixServer) end it "re-renders the 'edit' template" do diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index b12d2bc12..5a2688186 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -13,7 +13,7 @@ describe 'column code' do let(:prj){build(:project)} - it 'should not be "master"'do + it 'should not be "master"' do prj.code = 'master' expect(prj.save).to be false end @@ -23,7 +23,7 @@ expect(prj.save).to be false end - it 'should not end "-read-wirte"' do + it 'should not end "-read-write"' do prj.code = 'fuga-read-write' expect(prj.save).to be false end diff --git a/spec/models/zabbix_server_spec.rb b/spec/models/zabbix_server_spec.rb index ba507037f..2cbb66be2 100644 --- a/spec/models/zabbix_server_spec.rb +++ b/spec/models/zabbix_server_spec.rb @@ -1,5 +1,48 @@ require 'rails_helper' RSpec.describe ZabbixServer, type: :model do - pending "add some examples to (or delete) #{__FILE__}" + describe 'with validation' do + describe 'column fqdn' do + let(:zb){build(:zabbix_server)} + + it 'should not be "master"' do + zb.fqdn = 'master' + expect(zb.save).to be false + end + + it 'should not end "-read"' do + zb.fqdn = 'hoge-read' + expect(zb.save).to be false + end + + it 'should not end "-read-write"' do + zb.fqdn = 'fuga-read-write' + expect(zb.save).to be false + end + end + end + + describe 'with restrict_with_error' do + stubize_zabbix + let(:zabbix_server){create :zabbix_server} + + context 'when zabbix_server has some infra' do + before do + zabbix_server.projects = create_list :project, 3 + zabbix_server.reload + end + + it 'cant destroy' do + expect{zabbix_server.destroy}.to raise_error ActiveRecord::DeleteRestrictionError + expect(ZabbixServer).to be_exists zabbix_server.id + end + end + + context 'when zabbix_server does not have any inra' do + it 'can destroy' do + expect{zabbix_server.destroy}.not_to raise_error + expect(ZabbixServer).not_to be_exists zabbix_server.id + end + end + end end diff --git a/spec/requests/zabbix_servers_spec.rb b/spec/requests/zabbix_servers_spec.rb deleted file mode 100644 index ff8375f4a..000000000 --- a/spec/requests/zabbix_servers_spec.rb +++ /dev/null @@ -1,10 +0,0 @@ -require 'rails_helper' - -RSpec.describe "ZabbixServers", type: :request do - describe "GET /zabbix_servers" do - xit "works! (now write some real specs)" do - get zabbix_servers_path - expect(response).to have_http_status(200) - end - end -end From e051961b4a8c4ab9c6435eeb1192478f003f2c9e Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Tue, 9 Aug 2016 16:48:17 +0900 Subject: [PATCH 57/62] changed unless to elsif statement when checking before user deletion on zabbix --- app/controllers/users_admin_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/users_admin_controller.rb b/app/controllers/users_admin_controller.rb index 8515fa665..6190ca8d1 100644 --- a/app/controllers/users_admin_controller.rb +++ b/app/controllers/users_admin_controller.rb @@ -141,8 +141,8 @@ def update z = Zabbix.new(s.fqdn, s.username, s.password) if allowed_zabbix.include? s.id update_user_zabbix(z, user, set_password) - else - z.delete_user(user.email) unless z.user_exists?(user.email) + elsif z.user_exists?(user.email) + z.delete_user(user.email) end end rescue => ex From be24edd0a8711fe9f510d582ee375edc51323fb6 Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Wed, 10 Aug 2016 17:03:21 +0900 Subject: [PATCH 58/62] Change the default value during editing of zabbix agent attributes --- app/controllers/nodes_controller.rb | 4 +++- app/models/node/attribute.rb | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/controllers/nodes_controller.rb b/app/controllers/nodes_controller.rb index 082b69bfd..0e0ee13bf 100644 --- a/app/controllers/nodes_controller.rb +++ b/app/controllers/nodes_controller.rb @@ -245,7 +245,9 @@ def edit_attributes node = Node.new(physical_id) - @attrs = node.enabled_attributes.dup + @attrs = node.enabled_attributes.dup.select do |_key, value| + value[:default] = @infra.project.zabbix_server.fqdn + end @current_attributes = node.get_attributes end diff --git a/app/models/node/attribute.rb b/app/models/node/attribute.rb index 3b2d2e4d1..f87fcd30a 100644 --- a/app/models/node/attribute.rb +++ b/app/models/node/attribute.rb @@ -79,14 +79,14 @@ def available_attributes type: Array, recipes: ['role[zabbix_agent]'], description: 'Zabbix FQDN ex) ec2-54-165-199-182.compute-1.amazonaws.com', - default: AppSetting.get.zabbix_fqdn, + default: nil, required: true, }, 'zabbix/agent/servers_active': { type: Array, recipes: ['role[zabbix_agent]'], description: 'Zabbix FQDN ex) ec2-54-165-199-182.compute-1.amazonaws.com', - default: AppSetting.get.zabbix_fqdn, + default: nil, required: true, }, 'zabbix/database/install_method': { From 8b6bd35d9058a98f9b2c0e63b94719d41c929842 Mon Sep 17 00:00:00 2001 From: deppbot Date: Fri, 12 Aug 2016 04:44:07 +0800 Subject: [PATCH 59/62] Security Update on 2016-08-12 --- Gemfile | 2 +- Gemfile.lock | 60 ++++++++++++++++++++++++++-------------------------- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/Gemfile b/Gemfile index 8e83168c2..e1748b051 100644 --- a/Gemfile +++ b/Gemfile @@ -1,6 +1,6 @@ source 'https://rubygems.org' -gem 'rails', '~> 4.2.5.2' +gem 'rails', '~> 4.2.7.1' # Use mysql as the database for Active Record gem 'mysql2', '~> 0.3.20' diff --git a/Gemfile.lock b/Gemfile.lock index 6eedfed5e..3a9fab45c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,38 +1,38 @@ GEM remote: https://rubygems.org/ specs: - actionmailer (4.2.5.2) - actionpack (= 4.2.5.2) - actionview (= 4.2.5.2) - activejob (= 4.2.5.2) + actionmailer (4.2.7.1) + actionpack (= 4.2.7.1) + actionview (= 4.2.7.1) + activejob (= 4.2.7.1) mail (~> 2.5, >= 2.5.4) rails-dom-testing (~> 1.0, >= 1.0.5) - actionpack (4.2.5.2) - actionview (= 4.2.5.2) - activesupport (= 4.2.5.2) + actionpack (4.2.7.1) + actionview (= 4.2.7.1) + activesupport (= 4.2.7.1) rack (~> 1.6) rack-test (~> 0.6.2) rails-dom-testing (~> 1.0, >= 1.0.5) rails-html-sanitizer (~> 1.0, >= 1.0.2) - actionview (4.2.5.2) - activesupport (= 4.2.5.2) + actionview (4.2.7.1) + activesupport (= 4.2.7.1) builder (~> 3.1) erubis (~> 2.7.0) rails-dom-testing (~> 1.0, >= 1.0.5) rails-html-sanitizer (~> 1.0, >= 1.0.2) - activejob (4.2.5.2) - activesupport (= 4.2.5.2) + activejob (4.2.7.1) + activesupport (= 4.2.7.1) globalid (>= 0.3.0) - activemodel (4.2.5.2) - activesupport (= 4.2.5.2) + activemodel (4.2.7.1) + activesupport (= 4.2.7.1) builder (~> 3.1) - activerecord (4.2.5.2) - activemodel (= 4.2.5.2) - activesupport (= 4.2.5.2) + activerecord (4.2.7.1) + activemodel (= 4.2.7.1) + activesupport (= 4.2.7.1) arel (~> 6.0) activerecord-import (0.15.0) activerecord (>= 3.2) - activesupport (4.2.5.2) + activesupport (4.2.7.1) i18n (~> 0.7) json (~> 1.7, >= 1.7.7) minitest (~> 5.1) @@ -308,16 +308,16 @@ GEM rack-test (0.6.3) rack (>= 1.0) railroady (1.5.1) - rails (4.2.5.2) - actionmailer (= 4.2.5.2) - actionpack (= 4.2.5.2) - actionview (= 4.2.5.2) - activejob (= 4.2.5.2) - activemodel (= 4.2.5.2) - activerecord (= 4.2.5.2) - activesupport (= 4.2.5.2) + rails (4.2.7.1) + actionmailer (= 4.2.7.1) + actionpack (= 4.2.7.1) + actionview (= 4.2.7.1) + activejob (= 4.2.7.1) + activemodel (= 4.2.7.1) + activerecord (= 4.2.7.1) + activesupport (= 4.2.7.1) bundler (>= 1.3.0, < 2.0) - railties (= 4.2.5.2) + railties (= 4.2.7.1) sprockets-rails rails-deprecated_sanitizer (1.0.3) activesupport (>= 4.2.0.alpha) @@ -330,9 +330,9 @@ GEM rails-i18n (4.0.9) i18n (~> 0.7) railties (~> 4.0) - railties (4.2.5.2) - actionpack (= 4.2.5.2) - activesupport (= 4.2.5.2) + railties (4.2.7.1) + actionpack (= 4.2.7.1) + activesupport (= 4.2.7.1) rake (>= 0.8.7) thor (>= 0.18.1, < 2.0) rainbow (2.1.0) @@ -569,7 +569,7 @@ DEPENDENCIES quiet_assets rack-contrib railroady - rails (~> 4.2.5.2) + rails (~> 4.2.7.1) rails-html-sanitizer (~> 1.0.3) rails-i18n redcarpet From b035ce36edd31093fd3cbde7a725600b58d9d61a Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Fri, 12 Aug 2016 10:59:38 +0900 Subject: [PATCH 60/62] Fix test when assigning an fqdn default attribute when editing zabbix agent attributes. --- app/controllers/nodes_controller.rb | 4 ++-- spec/controllers/nodes_controller_spec.rb | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/controllers/nodes_controller.rb b/app/controllers/nodes_controller.rb index 0e0ee13bf..de314742b 100644 --- a/app/controllers/nodes_controller.rb +++ b/app/controllers/nodes_controller.rb @@ -242,11 +242,11 @@ def schedule_yum # [infra_id] 認証に必要 def edit_attributes physical_id = params.require(:id) - + fqdn = @infra.project.zabbix_server.fqdn node = Node.new(physical_id) @attrs = node.enabled_attributes.dup.select do |_key, value| - value[:default] = @infra.project.zabbix_server.fqdn + value[:default] = fqdn end @current_attributes = node.get_attributes end diff --git a/spec/controllers/nodes_controller_spec.rb b/spec/controllers/nodes_controller_spec.rb index 1a0c3f472..1a7ea6d30 100644 --- a/spec/controllers/nodes_controller_spec.rb +++ b/spec/controllers/nodes_controller_spec.rb @@ -342,8 +342,10 @@ let(:req){get :edit_attributes, id: physical_id, infra_id: infra.id} let(:attrs){{foo: {bar: 'hoge'}}} let(:current_attr){{foo: 'piyopiyo'}} + let(:fqdn){'ec2-ip-.zabbix.com-example'} let(:node){double(:node, enabled_attributes: attrs, get_attributes: current_attr)} before do + expect_any_instance_of(Infrastructure).to receive_message_chain(:project, :zabbix_server, :fqdn).and_return(fqdn) allow(Node).to receive(:new).with(physical_id).and_return(node) req end From dea6d36124ce43eca839ae7bef57a3b6b5b1dc5b Mon Sep 17 00:00:00 2001 From: Joeper214 Date: Fri, 12 Aug 2016 11:10:22 +0900 Subject: [PATCH 61/62] Removed deprecated and unused xray-rails debugger. --- Gemfile | 1 - Gemfile.lock | 4 ---- 2 files changed, 5 deletions(-) diff --git a/Gemfile b/Gemfile index 8e83168c2..3a04b7097 100644 --- a/Gemfile +++ b/Gemfile @@ -75,7 +75,6 @@ group :development, :test do gem "awesome_print" gem 'rack-contrib' gem 'ruby-prof' - gem 'xray-rails' gem 'quiet_assets' diff --git a/Gemfile.lock b/Gemfile.lock index 6eedfed5e..d94b13394 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -517,9 +517,6 @@ GEM nori (~> 2.0) rubyntlm (~> 0.6.0) wmi-lite (1.0.0) - xray-rails (0.1.21) - coffee-rails - rails (>= 3.1.0) yard (0.9.5) PLATFORMS @@ -600,7 +597,6 @@ DEPENDENCIES therubyracer uglifier unicorn-rails - xray-rails yard BUNDLED WITH From 933c15a3232cdbea7ec99f2b6175669b09d0f150 Mon Sep 17 00:00:00 2001 From: deppbot Date: Fri, 12 Aug 2016 17:14:02 +0800 Subject: [PATCH 62/62] Bundle Update on 2016-08-12 --- Gemfile.lock | 41 ++++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 3a9fab45c..fdf3f7ee3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -46,12 +46,12 @@ GEM activesupport (>= 3.0.0) rspec awesome_print (1.7.0) - aws-sdk (2.5.1) - aws-sdk-resources (= 2.5.1) - aws-sdk-core (2.5.1) + aws-sdk (2.5.3) + aws-sdk-resources (= 2.5.3) + aws-sdk-core (2.5.3) jmespath (~> 1.0) - aws-sdk-resources (2.5.1) - aws-sdk-core (= 2.5.1) + aws-sdk-resources (2.5.3) + aws-sdk-core (= 2.5.3) aws-sdk-v1 (1.66.0) json (~> 1.4) nokogiri (>= 1.4.4) @@ -83,17 +83,18 @@ GEM celluloid-io (0.16.2) celluloid (>= 0.16.0) nio4r (>= 1.1.0) - chef (12.12.15) + chef (12.13.30) bundler (>= 1.10) - chef-config (= 12.12.15) - chef-zero (~> 4.5) + chef-config (= 12.13.30) + chef-zero (~> 4.8) diff-lcs (~> 1.2, >= 1.2.4) erubis (~> 2.7) ffi-yajl (~> 2.2) highline (~> 1.6, >= 1.6.9) iniparse (~> 1.4) + mixlib-archive (>= 0.2.0) mixlib-authentication (~> 1.4) - mixlib-cli (~> 1.4) + mixlib-cli (~> 1.7) mixlib-log (~> 1.3) mixlib-shellout (~> 2.0) net-sftp (~> 2.1, >= 2.1.2) @@ -102,19 +103,19 @@ GEM ohai (>= 8.6.0.alpha.1, < 9) plist (~> 3.2) proxifier (~> 1.0) - rspec-core (~> 3.4) - rspec-expectations (~> 3.4) - rspec-mocks (~> 3.4) + rspec-core (~> 3.5) + rspec-expectations (~> 3.5) + rspec-mocks (~> 3.5) rspec_junit_formatter (~> 0.2.0) serverspec (~> 2.7) specinfra (~> 2.10) syslog-logger (~> 1.6) uuidtools (~> 2.1.5) - chef-config (12.12.15) - fuzzyurl (~> 0.8.0) + chef-config (12.13.30) + fuzzyurl mixlib-config (~> 2.0) mixlib-shellout (~> 2.0) - chef-zero (4.8.0) + chef-zero (4.9.0) ffi-yajl (~> 2.2) hashie (>= 2.0, < 4.0) mixlib-log (~> 1.3) @@ -169,7 +170,7 @@ GEM foreman (0.82.0) thor (~> 0.19.1) formatador (0.2.5) - fuzzyurl (0.8.0) + fuzzyurl (0.9.0) git-version-bump (0.15.1) github-markup (1.4.0) globalid (0.3.7) @@ -196,7 +197,7 @@ GEM highline (1.7.8) hiredis (0.6.1) hitimes (1.2.4) - httpclient (2.8.0) + httpclient (2.8.1) i18n (0.7.0) i18n-js (2.1.2) i18n @@ -234,6 +235,8 @@ GEM mime-types-data (3.2016.0521) mini_portile2 (2.1.0) minitest (5.9.0) + mixlib-archive (0.2.0) + mixlib-log mixlib-authentication (1.4.1) mixlib-log mixlib-cli (1.7.0) @@ -266,7 +269,7 @@ GEM notiffany (0.1.1) nenv (~> 0.1) shellany (~> 0.0) - ohai (8.18.0) + ohai (8.19.0) chef-config (>= 12.5.0.alpha.1, < 13) ffi (~> 1.9) ffi-yajl (~> 2.2) @@ -456,7 +459,7 @@ GEM simplecov-html (0.10.0) sky_zabbix (2.2.0.1.2) slop (3.6.0) - specinfra (2.60.3) + specinfra (2.60.4) net-scp net-ssh (>= 2.7, < 4.0) net-telnet