Learning – Introduction to AWS Networking
Learning - Introduction to AWS Networking
References
Introduction to AWS Networking
AWS VPC Basics - Understanding what is VPC and Calculating CIDR for VPC and Subnets
AWS Important Services
Learning – Introduction to AWS Services
Learning - Introduction to AWS Services
AWS Global Datacenter
- AWS Account - Global (Billing, IAM, Route53)
- Regions - Independent Geographic Area (S3, CDN, DynamoDB)
- VPCs (ELB)
- Availability Zones - Multiple isolated locations / data centers within a region (EC2, RDS, EBS)
- Edge locations
- Ragional Caches
- Services
Storage
References
Learning – Ansible 101 – Episode 3 – Introduction to Playbooks
Learning - Ansible 101 - Episode 3 - Introduction to Playbooks
Playbooks
Default module
The ansible command default module is command
. So following commands are the same
ansible -i inventory multi -m command -a "date"
ansible -i inventory multi -a "date"
update_cache task
For idempotence, can update_cache task
Molecule
Testing Ansible roles using Molecule.
Background
Timeout
Timeout in 3600 seconds.
ansible -i inventory multi -b -B 3600 -P 0 -a "yum -y update"
Pulling time
Using -P
for seconds
ansible -i inventory multi -b -B 3600 -P 0 -a "yum -y update"
Job ID
The result shows ansible job ID, which can be used to query in the server.
192.168.60.6 | CHANGED => {
...
"ansible_job_id": "991487770448.3711",
...
"results_file": "/root/.ansible_async/991487770448.3711",
...
}
Query by job id
ansible -i inventory db -b -m async_status -a "jid=991487770448.3711"
*Note: This will not show log or error of job"
Check log
ansible -i inventory multi -b -a "tail /var/log/messages"
ansible -i inventory multi -b -m shell -a "tail /var/log/messages | grep ansible-command | wc -l"
Cron
ansible -i inventory multi -b -m cron -a "name=something hour=4 job=/path/to/script.sh"
ansible -i inventory multi -b -m cron -a "name=something hour=4 job=/path/to/script.sh state=absent"
Git
ansible -i inventory multi -b -m git -a "repo=github_url_goes_here dest=/opt/app update=yes version=1.2.4"
Reuse SSH connection
Ansible configuration file ansible.cfg
[ssh_connection]
pipelining = True
Clean up
Destroy VMs
vagrant destroy -f
Playbooks
mkdir playbooks
cd playbooks
Inventory
[ec2]
35.175.148.144
[ec2:vars]
ansible_user=centos
ansible_ssh_private_key_file=~/.ssh/jeffgeerling_aws.pem
Create a shell script
shell-script.sh
# Install Apache.
yum install --quiet -y httpd httpd-devel
# Copy configuration files.
cp httpd.conf /etc/httpd/conf/httpd.conf
cp httpd-vhosts /etc/httpd/conf/httpd-vhosts.conf
# Start Apache and configure it to run at boot.
service httpd start
chconfig httpd on
Create playbook.yml
---
- name: Install Apache.
hosts: all
tasks:
- name: Install Apache
command: yum install --quiet -y httpd httpd-devel
- name: Copy configuration files.
command: >
cp httpd.conf /etc/httpd/conf/httpd.conf
- command: >
cp httpd-vhosts /etc/httpd/conf/httpd-vhosts.conf
- name: Start Apache and configure it to run at boot.
command: service httpd start
- command: chkconfig httpd on
or
---
- name: Install Apache.
hosts: all
tasks:
- name: Install Apache
shell: |
yum install --quiet -y httpd httpd-devel
cp httpd.conf /etc/httpd/conf/httpd.conf
cp httpd-vhosts /etc/httpd/conf/httpd-vhosts.conf
- name: Start Apache and configure it to run at boot.
command: service httpd start
- command: chkconfig httpd on
or
---
- name: Install Apache.
hosts: all
become: true
tasks:
- name: Install Apache
yum:
name:
- httpd
- httpd-devel
state: present
become: true
- name: Copy configuration files.
copy:
src: "{{ item.src }}"
dest: "{{ item.dest }}"
owner: root
group: root
mode: 0644
with_items:
- src: httpd.conf
dest: /etc/httpd/config/httpd.conf
- src: httpd-vhosts.conf
dest: /etc/httpd/conf/httpd-vhosts.conf
- name: Make sure Apache is started now and at boot.
service:
name: httpd
state: started
enabled: true
- command: >
cp httpd-vhosts /etc/httpd/conf/httpd-vhosts.conf
- name: Start Apache and configure it to run at boot.
command: service httpd start
- command: chkconfig httpd on
run on all nodes except one
ansible-playbook -i inventory multi --limit db
ansible-playbook -i inventory multi --limit=192.168.60.6
ansible-playbook -i inventory multi --limit="!:db"
List inventory
ansible-inventory --list i inventory
References
Learning – Ansible 101 – Episode 2 – Ad-hoc tasks and Inventory
Learning - Ansible 101 - Episode 2 - Ad-hoc tasks and Inventory
Run ad-hoc tasks using Ansible.
Vagrant Cloud
Vagrant init
vagrant init geerlingguy/centos7
Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "geerlingguy/centos7"
config.ssh.insert_key = false
config.vm.synced_folder ".", "/vagrent", disabled: true
config.vm.provider :virtualbox do |v|
v.memory= 256
v.linked_clone = true
end
# App server 1
config.vm.define "app1" do |app|
app.vm.hostname = "orc-app1.test"
app.vm.network :private_network, ip: "192.168.60.4"
end
# App server 2
config.vm.define "app2" do |app|
app.vm.hostname = "orc-app2.test"
app.vm.network :private_network, ip: "192.168.60.5"
end
# DB server
config.vm.define "db" do |db|
db.vm.hostname = "orc-db.test"
db.vm.network :private_network, ip: "192.168.60.6"
end
end
vagrant up
Create inventory
file
# Application servers
[app]
192.168.60.4
192.168.60.5
# Database server
[db]
192.168.60.6
# Group has all the servers
[multi:children]
app
db
# Variable for all the servers
[multi:vars]
ansible_ssh_user=vagrant
ansible_ssh_private_key_file=~/.vagrant.d/insecure_private_key
Run Ansible
ansible multi -i inventory -a "hostname"
Note: accept host key if prompt, or change the .ssh/config file to ignore host key
To run one by one,
ansible multi -i inventory -a "hostname" -f 1
Run ansible to query configuration
ansible -i inventory db -m setup
Install NTP
ansible -i inventory multi -b -m yum -a "name=ntp state=present"
ansible -i inventory multi --become -m yum -a "name=ntp state=present"
Note: Run the second time, the status will be SUCCESS, not CHANGED
Ask for sudo
password
ansible -i inventory multi -K -m yum -a "name=ntp state=present"
Note: for this image, the vagrant user has password vargent
Check service status
ansible -i inventory multi -b -m service -a "name=ntpd state=started enabled=yes"
Check service options
-
Use google search "ansible service module".
-
Use
ansible-doc
command
ansible-doc service
NTP commands
ansible -i inventory multi -b -a "service ntpd stop"
ansible -i inventory multi -b -a "ntpdate -q 0.rhel.pool.ntp.org"
my_sql
Setup user on mysql server.
ansible -i inventory db -b -m mysql_user -a "name=django host=% password=12345 priv=*.*:ALL state=present"
Limit to one server
ansible -i inventory multi -a "free -m" --limit '192.168.60.4'
ansible -i inventory multi -a "free -m" --limit '*.4'
ansible -i inventory multi -a "free -m" --limit '!192.168.60.4'
ansible -i inventory multi -a "free -m" --limit '!192.168.60.4:!192.168.60.5'
References
Learning – Ansible 101 – Posts List
Learning - Ansible 101 - Posts List
This is the list of posts for Learning - Ansible 101
References
Learning - Ansible 101 - Episode 1 - Introduction to Ansible
Learning - Ansible 101 - Episode 2 - Ad-hoc tasks and Inventory
Learning - Ansible 101 - Episode 3 - Introduction to Playbooks
Create Multi Related Posts in WordPress
Create Multi Related Posts in WordPress
Create a Post with Posts List
# <Post Title> - Posts List
<Post contain>
## References
[<SubPost_Title1>](<SubPost_URL1>)
[<SubPost_Title2>](<SubPost_URL2>)
[<SubPost_Title3>](<SubPost_URL3>)
[<SubPost_Title4>](<SubPost_URL4>)
SubPost
Add following script after each subpost summary.
Note: The 8888 is the subpost id, 9999 is the index post (Posts List) id. This will create a button on current page (8888) to display Posts List
# <Post Title>
<Post contain>
<div><button id='related_posts_8888'>Display Learning Posts</button>
<script type="text/javascript">
(function($) {
$(document).ready(function() {
$("#related_posts_8888").click(function(event) {
el = $(document.getElementById( $(this).attr('id') ).parentElement);
$.get("?p=9999", function(data, status) {
el.html(/h2>References<\/h2>([\s\S]*?)<\/div>/.exec(data)[1]);
});
});
});
}) (jQuery);
</script>
</div>
Preset Tmux Windows
Preset Tmux Windows
To preset Tmux windows, following script can be used. It also issues ssh command to host which has same name as window name.
#!/bin/bash
WINDOWS="window_name1 window_name2 window_name3"
for each in $WINDOWS
do
if ! tmux has-session -t 0:$each; then
tmux new-window -n $each ssh $each
fi
done
tmux attach
References
Restore tmux session after reboot
Check If Window With a Specific Name Exists. If It Does Attach to it; Otherwise Create it and Run Command?
WordPress Login Error – incorrect reCAPTCHA
WordPress Login Error - incorrect reCAPTCHA
Error
Got following error when trying to login to WordPress.
Authentication failed.
You have entered an incorrect reCAPTCHA value.
Resolution
Check Remember me
checkbox or switch to private window before relogin.