Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
**/.vagrant/
**/*.retry
*-console.log
*.log
70 changes: 70 additions & 0 deletions ch1-lab-setup/Vagrantfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# -*- mode: ruby -*-
# vi: set ft=ruby :

# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
# The most common configuration options are documented and commented below.
# For a complete reference, please see the online documentation at
# https://docs.vagrantup.com.

# Every Vagrant development environment requires a box. You can search for
# boxes at https://vagrantcloud.com/search.
config.vm.box = "base"

# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
# config.vm.box_check_update = false

# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
# NOTE: This will enable public access to the opened port
# config.vm.network "forwarded_port", guest: 80, host: 8080

# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine and only allow access
# via 127.0.0.1 to disable public access
# config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"

# Create a private network, which allows host-only access to the machine
# using a specific IP.
# config.vm.network "private_network", ip: "192.168.33.10"

# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
# config.vm.network "public_network"

# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
# config.vm.synced_folder "../data", "/vagrant_data"

# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
# Example for VirtualBox:
#
# config.vm.provider "virtualbox" do |vb|
# # Display the VirtualBox GUI when booting the machine
# vb.gui = true
#
# # Customize the amount of memory on the VM:
# vb.memory = "1024"
# end
#
# View the documentation for the provider you are using for more
# information on available options.

# Enable provisioning with a shell script. Additional provisioners such as
# Ansible, Chef, Docker, Puppet and Salt are also available. Please see the
# documentation for more information about their specific syntax and use.
# config.vm.provision "shell", inline: <<-SHELL
# apt-get update
# apt-get install -y apache2
# SHELL
end
Empty file.
9 changes: 5 additions & 4 deletions ch1-lab-setup/vagrant/vagrantfile
Original file line number Diff line number Diff line change
@@ -1,23 +1,24 @@
# This homelab consists of 4 linux VMs (2xCentOS + 2xUbuntu)
Vagrant.configure("2") do |config|
n=2
n=1
(1..n).each do |i|
config.vm.define "ubuntu#{i+10}" do | ubuntu |
ubuntu.vm.box = "ubuntu/bionic64"
ubuntu.vm.hostname = "ubuntu#{i+10}"
ubuntu.vm.network "private_network", ip: "192.168.100.#{i+10}"
end

config.vm.define "centos#{i+20}" do | centos |
centos.vm.box = "centos/7"
centos.vm.hostname = "centos#{i+20}"
centos.vm.network "private_network", ip: "192.168.100.#{i+20}"
end
end

config.vm.box_check_update = false
config.vm.provider "virtualbox" do |v|
v.memory = 8192
v.cpus = 4

v.memory = 1028
v.cpus = 1
end

end
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Log created: 2021-05-25T15:42:24.773837000Z
Process ID: 7983 (0x1f2f)
Parent PID: 2118 (0x846)
Executable: /usr/lib/virtualbox/VBoxSVC
Arg[0]: /usr/lib/virtualbox/VBoxSVC
Arg[1]: --auto-shutdown
AddRef: illegal refcnt=3221225469 state=2
12 changes: 12 additions & 0 deletions ch1-lab-setup/windows/CreateUser.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
$password = ConvertTo-SecureString -String "Hoanglinh90" -AsPlainText -Force
$user = Ansible
$op = Get-LocalUser | Where-Object {$_.Name -eq $user}
if (-not $op)
{
New-LocalUser Ansible -Password $password -FullName "Ansible" -AccountNeverExpires -PasswordNeverExpires -UserMayNotChangePassword -Description "Ansible Account."| Out-Null
Add-LocalGroupMember -Group "Administrators" -Member "Ansible"
}
else
{
Write-Host "User exited"
}
32 changes: 32 additions & 0 deletions ch1-lab-setup/windows/OpenSSH.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
$opensshDir = "C:\Program Files\OpenSSH"
if (-not (Test-Path $opensshDir))
{
## Define the OpenSSH latest release url
$url = 'https://github.com/PowerShell/Win32-OpenSSH/releases/latest/'
## Create a web request to retrieve the latest release download link
$request = [System.Net.WebRequest]::Create($url)
$request.AllowAutoRedirect=$false
$response=$request.GetResponse()
$source = $([String]$response.GetResponseHeader("Location")).Replace('tag','download') + '/OpenSSH-Win64.zip'
## Download the latest OpenSSH for Windows package to the current working directory
$webClient = [System.Net.WebClient]::new()
$webClient.DownloadFile($source, (Get-Location).Path + '\OpenSSH-Win64.zip')

Get-ChildItem *.zip
# Extract the ZIP to a temporary location
Expand-Archive -Path .\OpenSSH-Win64.zip -DestinationPath ($env:temp) -Force
# Move the extracted ZIP contents from the temporary location to C:\Program Files\OpenSSH\
Move-Item "$($env:temp)\OpenSSH-Win64" -Destination "C:\Program Files\OpenSSH\" -Force
# Unblock the files in C:\Program Files\OpenSSH\
Get-ChildItem -Path "C:\Program Files\OpenSSH\" | Unblock-File
& 'C:\Program Files\OpenSSH\install-sshd.ps1'
## changes the sshd service's startup type from manual to automatic.
Set-Service sshd -StartupType Automatic
## starts the sshd service.
Start-Service sshd
New-NetFirewallRule -Protocol TCP -LocalPort 22 -Direction Inbound -Action Allow -DisplayName SSH
}
else
{
Write-Host "Openssh is already installed"
}
32 changes: 30 additions & 2 deletions ch1-lab-setup/windows/SETUP.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,38 @@
# Lab setup for windows managed node

## Build windows server using Vagrant
run your vagrant Windows2019
``` bash
vagrant up
Bringing machine 'win2019' up with 'virtualbox'
```

## Install and configure OpenSSH on windows node

## Copy ssh public key from Ansible control host (ubuntu11) to windows13
Download the newest OpenSSH server from GitHub ( https://github.com/PowerShell/Win32-OpenSSH/releases )
In our case it is v8.1.0.0p1-Beta, 64-bit version.
Open the downloaded file and copy the "OpenSSH-Win64" folder to "C:\Program Files".

```powershell as administrator
setx PATH "$env:path;C:\Program Files\OpenSSH" -m
cd "C:\Program Files\OpenSSH"; .\install-sshd.ps1
Set-Service sshd -StartupType Automatic; Set-Service ssh-agent -StartupType Automatic; Start-Service sshd; Start-Service ssh-agent
```
- allow firewall
```powershell as administrator
New-NetFirewallRule -DisplayName "OpenSSH-Server-In-TCP" -Direction Inbound -LocalPort 22 -Protocol TCP -Action Allow
```

## Ssh from ubuntu11 to windows13 without password
## Copy ssh public key from Ansible control host (ubuntu11) to windows13
SSH to VM
```create SSH-Keygen
ssh-keygen
## powershell module install Repair-AuthorizedKeyPermission
Install-Module -Force OpenSSHUtils -Scope AllUsers
```
```copy public key from ansible control host to windows server 2019 revise your located link on control host
scp /home/linhnh/.ssh/id_rsa.pub Ansible@192.168.100.31:C:\Users\ansible\.ssh\authorized_keys
ssh --% Ansible@192.168.100.31 powershell -c $ConfirmPreference = 'None'; Repair-AuthorizedKeyPermission C:\Users\ansible\.ssh\authorized_keys

```
## Ssh from ubuntu11 to windows13 without password
8 changes: 8 additions & 0 deletions ch1-lab-setup/windows/playbook.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
- name: Ensure user Ansible is present
ansible.windows.win_user:
name: Ansible
password: Hoanglinh90
state: present
password_expired: yes
groups:
- Administrator
19 changes: 19 additions & 0 deletions ch1-lab-setup/windows/vagrantfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
Vagrant.configure("2") do |config|
config.vm.define "srv2019" do | srv |
srv.vm.box = "StefanScherer/windows_2019"
srv.vm.network "private_network", ip: "192.168.100.31"
end
config.vm.provider "virtualbox" do |v|
v.memory =1028
v.cpus = 2
end
config.vm.provision "shell", path: "CreateUser.ps1"
config.vm.provision "shell", path: "OpenSSH.ps1"
# config.vm.synced_folder ".", "/vagrant"
# config.vm.provision "ansible_local" do |ansible|
# ansible.install_mode = "pip"
# ansible.become = true
# ansible.verbose = "vv"
# ansible.playbook = "playbook.yml"
# end
end
12 changes: 12 additions & 0 deletions ch2-inventory/inventory/inventory.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
all:
hosts:
fakehost.local:
children:
ubuntu:
hosts:
ubuntu11:
ansible_host: 192.168.100.11
centos:
hosts:
centos21:
ansible_host: 192.168.100.21
6 changes: 3 additions & 3 deletions ch3-playbook/06-files-and-templates.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
tasks:
- name: Copy script over to linux nodes
copy:
src: dummy.sh
src: index.html
dest: /tmp/
mode: 0755

- name: Running dummy script
shell: /tmp/dummy.sh
# - name: Running dummy script
# shell: /tmp/dummy.sh
25 changes: 23 additions & 2 deletions ch3-playbook/07-install-apache-not-work.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,36 @@
- name: The demo playbook
hosts: all
gather_facts: yes
become: yes

tasks:
- name: Install Apache package
yum:
name: httpd
state: latest

- name: Restart and enable the service
when: ansible_os_family == 'RedHat'
notify:
- Restart and enable httpd
- name: Install Apache package
apt:
name: apache2
state: latest
when: ansible_os_family == 'Debian'
notify:
- Restart and enable apache
- name: copy source
copy:
src: index.html
dest: /var/www/html/
mode: 0755
handlers:
- name: Restart and enable httpd
service:
name: httpd
state: restarted
enabled: yes
- name: Restart and enable apache
service:
name: apache
state: restarted
enabled: yes
8 changes: 8 additions & 0 deletions ch3-playbook/files/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<html>
<head>
<title> Ubuntu rocks! </title>
</head>
<body>
<p> Hello Nguyen Hoang Linh
</body>
</html>
3 changes: 1 addition & 2 deletions ch3-playbook/inventory/group_vars/all.yaml
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
ansible_user: ansible
ansible_password: admin123
ansible_user: ansible
2 changes: 0 additions & 2 deletions ch3-playbook/inventory/hosts
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
[ubuntu]
ubuntu11 ansible_host=192.168.100.11
ubuntu12 ansible_host=192.168.100.12

[centos]
centos21 ansible_host=192.168.100.21
centos22 ansible_host=192.168.100.22


[linux:children]
Expand Down