Learning - Introduction to AWS Networking
References
Introduction to AWS Networking
AWS VPC Basics - Understanding what is VPC and Calculating CIDR for VPC and Subnets
Introduction to AWS Networking
AWS VPC Basics - Understanding what is VPC and Calculating CIDR for VPC and Subnets
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"
For idempotence, can update_cache task
Testing Ansible roles using Molecule.
Timeout in 3600 seconds.
ansible -i inventory multi -b -B 3600 -P 0 -a "yum -y update"
Using -P
for seconds
ansible -i inventory multi -b -B 3600 -P 0 -a "yum -y update"
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"
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"
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"
ansible -i inventory multi -b -m git -a "repo=github_url_goes_here dest=/opt/app update=yes version=1.2.4"
Ansible configuration file ansible.cfg
[ssh_connection]
pipelining = True
Destroy VMs
vagrant destroy -f
mkdir playbooks
cd playbooks
[ec2]
35.175.148.144
[ec2:vars]
ansible_user=centos
ansible_ssh_private_key_file=~/.ssh/jeffgeerling_aws.pem
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
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"
ansible-inventory --list i inventory
Run ad-hoc tasks using Ansible.
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
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
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
ansible -i inventory db -m setup
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
sudo
passwordansible -i inventory multi -K -m yum -a "name=ntp state=present"
Note: for this image, the vagrant user has password vargent
ansible -i inventory multi -b -m service -a "name=ntpd state=started enabled=yes"
Use google search "ansible service module".
Use ansible-doc
command
ansible-doc service
ansible -i inventory multi -b -a "service ntpd stop"
ansible -i inventory multi -b -a "ntpdate -q 0.rhel.pool.ntp.org"
Setup user on mysql server.
ansible -i inventory db -b -m mysql_user -a "name=django host=% password=12345 priv=*.*:ALL state=present"
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'
This is the list of posts for Learning - Ansible 101
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
# <Post Title> - Posts List
<Post contain>
## References
[<SubPost_Title1>](<SubPost_URL1>)
[<SubPost_Title2>](<SubPost_URL2>)
[<SubPost_Title3>](<SubPost_URL3>)
[<SubPost_Title4>](<SubPost_URL4>)
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>
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
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?
Got following error when trying to login to WordPress.
Authentication failed.
You have entered an incorrect reCAPTCHA value.
Check Remember me
checkbox or switch to private window before relogin.