Terraform user data pass instance details
I need to set the host name & default network in the user data for my gcp instance with terraform, (user data template yml as below)
serverInfo:
serverId: 1
hostname: ${hostname}
defaultNetwork: ${defaultNetwork}
however, after some investigation I realized that this is quite difficult. As far as I understood, the user data is competed before the actual instance creation (correct me if wrong).But the hostname and network details will become available after the instance is created. Could you please suggest me a better way to capture that info and update it in user data?
terraform
add a comment |
I need to set the host name & default network in the user data for my gcp instance with terraform, (user data template yml as below)
serverInfo:
serverId: 1
hostname: ${hostname}
defaultNetwork: ${defaultNetwork}
however, after some investigation I realized that this is quite difficult. As far as I understood, the user data is competed before the actual instance creation (correct me if wrong).But the hostname and network details will become available after the instance is created. Could you please suggest me a better way to capture that info and update it in user data?
terraform
Why do you need to set this? Also it might be worth showing a slightly expanded example where you show the Terraform code for creating your user data and also creating the instance with the user data.
– ydaetskcoR
Nov 25 '18 at 9:31
add a comment |
I need to set the host name & default network in the user data for my gcp instance with terraform, (user data template yml as below)
serverInfo:
serverId: 1
hostname: ${hostname}
defaultNetwork: ${defaultNetwork}
however, after some investigation I realized that this is quite difficult. As far as I understood, the user data is competed before the actual instance creation (correct me if wrong).But the hostname and network details will become available after the instance is created. Could you please suggest me a better way to capture that info and update it in user data?
terraform
I need to set the host name & default network in the user data for my gcp instance with terraform, (user data template yml as below)
serverInfo:
serverId: 1
hostname: ${hostname}
defaultNetwork: ${defaultNetwork}
however, after some investigation I realized that this is quite difficult. As far as I understood, the user data is competed before the actual instance creation (correct me if wrong).But the hostname and network details will become available after the instance is created. Could you please suggest me a better way to capture that info and update it in user data?
terraform
terraform
asked Nov 24 '18 at 23:31
ImranImran
698423
698423
Why do you need to set this? Also it might be worth showing a slightly expanded example where you show the Terraform code for creating your user data and also creating the instance with the user data.
– ydaetskcoR
Nov 25 '18 at 9:31
add a comment |
Why do you need to set this? Also it might be worth showing a slightly expanded example where you show the Terraform code for creating your user data and also creating the instance with the user data.
– ydaetskcoR
Nov 25 '18 at 9:31
Why do you need to set this? Also it might be worth showing a slightly expanded example where you show the Terraform code for creating your user data and also creating the instance with the user data.
– ydaetskcoR
Nov 25 '18 at 9:31
Why do you need to set this? Also it might be worth showing a slightly expanded example where you show the Terraform code for creating your user data and also creating the instance with the user data.
– ydaetskcoR
Nov 25 '18 at 9:31
add a comment |
2 Answers
2
active
oldest
votes
- In case you have everything in one backend (you have one terraform state that manages everything), have you checked if any of the output parameters of the gcp instance is valid for your purpose? You can use them with a code snippet like in this examples:
google_compute_instance.name_of_your_instance.network_interface.0.network_ip
google_compute_instance.name_of_your_instance.self_link
- If you have the gcp instance in a terraform backend different from the one in which you use the user data, maybe you can retrieve the details with
terraform_remote_state
(See more in https://www.terraform.io/docs/providers/terraform/d/remote_state.html). The nice thing is that this remote state is read only so nothing you do with it can affect your gcp instance.
1
Thank you very much for the reply, it is close but I need to pass net-mask, network , and broadcast details in user data as well. I extract that info from the cidr info I provided initially, but sometimes the cidr is something like 172.16.10.0/25 but the cloud decided to create a network 172.16.8.0 and it breaks here. So trying to get the info from the actual network created.
– Imran
Nov 25 '18 at 22:25
add a comment |
I found a way to fix the issue, so in case of network details, we can get hold of the network as below, and then extract the details about it such as cidr etc. For the host name however, we can specify the name in user data and the cloud-init will set the name for us.
data "google_compute_subnetwork" "default-subnetwork" {
project = "my-project"
name = "my-subnetwork"
region = "us-central1"
}
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
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%2fstackoverflow.com%2fquestions%2f53463322%2fterraform-user-data-pass-instance-details%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
- In case you have everything in one backend (you have one terraform state that manages everything), have you checked if any of the output parameters of the gcp instance is valid for your purpose? You can use them with a code snippet like in this examples:
google_compute_instance.name_of_your_instance.network_interface.0.network_ip
google_compute_instance.name_of_your_instance.self_link
- If you have the gcp instance in a terraform backend different from the one in which you use the user data, maybe you can retrieve the details with
terraform_remote_state
(See more in https://www.terraform.io/docs/providers/terraform/d/remote_state.html). The nice thing is that this remote state is read only so nothing you do with it can affect your gcp instance.
1
Thank you very much for the reply, it is close but I need to pass net-mask, network , and broadcast details in user data as well. I extract that info from the cidr info I provided initially, but sometimes the cidr is something like 172.16.10.0/25 but the cloud decided to create a network 172.16.8.0 and it breaks here. So trying to get the info from the actual network created.
– Imran
Nov 25 '18 at 22:25
add a comment |
- In case you have everything in one backend (you have one terraform state that manages everything), have you checked if any of the output parameters of the gcp instance is valid for your purpose? You can use them with a code snippet like in this examples:
google_compute_instance.name_of_your_instance.network_interface.0.network_ip
google_compute_instance.name_of_your_instance.self_link
- If you have the gcp instance in a terraform backend different from the one in which you use the user data, maybe you can retrieve the details with
terraform_remote_state
(See more in https://www.terraform.io/docs/providers/terraform/d/remote_state.html). The nice thing is that this remote state is read only so nothing you do with it can affect your gcp instance.
1
Thank you very much for the reply, it is close but I need to pass net-mask, network , and broadcast details in user data as well. I extract that info from the cidr info I provided initially, but sometimes the cidr is something like 172.16.10.0/25 but the cloud decided to create a network 172.16.8.0 and it breaks here. So trying to get the info from the actual network created.
– Imran
Nov 25 '18 at 22:25
add a comment |
- In case you have everything in one backend (you have one terraform state that manages everything), have you checked if any of the output parameters of the gcp instance is valid for your purpose? You can use them with a code snippet like in this examples:
google_compute_instance.name_of_your_instance.network_interface.0.network_ip
google_compute_instance.name_of_your_instance.self_link
- If you have the gcp instance in a terraform backend different from the one in which you use the user data, maybe you can retrieve the details with
terraform_remote_state
(See more in https://www.terraform.io/docs/providers/terraform/d/remote_state.html). The nice thing is that this remote state is read only so nothing you do with it can affect your gcp instance.
- In case you have everything in one backend (you have one terraform state that manages everything), have you checked if any of the output parameters of the gcp instance is valid for your purpose? You can use them with a code snippet like in this examples:
google_compute_instance.name_of_your_instance.network_interface.0.network_ip
google_compute_instance.name_of_your_instance.self_link
- If you have the gcp instance in a terraform backend different from the one in which you use the user data, maybe you can retrieve the details with
terraform_remote_state
(See more in https://www.terraform.io/docs/providers/terraform/d/remote_state.html). The nice thing is that this remote state is read only so nothing you do with it can affect your gcp instance.
answered Nov 25 '18 at 18:58
ArconesArcones
381513
381513
1
Thank you very much for the reply, it is close but I need to pass net-mask, network , and broadcast details in user data as well. I extract that info from the cidr info I provided initially, but sometimes the cidr is something like 172.16.10.0/25 but the cloud decided to create a network 172.16.8.0 and it breaks here. So trying to get the info from the actual network created.
– Imran
Nov 25 '18 at 22:25
add a comment |
1
Thank you very much for the reply, it is close but I need to pass net-mask, network , and broadcast details in user data as well. I extract that info from the cidr info I provided initially, but sometimes the cidr is something like 172.16.10.0/25 but the cloud decided to create a network 172.16.8.0 and it breaks here. So trying to get the info from the actual network created.
– Imran
Nov 25 '18 at 22:25
1
1
Thank you very much for the reply, it is close but I need to pass net-mask, network , and broadcast details in user data as well. I extract that info from the cidr info I provided initially, but sometimes the cidr is something like 172.16.10.0/25 but the cloud decided to create a network 172.16.8.0 and it breaks here. So trying to get the info from the actual network created.
– Imran
Nov 25 '18 at 22:25
Thank you very much for the reply, it is close but I need to pass net-mask, network , and broadcast details in user data as well. I extract that info from the cidr info I provided initially, but sometimes the cidr is something like 172.16.10.0/25 but the cloud decided to create a network 172.16.8.0 and it breaks here. So trying to get the info from the actual network created.
– Imran
Nov 25 '18 at 22:25
add a comment |
I found a way to fix the issue, so in case of network details, we can get hold of the network as below, and then extract the details about it such as cidr etc. For the host name however, we can specify the name in user data and the cloud-init will set the name for us.
data "google_compute_subnetwork" "default-subnetwork" {
project = "my-project"
name = "my-subnetwork"
region = "us-central1"
}
add a comment |
I found a way to fix the issue, so in case of network details, we can get hold of the network as below, and then extract the details about it such as cidr etc. For the host name however, we can specify the name in user data and the cloud-init will set the name for us.
data "google_compute_subnetwork" "default-subnetwork" {
project = "my-project"
name = "my-subnetwork"
region = "us-central1"
}
add a comment |
I found a way to fix the issue, so in case of network details, we can get hold of the network as below, and then extract the details about it such as cidr etc. For the host name however, we can specify the name in user data and the cloud-init will set the name for us.
data "google_compute_subnetwork" "default-subnetwork" {
project = "my-project"
name = "my-subnetwork"
region = "us-central1"
}
I found a way to fix the issue, so in case of network details, we can get hold of the network as below, and then extract the details about it such as cidr etc. For the host name however, we can specify the name in user data and the cloud-init will set the name for us.
data "google_compute_subnetwork" "default-subnetwork" {
project = "my-project"
name = "my-subnetwork"
region = "us-central1"
}
answered Dec 22 '18 at 11:10
ImranImran
698423
698423
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- 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%2fstackoverflow.com%2fquestions%2f53463322%2fterraform-user-data-pass-instance-details%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
Why do you need to set this? Also it might be worth showing a slightly expanded example where you show the Terraform code for creating your user data and also creating the instance with the user data.
– ydaetskcoR
Nov 25 '18 at 9:31