Setting dynamic inventory hostnames from Ansible The 2019 Stack Overflow Developer Survey Results Are InSharing ansible variable between playsEC2/Route53: How do I assign my new domain name to an instance?Amazon EC2 hostnamesGet ec2 name from instance without public ipAnsible: setting hostname over inventoryAnsible AWS dynamic inventory: `./ec2.py --list` unauthorizedAnsible EC2 Hosts Script Missing InstanceAnsible fact from another hostAWS: Using Route53 for development EC2 instancesPrivate Route53 zone and dynamic DNSroute a Route 53 not sending traffic to ec2 instance
What is the motivation for a law requiring 2 parties to consent for recording a conversation
Right tool to dig six foot holes?
The difference between dialogue marks
Where to refill my bottle in India?
Apparent duplicates between Haynes service instructions and MOT
Are there incongruent pythagorean triangles with the same perimeter and same area?
Multiply Two Integer Polynomials
How come people say “Would of”?
Is a "Democratic" Oligarchy-Style System Possible?
How to save as into a customized destination on macOS?
If I score a critical hit on an 18 or higher, what are my chances of getting a critical hit if I roll 3d20?
Is an up-to-date browser secure on an out-of-date OS?
What are the motivations for publishing new editions of an existing textbook, beyond new discoveries in a field?
Feature engineering suggestion required
Did 3000BC Egyptians use meteoric iron weapons?
Falsification in Math vs Science
Protecting Dualbooting Windows from dangerous code (like rm -rf)
Worn-tile Scrabble
What do hard-Brexiteers want with respect to the Irish border?
Is bread bad for ducks?
How to type this arrow in math mode?
What could be the right powersource for 15 seconds lifespan disposable giant chainsaw?
Why didn't the Event Horizon Telescope team mention Sagittarius A*?
Have you ever entered Singapore using a different passport or name?
Setting dynamic inventory hostnames from Ansible
The 2019 Stack Overflow Developer Survey Results Are InSharing ansible variable between playsEC2/Route53: How do I assign my new domain name to an instance?Amazon EC2 hostnamesGet ec2 name from instance without public ipAnsible: setting hostname over inventoryAnsible AWS dynamic inventory: `./ec2.py --list` unauthorizedAnsible EC2 Hosts Script Missing InstanceAnsible fact from another hostAWS: Using Route53 for development EC2 instancesPrivate Route53 zone and dynamic DNSroute a Route 53 not sending traffic to ec2 instance
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;
I'm setting up a bunch of up to 150 temporary EC2 servers for a hands-on tutorial session.
I'm successfully creating EC2 inventory dynamically and running roles against the instances that are created to configure everything, but I need to set a straightforward hostname for each one. To that end I have a file that contains a simple list of names that I want to use for the hostnames. This is in my playbook:
---
- hosts: localhost
connection: local
gather_facts: false
tasks:
- name: Provision a set of instances
ec2:
key_name: ubuntu
instance_type: t2.micro
image: " ami_id "
wait: true
exact_count: server_count
count_tag:
Name: Tutorial
instance_tags:
Name: Tutorial
groups: ['SSH', 'Web']
register: ec2
- name: Add all instance public IPs to host group
add_host: hostname= item.public_ip groups=ec2hosts
loop: " ec2.instances "
- name: Set a host name for each instance in DNS
route53:
zone: tutorial_domain
record: "name. tutorial_domain "
state: present
type: A
ttl: 120
value: item.public_ip
wait: yes
loop: " ec2.instances "
It really comes down to that record: "name. tutorial_domain "
line - how can I look up a name in my list of names and use it as a hostname, turning name
into some_dynamic_name
?
I have seen the lookup plugins, but they all seem to be focused on looping over the entire contents of some external file - but I'm already looping over the list of servers, and that list may be shorter than the list of names (e.g. I may have only 10 servers). Ideally I want to read the list of names into an array once, then use the index from the server loop to pick the name (i.e. so the 3rd server would get the 3rd name). How do I do that in ansible? Or is there a better approach?
amazon-ec2 ansible amazon-route53
add a comment |
I'm setting up a bunch of up to 150 temporary EC2 servers for a hands-on tutorial session.
I'm successfully creating EC2 inventory dynamically and running roles against the instances that are created to configure everything, but I need to set a straightforward hostname for each one. To that end I have a file that contains a simple list of names that I want to use for the hostnames. This is in my playbook:
---
- hosts: localhost
connection: local
gather_facts: false
tasks:
- name: Provision a set of instances
ec2:
key_name: ubuntu
instance_type: t2.micro
image: " ami_id "
wait: true
exact_count: server_count
count_tag:
Name: Tutorial
instance_tags:
Name: Tutorial
groups: ['SSH', 'Web']
register: ec2
- name: Add all instance public IPs to host group
add_host: hostname= item.public_ip groups=ec2hosts
loop: " ec2.instances "
- name: Set a host name for each instance in DNS
route53:
zone: tutorial_domain
record: "name. tutorial_domain "
state: present
type: A
ttl: 120
value: item.public_ip
wait: yes
loop: " ec2.instances "
It really comes down to that record: "name. tutorial_domain "
line - how can I look up a name in my list of names and use it as a hostname, turning name
into some_dynamic_name
?
I have seen the lookup plugins, but they all seem to be focused on looping over the entire contents of some external file - but I'm already looping over the list of servers, and that list may be shorter than the list of names (e.g. I may have only 10 servers). Ideally I want to read the list of names into an array once, then use the index from the server loop to pick the name (i.e. so the 3rd server would get the 3rd name). How do I do that in ansible? Or is there a better approach?
amazon-ec2 ansible amazon-route53
add a comment |
I'm setting up a bunch of up to 150 temporary EC2 servers for a hands-on tutorial session.
I'm successfully creating EC2 inventory dynamically and running roles against the instances that are created to configure everything, but I need to set a straightforward hostname for each one. To that end I have a file that contains a simple list of names that I want to use for the hostnames. This is in my playbook:
---
- hosts: localhost
connection: local
gather_facts: false
tasks:
- name: Provision a set of instances
ec2:
key_name: ubuntu
instance_type: t2.micro
image: " ami_id "
wait: true
exact_count: server_count
count_tag:
Name: Tutorial
instance_tags:
Name: Tutorial
groups: ['SSH', 'Web']
register: ec2
- name: Add all instance public IPs to host group
add_host: hostname= item.public_ip groups=ec2hosts
loop: " ec2.instances "
- name: Set a host name for each instance in DNS
route53:
zone: tutorial_domain
record: "name. tutorial_domain "
state: present
type: A
ttl: 120
value: item.public_ip
wait: yes
loop: " ec2.instances "
It really comes down to that record: "name. tutorial_domain "
line - how can I look up a name in my list of names and use it as a hostname, turning name
into some_dynamic_name
?
I have seen the lookup plugins, but they all seem to be focused on looping over the entire contents of some external file - but I'm already looping over the list of servers, and that list may be shorter than the list of names (e.g. I may have only 10 servers). Ideally I want to read the list of names into an array once, then use the index from the server loop to pick the name (i.e. so the 3rd server would get the 3rd name). How do I do that in ansible? Or is there a better approach?
amazon-ec2 ansible amazon-route53
I'm setting up a bunch of up to 150 temporary EC2 servers for a hands-on tutorial session.
I'm successfully creating EC2 inventory dynamically and running roles against the instances that are created to configure everything, but I need to set a straightforward hostname for each one. To that end I have a file that contains a simple list of names that I want to use for the hostnames. This is in my playbook:
---
- hosts: localhost
connection: local
gather_facts: false
tasks:
- name: Provision a set of instances
ec2:
key_name: ubuntu
instance_type: t2.micro
image: " ami_id "
wait: true
exact_count: server_count
count_tag:
Name: Tutorial
instance_tags:
Name: Tutorial
groups: ['SSH', 'Web']
register: ec2
- name: Add all instance public IPs to host group
add_host: hostname= item.public_ip groups=ec2hosts
loop: " ec2.instances "
- name: Set a host name for each instance in DNS
route53:
zone: tutorial_domain
record: "name. tutorial_domain "
state: present
type: A
ttl: 120
value: item.public_ip
wait: yes
loop: " ec2.instances "
It really comes down to that record: "name. tutorial_domain "
line - how can I look up a name in my list of names and use it as a hostname, turning name
into some_dynamic_name
?
I have seen the lookup plugins, but they all seem to be focused on looping over the entire contents of some external file - but I'm already looping over the list of servers, and that list may be shorter than the list of names (e.g. I may have only 10 servers). Ideally I want to read the list of names into an array once, then use the index from the server loop to pick the name (i.e. so the 3rd server would get the 3rd name). How do I do that in ansible? Or is there a better approach?
amazon-ec2 ansible amazon-route53
amazon-ec2 ansible amazon-route53
asked Apr 6 at 21:15
SynchroSynchro
1,83041829
1,83041829
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
You can use the zip
filter to combine your list of instances with a list of names, like this:
---
- hosts: localhost
gather_facts: false
vars:
tutorial_domain: example.com
ec2:
instances:
- public_ip: 1.2.3.4
- public_ip: 2.3.4.5
names:
- blue-duck
- red-panda
tasks:
- debug:
msg:
route53:
zone: " tutorial_domain "
record: " item.1 .tutorial_domain"
state: present
type: A
ttl: 120
value: " item.0.public_ip "
wait: yes
loop: "zip(names)"
In older versions of Ansible, you would accomplish the same thing with a with_together
loop.
Thank you. This works nicely. A hitch I've since run into is that if I want to add more instances later, the host names will restart from the beginning, so I guess I would need to calculate an offset into the names array to skip existing hosts.
– Synchro
Apr 7 at 23:55
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "2"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fserverfault.com%2fquestions%2f961845%2fsetting-dynamic-inventory-hostnames-from-ansible%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
You can use the zip
filter to combine your list of instances with a list of names, like this:
---
- hosts: localhost
gather_facts: false
vars:
tutorial_domain: example.com
ec2:
instances:
- public_ip: 1.2.3.4
- public_ip: 2.3.4.5
names:
- blue-duck
- red-panda
tasks:
- debug:
msg:
route53:
zone: " tutorial_domain "
record: " item.1 .tutorial_domain"
state: present
type: A
ttl: 120
value: " item.0.public_ip "
wait: yes
loop: "zip(names)"
In older versions of Ansible, you would accomplish the same thing with a with_together
loop.
Thank you. This works nicely. A hitch I've since run into is that if I want to add more instances later, the host names will restart from the beginning, so I guess I would need to calculate an offset into the names array to skip existing hosts.
– Synchro
Apr 7 at 23:55
add a comment |
You can use the zip
filter to combine your list of instances with a list of names, like this:
---
- hosts: localhost
gather_facts: false
vars:
tutorial_domain: example.com
ec2:
instances:
- public_ip: 1.2.3.4
- public_ip: 2.3.4.5
names:
- blue-duck
- red-panda
tasks:
- debug:
msg:
route53:
zone: " tutorial_domain "
record: " item.1 .tutorial_domain"
state: present
type: A
ttl: 120
value: " item.0.public_ip "
wait: yes
loop: "zip(names)"
In older versions of Ansible, you would accomplish the same thing with a with_together
loop.
Thank you. This works nicely. A hitch I've since run into is that if I want to add more instances later, the host names will restart from the beginning, so I guess I would need to calculate an offset into the names array to skip existing hosts.
– Synchro
Apr 7 at 23:55
add a comment |
You can use the zip
filter to combine your list of instances with a list of names, like this:
---
- hosts: localhost
gather_facts: false
vars:
tutorial_domain: example.com
ec2:
instances:
- public_ip: 1.2.3.4
- public_ip: 2.3.4.5
names:
- blue-duck
- red-panda
tasks:
- debug:
msg:
route53:
zone: " tutorial_domain "
record: " item.1 .tutorial_domain"
state: present
type: A
ttl: 120
value: " item.0.public_ip "
wait: yes
loop: "zip(names)"
In older versions of Ansible, you would accomplish the same thing with a with_together
loop.
You can use the zip
filter to combine your list of instances with a list of names, like this:
---
- hosts: localhost
gather_facts: false
vars:
tutorial_domain: example.com
ec2:
instances:
- public_ip: 1.2.3.4
- public_ip: 2.3.4.5
names:
- blue-duck
- red-panda
tasks:
- debug:
msg:
route53:
zone: " tutorial_domain "
record: " item.1 .tutorial_domain"
state: present
type: A
ttl: 120
value: " item.0.public_ip "
wait: yes
loop: "zip(names)"
In older versions of Ansible, you would accomplish the same thing with a with_together
loop.
answered Apr 6 at 22:42
larskslarsks
35k593143
35k593143
Thank you. This works nicely. A hitch I've since run into is that if I want to add more instances later, the host names will restart from the beginning, so I guess I would need to calculate an offset into the names array to skip existing hosts.
– Synchro
Apr 7 at 23:55
add a comment |
Thank you. This works nicely. A hitch I've since run into is that if I want to add more instances later, the host names will restart from the beginning, so I guess I would need to calculate an offset into the names array to skip existing hosts.
– Synchro
Apr 7 at 23:55
Thank you. This works nicely. A hitch I've since run into is that if I want to add more instances later, the host names will restart from the beginning, so I guess I would need to calculate an offset into the names array to skip existing hosts.
– Synchro
Apr 7 at 23:55
Thank you. This works nicely. A hitch I've since run into is that if I want to add more instances later, the host names will restart from the beginning, so I guess I would need to calculate an offset into the names array to skip existing hosts.
– Synchro
Apr 7 at 23:55
add a comment |
Thanks for contributing an answer to Server Fault!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fserverfault.com%2fquestions%2f961845%2fsetting-dynamic-inventory-hostnames-from-ansible%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown