User data

Hướng dẫn sử dụng

I. Định nghĩa

User Data là tính năng cho phép người dùng tùy chỉnh một số thông tin của Server trên hạ tầng Cloud hiện đang được triển khai và chạy trên Server đó. Nếu khi khởi tạo server người dùng active tính năng này thì họ có thể tùy chỉnh một số thông tin theo nhu cầu của họ.

Sunteco cho phép người dùng sử dụng nhiều loại dữ liệu khác nhau. Thông thường, mỗi loại dữ liệu sẽ được xác định bởi dòng đầu tiên:

Hiện tại, các nội dung được hỗ trợ bao gồm:

  • Batch

  • PowerShell

  • Bash

  • Python

  • Cloud config

  • Khởi tạo UserData khi kích hoạt vServer

  • Gợi ý điền câu lệnh cho UserData

II. Chi tiết các nội dung hỗ trợ

1.Batch

File được thực thi ở cmd.exe (có thể được thay bằng biến môi trường COMSPEC.

2. PowerShell

#ps1 or #ps1_sysnative (system native)

#ps1_x86 (Windows On Windows 32bit)

Câu lệnh PowerShell sử dụng để thực thi như mong muốn.

3. Bash

Để sử dụng tính năng này, ta cần cài đặt Bash Shell trên hệ thống và sẵn có trên hệ thống môi trường PATH.

4. Python

#!/usr/bin/env python

Mặc dù Python đã có sẵn theo mặc định khi cài đặt, nhưng nó cũng phải có trong hệ thống môi trường PATH.

5. Cloud config

Cấu hình YAML được hỗ trợ ( trừ các nội dung dành riêng cho Linux). Các cấu hình được hỗ trợ bao gồm các cấu hình sau:

5.1. write_files: Xác định một tập hợp các file sẽ được tạo ra trên hệ thống file nội bộ. Nó có thể là danh sách các items hoặc chỉ một item với các thuộc tính sau:

  • path: đường dẫn trên ổ đĩa, nơi mà nội dung sẽ được ghi

  • content: nội dung sẽ được ghi vào file đã cho

  • permissions: số nguyên đại diện cho quyền truy cập

  • encoding: mã hóa dư liệu trong nội dung. Các mã hóa được hỗ trợ là:

    • b64, base64 dành cho các nội dung được mã hóa base64;

    • gz, gzip dành cho các nội dung nén gzip;

    • gz+b64,gz+base64,gzip+b64,gzip+base64 danh cho các nội dung gzip được mã hóa base64.

Ví dụ:

 #cloud-config
write_files:   
    encoding: b64   
    content: NDI=   
    path: C:\test   
    permissions: '0o466'
#cloud-config
write_files:   
-   encoding: b64       
    content: NDI=       
    path: C:\b64       
    permissions: '0644'   
-   encoding: base64       
    content: NDI=       
    path: C:\b64_1       
    permissions: '0644'   
-   encoding: gzip       
    content: !!binary |           
        H4sIAGUfoFQC/zMxAgCIsCQyAgAAAA==       
    path: C:\gzip       
    permissions: '0644'

5.2. Set_timezone: Thay đổi múi giờ của hệ thống

Ví dụ:

#cloud-config
set_timezone: Asia/Tbilisi

5.3. set_hostname: Thay đổi tên máy chủ

Ví dụ:

#cloud-config
set_hostname: newhostname

5.4 groups: Tạo nhóm nội bộ và thêm những user đang tồn tại vào nhóm đó

Yêu cầu định dạng của khi tạo nhóm như sau:

<group_name>: [<user1>,<user2>]

Danh sách user có thể để trống, nên có thể tạo một nhóm mà không có user nào.

Ví dụ:

groups:  
- windows-group: [user1, user2]  
- cloud-users

5.5. users: Tạo và cấu hình user nội bộ

Mỗi user có thể được xác định bởi những thuộc tính sau:

  • name: (bắt buộc điền) - là tên đăng nhập username;

  • gecos: mô tả ngắn gọn về user

  • primary_group: nhóm chính của user

  • groups: danh sách nhóm của user. Trên Windows, primary_group và groups được ràng buộc nhau.

  • passwd: Mật khẩu của user. Trên Linux, mật khẩu được lưu trữ ở dạng chuỗi băm, trong khi đó trên Windows thì mật khẩu được lưu trữ dưới dạng văn bản thuần. Nếu không xác định được mật khẩu, hệ thống sẽ đặt mật khẩu ngẫu nhiên.

  • inactive: giá trị Boolean (true/false) cho biết trạng thái hoạt động của user, mặc định là False. Nếu thiết lập là True, user sẽ bị vô hiệu quá.

  • expiredate: Ngày hết hạn của tài khoản user, định dạng là chuỗi <year>-<month>-<day>. Ví dụ: 2020-10-01.

  • ssh_authorized_keys: Danh sách các public keySSH mà sẽ được thiết lập trong ở ~/.ssh/authorized_keys cho phép user đó đăng nhập bằng SSH.

Ví dụ:

users:  
-    name: Admin  
-    name: brian    
gecos: 'Brian Cohen'    
primary_group: Users    
groups: cloud-users    
passwd: StrongPassw0rd    
inactive: False    
expiredate: 2020-10-01    
ssh_authorized_keys:      
- ssh-rsa AAAB...byV      
- ssh-rsa AAAB...ctV

5.6. ntp: Cấu hình NTP Server, (Network Time Protocol), được định nghĩa với các thuộc tính sau:

  • enabled: Giá trị Boolean (True/False), mặc định là True, để cấu hình tắt bật NTP;

  • servers: Danh sách các máy chủ NTP;

  • pools: Danh sách các nhóm máy chủ NTP;

Server và pools được gộp chung lại, server là được ưu tiên trước trong danh sách. Trên Windows, không có khác biệt giữa một NTP pool hay server

Ví dụ:

#cloud-config
ntp:  
enabled: True  
servers: ['my.ntp.server.local', '192.168.23.2']  
pools: ['0.company.pool.ntp.org', '1.company.pool.ntp.org']

5.7. runcmd: Được chỉ dẫn là nơi có thể chứa danh sách các câu lệnh mà sẽ được thực thi, theo thứ tự được xác định.

Một câu lệnh có thể được xác định là một chuỗi ký tự hay một danh sách chuỗi ký tự, với phần tử đầu tiênlà đường dẫn đến tập tin thực thi.

Trên Windows, các dòng lệnh được tập hợp lại trong một file và được thực thi với cmd.exe.

Ví dụ:

#cloud-config
runcmd:  
- 'dir C:\\'  
- ['echo', '1']

Cloud config được thực thi theo thứ tự mặc định như sau:

  1. write_files: Tạo và ghi nội dung vào file được xác định;

  2. set_timezone: Cài đặt múi giờ;

  3. set_hostname: Thay đổi tên máy chủ của Server;

  4. ntp: Cấu hình mấy chủ NTP để đồng bộ hóa thời gian

  5. groups: Tạo vả quản lý nhóm user nội bộ;

  6. users: Tạo và cấu hình tài khoản người dùng nội bộ;

  7. runcmd: Chạy các lệnh được cung cấp trong quá trình khởi tạo

Có thể dùng tùy chọn là cloud_config_plugins để lọc hoặc thay đổi thứ tự các plugin cloud-config.

Việc thực thi việc đổi tên máy chủ set_hostname hay chạy các câu lệnh runcmd có thể cần được khổi động lại Server nếu cần. Việc khởi động lại sẽ được thực hiện sau khi tất cả các chỉ thị được thực thi.

CÂU LỆNH MẪU DÀNH CHO LINUX

Lưu ý với Linux sẽ sử dụng script dạng Cloud base init. Câu lệnh mẫu để setup username/password như sau:

#cloud-config
password: password
chpasswd:
  expire: False

——————————————————————————————————

Reference: https://cloudbase-init.readthedocs.io/en/latest/userdata.html

Windown: https://cloudbase-init.readthedocs.io/en/latest/index.html

Linux: using cloudbase-init : Documents : https://cloudinit.readthedocs.io/en/latest/