Serverspec là gì?
1. Giới thiệu chung về Serverspec
Serverspec đơn giản là một tool có thể tự động kiểm tra server đã được config đúng hay chưa thông qua câu lệnh. Serverspec được tạo ra dựa trên Test Framework RSpec được viết bằng ngôn ngữ Ruby. Cái tên Serverspec được bắt nguồn từ Server+Rspec=Serverspec. Câu lệnh của Serverspec được viết theo cú pháp của Rspec. Ví dụ muốn biết server dã cài nginx chưa thì sẽ kiểm tra bằng đoạn code sau:
1
2
3
4
|
describle package('nginx') do
it { should be_installed}
end
|
Serverspec sẽ test server bằng cách cho chạy ngầm câu lệnh UNIX hoặc câu lệnh PowerShell trên server cần test. Và người dùng sẽ không viết test script trực tiếp bằng câu lệnh UNIX hoặc PowerShell mà thông qua hình thức YAML. Serverspec sẽ dựa vào Specinfra Library để chuyển hóa câu lệnh từ hình thức YAML sang hình thức UNIX command hoặc Windows command nên cùng một đoạn code chúng ta có thể test trên Linux lẫn Windows.
Có thể test trực tiếp trên server hoặc test từ xa thông qua SSH hay là WinRM và cả hai cách đều cho kết quả giống nhau.
2. Mục đích sử dụng của Serverspec
Serverspec có những mục đích sử dụng như sau:
● Quản lý server cũng như những phần mềm cài vào server
● Phát triển Infra As Code dựa vào TDD (Test Driven Development)
● Tự động hóa việc check lại server sau khi config
● Giám sát những server đang chạy
● kiểm tra server sau khi restart
3. Serverspec có thực sự cần thiết
Nếu config server thủ công (không dùng tool config server tự động như Ansible, Chef hay Puppet) thì việc dùng Serverspec để check lại những gì mình đã config là rất cần thiết. Vì trong quá trình config server thủ công rất dễ xảy ra lỗi mà chúng ta khó có thể phát hiện được khi config một lượng lớn server cùng một lúc. Thì lúc này nếu dùng Serverspec chúng ta có thể test ngay được những chỗ cần phải sửa lại trên server một cách dễ dàng và nhanh chóng giúp chúng ta tiết kiệm được rất nhiều thời gian.
4. Cách cài Serverspec trên CentOS
Serverspec được thiết kế để dễ cài đặt và sử dụng. Chúng ta chỉ cần cài đặt Serverspec lên một server nhất định. Sau đấy từ server này chúng ta có thể SSH đến những server cần test để test lại những gì chúng ta đã config mà không cần phải cài thêm agent lên server đấy.
● Cài đặt Serverspec
Serverspec được cài đặt như câu lệnh bên dưới:
1
2
|
$ gem install serverspec
|
● Setup trạng thái ban đầu cho Serverspec
Sẽ setup bằng câu lệnh như sau:
1
2
|
$ serverspec-init
|
Trong quá trình setup sẽ hiện ra màn hình như bên dưới:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
Select OS type:
1) UN*X
2) Windows
Select number: 1
Select a backend type:
1) SSH
2) Exec (local)
Select number: 2
+ spec/
+ spec/localhost/
+ spec/localhost/sample_spec.rb
+ spec/spec_helper.rb
+ Rakefile
+ .rsppec
|
Cấu trúc của các file mẫu vừa tạo ra là như sau:
1
2
3
4
5
6
7
|
./.rsppec
./Rakefile
./spec/
./spec/localhost/
./spec/localhost/sample_spec.rb
./spec/spec_helper.rb
|
5. Cách sử dụng Serverspec
Ví dụ chúng ta muốn test trạng thái của phần mềm Apache chạy trên CentOS thì chúng ta có thể tạo file test (spec/localhost/httpd_spec.rb)như bên dưới:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
require 'spec_helper' 👉cho chạy file "spec/spec_helper.rb"
describe package('httpd') do 👉phần test về httpd package
it { should be_installed } 👉đã install package httpd chưa?
end
describe service('httpd') do 👉phần test về httpd service
it { should be_enabled } 👉đã enable service chưa?
it { should be_running } 👉đã cho service chạy chưa?
end
describe port(80) do 👉phần test về cổng 80
it { should be_listening } 👉cổng 80 đã được mở chưa?
end
describe file('/etc/httpd/conf/httpd.conf') do 👉phần test về file "/etc/httpd/conf/httpd.conf" dùng để config apache
it { should be_file } 👉file có tồn tại không?
its(:content) { should match /ServerName localhost/ } 👉"ServerName" trong file "/etc/httpd/conf/httpd.conf" có phải là "localhost" không?
end
|
Khi chạy file “spec/localhost/httpd_spec.rb” ở trên thì sẽ cho kết quả như sau:
1
2
3
4
5
6
7
8
|
$ rake
/usr/bin/ruby -S rspec spec/localhost/httpd_spec.rb
......
......
......
Finished in 0.07109 seconds
6 examples, 0 failures
|
Ngoài ra chúng ta có thể kết hợp Serverspec với Jenkins để có thể test server một cách trực quan hơn thông qua GUI của Jenkins, nhất là khi phải test một lượng lớn server cùng một lúc.